Collie
把终端里运行的 AI 代理装进手机:通过 Tailscale 访问的移动端 PWA,随时查看哪个代理在等你输入并直接回复。
证据显示权限与架构高度收敛:桥接仅绑定 loopback、默认入口为 tailscale serve 注入身份头、写操作需设备配对令牌(least_privilege 3)。安全模型直言'任意按键注入即远程 shell'并禁止 funnel 暴露,数据流向在 ARCHITECTURE 图与部署变体中透明(data_flow_transparency 3)。升级文档覆盖回滚(rollback 3)。扣分点:README 展示层用户确认细节仅间接可见,敏感数据(pane 输出含密钥/环境变量)靠边界防护而无内容级保护,配对未启用时默认世界写入不设门(handlers.ts 注释自认);依赖仅有 frozen lockfile 与 7 天冷却,无审计/vuln 扫描证据(dependency_security 2);外部效果(向真实终端注入按键)明确但不可逆风险由用户承担;作者署名仅 LICENSE 中一人,无 verified publisher(source_attribution 2)。
CI 强制版本一致性、lint、typecheck、单测加浏览器 e2e,release 前 gate 等 CI 绿(self_consistency 3)。失败信息:release 脚本错误消息详尽、测试 fixture 覆盖错误码,但桥接运行时错误路径仅片段可见(failure_messages 2)。依赖可用性依赖 Bun 生态与 nix flake 锁定,已尽力但 Bun 上游风险未缓解(dependency_availability 2)。
受众定义精确(终端 multiplexer 中的 AI agent 用户)、单用户/tailnet 假设明说,实验性边界(tmux/zellij/Windows)诚实标注(audience 3、boundaries 3)。触发语义清晰:状态按'待用户输入'排序、push 通知即阻塞通知(trigger_precision 3)。环境覆盖三平台加五种部署变体,但 Windows 支持半残(launcher 不可用、社区 Task Scheduler),扣至 2。
文档架构(11 个 docs 页 + 根级规范文件)、安装文档、命名(collie 动词唯一实现于 cli/)、示例/演示、已知限制('read this first' 安全节、实验性标注)、MIT LICENSE、CHANGELOG 驱动的发布与 git-hook 强制版本门,均为 3。唯一弱项:维护责任——单人项目、无团队/治理说明、community-maintained Windows 生命周期配置'unsupported'(maintenance_responsibility 1)。
输出即移动端可用 UI(tappable 按钮、键位板、语音),演示站可直接试用(output_usability 3)。相对 Termux+SSH 工作流有明确边际价值(marginal_value 3)。成本:需 tailnet、Bun、多机器 crew 复杂度,安装脚本要求 curl|sh,运维成本不低(cost_benefit 2)。
几乎每个主张都指向具体文件/测试/ADR(claim_traceability 3)。发布含 sha256 清单与 sidecar、二进制自检嵌入文档;但静态审查无法跨源验证 Herdr socket API 等外部主张,且 demo/演示与真实行为的一致性未执行验证(cross_source_corroboration 2、fact_inference_separation 2——文档把事实与设计理由混排但标注尚可)。
- 该项目按设计提供远程 shell 级能力:任何获得 URL 者可以以你的完整用户权限执行任意命令,务必仅经 tailnet 访问并设置 COLLIE_TRUSTED_USER,绝不使用 tailscale funnel。
- 设备配对未启用时写入不设门控(handlers.ts 注释自述),首次部署应立即完成配对。
- pane 输出可能含源码、密钥与环境变量,Collie 不做内容级脱敏,敏感会话慎用。
- 安装采用 curl | sh 模式;虽验证 sha256,仍建议先下载脚本审阅再执行。
- tmux/zellij 与 Windows 支持为实验性,测试面极窄;生产依赖应以 Herdr 为目标。
- 发布者未经验证,项目为单人维护,长期维护与安全响应能力不确定。
这个 Agent 能做什么,适合哪些场景?
Collie 是一个面向终端 AI 代理的移动 Web 界面,通过 Tailscale 私有网络提供服务,每次实例连接一个终端复用器:Herdr(1.0 的主要支持目标)、tmux 或 zellij(后两者为实验性支持)。架构上是一个 Bun 桥接进程绑定在回环地址,前端是由 React Router + Vite 构建的静态 PWA,浏览器通过 /api/snapshot 轮询桥接进程,操作则通过 /api/pane/:id/reply 或 /keys 等普通 HTTP 请求由适配器写入真实终端。它解决了用 Termux/SSH 在手机上操纵 TUI 的笨拙问题:待输入的代理排在仪表盘顶部,权限提示变成可点击按钮,Esc、Ctrl+C 和方向键有一键键盘,还支持语音输入、文件附件、推送通知和跨多台机器的 Pack 故障转移。它默认单用户、单 tailnet 部署,本质上是向你的机器提供远程 shell 访问,安全模型依赖 tailscale serve 的身份注入和设备配对。
Collie 在主机上运行一个受监管的 Bun 桥接服务,按安装选择一个复用器适配器(bridge/mux/<name>/:Herdr 走 Unix 套接字,tmux 和 zellij 调用其 CLI),轮询快照并暴露小型 JSON API;浏览器加载 Vite 构建的静态 PWA 并轮询 /api/snapshot。回复和控制键通过 POST /api/pane/:id/{reply,keys} 发送,由适配器敲入真实终端面板。仪表盘按待处理用户输入排序;代理阻塞时会发 Web Push 通知;支持逐代理配置的快捷操作与斜杠命令、quick-replies.toml 一键回复、语音听写、相机图片与 markdown/文本/代码文件附件、输出搜索与会话历史、设备配对令牌作为写凭证,以及把多台机器的 Collie 聚合到一个 URL 的 Pack 协议(含操作员触发的故障转移)。默认入口为 tailscale serve 注入 Tailscale-User-Login 头并配置 COLLIE_TRUSTED_USER。
- 在终端复用器里跑 Claude 等 AI 代理的开发者,想在手机上从任意地点恢复会话、回复 AskUserQuestion 式权限提示
- 同时管理多台机器代理的操作员,希望用一个 URL 聚合多台 Collie 并在主机故障时切换到备机
- 在通勤或离开工位时收到推送通知,知道哪个代理被阻塞等待输入,用软键盘或语音直接回复
- 需要在手机上发送 Esc、Ctrl+C 或方向键组合而不想摆弄屏幕终端模拟器的用户
- 向运行中的代理发送截图、日志或代码文件附件,而不必回到电脑前
- 偏好自托管、无云账号、数据不出自己 tailnet 的单用户开发者
这个 Agent 有哪些优点和局限?
- 针对移动端重新设计的交互:待输入代理置顶、代理自身的权限提示变成可点击按钮、专用控制键面板,避免了在手机上操纵 TUI 的全部痛点
- 自托管且无云依赖:PWA 本地回环运行,配合 tailscale serve 的身份注入和设备配对令牌形成分层防御
- Pack 协议把多台机器的 Collie 聚合在一个 URL 后面,并支持操作员触发的故障转移
- 超越终端回滚缓冲区的输出搜索和完整会话历史,以及语音输入、文件附件、六种界面语言等成品级功能
- 默认单用户设计,无多租户认证,不适合共享或公开访问;任何拿到 URL 的人都能以你的完整用户权限执行任意命令
- 强依赖 Tailscale tailnet 生态:默认部署路径要求 tailscale serve 作入口,Windows 上 tailscale serve 集成不可用,需改走反向代理(Variant C)并改多项配置
- tmux 和 zellij 支持在 1.0 仍标为实验性,测试仅限于单操作员单机,Herdr 才是主要支持目标
- 采用即引入运行时与部署栈成本:Bun 桥接进程、systemd 用户服务、桥接代码改动需要 systemctl --user restart collie
如何安装或部署这个 Agent?
在主机(不是手机)上执行一键安装脚本(需要 curl、tar 和 sha256 工具,无需编译器或 sudo):
curl -fsSL https://colliepwa.dev/install.sh | sh脚本会下载对应平台的最新版本、校验 sha256、安装文件并把 collie 加入 PATH,随后打印剩余手动步骤:生成一份配置,然后运行 collie start。首次运行时 collie start 会自动检测 Herdr、tmux 和 zellij 并提示选择。也可从源码构建,详见仓库 docs/install.md。
如何使用这个 Agent?
- 确保手机与主机在同一 Tailscale tailnet,且 tailscale serve 已配置为默认入口;在 .env 中设置 [email protected]。2. 运行 collie start,首次运行会检测并选择复用器。3. 在手机浏览器打开 MagicDNS URL,即出现按待输入排序的仪表盘。4. 点击需要输入的代理,直接打字回复,或用键盘面板发送 Esc/Ctrl+C/方向键;长按面板标签可重命名或关闭。5. 可在配置中添加斜杠命令和 quick-replies.toml 一键回复,按需启用语音输入和推送通知。切勿使用 tailscale funnel 暴露到公网。
这个 Agent 与同类方案有什么区别?
README 明确将 Collie 与「Termux + SSH 连入终端复用器会话」的常见做法对比:后者在触屏上操纵 TUI 时特殊按键麻烦、Ctrl/Esc/方向键需要别扭的组合键、文本输入与软键盘冲突,Collie 用专门的移动界面取代了塞进触屏的终端。