长任务不该指望笔记本一直开着、Wi-Fi 一直不断。让 agent 待在一台常开的机器上,你手里每台设备只是通向它的一扇窗口——窗口随时可以关掉再回来,什么都不会丢。这就是「私有 PWA」。
把它拆成两半看,一半是「PWA」,一半是「私有」。
形态是网页,体验像 App。
它只在你的私有网络里能开,不是公网上的网页。
在私有 PWA 之前,大家一路试过来,每一层都留下一个会断的地方。
在终端里跑 claude,人得出门。合上盖子,机器睡眠,agent 跟着睡。一小时后再打开,那 20 分钟一分钟也没少。
agent 搬到了不睡的服务器,但连接活多久、它就活多久。断一下网、换个网络,SSH 断掉,活才干到一半。--resume 能接回对话,接不回这段时间该干的活。
tmux 让终端在服务器上一直活着。代价是一串杂务:每次记得先开 tmux、记住哪个会话是哪段对话、每台设备装终端加密钥、干完也没人告诉你。
从浏览器上看到的东西,到你机器上真正干活的 agent,中间隔着几层。exe 就是其中最容易被忽略、也最关键的那一层。
所以 exe 并不是「把 CLI 变成网页」。它是给 tmux 和 Claude Code 套了一层网页外壳——底下还是那套东西,只是原先由你手动敲的那些杂务,现在由它接手。文章里说得直白:窗口底下仍然是 tmux,tmux 做的事没有变。
它带来的四件事:每段对话都是机器上的一个会话;一栏列出全部会话,绿点表示还在干活、黑点表示在等你;每台设备打开的都是同一段对话;干完时手机会通知你。
通往 Claude Code 的窗口,就是你机器上的一个 shell,背后是你的代码和登录着的各个账号。它不能是公网上的网页。
exe 靠 Tailscale 来保证这一点:它只监听机器在这张私有网络里的地址,所以桌面能从你的设备打开,别处都打不开——路由器上一个端口都不用开。在这之上还有一个 API 令牌,也就是桌面的密码。
再给它加一层 HTTPS(用 Tailscale Serve),桌面仍然只在你的私有网络里,但「安装成应用」和「接收通知」就有了前提。
剩下的就是那台机器本身。最好是放在家里的一台小机器,比如 NVIDIA DGX Spark 或者 Mac mini:安静、在架子上占不了多少地方,可以日夜开着。放在家里,Tailscale 照样连得到它。
它要干的活不只是挂着一个终端。agent 的构建和测试在上面跑,给 agent 当沙箱的虚拟机在上面跑,你自己想跑的模型也在上面跑——这些都要 CPU 核心、内存和 GPU。
这样的机器也可以在云上租,但不划算:大内存的 GPU 按小时计费,而它在两次任务之间也不能关,因为 agent 就住在上面。一年开下来,租金比买下这台机器还贵。自己买的机器,钱只付一次。
前置:一台一直开着的 Linux 机器或 Mac,上面有 tmux、Claude Code 已装好并登录;这台机器和你打算用来看的每台设备,都装上 Tailscale。
然后打开 Claude Code,交给它一件要干很久的活,合上盖子。
本文是对 v2core 博客《Claude Code 应该放在私有 PWA 里》的整理与图解,加上一点自己的拆解。原文、入门文档和源码在下面。