跳到正文

基于 ACP 协议的远程 Agent 控制台

把本机的 Agent,装进任何一块屏幕

手机、平板、另一台电脑的浏览器里,继续本机正在跑的会话。Agent 仍然在你自己的机器上读文件、跑命令;浏览器只负责掌控。

// 一个进程、一个端口,同时提供 Web 界面和接口。

浏览器 任何设备 1 中继 HTTP 8787 2 主通道 QUIC UDP 8788 3 节点 HTTP 8765 4 内核 stdio JSON-RPC 5 一次请求要走的路
P01

浏览器 — 只负责掌控:发指令、看结果、审批权限。门禁密钥存在本地,不进构建产物。

0组件
0端口起步
0位配对码
0分钟有效
0命令在中继执行
§1

三个组件

BILL OF MATERIALS
Item变量Port说明
A01 Capri FE
React 19 · TypeScript · Vite · Tailwind
:5173
开发服务器;生产由 Host 内嵌托管
对齐终端界面常用能力的 Web 前端:斜杠命令、权限审批、图片、后台任务、Git / MCP / 记忆。左上角随手切换机器。
  • 会话续传,不重放全量历史
  • 权限审批与作用域记忆
  • 图片、后台任务、子代理视图
  • 密钥只存在这台浏览器里
A02 Capri Host
Go 1.26 · ACP · stdio JSON-RPC
:8765
界面 + 接口同端口
跑在有 Agent 的那台机器上,自动拉起内核,并把 Web 界面一起端出来。不用 nginx,不用另起静态服务器。
  • 单进程内嵌前端构建产物
  • 本机直连或中继两种模式
  • 无人订阅时暂停上报省流量
  • 配对 token 落盘,重启免配对
A03 Capri Hub
Go 1.26 · QUIC · WebSocket
:8787
HTTP;节点主通道 UDP 8788
汇集你所有的节点:家里的、办公室的、服务器上的。它不执行任何命令,只做配对、发现和转发。
  • QUIC 主通道,挡了自动回退
  • 六位配对码,十五分钟有效
  • 浏览器门禁与 CORS 收口
  • 只在一台机器上用时不必部署
§2

能力

SPECIFICATIONS
2.1 换个屏幕,接着说

在手机、平板、另一台电脑的浏览器里,继续本机正在跑的会话。恢复会话不重放全量历史,打开就能接上。

2.2 多台机器,一个入口

左上角切换节点:家里的、办公室的、服务器上的。每台机器一个标识,中继负责找到它。

2.3 该有的都有

斜杠命令、权限审批、图片、后台任务、Git / MCP / 记忆——对齐终端界面的常用能力。

2.4 代码不出你的机器

Agent 在节点那台机器上自己读文件、跑命令。浏览器只发指令、看结果。中继不执行任何命令。

2.5 一个进程,一个端口

节点二进制里嵌着前端构建产物,打开根路径就是界面,同端口提供接口。不用 nginx。

2.6 先 QUIC,挡了就退

节点到中继默认走 QUIC;UDP 被挡时自动回退 WebSocket,功能不受影响。域名经代理丢 UDP 时可强制拨号地址。

2.7 配一次,之后就忘了它

中继启动打印六位配对码,十五分钟有效。配对成功后 token 写在那台机器上,重启只需要中继地址。

2.8 没人看的时候安静

中继模式下没有浏览器订阅时,节点暂停实时上报以省流量;打开页面自动恢复。

// 只在一台机器上用?不必起中继,直接跑节点即可。

§3

快速开始

PROCEDURE
3.1 本机:一条命令
chmod +x ./capri-host
./capri-host
# 浏览器打开 http://localhost:8765
从 Releases 下载对应平台的二进制即可。
3.2 从源码跑
go run ./cmd/capri-host
需要 Go 1.26 以上。
3.3 起中继
FE_TOKEN=$(openssl rand -hex 24) go run ./cmd/capri-hub
启动日志里有六位配对码。生产务必设门禁密钥。
3.4 把节点接进来
HUB_URL=http://your-relay:8787 \
HUB_PAIR_CODE=XXXXXX \
HOST_ID=macbook HOST_NAME="办公室 Mac" \
  ./capri-host
每台机器给一个不同的标识。
3.5 查看 / 换新配对码
curl http://127.0.0.1:8787/api/pairing
curl -X POST http://127.0.0.1:8787/api/pairing/rotate
码填错或过期就换一个,节点带新码重启。
3.6 前端开发
npm install
npm run dev
# 代理默认指向本机节点;换目标:
VITE_PROXY_TARGET=http://your-relay:8787 npm run dev
开发服务器会把接口与事件流代理过去。
§4

环境变量

PARAMETERS
Scope变量默认说明
节点PORT8765HTTP 端口(界面 + 接口)
节点GROK_BINgrokGrok Build 可执行文件
节点HOST_IDlocal多节点时用来区分
节点HOST_NAMELocal Host界面上显示的名字
节点FE_TOKEN入口鉴权;与中继同语义,建议同值
节点HUB_URL设置后进入中继模式
节点HUB_PAIR_CODE一次性配对码
节点HOST_TOKEN已配对 token,优先于配对码
节点XAI_API_KEY可选;否则用内核自带登录
节点HUB_QUIC_HOST强制 QUIC 拨号地址(代理丢 UDP 时用)
中继PORT8787HTTP 端口
中继QUIC_PORT8788节点主通道 UDP 端口
中继FE_TOKEN浏览器访问密钥,生产必设
中继REQUIRE_FE_TOKEN设为 1 时,没配密钥会拒绝启动
中继CORS_ORIGINS*生产写成前端真实源
前端VITE_PROXY_TARGEThttp://localhost:8765开发代理目标
§5

文档

SHEET INDEX
SheetTitleDescription
01 总览 Capri 是什么、三个组件怎么分工、什么时候需要哪一个。
02 本机上手 一台机器、一个进程、一个端口,五分钟跑起来。
03 远程与多机 起一台中继,把家里和办公室的机器都接进来,从任何地方选机器。
04 架构与数据通路 一次请求从浏览器到 Agent 走过的每一段,以及每段负责什么。
05 环境变量 三个组件的全部环境变量、默认值与含义。
06 前端开发 本地跑前端、把代理指到中继、以及把新界面塞回节点二进制。
07 日常运维 后台运行、开机自启、端口占用、升级顺序。
08 排障 常见现象与处理,按"先看哪里"排序。