AGENT 64 个工具砍到 46:一个对象只配一个名字

MaxClaw 一次改动把 side chat 的常驻工具从 64 个收到 46 个:能用 shell 和事件时间戳替代的删掉,同一对象的多个工具合成一个、用 action / mode 参数区分并逐个校验,唯一靠直觉想删、但调用数据说不能删的那个留下。本文讲这三条规则、按动作校验参数的写法,以及「名字不再等于语义」带来的隐性代价。
AGENT 读过不等于染上:子任务的隔离类别该跟着内容走

多 agent 运行时里,敏感类别如果按「谁派的任务」继承,隔离会沿任务树无谓扩散,锁死模型与工具。MaxClaw 把任务类别改成开任务时决定:默认普通任务、结构上读不到派出对话,需要时显式声明,声明值只能是派出对话自己的类别。
AGENT 读了一切的线程没有污点:撤掉按行染色之后

一次删掉「读过什么就染什么」的改动复盘:为什么污点追踪在什么都读的协调线程上只会制造误报,隔离为什么应该落在被读线程的读侧与内容本身的类别上,以及「这两份记录不许外复制」为什么必须是通道级的禁止而不是逐行标签。附迁移、代码与测试依据,以及这次交换仍然没解决的部分。
AGENT 提问是一条消息,不是一次等待:把 ask-wait 从 agent 回合里拆出去

MaxClaw 原来的 ask_user_question 让回合挂在工具调用里等人回答,为此要处理重启、插话、停止、崩溃、超时转交等一长串情形。这次改动把提问卡做成 assistant 消息上的交互组件:定义就是工具调用参数,状态存在 message_components 并镜像到 tool 行,人的回答作为他的一条新消息回来,回合照常结束。
AGENT 「做完了」不该由干活的人说:给主干配一个 Maintainer

一个能改自己的 agent 系统里,编码 agent 交上来的分支缺一个按事先意图验收的人。这次改动让派活时强制写下 why / done_looks_like,由一个隐藏的单线程 Maintainer 在落地前对照验收,并把失败按整合问题、成果缺陷、意图问题三路分流;落地通道仍是 main 唯一的写入者,派活的对话只在需求上线后收到一次结果。