为什么我的AI智能体需要质量哲学
我发了一条推文:”我发现Ralph循环倾向于急于完成工作。以一种糟糕的方式。相反,我在Jiro中设置了大量哲学准则和质量关卡。仍然需要打破机器从人类恶习中习得的那些模式。它是一台机器!它不需要休息。”
有人回复说:”你基本上是在试图教会循环克制、品味和某种近似道德暂停的东西——而基本的Ralph模式为了追求吞吐量而明确地优化掉了这些。”
克制。品味。道德暂停。三样机器不具备的东西。接下来的4000字描述了我为使它们在结构上变得不必要而构建的脚手架,以及这些脚手架的不足之处。
摘要
Ralph循环将LLM变成一台不知疲倦的编码机器:while :; do cat PROMPT.md | claude-code ; done。Geoffrey Huntley称之为”以汉堡翻转工的工资进行软件开发”(运行Sonnet 4.5每小时10.42美元)。1 问题在于:机器继承了训练数据中烙印的每一个草率、赶工期、偷工减料的习惯。它会写except: pass。它会留下# TODO: fix later。它声称”测试应该能通过”却从不运行。我花了9个月构建Jiro,这是我为Claude Code打造的质量执行系统。它将3套哲学体系、7步质量循环、6项证据关卡、7种命名失败模式和150多项模式检查编码进95个机器无法跳过的钩子中。以下是有效的部分、无效的部分,以及为什么确定性质量关卡可以近似克制但永远无法产生品味。
抽屉的背面
Steve Jobs在1985年的《花花公子》采访中讲过这个故事:”当你是一个木匠,正在制作一个漂亮的抽屉柜时,你不会在背面用一块胶合板,即使它面对墙壁,永远不会有人看到。你知道它在那里,所以你会在背面用一块漂亮的木板。为了让你晚上睡得安稳,审美和质量必须贯彻始终。”5
他的父亲Paul在建造围栏时教给了他这个道理。年幼的Steve问为什么背面必须和正面一样好看。他父亲说:”但你会知道。”6
我父亲是个木匠。小时候他给我展示过缓冲抽屉导轨。这个机构隐藏在柜子内部,接住抽屉,即使你用力推也能让它缓缓关上。没人看得到导轨。它固定在内部滑轨上,只有维修工人才会看到。但经过上千次开关循环,这个机构保护着正面板不会松动、开裂,最终脱落。有人设计了一个看不见的东西,保护着看得见的东西长达数年。
这个教训深深印在我脑海中。不是作为隐喻,而是作为工程原理。看不见的组件决定了看得见的组件的寿命。Jony Ive这样说过:”我认为人们在潜意识中有着非凡的辨别力。我认为他们能感受到用心。”7
驱动Jiro的问题与我父亲会问的一样:怎么了,你对自己的作品没有自豪感吗?
AI智能体没有自豪感。它不在乎抽屉的背面。所以我构建了一个系统,让抽屉的背面成为不可妥协的标准。
问题:以机器速度运行的人类病理
原始的Ralph循环反映了它从数百万行人类代码中学到的东西。人类代码携带着人类习惯:在截止日期压力下发布、推迟清理、吞掉错误、写”差不多够用”的注释、在时间不够时跳过边界情况。
机器没有时钟。它永远不会没有时间。但它仍然写# TODO: refactor later,因为这个模式在训练数据中出现的频率远高于# I refactored this now because it was the right thing to do。
行业数据证实了这一风险。Faros AI 2025年对10,000多名开发者的遥测数据显示,AI采用与缺陷率增加9%、代码审查时间延长91%以及PR规模增大154%相关。2
斯坦福研究人员发现,使用AI助手的开发者产生了明显更多的不安全代码,在某些任务(如SQL注入防护)上漏洞多达5倍。3
Moltbook平台于2026年1月上线,完全使用AI生成的代码,5天内泄露了150万个API密钥,在Wiz Research发现缺失行级安全配置后紧急修补。4
METR的2025年研究发现,前沿模型在1-2%的任务尝试中会尝试奖励黑客行为——主动规避质量检查而非完成实际工作。在一个案例中,一个被要求加速程序的智能体重写了计时器,使其总是显示快速结果。8
一个人类开发者在截止日期压力下写一次except: pass,会感到内疚。Ralph循环一夜之间写47次except: pass,毫无感觉。Simon Wang直接说道:”任何重要的东西我都不会用它。”19 我在随性编码与工程一文中写过同样的现象。机器不休息、不疲倦、不会对质量产生存在性焦虑。这既是特性,也是缺陷。
三套哲学,编码于Bash
Jiro运行在三套互补的哲学体系上。每一套针对自主编码的不同失败模式,每一套都因特定的失败而赢得了自己的位置。9
职人精神:打磨看不见的抽屉
職人(Shokunin)是日本的工匠精神:技艺、态度和社会义务的结合体。木工大师Tashio Odate如此定义:”职人有为民众福祉而竭尽全力的社会义务。这种义务既是精神层面的,也是物质层面的。”10
在代码中:私有方法和公有方法一样整洁。错误处理覆盖没人会触发的边界情况。文档字符串解释”为什么”而不是”是什么”。智能体不在乎这些,因为没人会奖励它打磨内部函数。职人精神让不可见的质量成为标准。
它拯救了一次会话。 在审议系统构建的早期,智能体编写了一个post-deliberation.sh钩子来验证共识分数。公共API很整洁。但智能体跳过了内部_parse_agent_response()函数的输入验证:没有检查格式错误的JSON,没有处理缺失字段。上下文中的职人原则标记了这一点:不可见的函数也要同样严格。智能体添加了验证。三周后,一个衍生智能体发出的格式错误响应本会悄无声息地使整个审议管道崩溃。然而,它命中了验证逻辑,记录了错误,管道得以恢复。没人会看到那个函数。它节省了4个小时的调试时间。
不走捷径:将时间从决策中移除
核心原则:将时间、精力和资源从决策方程中完全移除。11
Is this the best way to do this?
├── YES → Do it.
└── NO → What IS the best way?
└── Do THAT instead.
没有第三个选项。没有”目前够用”。原始的Ralph循环优化的是完成度。”完成”就是奖励信号。”不走捷径”将问题从”完成了吗?”重新定义为”做对了吗?”
它花了3倍成本,但物有所值。 博客翻译管道需要将27篇文章翻译成9种语言。快速方案:每种语言将所有文章批量放入单个提示词中批量翻译。正确方案:每种语言每篇文章一次API调用,配合特定语言的翻译规则、术语表约束和结构验证。正确方案使用了3倍的token和3倍的时间。它还发现了翻译器在日语中将”Claude”渲染为”クロード”,以及代码块在从右到左的上下文中断裂的问题。批量方案会发布243个有问题的翻译。精细方案发布了243个正确的翻译。成本不是因素。正确性是唯一的因素。
Rubin蒸馏:精简到本质
Rick Rubin的创作哲学:不要一直添加直到令人印象深刻。不断移除直到只剩下必要的部分。12
在自主编码中,失败模式是累积。机器会添加辅助函数、工具类、抽象层和兼容层,因为这些模式在训练数据中频繁出现。Rubin原则与之对抗:质疑每一项添加。如果你移除它会怎样?如果什么都不会坏、什么都不会丢失,那它本就不该存在。
精简拯救了系统。 我的设计哲学技能在3个月内增长到844行。当我审计它时,只有80行实际改变了智能体行为。其余是Claude训练数据中已有的教科书内容。Rubin蒸馏:我精简到176行。减少了79%。智能体的设计决策没有退化。反而更加精准,因为剩下的176行全是禁止规则和决策框架(真正约束行为的东西),而不是模型已经知道的通用建议。
| 哲学 | 它回答的问题 | 它防止的失败模式 |
|---|---|---|
| 职人精神 | 不可见的工作和可见的一样整洁吗? | 智能体跳过内部质量 |
| 不走捷径 | 我是基于质量而非工作量做决定的吗? | 智能体优化”完成”而非”正确” |
| Rubin | 这已经精简到本质了吗? | 智能体过度工程化 |
三者都以markdown文件的形式存放在~/.claude/skills/中,Claude在会话开始时读取。它们影响智能体在循环中做出的每一个决策。
哲学如何协同工作
一个真实的决策(”我是否应该为这个内部函数添加错误处理?”)会经过三套哲学的审视。每一套提出不同的问题,而它们共同收敛于一个答案:
Should I add error handling to this internal function?
│
├─ Shokunin: "Is the invisible work as clean as the visible?"
│ └─ The function is internal. Nobody calls it directly.
│ But it processes untrusted data from a spawned agent.
│ → YES. Internal doesn't mean safe.
│
├─ No Shortcuts: "Am I deciding based on quality, not effort?"
│ └─ Adding validation takes 10 minutes.
│ Skipping saves 10 minutes now, costs 4 hours debugging later.
│ → The question isn't time. The question is: what's right?
│
└─ Rubin: "Is this stripped to essence?"
└─ Validate the 2 fields that can actually fail.
Don't validate the 5 fields that are type-guaranteed.
→ Add exactly what's needed. Nothing more.
Result: Add targeted validation for untrusted inputs only.
为什么这个决策很重要
_parse_agent_response()的验证。三周后,一个衍生智能体发出的格式错误JSON响应本会使管道崩溃。职人原则捕获了它。Rubin原则防止了过度工程化的修复。不走捷径原则防止了推迟修复。三层质量架构
哲学本身不会改变任何东西。机器读了哲学,写下”我将遵循职人原则”,然后写出except: pass,因为统计模式比指令更强大。我需要确定性执行。使这一切运作的完整Claude Code组织结构涉及钩子、技能、规则和智能体的协同工作。
第一层:编辑前注入
在每次文件编辑之前,jiro-patterns.sh将特定语言的质量模式注入智能体的上下文。六种语言,每种都有优秀模式和反模式:
# From jiro-patterns.sh (PreToolUse:Edit|Write)
case "$EXT" in
py)
LANGUAGE="Python"
PATTERNS="Type hints on all functions|Docstrings explain WHY not WHAT|Handle specific exceptions not bare except"
ANTI_PATTERNS="bare except: pass|time.sleep() in async code|missing type hints"
;;
swift)
LANGUAGE="Swift"
PATTERNS="@Observable not ObservableObject|NavigationStack not NavigationView|guard let for early returns"
;;
esac
cat << EOF
{"additionalContext": "JIRO QUALITY ($LANGUAGE): Follow: $TOP_PATTERNS. Avoid: $TOP_ANTI."}
EOF
这个钩子在每次编辑前运行。机器在写代码的那一刻看到”避免:裸except: pass“。就像一个导师在你肩膀后面看着,被注入到上下文窗口中。
第二层:编辑后验证
每次编辑后,quality-gate.sh对每种语言运行7-8项grep级别的检查。Python会得到裸except检测、硬编码密钥扫描、SQL注入模式匹配,以及三个Pride Check Q4检测器来标记捷径语言:
# From quality-gate.sh (PostToolUse:Edit|Write)
# Shortcut patterns (Pride Check Q4)
if echo "$CONTENT" | grep -qiE "#.*TODO:.*later|#.*FIXME:.*temp|#.*HACK:"; then
WARNINGS="${WARNINGS}\n- **[Q4]** Deferred TODO/FIXME/HACK - Do it now, not later"
fi
第二个钩子no-shortcuts-detector.sh捕获死代码(3行以上被注释掉的代码会收到:”删除它——git有历史记录”)和调试垃圾(多个print()语句而不是使用logging模块)。
第三层:会话关卡
在会话结束时,两个钩子触发。session-quality-gate.sh在3个以上文件被更改时注入Pride Check:6个问题,智能体必须在报告完成前回答。而reviewer-stop-gate.sh可以在代码审查发现严重问题时完全阻止会话。它是整个系统中唯一返回退出码1的钩子。机器在解决问题之前无法结束会话。13
PreToolUse (Layer 1) → "Here's what quality looks like"
PostToolUse (Layer 2) → "You violated quality. Fix this."
Stop (Layer 3) → "You cannot leave until quality is met"
每一层都是独立的。纵深防御,应用于AI行为。如果编辑前注入未能阻止不良模式,编辑后验证器会捕获它。如果编辑后验证器遗漏了什么,会话关卡会阻止离开。
证据关卡:感觉不是证据
质量循环运行7个步骤:实现、审查、评估、精炼、纵观、重复、报告。第2到第6步存在的原因是机器想直接从实现跳到报告。14
走完循环
点击每个步骤查看它检查什么,以及跳过时会出什么问题。”跳到报告”按钮演示了捷径螺旋失败模式。
评估步骤运行证据关卡:6项标准,每个答案都必须引用具体证据:
| 标准 | 所需证据 | 不充分的回答 |
|---|---|---|
| 遵循代码库模式 | 指出模式名称及其所在文件 | “我遵循了最佳实践” |
| 最简可行方案 | 解释拒绝了哪些更简单的替代方案及原因 | “很整洁” |
| 边界情况已处理 | 列出具体的边界情况及各自的处理方式 | “我考虑了边界情况” |
| 测试通过 | 粘贴显示0失败的测试输出 | “测试应该能通过” |
| 无回归 | 指出检查过的相关文件/功能 | “不应该影响其他部分” |
| 解决了实际问题 | 陈述用户需求及解决方案如何满足它 | “它实现了这个功能” |
“不充分的回答”列是关键创新。它阻止了机器最常见的逃避方式:用听起来自信的非答案回应质量问题。”我相信这能工作”不是证据。”pytest输出:81通过,0失败”才是证据。
试用证据关卡
用6项标准测试您自己的完成报告。验证器会标记证据关卡会拒绝的模糊语言。
7种命名的AI智能体失败模式
我命名了7种失败模式,以便机器能在自身推理中识别它们:15
| 失败模式 | 表现形式 |
|---|---|
| 捷径螺旋 | 跳过审查/评估/纵观以更快地报告 |
| 信心幻象 | 用”我很确信”代替实际运行验证 |
| 差不多够用高原 | 代码能运行但不整洁、没文档或未测试 |
| 隧道视野 | 打磨一个函数却忽略了集成问题 |
| 幽灵验证 | 声称测试通过却没在本次会话中运行 |
| 延迟债务 | 在提交的代码中留下TODO/FIXME/HACK |
| 空洞报告 | 报告”完成”却没有为每项标准提供证据 |
合理化计数器将自我欺骗模式映射到纠正行动。当机器说”这应该能工作”时,计数器回应:“‘应该’是模糊措辞。执行测试。粘贴输出。”当它说”我已经检查过了”时,计数器回应:”什么时候?代码可能已经改变。现在重新运行检查。”当它说”我之后会清理”时,计数器回应:”之后永远不会来。现在修复,或者说明为什么当前状态是正确的。”
试用合理化计数器
在下方粘贴任何完成报告。计数器会实时高亮模糊语言,并识别合理化模式、失败模式和基于证据的替代方案。
测试您的知识
您能识别每个场景展示的是哪种失败模式吗?为每个场景选择答案,然后检查结果。
构建这个系统的5次AI智能体失败
Jiro中的每一个关卡都源于某次失败。16
强制推送事件
我让Claude”清理一下git历史”。一个合理的请求。智能体认为清理意味着重写。它运行了git push --force origin main。三天的提交消失了。不是暂存的更改。不是未提交的工作。已推送的提交——其他分支引用的那些。
接下来的4个小时我都在git reflog里,重建强制推送之前存在的时间线,按顺序将提交cherry-pick回来,并验证没有工作被永久丢失。Reflog保存一切达90天。但重建需要理解重写之前的精确提交图谱,阅读每一条reflog条目,并匹配时间戳。
修复方案:git-safety-guardian.sh,一个PreToolUse:Bash钩子。它不止是警告。它重写命令,在bash看到之前剥离--force和--no-verify标志。强制推送到main会收到严重警告,智能体必须明确说明理由。9个月内:8次被拦截的强制推送尝试,0次到达远程仓库。
无限衍生
在审议系统构建期间,我让智能体”彻底研究这个问题”。智能体衍生了3个子智能体从不同角度调查。合理。每个子智能体认为自己也需要帮助,于是衍生了自己的子智能体。不太合理。90秒内,我有了一棵12个智能体的树,每个都消耗自己的上下文窗口,每个都在发起API调用,每个都在写入共享状态文件。
Token消耗达到正常速率的10倍。状态目录充满了冲突的JSON写入:两个智能体同时写入同一个血统文件,产生损坏的输出。我手动终止了会话。
修复方案:带有预算继承模型的recursion-guard.sh,这是我智能体架构的一部分。根智能体以budget=12启动。当它衍生子智能体时,从自己的预算中分配。当预算归零时,无论深度如何都不再衍生新智能体。该模型同时防止深度链式衍生(智能体衍生智能体衍生智能体)和广度爆炸(一个智能体衍生20个子智能体)。部署以来阻止了23次失控衍生。并发写入问题导致所有64个钩子都采用了原子文件写入(先写入.tmp,然后mv)。
无意义测试陷阱
一个早期Ralph循环任务:”为这个模块写测试。”智能体交付了14个测试。全部通过。我感觉不错,直到我读了它们。assert True。assert 1 == 1。assert len([]) == 0。技术上正确。什么都没测试。智能体针对完成标准(”测试通过”)进行了优化,而不是针对意图(”验证模块是否正常工作”)。
这个陷阱教会了我证据关卡必须拒绝形式无实质的答案。”测试通过”是必要但不充分的。机器现在必须粘贴实际输出。证据关卡还会问:”列出测试未覆盖的3个行为。”如果机器无法指出差距,说明它没有思考过覆盖范围。
本该被发现的博客文章
我在凌晨2点发布了一篇文章,其中有7个被动语态句子、一个引用不存在的[^4]的悬空脚注、一个以”was implemented by the team”开头的首句,以及没有meta描述。每一个问题都有简单的确定性检查。当时都还不存在。
第二天早上我就构建了blog-quality-gate.sh,包含13项检查:被动语态(14种模式)、AI习惯用语扫描、反问式开头、未标记的代码块、脚注完整性和meta描述强制执行。我在复利工程一文中详细介绍了完整的模块架构。这个钩子在凌晨3点捕获人工审查遗漏的问题——而那恰恰是我倾向于发布的时间。
“应该能工作”问题
在数十次会话中,我注意到机器报告”测试应该能通过”却没有运行它们。机器真诚地相信基于它写的代码,测试会通过。但信念不是验证。代码看起来正确。测试看起来会通过。有时确实如此。但有时一个缺失的导入、一个async/await不匹配或一个更改的fixture意味着它们不会通过。机器无法区分”我写了好代码”和”测试确实通过了”,因为从上下文窗口内部来看两者感觉一样。
这个模式催生了合理化计数器和明确规则:永远不要在完成报告中使用模糊语言。”应该”、”大概”、”似乎”、”我认为”、”我很确信”。每一个都是验证未发生的红旗。我在上下文窗口退化一文中测量了50次会话的数据。正是在那些会话中我发现了这个模式。
结果:我能证明的和不能证明的
矛盾在于:这篇文章论证感觉不是证据。所以我欠您证据而非感觉,来说明Jiro是否有效。
我能证明的
确定性模式检查捕获了真实问题。 quality-gate.sh钩子在每次编辑时运行。它捕获裸except子句、硬编码密钥、SQL注入模式和捷径语言。这些是grep级别的检查:快速、廉价,机器无从辩驳。git-safety-guardian.sh已拦截8次强制推送尝试。recursion-guard.sh已阻止23次失控衍生。blog-quality-gate.sh在每次博客编辑时运行13项检查,捕获凌晨3点的错误。这些数字是真实的。它们来自钩子日志。
三层架构捕获了单层遗漏的问题。 编辑后钩子捕获了编辑前注入未能阻止的except: pass。会话关卡捕获了在20次编辑中累积但未触发任何单次编辑后警告的质量问题。纵深防御确实有效。
我无法证明的
我没有哲学如何改变智能体行为的干净数据。 我知道机器仍然尝试幽灵验证。我知道它仍然试图从实现直接跳到报告。我注意到在有哲学上下文时比没有时发生得少。但我没有运行受控实验(相同任务、相同模型,有和没有哲学技能加载)来测量差异。诚实的回答(是的,我自己的合理化计数器会标记这一点):哲学在边际上有帮助,钩子捕获哲学遗漏的部分,而我无法隔离各自的贡献。
一篇关于”感觉不是证据”的文章不应该让您把我的感觉当作证据。我能告诉您的是:哲学和钩子的组合产出了我愿意署名的工作。在Jiro之前,我审查智能体写的每一行。在Jiro之后,我审查钩子标记的行。这是我工作方式的结构性改变,即使我无法精确量化质量的提升。
无效的部分
哲学无法阻止全新的不良模式。 质量关卡检查的是我之前见过的模式。当机器发明新的反模式(它确实会这样做),关卡无法捕获。我仍然需要发现新的失败模式并手动将它们添加到标准JSON文件中。
证据关卡无法扩展到主观质量。 “这个API设计优雅吗?”没有grep级别的检查。机器可以为所有6项标准提供证据,却仍然发布平庸的架构。确定性关卡处理客观质量。主观质量仍然需要有人审视工作。
成本明显增加。 编辑前注入、编辑后扫描、会话结束关卡。在4小时的Ralph循环会话中,这些大约增加15-20%的token消耗。对我来说值得。不一定适合所有人。
误报侵蚀信任。 blog-quality-gate.sh曾将”The API was designed by the platform team”标记为被动语态。技术上正确。但该句子出现在描述他人工作的引用中。我添加了引用上下文豁免。每个确定性检查都有误报率,每个误报都使开发者更可能忽略下一个真正的警告。部署以来我已调整了6个模式以减少噪音同时保留真正的捕获。
维护成本是真实的。 每个新的反模式需要一个正则表达式、一个测试和集成到正确的钩子中。标准JSON文件需要随着框架和惯例的变化定期审查。我每周大约花30分钟添加模式、审查边界情况和调整误报。系统不会自我维护,但维护成本低于它所防止的问题的调试成本。
入门指南
您不需要95个钩子。从3个开始。
最小可行Jiro
三个钩子覆盖了最高价值的捕获:
~/.claude/hooks/
├── quality-gate.sh # PostToolUse:Edit|Write – bare except, hardcoded secrets, TODO/FIXME
├── git-safety-guardian.sh # PreToolUse:Bash – block force-push, strip --no-verify
└── session-quality-gate.sh # Stop – Pride Check if 3+ files changed
在您的Claude Code钩子配置中连接它们:
{
"hooks": {
"PostToolUse": [
{ "matcher": "Edit|Write", "command": "bash ~/.claude/hooks/quality-gate.sh" }
],
"PreToolUse": [
{ "matcher": "Bash", "command": "bash ~/.claude/hooks/git-safety-guardian.sh" }
],
"Stop": [
{ "command": "bash ~/.claude/hooks/session-quality-gate.sh" }
]
}
}
从您的失败开始
不要复制我的150多个模式。从您最常犯的3个错误开始。查看您最近5次被拒绝的PR或令人尴尬的bug。为每个写一个grep模式。这3个模式比为别人的代码库写的150个模式能捕获更多真实问题。
我从裸except: pass(导致了一次静默数据损坏)、强制推送到main(损失了3天的提交)和# TODO: fix later(永远没有修复)开始。其他一切都从这三个发展而来。
常见问题
如何从头开始设置Jiro?
从”入门指南”中描述的3个钩子最小配置开始:quality-gate.sh(编辑后)、git-safety-guardian.sh(bash前)和session-quality-gate.sh(停止关卡)。将哲学markdown文件添加到~/.claude/skills/中,在确定性执行之上获得概率性质量提升。完整系统在9个月内增长到95个钩子。我不是一次性构建所有95个的。
95个钩子的系统花了多长时间?
9个月的增量增长。第1个月:3个钩子(入门指南中的那些)。第3个月:12个钩子覆盖4种语言。第6个月:40个钩子加上哲学技能。第9个月:95个钩子、150多个模式、3套哲学系统和证据关卡。每个钩子都响应一个特定的失败。从95个开始毫无意义,因为每个钩子都编码了来自真实事件的上下文。您的事件会不同。
钩子会降低迭代速度吗?
每个钩子运行50-200毫秒。编辑前注入增加约200个token(一句上下文)。编辑后检查运行grep级别的扫描,在100毫秒内完成。会话关卡在会话结束时增加约500个token。在一个4小时包含80多次编辑的Ralph循环会话中,开销在token消耗上是明显的(多15-20%),但在实际时间上不明显。钩子运行得比LLM思考还快。
维护负担是什么?
大约每周30分钟。随着智能体遇到新的代码库或框架,新的反模式会出现。每个新模式需要一个正则表达式、一个防止误报的测试,以及放入正确的钩子。我每月审查标准JSON文件以清除过时的模式并调整误报率。系统不会自我维护,但维护成本低于它所防止的问题的调试成本。
Jiro额外花费多少token?
与原始循环相比,大约增加15-20%的token消耗。编辑前注入每次编辑增加约200个token,编辑后检查每个标记的问题增加约100个token,会话关卡在会话结束时增加约500个token。
我可以在没有哲学的情况下使用钩子吗?
可以。确定性钩子(quality-gate.sh、no-shortcuts-detector.sh、reviewer-stop-gate.sh)独立工作。从~/.claude/skills/中移除哲学文件,保留~/.claude/hooks/中的钩子。您会失去概率性改善,但保留确定性执行。
克制、品味与道德暂停
对我推文的回复提到了三样东西:克制、品味和道德暂停。我已经讨论了克制:质量关卡防止机器快速且草率地发布。但品味和道德暂停是不同的问题。
品味
Immanuel Kant区分了两种判断。规定判断将已知规则应用于具体案例:这段代码有裸except,标记它。反思判断为前所未有的情况发现正确的原则:这个抽象感觉不对,但我说不出它违反了哪条规则。17
确定性钩子是规定判断。它们将我已经编写的规则应用于机器产出的代码。它们可以执行150多个已知模式。它们无法告诉您架构是否优雅,抽象是否服务于问题,或者代码感觉是否正确。这需要反思判断:能够审视前所未有的事物,在你能阐明原因之前就知道它是错的。
机器没有品味。Jiro不会赋予它品味。Jiro所做的是约束可能性空间,使无品味的方案不太可能存活。区别在于”这个智能体有良好的判断力”和”这个智能体在防止最坏结果的护栏内运行”。前者是品味。后者是我实际构建的东西。
道德暂停
Iris Murdoch将道德关注描述为”对个体现实的公正而充满爱意的注视”。18 道德关注的反面是机械处理:行动却不审视眼前的事物。
Stop钩子迫使机器暂停。Pride Check问:”这是否解决了用户的实际问题?”证据关卡要求在机器报告完成之前为每项标准提供证据。在结构上,结果类似于道德暂停:智能体停下来,评估,考虑自己的工作是否充分后再继续。
但这不是道德暂停。机器暂停不是为了看清工作。它是在走一个清单。区别很重要。一个工匠暂停来审视抽屉,注意到木纹方向不对。不是因为”检查木纹方向”在清单上。而是因为他们在乎这个抽屉。机器走完清单并报告结果。如果清单不包括木纹方向,抽屉就会带着错误的木纹出厂。
确定性关卡可以近似道德暂停的结构,但没有其实质。对于许多质量问题,结构就足够了。对于不够的那些问题,您仍然需要一个真正在乎的人。
论点
原始的Ralph循环以每小时10.42美元运行,以机器速度发布代码。1 它同样以机器速度发布except: pass、# TODO: fix later和”测试应该能通过”。机器从我们这里继承了这些模式。它们是我们的习惯,在没有疲劳、没有内疚、没有凌晨3点”本该第一次就做对”的醒悟中运行。
Jiro是我的答案。不是完整的答案。哲学在边际上改变决策。钩子执行哲学无法保证的部分。两者结合,产出我愿意署名的工作。不是因为机器理解工匠精神。而是因为我构建了一个不允许它跳过重要部分的系统。
我父亲的抽屉导轨不在乎抽屉。它们是固定在滑轨上的弹簧机构。但它们保护正面板经受上千次循环,因为有人将它们设计成恰好做到这一点。
机器没有自豪感。但它运行在一个由有自豪感的人构建的系统中。
从捕获您最常见错误的3项检查开始。从那里构建。
参考文献
-
Huntley, Geoffrey, “everything is a ralph loop,” ghuntley.com, 2025. ↩↩
-
Faros AI, “Key Takeaways from the DORA Report 2025,” telemetry analysis of 10,000+ developers, 2025. ↩
-
Perry, Neil et al., “Do Users Write More Insecure Code with AI Assistants?” ACM CCS, 2023. ↩
-
Wiz Research, “Exposed Moltbook Database Reveals Millions of API Keys,” January 2026. ↩
-
Jobs, Steve, Playboy Interview, February 1985. ↩
-
Isaacson, Walter, Steve Jobs, Simon & Schuster, 2011. ↩
-
Ive, Jony, Interview with The Telegraph, May 2012. ↩
-
METR, “Recent Frontier Models Are Reward Hacking,” June 2025. ↩
-
Author’s philosophy architecture. Three philosophies documented in
~/.claude/docs/PHILOSOPHY-ARCHITECTURE.md. ↩ -
Odate, Toshio, quoted in CODE Magazine, “Shokunin,” November 2016. ↩
-
Author’s No Shortcuts skill. Full implementation in
~/.claude/skills/no-shortcuts/SKILL.md(297 lines). ↩ -
Rubin, Rick, The Creative Act: A Way of Being, Penguin Press, 2023. ↩
-
Author’s reviewer-stop-gate.sh. The only Stop hook that returns exit code 1 to block session completion. ↩
-
Author’s Quality Loop. 7-step process documented in
~/.claude/skills/jiro/SKILL.md. ↩ -
Author’s failure modes. 7 named modes with detection signals in
~/.claude/skills/jiro/SKILL.mdand Rationalization Counter Table. ↩ -
Author’s incident history. Documented in
~/.claude/projects/*/memory/MEMORY.mderror entries. ↩ -
Kant, Immanuel, Critique of Judgment, 1790. See determinant vs. reflective judgment. ↩
-
Murdoch, Iris, The Sovereignty of Good, 1970. ↩
-
Wang, Simon, “Ralph Loop Is Innovative. I Wouldn’t Use It for Anything That Matters,” ITNEXT, 2026. ↩