muse-agent-example/.agent/docs/architecture/domains/07-Agent与Skill领域.md
zizi c9f69d9d6d 治理: Skill 测试治理第一阶段——harness 控制平面 + 实现测试迁出运行时目录
范围(不含 design-story-foundation、docs/、humanization/README.md 等进行中改动):

1. 新增 harness/ 控制平面
   - skill_harness.py 静态审计:32 个运行时 Skill 的 frontmatter/manifest/文档污染,当前 0 问题
   - run_selected.py 选择性执行器:manifest 与磁盘一一对账、依赖阻断、
     空跑与 skip-only 失败关闭、AST 测试形状门
   - manifests/skills.json:32 个 Skill 的合同责任方与协作领域登记
   - manifests/test-inventory.json:81 个测试资产登记
   - specs/skill-testing.md 与 README.md:测试分层、证据边界与 harness 职责

2. 实现测试从 .claude/skills/*/scripts/ 迁至 tests/skills/<skill>/
   - 71 个测试文件迁移并修复项目根与临时目录运行导入
   - 数据库触发器测试宽泛异常收窄为 psycopg.errors.RaiseException
   - 抽取离线大测试拆出真实 PG smoke(默认阻断,不计入离线通过)
   - 抽取 presence 去重边界拆出独立测试:493 + 78 = 571 项检查不变

3. 运行时文档清理
   - 13 个 SKILL.md 移除自测/离线验证段落、测试命令与测试文件事实源表述,
     只保留运行时合同;业务运行合同、额度、授权与离线模式均保留

4. SoT 同步
   - AGENTS.md:新增 Skill 领域索引(7 个合同责任方分组,覆盖 32 个运行时 Skill)
   - 领域 07:测试入口改由 harness/manifests/ 登记,SKILL.md 不承载测试命令
   - humanization 覆盖矩阵:活动测试路径同步迁移

验证证据: harness 自测 15 项 + runner 自测 13 项通过;静态审计 32 Skill / 0 问题;
73 个非数据库测试通过;8 个集成条目中 6 个 PostgreSQL 项被依赖门明确阻断;
py_compile 与 git diff --check 通过。未连接 PostgreSQL、网络、真实模型或额度。

已知边界: 真正 skill_behavior_eval 仍为 0,尚未验证任何 Skill 自然语言行为;
evaluate-frozen-replay 的 raw 存储边界冲突留待单独治理。
2026-08-19 01:50:20 +08:00

7.3 KiB
Raw Blame History

Agent 与 Skill 领域 SoT

1. 唯一职责

Agent 与 Skill 领域拥有角色职责、可调用能力合同、确定性工具边界和能力复用方式。它回答“谁负责判断、调用什么能力、输入输出是什么、失败后如何收场、什么经验可以复用到下一部作品”。

本领域不拥有作品内容、实体事实、范式内容、质量终态或数据库事实;数据库权威和落库机制归 08-数据权威与可视化领域。但 Skill 是落库的执行者:它声明自己读写哪些表,并把经手的输入和产出落库可见。

2. 四类执行单元

单元 负责 不负责
主 ReAct Agent 观察库内状态、选择 Skill、组织步骤、融合结果、请求用户决策 代替所有专业角色创作,或绕过保护步骤
角色 Agent 在一次调用中完成一种需要模型判断的职责 运行 hash、权限、状态机或持久化
Skill 定义一个可复用能力的输入、输出、允许动作、失败和验收 同时承担多个无关意图
Tool 执行确定性解析、校验、计算、读写或报告 主观创作和质量裁决

角色至少包括 planner、writer、extractor、detector、judge。角色身份由 .claude/agents/*.md 拥有;具体功能步骤由 Skill 拥有,不复制进角色提示词。

角色提示词用“声明不做什么”守边界:说清本角色不碰哪些支架职责(适配、hash、状态机、持久化),把该做的判断留给模型,把该走的步骤交给 Skill。

3. Skill 合同

每个 .claude/skills/{name}/SKILL.md 必须声明:

  1. 唯一目的和消费者。
  2. 输入、输出及 schema/version。
  3. 必读文件和允许读取范围。
  4. 允许的副作用与禁止写入对象。
  5. 数据库读写合同:读哪些表、写哪些表、失败时如何关闭(失败即收手,不写半成品)。
  6. 输入产出落库:哪些输入和产出必须进库可见,见索引 §3。
  7. 稳定错误码和失败恢复。
  8. raw、授权、预算和审计边界。
  9. 开发验证与行为评测由 harness/manifests/ 登记;SKILL.md 不承载测试命令、测试文件路径或测试结论。Skill 运行时需要执行的业务 dry-run/评测操作仍属于运行合同。

数据库是权威:Skill 对自己读写哪些表负责,声明失败时如何关闭,并确保经手的输入和产出都落库。没落库的输入产出,在系统视角里等于不存在。只读看板只查库渲染,不替 Skill 写任何数据。

3.1 命名与稳定标识

  • Skill 名统一使用小写 动作-对象,直接说明调用者能执行什么;目录名必须与 frontmatter name 完全一致。
  • 名称不使用 db、llm、runtime、eval 这类内部模块缩写,也不使用 upgrade、planning 这类无法判断具体动作的阶段词。
  • scenario 与 Skill 名分离:continuation、fine_outline 等 scenario 由 meta/chains 显式映射到动作式 Skill 名,不能假设两者同名。
  • 数据库 source_type、creator/updater、错误码和备份逻辑键是历史兼容标识;Skill 改名不自动改写这些值。
  • 一个名称只对应一个目录和一份 SKILL.md;改名后不留旧目录、别名 Skill 或重复合同。

4. Tool 合同

  • Tool 放在所属 Skill 的 scripts/,不散落一次性脚本。
  • 默认从仓库任意工作目录调用,必须自行解析项目根和输入绝对路径,不能依赖调用者先 cd 到特定目录。
  • 机械事实必须结构化输出稳定状态和错误码;人读日志是补充,不是唯一接口。
  • Tool 不调用模型,除非所属 Skill 明确声明该步骤本质需要模型。
  • Tool 变更必须有登记在 harness/manifests/ 的相关实现测试、py_compile 和 git diff --check 证据;测试结果只证明机械合同,不升级为 Skill 行为或内容质量结论。

5. ReAct 工作方式

观察库内状态
  -> 选择单一 Skill
  -> Skill 读取受控上下文
  -> 角色 Agent 或 Tool 执行
  -> 校验结构化结果
  -> 更新待审候选(Shadow)与安全状态
  -> 判断继续、补证、修订或请求用户决策

ReAct Agent 不能把“扫全库、随意写表”当作通用工具。每次动作必须经过 Skill 合同,且只拿到完成当前步骤所需的表、文件和工具范围。

6. 能力复利:升格落点如何接收

经验升格的完整规则由质量与复利领域独家拥有,见 06-质量与复利领域 §6。本领域只管升格的落点——Skill、Tool 和 Agent 提示词——怎么接收:

  • 作品内反复成功的做法先进入范式验证,不直接改全局 Agent。
  • 升格一旦发生,原位置的重复执行说明必须删除,只保留证据和指向新 owner 的链接,不留下两份规则。
  • 复用能力不得携带具体作品事实、人物名称或未经授权的正文。

注意两个“升格”不是一个意思:本节说的是经验或能力沉淀进 Skill、Tool、Agent 提示词;02-实体领域 里也习惯把“作品面实体从待审转为正式事实”叫升格,那是数据落库动作,与本节无关。

7. 模型与运行

模型运行时可替换;角色合同不绑定某个 CLI 的私有状态。模型别名、完整模型 ID、预算和回执由运行适配器记录并落库。模型不可用可以终止当次 Agent 调用,但不损坏库里已有的正式内容,也不让 Skill 跳过检查。

现有运行底座:受控沙箱子进程执行、运行回执一经写入不可篡改、依赖只向下(上层调下层,不反向)。完整问答、完整原文这类 raw 进库可看全文;仓外保险库降级为可选备份,不再是合同要求。

模型治理参数固定可见:按 5 小时额度窗计量,达到约 $24 阈值即降级到更省的模型,全程有一条全局降级链兜底,命中敏感词时切换到可用模型。参数由运行适配器持有,回执按索引 §3 落库。

8. 验收条件

  1. 一个 Skill 只有一个明确业务目的。
  2. Skill 目录名与 frontmatter name 一致,名称符合 动作-对象,scenario 通过链登记映射。
  3. 每个 Skill 在 SKILL.md 声明数据库读写合同(读哪些表、写哪些表、失败如何关闭)。
  4. 每个 Skill 的输入与产出都落库,只读看板能查到对应记录。
  5. Tool 从不同当前目录调用得到一致结果。
  6. 角色 Prompt 只声明职责边界(说清不做什么),不包含 adapter、hash、状态机等支架职责。
  7. 稳定经验能沿“范式 -> Skill/Tool/Agent”升格且不产生重复规则。
  8. 模型不可用只终止当次 AI 调用,库内已有正式内容不被损坏。

9. 关联 SoT