Guardian 是跟着你智能体跑的一个轻量 Node.js 进程。它没有 AI,用零 token,工作只有一个:让智能体保持在线,让你从聊天里管理它。
它看什么
每 30 秒,Guardian:
- 对智能体的 session 运行
tmux capture-pane -p - 扫描抓到的输出找错误模式(
API Error:、Overloaded、Could not process等) - 找标了
← discord、← telegram等的入站消息,知道智能体在接流量 - 检查"正在工作"的指示(Baked、Crunching、tool-use 标记)以区分"卡住"和"空闲"
如果 session 死了,它重启。如果错误在堆积、也没在工作,它把智能体标成卡住,再挂一次检查就重启。
重启政策
- 每 30 分钟最多 3 次重启。 超过之后,Guardian 停止尝试,通过你的频道找你。
- 每次重启都写到
~/workspace/memory/guardian.log,状态写到/tmp/sento-guardian-<agent>.json。 - 干净重启后,Guardian 发一个 ✅ 通知:"智能体回来了。"
通过频道寻呼
Guardian 检测你智能体用的频道(Discord、Telegram 或 Slack),从插件的 .env 文件读 bot token,用对应的 API 直接发消息给你:
- Discord:配好的话用 webhook,否则用 Bot API 发到监控频道
- Telegram:
sendMessage到你的监控 chat ID - Slack:
chat.postMessage到你的监控频道
从聊天里的交互命令
Guardian 还会轮询监控频道里用户的消息,所以你不用 SSH 就能管理智能体:
restart—— Guardian 停止并重启智能体,重置重启计数logs—— 把 tmux 输出的最后 15 行扔回频道status—— 打印健康摘要(活着 / 卡住 / 重启计数 / 状态)
为什么没 AI
因为任何带 AI 的东西都会失败。Guardian 的全部意义就是在智能体不活着的时候它还活着。Node.js、regex、tmux capture-pane。就这些。
需要知道的文件
- Sentō repo 里的
src/templates/guardian.js—— Guardian 模板(每个智能体渲染一次) ~/workspace/memory/guardian.log—— Guardian 的日志输出/tmp/sento-guardian-<agent>.json—— 持久状态(重启列表、状态标记)~/.claude/channels/<channel>/.env—— Guardian 启动时读来拿 token
怎么启动和持久化
- 安装时:
sento init通过nohup node guardian.js &启动 Guardian,并加一行@reboot的 cron,重启后回来。 - 重启时:cron 项重新运行启动脚本,Guardian 启动,智能体启动。
- 默认没 systemd、没 launchd —— nohup + tmux + cron 是跨发行版和容器里最简单可靠的模式。