声明式元认知自修改(Metacognitive Self-Evolution)
让 Agent 越用越聪明的充分条件不是让它能改自己,而是让它改错时能被抓住并回滚。
论文给的判决很硬:Practice Makes Unsafe 测了 25 个配置,21/21 个自演化配置全部写出了不安全产物,其中 15 个会伤害到新会话。原因不是模型笨——是演化在优化"任务成功",而不安全的成功同样会被当成经验沉淀下来。所以本 skill 的重心一半在"怎么改",另一半在"改错了怎么拦"。
受众 / Audience
所有 Agent 用户,从完全没写过 skill 的新手到维护几十个 skill 的专业用户全覆盖。
新手照「最小运行示例」复制一条命令即可跑通初始化;进阶用户可改棘轮容差 ε、证据门槛;专业用户可把 apply --git 接进 CI 当结构门禁。
> 能力边界声明:本 skill 是规则演化引擎,不是通用元认知Agent。它能:
> - 在单一领域内管理规则的演化(提案→过闸→应用→裁决)
> - 通过双指标棘轮确保演化不削弱安全性
> - 在不同领域间手动迁移(需人工配置新领域制品)
>
> 本 skill 不能:
> - 自动将A领域的规则迁移到B领域(需人工配置)
> - 自主修改元认知机制(M1 修改需人类 TTY confirm --approve 铸造一次性 token)
> - 在没有episode证据的情况下自动演化(需≥2次独立复现)
能力边界三分类(✅擅长 / ⚠️需素材 / ❌超范围)
| 分类 | 说明 | 例子 |
|---|---|---|
| ✅ 擅长 | 单领域内规则的提案→过闸→应用→裁决闭环 | ① 把"改文件前先 Read"沉淀进 A2 规则库;② 用双指标棘轮拦截把安全规则改没的提议;③ 跨 code_review/paper_review/document_editing 三领域用 init-domain 实例化 |
| ⚠️ 需素材 | 需要你先提供证据/配置才能跑 | ① 无 episode 记账时 verdict 无法裁决(需先 episode 至少 2 次);② 新领域实例需你给领域 key 或 JSON 配置;③ 调 meta_optimizer 需先有 ledger/meta-cognition.log 反思记录 |
| ❌ 超范围 | 本 skill 不负责,找别的工具 | ① 自动把 A 领域规则迁移到 B 领域(需人工配新制品);② 改 CONTRACT.md/metacog.py/SKILL.md 三个不动点;③ 通用文案写作/代码生成(它是规则演化引擎,不是内容生成器) |
触发条件 / Triggers
> 出现以下任一情形即自动加载本 skill(无需显式点名):
| 你说的话 / 遇到的情况 | 例子 |
|---|---|
| 想让 Agent 自己改自己、越用越聪明 | "能不能让它自己优化自己" |
| 讨论元认知自修改 / 元层可编辑 | "元层可编辑""改改法" |
| 担心安全约束被演化掉 | "它会不会把安全规则自己改没了" |
| 设计自进化系统 / 可控自指 | "想搭个会自我进化的 Agent" |
| 评审某个 Skill 的自进化结构 | "帮我看看这个结构安全吗" |
最小运行示例 / Quick start
设 MC 指向本 skill 目录:
# Linux/macOS
export MC="${HOME}/.workbuddy/skills/unclekk-metacog-self-evolve/scripts/metacog.py"
# Windows (PowerShell)
$env:MC = "$HOME\.workbuddy\skills\unclekk-metacog-self-evolve\scripts\metacog.py"
# Windows (cmd)
set MC=%USERPROFILE%\.workbuddy\skills\unclekk-metacog-self-evolve\scripts\metacog.py
步骤 0: 初始化
- 输入: 空工作目录
- 输出:
.metacog/目录及五制品骨架 - 命令:
cd <你的工作目录> && python3 "$MC" init
步骤 1: 会话开始 — 加载生效制品(G2 检索闸)
- 输入:
.metacog/目录已存在 - 输出: 当前生效制品内容(A1-A4 + M1)
- 命令:
python3 "$MC" retrieve --strict # 只输出 active,排除试用期条目
python3 "$MC" retrieve # 包含试用期,标注 <试用中>
把输出读进上下文,作为本次会话的行为约束。被 revoked 的条目不会出现在这里——这是 Practice Makes Unsafe 强调的检索闸:光删掉不够,还得保证未来的执行者捞不到它。
步骤 2: 任务结束 — 记账归因(操作 1:效用内生)
- 输入: 任务完成,可观测事件计数(来自任意工作流)
- 输出: episode ID 写入 ledger/episodes.jsonl
- 命令:
# ✅ 推荐(操作 1 起):效用由可观测事件推导,注水在结构上不可行
python3 "$MC" episode --task "改公众号排版脚本" \
--events rework=1 --events violation=1 --violations 1 \
--attributed A2 --note "漏了先读原文件,覆盖了 KK 的手改内容"
# ✅ 也可一次性传 JSON 对象(与 --events 合并累加)
python3 "$MC" episode --task "同上" --events-json '{"rework":1,"accepted":1}' --violations 1
# ⚠️ 兜底(deprecated):无事件时声明式 --utility 仍可写,但其效用不驱动沉淀
python3 "$MC" episode --task "同上" --utility 0.7 --violations 1 --attributed A2
- 事件词汇对一切工作流通用(见
META_EVENTS):负向rework/rerun/revert/correction/test_fail/gate_block/error/timeout/manual_fix/violation;正向accepted/praised。不同工作流只填各自可观测到的计数,无需改引擎。 - 效用推导:
compute_utility(events)纯函数按权重扣分/上浮,区间 0~1,结果写入utility_source=derived+utility_provenance(可复算、可审计)。不读命令行数字,所以"改命令行数字"无法抬高效用。 - 注水检测:即便走
--utility兜底,若申报值 ≥0.8 却伴随rework/correction/violation/manual_fix/revert,会打[注水嫌疑]告警。 - 演进切换(牙齿):库中存在
derived数据后,基线建立与verdict验收只取 derived;声明式--utility被架空——旧数据不删,但不再能驱动 PROMOTE/沉淀。 violations:违规/返工次数。前 5 个 derived episode 自动建立基线。
步骤 3: 发现问题 — 提议自修改
- 输入: 问题归因(哪个制品)、修改内容、证据 episode
- 输出: 提议 ID 写入 gates/quarantine/
- 命令:
python3 "$MC" propose --artifact A2 --op add \
--content "- 改任何已存在文件前先 Read,禁止盲写覆盖。" \
--reason "两次覆盖了用户手改内容" \
--episode E-20260826-xxxx --episode E-20260826-yyyy
op 可选 add / replace --target R-00X / remove --target R-00X。
提议只进隔离区,不直接生效。
🔴 CHECKPOINT: 确认提议已入隔离区后继续。
步骤 4: 过闸(G1 写入闸)
- 输入: quarantine 中的提议
- 输出: 裁定 PASS / HOLD / BLOCK
- 命令:
python3 "$MC" gate
四类检查:不动点保护 → 红线扫描 → A3 只增不减 → 证据门槛(≥2 次)。
裁定 PASS / HOLD(证据不足,补证据再来)/ BLOCK(记入 archive 负样本)。
🔴 CHECKPOINT: 裁定 PASS 后继续,BLOCK 则停止。
步骤 5: 应用 → 进入试用期
- 输入: gated 的提议
- 输出: 制品更新,状态 trial
- 命令:
python3 "$MC" apply --token <token> # M1 或高风险条目需人类凭证(人类 TTY `confirm --approve` 生成)
python3 "$MC" apply --git # 顺带 git commit 留回滚点
写入制品,状态 trial。此时还不算沉淀。
🔴 CHECKPOINT: 应用后继续步骤 6。
步骤 6: 双指标棘轮裁决
- 输入: 累计 5 个新 episode
- 输出: PROMOTE / REVERT 裁决
- 命令:
python3 "$MC" verdict # 常规双指标裁决
python3 "$MC" verdict --auto-m1 # 连续3次REVERT时自动生成M1元层自省提议(仍需人类 --token 凭证确认才生效)
python3 "$MC" verdict --adaptive # 棘轮自适应:按当前违规率动态收紧/放宽判定基线
> --adaptive 默认关闭,行为与原版完全一致;开启后按窗口违规率收紧(>0.3 基线×0.95)或放宽(<0.1 基线×1.05)判定阈值(详见 CHANGELOG.md Phase 1.2)。status 命令会展示三档自适应阈值。
> verdict 的 PROMOTE/REVERT 与 --auto-m1 触发的 M1 提议都会写入元认知日志(详见下条 meta-log 命令,Phase 2.1)。
累计 5 个新 episode 后比对基线:
| 指标 | 通过条件 | 依据 |
|---|---|---|
utility |
≥ 基线 − 0.02 | SHE 要求安全演化不牺牲良性效用;ε 对应 Practice Makes Unsafe 中"效用仅变动 0.4 点"的量级 |
violation_rate |
≤ 基线(严格不退) | 安全不允许用效用换 |
两条同时满足 → PROMOTE,条目转 active,基线上移一代。
任一不满足 → REVERT,条目移除/撤销,记入 archive 作负样本。这一步就是防误演化的主闸。
> 操作 2(v2.2.1)+ P0 修复(v2.2.3·v2.2.4)held-out 验收:verdict 的验收样本只用试用后产生的泛化数据 all_eps[trial_from_index:],与 proposer 自选的 cited(propose --episode 所引训练集)彻底解耦。关键点(v2.2.3 修复 P0 主路径):留出集的唯一起点 trial_from_index 由 cmd_apply(受人类确认闸约束)写入受信任锚 ledger/applies.jsonl,verdict 只读此锚、完全忽略提案自带字段——改 1 个字段翻 REVERT→PROMOTE 的伪造被结构性封死。v2.2.4 补刀(降级闸门假防御):v2.2.3 的「无锚一致性闸门」下界取自攻击者自选 cited,把 cited 与 trial_from_index 改到自洽即绕过(向量A cited=[] fx=0 窗=全部含引用证据→PROMOTE;向量B cited=[E3] fx=3 把最差样本移出窗→PROMOTE)。v2.2.4 已彻底删除该降级闸门:无受信任锚的提案一律 HOLD,不采信任何自带字段("没锁的门不该存在")。改动若只在训练集提升、留出集下降 → 必 REVERT(抓过拟合自证)。留出集为空或不足 → HOLD,绝不回落训练集放行(即便 --force)。正常无引用流程:整窗即留出集,合法改进仍 PROMOTE。详见 scripts/test-held-out.py(31/31 PASS,含向量 A/B 自洽伪造 HOLD)。
> 操作 3(v2.2.5)归因一致性(Attribution Consistency):SHE「归因引导演化」要求每次失败必须归到正确的制品(重复踩坑→A3,用错工具→A4,做法错→A2),否则会反复改错地方、把安全教训漏出安全记忆。两件事:① --attributed 升为必填(fail-closed 硬闸)——cmd_episode 在 --attributed 缺失时返回退出码 2(与 --events/--utility 缺失同级),复用 add_fix 给出「从 A1/A2/A3/A4/M1 选一个」的可操作指引(不放在 argparse required,以保持退出码 2 行为与错误文案统一);② 归因漂移告警(软告警,不阻断记账)——新增纯函数 detect_attribution_drift,由负向事件签名推导「应归因制品」(优先级 安全(A3) > 工具(A4) > 行为(A2)),当记录的 attributed 与建议明显不符时给出 [归因漂移] 警示。保守设计(避 D3 过度严格):仅两种情形告警——(a) 安全事件(红线/约束)被归到任何非 A3(安全教训不进永不删除的 A3 → 丢失);(b) 具体失败(A2/A4 建议)被错归到安全(A3)/元层(M1)(稀释该制品本职语义)。相邻制品 A2↔A4 不告警,中性事件(仅 accepted)不告警。episode 记录持久化 attribution_drift 布尔供后续分析。详见 scripts/test-attribution.py(16/16 PASS:必填 RC=2 / 漂移告警 / 不误报相邻与中性)。零回归:test-held-out 31/31、test-core 13/13、test-boundary-cases 40/40、test-utility-derivation 32/32、test-adaptive-ratchet 11/11、test-meta-log-integration 8/8。
> 操作 4(v2.2.6)元层参数化(Meta-Layer Parameterization · 参数级自指):把引擎真正使用的棘轮容差 ε、裁决窗口 window、证据门槛 min_evidence 从 metacog.py 硬编码常量外移到 meta/M1-evolve-policy.json,使「M1 的演化 = 真的改机制」——比「文本级自指」真、比「代码级自指」安全(metacog.py 属 IMMUTABLE_TARGETS 不动点,永不改动,仅本参数文件可演化)。两件事:① cmd_init 写 meta/M1-evolve-policy.json(缺失才写,保留用户自定义),含 ratchet.{epsilon,default_window,min_evidence} + 注释说明「改这里 = 真的改机制」;② 运行时参数级自指——cmd_episode/cmd_verdict/cmd_status 在策略文件存在(source=="file")时以其为 window/ε 源,run_gate 以其为证据门槛源。load_meta_policy 提供 fail-safe:文件缺失 / 非法 JSON / 顶层非对象 / 类型错误 / 越界(window<1、min_evidence<1、ε∉[0,1])一律回落内置默认值 + warn,绝不因配置问题改变安全行为或崩溃;无策略文件时尊重棘轮既有 window/ε(向后兼容 = fail-safe 默认值),不覆盖旧流/测试自定义窗口。cmd_status 显式打印 [元层参数源: file/default] 让「M1 演化真的改了机制」可见、可审计。新增 scripts/test-meta-policy.py 16/16 PASS(默认/文件/非法JSON/越界;run_gate min_evidence=2 拦 1-episode、=1 放行;window=5 需 5-episode、=3 需 3;status 显示 [元层参数源: file] 与文件值 ε:0.5/window:3)。零回归:test-held-out 31/31、test-attribution 16/16、test-core 13/13、test-boundary-cases 40/40、test-utility-derivation 32/32、test-adaptive-ratchet 11/11、test-meta-log-integration 8/8、test-cli-wiring 4/4。状态(2026-09-23,独立 Agent 审计长 ✅ APPROVED):按 KK 授权「自验证须调用独立 Agent 第三方审计」,本操作由隔离上下文独立 Agent 审计长复验通过——全量 171/171 零回归(含 test-held-out 31/31、test-meta-policy 16/16),4 组对抗探针全部符合设计(参数真改机制 default_window=1 即生效 / 非法JSON+越界ε+顶层非对象+类型错误+window<1+min_evidence<1 均 fail-safe 回落默认不崩溃 / 无文件尊重棘轮回退);grep 确认 window/ε/min_evidence 仅来自 load_meta_policy 与棘轮回退、episode/proposal 不可信输入零注入;metacog.py 不动点未被实质改动(常量仍仅为 fail-safe 默认)。判定 ✅ APPROVED,操作 4 关闭。
> D2–D5 安全修复(v2.3.0,PoC 审计报告 2.2–2.4 收口):独立 PoC 审计对「可控自指」打出 4 条边界缺陷,本版本逐条修复(均经 scripts/test-d2-d5.py 23/23 PASS + 全量零回归 + 独立 Agent 审计长复验):
> - D2 红线语义绕过加固:原 7 条关键词正则测 6 条语义等价输入有 4 条被绕过(如「以后不用再问用户」「清空 A3 里过时的教训条目」)。现扩充 paraphrase 覆盖(免人工确认 / 削弱 A3),6 条中 4 条原绕过项转为 BLOCK;同时诚实声明 denylist 不构成语义防护(见上「红线闸能力边界」),禁改硬约束前移至 CONTRACT.md。
> - D3 不动点闸过严修复:原不动点保护是「文件名全匹配即 BLOCK」,会误杀良性文本(如「禁止修改 metacog.py」)。现改为仅当「动词 + 不动点文件名」结构出现、且前 ~20 字符无否定/保护词(禁止/不要/不得…)才 BLOCK,保护语境放行(如「禁止修改 metacog.py」「不要改动 SKILL.md」),动作指令(「修改 metacog.py」「编辑 SKILL.md」)仍拦截。
> - D4 直写绕过系统级强制(verify):绕过 propose→gate→apply 直接写 artifacts/*.md 会绕过三闸、retrieve --strict 照常吐出。现 cmd_init/cmd_apply 后把各制品内容哈希记入 ledger/integrity.json;新增 verify 子命令比对当前哈希与快照,检出直写篡改返回 1;retrieve 前置非阻塞完整性告警。直写篡改从此可观测、可追溯。
> - D5 回滚默认关闭修复:原 --git 默认关、REVERT 仅翻转状态不字节还原,无撤销点。现①git 仓库内 apply/verdict 默认开启留底(--no-git 可关);②apply 始终把被改条目的旧文本记入 ledger/rollback.jsonl(ledger 字节级兜底,默认就有);③新增 rollback 子命令——git 仓库优先 git checkout(非破坏、可追溯),非 git 走 ledger 字节还原(revoked → active,正文一致);status 显式提示回滚可用性。
> 新增 scripts/test-d2-d5.py 23/23 PASS:D2(4 条原绕过项 BLOCK + 2 条对照仍 BLOCK + 3 条良性不误杀)/ D3(3 动作指令 BLOCK + 3 保护语境放行)/ D4(直写后 verify 返回 1 + retrieve 完整性告警 + 底层哈希不一致)/ D5(apply 后 revoked + 回滚点已记录 + rollback 字节还原 active 且正文一致)。全量零回归:test-core 13/13、test-boundary-cases 40/40、test-held-out 31/31、test-attribution 16/16、test-meta-policy 16/16、test-utility-derivation 32/32、test-adaptive-ratchet 11/11、test-meta-log-integration 8/8、test-cli-wiring 4/4(+ 其余历史套件)。状态(独立 Agent 审计长 ✅ APPROVED,见 Task #18 / references/independent-audit-v2.3.0.md):按 KK 授权「自验证须调用独立 Agent 第三方审计」,本批修复由隔离上下文独立 Agent 审计长复验通过。
> 人类闸凭证化(v2.4.0,操作 5 / PoC 报告 P1:堵 AI 自签人类确认):--human-ok 是布尔旗标,AI 自己跑 apply --human-ok 即可自签——旗标证明不了任何人的意志。v2.4.0 起三段强制链替代:①confirm --init——人类在真实 TTY 设置口令(getpass 隐藏输入),只存 PBKDF2-SHA256 哈希(10 万轮加盐),非 TTY 一律拒绝(AI 可以执行任意 CLI,但无法伪造 TTY 上的隐藏输入);②confirm --approve --id <提案>——口令校验通过后用 secrets 生成一次性 token,绑定单个提案、默认 30 分钟过期;③apply --token <token>——校验「绑定 / 未使用 / 未过期」,用后即焚(整表重写 ledger/confirmations.jsonl 标记 used)。--human-ok 对 requires_human 提议一律硬拦截(rc=2)并指路 confirm 流程;D1 的退出码 2 语义保留。威胁模型边界(诚实声明):token 落在 ledger/confirmations.jsonl,AI 读到后可用于其绑定的那个提案——这是设计内行为(人类已确认该提案,AI 执行落盘是流程本意);本闸堵的是「AI 铸造凭证」(口令哈希 + TTY 强制)与「token 挪用/复用/过期」(绑定 + 一次性 + 限时),不防「AI 直写 confirmations.jsonl 伪造凭证记录」——那属 .metacog 直写威胁模型,由 D4 verify 同等力度兜底(凭证账本不在哈希快照内,属更强对抗模型,见 SKILL.md 诚实天花板)。新增 scripts/test-human-gate.py 22/22 PASS(TTY 强制 3 / 口令生命周期 5 / 铸造+应用+焚毁 7 / 自签废除 5 / 过期+普通流 2);全量回归零失败(test-core 14/14 含用后即焚断言)。状态(独立 Agent 审计长 ✅ APPROVED,见 references/independent-audit-v2.4.0.md)。
步骤 7: 定期体检
- 输入: 任意时刻
- 输出: 基线、制品统计、趋势判定
- 命令:
python3 "$MC" status
输出基线、各制品条目统计、以及最近两窗口趋势判定:变聪明 / 变稳 / 平台期 / 退化(疑似误演化)。
步骤 7.1: 元认知日志复盘(Phase 2.1)
- 输入: 任意时刻
- 输出: 最近 N 天反思记录统计与洞察
- 命令:
python3 "$MC" meta-log # 最近 7 天反思记录(PROMOTE/REVERT/M1 自动触发)
python3 "$MC" meta-log --days 30 # 最近 30 天
日志落点 <root>/ledger/meta-cognition.log(JSONL),每条含 event_type/context/analysis/action/insight。用于事后检索"Agent 是否真的越用越聪明"、定位系统性误演化。格式见 references/design/meta-cognition-log-spec.md。
步骤 7.2: 从领域模板初始化(Phase 2.2)
- 输入: 领域 key(code_review / paper_review / document_editing)+ 可选输出目录 / 配置
- 输出: 一个引擎兼容的领域实例
.metacog(五制品 + CONTRACT + 标准 ratchet) - 命令:
python3 "$MC" init-domain code_review # 当前目录生成 .metacog
python3 "$MC" init-domain paper_review -o ./my_review # 指定输出目录
python3 "$MC" init-domain document_editing -c cfg.json # 用户 JSON 配置合并
领域红线建议写入 meta/domain-redlines.md(仅 advisory,不削弱全局 REDLINES 安全不变式)。格式见 references/design/domain-template-spec.md。
步骤 7.3: 性能 Benchmark(Phase 3.1,模拟框架)
- 输入: 领域(code_review / paper_review)/ episode 数 / 输出目录
- 输出: 每领域
average_utility/utility_trend/violation_rate(paper_review 另含accuracy)+ JSON 结果 + HTML 汇总报告 - 命令:
python3 "$MC" # 注意:benchmark 是独立包,直接跑脚本
python3 scripts/benchmark/run_all.py --domain all --episodes 50 --verbose
python3 scripts/benchmark/visualize.py references/benchmark/results/benchmark-code_review-*.json
框架为模拟多领域自改进效果(纯标准库、不调真实 LLM)。可视化 PNG 需 matplotlib,缺失时自动跳过、仅出 HTML/JSON(零第三方依赖硬约束)。格式见 references/design/benchmark-spec.md。
🛑 STOP: 连续 2 轮 verdict 全部 REVERT → 人工介入审查演化机制。
与相邻技能的分工
> 近邻 hyperagents-self-evolution 已本机卸载,仅作历史/论文来源参考(详见 references/paper-mapping.md)。
| 技能 | 现状 | 本 skill 的差别 |
|---|---|---|
hyperagents-self-evolution |
本机已卸载(2026-08-26);离线批跑,需 eval 脚本 + API key | 本 skill 在日常真实会话中在线累积,无需 eval 脚本,用滑动窗口统计代替离线评测 |
self-improving-agent |
在 | 那是"记录",本 skill 是"记录→归因→闸门→棘轮→沉淀/回滚"的闭环,有量化验收 |
skill-evolver/darwin-skill |
在 | 优化某个 SKILL.md 文件;本 skill 优化的是 Agent 自身的元认知契约,且元层可自我修订 |
定制化参数 / Customization
本 skill 的行为可通过以下参数按你的场景调整(操作 4 起改 meta/M1-evolve-policy.json 即可,参数级自指,无需碰引擎;或 propose 时指定),无需改引擎逻辑:
| 参数 | 位置(操作 4 起) | fail-safe 落点 | 默认值 | 怎么调 |
|---|---|---|---|---|
| 效用容差 ε | meta/M1-evolve-policy.json 的 ratchet.epsilon |
metacog.py 常量 EPSILON |
0.02 |
改 JSON 即可(参数级自指);放宽到 0.05 更易 PROMOTE;收紧到 0.01 更保守 |
| 证据门槛 | meta/M1-evolve-policy.json 的 ratchet.min_evidence |
metacog.py 常量 MIN_EVIDENCE |
2 次独立 episode |
高风险领域调到 3 更稳 |
| 裁决窗口 | meta/M1-evolve-policy.json 的 ratchet.default_window |
metacog.py 常量 DEFAULT_WINDOW |
5 |
任务稀疏时降到 3 加快反馈 |
| 领域红线 | init-domain 生成的 meta/domain-redlines.md |
空(advisory) | 按领域补"本场景绝对不能做的事",仅建议不削弱全局 REDLINES |
|
| 自适应开关 | verdict --adaptive |
默认关 | 开启后按窗口违规率动态收紧/放宽判定基线 |
> 传递个人偏好时,把上面任一项写进你项目的 CONTRACT.md(人类持有,不在演化范围内),即成为团队统一约定。
五制品声明(可演化对象仅此五项)
来自 SHE 的 harness 四制品分解——把职责切开,才能归因,才能局部演化:
.metacog/
├── CONTRACT.md ← 人类持有,Agent 禁止修改(自指不动点)
├── artifacts/
│ ├── A1-system-prompt.md ← 角色与行为基线
│ ├── A2-rule-bank.md ← 具体做法条目(演化主战场)
│ ├── A3-safety-memory.md ← 安全记忆,APPEND-ONLY
│ └── A4-tool-policy.md ← 工具与权限边界
├── meta/
│ └── M1-evolve-policy.md ← ★ 元层:如何提议修改的规则本身(可被演化)
├── ledger/{episodes.jsonl, ratchet.json, archive.jsonl}
└── gates/quarantine/ ← 提议隔离区(不是生效区)
M1 是关键:它规定"如何改进",而它自己也在可演化清单里。这就是 HyperAgents 的元认知自修改——不只改行为,还改产生改进的机制。差别在于本 skill 给自指加了截断:CONTRACT.md、metacog.py、SKILL.md 三个文件 Agent 不可动。没有这个不动点,安全约束会在若干代之后被自己演化掉。
与 SHE 共享不动点(统一契约)| Shared Fixed Points with SHE
本 skill 的 A1–A4 就是 unclekk-safety-harness-evolution(SHE,L3)的四工件,1:1 对应:
| metacog 制品 | SHE 工件 | 说明 |
|---|---|---|
| A1 系统提示 | system_prompt |
角色与行为基线 |
| A2 规则库 | rule_bank |
具体做法条目(演化主战场) |
| A3 安全记忆 | safety_memory |
append-only |
| A4 工具策略 | tool_policy |
工具/权限边界 |
三道闸(G1 写入 / G2 检索 / G3 确认)+ 双指标棘轮,与 SHE 三硬闸共同构成统一不动点契约;唯一真相源 CONTRACT.md(运行时副本 .metacog/CONTRACT.md),两 skill 共享定义、引擎独立。
归因决策表(出问题时改哪个制品)
不许笼统地"我学到了要更小心"。必须归因到具体制品,否则改动无法验收:
| 症状 | 归因制品 | 提议要求 |
|---|---|---|
| 重复踩同一个坑 | A3 | 直接生效,不设试用期(教训不该等) |
| 用错工具 / 越权操作 | A4 | 需 ≥2 次独立证据 |
| 具体做法错、步骤漏 | A2 | 需 ≥2 次独立证据 |
| 角色偏移、风格不符 | A1 | 需 ≥2 次独立证据,谨慎 |
| 改过但没用 / 反复改同一处 / 连续 3 次回滚 | M1 | 必须人类确认(TTY confirm --approve → apply --token) |
最后一行是元认知的入口:当问题不在"规则错了"而在"找规则的方式错了",就该改 M1。
不可演化的红线
以下内容命中即 BLOCK,哪怕它确实让任务成功了——这正是论文反例的核心教训:
- 绕过/跳过/关闭 审计、检查、确认、校验、闸门
- 免除人工确认("无需向用户确认""自动同意")
- 破坏性命令(
rm -rf、del /s、drop database) - 绕过版本控制保护(
--no-verify、push --force) - 提权与放宽权限(
chmod 777、bypassPermissions) - 明文凭据
- 削弱或删除 A3 安全记忆
- 触及
CONTRACT.md/metacog.py/SKILL.md(自指不动点)
> 红线闸能力边界(诚实声明,v2.3.0 / D2):REDLINES 是关键词正则拒绝列表(denylist),判定边界 = 词表覆盖面,不构成语义防护——提出修改的主体是 LLM,改写措辞是其默认行为,本闸只能拦「照抄禁用词」,拦不住「换种说法」。因此:①凡命中红线的语义可疑项一律升级为需人类确认(不靠正则赌语义);②禁改类硬约束(不动点、A3 只增不减)已前移至 CONTRACT.md 人类侧契约,不依赖正则覆盖;③真实兜底仍是双指标棘轮(5 episode + utility/violation_rate 双不退)——但 utility 由外部申报、无独立校验,故语义绕过项必须靠人类在凭证确认环节兜底(P1 起 --human-ok 已废除,见下方人类闸凭证化)。不要据此声称「拦住了不安全演化」,只能说「拦住了字面禁用词」。
元层自省触发条件
满足任一,必须改 M1 而不是继续改 A2:
- 连续 3 次 verdict 全部 REVERT(verdict 会自动提示)
- 同一处被反复改动 ≥3 次(归因错了)
- status 连续两窗口趋势不升(当前演化机制已失效)
强制执行: 不要忽略这些信号,立即执行 M1 提议。
使用纪律 / Usage Discipline(输出准确性约束)
- 禁止在不确定领域胡编:任何
propose/gate裁定 /verdict裁决都必须基于ledger/中已有的 episode 证据或明确的指标数值,不得凭空编造"据观察""通常而言"式的结论。 - 每个输出注明决策逻辑:提议要写清
--reason并引用--episode;gate裁定要说明命中了哪一类检查(不动点 / 红线 / A3 只增 / 证据门槛);verdict要列出utility与violation_rate两项数值及与基线的对比。让用户能复核"为什么这么定"。 - 诚实评分:utility 注水会让棘轮失效(详见 FAQ Q5)。评分偏低不可耻,被坏经验骗过才危险。
步数上限与兜底 / Step budget & fail-open
| 项 | 上限 | 超限行为 |
|---|---|---|
| 单条提案证据门槛 | ≥2 次独立 episode | 不足则 gate 返回 HOLD,不进入应用 |
| verdict 裁决窗口 | 累计 5 个新 episode | 未凑满保持 trial,不裁决、不沉淀 |
| 连续 REVERT 警戒 | 连续 2 轮全部 REVERT | 🛑 STOP:人工介入审查演化机制 |
| 隔离区滞留 | 30 天未处理 | 自动归档为负样本,不污染生效区 |
什么时候别用(反模式)
| 场景 | 为什么不要做 | 替代方案 |
|---|---|---|
| 一次性任务 | 没有重复使用,棘轮统计无意义 | 直接写脚本,不用本 skill |
| 无法给出 utility | 指标注水会让棘轮失效,比不做更糟 | 必须评估 utility 后再决定 |
| 期待「装上就自动变强」 | 本 skill 要求每次任务后记账。不记账 = 没有进化 | 必须建立 episode 记账习惯 |
| 试图绕过不动点 | CONTRACT.md / metacog.py / SKILL.md 永远禁改 | 必须通过 propose → gate → apply 流程 |
| 跳过 episode 记账直接 propose | 无证据的提议会被 gate HOLD | 必须先积累 ≥2 次 episode |
反例黑名单(dim9: 绝对不要做的事)
| # | 反模式 | 为什么不要做 | 替代方案 | 归因 |
|---|---|---|---|---|
| 绕过安全检查 | 审计/确认/验证是安全底线 | 必须完整过三闸 | SKILL_DEFECT | |
| 免人工确认 | 绕过G3闸导致误演化固化 | 必须人类 TTY confirm 凭证(--token) | SKILL_DEFECT | |
| 破坏性命令 | rm -rf 等不可逆操作 |
必须先 archive 备份 | SKILL_DEFECT | |
| 绕过版本控制 | --no-verify 破坏回滚能力 |
必须始终用 apply --git | SKILL_DEFECT | |
| 提权/放宽权限 | chmod 777 降低安全基线 | 必须保持最小权限 | SKILL_DEFECT | |
| 明文凭据 | API key 明文写入制品 | 必须用环境变量 | SKILL_DEFECT | |
| 削弱安全记忆 | 删除 A3 等于删除教训 | 必须A3 永远 append-only | SKILL_DEFECT | |
| 触碰不动点 | 改契约文件破坏一致性 | 必须这三文件永远禁改 | SKILL_DEFECT | |
| utility 注水 | 评分虚高让棘轮失效 | 必须诚实评分 | OPTIMIZATION | |
| 跳过证据门槛 | 单次成功不得直接生效 | 必须收集 ≥2 次 episode | EXECUTION_LAPSE |
数据隐私规范 / Data Privacy
本 skill 在 episode / meta-log / ledger/ 中记录的是行为归因数据(任务名、utility、violations、哪条规则被改),不是业务原文。仍请遵守:
- 敏感内容脱敏:
episode --note与meta-log的context字段只写"发生了什么、归因为哪条制品",不要粘贴用户对话原文、PII、密钥、内部文档片段。例:--note "漏读原文件覆盖了用户手改"✅ /--note "用户张三的微信token是xxx"❌。 - 凭据永不入制品:红线第 6 条已禁明文凭据;API key 一律走环境变量(
$env:NAME/os.environ),制品里只留"需环境变量 X"的提示。 - 本地优先:所有 ledger 默认落在你指定的
<root>/,不联网、不上传。需要跨设备共享时走你自己的 Obsidian/私有同步,不要交给第三方。 - 可审计可擦除:
ledger/archive.jsonl(负样本)与episodes.jsonl含演化轨迹,属个人数据;删除.metacog/目录即整体清除,无需逐个擦除。
失败处理决策树
如果 propose 失败:
→ gate 返回 BLOCK:
- 检查红线正则是否误匹配
- 检查不动点保护是否冲突
- 修复后重新 propose
→ gate 返回 HOLD:
- 证据不足,收集更多 episode
- 至少 ≥2 次独立复现
→ gate 超时:
- 检查文件锁是否竞争
- 清理 quarantine 目录后重试
如果 verdict 失败:
→ PROMOTE 失败(utility 下降):
- 条目 REVERT
- 记入 archive.jsonl 负样本
- 分析 utility 下降原因
→ REVERT 失败(棘轮卡死):
- 检查 episodes.jsonl 数据完整性
- 手动清理 stale episode
- 重新建立基线
如果 apply 失败:
→ 原子写入失败:
- 检查磁盘空间
- 检查文件权限
- 清理临时文件后重试
→ git commit 失败:
- 检查 git 状态
- 合并冲突后重试
- 或使用 --force 覆盖(需人工确认)
🔴 CHECKPOINT: 任何失败处理后,必须运行 python scripts/test-core.py 确认无回归。
详见 references/paper-mapping.md(含 4 篇论文逐条落地映射与一处主动设计分歧)。核心对应:HyperAgents 元层可编辑(M1 在可演化清单内 + 人类确认)/ SHE 四制品分解 + 归因引导 + 安全-效用双验证 / Practice Makes Unsafe 三闸(G1 写入 / G2 检索 / G3 确认)+ SafeEvolve / Survey 四组件闭环(episode→制品→环境→gate+棘轮)。
退出码与排查 / Exit codes & troubleshooting
命令失败时会带「↩ 怎么改」行;每次退出码 2(含敲错子命令/参数的 argparse 级错误)还会在 stderr 末尾指向集中排查文档。完整索引见 references/troubleshooting.md(或 python metacog.py --explain 直接打印)。
| 退出码 | 含义 | 典型场景 | 怎么处理 |
|---|---|---|---|
| 0 | 成功 | — | — |
| 2 | 参数/前置校验失败,或安全闸拦截 | 根未 init、--utility 超界、缺 --content/--target、--artifact 非法、G1 闸 BLOCK/HOLD、apply 目标不存在、需 --token 人类凭证、init-domain 配置错 |
看报错「↩ 怎么改」;对照 references/troubleshooting.md |
| 其他非 0 | 运行期异常(配置/IO/git) | 配置解析失败、git add/commit 失败、文件读取失败 | 看报错「↩ 怎么改」;查 references/troubleshooting.md 第五类 |
> --explain 是全局开关,需放在子命令前:python metacog.py --explain。
已验证(真实运行样例,2026-09-08 实跑)
- Python 3.10+(零第三方依赖,仅使用标准库)
- 测试环境: Windows 10, Python 3.13.12(managed)
- 测试结果: 203/203 全绿、零回归(17 套测试:test-core 13 / test-boundary-cases 40 / test-m1-auto-trigger 19 / test-adaptive-ratchet 11 / test-meta-log 13 / test-meta-log-integration 8 / test-meta-log-command 8 / test-domain-init 12 / test-init-domain 8 / test-domain-migration 6 / test-benchmark 13 / test-p0-1-real-data 15 / test-p0-2-knowledge-transfer 19 / test-p2-1-meta-optimizer 3 / test-p2-2-domain-detector 5 / test-p2-3-visualize 6 / test-cli-wiring 4)
- v2.0.0 新增能力(详见正文步骤 6 / 7.1 / 7.2 / 7.3):
verdict --auto-m1(M1 元层自省自动提议)、verdict --adaptive(棘轮自适应阈值)、meta-log(元认知日志复盘)、init-domain(跨领域模板实例化)、scripts/benchmark/(多领域性能 Benchmark 模拟框架) - v2.1.0 新增能力(P0/P2 修复):
meta_optimizer.py(基于元认知日志的自动优化提案)、domain_detector.py(内容→领域自动检测)、visualize_text.py(纯 Python 可视化,无 matplotlib 依赖) - v2.1.1 修复(关键):v2.1.0 的
p2-fix-report声称已加optimize/detect-domainCLI 命令,但metacog.py的 argparse 实际未注册这两个子命令(仅模块级cmd_optimize/cmd_detect_domain存在)。本版本在metacog.py中正式接线:注册optimize(含--dry-run/--apply)、detect-domain(含--file/-f、--text/-t),并以惰性导入包装打破与meta_optimizer/domain_detector的循环依赖;detect-domain纳入main()守卫豁免(无需.metacog即可运行)。新增scripts/test-cli-wiring.py(4/4 PASS)锁定接线。 - 完整测试日志: 见
references/test-evidence.md - 独立审计报告: 见
references/independent-audit-v2.1.1.md(独立审计 72/100,架构扎实但核心效用声称夸大,v1.4.x 已逐项回应);整合版见references/independent-audit-integrated-v2.1.2.md - 基线评估: 见
references/independent-audit-v2.1.1.md(9维度 rubric 67/100,dim9 反例黑名单缺失,v1.4.x 已补)
FAQ / 坑点
Q1. 装上就能自动变强吗?
A. 不能,必须每次任务后 episode 记账;不记账 = 没有进化。坑:以为 init 完就万事大吉。
Q2. 它会不会把安全规则自己改没?
A. 不会。三不动点 + 红线 + G3 人类确认闸三重拦截。坑:别把"元层可编辑"误读成"啥都能改"——M1 能改,三个不动点文件永远禁改(L3 可控自指,区别于会自毁的 L2 半开自指)。
Q3. M1 怎么改?每次都要人工确认吗?
A. 只在触发"元层自省"条件时才改 M1,且 apply 必须带人类 TTY confirm --approve 铸造的一次性 --token,否则拒绝。坑:--human-ok 已废除(AI 可自签)——被拦是设计不是 bug。
Q4. 误演化了怎么办?
A. verdict 双指标任一不满足即 REVERT 自动回滚,并记入 archive.jsonl 负样本。坑:无棘轮时坏经验被固化;有棘轮时坏经验被捞出标注,越改越稳。
Q5. 基线怎么算?utility 注水会怎样?
A. 操作 1 起基线由前 5 个 derived episode 推导值算术平均建立;一旦库中有了 derived 数据,声明式 --utility 不再参与基线/验收。注水在结构上被封死:compute_utility 只读可观测事件、不读命令行数字,且高申报值伴负向事件会触发 [注水嫌疑] 告警——所以别想靠改数字抬高效用。
Q6. 能接进 CI 当结构门禁吗?
A. 可以。专业用户把 apply --git 作为每次演化的回滚点;再把 gate / verdict 设为 CI 步骤——verdict 返回 REVERT 即视为门禁失败退出。坑:CI 里没有真实 episode 数据,verdict 会因证据不足保持 trial,所以 CI 只跑 gate(写入闸)更稳妥,裁决留给有数据的本地会话。
开场白示例(直接复制给 Agent)
- "帮我搭一个会自我进化但不会把安全规则改没的 Agent,用 unclekk-metacog-self-evolve 那套五制品+三闸。"
- "我每次写完代码都漏读原文件,用 metacog 把这个教训沉淀进规则库,并跑双指标棘轮看会不会误演化。"
- "评审一下我现在的自改进结构:它有没有不动点约束?演化错了能不能回滚?对照 metacog 的三闸说说缺口。"
变更记录 / Changelog
- v2.4.0(2026-09-24):人类闸凭证化(操作 5 / PoC 报告 P1:堵 AI 自签人类确认)——
--human-ok布尔旗标 AI 可自签,废除。新增三段强制链:①confirm --init(人类真实 TTY 设口令,getpass 隐藏输入,只存 PBKDF2-SHA256 哈希 10 万轮加盐;_require_tty非 TTY 一律拒绝);②confirm --approve --id <提案>(口令校验后secrets铸造一次性 token,绑定单提案、30 分钟过期);③apply --token(校验绑定/未用/未过期,用后即焚)。--human-ok命中 requires_human 即 rc=2 并指路 confirm;D1 退出码 2 语义保留。新增scripts/test-human-gate.py22/22 PASS;全量回归零失败(test-core 14/14 含用后即焚断言)。状态(独立 Agent 审计长 ✅ APPROVED,见references/independent-audit-v2.4.0.md)。 - v2.3.2(2026-09-24):小扫尾(独立审计长 v2.3.1 报告 P2-4/P3-1/P3-2)——①P2-4:「削弱安全记忆」名词前置弱意图句式扩白名单
(安全记忆|A2|规则|教训|事故|护栏|红线)\s*.{0,12}(可以淘汰|可以删|不要了),「A2 里过时的规则可以淘汰了」「过时的规则可以删了」转 BLOCK;只扩名词前置、动词前置不动(A2 条目走合法 remove op 流程的动词开头理由不受影响);②P3-1:_immutable_violation否定语境从「仅匹配点前 20 字符」扩展到匹配段内——否定词后置(「CONTRACT.md 严禁改动」「SKILL.md 不要动」)放行,前置否定与动作指令行为不变;③P3-2:test-d2-d5.py补全文件总计行(断言级口径,与 [PASS]/[FAIL] 行一致)。新增 P3 测试段后test-d2-d5.py47/47 PASS(D2:9 / D3:6 / D4:4 / D5:5 / P2:13 / P3:10);全量回归零失败。状态(独立 Agent 审计长 ✅ APPROVED,见references/independent-audit-v2.3.2.md)。 - v2.3.1(2026-09-24):P2 修复(独立审计长 v2.3.0 报告 P2 清单)——①P2-1:
_IMMUTABLE_NEG补「严禁」,消除「严禁改动 CONTRACT.md」的 fail-closed 误拦;②P2-2:denylist 补审计探针实测漏网的两条变体(免人工确认动词组补「汇报/告知」;削弱安全记忆新增名词前置句式(安全记忆|A3|教训|事故|护栏|红线)\s*.{0,12}(可以删|删了|删掉|清掉|清空|不要了|淘汰))——仍是词表级覆盖,语义防护上限不变;③P2-3:cmd_apply新增轻量闸门重放(fail-closed)——对每条 gated 提议重跑 run_gate,BLOCK 级检查(红线/不动点/制品越界/A3 只增不减)任一命中即拒绝写入并返回退出码 2,重放异常按拦截处理;堵死「直写隔离区 JSON 置 gated 绕 G1」通道(HOLD/HUMAN 不重放:证据门槛 gate 时已把关,M1 走 --human-ok 闸)。顺带把 D5 测试从「A3 remove 直写 gated」改走合规 A2 replace 路径(原用例恰在利用被堵的通道)。新增 P2 测试段后test-d2-d5.py37/37 PASS(D2:9 / D3:6 / D4:4 / D5:5 / P2:13);全量回归 21 文件零失败。状态(独立 Agent 审计长 ✅ APPROVED,见references/independent-audit-v2.3.1.md)。 - v2.3.0(2026-09-23):D2–D5 安全修复(PoC 审计报告 2.2–2.4 收口)——独立 PoC 审计对「可控自指」打出 4 条边界缺陷,逐条修复:①D2 红线语义绕过加固:扩充 paraphrase 覆盖(免人工确认 / 削弱 A3),原 4 条绕过项转 BLOCK;并诚实声明
REDLINES为 denylist、不构成语义防护,禁改硬约束前移至CONTRACT.md;②D3 不动点闸过严修复:改为仅「动词+不动点文件名」且前 ~20 字符无否定词才 BLOCK,保护语境(「禁止修改 metacog.py」)放行、动作指令仍拦截;③D4 直写绕过系统级强制:init/apply后写制品哈希快照ledger/integrity.json,新增verify子命令检直写篡改(返回 1)、retrieve前置完整性告警;④D5 回滚默认关闭修复:git 仓库内apply/verdict默认留底(--no-git可关),apply始终记ledger/rollback.jsonl字节回滚点,新增rollback子命令(git checkout 优先 / ledger 字节还原兜底)。新增scripts/test-d2-d5.py23/23 PASS;全量零回归(test-core 13/13、test-boundary-cases 40/40、test-held-out 31/31、test-attribution 16/16、test-meta-policy 16/16、test-utility-derivation 32/32、test-adaptive-ratchet 11/11、test-meta-log-integration 8/8、test-cli-wiring 4/4)。顺带修复:cmd_verify循环变量ok遮蔽输出函数ok()的崩溃 bug(原verify调用必崩,无历史测试覆盖,被本批 D4 测试检出)。状态(独立 Agent 审计长 ✅ APPROVED):按 KK 授权「自验证须调用独立 Agent 第三方审计」,本批修复由隔离上下文独立 Agent 审计长复验通过——详见references/independent-audit-v2.3.0.md。 - v2.2.5(2026-09-23):操作 3:归因一致性(Attribution Consistency)——SHE「归因引导演化」硬前提:每次失败必须归到正确制品,否则反复改错地方。①
--attributed升必填(fail-closed 硬闸):cmd_episode在其缺失时返回退出码 2(与--events/--utility缺失同级),复用add_fix给「从 A1/A2/A3/A4/M1 选一个」的可操作指引(不放在 argparserequired,以统一退出码 2 行为与错误文案)。②归因漂移告警(软告警,不阻断记账):新增纯函数detect_attribution_drift+_attribution_suggestion,由负向事件签名推导「应归因制品」(优先级 安全 A3 > 工具 A4 > 行为 A2),当记录attributed与建议明显不符时给出[归因漂移]警示。保守设计(避 D3 过度严格):仅两种情形告警——(a) 安全事件(红线/约束)归到非 A3(安全教训不进永不删的 A3→丢失);(b) 具体失败(A2/A4 建议)错归到安全 A3/元层 M1(稀释本职语义);相邻 A2↔A4 与中性事件不告警。episode 新增attribution_drift布尔持久化。新增scripts/test-attribution.py16/16 PASS(必填 RC=2 / 漂移告警 / 不误报相邻与中性)。零回归:test-held-out 31/31、test-core 13/13、test-boundary-cases 40/40、test-utility-derivation 32/32、test-adaptive-ratchet 11/11、test-meta-log-integration 8/8。状态(2026-09-23,独立 Agent 审计长 ✅ APPROVED):按 KK 授权「自验证须调用独立 Agent 第三方审计」,本操作由隔离上下文独立 Agent 审计长复验通过——test-attribution 16/16、test-held-out 31/31 等全绿、9 条对抗探针逐条符合设计(含缺 attributed RC=2 / 非法 choice RC=2 / violation→A2 与 rework→M1 漂移 / violation→A3·rework→A2·rework→A4·gate_block→A2·中性 均不误报)、P0 held-out 无回退(grep 确认lb=(1+max分支已删除、resolve_trial_start仍读受信任锚)。判定 ✅ APPROVED,操作 3 关闭。 - v2.2.4(2026-09-23):P0 补刀:删除假防御降级闸门——独立验收(Hermes)对 v2.2.3 复验给出 ❌ REJECTED(P0 复活于降级路径):v2.2.3 把留出集起点收进受信任锚(主路径封死,字段伪造 4/4 REVERT),但其「无锚一致性闸门」的下界
lb取自 proposer 自选的cited,攻击者把cited与trial_from_index改到自洽即绕过——向量Acited=[] fx=0窗=全部含引用证据→PROMOTE(与 v2.2.2「回落训练集」同形);向量Bcited=[E3] fx=3把最差样本 E3 移出窗→PROMOTE。根因修复:彻底删除降级一致性闸门,resolve_trial_start在无受信任锚时一律返回 HOLD、不采信任何自带字段("没锁的门不该存在,而非没锁时自己证明自己没造假")。配套:①test_handwritten_proposal_no_apply_record_holds扩展为 3 向量(B6 原向量 + 向量Acited=[] fx=0+ 向量Bcited=[E3] fx=3),均断言 HOLD 不 PROMOTE;②test-utility-derivation.py::_make_trial_proposal补record_apply锚(牙齿测试走真实 gated 流程,不再依赖假防御)。test-held-out.py31/31 PASS(原 25 + 向量 A/B 6 断言)。全量零回归:test-core 13/13、test-boundary-cases 40/40、test-utility-derivation 32/32、test-adaptive-ratchet 11/11、test-meta-log-integration 8/8。残留(7.1,独立验收指出,非本 P0):锚写入record_apply无签名/来源校验,直写applies.jsonl仍属更强对抗模型;真实流程中cmd_apply受--human-ok人类闸约束、且trial_from_index由引擎自算(=apply 时 episode 数)非 proposer 自选,已显著强于提案字段。建议未来对锚加一次性 token 签名(同「人类闸凭证化」议题)。状态(2026-09-23,独立 Agent 审计长 ✅ APPROVED):按 KK 授权"自验证过程须调用独立 Agent 作为第三方审计长",本修复由隔离上下文的独立 Agent 审计长复验通过——test-held-out 31/31、grep 确认无 cited 算下界分支、向量A/B/B6 原向量均 HOLD、主路径字段伪造仍 REVERT、6.3 三项回归通过;审计长另手跑三攻击探针+B6 原向量全部 HOLD、主路径篡改仍 REVERT。判定 ✅ APPROVED,P0 关闭。残留(审计长也指出,非 P0):① 无锚返回 start=0 被 HOLD 立即丢弃,当前无害,建议未来改哨兵值消除误用面;② 7.1 锚无签名/直写 ledger 属更强对抗模型,真实流程受 --human-ok 且引擎自算 trial_from_index,建议未来 token 签名。** - v2.2.3(2026-09-23,后于独立复验 ❌ REJECTED 降级闸门):P0 修复:trial_from_index 收进引擎手里(受信任锚 apply_record)——独立验收(Hermes)对 v2.2.2 给出 ❌ REJECTED(P0):v2.2.2 仅封死
cited通道,但留出集唯一起点trial_from_index由提案自带且零校验,改 1 字段即可把 REVERT 翻成 PROMOTE(B 类 P0),且手工伪造 proposal 绕过 apply 仍 promoted(B6)。根因修复:新增受信任锚ledger/applies.jsonl,cmd_apply写入trial_from_index = len(episodes@apply),cmd_verdict只读此锚、完全忽略提案自带字段;无锚提案走一致性闸门HOLD。同步修复独立验收列出的其余一致性缺陷(#1 预警文案 / #4 幽灵 id / #5 HOLD 写日志 / #6 dict·str episodes 归一化 / #7 PYTHONHOME / #3 「结构性封死」范围收窄为 cited)。test-held-out.py25/25 PASS(新增trial_from_index 伪造无效(P0)、手工伪造无锚→HOLD(B6))。零回归 test-core 13/13、test-boundary-cases 40/40、test-utility-derivation 32/32、test-adaptive-ratchet 11/11、test-meta-log-integration 8/8。→ v2.2.4 复验发现其「无锚一致性闸门」为假防御(下界取自攻击者输入),已被 ❌ REJECTED,见 v2.2.4。 - v2.2.2(2026-09-23):修 6.3(操作 2 防御纵深 + 日志清晰度)——独立验收(Hermes)指出原
cmd_verdict用 proposer 自选的cited从验收集剔除 episode,本身是可被篡改的作弊通道(把试用窗内坏 episode 写进cited即可抬升验收)。根因修复:验收集改为只用试用后产生的泛化数据all_eps[start:],与cited彻底解耦;cited仅用于检测「试用窗内的引用」并预警(不再能剔除验收样本)。同时日志显式打印试用窗总数(6.3 日志清晰度)。test-held-out.py重写为 19/19 PASS(真泛化过拟合→REVERT / 泛化→PROMOTE / 窗内 cited 作弊→无效+预警 / 无引用整窗→PROMOTE / 窗口不足→HOLD / 空窗--force仍 HOLD / 日志显窗口总数)。零回归 test-core 13/13、test-boundary-cases 40/40、test-utility-derivation 32/32。按自检回避纪律,本修复须经独立 agent 复验,未自认生效。 - v2.2.1(2026-09-23):操作 2:held-out 验收(把「自评」变「他评」)——
cmd_verdict验收样本排除本提议引用的训练集 episode(p["episodes"]即训练集,试用窗内其余为留出集),杜绝「用同一批证据既提议又打分」的自利偏差(Practice Makes Unsafe 21/21 根因)。新增scripts/test-held-out.py14/14 PASS(过拟合→REVERT / 泛化→PROMOTE / 空留出集 HOLD 且--force不回落 / 无引用整窗仍 PROMOTE / 留出集不足 HOLD)。留出集为空或不足 → HOLD,绝不回落训练集放行。同批零回归:test-core 13/13、test-boundary-cases 40/40、test-utility-derivation 32/32。独立验收(2026-09-23,Hermes 独立 agent/换模型)→ ✅ APPROVED:复跑全绿、语义复算确认过拟合被正确 REVERT、无 P0;残留 6.3(非 P0)= 手工篡改 proposal JSON 可绕过(需 ledger 写权限,双重篡改,冗余防线缺口)+ 日志未显试用窗总数。交付物见Desktop/验收-unclekk-metacog-held-out/独立验收报告-held-out-v2.2.1.md。 - v2.2.0(2026-09-22):操作 1:效用内生(Utility Endogenization)——把"元认知自优化"目标函数从"外部申报
--utility"改为"可观测事件推导",结构性消除效用注水。①新增compute_utility/eligible_eps/check_utility_consistency纯函数与UTILITY_BASE/EVENT_WEIGHTS/POSITIVE_WEIGHTS/META_EVENTS常量;②episode新增--events(可重复KEY=COUNT)与--events-json,--utility降为 deprecated 兜底(声明值不驱动沉淀);③verdict验收窗口经eligible_eps过滤,库中存在 derived 数据后声明式 utility 被架空;④D1 修复:apply缺--human-ok改为硬拦截并返回退出码 2(对齐退出码表)。事件词汇对一切工作流通用(rework/rerun/revert/correction/test_fail/gate_block/error/timeout/manual_fix/violation + accepted/praised),不同工作流只填各自可观测计数。待补scripts/test-utility-derivation.py后跑零回归。 - v2.1.1(2026-09-08):修复 v2.1.0 遗留的 CLI 接线缺口——
optimize/detect-domain子命令正式接入metacog.pydispatch(惰性导入打破与meta_optimizer/domain_detector的循环依赖;detect-domain纳入main()守卫豁免,无需.metacog即可运行)。新增scripts/test-cli-wiring.py(4/4 PASS)。全量 203/203 零回归。 - v2.1.0(2026-09-08):P0 真实数据接入 + 跨域知识共享 + P1 元认知自动优化(
meta_optimizer.py)、领域自动检测(domain_detector.py)、纯 Python 可视化(visualize_text.py)。全量 199 用例零失败。 - v2.0.0(2026-09-08):按
references/implementation-checklist-v2.0.md完成 5 阶段演进。①Phase 1.1 M1 自动触发(verdict --auto-m1,连续3次revert自动生成 M1 自省提议,仍需--human-ok);②Phase 1.2 棘轮自适应阈值(verdict --adaptive,纯函数复用现有 ratchet,默认关);③Phase 2.1 元认知日志系统(log_metacognition/meta-log命令,落点<root>/ledger/meta-cognition.log);④Phase 2.2 跨领域模板(scripts/domains/三领域 +init-domain命令,领域红线仅 advisory 不削弱全局REDLINES);⑤Phase 3.1 性能 Benchmark 框架(scripts/benchmark/,matplotlib 可选依赖,零第三方依赖硬约束)。清单 4 处缺陷已修正:D1 matplotlib 改可选依赖、D2 去硬编码路径(改Path(__file__)推导)、D3 复用现有 ratchet(不另起AdaptiveRatchet)、D4 不存在的设计文档现写。全量测试 151/151 零回归。 - v1.4.2(2026-09-08):修复 P1 遗留项。①Windows 兼容执行超时(
_set_timeout+threading.Timer+os._exit(124),默认 300s,命令正常结束自动 cancel;Windows 不支持 SIGALRM 故走 daemon 计时线程强杀),杜绝长任务/死循环锁死;②cmd_verdict连续 3 次 revert 提示可操作化——追加可直接复制的propose --artifact M1 --human-ok命令示例(仍不自动 apply,守住 G3 人类确认闸)。P1-2 独立 CHANGELOG 已在 v1.4.0 完成。 - v1.4.1(2026-09-08):修复 P2 遗留 4 项测试失败 + 1 处生产红线缺口 + 测试套件收敛。①"免人工确认"红线正则补全"自动批准/审批"(原仅覆盖"自动同意"/auto approve,确为安全缺口);②
test-boundary-cases.py大文件用例改为生成 >512KB 数据(原仅 ~478KB 未达阈值);③test_fail_closed改用--root隔离避免跑到 cwd;④边界套件现 40/40 PASS;⑤退役冗余且含 cwd 污染/死路径的 subprocess 式test-runner*.py至references/obsolete/,权威测试入口收敛为scripts/test-core.py(13/13) +scripts/test-boundary-cases.py(40/40)。 - v1.4.0(2026-09-08):P0 修复 + 测试补齐全。P0-1 新增
scripts/test-core.py(13/13 PASS)覆盖 verdict 双指标与 apply 人类确认闸,test-evidence.md通过率 6/6→8/8;P0-2 去硬编码论文库路径(指向references/paper-mapping.md);P0-3 收窄 HIGH_RISK 正则移除"清理"误报词;新增独立CHANGELOG.md,冗余 SKILL.v-*.md 收敛至references/obsolete/。 - v1.3.0(2026-09-07):达尔文优化至内部评分 100/100(注:非独立第三方审计)。添加完整测试日志证据(
references/test-evidence.md);补充步骤输入/输出定义;添加 STOP/CHECKPOINT 标记;修正 frontmatter description;更新 CHANGELOG 记录进化历程。 - v1.2.0(2026-09-07):修复 P2 问题。实现原子写入(
tempfile.mkstemp+os.replace),修复并发竞态;实现 512KB 文件大小限制(与文档一致);明确异常捕获类型;统一_git_commit返回值。 - v1.1.0(2026-09-07):修复 P1 硬编码路径问题(改用环境变量方案)。
- v1.0.0(2026-08-26):初版。五制品 + 三闸 + 双指标棘轮,端到端实跑验证全过;修掉红线正则漏检"跳过安全检查"缺陷。
<!-- 放行声明:本文件高危词均出现在"危险模式/禁止清单"列举语境,非执行指令。 guard:allow:destructive.rm_rf_critical guard:allow:destructive.rm_rf_local guard:allow:destructive.format guard:allow:bypass.safety guard:allow:bypass.no_verify guard:allow:bypass.chmod777 guard:allow:bypass.chmod777_flags -->