planning-with-files

OthmanAdiMIT活跃维护 有专家点评

给 AI 编码 Agent 用的持久化 Markdown 计划工具,能在 /clear 或上下文压缩后恢复会话,并逐轮重新注入计划以防上下文腐化。

Persistent 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.

v3.28.1发布于 2026-11-07 11:24 UTC27,991star +50 / 7 天2,312fork同步于 2026-11-10 23:24 UTC

专家点评

上手难度:进阶更新于 2026-11-11

把 agent 的计划从上下文窗口挪到磁盘上,让 /clear、崩溃、压缩之后还能接着跑

适用场景

  • 长跑任务(重构、批量迁移、跨多小时的调试):计划写进 task_plan.md 而不是留在上下文里,压缩或断线后靠读文件恢复,不用从头复述需求
  • 需要审计轨迹的自动化流水线:progress.md 和 findings.md 是落盘的中间产物,事后能查 agent 当时为什么这么走,比翻会话日志可靠
  • 多轮迭代的编码任务:每轮重新注入计划,抵消长会话里早期约束被稀释的问题;纯靠 system prompt 提醒做不到这一点
  • 在 Claude Code / Codex / Cursor 之间切换同一套工作流:走 Agent Skills 标准,一份技能包多端复用,不用为每个代理重写规划逻辑

踩坑

  • 用 npx skills add 或手动复制安装时钩子可能静默不注册,计划文件写了但不会每轮注入,表现为「装了但没效果」;装完必须用 /plan-doctor 验证,或直接走插件市场路线
  • npm install 只带 SKILL.md、scripts 和 templates,不注册钩子,把它当普通 npm 包用会得到半成品
  • issue 里反复出现多任务并行和复杂多步任务该怎么组织的问题(反应数最高的几条里有两条是这类),说明单计划文件的模型在任务数上去后需要自己设计目录或命名约定,README 没给现成答案
  • 克隆安装时父目录被塞进 skills 目录的问题被反复报,手动装的时候要检查落点

同类对比

如果只是想要跨会话记忆而不是计划门禁,直接用各代理自带的 memory / rules 机制更轻;如果任务短到一次会话能跑完,这套文件协议是纯开销。

怎么上手

由 README 提炼,执行前请确认
/plugin marketplace add OthmanAdi/planning-with-files
/plugin install planning-with-files@planning-with-files
npx skills add OthmanAdi/planning-with-files --skill planning-with-files -g
硬件要求按 README 说明

README 未说明

支持 Apple Silicon
下载:源码 zip·GitHub Releases(安装包)本站不镜像安装包

项目说明

由 README 自动翻译提炼

给 AI 编码代理做持久化文件规划,让计划在 /clear、崩溃和上下文压缩后依然存活

给 AI 编码 Agent 用的持久化 Markdown 计划工具,能在 /clear 或上下文压缩后恢复会话,并逐轮重新注入计划以防上下文腐化。

核心能力

  • 把 task_plan.md、findings.md、progress.md 三个计划文件落盘保存
  • 用生命周期钩子每轮重新注入计划,对抗上下文腐化
  • 会话恢复只读项目文件,/clear 或崩溃后可续跑
  • 提供确定性完成门禁,判断任务是否真正做完
  • 通过 Agent Skills 标准覆盖 60+ 代理,含 Claude Code、Codex、Cursor 原生插件

容易踩的坑

用 npx skills add 或手动复制安装时可能静默不注册钩子,需要项目信任或改用插件路线并用 /plan-doctor 验证;npm install 只带 SKILL.md、scripts 和 templates,不会自动注册钩子;Hermes 需额外从 .hermes/skills 安装技能包,OpenCode 和 DeepSeek Harness 依赖 npx skills add -g 落到 ~/.agents/skills/

内容由模型根据 README 生成,可能不完整或不准确,以官方文档为准。看原文 README

最近发版

5 个版本v3.28.1
  1. v3.28.1v3.28.1 - Attestation refusals and selector safety最新正式版2026-11-07 · 2026-11-07 11:24 UTC

    attest-plan now reports one refusal that names its cause on both the shell and PowerShell routes, and selectors echoed in a refusal cannot forge output.

    Security

    • Control characters in an echoed PLAN_ID, PWF_PLAN_ROOT or target print as ? on both routes, so a newline or escape sequence cannot print a fake status line (PR #362, #358).

    Fixed

    • attest-plan reports the multiple-plans refusal once, exits 1 and attests nothing, without the extra No task_plan.md found line (PR #362, #358).
    • attest-plan.ps1 gains -Target root|<plan-id> and one-line refusals that name a rejected PLAN_ID, PWF_PLAN_ROOT or -Target. A nonexistent, relative or UNC pin reaches that refusal instead of throwing (PR #362, #358).
    • attest-plan.sh no longer stores a hash prefixed with a backslash when PWF_PLAN_ROOT is a native Windows path, which made the hook report the plan as tampered (PR #362).
    • init-session refuses unknown dash-prefixed arguments on both routes and creates nothing. init-session.ps1 gains -Help and -h. -? under a native Windows PowerShell 5.1 -File call still prints no help, which #357 tracks (PR #360).
    • The localized /plan commands restore the selected plan through resolve-plan-dir, stop on a rejected pin or ambiguity, and initialize only through init-session (PR #364, #359).
    • The shipped-file validators read the tracked inventory, so an old copy under the gitignored .planning/ no longer fails them (PR #353, #352).

    Changed

    • set-active-plan.sh --list --json starts far fewer processes per plan. The output is unchanged byte for byte (PR #363, #356).

    Thanks

    • BingEdward (@7487), for the attestation refusal reporting and -Target on PowerShell (PR #362).
    • WU Leizhi (@MbappeWU), for the shipped-file inventory (PR #353) and the pinned-root and slug-directory attestation tests (PR #361).
    • @ShahadatTest, for init-session help and unknown-switch handling (PR #360).
    • Ankit Kumar Jha (@ankitjha1405), for aligning the localized /plan commands (PR #364).
    • Parman Mohammadalizadeh (@MannXo), for the JSON listing process reduction (PR #363).
  2. v3.28.0v3.28.0 - Archive and restore finished plans2026-11-03 · 2026-11-03 02:02 UTC
    查看更新说明

    Added

    • Opt-in archive and restore for named plans. set-active-plan.sh --archive <id> (PowerShell: -Archive <id>) previews the move to .planning/.archive/<id>/, --yes (-Yes) applies it, and --restore <id> moves a plan back the same way. The directory moves with its sidecars in a single rename. Nothing is deleted and nothing is archived automatically. The shared .active_plan pointer is cleared only when it names the archived plan, and an ID must match the directory name exactly, including case. --list --archived lists archived plans, and the JSON inventory reports archived_count (#355).
    • When a project holds several named plans and no PLAN_ID is set, hooks inject nothing. The multiple-plans notice now names the archive command. Once one named plan remains, hooks select it again without PLAN_ID.

    Fixed

    • PowerShell inventory modified_at values no longer shift by the local UTC offset.
    • The shell inventory reports a plan file held open by another process as unreadable instead of emitting invalid JSON.
    • PowerShell 7 lists and resolves plans whose paths reach 260 characters.
    • set-active-plan.ps1 -List -Json works inside a PowerShell session and through -Command, -f or a positional script path. A direct -File run writes one UTF-8 line; the other call forms return the same JSON with non-ASCII characters escaped, within the same 16 KiB limit.
    • The shell inventory keeps non-ASCII project paths correct under LC_ALL=C.
    • PowerShell listing and plan resolution include directories with the Windows Hidden attribute, matching the shell route.

    The npm package and the ClawHub listing are updated separately.

  3. v3.27.0v3.27.0 - Agent-readable plan inventory2026-10-30 · 2026-10-30 20:57 UTC
    查看更新说明

    Planning agents can request a bounded JSON inventory from the existing listing helpers with --list --json or PowerShell -List -Json. It includes root and named planning-file paths, availability, phase metadata, shared defaults and explicit selection uncertainty. Inventory remains read-only and runs only when requested.

    Claude plugin commands now follow the selected-plan and initializer contracts. The updates preserve valid pinned legacy roots, initialize from the validated project root, keep status reads compact and delegate attestation to the shipped helpers.

    The schema/reference is included across supported installs. Human listing, ordinary activation, hooks and model settings keep their existing behavior. This release adds no dependency or automatic cleanup.

    The README now opens with contributor portraits and a centered, collapsed community showcase. Five additions link to primary sources for extensions, ports, SDK adaptations and older bundled snapshots.

    The canonical [email protected] npm package is published. Its registry archive matches the audited Git-source package byte for byte.

    Thanks

    • Dylan Duan (@Kiddo4993), for the command-prompt updates and selection-contract tests in PR #351.
  4. v3.26.0v3.26.0 - Claude subagent isolation and hook fixes2026-10-28 · 2026-10-28 17:42 UTC
    查看更新说明

    Added

    Claude Code can suppress plan context and progress reminders for subagent tool calls with PWF_SKIP_SUBAGENTS=1. The default is unchanged. The opt-in also fails closed when the hook cannot classify its input (#348).

    Fixed

    • Preserve existing Codex hook registrations during setup and avoid nested hook directories (PR #345, #343).
    • Keep Copilot PreToolUse output neutral while using supported context events (PR #346, #344).
    • Honor PLANNING_DISABLED=1 across Gemini lifecycle hooks, including SessionEnd (PR #347, #329).

    Thanks

    • Parman Mohammadalizadeh (@MannXo), for the Codex setup and hook-merge guidance.
    • WU Leizhi (@MbappeWU), for the Copilot contract correction and Gemini opt-out guards.
    • @mfehlhaber, for reporting the subagent context issue and requesting an opt-in setting.
  5. v3.25.2v3.25.2 - trackable plan creation and harness fixes2026-10-24 · 2026-10-24 17:24 UTC
    查看更新说明

    Plan creation now requires the bundled initializer and explicit native format validation. check-complete.sh --validate and PowerShell -Validate reject plans with no recognized phases or missing/ambiguous native phase statuses. plan-doctor.sh reports these problems. Validation reads the plan without rewriting it or changing attestation; ordinary advisory and gated stop behavior is preserved.

    The two saved blind cases that previously produced zero recognized phases were rerun with the updated skill. Both invoked the initializer, passed functional checks, and finished with five recognized, completed phases. Only these two behavioral cases were rerun.

    Copilot startup and post-tool context now uses the current harness's top-level additionalContext output. The guide explains the legacy VS Code Local migration boundary. Cursor bash hooks consistently select named plans and refuse ambiguous or invalid selection without falling back to an unrelated root plan. Cursor installation documentation preserves existing registrations and avoids nested adapter directories (PRs #340, #341, #342).

    The optional skill-lens evaluation now uses 0.25.0 and includes a two-session resume case. A maintainer follow-up prevents phase assertions from skipping to a subsection's status. Reported model measurements remain attributed to the contributor's original runs (PR #338).

    Thanks

    • Emad Mokhtar (@EmadMokhtar), for the updated optional evaluation and resume case (PR #338).
    • Thanut Jongteerathanachote (@winxtxrgit), for the Copilot context schema fix and regression tests (PR #340).
    • Parman Mohammadalizadeh (@MannXo), for the Cursor installation and hook-merge guide (PR #341).
    • WU Leizhi (@MbappeWU), for Cursor bash plan selection and regression tests (PR #342).

用户点评

登录用户的真实使用记录,可按版本和硬件筛选
共 0 条

    还没有人点评。第一个说出真实体验的人最有价值。

    README 原文

    未翻译

    Sponsor

    Your agent keeps the plan. Scrape.ly brings the web data.

    Connect the Scrape.ly MCP server to Claude Code, Cursor or any MCP client: your agent searches the Store, runs a scraper and reads structured results, without leaving the task.


    OSS code review support Provided through CodeRabbit’s open-source program.


    Contributors

    Code, documentation, and issue contributors. Select a portrait to open a GitHub profile or archived credit. Full credits.

    Forks & Extensions

    ForkAuthorWhat They Built
    devis@st01csInterview-first workflow, /devis:intv and /devis:impl commands, guaranteed activation
    multi-manus-planning@kmichelsMulti-project support, SessionStart git sync
    plan-cascade@TaoidleMulti-level task orchestration, parallel execution, multi-agent collaboration
    agentfund-skill@RioTheGreat-aiCrowdfunding for AI agents with milestone-based escrow on Base
    openclaw-github-repo-commander@wd041216-bit7-stage GitHub repo audit, optimization, and cleanup workflow for OpenClaw
    planning-with-sysspec@tianshanSpec-first extension adding structured module specifications, spec deltas and validation matrices (source)

    Used in the Wild

    ProjectWhat It Is
    lincolnwan/Planning-with-files-copilot-agentEntire Copilot agent repo built around the planning-with-files skill
    cooragent/ClarityFinanceAI finance agent framework, Planning-with-Files approach directly credited
    oeftimie/vv-claude-harnessClaude Code harness built on Manus-style persistent markdown planning
    jessepwj/CCteam-creatorMulti-agent team orchestration skill using file-based planning
    smallnest/langgraphgo: Manus AgentGo implementation of the planning-with-files pattern with persistent task plans, research notes and output files (source)
    a5c-ai/babysitterSDK planning, execution, session-recovery and verification processes adapted from planning-with-files (source)

    Skill Registries & Hubs

    RegistryWhat It Is
    buzhangsan/skill-managerBilingual (EN/中文) Claude Code skill hub; planning-with-files installable one-click

    Bundled snapshots & adaptations

    ProjectVerified relationship
    benchflow-ai/skillsbenchBundles planning-with-files v2.1.2 in its organize-messy-files benchmark task (snapshot)
    sickn33/agentic-awesome-skillsCross-agent skill collection shipping an adapted planning-with-files copy, originally imported at v2.1.2 (import)

    Built something? Open an issue to get listed!

    Full list of everyone who made this project better: CONTRIBUTORS.md.

    Quick Install

    npx skills add OthmanAdi/planning-with-files --skill planning-with-files -g
    

    All install methods: docs/installation.md.


    Before and after /clear

    Every coding agent loses its working memory when the context window resets. The plan does not have to die with it.

    Built for long-running agent tasks

    [!IMPORTANT] Most harnesses ship a to-do list that lives inside the context window. planning-with-files ships a plan that lives on disk, is re-injected every turn, is hash-attested, and can hold the agent's stop until the plan reports complete.

    That is the difference between an agent that forgets after /clear, compaction or a crash and one that resumes at the current phase. In the project's own measurements the plan on disk turned a 13.3-turn re-orientation into 5.0 turns, and the skill won 3 of 3 blind A/B comparisons (numbers and limits). Every mechanism below is a file on disk plus a hook, so it works the same on hour ten as on turn one.

    The 3-file pattern

    Context Window = RAM (volatile, limited)
    Filesystem = Disk (persistent, unlimited)
    
    → Anything important gets written to disk.
    

    The skill keeps your plan, findings, and progress in your project:

    your-project/
    ├── task_plan.md   ← phases + checkboxes; the resume point after /clear
    ├── findings.md    ← research notes and decisions, appended as you go
    └── progress.md    ← session log and test results
    

    Parallel tasks get isolated directories instead: .planning/YYYY-MM-DD-slug/ with the same three files, selected via .active_plan (v2.36.0+). Plain markdown, gitignored by default, no runtime state anywhere else.

    The pattern is the one Manus described before Meta acquired it for $2 billion on December 29, 2025, eight months and $100M+ of revenue after launch:

    "Markdown is my 'working memory' on disk. Since I process information iteratively and my active context has limits, Markdown files serve as scratch pads for notes, checkpoints for progress, building blocks for final deliverables." — Manus AI

    First-class hosts: native plugins

    [!TIP] Native integrations load planning context, provide progress reminders and support a completion gate. Commands and model-callable tools depend on the host; Qoder CLI loads the skill and lifecycle hooks without the Claude-specific command prompts. The platform setup guides describe each integration and the standard Agent Skills routes.

    🇸🇦 العربية / Arabic

    npx skills add OthmanAdi/planning-with-files --skill planning-with-files-ar -g
    

    🇩🇪 Deutsch / German

    npx skills add OthmanAdi/planning-with-files --skill planning-with-files-de -g
    

    🇪🇸 Español / Spanish

    npx skills add OthmanAdi/planning-with-files --skill planning-with-files-es -g
    

    🇨🇳 中文版 / Chinese (Simplified)

    npx skills add OthmanAdi/planning-with-files --skill planning-with-files-zh -g
    

    🇹🇼 正體中文版 / Chinese (Traditional)

    npx skills add OthmanAdi/planning-with-files --skill planning-with-files-zht -g
    

    These are real translations, not an English body with a translated description: the SKILL.md prose, the templates, and the user-facing output of check-complete, init-session and session-catchup are all localized. The status tokens stay literal English (**Status:** complete) on purpose, because check-complete.sh matches them with grep -F, so translating them would disable the completion gate.

    Since v3.10.0 the variants also ship the full script surface: attestation, the Stop gate, the ledger, phase status and plan-doctor used to be canonical-only, which quietly made every non-English install a subset install. Full details, including what changed on the plugin route in v3.11.0, are in docs/languages.md.

    They live under skills/i18n/, one directory deeper than the canonical skill. The install commands above are unchanged, because npx skills add resolves --skill by skill name across the whole repository. The Claude Code plugin scan reads skills/*/SKILL.md without recursing, so the plugin route registers the canonical skill alone and no longer carries five extra descriptions in every session's system prompt. On that route the /plan-ar, /plan-de, /plan-es, /plan-zh and /plan-zht commands read the translated skill from disk instead of invoking it by name.

    IDEInstallation GuideIntegration
    Claude CodeInstallationPlugin + SKILL.md + Hooks
    CursorCursor SetupSkills + hooks.json
    GitHub CopilotCopilot SetupHooks (incl. errorOccurred)
    Mastra CodeMastra SetupSkills + Hooks
    Gemini CLIGemini SetupSkills + Hooks
    KiroKiro SetupAgent Skills
    CodexCodex SetupSkills + Hooks
    Qoder CLIInstallationSkill + seven lifecycle hooks; Bash and Python 3.10+ required
    Hermes AgentHermes SetupSkill + native plugin (tools, /pwf, pre_llm_call, post_tool_call, pre_verify gate), CLI and Desktop
    CodeBuddyCodeBuddy SetupSkills + Hooks
    FactoryAI DroidFactory SetupSkills + Hooks
    OpenCodeOpenCode SetupNative plugin opencode-planning-with-files (chat.message injection, write reminders, compaction flush, session.idle gate, pwf_* tools, /pwf commands) + skill
    DeepSeek HarnessDeepSeek Harness SetupNative plugin dsh-planning-with-files (agent/pre-step injection, write reminders, post-compaction restore, agent/turn-stopping gate, pwf_* tools, /pwf commands) + skill
    IDEInstallation GuideSkill Discovery Path
    ContinueContinue Setup.continue/skills/ + .prompt files
    Pi AgentPi Agent Setup.pi/skills/ (npm package)
    OpenClawOpenClaw Setup.openclaw/skills/ (docs)
    Autohand CodeAutohand Code Setup~/.autohand/skills/ or .autohand/skills/
    AntigravityAntigravity Setup.agent/skills/ (docs)
    KilocodeKilocode Setup.kilocode/skills/ (docs)
    AdaL CLI (Sylph AI)AdaL Setup.adal/skills/ (docs)

    Note: If your IDE uses the legacy Rules system instead of Skills, see the legacy-rules-support branch.

    RuntimeStatusGuideNotes
    BoxLite✅ DocumentedBoxLite SetupRun Claude Code + planning-with-files inside hardware-isolated micro-VMs

    BoxLite is a sandbox runtime, not an IDE. Skills load via ClaudeBox, BoxLite's official Claude Code integration layer.

    How do I stop my coding agent from losing its plan after /clear or a crash?

    The plan lives on disk in task_plan.md, findings.md, and progress.md, not only in the context window. At the start of each turn the UserPromptSubmit hook re-injects selected active-plan context, and after a /clear or a new session the skill re-reads project files from disk. This automatic path does not inspect agent transcript stores.

    What is the difference between planning-with-files and an agent memory tool?

    Agent memory tools (vector stores, knowledge graphs) help an agent recall facts from past sessions. planning-with-files manages active execution state: the phases, status, dependencies, and completion check for the task the agent is working on right now. The problem it solves is planning continuity, not retrieval, and the two are complementary.

    How does this prevent context rot?

    Context rot is the drift that sets in as the context window fills and earlier instructions get crowded out. Because the plan is re-injected at the start of each turn from disk, the goals and phase status stay in the model's attention window as the conversation grows. This is an implementation of what Anthropic calls structured note-taking: write durable state to files outside the window, then read it back in when needed.

    Which coding agents does this work with?

    Claude Code, OpenAI Codex CLI, Cursor, GitHub Copilot, Kiro, OpenCode, Continue, Pi, Hermes Agent, CodeBuddy, Factory, Mastra, and 70+ others via the SKILL.md open standard (the npx skills installer alone targets 71 agents). Since v3.7.0 the repo also ships the cross-tool .agents/skills/planning-with-files/ layout in-tree, so tools that read the Agent Skills standard path natively (Zed, Amp, Warp, Devin, Antigravity, Gemini CLI, Cursor) discover the current skill from a plain git clone with no per-tool setup. Installation is one command; see Quick Install above.

    How does this work with Claude Code's plan mode?

    They are complementary stages, not alternatives. Plan mode is where you design and approve the approach before execution. planning-with-files persists the live execution state (phase status, findings, errors, progress) on disk while the work runs and re-injects it every turn. The handoff is one step: after accepting a plan-mode plan, tell the agent to write it into task_plan.md as phases (or invoke /plan and let the skill create the files from it), then execute in normal mode. From that point the hooks keep the phases in the attention window, and the files survive /clear, compaction, and session death.

    What happens to the plan files after a task is complete?

    They are working memory, not a tracked deliverable. task_plan.md, findings.md, progress.md, and the .planning/ directory are gitignored by default and are not archived automatically: the next task overwrites the root plan, and a slug directory stays in .planning/. Anything worth keeping should be promoted into code, a commit, or a doc. To set a finished named plan aside, set-active-plan.sh --archive <slug> previews the move to .planning/.archive/<slug>/ and --yes applies it; --restore <slug> previews the move back and --yes applies it the same way. With one named plan left, hooks select it automatically again. See After Completion: What Happens to the Plan Files for the full lifecycle and how to retain a completed plan.

    How fast are the hooks?

    One hook fire measures 289ms wall-clock since the v3.6.0 optimization, down from 2.0 to 2.4 seconds before it, and the injected plan block is KV-cache stable by construction. The plan stays in the attention window every turn, and /clear stops being fatal.

    VersionHighlights
    v3.28.1attest-plan reports one refusal that names its cause on both routes and adds -Target on PowerShell; echoed selectors cannot forge output; init-session refuses mistyped switches; localized /plan commands follow plan selection; faster JSON listing on Git Bash (PR #353, #360, #362, #363, #364)
    v3.28.0Adds opt-in archive and restore for finished named plans (--archive / --restore, preview first, nothing deleted), so hooks select the remaining plan again; the multiple-plans notice names the command; fixes inventory timestamps, locked files, long paths, hidden folders and PowerShell output on Windows (#355).
    v3.27.0Adds optional agent-readable plan inventory (--list --json / -List -Json) with paths, phase metadata, selection uncertainty and bounded paging; aligns Claude plugin commands with selected-plan and initializer contracts (#349, #350, PR #351).
    v3.26.0Adds opt-in Claude Code subagent tool-hook isolation (PWF_SKIP_SUBAGENTS=1); fixes Codex setup, Copilot PreToolUse output and Gemini lifecycle opt-out (PRs #345, #346, #347; #348).
    v3.25.2Plan creation through the initializer and explicit format validation; Copilot context schema and Cursor selection/install fixes; optional skill-lens resume evaluation (PRs #338, #340, #341, #342).
    v3.25.1OpenCode reports current attestation validity; DSH preserves the PLAN_ID selection notice. Adds an optional skill-lens evaluation with documented limits and contributor-reported measurements (PRs #331, #333, #334).
    v3.25.0Hermes adapter 0.3.0 binds named plans per conversation, with explicit selection, successful init/file-operation binding, persistent session records and concurrent-session isolation. Existing ambiguity, admission and attestation checks remain active (#328).
    v3.24.3Pi verifies the exact plan snapshot used for context and phase counts; selected-attestation read failures stay blocking. The guide clarifies explicit re-attestation after progress edits (#326).
    v3.24.2Pi parity mode suppresses unchanged pre-tool plan views after confirmed context insertion, with visible-edit refresh, session isolation and recovery invalidation. Approval and attestation remain checked; PWF_PRETOOL=always restores prior Pi per-leaf reminders (#323, PR #324).
    v3.24.1Validate hidden adapter frontmatter, repair KiloCode resource links, and document the prerequisites and commands for all six CI suites (#314, #315, #316).
    v3.24.0Native Qoder CLI plugin with isolated hook execution and the CLI completion gate (PR #313). Claude Code refreshes PreToolUse context only when the selected view changes, with session isolation, recovery resets and an always-inject opt-out (#312).
    v3.23.0Public file-only recovery fixture with separate trial arms (#303). DSH V4 message-source compatibility (#306), resolver-based manual workflows (#300), and accurate Codex opt-out documentation (#302).
    v3.22.0OpenCode 2 support with native plugin registration, context injection, planning tools and the completion gate. OpenCode 1 remains supported; moved v2 sessions follow their current project (#298).
    v3.21.0Explicit root and named attestation targets preserve active selection and project containment (#296). PowerShell initialization retries the concurrent pointer pre-check race with bounded, validated attempts (#294).
    v3.20.8Claude Code sessions without a plan no longer end every reply with a Stop notice (#288). Cursor hooks move to the current schema with sessionStart injection (#262), Gemini CLI hooks inject through BeforeAgent and AfterTool hookSpecificOutput (#292), and both adapters' hook scripts are now executable on macOS and Linux; the Cursor stop hook stays silent once every phase is complete. PowerShell pointer replacement recovers or removes only its own ReplaceFile backup (#254).
    v3.20.7Fixes npm capability disclosure metadata and three unavailable contributor portrait endpoints. The npm package continues to ship the canonical skill and full repository README.
    v3.20.6Phase-status writers claim one lock owner even with Windows-native mkdir (#282). OpenCode, DSH and Hermes safely replace linked active pointers (#283, #284). PowerShell named plans reject read-only pointers before creation (#285), work under bracketed paths (#286), and retry transient concurrent pointer writes and inspection races (#287). The remaining ReplaceFile artifact case stays open in #254.
    v3.20.5OpenCode replay tolerates malformed parts (#273). Initialization reports attestation failures accurately (#277), analytics plans include Next Step (#279), and PowerShell denied writes fail without activating an incomplete named plan (#280).
    v3.20.4PowerShell route on OneDrive: an .active_plan pointer carrying the OneDrive Files On-Demand reparse attribute no longer counts as unsafe, so the Cursor hooks, the resolver and set-active-plan.ps1 work in projects under OneDrive (#275). The session-catchup copy guard checks tracked copies only (#274).
    v3.20.3A symlinked or junctioned directory under .planning/ is never a plan on any route: the shell counters skip it (PR #271 by @ShaunLinTW, #270), and the selection paths of the shell family plus the Codex, OpenCode and DSH counters refuse it too, so one real plan next to a linked one no longer becomes an mtime guess.
    v3.20.2Hermes plugin: Hermes 0.21.3 re-homes TERMINAL_CWD to the home directory on the first CLI turn, so the plan in the launch directory was skipped silently. The first turn now says why nothing was injected and names the PWF_PLAN_ROOT pin, /pwf-status and /pwf print the same diagnostic, and the slash commands honor the pin (#272, reported by @ericshunhinglee-cloud).
    v3.20.1Fixes four maintainer-filed issues from the v3.19.0 and v3.20.0 cycles: newline-safe shell slugs (#257, PR #266 by @TayfurYldz), attestation bound to the current project when PWF_PLAN_ROOT is inherited (#261, PR #265 by @TayfurYldz), malformed OpenCode part rows skipped by session catchup (#258, PR #263 by @ShaunLinTW), and the several-plans rule in the Hermes plugin (#264, PR #267 by @kuei51307-hub).
    v3.20.0DeepSeek Harness becomes a first-class host (closes #252, reported by @loarland): the native Cordis plugin dsh-planning-with-files injects the plan on every prompt and after compaction, reminds after writes, holds the turn boundary in gated mode, and registers /pwf, /pwf-status and the pwf_* tools; dsh plugin --profile web add dsh-planning-with-files. Cursor's native PowerShell hooks resolve named plans (PR #251 by @kuei51307-hub, item 9 of #250); the PowerShell resolver and attester run on Windows PowerShell 5.1 with a pin and in bracketed project paths; the OpenCode and DSH plugins require PLAN_ID for several named plans (the #240 rule); the README is shorter (one 3-file pattern block, a first-class hosts table, one commands collapsible).
    v3.19.0Adds PowerShell named-plan slug mode (#247), anchors session catchup only on exact planning filenames across every shipped copy (#248), and replaces active-plan pointers through the selectors with planning-root containment in both initializers (#249).
    v3.18.3Silences completed-plan notices in shared Stop gates and Codex while preserving explicit reports and gate safeguards.
    v3.18.2Isolates Python in Codex, Gemini, and Copilot shell adapters and makes IDE sync verification fail on missing canonical sources (#244, #245).
    v3.18.1Fixes active-plan display and listing for UTF-8 BOM-prefixed pointers from Windows editors and PowerShell workflows across the canonical shell helpers (#243).
    v3.18.0Lists saved plans and phase counts with --list or PowerShell -List (#242). Supports the shipped translated templates, checks project containment, and delivers the canonical helpers across IDE bundles.
    v3.17.2Fixes #241: the native Codex manifest disables legacy command migration, removing 13 redundant source-command-* skills from plugin installs. The canonical planning skill, Codex hooks, and Claude commands remain available.
    v3.17.1Fixes #240: two named plans in the same project now require PLAN_ID, even without .planning/sessions/. A shared pointer or newest-plan guess cannot redirect a Codex session across compaction. Ambiguous hooks inject no plan and Stop does not gate against a guessed plan.
    v3.17.0Every Claude Code hook fire forked about 130 processes, and under Git Bash on Windows that took 7 to 12 seconds against the 10 second hook timeout. Claude Code discarded the plan context ("UserPromptSubmit hook timed out after 10s") and every Bash, Read, Grep and Edit call waited 5 more seconds in PreToolUse before it ran. Linux and macOS never showed it because a fork costs milliseconds there. The events now run in one Python process, scripts/inject-plan.py, a byte-identical twin of the shell chain proven by a parity suite on all three CI legs, with the shell chain kept as the reference and as the fallback for hosts without Python: 0.3 s per prompt and per tool call on the reporting machine. Hook interpreters now start in isolated mode, so a repository's own secrets.py or hashlib.py is never imported by a hook. PWF_FAST_PATH=0 forces the shell chain.
    v3.16.1Attached Codex, Hermes and Pi sessions require an explicit plan when several tasks share an armed project. Standalone hooks deliver model context through the proper event fields, preserve native session identity and throttle progress reminders. Packages include the loop template and Stop dependencies; recovery and security guidance state the selected-plan and trust boundaries.
    v3.16.0The PostToolUse progress reminder was shown to you and never to Claude (closes #239, reported by @sortakool). It was emitted as systemMessage, which Claude Code delivers to the user, so a sentence addressed to the model reached the person instead, after every Write, Edit and Bash call for a whole session. Both the plugin dispatcher and the Codex adapter now emit hookSpecificOutput.additionalContext, the shape the session-start path in the same file already used. The reminder is also throttled to once per turn instead of once per tool call, and Bash is off the PostToolUse matchers so ls and git status stop tripping a "record what you changed" nudge. PreToolUse keeps Bash. Fixing this surfaced one more copy of the #237 fallback in the plugin dispatcher, now closed.
    v3.15.0A mistyped PLAN_ID used to attest and inject a different plan, and a slug plan could switch off the project's own policy (closes #237 and #238, both reported by @sortakool). An explicit PLAN_ID is now a binding in every resolver, shell, PowerShell, Hermes, OpenCode and Pi: it resolves or it stops, and every consumer that reads or writes the selected plan says which selector refused instead of quietly using the root plan. A project's root .mode is now a floor rather than a default that slug scope replaces, so creating a plan can no longer drop a committed attestation requirement or completion gate; a slug may raise strictness, never lower it. Also fixes plan-doctor.sh reporting PASS injection: emits plan context on a state where nothing was injected at all (closes #236): classification branches on the ===BEGIN-PWF-DATA framing rather than substring-matching control strings against the plan body, so a plan quoting one of them no longer trips a false tamper warning and a reworded banner degrades to a warning instead of a silent PASS. 30 new tests, each with its own control arm.
    v3.14.0OpenCode becomes a first-class host through its own plugin system (closes #235, reported by @luyanfeng). New npm plugin opencode-planning-with-files: chat.message injects the framed plan on every turn, tool.execute.after reminds after writes, experimental.session.compacting keeps the plan pointer and attestation in the summary, and session.idle runs the completion gate in gated mode by re-prompting the session (Tier 2). Tools pwf_init, pwf_status, pwf_check; commands /pwf, /pwf-status. Same resolver, ambiguity rule, gate table and frame format as the shell route, 22 Vitest tests, verified live in OpenCode 1.18.21. docs/opencode.md now names the real install path (npx skills add -g lands in ~/.agents/skills/, which OpenCode reads) and the tier tables stop crediting OpenCode with hooks it never ran.
    v3.13.0Hermes Agent becomes a first-class host, CLI and Desktop. The native plugin now resolves .planning/<slug>/ plans (the old adapter only saw a root task_plan.md), honours PLAN_ID, PWF_PLAN_ROOT and PLANNING_DISABLED, registers /pwf, /pwf-status and /plan-status (the shipped Markdown command files were never loaded by Hermes), bundles the skill, creates gated and autonomous plans with attestation from /pwf --gated <name>, and answers Hermes' pre_verify hook with the completion gate. Verified in a live Hermes 0.19.1 plugin manager; the Hermes skills-guard scanner rates the bundle SAFE. Native Windows path fix (%LOCALAPPDATA%\hermes). README reorganized: install and platforms first, proof and reference at the bottom, nothing removed.
    v3.12.1Attestation now stays in slug mode when the helper runs inside .planning/<slug>/ (fixes #234, reported by @sortakool). The shell and PowerShell helpers update the slug's .attestation instead of creating a legacy .plan-attestation, and invalid explicit selectors stop without falling back to another local plan. PowerShell regression coverage exercises attest, show, and clear from the nested directory. The release also restores macOS system-alias handling for the Codex and Hermes context readers and keeps unsafe active-plan pointers from falling back to an unrelated legacy plan.
    v3.12.0Session recovery is now consent-bound and the published planning surface is fully auditable. Automatic hooks read project planning files only. Same-project session metadata and bounded replay require explicit CLI modes, cross-project records remain quarantined, and phase-status writers fail closed when their shared lock is unavailable. Hidden template instructions were replaced with visible guidance, capability descriptions now disclose actual context and gate behavior, and the complete 29-file ClawHub stage is rebuilt and verified from canonical tracked source.
    v3.11.2Skills-only manual installs now copy one skill at the documented depth (PR #229 by @dylanpulver). The Unix and PowerShell commands name skills/planning-with-files instead of copying skills/*, so the skills/i18n/ subtree no longer lands below the loader path. Both instructions create ~/.claude/skills first, which keeps a fresh install from placing SKILL.md directly under skills/. A tracked-Markdown test rejects the old whole-directory copy shape and locks the destination-creation step.
    v3.11.1The Copilot error hook could not be parsed by a POSIX shell (PR #228 by @dylanpulver). error-occurred.sh fed its two Python helpers with <<<, a bash here-string that dash does not implement, and the suite invokes the shell hooks as sh script, so the #!/bin/bash shebang never applied. On ubuntu runners the file died at line 32 with Syntax error: redirection unexpected, and master CI had failed on that leg for five consecutive runs. Both call sites now pipe with printf '%s\n'. The sibling echo form was deliberately not copied: dash expands backslash escapes, which would have traded a loud syntax error for silent JSON corruption. No user was affected, because Copilot invokes the hook under a bash key that bypasses the shebang.
    v3.11.0The plugin registers one skill instead of six (closes #130, reported by @sean3808; implemented by @dylanpulver in PR #226). The five language variants moved from skills/planning-with-files-<lang>/ to skills/i18n/planning-with-files-<lang>/. Nothing deleted, nothing renamed, every npx skills add --skill command unchanged: Claude Code scans skills/*/SKILL.md one level without recursing, while the skills CLI resolves --skill by name across a recursive scan. Measured against the real loader, not inferred: 6 registered skills to 1, 19 components to 14, always-on cost roughly 2,254 to 1,042 tokens per session, with all thirteen slash commands intact. /plan-de and its four siblings read their translated skill from disk and state that the status tokens stay literal English, because check-complete.sh matches them with grep -F. Also fixes seven shell hooks that could emit JSON with a raw control character when run under a POSIX-mode shell on macOS.
    v3.10.2PLANNING_DISABLED=1 had never reached the GitHub Copilot or Cursor hooks (PRs #223, #222 and #224, by @Whxuan0701). Both routes read task_plan.md directly instead of dispatching to the script that carries the #195 guard, so eighteen hook entry points ignored the opt-out entirely: a one-shot task sharing a working directory with an unrelated plan had no way to detach from it. Auditing the merge found three more: the disabled PreToolUse branch answered permissionDecision: allow, so turning the skill off widened Copilot's permissions instead of staying neutral; .cursor/hooks/stop.ps1 was the last copy the #191 zero-phase guard never reached, still auto-continuing on 0/0 phases done; and error-occurred.ps1 had never logged an error on Windows because it read stdin into $input, PowerShell's automatic pipeline variable, which does not hold the assignment under -File. The opt-out tests now run every hook with the variable unset as well as set, because the disabled-only versions stayed green against a fleet gutted to emit {}. Suite 424 to 430.
    v3.10.1Codex context hooks now emit valid event JSON on Linux and macOS (fixes #220, reported by @mfehlhaber). SessionStart, UserPromptSubmit, and PreCompact use the same adapter as Windows, so planning output beginning with [ is no longer misread as malformed JSON. This release also aligns the tracked npm payload with the published 20-script package, corrects the release reference, and makes the version bumper safe to run without the gitignored ClawHub stage in a fresh clone.
    v3.10.0Two sessions sharing one plan directory could silently destroy each other's work (closes #217, reported by @dubes394). Both read task_plan.md, both write it back, and the later write discards the earlier one's phases while injection, plan-doctor and the Stop gate all read the result as an ordinary edit. Attestation could not cover it: it compares against a baseline a human approved once, not against what the hooks last observed, and it is a read side gate that cannot stop the stale write. The guard compares progress rather than hashes, because a hash comparison flags a single agent's own edit on its very next fire; checked items and completed phases only go up during normal work, so a decrease means work is gone. Verifying #130 alongside it exposed that every non-English install was a subset install, missing attestation, the Stop gate, the ledger, phase status and plan-doctor entirely, plus a Windows UTF-8 crash fix that never left the canonical skill. Closed additively, 60 files created and 0 overwritten, with the translator-owned scripts pinned so no future sync can English them. Also fixes a README top that showed five labels and no numbers on a phone. Suite 411 to 417.
    v3.9.0A Codex thread whose cwd was a shared parent injected an unrelated project's plan on every hook fire (closes #212, reported by @webwww123). Resolution was cwd relative with no notion of a thread, so the shared parent's pointer was the only one the hook could se