
这是什么
一个逼 agent 在动手之前先把「做完」写下来的技能。台账里的每个闸门是一条 shell 命令加上它必须产出的输出,只有进程退出码为 0 且期望值匹配合并输出才算通过——于是任何「完成了」的说法都得先扛过一次重跑。校验脚本只要 Node 16 以上、不带任何第三方运行时依赖:它可以只做检查而不执行任何命令,也可以在明确批准之后执行,或者把包括已标记完成在内的所有可执行闸门全部重跑;可选的 Stop 钩子在闸门未达成、或启动波次没收齐时,不让 Claude Code 的会话结束。单个闸门之上,是整套东西所依托的 Depth Tree 方法:把任务往下拆 N 层,并让每一片叶子拿到整件事的完整时间预算,于是投入随树的深度上升,而不是被层数除开;编排模式下,互相独立的叶子要在开工之前申明互不重叠的文件归属。
谁做的一位在慕尼黑的开发者,网名 Leonxlnx:账号 2025-07-03 注册,47 个公开仓库,2,167 个关注者,自我介绍只有一句「I build cool stuff」。这个仓库的 49 次提交里 24 次是他写的,其余 25 次分散在另外九个账号上,还有两次提交没有关联账号。他的其他仓库包括 91,596 星的 taste-skill 和 2,550 星的 agentic-ai-prompt-research。
它是怎么搭起来的
组成 · 6两件职责不同的东西:一份技能文档,告诉 agent 怎么拆任务、怎么把「做完」写下来;一个不依赖任何第三方运行时包的 Node 脚本,判断那些写下来的话是不是真的。信任只朝一个方向流动——模型写台账,校验器判它——所以校验器可以执行 shell 命令,但必须先经过一次显式批准,而那次批准绑定的是确切的命令、期望值、工作目录、shell、超时与继承来的 PATH;整套设计也就围绕校验器唯一做不到的那件事展开:判断一句英文标题和一段 shell 代码说的是不是同一件事。单个闸门之上的一切——叶子的树、OWNS: 声明、派发波次、父节点复核——都是为了让一整棵 agent 层级能用同一个原语自下而上地验证:每个父节点重跑子节点,而不是相信子节点。
- SKILL.md
- 技能本体,10,520 字节:核心指令与模式路由,agent 在技能被触发后读的那份文件,也是整套东西里唯一属于散文而非机械的部分。
- references/
- 六份文档共 41 KB,一个主题一份:
gates.md(15,368 字节)讲严格的台账格式、批准、shell 与撰写规则;orchestration.md(7,324)讲叶子与分支状态、滚动派发与验证层级;parallel.md(6,596)讲 scope 与租约协调的边界;dispatch.md(5,901)讲原生启动波次、宿主适配器与恢复;method.md(3,853)讲的正是 Depth Tree 拆解法本身;token-economy.md(3,288)讲注意力与验证成本。 - scripts/ 与 scripts/lib/
- 五个可执行文件压在五个库文件之上——72 KB 与 59 KB。
gate-check.mjs(39,966 字节)是校验器,gate-lint.mjs(9,540)是只提示不执行的 linter,stop-hook.mjs(9,230)是可选的钩子,install-hooks.mjs(8,639)是安装器,dispatch-check.mjs(6,250)是派发记录器;下面是gates.mjs(39,395)、dispatch.mjs(13,299)、process-tree.mjs(5,994)、check-supervisor.mjs(1,462),以及一个 282 字节的 regex worker。 - templates/
- 三份台账模板,共 10 KB:
PLAN.md(6,492 字节)、gates-node.md(2,139)、gates-leaf.md(2,067)。在一条社区 pull request 之后,计划里还多了一张叶子派发表,列出Owns、Needs、Tier、State四列和一张明确的波次表,于是「什么可以并行」在计划阶段就看得见,而不只存在于驱动者的脑子里。 - tests/
- 七个文件、199 KB,是仓库里最大的表面积,也是长得最快的一块:
hardening-tests.mjs(69,156 字节)、dispatch-tests.mjs(34,447)、stress-tests.mjs(34,116)、运行器(30,761)、self-check.mjs(16,171)、lint-tests.mjs(14,435)、contract-tests.mjs(4,656)。它们由npm test驱动,也由一份 1,491 字节的工作流驱动,后者覆盖三个操作系统与三个 Node 大版本。 - SECURITY.md、research/validation-protocol.md 与 CHANGELOG.md
- 三份让主张可被核查的文档:一份 12,742 字节的威胁模型,覆盖
CHECK:、shell、批准、钩子与租约;一份 4,442 字节的协议,写明历史上的局限以及一次站得住脚的重跑需要什么;还有一份 16,636 字节的 changelog,记录贡献者历史与 pull request 链接——每一处被整合进来的改动,署名都留在那里。
取舍,以及它替代了什么
让用户批准一条 shell 命令,而不是相信 agent 的自述 替代 相信模型对自己「验证了什么」的描述
README 写明了校验器跨不过去的那条边界——它只能证明你声明过的那个命令 oracle,无法推断一句英文标题与一段任意 shell 代码意思相同——其余设计都由此而来:台账先写,
--status是唯一从不执行的模式,而在未批准的 oracle 上普通运行只打印命令、期望值、工作目录、shell 与 PATH,不执行它们。批准覆盖的是已声明的命令与环境,而不是它调用的那些文件 替代 把每个检查读到的脚本、夹具与依赖都做哈希
批准绑定确切的
CHECK:与EXPECT:、解析出的工作目录与 shell、超时、输出与正则上限、平台,以及完整的继承 PATH;文档直接写明它不对被调用的脚本、夹具或其他间接输入做哈希,所以依赖变了必须重新审查并--reverify。一条要求更严格绑定的报告被作为有文档的边界关掉,理由是安全的可选绑定需要单独设计路径、存储、竞态、Windows 与 Stop 延迟。检查默认串行,并行是一个要显式打开的数码 替代 把所有看起来无关的闸门同时跑
派发是滚动的,但闸门检查除非传入
--jobs <N>否则保持串行;一条文档类 pull request 把「独立」定义成运行时独立——没有任何CHECK:会写另一个CHECK:读或写的东西,包括工作目录、生成文件、缓存、端口、数据库与锁文件——并给出「拿不准就串行」的指令。一条想要并行 agent 工作流的功能请求得到的回答也是同一个方向:在第一等待之前就把所有独立的 ready 叶子发出去,而检查本身保持有序。被放弃的闸门是交接,不是通过 替代 让做不到的闸门照样算达成
有效的放弃是终止性交接而非成功:校验器退出码 1 并打印
HANDOFF REQUIRED,同时列出合格 id;Stop 钩子允许会话结束,但给出的是一条明确的「未完成」消息,而不是一张健康证明。这次收紧来自一条报告:被放弃的必需闸门打印了ALL MET,还把完成度记给了父节点。写下来的规则是:MET意味着经验证的完成,ABANDONED意味着如实交代的未完成——因此它不能把父节点提升为已完成。证据绑定到闸门定义本身 替代 拿上一次通过当作当前命令的证明
一条报告显示
--approve会拿CHECK文本被改之前录下的证据报告 PASS,这是一个假的完成信号。现在自动证据以一段带版本的定义摘要开头,摘要覆盖解析后的CHECK:、EXPECT:与原始CWD:,运行时批准身份与它分离;校验器、--status与 Stop 共用同一套「陈旧即未达成」模型,旧格式或对不上的证据一律按失败关闭处理。启动波次先封口,再开始等待 替代 驱动循环里「起一个、等一个」的写法
派发契约要求一个 ready 集合里的每一片叶子都拿到各自不同的宿主句柄,并且在任何结果被收回之前先把波次封口——这让「起一个等一个」的串行写法从「不推荐」变成「不合法」。波次状态记在 scope 之下,无法恢复的部分启动必须走一条可审计的放弃迁移;文档写明绝不伪造句柄、也不删除状态。
依据README.md(17,238 字符,经 GitHub API 取回并全文读完,含其中的仓库地图、研究依据与带日期的来源列表),加上完整的 37 个文件树及其体积,以及 recon 报告里引用的各 pull request 正文与维护者回复。
制作过程
6 个阶段- 01
一个反偷懒的技能,第一个月就拿到 3,782 颗星
仓库建于 2026-08-09T23:39:12Z,而它最早的一次提交时间戳比创建时间还早十五秒——2026-08-09T23:38:57Z,标题是「unlazy: anti-laziness skill built on the Depth Tree method」。这正是把一段本地历史推进一个新建仓库的样子。公开历史共 49 次提交,集中在二十五天里:8 月 48 次,9 月 1 次,最新一次在 2026-09-03T09:31:08Z,标题是「fix: bind gate evidence and harden Windows identity」。到 2026-10-01,它有 3,782 颗星、281 个 fork、12 个 watcher、9 项未关事项——其中八个是 pull request,最新那个的日期是 2026-09-22。贡献者列表里有十个账号;作者本人写了 49 次提交里的 24 次,47 次提交带有关联账号,20 条共同作者尾注全部指向 Claude 模型——12 条 Opus 5、5 条 Fable 5、2 条带百万上下文窗口的 Opus 4.8,再加一条同样是百万上下文的 Opus 5。本记录把它定成 maintained 而不是 active:四周没有推送是一段停顿而不是终点,仓库没有归档,而且提交停下之后队列还在动——仍有八个 pull request 开着,日期从 2026-09-11 到 2026-09-22,全都比
main上最后一次提交更新。 - 02
Depth Tree,以及一条被完整写出来的研究依据
仓库用一句话说清了自己的核心:Depth Tree 方法把任务往下拆 N 层,并让每一片叶子拿到整件事的完整时间预算,于是投入随深度倍增;同一句话里还写着,它是「grounded in 2025-2026 research on model laziness, underthinking and premature completion」。README 没有把这句话留成姿态。研究依据那一节开篇就写:研究支持那些促使人们引入显式结构的失败模式,但并不能证明 unlazy 带来了确定的改进;随后用数字来论证——SlopCodeBench 里最好的被测 agent 通过了 14.8% 的检查点;METR 的 Time Horizon 1.1 报告全体 P50 倍增时间拟合为 196.5 天,而 2023 年之后的数据拟合是 130.8 天,并明确提醒不要把短的那个数字说成全时段估计;还有 s1 的 budget forcing,它在模型想停下时反复追加那个词,却同时否认多一个词总能改善结果。下面是来源列表,按最新在前排序,从 2025-02-18 排到 2026-08-06,外加一个没有日期的页面。每条都有标题、链接和日期,有两条带会议出处(COLM 2026 与 NeurIPS 2025),没有任何一条给出作者名——所以这些引用具体、可追溯,但不是完整文献条目。README 还撤回了自己更早版本的证据:旧版曾引用一次六轮内部对比,而重现那些比例与计数所需的原始产物并不在仓库里,因此那批结果只能当作历史设计输入,而不是基准保证。
- 03
在被允许停下之前,agent 必须写下什么
安装是一条命令走 skills CLI(
npx skills add Leonxlnx/unlazy),或者把仓库克隆到~/.claude/skills/unlazy与~/.codex/skills/unlazy;支持斜杠技能的地方叫它/unlazy,在 Codex 里是$unlazy,也可以由自然语言触发。README 给的例子是/unlazy tree 5 refactor the payment module and verify every migration path,那个数字就是深度。agent 欠下的是一份台账:每个闸门是一条勾选行,带标题、一条CHECK:shell 命令、一个EXPECT:字符串、可选的CWD:,以及一行EVIDENCE:。校验器有三种状态:--status,唯一永远不执行命令的模式;普通运行,在还没有精确批准记录的 oracle 上只打印解析出来的命令、期望值、工作目录、shell 与继承来的 PATH,而不执行任何东西——README 特意提醒普通模式不是永久试运行;还有--approve,用在用户读完每一条命令和每一个被调用的脚本之后。--reverify会重跑所有可执行闸门,包括那些已经标记完成的。可执行闸门只有在进程退出码为 0 且期望值匹配合并输出时才算通过,两者都以 1 MiB 为上限,而且校验器绝不会把超长的匹配串截断成「成功」。解析器会拒绝:没有闸门的台账、重复的 id、写不完整的可执行闸门、非法的期望值,以及缺少理由或指向未知闸门的放弃声明。放弃是终止性的交接而不是通过:退出码 1,并打印HANDOFF REQUIRED。 - 04
那个钩子、那个 shell,以及什么都读不出来的那台机器
可选的部件是一个 Claude Code Stop 钩子,只有用户同意才通过
install-hooks.mjs安装。它扫描当前会话解析出来的台账与派发状态,只要还有闸门未达成、或启动波次没收齐,就返回 Claude Code 文档里那个顶层decision: "block"。它自己不执行任何检查。它那条按会话记账的进度护栏在连续六次阻塞之后放行,而只改元数据的编辑不会让它重置——这个修正来自一条 pull request:此前的版本拿台账字节做哈希,于是任何编辑(包括校验器刚刚重写的那行证据)都会让计数器归零,把一个根本做不完的 agent 永久困住。校验器的 shell 依次取--shell、UNLAZY_SHELL、平台默认值,而检查会继承启动环境(含 PATH),所以同一个校验器从 Git Bash 启动时能看到的工具,从 PowerShell 启动时看不到;--shell换的是解释器,它不会替你装grep或tail。而在 Windows 上,一位读者发现每一次文件读取都以失败告终:他那台机器上fstat().dev永远不等于lstat().dev,于是校验器读不到任何台账,干净克隆下 32 个测试只过 5 个,在两个卷、Node 22.14.0 上都能复现。修法是用第二个不创建文件的句柄去比较大整数的描述符身份;作者保留了 SECURITY.md 里写明的「快照式」保证。更早一轮 Windows 修复清掉了孤儿进程:只杀 shell 会把检查的子进程留在后台,所以超时现在改调taskkill /pid <PID> /f /t。 - 05
永远不会失败的闸门,和那条没人读的参数
最有用的几轮来自真的拿这个技能干活的人。一条报告指出:某个闸门的
CHECK:根本没观察它标题所称的东西,却照样返回 PASS、写出证据、退出码 0——因为叶子自检、--reverify和 Stop 钩子问的是同一个 oracle。第二位报告者从另一个方向撞上同一类问题:他在一次十六周的课程就绪度审计里试用这个技能,闸门由另一个模型在另一套 harness 下写、也没装钩子,而让他不安的那个闸门守的正是任务里唯一一条硬约束——只读、不写。维护者修掉了那些机器可判定的假绿,合并了撰写规则,同时把话说白:校验器仍然无法证明「文字」与「命令」意思相同,这条边界现在是显式的。另一处 bug 值得记下来,因为它被报告过不止一次:indexOf("--timeout")在选项不存在时返回 -1,于是下一个索引成了 0,过滤器把第一个位置参数丢掉——只点名一个台账文件时,运行要么偷偷扩到目录里所有台账,要么根本没读那个文件却报告成功。它最终以显式指定文件加回归测试的方式修掉;两次报告里有一次本身就是一个 pull request,其作者在看过后开放队列之后,把它作为更早一条报告的重复项自己关掉了。 - 06
十五条社区改动,和一个没有 release 可放的版本
有三条报告针对的不是单个闸门而是整棵层级:被放弃的必需闸门仍能打印
ALL MET并把完成度记到父节点头上;被调用脚本或其输入变化之后,批准仍可能保持「当前」;还有一份计划可以漏掉两个交付物里的一个,而所有已声明的闸门全都通过。第一条和第三条被修掉了——放弃再也不能把父节点提升为已完成,计划现在要清点可独立遗漏的需求,并在派发之前重读请求——第二条则作为有文档的安全边界关掉,因为批准绑定的是已声明的命令与环境,而不是被间接调用的脚本字节。这个仓库的发版节奏很不寻常:没有 release,也没有 tag。README 说当前源码目标是2.1.0,但它不是一个打过 tag 的 GitHub release,需要不可变安装的人应当钉住某个具体提交;本该是 release notes 的东西放在一份 16,636 字节的CHANGELOG.md里,那里同时记录贡献者历史与 pull request 链接。社区成果就落在这个未发布的2.1.0中——列了十五条,把各条 pull request 里有用的部分整合进来、同时修掉它们的边界情况;测试数也跟着走:在265fbd5d这个提交上是七个套件共 137 个通过,后来变成 188 个、自检 15/15。持续集成跑 Ubuntu、Windows 与 macOS 乘以 Node 16、20、24:八月的一次是 9/9 个作业通过,九月的一次是 10/10,并钉住了 Node 22.14.0 与 libuv 1.49.2 的 Windows 作业。
相关档案
全部档案 →第 128 号
anything2explainer
一个把主题——或者一份文件——变成 1280×720 旁白解说片的技能,跑在 Claude Code 或 Codex 里。agent 先带着来源做调研、写解说词、生成配音和词边界时间轴,再逐镜头做分镜,然后派出一批并行构建 agent,每个 agent 写一个 Remotion 组件,所以画面是代码画出来的,不是模型生成的。它与同一作者的 video-shotcraft 不是同一种片子:那一条用 157 张镜头卡加一轮声音设计做产品宣传片,这一条的主干是旁白,不带镜头卡库、不带音效也不带配乐,并且在任何镜头动手之前就把解说词冻成了帧号。
第 125 号
OKF Agent Memory
把编码 agent 学到的东西以纯 Markdown 留在仓库里——一个用进程内 BM25 检索的 OKF v0.2 知识 bundle——于是这份记忆可以被 diff、被审阅,而不必住进数据库。
第 123 号
agent-memory
一个给 AI agent 用的长期记忆运行时:Markdown 文件是唯一真相,检索在本地排序、读的时候不调用任何模型,召回返回的是路径而不粘贴正文,写入发生在对话边界而不是等 agent 想起来,另外还有一个独立的睡眠期管理层——它可以自己新增和更新,但删除永远只能以提案的形式提交。Claude Code、Codex CLI 与 Hermes 共用同一份存储,不需要任何 API key。