Agent Config Tidy(配置克制收尾)
在反复用 grill-one / grilling / grill-me 等技能探讨、定决策、改写智能体配置后,配置里常常混进 「决策过程中的背景 / 说明 / 闲聊」——这些不需要进运行时配置,却会在用这套配置创建的智能体对话时暴露出来。 本技能把整套 agent 配置当成一个整体来审视,找出这类多余内容,只保留运行时需要的指令,做到「克制」。
何时使用
- 用户说「整理一下配置」「收尾配置」「配置太啰嗦了」「去掉配置里的背景说明」「配置里别暴露讨论过程」
- 每轮 grill 迭代、改写完 AGENTS.md / soul.md / SKILL.md / agent yaml / 脚本之后,做一次克制收尾
- 发布 agent 结果包前,兜底检查整套配置是否混入了讨论背景
输入
一个目录(整套 agent 配置的所在),结构无关。技能自行递归发现以下文件,不限目录层级:
- 配置文档:
AGENTS.md、soul.md、SKILL.md(大小写不敏感) - agent 定义:
*.yaml/*.yml中带interface:/ agent 定义结构的文件 - 脚本:
*.py*.sh*.ps1*.js*.ts*.bash等(查注释与运行时输出)
不假设固定布局(不要求一定是 result 包结构)。只要是「这个 agent 的配置」,给根目录即可。
判定规则(核心)
该删(背景 / 说明 / 闲聊)
- 决策背景 / 来龙去脉:解释「为什么这么定」「这版相对上版改了什么」「当初讨论时考虑了 A 还是 B」的段落。
- 会话说明 / 对模型或用户的闲聊:寒暄、铺垫、
注意:…式只是复述显而易见的提醒、关于「本文件/本段是干什么的」的自我说明(当这段说明对运行时无指令价值时)。 - 重复自述:同一约束在多处用不同话重复说。
- 暂时性备注:
暂定先这样等确认待定草稿之类未定稿标记。 - 脚本里的决策史注释:
# 因为上次讨论决定改成 X# 历史原因:之前是 Y这类闲聊注释。 - 脚本里向用户泄露背景的运行时输出:
print/log/echo打印「(背景)我们之所以…」「说明一下,这个 agent 是用来…」之类非真实状态/非真实错误的说明性文字。 - 点名禁止手段清单(「此地无银」):配置散文中逐条点名「禁止用 X / 绝不允许 Y / 不准做 Z」且 X/Y/Z 是具体实现手段(如某调试协议、某依赖安装命令、连接某本地端口)的写法。这类清单常有两个问题:(1) 框架或通用约束往往已经覆盖,重复点名属冗余;(2) 把本不该用的手段点名列出,反而给 agent 种草、暗示其存在——即「此地无银三百两」。判定为多余,建议删除该清单,改写成不点名具体手段的概括约束(只说「只允许走既定通道 / 只能用既定工具」,不列举禁用项)。主要适用于配置文档(AGENTS.md / soul.md / SKILL.md / yaml);脚本注释里的点名禁用多半是正当提醒,默认不按此条处理。
必须留(运行时需要)
- 所有可执行指令、约束、护栏(
必须/禁止/应该/不要)。 - 触发条件 / 何时使用(让 agent 知道何时启用)。
- 输入/输出格式、schema、few-shot 示例(agent 照做的范本)。
- 必要术语 / 定义(agent 正常运作必须知道的名词)。
- 真实状态 / 真实错误输出(用户确实需要看到的运行信息,不是背景闲聊)。
- 代码逻辑本身(绝不改动函数体、变量、流程)。
不确定时
一律标记出来交用户定夺,不要替用户删。判定只做「明显多余」的,灰色地带留给确认环节。
工作流
- 拿到配置目录;先
Glob/Grep发现上述文件清单,回显给用户「将检查 N 个文件」。 - 逐个文件扫描,按规则找出多余内容。
- 产出差异报告(先不改文件):
- 每个文件下列出:被标记的文本片段 → 为什么判定为「背景/说明/闲聊」→ 建议动作(删除 / 移到决策记录 / 保留)。
- 用 diff 风格呈现(
-表示将删,+表示将留或替换)。
- 等用户确认(逐文件或整体)。用户没说删的,不动。
- 确认后改写文件;改写前对原文件留
.bak(如AGENTS.md.bak)。 - 若某段背景用户想「留作记录但不进配置」,建议移到配置目录外的
DECISIONS.md/rationale.md(非发布文件),不要留在 AGENTS.md/soul.md/SKILL.md 里。 - 啥都没发现时,明确说「未检出明显多余内容」,不强行改。
正反例
反例(应删)——配置里混进的讨论背景:
## 背景
这版是和团队用 grill 讨论后定的。上一版我们本来想让 agent 直接读数据库,但后来考虑到
安全就改成了读 SQLite 投影;soul 里那段「保持克制」也是那轮加的。
这是决策史,运行时不需要,删;想留记录就移到
DECISIONS.md。
正例(应留):
## 约束
- 禁止跳过认证:查询前必须已 login 且 session.json 有效。
- 知识库路径一律来自 @ 提及选中的工作区,不要写死在 config。
这是可执行约束,必须留。
脚本反例(应删的运行时输出):
print("(背景说明)这个脚本之所以只推送图谱而不让服务器读路径,是因为上次讨论发现远端读不到本机知识库……")
这是对用户的闲聊,改为只输出真实状态:
print(f"pushed {n} nodes")。
配置散文反例(「此地无银」,应删):
## 护栏
读取内部状态时,禁止用 A 协议、禁止开 B 端口、禁止手搓 C 脚本、禁止安装 D 依赖——只允许用既定的内置工具。
把本不该出现的手段逐条点名,反而给 agent 种草;且「只允许用既定内置工具」一句已覆盖全部。删掉点名清单,只留概括约束。
配置散文正例(应留):
## 护栏
读取内部状态只允许用既定的内置工具,不走其它通道。
概括约束,不点名任何具体手段,既够用又不种草。
护栏
- 先差异、后确认、再改写;不确定就标记,绝不静默删除。
- 改写前留
.bak,方便回退。 - 不改动任何代码逻辑、变量、函数体;只动注释与说明性输出。
- 克制本身:本技能的配置文档也只写必要指令,不要反过来把自己写成啰嗦样板。
- 结构无关、项目无关:不假设特定目录布局,不写死任何业务路径。