给 AI 一个它篡改不了的账本:Reckoner 决策内核完整拆解

我做了六个 AI skill,然后把它们全删了重写。

原因很蠢,但你大概率也遇到过:它们每一个单独跑都很惊艳,串起来一文不值。

第一次对话,AI 帮我把想法拆成了十二条假设,锋利、结构化、条条戳心。第二天我开新会话继续问,它已经完全不记得那十二条是什么了——于是又重新拆了一遍,这次是十四条,和昨天有六条对不上。

第三天我意识到问题的本质:

所以我写了 Reckoner——一个跑在 Claude Code / Cowork / Codex 上的 PM 决策内核。

这篇文章我想拆的是它背后那个东西:决策内核(decision kernel)——把一个主观、可刷、易自欺的判断过程,编码成一组可被机器检查的数据对象。

它要回答三个递进的问题,后面三层架构一一对应:

  1. 判断怎么才能被证伪?→ 对象层:thesis 六格 + 每条假设强制携带 failsIf / killCriteria
  2. 判断怎么才能被攻击?→ 策略层:红队 skill + 裸奔假设自动点名
  3. 判断怎么才能被累积而不腐坏?→ 纪律层:证据分级 + 确定性硬闸

很多人会把第 3 条读成「这是个 AI 记忆方案」。不是。记忆可信是手段,判断可信才是目的——如果判断不需要跨月累积,第 3 层根本不必存在。


一、先给你 30 秒的体感:AI 顶嘴长什么样

先别看架构。你先感受一下产物,不然后面全是抽象名词。

输入(一句典型的、听起来很合理的产品想法):

做个 AI 记账 App,主打自动分类,大家都嫌手动记账烦。

Reckoner 的回应

🩲 裸奔假设 A-01(影响:高 × 证据:L1)
   用户愿意为「自动分类」授权银行数据、放弃手动掌控感
   ├ Fails if:访谈 10 人,<3 人愿意连银行卡
   ├ 最便宜验证:5 人看假界面问「你会连吗」(0 成本 / 1 天)
   └ kill 标准:连接意愿 <30% → 整个方向重估

⚔️ 最致命追问
   分类准确率只有 80% 时,用户觉得「省事」还是「更不放心」?
   —— 这决定了你是提效工具,还是焦虑放大器。

注意三件事,它们分别对应后面三层架构:

  1. 它没有夸我,它点名了我裸奔的那条假设——这是红队策略层。
  2. 每条假设都带 Fails if / 最便宜验证 / kill 标准——这是结构化产物的 schema 约束
  3. 「影响高 × 证据 L1」这个判定不是 LLM 说的,是脚本算出来的——这是确定性纪律层。

第 2 点是整个项目的题眼。那三个字段不是输出格式,是决策内核的 schema——它们强制一条假设在出生时就携带自己的死亡条件。第 1 点和第 3 点都只是为了保护第 2 点。


二、先讲护栏:LLM 负责判断,脚本负责纪律

下一节才是本体(决策内核那两个对象)。但必须先讲这条原则,否则你会以为内核只是两份 JSON schema——内核之所以可信,全靠这条职责边界撑着。

这是 Reckoner 的第一原则,也是我认为最值得被抄走的一条。

为什么必须切开?因为 LLM 有一个致命的自反性问题:

如果交给 LLM 会发生什么 Reckoner 的处理
判断「这条证据够不够强」 它倾向于给自己刚生成的东西打高分 脚本硬校验:来源 reliability 决定 evidenceLevel 上限,越级直接 exit 1
分配假设 ID 跨会话必然重号、跳号、覆盖历史 脚本按类型自动分配 A-01 / B-02,人和模型都无权指定
判断「哪条假设在裸奔」 看心情,同一份数据两次结论不同 派生字段,validator 现算:影响高 × 证据弱,不落盘、无从篡改
决定「要不要提醒你复核」 它不会主动扫描过期项 freshness.ttlDays 到期,脚本标 stale

一句话:凡是「模型有动机对自己宽容」的地方,就必须由确定性代码接管。

这不是不信任 LLM,这是最基本的职责隔离——就像你不会让业务代码自己决定数据库约束。


三、决策内核:把「判断」编码成两个对象

这一节是全文的本体。前面的红队、后面的校验脚本、整套 skill,都是围着这两个对象长出来的外围。仓库里 kernel/ 目录的注释只有三个字:真 IP

我砍掉了 OST、砍掉了 decision-log schema、砍掉了 persona 对象。P0 最终只留两个:

对象 角色 本质
thesis(论点) 北极星 一个必须可被证伪的陈述:目标用户 / 核心问题 / 解法假设 / 为什么是现在 / 成功信号
assumption-ledger(假设台账) 心脏 把论点拆成可验证假设,分类管理、分级留存

数据契约(真正的 IP 在这里)

// assumption-ledger 单条
{
  "id": "A-01",                    // 脚本分配,类型前缀 + 项目内序号
  "type": "A",                     // A 用户价值 / B 商业可行 / C 技术可行 / D 安全合规
  "statement": "...",              // 可证伪陈述
  "impact": "high",                // high / med / low
  "evidenceLevel": "L1",           // L1 只是觉得 → L4 数据验证
  "status": "todo",                // todo / testing / validated / refuted
  "failsIf": "...",                // 什么结果算它挂了
  "cheapestTest": "...",           // 最便宜的证伪方式
  "killCriteria": "...",           // 触发什么就整个方向重估
  "provenance": {
    "reliability": "self",         // self / indirect / direct / data
    "source": "...",
    "signedOffBy": null,           // 分级 sign-off:强声明必须人工签字
    "signedOffAt": null
  },
  "freshness": { "lastVerified": "2026-07-21", "ttlDays": 90 }
}

四类假设 A/B/C/D 不是分类癖,是覆盖检查表——它逼你回答四个不同维度的死亡问题:

  • A 用户价值:用户真有这个痛点、愿意为此改变行为吗?
  • B 商业可行:这模式能赚钱、单位经济成立吗?
  • C 技术可行:做得出来吗?性能 / 成本 / 集成扛得住吗?
  • D 安全合规:能上线吗?会不会踩监管?

绝大多数团队死在 D 和 B,但 90% 的讨论时间花在 A 和 C。分类法的价值就是让缺失的那一类无处遁形

证据分级 L1–L4 与「信任天花板」

等级 含义 来源上限
L1 只是觉得 self
L2 间接信号 indirect
L3 直接证据 direct
L4 数据验证 data

关键约束一行话:evidenceLevel 不得高于来源 reliability 允许的上限,违反直接 exit 1。

这道闸拦住的是 AI 记忆系统最隐蔽的腐败——你自己拍脑袋的东西,在三次转述后变成了「已验证的事实」。加了硬闸之后,脑补永远只能是 L1。


四、决策回路:让内核「活」起来

静态的 schema 只是数据库。让它变成 OS 的,是这条闭环:

三个让回路「活」起来的机制,每一个都值得单独抄走:

  1. 裸奔假设自动判定 — 影响高 × 证据弱 = 你现在最该验的东西。validator 现算、不落盘,所以永远和最新数据一致,也无法被 LLM 讨好式地抹掉。
  2. 分级 sign-off — 弱证据、结构改动自动落库(低摩擦);≥L3status 变更必须人工确认(高保真)。摩擦要加在正确的地方,而不是均匀分布。
  3. 反驳循环 — 承重假设被推翻 → 论点自动标 needsRevision → 强制走 @revise-thesis 并追加 thesis.revisions[] 留痕。历史不可覆盖,只能追加。

还有一条容易被忽略的设计:validator 通过后会打印「:backhand_index_pointing_right: 下一步」。有裸奔就推 @experiment-designneedsRevision 就推 @revise-thesis,全清就推 /decide

这是把「工作流知识」编码进了确定性脚本,而不是指望 LLM 每次都记得提醒你。


五、能力清单:6 skill + 6 命令

Skills(原子能力,独立可触发)

Skill 触发 主要产出
assumption-xray(照妖镜,主角) @assumption-xray &lt;想法&gt; A/B/C/D 拆解 + 裸奔排序 + 最致命追问 + 逐条 Fails if / 最便宜验证 / kill 标准
user-insight @user-insight &lt;访谈&gt; 2–4 个洞察主题 + 可证伪 A 类假设
competitor-teardown @competitor-teardown &lt;竞品&gt; 竞品矩阵(含「现状凑合方案」)+ 市场缺口 → B/C 类假设
evidence-intake @evidence-intake &lt;证据&gt; 归档 sources/ + 升降级台账 + 触发反驳循环
experiment-design @experiment-design 把最便宜验证落成可追踪实验规格,status → testing
revise-thesis @revise-thesis 结构化修订论点,追加 revisions,闭合循环

Commands

命令 作用
/new 初始化项目(slug 化命名 + 重名保护)
/list 列出所有项目 + 各自裸奔数 / 待 sign-off 数
/review 批量 sign-off(扫 ≥L3 或状态终局且未签字项)
/decide go / pivot / kill 决策日志(append-only,不入 schema)
/retro 复盘校准:取 git-SHA 快照,对照当时假设分布 vs 现在结果
/lookup 跨项目查历史教训(全 workspace 按关键词 / type / status 检索)

/retro 是我个人最喜欢的一个:它把「当时你以为的」和「后来实际的」摆在一起。这是校准判断力的唯一方式,而绝大多数 PM 一辈子没做过一次。

不是 prompt 拼装:每个 skill 配 5 条 eval(含 :white_check_mark:/:cross_mark: 对照 + 标注「最关键」条),覆盖入料口、红队关口、实验设计、收口、闭合全回路节点。


六、目录结构与工程约定

reckoner/
├─ AGENTS.md                    # agent 操作约定(Codex 约定读)
├─ CLAUDE.md                    # 指向 AGENTS.md(Claude Code 约定读)
├─ .claude-plugin/marketplace.json
├─ kernel/                      # 决策内核:数据模型 + 契约(真 IP)
│  ├─ thesis.schema.json
│  ├─ assumption-ledger.schema.json
│  ├─ writeback-contract.md     # 回写规范 + 分级 sign-off + 循环状态机
│  └─ templates/thesis.md
├─ skills/                      # 6 个原子能力
├─ commands/                    # 6 个斜杠命令
├─ tools/
│  ├─ new-project.mjs           # 初始化(零依赖)
│  ├─ validate.mjs              # 唯一确定性纪律闸
│  ├─ migrate.mjs               # schemaVersion 迁移(4.0 → 4.1)
│  └─ lookup.mjs                # 跨项目检索
├─ workspace/                   # 用户运行时数据(gitignored,项目间隔离)
└─ docs/ARCHITECTURE.md

三个值得注意的工程决策:

  • workspace/ 不入库。 框架与数据彻底分离,一套 skills/ kernel/ tools/ 服务任意多个项目,ID 项目内编号互不冲突。
  • tools/*.mjs 零依赖。 只要 Node ≥ 20,git clone 完就能跑。任何 npm install 都是采用率的税。
  • 回路外补充件明确出圈。 decisions.mdartifacts/(PRD、商业分析等)不入 schema、不过 validate。内核只守判断,不管交付物——这条边界不划清,schema 会在三个月内膨胀成怪物。

七、怎么装(两种 Agent 环境)

git clone https://github.com/LuckyOneTwoThree/reckoner.git
cd reckoner

node tools/new-project.mjs my-idea      # 或在 agent 里 /new
# → 生成 workspace/my-idea/{thesis.md, ledger.json, sources/}
工具 发现方式
Claude Code / Cowork skills/ 与斜杠命令原生自动发现,直接 @assumption-xray / /new;也可按 .claude-plugin/marketplace.json 作插件接入
Codex / Trae 等 对话里说「读 AGENTS.md 建立上下文」;skill 通过读对应 SKILL.md 执行,脚本走 shell

然后填 thesis.md 的六格论点,@assumption-xray 走起。

命令行是确定性护栏,agent 是友好门面——日常你只碰门面,说人话就行。


八、给同行的三条可迁移经验

即使你完全不做 PM 工具,这三条也能直接搬走:


真实场景



:end_arrow: 结尾

如果你只带走一句话:

不是给 AI 更好的 prompt,是给「判断」一个连 AI 都篡改不了的账本。

仓库在这:https://github.com/LuckyOneTwoThree/reckoner
(MIT License,Node ≥ 20,零依赖)

三个具体的参与方式:

  • 想试用:clone 下来,用你手上最模糊的那个想法跑一遍 @assumption-xray,看它能不能顶到你
  • 想拆架构:直接看 kernel/writeback-contract.mdtools/validate.mjs,两个文件就是全部核心
  • 想搬范式:把 thesis + ledger 换成你领域的两个对象(法务:条款 + 风险台账;投研:论点 + 证据链),架构原样可用

特别想听两类反馈:照妖镜有没有真的顶到你,以及你的领域里对应的「两个内核对象」是什么。Issue 区见。


4 个赞

区块链奥

?

1 个赞

哈哈理解这个联想,「账本 + 不可篡改」确实有点太像了 ,标题没取好
但真没链 :smirking_face:,主要是防止 AI顺着用户说话的本能,还有后续忘记自己做的决策
主要还是面向产品经理做需求决策用的

4 个赞

不错,我认为还可以增加子代理互相检查的功能

3 个赞

上下文丢失是核心问题

2 个赞

是的 我就说原理挺像的