如何安装unlazy的 Claude Code Stop Hook6次无进展自动放行机制全解析【免费下载链接】unlazyAnti-laziness skill for AI agents. Core: the Depth Tree method, which splits a task N layers deep and gives every leaf the full time budget of the whole task, so effort multiplies with depth. Grounded in 2025-2026 research on model laziness, underthinking and premature completion.项目地址: https://gitcode.com/gh_mirrors/unl/unlazyunlazy 是一个为 AI 智能体打造的反懒惰技能Anti-laziness skill它用门禁账本Gate Ledger把任务完成变成可验证的证据。其中可选的 Claude Code Stop Hook 会在门禁未全部通过时阻止会话结束并内置6 次无进展自动放行保护防止会话被无限卡死。本文带你完成一键安装并逐行拆解这套放行机制的设计逻辑。为什么需要 Stop HookAI 智能体最常见的失败模式是提前宣布完成——代码写到一半就自信地回复做完了。unlazy 的核心方法是 Depth Tree深度树拆分 门禁账本先写验收契约再执行检查最后只汇报证据支持的内容见 SKILL.md。Stop Hook 是这套纪律的最后一道闸门 它在 Claude Code 每次准备结束会话时被触发扫描当前会话解析出的门禁账本和 dispatch 状态只要还有未满足的门禁或未完成的分发波次就返回 Claude Code 官方的decision: block响应它只做扫描不执行任何CHECK:命令也不创建会话一句话账本没过会话不许停但绝不无限停。安装前准备3 步到位准备环境Hook 及其检查器要求 Node 16 或更高版本零第三方运行时依赖package.json 中engines字段有明确声明。获取 unlazy用 skills CLI 一键安装或克隆到 Claude Code 的技能目录npx skills add Leonxlnx/unlazy或手动克隆仓库地址https://gitcode.com/gh_mirrors/unl/unlazy到~/.claude/skills/unlazy。确认同意unlazy 明确要求只在用户同意时安装 HookSKILL.md 中的安全原则请确认这是你主动的选择。一键安装 unlazy Stop Hook 步骤默认安装推荐在 Claude Code 会话中执行node path-to-skill/scripts/install-hooks.mjs安装器会把一个timeout: 20的 command 钩子写入当前项目的.claude/settings.local.json。安装完成后的输出会明确告知你写入的命令、作用域、备份文件位置见 scripts/install-hooks.mjs。三种安装目标怎么选参数写入位置适用场景默认无参数项目内.claude/settings.local.json推荐机器本地、不随仓库提交--shared项目内.claude/settings.json团队共享但会写入本机绝对路径通常不可移植--global用户级~/.claude/settings.json所有 Claude Code 项目都启用⚠️ 无论选哪种钩子命令里都包含本机的 Node 绝对路径和 Hook 脚本绝对路径scripts/install-hooks.mjs提交前务必检查配置文件的 diff。固定作用域安装如果你使用 scoped 流水线.unlazy/scope/目录可以用--scope把 Hook 绑定到某一条流水线node path-to-skill/scripts/install-hooks.mjs --scope apiHook 会据此只检查该 scope 下的账本避免在多流水线项目中误伤其他会话路由规则见 references/parallel.md。卸载node path-to-skill/scripts/install-hooks.mjs --uninstall卸载逻辑很克制只凭精确的管理标记--unlazy-hook-v2识别 unlazy 自己的钩子并移除其余兄弟钩子原样保留scripts/install-hooks.mjs。拦截机制是怎么工作的Hook 源码只有 170 多行逻辑清晰核心流程如下scripts/stop-hook.mjs解析会话从 stdin 读取 Claude Code 传入的 JSON取出cwd和session_id解析出本会话对应的账本文件收集未完成项遍历账本中每个门禁的状态unmet、unmet-no-evidence、abandoned以及 dispatch 中阻塞的波次全绿放行没有未完成项也没有无效账本时清理本会话的状态并直接放行scripts/stop-hook.mjs否则拦截打印decision: block和一份可操作的原因告诉智能体该运行gate-check.mjs --status检查还是--approve执行scripts/stop-hook.mjs注意被放弃ABANDON:的门禁不会阻止会话结束但会以有界的HANDOFF REQUIRED消息明确暴露出来——放弃是诚实的终止而不是成功references/gates.md。6次无进展自动放行机制全解析 这是整个 Hook 最精妙的部分也是防死循环的安全阀。计数器MAX_BLOCKS 6const MAX_BLOCKS 6;scripts/stop-hook.mjs每次触发拦截前Hook 会把当前门禁状态算成一个进展哈希并与本会话上次记录比对哈希变了语义状态真的推进了→ 计数器归零重新开始哈希没变→ 计数器 1计数器超过 6→ 放行并附一条系统消息releasing after 6 blocks without gate progress同时列出剩余未完成的门禁scripts/stop-hook.mjs为什么比原始字节源码注释里有一段精彩的设计说明scripts/stop-hook.mjs早期版本比较的是账本文件的原始字节结果任何编辑都算进展——哪怕只是改个注释、调整行宽甚至检查器自己重写一行带新 PATH 哈希的证据都会让计数器无限重置。那样6 次放行就只对完全不动手的智能体生效而那恰恰是最不需要放行的情况。现在改为只比较解析后的门禁状态文件 门禁 ID 状态纯元数据编辑不再重置计数器。dispatch 侧同理问题字符串只编码规范化状态和计数不含原始 JSON 和 timestampscripts/stop-hook.mjs。会话隔离一个会话不能吃掉另一个会话的 6 次配额进展状态按解析出的 scope 当前会话双键索引session key 取session_id的 SHA-256 前 24 位scripts/stop-hook.mjs。状态写入经过文件锁串行化且只保留最近更新的 64 个会话条目防止废弃会话残留无限膨胀scripts/stop-hook.mjs。多会话并发的规则详见 references/parallel.md。状态文件在哪普通模式项目根目录.unlazy-hook-state.jsonscoped 模式.unlazy/scope/hook-state.json路径解析见 scripts/lib/gates.mjs请把.unlazy/和.unlazy-hook-state.json加入项目忽略规则它们是本地协调状态不应提交。处处 fail-open绝不让状态问题困死你这套机制有多个宁可放行也不卡死的兜底状态文件损坏 → 直接替换为新状态scripts/stop-hook.mjs状态更新超时或失败 → 放行并提示could not update the serialized hook statescripts/stop-hook.mjs账本全部完成 → 主动删除本会话状态会话表空了则删掉整个状态文件scripts/stop-hook.mjs--scope参数非法、找不到流水线 → 一律放行不拦截scripts/stop-hook.mjs安全设计与最佳实践 ✅先备份后写入安装器原子写入配置且替换前会在旁边生成settings-file.unlazy.bakscripts/install-hooks.mjs拒绝畸形配置settings 形状不合法、目标是符号链接或多链接文件时安装器直接拒绝而不是盲目覆盖scripts/install-hooks.mjs幂等安装重复执行同一安装命令会提示Already installed不产生任何变更scripts/install-hooks.mjs隐私Hook 不做遥测、不上传任何状态被放弃门禁的自由文本原因也绝不会被复制进特权消息SECURITY.md成本意识每次 block 都会引发一轮额外的模型续写所以 6 次上限本身也是 token 经济学的一部分且每条拦截消息都被设计成可操作references/token-economy.md常见问题速答QStop Hook 会执行我的CHECK:命令吗不会。它只解析账本、只报告状态与--status一样是纯只读边界references/gates.md。Q为什么我的智能体改了一堆东西却没触发进展重置因为它改的可能只是账本元数据。只有门禁或波次的语义状态发生变化进展哈希才会改变。Q6 次放行后任务没做完怎么办放行消息会列出剩余未完成项最多 4 个 计数。这是熔断而非成功——你可以随时重新驱动智能体或直接运行gate-check.mjs --reverify全量复验README.md 的 Quick start 一节。Q想彻底移除--uninstall即可且只删 unlazy 的条目你在settings.local.json里配置的其他钩子不受影响。小结unlazy 的 Stop Hook 是一个证据优先、失败放行的会话级完成度守卫一行命令安装node path-to-skill/scripts/install-hooks.mjs门禁未全绿 →decision: block阻止会话结束语义状态连续 6 次无进展 → 自动放行并报告剩余项状态按会话隔离、原子持久化任何状态故障都 fail-open配合 templates/gates-leaf.md 模板和门禁检查器scripts/gate-check.mjs你就能把AI 说做完了从一句自信的口头承诺变成一条可以被机器复核的证据链。【免费下载链接】unlazyAnti-laziness skill for AI agents. Core: the Depth Tree method, which splits a task N layers deep and gives every leaf the full time budget of the whole task, so effort multiplies with depth. Grounded in 2025-2026 research on model laziness, underthinking and premature completion.项目地址: https://gitcode.com/gh_mirrors/unl/unlazy创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
阅读完成 · 觉得有帮助?