E8|Pets:余光状态灯,不准进 ToolRouter
先别把精灵当成又一个 agent
读完 Personality、Skills、Computer Use,下一件错事是给宠物注册 pet_status 工具,或把「Blocked」动画理解成 ExecPolicy 拒绝。然后在 core/src/tools/handlers/ 里找 Pets。
判断先说清楚:Pets 是给人看的环境精灵。 它把 Session 已经发生的事画成四态(跑着 / 要输入 / 就绪 / 卡住),不改模型、沙箱、记忆,也 没有 tool handler(core/src/tools/ 里搜不到 pets)。TUI 模块注释写明:它管选 id、拉帧、终端图像协议,不管把选择写进 config——那是调用方在加载成功之后才 persist(tui/src/pets/mod.rs:1-14)。
1. 四态来自通知,不是自己猜智能
PetNotificationKind(pets/ambient.rs:47-70):
| 变体 | 动画名 | 给人看的标签 |
|---|---|---|
Running | running | Running |
Waiting | waiting | Needs input |
Review | review | Ready |
Failed | failed | Blocked |
这是 投影。Session 在跑 turn、在等审批、在等你看 diff、工具失败,TUI 已经知道;宠物只换一张 spritesheet 帧。它不读 rollout,不调用模型,不决定 AskForApproval。Blocked 不是 ExecPolicy Forbidden,Ready 不是 /review 的 ReviewTask。
没有「只投影」会怎样?宠物变成第三个审批员,或模型根据「小鸭子看起来焦急」改行为。智能在 SQ/EQ(B1),灯在 overlay。
2. 三条表面:App 悬浮层、TUI /pet、IDE 通常没有
桌面 App: 官方 Settings → Appearance → Pets。悬浮层让你在别的窗口里仍能看见 thread 状态;Computer Use 时吸在角落(E4),仍不授权 Accessibility。
CLI TUI: /pets(/pet 是别名,slash_command.rs:120, 304-305)打开 picker(slash_dispatch.rs:522-524)。要 Kitty graphics 或 Sixel。不支持时直接说明原因(image_protocol.rs:56-77):
- tmux / Zellij:图像不能可靠地留在当前 pane,会污染 scrollback
- iTerm2 要 3.6+
- 其它终端:没有支持的图像协议
默认宠物 id codex,disabled 关掉(mod.rs:54-55)。
IDE: 通常无终端图像 overlay。不要在 VS Code 扩展里找同一只鸭子——那是 TUI/App 的 chrome,不是 app-server 资源。
没有「表面差」会怎样?CI 的 codex exec JSONL 里夹 Sixel,管道炸。exec 禁止乱写 stdout(E1);宠物连资格都没有。
3. 文件在 $CODEX_HOME/pets/;孵化是 Skill,不是工具
内置宠物是 版本化应用资源,用时拉到 CODEX_HOME 缓存;自定义宠物完全是用户数据:$CODEX_HOME/pets/<pet-id>/pet.json 或旧版 avatar 目录(mod.rs:3-7)。load 层假定 spritesheet 已在本地且尺寸合法(model.rs:8-11)。内置目录有 Codex / Dewey / Fireball / Rocky…(catalog.rs:25-48),从 App 的 avatar catalog 移植。
hatch-pet 是产品侧 Skill($skill-installer hatch-pet):教模型怎么写一份自定义 pet.json + 图。本 git 树没有这个 SKILL.md(D1)。即便装了,它也只是说明书——生成的是用户目录里的皮肤,不往 ToolRouter 加函数。
Pets 不进 Memories 总闸、不进 AGENTS.md 发现链、不改 Personality 模板。换皮肤和 C4 的语气、C2 的笔记是三件装饰/偏好,只有 Pets 连 prompt 都不进。
4. 为什么不准进 ToolRouter
B2 的工具要有 Spec(模型看见)、Handler(副作用)、Runtime(审批/沙箱)。宠物:
- 模型不需要「看见」它(看见了就会浪费工具名额度)
- 副作用是画像素,不是改仓库
- 没有可沙箱化的 spawn
放进 Router,就会出现 mcp__pets__wag、审批弹窗、并行门闩,全部是假问题。F2 把「宠物进工具层」列为反模式,证据是 tools/ 里没有它,以及 TUI 把 Pets 和 Theme 一样标成非 task 命令(slash_command.rs:262)。
Guardian、Hooks、Subagents 都不订阅宠物帧。Session 崩溃,精灵一起消失,rollout 里没有宠物事件——这是对的。
5. 结语:带走一句话
Pets 是终端或桌面壳上的状态灯:四态只投影已经发生的 turn,资源住在 $CODEX_HOME/pets/,hatch-pet 只是做皮肤的说明书——它不进 ToolRouter,也不许假装成智能。