先说件扫兴的事:主角 truth-first 在 Agensi 上确有条目,但搜索引擎把它归到 Addy Osmani 的 agent-skills 名下,而那仓库 25 个 skill 目录里没有它。这正是本期要治的病。下面点名 9 个真实可装 / 可读的条目,给安装命令与第一条能跑的用法,以及最该记住的判据:没有「不知道」这一档的,都是二值,不合格。
模型有两种谎:编事实(引文、版本号、URL)与编完成(「测试应该过了」)。Skill 21 已把前者交给工具接地,本期专攻后者,外加一件更难的事——把「不知道」变成输出契约里的合法取值。这类 skill 的手艺全在此:不改模型的知识,只改它发言的前置条件。
# ① 主角:truth-first(Agensi marketplace 的条目)
npx agensi install truth-first
# ② 官方 marketplace 里最硬的完成门禁(Superpowers 的其中一个 skill)
/plugin install superpowers@claude-plugins-official
# ③ 「先查官方文档再写」与「先找人反驳再做」
npx skills add addyosmani/agent-skills --list # 先看 25 个目录名
npx skills add addyosmani/agent-skills
# ④ 往 CLAUDE.md 里塞「允许说不知道」那一派
/plugin marketplace add instantX-research/anthropic-anti-hallucinate-skills
/plugin install anti-hallucinate@anthropic-anti-hallucinate-skills
不用等它自动触发。下次它说出「应该」,把这句贴回去:
你刚说「测试应该过了」。按 verification-before-completion 走:
这句要哪条命令证明?在这一条消息里完整跑一遍,
贴出 exit code 与失败计数,再说结论。
truth-first(据该 marketplace 的 skill 页,2026-10 为免费、32 次安装;标签含 verification / reliability / devops)— 替你干掉「拿记忆里的系统状态回答运维问题」:要求先实地读取系统状态、配置与文件内容,再按 Verified / Inferred / Unknown 三档逐条分级,最后交一份每条论断都连着证据(路径、日志、命令输出)的报告。别装的时候:活儿是写纯逻辑而非查机器状态时,它只在加摩擦。诚实说清:agensi.io 被本站出口策略挡住,以上取自搜索引擎对该页的摘要,装前自行核对 SKILL.md。verification-before-completion(MIT;据 GitHub 仓库页 2026-10 约 29.4 万 star)— 替你干掉「编完成」这一种谎,而且是本期唯一写成铁律的:「如果你没在这一条消息里跑过那条验证命令,你就不能声称它通过。」它给一张「声称 → 需要什么 → 什么不算」的对照表:测试通过要的是 0 failures 的新鲜输出;bug 修好要的是原症状转绿,不是「代码改了」;subagent 报告成功要的是 VCS diff。别装的时候:探索性、一次性的脚本——它会要求你为每句话跑全量命令。source-driven-development(MIT;据 GitHub 仓库页 2026-10 约 10.04 万 star,仓库共 25 个 skill)— 替你干掉「凭记忆写框架代码」:先读依赖文件定版本(package.json / go.mod…)→ 抓那一页官方文档(不是首页)→ 按文档写 → 注释与对话里给全 URL。它明确要求抓不到文档就打 UNVERIFIED,并把「先声明一句可能过时」列为最差选项。别装的时候:改名、挪文件这类与版本无关的活。doubt-driven-development(同仓库)— 替你干掉「它说服了自己就开始动手」:在非平凡决定上先起一个全新上下文、被要求去反驳而不是赞同的审查者,五步走 CLAIM → EXTRACT → DOUBT → RECONCILE → STOP;关键设计是只交产物与契约、不交你自己的结论,避免它顺着你点头。最多三轮,之后升级给人。别装的时候:机械改动、一行小修、明说要快。truth-first 挂在 Addy Osmani 名下——这就是反例本身。 真去查 addyosmani/agent-skills 的目录,25 个 skill 里没有 truth-first。所以本系列那条规矩在这一期格外要紧:聚合站只能用来发现候选,名字一律以 GitHub 仓库目录或官方 marketplace 页面为准。这比「请先验证」强在:「发言」本身成了受管动作,于是「太好了!」这类表态也落进门禁——那份 SKILL.md 把表达满意列进了红旗清单。
这是本期最可复用的一条。输出只有「对 / 错」两格时,不确定的东西必须被塞进一格,而模型的默认偏置是「对」。所以认真做的都设了第三格:truth-first 的 Verified / Inferred / Unknown、verify-claim 的 Verified / Refuted / Inconclusive、source-driven-development 的 UNVERIFIED。官方那侧更直白:Reduce hallucinations 第一条基本策略就叫 Allow Claude to say「I don't know」,并给了可直接抄的句子——「If you're unsure about any aspect or if the report lacks necessary information, say『I don't have enough information to confidently assess this.』」(据该页,2026-10)。
上面两个 skill 都带一张两列表:左列借口,右列驳回。「应该能跑了」→ 去跑。「我很有信心」→ 信心不是证据。「就这一次」→ 没有例外。「换个说法规则就不适用」→ 精神高于字面。「抓文档浪费 token」→ 编错 API 浪费得更多。
五个里只有 anti-hallucinate 给了命令;其余四个是单目录 skill——把仓库里那个目录拷进 ~/.claude/skills/ 或项目 .claude/skills/。
discernment-nudge(官方)— 替你干掉「答完就完,读者无从核起」:在给出可被拿去行动的答案后,追加 2–3 条紧扣该内容的追问(一条针对某个数字或论断、一条戳假设、一条问缺失上下文),固定格式 「A few things worth a second look:」,一次对话最多一次。别装的时候:它自己列了——简单查询、纯教学解释、创意写作与闲聊、只帮排版、以及用户已要求核验过。anti-hallucinate(MIT;据 GitHub 仓库页 2026-10 为 11 star)— 替你干掉「每个项目都要重贴一遍诚实要求」:五条原则(诚实优于顺从、不编引文、不确定就标出来、对事实 / 日期 / 人名格外当心、答前自问「我真知道吗」)做成可 curl 追加进 ~/.claude/CLAUDE.md 的常驻版,也能当 plugin 装。别装的时候:你已有自己的诚实段落,叠着只是占 context。诚实说清:11 star,名字里的 anthropic 是蹭的,非官方出品。UserPromptSubmit hook 把确认式提问改写成批判式(仅 Claude Code)+ SKILL.md 触发批判模式+ CLAUDE.md 常驻规则。值得看的是分层思路,hook 那层是本期唯一能真正拦住输入的。别装的时候:8 star、2 次提交、README 引的 ArXiv 编号未核到——当参考读,别当成品装。verify-claim(MIT)— 替你干掉「承重论断没人验」:把论断改写成可被否证的单句(点名具体文件、函数、值、行为)→ 按类型选工具(读文件 / grep / curl / 跑测试 / 抓 URL)→ 报精确观察而非提前概括 → 给 Verified / Refuted / Inconclusive 之一并附下一步。它还写明会拒绝含糊的、一句塞多件事的、预测未来的论断。别装的时候:读一下就知道的事实、低风险小事。fact-checker(MIT;据仓库页 2026-10 约 1.4 千 star)— 替你干掉「稿子里的数字和引文没人回查」:按四级官方源优先级核,核不动的标 ❓ Unverifiable 而非删掉,改动需人工确认。别装的时候:代码类工作——它的对象是文稿事实,非程序行为。description:写「在声称完成 / 提交 / 建 PR 之前」的管编完成,写「用户问事实时」的管编事实。别指望一个 skill 全包——该叠的是不同段,不是同款。truth-first 与 verification-before-completion 一起装,然后抱怨「每句话都要跑命令」。两者都要证据,但一个要的是系统状态(读配置、看日志),一个要的是命令退出码。不在排障就该关掉前者。doubt-driven-development 还要额外起一个审查者(它自己把这笔账写成「用成本换早期拦截」)——只在不可逆、跨模块、安全相关的决定上开。verify-claim 的「低风险不用」、discernment-nudge 的「一次对话最多一次」),装前先读那段。往下一层怎么做:Claude Code 的 Stop hook 是「它想收工时」触发的,退出码 2 会阻止它停下并让对话继续,JSON 形式是 {"decision":"block","reason":"..."},也可用 hookSpecificOutput.additionalContext 把「还有 3 个测试在失败,继续」喂回去(据官方 hooks 文档,2026-10)。换句话说:「跑没跑过测试」该交给 hook,不该交给 skill。
如果是在你自己的程序里而不是 CLI 里聊,别靠提示词,靠 schema:Structured Outputs 用 output_config.format(type: "json_schema")把输出钉在 schema 上,于是 status: "verified" | "inferred" | "unknown" 与 evidence 可以设成必填字段——模型没法再用一段自信的散文绕开「不知道」这一格。限制:不支持递归 schema 与 minimum/maxLength 这类约束、additionalProperties 必须 false、拒答或撞到 max_tokens 时输出可能不符合 schema(据该页,2026-10)。
今天就做这三件:① /plugin install superpowers@claude-plugins-official,然后只在它要说「好了」之前手工点 verification-before-completion——九个里收益最直接。② 把官方那句原文抄进 CLAUDE.md:「If you're unsure … say『I don't have enough information to confidently assess this.』」,零成本、全项目生效。③ 写三个证据不存在的反向 eval 场景,先跑不装任何 skill 的 baseline。
按需再加:source-driven-development(写框架代码)· doubt-driven-development(不可逆或跨模块的决定)· truth-first(排障与系统状态问答,装前自读 SKILL.md)· discernment-nudge(答案给非技术读者)· fact-checker(核稿子里的数字与引文)· 一条 Stop hook(「测试没跑过不许收工」钉死在这儿)。
明确别做:同时装两个「要证据」的同款 · 把这类 skill 当 CI 门禁(它 fail-open) · 抄聚合站写的 skill 名与作者 · 只用正向场景验收 · 在探索性脚本上开完成门禁 · 以为「我声明了可能过时」等于核过。
output_config.format(json_schema),把输出钉在 schema 上,可把「不知道」做成必填字段。Stop hook。verify-claim 明写低风险不用);别只验「它会不会说不知道」,反向 eval 要双向:另造三个证据完全充分的场景,看它是否仍敢给结论。单向验收必然养出一个把问题全退回给你的助手,那不是诚实,是推责。npx agensi install truth-first、三档分级与证据报告(据该页,2026-10 免费、32 次安装;本站未能直连 agensi.io,数据取自搜索引擎对该页的摘要,装前请自行核对)source-driven-development 四步与 UNVERIFIED 标记、doubt-driven-development 五步与「不交自己的结论」;也是本期反例:25 个目录里没有 truth-first(MIT;据仓库页 2026-10 约 10.04 万 star)[];四条进阶策略(2026-10)output_config.format / type: json_schema;SDK 助手(Python messages.parse、TS zodOutputFormat);不支持递归与数值约束、additionalProperties 必须 false、两种例外(2026-10)Stop 事件 exit 2 阻止收工、{"decision":"block","reason":"…"}、additionalContext;PostToolUse 不能阻断但能用 updatedToolOutput 改写(2026-10)curl … >> ~/.claude/CLAUDE.md 常驻装法、plugin 装法(MIT;据仓库页 2026-10 为 11 star;名字里的 anthropic 不代表官方)UserPromptSubmit hook 改写确认式提问 + SKILL.md + CLAUDE.md 常驻(MIT;据仓库页 2026-10 为 8 star、2 次提交;README 引的 ArXiv 编号未能核实)