我做了六个 AI skill,然后把它们全删了重写。
原因很蠢,但你大概率也遇到过:它们每一个单独跑都很惊艳,串起来一文不值。
第一次对话,AI 帮我把想法拆成了十二条假设,锋利、结构化、条条戳心。第二天我开新会话继续问,它已经完全不记得那十二条是什么了——于是又重新拆了一遍,这次是十四条,和昨天有六条对不上。
第三天我意识到问题的本质:
所以我写了 Reckoner——一个跑在 Claude Code / Cowork / Codex 上的 PM 决策内核。
这篇文章我想拆的是它背后那个东西:决策内核(decision kernel)——把一个主观、可刷、易自欺的判断过程,编码成一组可被机器检查的数据对象。
它要回答三个递进的问题,后面三层架构一一对应:
- 判断怎么才能被证伪?→ 对象层:thesis 六格 + 每条假设强制携带
failsIf/killCriteria - 判断怎么才能被攻击?→ 策略层:红队 skill + 裸奔假设自动点名
- 判断怎么才能被累积而不腐坏?→ 纪律层:证据分级 + 确定性硬闸
很多人会把第 3 条读成「这是个 AI 记忆方案」。不是。记忆可信是手段,判断可信才是目的——如果判断不需要跨月累积,第 3 层根本不必存在。
一、先给你 30 秒的体感:AI 顶嘴长什么样
先别看架构。你先感受一下产物,不然后面全是抽象名词。
输入(一句典型的、听起来很合理的产品想法):
做个 AI 记账 App,主打自动分类,大家都嫌手动记账烦。
Reckoner 的回应:
🩲 裸奔假设 A-01(影响:高 × 证据:L1)
用户愿意为「自动分类」授权银行数据、放弃手动掌控感
├ Fails if:访谈 10 人,<3 人愿意连银行卡
├ 最便宜验证:5 人看假界面问「你会连吗」(0 成本 / 1 天)
└ kill 标准:连接意愿 <30% → 整个方向重估
⚔️ 最致命追问
分类准确率只有 80% 时,用户觉得「省事」还是「更不放心」?
—— 这决定了你是提效工具,还是焦虑放大器。
注意三件事,它们分别对应后面三层架构:
- 它没有夸我,它点名了我裸奔的那条假设——这是红队策略层。
- 每条假设都带
Fails if/最便宜验证/kill 标准——这是结构化产物的 schema 约束。 - 「影响高 × 证据 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 的,是这条闭环:
三个让回路「活」起来的机制,每一个都值得单独抄走:
- 裸奔假设自动判定 — 影响高 × 证据弱 = 你现在最该验的东西。validator 现算、不落盘,所以永远和最新数据一致,也无法被 LLM 讨好式地抹掉。
- 分级 sign-off — 弱证据、结构改动自动落库(低摩擦);
≥L3或status变更必须人工确认(高保真)。摩擦要加在正确的地方,而不是均匀分布。 - 反驳循环 — 承重假设被推翻 → 论点自动标
needsRevision→ 强制走@revise-thesis并追加thesis.revisions[]留痕。历史不可覆盖,只能追加。
还有一条容易被忽略的设计:validator 通过后会打印「
下一步」。有裸奔就推 @experiment-design,needsRevision 就推 @revise-thesis,全清就推 /decide。
这是把「工作流知识」编码进了确定性脚本,而不是指望 LLM 每次都记得提醒你。
五、能力清单:6 skill + 6 命令
Skills(原子能力,独立可触发)
| Skill | 触发 | 主要产出 |
|---|---|---|
| assumption-xray(照妖镜,主角) | @assumption-xray <想法> |
A/B/C/D 拆解 + 裸奔排序 + 最致命追问 + 逐条 Fails if / 最便宜验证 / kill 标准 |
| user-insight | @user-insight <访谈> |
2–4 个洞察主题 + 可证伪 A 类假设 |
| competitor-teardown | @competitor-teardown <竞品> |
竞品矩阵(含「现状凑合方案」)+ 市场缺口 → B/C 类假设 |
| evidence-intake | @evidence-intake <证据> |
归档 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(含
/
对照 + 标注「最关键」条),覆盖入料口、红队关口、实验设计、收口、闭合全回路节点。
六、目录结构与工程约定
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.md和artifacts/(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 工具,这三条也能直接搬走:
真实场景
结尾
如果你只带走一句话:
不是给 AI 更好的 prompt,是给「判断」一个连 AI 都篡改不了的账本。
仓库在这:https://github.com/LuckyOneTwoThree/reckoner
(MIT License,Node ≥ 20,零依赖)
三个具体的参与方式:
- 想试用:clone 下来,用你手上最模糊的那个想法跑一遍
@assumption-xray,看它能不能顶到你 - 想拆架构:直接看
kernel/writeback-contract.md和tools/validate.mjs,两个文件就是全部核心 - 想搬范式:把 thesis + ledger 换成你领域的两个对象(法务:条款 + 风险台账;投研:论点 + 证据链),架构原样可用
特别想听两类反馈:照妖镜有没有真的顶到你,以及你的领域里对应的「两个内核对象」是什么。Issue 区见。



