你家里的服务器已经好几晚没有完成备份了。日志在服务器上,服务器在路由器后面,而你希望 Comma 去查清原因,而不是给你一串命令,让你来回复制粘贴。现在,Comma 的智能体可以通过 SSH 直接在这台机器上工作,无需在上面再装一个 AI 智能体。
智能体运行在沙箱之外
大多数云端智能体运行在自己的沙箱里:一个容器或虚拟机,装着模型循环、工具和文件,只要智能体还在,它就一直开着。Comma 背后的分布式智能体框架 Salix 把这些拆开了。智能体循环运行在框架中,不在任何沙箱里,每个 CPU 核心能运行 100 多个智能体。云虚拟机或设备只是执行命令的地方,只在工作确实需要一台计算机时才用到。
所以,要在你的服务器上工作,智能体并不需要搬过去。它在框架中调用原生 SSH 工具:
ssh.open、ssh.write、ssh.read和ssh.screen:交互式终端,包括全屏程序;ssh.exec:执行单条命令,stdout、stderr 和退出状态分开返回;ssh.list_files、ssh.download和ssh.upload:通过 SFTP 读写文件;ssh.close和ssh.list:管理连接的生命周期。
智能体使用 Group SSH 密钥认证:每个工作区一把密钥,由工作区内的智能体共用。ssh.public_key 会返回这把密钥,你把它加到机器上的 ~/.ssh/authorized_keys 里,和对待其他 SSH 客户端一样。
框架可以通过三种方式连接到你的机器。
1. 公网地址
如果机器上已经有一个可访问的 SSH 服务器,智能体就直接连接它的 IP 地址或 DNS 名称:
2. Tailcat:连接没有公网地址的机器
NAT 后面的笔记本电脑或家用服务器,往往没有框架能直接拨通的地址。Tailcat 无需入站端口、VPN 或账号就能把它连上。Tailcat 运行在这台机器上,只发起出站连接,并打印一个以 tc 开头的地址。
Tailcat 本身也可以充当 SSH 服务器。用 Group 公钥运行它:
这样就能以运行 Tailcat 的账户获得登录 shell、命令执行和 SFTP。它不需要 sshd,也不会改动你的 SSH 配置。如果机器上已经运行着 OpenSSH,就改用 tailcat serve 22,由 OpenSSH 处理登录。然后把地址发给智能体:
3. 你自己的 Tailscale 网络
如果你的机器已经在一个 tailnet 里,工作区可以加入它。你可以在 Comma 应用的设置中连接,也可以让智能体去连接。tailnet 管理员打开登录链接,批准这个节点即可。节点默认带有标签 tag:comma-agent,因此它能访问哪些设备和端口,完全由你的 tailnet 策略决定,例如只允许访问家用服务器的 22 端口。
智能体用 tailnet.peers 列出设备,再通过 MagicDNS 名称或 Tailscale 地址连接:
信任与生命周期
无论走哪条路径,首次连接某台主机时都会记录它的主机密钥。之后的连接如果出示了不同的密钥,就会被拒绝,并返回 host_key_mismatch 和新旧两个指纹;智能体会先征得你的同意,再用 ssh.known_hosts.remove 删除旧密钥。
一个 SSH 连接只属于一个智能体会话。它闲置 30 分钟后关闭,也不会在智能体重启或平台部署后保留,所以耗时较长的工作应放进远程机器上的 tmux 或 screen。命令都有时限:ssh.exec 默认 60 秒超时,最长 600 秒;超时会如实报告,绝不自动重试。
以备份问题为例,你可以这样说:“读一下日志,查看磁盘空间,但不要删除文件,也不要改配置。先把你的发现告诉我。”