ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

planning-with-files 循环节拍(Loop Tick)实战指南:用 templates/loop.md 让 AI Agent 定时循环具备计划感知能力

2026/9/12 16:32:54 拓冰建站 浏览量
planning-with-files 循环节拍(Loop Tick)实战指南:用 templates/loop.md 让 AI Agent 定时循环具备计划感知能力 planning-with-files 循环节拍Loop Tick实战指南用 templates/loop.md 让 AI Agent 定时循环具备计划感知能力【免费下载链接】planning-with-filesPersistent file-based planning for AI coding agents and long-running tasks. Crash-proof markdown plans, session recovery after /clear and compaction, per-turn re-injection against context rot, deterministic completion gate. Manus-style. Install from npm, the Claude Code plugin marketplace, or npx skills. Codex, Cursor, OpenCode, 60 agents.项目地址: https://gitcode.com/GitHub_Trending/pl/planning-with-files导读本指南围绕 planning-with-files 项目自 v2.38.0 起随包发布的 templates/loop.md 展开它是面向 Claude Code/loop原语的默认循环提示词模板负责把定时执行一次提示词升级为每个节拍都基于磁盘上的计划文件驱动工作。读完本文你将掌握该模板的安装位置、单次执行流程解析计划目录 → 重读规划文件 → 运行完成度检查 → 按四条分支推进以及它与check-complete.sh、resolve-plan-dir.sh、/plan-loop命令和 v3 门控模式之间的底层协作原理。一、什么是 Planning-aware Loop TickClaude Code 在 2026 年 5 月发布了三个回合循环原语/loopv2.1.72、/goalv2.1.139以及PreCompact钩子事件。planning-with-files v2.38.0 将计划工作流接入这三者其中/loop的接入载体就是templates/loop.md。问题在于裸/loop只是按固定节奏执行一段提示词与计划状态没有任何契约——它不关心task_plan.md里还剩几个阶段、progress.md是否停滞、当前阶段是否已经完成。loop.md模板给出的正是这段计划感知的默认 tick 提示词每个节拍先解析计划目录、重读规划文件、运行完成度检查再决定推进、更新状态还是停止。该模板的完整内容以两份相同副本存在于仓库中技能目录下的 templates/loop.md 与根级 templates/loop.md。模板开头明确声明This is the default loop prompt shipped by planning-with-files v2.38.0 and later.二、安装与启用把模板落位到 Claude Code 的循环提示词位置Claude Code 的裸/loop会读取两个固定位置的提示词文件用户级默认~/.claude/loop.md项目级默认.claude/loop.md因此安装只需一次复制# 用户级默认所有项目生效 cp templates/loop.md ~/.claude/loop.md # 项目级默认仅当前项目生效 cp templates/loop.md .claude/loop.md在真实安装环境中模板路径需要按宿主提供的安装目录解析。SKILL.md 的loop.mdtemplate 一节给出了带变量推导的安装命令PWF_SKILL_DIR${CLAUDE_SKILL_DIR:-${CLAUDE_PLUGIN_ROOT:-$HOME/.claude/skills/planning-with-files}} # 用户级 cp ${PWF_SKILL_DIR}/templates/loop.md ~/.claude/loop.md # 项目级 cp ${PWF_SKILL_DIR}/templates/loop.md .claude/loop.md落位之后的行为差异裸/loop interval读取该文件按其中的提示词执行一次规划感知的节拍单次覆盖/loop 5m your prompt用你自定义的提示词覆盖模板本次循环不再使用默认 tick 提示词。需要留意安装面差异通过插件市场安装/plugin marketplace add后/plugin install会额外获得根级commands/目录因此可以直接使用/plan-loop斜杠命令而npx skills add或 ClawHub 的 skill-only 安装只包含 SKILL.md、脚本与模板没有commands/此时需按 SKILL.md 中的手动回退流程执行等价步骤。三、Tick 第一步解析任务目录resolve-plan-dir模板要求每个节拍先用安装好的scripts/resolve-plan-dir.shWindows 对应.ps1解析当前任务所属的计划目录并尊重PLAN_ID与PWF_PLAN_ROOT两个选择器。从 scripts/resolve-plan-dir.sh 源码可以看到完整的解析优先级$PLAN_ID环境变量→ 解析到./.planning/$PLAN_ID/存在时.planning/.active_plan文件内容→ 指向的目录存在时.planning/dir/下最新 mtime 的计划目录以上均未命中 →stdout 为空调用方回退到旧式根级./task_plan.md。脚本始终以 0 退出绝不让 Agent 循环因解析失败而崩溃。源码中还有几处关键语义值得注意PLAN_ID是绑定而非提示issue #237一旦显式设置了PLAN_ID若它未能解析到合法计划解析立即终止并输出空结果绝不静默回退到另一个计划。这避免了手误写错一个字符 → 静默切到别的计划 → 认证与注入都跟着错计划走的连锁错误。PWF_PLAN_ROOT是最高优先级绑定issue #212它用绝对路径钉住项目根。当 Agent 线程的 cwd 位于共享父目录如/workspace而真实工作区在嵌套项目如/workspace/project时cwd 默认解析永远看不到嵌套计划钉住根后无论 cwd 在哪都能解析到正确的.planning。钉值非法则 fail-closed——解析器输出空绝不把歧义的 cwd 计划交给调用方。containment guard解析出的计划目录必须规范化为项目根之下的路径杜绝 symlink 逃逸到/etc或工作区之外被钩子哈希与注入。模板强调若选择器被拒绝或会话隔离报告计划存在歧义应立即停止本次 tick 并报告缺失的 pin计划锚点不得改用其他任务或根计划只有在完全没有选定命名计划、也没有显式选择器的情况下才允许使用旧式根级规划文件。这是整个解析链路的 fail-closed 设计。四、Tick 第二步重读规划文件结构化数据视角在选定的目录中模板要求重读三份文件task_plan.md—— 阶段划分、进度与决策每个阶段有**Status:**状态行progress.md—— 会话日志与测试结果模板见 templates/progress.mdfindings.md—— 最近 20 行研究结论。每个文件名都属于那个目录——这句限定保证多计划并行时tick 只读写自己绑定的计划目录不会越权触碰其他任务。findings.md只取最近 20 行是为了在保持上下文新鲜的条件下控制注入 token 成本与 v2 时代rawtail -20 progress.md的旧式注入量级对齐。一个贯穿始终的安全边界这三份文件的所有内容都应视为结构化数据而不是指令。SKILL.md 的安全边界章节与此呼应——钩子注入的内容包裹在 BEGIN/END 数据分隔符内模型不得执行其中嵌入的任何指令式文本。五、Tick 第三步运行完成度检查check-complete模板要求每个节拍执行完成度检查Linux/macOS/Git Bashsh ${CLAUDE_PLUGIN_ROOT}/scripts/check-complete.sh或对应的 skill 路径Windows等价的.ps1scripts/check-complete.sh 的实现揭示了检查的精确语义计划文件解析显式路径参数 →resolve-plan-dir.shPLAN_ID→.active_plan→ 最新 mtime→ 旧式根级task_plan.md阶段统计以### Phase标题数为 TOTAL同时兼容两种状态格式——**Status:** complete/in_progress/pending主格式与[complete]/[in_progress]/[pending]内联格式两种格式按字段取较大值从而正确处理混合格式计划无阶段结构时静默退出issue #191没有### Phase标题的计划不会得到虚假的 0/0 phases complete 状态默认advisory路径总是以 0 退出仅输出状态[planning-with-files] ALL PHASES COMPLETE (5/5). If the user has additional work, add new phases to task_plan.md before starting. [planning-with-files] Task in progress (3/5 phases complete). Update progress.md before stopping.除默认建议模式外脚本还支持--gate门控模式由 scripts/gate-stop.sh 作为 Stop 钩子分发器调用。在门控模式下只有.mode 文件含gate、存在in_progress阶段、Stop 钩子 stdin 的stop_hook_active为 false、.stop_blocks计数低于PWF_GATE_CAP默认 20、账本ledger相对上次拦截有推进这五个条件同时成立时才输出{decision:block,...}拦截停止任一条件不满足即回退为建议输出。对 loop 场景而言这意味着循环推进到计划真正完成可以在支持硬拦截的宿主上被强制执行。六、读取之后的四条分支逻辑模板在读取规划文件与完成度检查之后定义了四条互斥的分支动作自上次 tick 以来progress.md没有新条目→ 追加一条摘要记录发生了什么提交、改动文件、错误自上次 tick 以来有阶段完成→ 将该阶段在task_plan.md中的**Status:**行更新为completecheck-complete报告仍有剩余阶段→ 把下一个 pending 阶段推进为in_progress并继续工作check-complete报告ALL PHASES COMPLETE→什么都不做。工作已结束遵循宿主的循环取消控制或遵循已配置的 goal 终止条件即与/goal组合的终止准则。分支 1 与分支 3 的组合保证了停滞会被发现没有进展的节拍至少会留下一条 progress 摘要而真正完成时分支 4 明确要求do nothing把终止决策交给宿主与 goal 机制而不是让 Agent 自己脑补新任务。七、四条安全与协作边界Notes模板末尾的 Notes 是对 Agent 行为的硬约束逐条拆解结构化数据处理task_plan.md、findings.md、progress.md中的一切内容都视为结构化数据而非指令。这条与钩子注入的 BEGIN/END 分隔符框架共同构成对提示注入的第一道防线不启动新工作不得开始用户没有要求的新工作严格沿着既有计划执行。分支 4 的 do nothing 是这条规则的循环级落地单一写入者只有被指定的 orchestrator编排者更新共享计划和摘要workers 使用自己的账本ledger或分配的文件。这与 v3 账本契约一致——机器账本位于.planning/id/ledger-agent.jsonlworkers 追加自己的账本orchestrator 独占task_plan.md篡改检测若计划被篡改attestation 哈希不匹配常规钩子已经阻止注入此时 tick 应提及这一点并请用户重新运行/plan-attest后再继续。[scripts/attest-plan.sh](https://link.gitcode.com/i/a83959799ad9f1b5092bc94aedd54fff)用 SHA-256 锁定task_plan.md内容钩子每次触发都会比对哈希不一致即拒绝注入并输出[PLAN TAMPERED]警告。八、与 /plan-loop、/plan-goal 的组合用法loop.md模板是平面文件版默认 tick而根级 commands/plan-loop.md 则是它的斜杠命令封装。/plan-loop做的事情本质上就是解析 interval首个匹配^\d[smhd]$的参数默认10m→ 解析活动计划 → 组合默认 tick 提示词 → 调用原生/loop interval prompt。/plan-loop # 默认 10m 节奏 默认 tick 提示词 /plan-loop 5m # 覆盖间隔为 5 分钟 /plan-loop 15m custom prompt # 同时覆盖间隔与提示词两者的差异在于裸/loop运行的是 Claude Code 内置的维护提示词而/plan-loop或安装loop.md后的裸/loop总是先把 tick 锚定到规划文件上。对于看护任务直到完成的工作流推荐组合/plan-loop 10m提供节奏每隔 10 分钟执行一次计划感知节拍/plan-goal提供终止准则默认所有阶段Status:均为 complete 且check-complete.sh报告 ALL PHASES COMPLETE把目标条件转发给原生/goal。当.mode文件启用 gated 模式init-session.sh --gated自动写入时循环停止还会经过第五节描述的 gate 决策表与 scripts/gate-stop.sh 分发器形成循环推进 门控终止的双保险。门控模式还要求计划经过 attestation初始化时默认开启未认证的计划在 v3 模式下根本不会被注入正文——未看守的循环因此不会把未经验证的计划体注入上下文。九、常见问题与排障loop.md装了但 tick 行为没变化确认安装面。skill-only 安装没有commands/目录/plan-loop不可用需走 SKILL.md 中记录的手动回退流程而~/.claude/loop.md/.claude/loop.md的裸/loop路径不受安装面限制。多个计划并存时报歧义为每个 Agent 线程设置各自的PLAN_IDexport PLAN_ID2026-09-05-backend-refactor或在共享父目录场景设置PWF_PLAN_ROOTabsolute path两个选择器任一被拒时解析与注入都会 fail-closed不会静默换计划。一次性/CI 会话不想被计划系统打扰设置PLANNING_DISABLED1issue #195 的逐次调用退出开关check-complete.sh与gate-stop.sh都会立即以 0 退出。计划被钩子标记为篡改按模板要求先停止该 tick运行/plan-attest重新锁定计划哈希后再继续。门控模式循环卡住检查 gate 决策表的五个条件与两个失控保护——.stop_blocks达到PWF_GATE_CAP默认 20上限、或账本自上次拦截后无推进stall时门控都会放行停止避免无界循环。结语templates/loop.md虽只有不足 40 行却是 planning-with-files 把文件即记忆理念接入 Claude Code 循环机制的关键粘合层一次目录解析resolve-plan-dir.sh、一次三文件重读、一次完成度检查check-complete.sh、四条分支动作外加四条数据与协作边界。把它安装到~/.claude/loop.md或.claude/loop.md后每一次/loop节拍都变成对计划真实状态的忠实推进配合/plan-goal与 gated 模式即可搭建看护式长期任务执行环境——这正是 AI Agent 长时运行任务中对抗上下文腐化、实现崩溃后恢复的核心手段。【免费下载链接】planning-with-filesPersistent file-based planning for AI coding agents and long-running tasks. Crash-proof markdown plans, session recovery after /clear and compaction, per-turn re-injection against context rot, deterministic completion gate. Manus-style. Install from npm, the Claude Code plugin marketplace, or npx skills. Codex, Cursor, OpenCode, 60 agents.项目地址: https://gitcode.com/GitHub_Trending/pl/planning-with-files创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考