← 返回 Tony's Lab
讨论整理

把 Claude Code 放进
私有 PWA

长任务不该指望笔记本一直开着、Wi-Fi 一直不断。让 agent 待在一台常开的机器上,你手里每台设备只是通向它的一扇窗口——窗口随时可以关掉再回来,什么都不会丢。这就是「私有 PWA」。

发布于 2026-10-14 · 整理自 v2core 博客《Claude Code 应该放在私有 PWA 里》
合盖测试台 待机
exe · 通知 Claude Code finished 点一下打开那段对话
笔记本本地跑claude0%
待机
SSH 连服务器ssh → claude0%
待机
服务器 + tmuxtmux → claude0%
待机
私有 PWA(exe)窗口 → exe → tmux → claude0%
待机
按下「开始长任务」,让四条路同时跑一个 20 分钟的任务。
活着 / 干完了 停了 还在跑,但没人告诉你
形态

什么是私有 PWA

把它拆成两半看,一半是「PWA」,一半是「私有」。

PWA渐进式 Web 应用

形态是网页,体验像 App。

  • 能装到主屏,有独立图标和窗口
  • 断线自己重连,还能发系统通知
  • 每台设备本来就有浏览器 → 不用装终端 App、不用拷 SSH 密钥

私有只有你能打开

它只在你的私有网络里能开,不是公网上的网页。

  • 窗口背后是你机器上的 shell、你的代码、你登录的账号
  • 做法:Tailscale 私有网络 + 一个 API 令牌当密码
  • 你的笔记本、平板、手机都能开,别处都开不了
一句话:私有 PWA 是一个只有你能打开、却能像 App 一样安装的网页。它是一扇窗口,不是那台机器本身。
替换

它取代了什么

在私有 PWA 之前,大家一路试过来,每一层都留下一个会断的地方。

LA‑01 · 本地

盖子不能合

在终端里跑 claude,人得出门。合上盖子,机器睡眠,agent 跟着睡。一小时后再打开,那 20 分钟一分钟也没少。

LA‑02 · SSH

Wi‑Fi 不能断

agent 搬到了不睡的服务器,但连接活多久、它就活多久。断一下网、换个网络,SSH 断掉,活才干到一半。--resume 能接回对话,接不回这段时间该干的活。

LA‑03 · tmux

能活,但杂务归你

tmux 让终端在服务器上一直活着。代价是一串杂务:每次记得先开 tmux、记住哪个会话是哪段对话、每台设备装终端加密钥、干完也没人告诉你。

这些都不难,只是杂务——而且天天都要重来一遍。私有 PWA 做的事,就是把这串杂务从你手里交给应用。
链路

中间那个程序:exe

从浏览器上看到的东西,到你机器上真正干活的 agent,中间隔着几层。exe 就是其中最容易被忽略、也最关键的那一层。

第 1 层窗口
你的手机、平板、笔记本上那个网页。它只是一个视图——随时可以关掉标签页、合上盖子、断网,再回来重新连上。 浏览器 · PWA
第 2 层私有网络
把窗口送到机器的那条路。Tailscale 架在你自己的设备之间,不经过公网。 Tailscale · 只此一条
第 3 层exe 服务
装在那台常开机器上的程序。对外提供浏览器里的「桌面」,对内替你启动、命名、连接 tmux 会话,还负责重连、状态灯和完成通知。 exe · 跑在常开机器上
第 4 层tmux
让终端在服务器上一直活着,没人连着也一样。会话真正待的地方。 tmux · 一直活着
第 5 层claude
真正干活的那个 agent。从头到尾没变过。 Claude Code CLI

所以 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。

1
装 exe。脚本会问它该监听哪里,选 Tailscale 的地址;它会建议一个生成好的 API 令牌,并把令牌连同桌面地址一起打印出来。 curl -fsSL https://exe.v2core.com/install.sh | sh
2
给桌面加 HTTPS。用 Tailscale Serve,桌面仍然只在你的私有网络里。
3
在手机上打开桌面,按提示粘贴令牌,然后把它安装成应用——iPhone 上是「添加到主屏幕」。
4
打开通知。之后 agent 干完活,手机会提示 Claude Code finished。

然后打开 Claude Code,交给它一件要干很久的活,合上盖子。

本文是对 v2core 博客《Claude Code 应该放在私有 PWA 里》的整理与图解,加上一点自己的拆解。原文、入门文档和源码在下面。

Tony's Lab · 2026-10-14