替身使者不亲自战斗——它召唤替身。 StandCode 为主:Caller / Thinker / Worker 三层 agent 编排框架——让一个常驻入口 agent(比如接微信的 Hermes)指挥任意 CLI agent 干活,任务全程看板可见,结果落收信箱,零轮询零多余 token。 areco 为辅:承载 Stand 的会话看板底座(网页远程座舱),StandCode 的执行场。
本仓是两者的 monorepo(主仓 bb4407777/standcode,bb4407777/areco 为每日自动同步的全量镜像):
| 组件 | 位置 | 是什么 | npm |
|---|---|---|---|
| StandCode(主) | standcode/ |
三层编排框架:派单 CLI caller.py + 收信箱 + 角色/harness/preset 配置 |
standcode |
| areco(辅·底座) | packages/ |
多 agent 会话座舱:pty 服务端、transcript、项目房间、设备接管 | areco |
StandCode 的用法见 standcode/README.md;以下为底座 areco 的文档。
原名 agent-remote,v2.2.0 起更名为 areco(A Remote Coworker)。
CLI Agent 网页远程座舱 —— 在浏览器/手机上远程驾驶 Claude Code、Codex、Reasonix 等 CLI 编程智能体。
Areco is a remote cockpit for CLI coding agents — drive Claude Code, Codex, Reasonix and other terminal-based AI agents from your browser or phone, like a chat app for your agents.
- Multi-agent, multi-session: spawn sessions from templates (claude / codex / reasonix / shell / custom), each with its own working directory
- Server-side pty: start a task on your phone, lock the screen, come back hours later — the session resumes pixel-perfect (shadow-terminal snapshots + offset streaming, alt-screen TUIs included)
- Device handoff: open the same live session from any browser, pick up exactly where you left off
- Chat transcript view: read agent conversations as clean chat bubbles (Markdown + code highlighting) parsed from each agent's own session files — far more readable on a phone than a raw TUI
- Project rooms: group sessions into rooms with @mention routing and shared context, like a group chat of agents
- Zero cloud: self-hosted single binary, your agents and data stay on your machine
npm i -g areco && areco # then open http://127.0.0.1:8790
Apache-2.0 · GitHub(main repo)· 中文文档见下文
- 多 agent 多会话:模板(claude / codex / reasonix / shell / 自定义)→ 随开随关多个会话,各带独立 cwd
- pty 活在服务端:手机上开个任务、锁屏关浏览器,晚点回来画面无缝接上(影子终端快照 + offset 续流,alt-screen TUI 也不花屏)
- 换设备接管:手机开的会话,电脑浏览器打开就是同一现场
- Transcript 对话视图:座舱头部「⌨️ 终端 / 💬 对话」分段切换——对话模式直读 agent 自己的会话落盘重建聊天气泡(markdown + 代码高亮,手机上比 TUI 可读得多):claude 系读
~/.claude/projects/**.jsonl(字节游标尾载分页);codex / workbuddy(codebuddy) / reasonix / kimi / pi 直读各自落盘(~/.codex/sessionsrollout、~/.workbuddy/projectsjsonl、~/.reasonix/sessionsreplace 帧、~/.kimi-code/sessionswire.jsonl、~/.pi/agent/sessionssession jsonl,消息级游标,文件按 cwd(-slug) + 启动时刻自动关联——不解析终端流,去 agent 数据层拿结构化对话)。尾部先载 + 「加载更早」向前翻页,2.5s 增量追新,底部可直接续问;默认对话模式、切换偏好记忆在本机,看板点卡片按偏好进入(shell 等无落盘会话始终进终端;新建会话落点可在设置页「对话模式」里选,默认先进终端看启动画面) - 历史对话浏览(顶栏「历史」):翻本机全部落盘会话,双层数据源——
1 原生层:
~/.claude/projects+ 各隔离 HOME 分身(~/.homes/*/.claude/projects,如 c5/fable)自动发现, 另有 kimi(~/.kimi-code/sessions/<wd>/<session_*>/agents/main/wire.jsonl,元信息读 state.json)、pi(~/.pi/agent/sessions/<--cwd-slug-->/<时间戳>_<uuid>.jsonl,元信息读首行 session 头)与 qclaw; 全文展示,正文尾部先载、「加载更早」字节游标向前翻,超大 transcript 也不卡手机; claude 源可一键「继续会话」(--resume回原 cwd 拉起新座舱会话;已在看板运行的直接跳转/409); kimi 源同样可恢复(-S <session_id>回原 cwd,需启用 kimi 模板); pi 源同样可恢复(--session <uuid>回原 cwd 同文件续写,需启用 pi 模板); 2 chatlog 统一层(可选):codex / reasonix / cc-connect / workbuddy 的会话读 chatlog 提取产物 (~/skills/chatlog/conversations-data.json,全文+脱敏;该文件存在才启用,kimi 由原生层覆盖不进这层); reasonix 的「继续会话」= 座舱里拉起原生--resume选择器(其 CLI 无按 id 非交互恢复); codex / workbuddy 也可恢复(codex resume <uuid>/ codebuddy--resume <uuid>回原 cwd,cwd 由提取器补录, 旧数据缺 cwd 时 workbuddy 不给恢复);cc-connect 是渠道桥接副本,只读; 数据超 10 分钟自动异步刷新(提取端点由ARECO_CHATLOG_REFRESH_URL指定)。列表按最后活动倒序、搜标题/目录/会话 id - 服务重启不丢现场:运行中会话标记
server-restart,最后画面落盘可回看;「重新启动(恢复对话)」按 agent 能力原生续上——claude 系--resume <id>(无 id 的存量会话按定位文件自动回填转正)、codexresume <session_id>、codebuddy--resume <uuid>、kimi-S <session_id>、pi--session <uuid>、reasonix 拉起原生选择器 - TUI 注入可靠性(PromptBar / 历史接续 / 恢复重启共用):
sendline文本与回车拆帧发送,提交回车等 pty 输出安静一拍(120ms、上限 2s)再补——同帧「文本+回车」会被 codebuddy/kimi 等 TUI 按粘贴处理、回车沦为换行不提交(表现为要按两次发送或 enter 变换行);codebuddy 每个新进程弹的「信任目录」确认页由服务端从 pty 输出检测(剥 ANSI 匹配文案)自动回车过页,新建/重启/恢复全生效,每次启动只答一次且限启动后 2 分钟内(防对话正文同款文字误触发) - 归档 vs 删除:卡片菜单「归档」把已停止会话移出看板(看板底部「已归档」折叠区可查看/恢复,重启即自动回看板),元数据、终端快照、agent 对话日志全保留;「删除」清掉卡片与终端快照——但 agent 自身的对话日志(
~/.claude/projects/ chatlog 层)本就不归看板管,删除后仍在「历史」页 - 移动端:底部快捷键条(Esc/Tab/方向/^C...)、单行 prompt 输入、PWA 添加到主屏幕
- 项目协作(顶栏「项目」):一个项目拉多个 agent 进群协作,详见下方「项目协作」一节
方式一:npm(推荐)
npm i -g areco # node >= 24 areco # 首跑在当前目录生成 config.json 与 data/(可用 ARECO_ROOT=/path 指定数据根)
打开 http://127.0.0.1:8790/ 即用(本机 loopback + 未设密码 = 免登录)。要手机/局域网访问:
areco --hash "你的密码" --save # 先设密码(非 loopback 绑定无密码会拒绝启动) # 再把 config.json 的 server.host 改为 0.0.0.0,重启
方式二:源码
git clone https://github.com/bb4407777/areco.git && cd areco npm install # node >= 24 npm run hash -- "你的密码" --save # 非 loopback 绑定必须设密码,否则拒绝启动 npm run build ./start.sh start # 生产单端口,默认 8790
打开 http://<Mac IP>:8790/(同一 WiFi / Tailscale),登录即用。
./start.sh status|stop|restart # 手动/开发用;pid 文件管理,绝不按端口误杀 npm run dev # 开发:server 8790 + vite 8791(HMR) npm test # zsh 转义单测 node scripts/selftest.mjs http://127.0.0.1:8790 "密码" # 端到端自检(含历史对话 4 项;免密模式不传密码)
常驻可交 launchd 管理(macOS,可选):写一个
~/Library/LaunchAgents/com.areco.plist(KeepAlive + RunAtLoad,WorkingDirectory 指仓库根,ProgramArguments 跑node dist/server/index.cjs)。 改动后重载:launchctl bootout gui/$(id -u) <plist> && launchctl bootstrap gui/$(id -u) <plist>。 注意:launchd 实例会被 KeepAlive 自动拉活。./start.sh restart区分调用来源—— 界面一键重启(服务的子进程)只走kickstart -k杀拉(bootout 的整组 teardown 会把调用方一起带走,2026年07月23日 实测躺尸); 人工命令行 restart 才走bootout+bootstrap重读 plist。所以改了 plist(环境变量/启动参数)后, 需在命令行跑一次./start.sh restart生效(按钮重启的输出落data/logs/restart.log可查)。
重要:服务进程的
HOME决定 spawn 出的 claude 用哪套认证/transcript 目录。start.sh已自动落回本用户真实 HOME(passwd 库解析,不信调用方环境);特殊场景可用ARECO_HOME覆盖。
auto-recall 记忆注入(可选):设环境变量
ARECO_RECALL_SCRIPT指向本机 recall 脚本(如~/skills/memory/scripts/recall.py), 项目房间投递 note 时自动注入相关记忆;未配置则该功能整体关闭(静默跳过,不影响投递)。
顶栏「项目」= 给一件事拉一个群,把多个 agent 编成一队干活:
- 建项目 → 加成员:成员按模板一键 spawn 为项目专属会话(页面操作,或
POST /api/rooms/:id/members {"templateId":"claude-glm52"});专属会话随项目归档级联管理, 删除项目会连带删除专属会话——讨论收摊用「归档」(可随时恢复),删除是不可逆动作 - 消息与投递:房间消息正文带
@成员名/@all才注入目标会话终端(人类成员发言默认投全体); 目标会话已退出会自动 resume 拉起再投递;agent 回执走包内scripts/areco-msg.mjs(零依赖 CLI,直写data/projects.db,本机任何终端都能插话);agent 互调链深上限 3 跳防环 - 调度模式:
serial串行轮转(默认,一次只放行一位成员发言,讨论不刷屏)/parallel全员同时 /claim认领制,项目页随时切换 - 共享根目录 + 文件面板:项目设
rootPath后成员共读同一目录,页面直览文件、点开预览 (docx/pdf/图片/视频,docx 服务端现转 PDF) - 产物栏:从消息流自动汇聚各成员产出的文件路径,一栏看全、免翻聊天记录
- git 派单(可选):项目绑定
repoPath后可给成员派发 worktree 任务,完成后合并检查/ 冲突处理(dispatches API),多 agent 改同一仓不踩脚 - auto-recall(可选):配
ARECO_RECALL_SCRIPT指向本机记忆检索脚本后,投递时自动附带相关记忆
packages/shared/protocol.ts WS 协议 + 类型(两端唯一事实源)
packages/server (Koa) routes → controllers → services 分层
services/session.ts pty + @xterm/headless 影子终端 + 双计数器快照(核心正确性)
services/session-manager.ts 会话注册表/状态机/autoStart/重启恢复
services/templates.ts 模板 CRUD + zsh -ilc 最小干净环境 spawn(防 agent 环境变量泄漏)
services/transcript.ts 读盘重建对话(字节 cursor 增量)
services/history.ts 历史会话:projects/ 扫描(stat+封顶头扫提元信息,mtime 缓存)+ 尾部倒序字节分页
services/chatlog.ts chatlog 统一层:codex/reasonix/cc-connect/workbuddy 读提取产物(47MB JSON 闲置即释)
ws/gateway.ts attach 快照缓冲防 gap + 绝对 offset ack 流控 + 心跳
packages/client (Vue3+Naive) Dashboard / Session 座舱 / Transcript 聊天 / History 历史 / Settings
- 每会话双计数器:
produced(pty 输出即累加,标在每个 output 块上)、shadowProcessed(影子终端消化完回调推进) - attach 时影子终端
write('', cb)drain,回调内同步取 offset +SerializeAddon.serialize()(含 alt-screen/scrollback/光标) - 客户端收快照先
reset()重放,之后offset <= applied或 epoch 不符的块一律丢弃 —— 不重不漏 - ack 带绝对 offset(幂等无漂移);unacked > 256K 暂停 pty,全部 < 64K 恢复;高水位滞留 15s(锁屏假死)强制 detach 解救 pty
- 非 loopback 绑定 + 无密码 → 拒绝启动(v1 免密开 0.0.0.0 的教训)。
想少输密码:
sessionTtlHours调大(滑动续期,8760 = 每设备一年只登一次)。 彻底免密:server.insecureNoAuth: true显式开关——等于把本机 shell 开放给网络内所有设备,仅限完全可信网络(Tailscale-only 绑定更稳) - Host/Origin 白名单(loopback/RFC1918/Tailscale CGNAT/.ts.net/.local + config.allowedHosts),防 DNS rebinding
- scrypt 口令哈希(兼容识别 v1 的 sha256 格式)+ 登录按 IP 限流(5 次/分 → 指数封禁)
- WS upgrade 同套双校验,未识别 upgrade 一律 destroy;cookie HttpOnly + SameSite=Lax + 滑动 TTL
{
"server": {
"host": "0.0.0.0", // 127.0.0.1 = 仅本机(可免密)
"port": 8790,
"passwordHash": "scrypt:...", // npm run hash -- "密码" --save
"sessionTtlHours": 72,
"allowedHosts": [], // 额外放行的访问域名/IP
"maxSessions": 0 // 同时运行会话上限,0 = 无上限(默认);也可在「设置」页在线改,即时生效
},
"templates": [ { "id", "name", "command", "args", "cwd", "color", "autoStart", "enabled" } ]
}模板也可在网页「设置」里直接增删改。
bin/ 整目录 gitignore,用于放你自己的 agent 启动脚本(含 token/绝对路径等本机私有配置)——
比如用 env -i 全量重置环境、以隔离 HOME 启动某个 claude 分身,再把脚本注册为模板即可在座舱开会话。
模板的 claudeHome 字段告诉服务该会话的 transcript 落在哪个 HOME 下(对话视图/恢复会话靠它定位)。
- 聊天模式:headless
claude -p --output-format stream-json驱动 +--permission-prompt-toolMCP 授权桥 (手机上点"批准/拒绝"工具调用) - Observe/Adopt 本机别处启动的 claude 会话(读 sessions manifest)
- 通知推送(会话空闲/出错时经消息桥推送)
- code-by-wire:影子终端快照断线恢复、pty 服务端存活、读盘 Transcript 的实现模式来源(MIT,署名见 NOTICE)
- agmsg:跨 agent 消息的设计启发(早期互操作层曾与其同库,现已转为内置实现)
- hermes-studio:产品形态参考(多 agent 座舱与群聊形态)