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.
Without planning files
The agent re-reads the repo, asks you to restate the goal, and rediscovers work it already finished.
With planning-with-files
The transcript is illustrative; the ===BEGIN PLAN DATA=== block is the skill's real injection format, written into context by the UserPromptSubmit hook from task_plan.md on disk. In the project's internal recovery benchmark, a fresh session with the files on disk resumed in 5.0 turns on average against 13.3 for a raw agent (internal v1, author-run; method and limits in docs/evals.md).
| At a glance | |
|---|---|
| Plan files | 3 |
| Agents covered | 60+ |
| Pass rate (with skill) | 96.7% |
| Test suite | 417 green |
Survives /clear |
yes |
The Problem
Claude Code and most AI agents suffer from:
- Volatile memory: the TodoWrite list disappears on context reset
- Goal drift: after 50+ tool calls, the original goals get crowded out
- Hidden errors: failures are not tracked, so the same mistakes repeat
- Context stuffing: everything crammed into the window instead of stored
The Solution: 3-File Pattern
For every complex task, create THREE files:
task_plan.md → Track phases and progress
findings.md → Store research and findings
progress.md → Session log and test results
The Core Principle
Context Window = RAM (volatile, limited)
Filesystem = Disk (persistent, unlimited)
→ Anything important gets written to disk.
In your project, exactly this lands on disk and nothing else:
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.
Why This Skill?
On December 29, 2025, Meta acquired Manus for $2 billion. In just 8 months, Manus went from launch to $100M+ revenue. Their secret? Context engineering.
"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
This skill packages that exact pattern for your coding agent.
The Manus Principles
| Principle | Implementation |
|---|---|
| Filesystem as memory | Store in files, not context |
| Attention manipulation | Re-read plan before decisions (hooks) |
| Error persistence | Log failures in plan file |
| Goal tracking | Checkboxes show progress |
| Completion verification | Stop hook checks all phases |
Benchmark Results
Methodology note: the 96.7% figure comes from the v2.21.0 evaluation run on
claude-sonnet-4-6(2026-03-06). It measures file-pattern fidelity (does the agent create and maintain the 3-file structure), not goal-drift over long autonomous runs. Newer models and the autonomous-mode work are not yet covered by this number. Full methodology, dataset, and assertion list: docs/evals.md.
Evaluated with Anthropic's skill-creator framework: skill v2.21.0, model claude-sonnet-4-6, 2026-03-06. 10 parallel subagents, 5 task types, 30 objectively verifiable assertions, 3 blind A/B comparisons.
| Test | with_skill | without_skill |
|---|---|---|
| Pass rate (30 assertions) | 96.7% (29/30) | 6.7% (2/30) |
| 3-file pattern followed | 5/5 evals | 0/5 evals |
| Blind A/B wins | 3/3 (100%) | 0/3 |
| Avg rubric score | 10.0/10 | 6.8/10 |
Recovery after a context wipe
Internal benchmark, v1 (2026-07-06). Author-run against v3.4.0, harness-authored tasks, deterministic grading, no LLM grades anything. Treat it as the project's own measurement, not an independent comparison. Full method, arms, disclosed limits, and grader validation: docs/evals.md.
Protocol: the session is hard-stopped at roughly half done, and a fresh session is told only "Continue the work in this directory." Every graded run across every arm ended pytest-green (77/77), so the difference is re-orientation cost, not correctness.
With the planning files on disk, a resume took 5.0 turns on average; a raw agent took 13.3. Session catchup plus hook injection put phase state in front of the model before its first tool call, and the same run found no correctness penalty anywhere. An animated summary lives at docs/benchmark/index.html (rendered view).
Full methodology and results · Technical write-up
Quick Install
Claude Code, plugin route (ships everything: skill, hooks, slash commands):
/plugin marketplace add OthmanAdi/planning-with-files
/plugin install planning-with-files@planning-with-files
Every other agent, one line, 60+ agents via the Agent Skills standard:
npx skills add OthmanAdi/planning-with-files --skill planning-with-files -g
npm, to pin an exact version into a project or vendor it:
npm install planning-with-files
The package carries SKILL.md, scripts/ and templates/, so this is the route for locking a version into a repo's dependencies or copying the skill in yourself. It does not register hooks on its own.
Pi Coding Agent, same npm package, wired up for you (skill, extension, status bar):
pi install npm:planning-with-files
Under a minute. Safe to re-run. Trigger it by typing /plan (plugin) or asking the agent to "plan this task"; the skill also self-triggers on multi-step tasks.
What each route actually ships:
| Route | Skill + scripts + templates | Slash commands | Hooks |
|---|---|---|---|
| Claude Code plugin | yes | yes | yes |
npx skills add |
yes | no | frontmatter hooks, see note |
npm install |
yes, under node_modules/ |
no | no, copy the skill in yourself |
pi install npm: |
yes | yes, Pi commands | yes, via the Pi extension |
| ClawHub / manual copy | yes | no | frontmatter hooks, see note |
Skill-route installs can end up silently hook-less (project trust not accepted, or frontmatter hooks not registering on project-level installs). The hooks are the differentiating mechanism, so if they matter to you, use the plugin route, then verify with /plan-doctor. Full matrix and the two silent killers: docs/installation.md.
Install acting up? Open your agent and say: "Read docs/installation.md and docs/troubleshooting.md from OthmanAdi/planning-with-files and fix my install." Then run /plan-doctor.
🇸🇦 العربية / 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.
Copy the skill to your local folder:
macOS/Linux:
cp -r ~/.claude/plugins/cache/planning-with-files/planning-with-files/*/skills/planning-with-files ~/.claude/skills/
Windows (PowerShell):
Copy-Item -Recurse -Path "$env:USERPROFILE\.claude\plugins\cache\planning-with-files\planning-with-files\*\skills\planning-with-files" -Destination "$env:USERPROFILE\.claude\skills\"
All install methods: docs/installation.md.
Reference
Everything below is the technical half: how the hooks fire, every command, every supported platform, and the release history.
| How It Works | The hook loop, injection, and session recovery |
| Commands | All 13 slash commands |
| Works across 18+ platforms | Per-IDE setup and discovery paths |
| v3 Long-Running Agent Features | Modes, the completion gate, attestation, env vars |
| Key Rules · When to Use | The four rules, and when the pattern pays off |
| File Structure | What lands in your project, and the repository layout |
| FAQ | Context rot, plan mode, agent memory tools |
| Releases · Community | Version history and community forks |
| Documentation | Every guide in docs/ |
How It Works
The agent stops at the first rung that applies:
1. Task needs 3+ steps or 5+ tool calls? → create the three files first
2. Learned something? → append it to findings.md
3. Did something? → log it in progress.md
4. Phase done? → check it off in task_plan.md
5. Context died (/clear, crash)? → session catchup re-reads all three
6. Every phase complete? → only then does the Stop gate release (gated mode)
Hooks make steps 2 to 6 mechanical rather than optional: 5 lifecycle hooks on Claude Code, 7 on Codex, 8 on Pi re-inject the plan each turn, remind after writes, and check completion before stopping.
flowchart LR
A["agent works"] -->|"writes decisions, findings, errors"| F["task_plan.md<br/>findings.md<br/>progress.md"]
F -->|"hooks re-inject the plan<br/>at the start of each turn"| A
K["/clear · crash · compaction"] -.->|"wipes the context window"| A
F ==>|"session catchup re-reads the files"| R["fresh session resumes<br/>at the current phase"]
Session Recovery
When your context fills up and you run /clear, the skill recovers the previous session automatically:
- Checks the active IDE's session store for previous session data (
~/.claude/projects/for Claude Code,~/.codex/sessions/for Codex) - Finds when the planning files were last updated
- Extracts the conversation that happened after (potentially lost context)
- Shows a catchup report so you can sync
Pro tip: disable auto-compact to maximize context before clearing:
{ "autoCompact": false }
Maintainer depth (hook architecture, dispatcher layout, parity tooling) lives in AGENTS.md and docs/.
Commands
Slash commands ship with the Claude Code plugin route (see the install matrix above).
| Command | Autocomplete | What you get |
|---|---|---|
/planning-with-files:plan |
type /plan |
Creates the three planning files and starts the session (v2.11.0+) |
/planning-with-files:pwf |
type /pwf |
Short alias for /plan; --autonomous / --gated init (v3.0.0+) |
/planning-with-files:status |
type /status |
One-glance report: current phase and phase totals (v2.15.0+) |
/planning-with-files:plan-doctor |
type /plan-doctor |
Self-check for the failure modes that are silent by design: one PASS/WARN/FAIL line each for resolution, injection, attestation, install surfaces, and per-fire latency (v3.6.0+) |
/planning-with-files:plan-attest |
type /plan-attest |
Locks task_plan.md with a SHA-256; hooks refuse a tampered plan body; --show / --clear (v2.37.0+) |
/planning-with-files:plan-goal |
type /plan-goal |
Runs until the plan reports complete, composing with Claude Code /goal (v2.38.0+) |
/planning-with-files:plan-loop |
type /plan-loop |
Planning-aware cadence on /loop, default 10 minute tick (v2.38.0+) |
/planning-with-files:plan-de |
type /plan-de |
Start planning in German; also -ar, -es, -zh, -zht (v2.33.0+) |
/planning-with-files:start |
type /planning |
Original start command |
Typing /plan prefix-matches every plan* command in autocomplete; /planning-with-files:status autocompletes as /status (the older /plan:status label predates the rename).
Pi extension commands
Install the Pi extension with pi install npm:planning-with-files; it registers these commands, typed with no /planning-with-files: prefix.
| Command | What it does | Version |
|---|---|---|
/plan-execute |
Pi only. Approve the active plan to ACTIVATE all Pi hooks; hooks stay passive until you run this; reset returns to passive review |
v3.3.0+ |
/plan-status |
Active plan path, scope, and phase totals | v2.39.0+ |
/plan-goal <text|default|clear> |
Set or clear the goal string appended to auto-continue prompts | v2.39.0+ |
/plan-loop [interval] [prompt|stop] |
Start or stop a planning tick (default 10m) that re-reads the plan and nudges progress | v2.39.0+ |
/plan-attest [--show|--clear] |
Run the attest-plan helper; shares the .attestation file with Claude Code |
v2.39.0+ |
On Pi there is no /plan command to create the files; the skill creates them, then /plan-execute approves and activates the hooks. Pi plan-goal/plan-loop run their own logic, while the Claude Code commands of the same name forward to native /goal and /loop. The doctor ships as a script in every mirror since v3.7.0: run sh scripts/plan-doctor.sh directly on platforms without the command.
Command names vs skill names
| Platform | You type | Examples |
|---|---|---|
| Claude Code | /planning-with-files:<verb>, autocompletes from the short form |
/plan, /pwf, /plan-attest, /plan-de |
| Pi | bare form, no prefix | /plan-status, /plan-execute, /plan-goal |
| Continue.dev | /planning-with-files |
On the plugin route the model-invocable SKILL is planning-with-files:planning-with-files; the doubled form is the skill id, not a command you type. The five language variants live under skills/i18n/, which the plugin scan does not reach, so there is no planning-with-files:planning-with-files-de to invoke by name — reach a translation through its /plan-ar, /plan-de, /plan-es, /plan-zh or /plan-zht command, or install it as its own skill with npx skills add OthmanAdi/planning-with-files --skill planning-with-files-de -g, which registers it under its own name. There is no /pwf-de and no /planning-with-files:planning-with-files-goal; /pwf is just a short alias for /plan.
Works across 18+ platforms
One skill, three integration tiers. Know what your agent gets before you install:
| Tier | Platforms | What you get |
|---|---|---|
| Enhanced (hooks + lifecycle automation) | Claude Code, Cursor, GitHub Copilot, Mastra Code, Gemini CLI, Kiro, Codex, Hermes, CodeBuddy, Factory Droid, OpenCode | Plan injection every turn, progress reminders, completion check |
| Standard Agent Skills | Continue, Pi, OpenClaw, Autohand Code, Antigravity, Kilocode, AdaL CLI | SKILL.md discovery via npx skills add; the pattern without lifecycle hooks |
| Agent Skills standard path (in-tree since v3.7.0) | Zed, Amp, Warp, Devin, Antigravity, Gemini CLI, Cursor | .agents/skills/planning-with-files/ discovered from a plain git clone, no per-tool setup |
| IDE | Installation Guide | Integration |
|---|---|---|
| Claude Code | Installation | Plugin + SKILL.md + Hooks |
| Cursor | Cursor Setup | Skills + hooks.json |
| GitHub Copilot | Copilot Setup | Hooks (incl. errorOccurred) |
| Mastra Code | Mastra Setup | Skills + Hooks |
| Gemini CLI | Gemini Setup | Skills + Hooks |
| Kiro | Kiro Setup | Agent Skills |
| Codex | Codex Setup | Skills + Hooks |
| Hermes Agent | Hermes Setup | Skill + Project Plugin |
| CodeBuddy | CodeBuddy Setup | Skills + Hooks |
| FactoryAI Droid | Factory Setup | Skills + Hooks |
| OpenCode | OpenCode Setup | Skills + Custom session storage |
| IDE | Installation Guide | Skill Discovery Path |
|---|---|---|
| Continue | Continue Setup | .continue/skills/ + .prompt files |
| Pi Agent | Pi Agent Setup | .pi/skills/ (npm package) |
| OpenClaw | OpenClaw Setup | .openclaw/skills/ (docs) |
| Autohand Code | Autohand Code Setup | ~/.autohand/skills/ or .autohand/skills/ |
| Antigravity | Antigravity Setup | .agent/skills/ (docs) |
| Kilocode | Kilocode 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-supportbranch.
| Runtime | Status | Guide | Notes |
|---|---|---|---|
| BoxLite | ✅ Documented | BoxLite Setup | Run 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.
v3 Long-Running Agent Features
The v3 line adds features aimed at long-running agentic runs. Each one is listed with the command or flag that turns it on. With no mode marker set, the hooks produce the same output as v2.43, so nothing changes for existing setups.
- Autonomous mode (
/pwf --autonomous, orinit-session.sh --autonomous): drops the per-tool-call plan recitation, keeps the turn-start injection, and turns attestation on by default. - Gated mode (
--gated): adds a Stop completion gate that blocks only when all completion conditions hold at once, so an incomplete plan alone never traps a session. - Auto-continue on Pi (
agent_endhandler): re-prompts the agent up to a limit of 3 to keep an unfinished plan moving, plus an optional/plan-goalstring appended to the prompt. - Pi approval gate (
/plan-execute): Pi hooks stay passive with a status line until you approve the active plan for the current session. - Session-catchup: resumes work after
/clearby re-reading the planning files from the active IDE's session store. - PreCompact progress flush (
PreCompacthook): surfaces a reminder to flush progress before compaction completes, and prints the active Plan-SHA256 when attested. - SHA-256 plan attestation (
/plan-attest): lockstask_plan.md; a tampered plan body is refused at injection. - Run ledger: an append-only JSONL record of phase transitions that replaces the raw
progress.mdtail in v3 modes with a fixed-shape summary. - Host capability tiers: hard block on Claude Code, Codex, and Continue; follow-up injection on Cursor, Pi, and Kiro; notify-only elsewhere.
- Per-invocation opt-out (
PLANNING_DISABLED=1, v3.4.0): a one-shot session that merely shares a cwd with an incomplete plan skips all plan reading at every hook entry point. Covers the Copilot and Cursor routes since v3.10.2;.geminiis deliberately behind and does not honour it. - Absolute plan-root pin (
PWF_PLAN_ROOT, v3.9.0): binds a thread to a project root by absolute path, for agent threads whose cwd is a shared parent of the project they are actually working in. Ambiguous cwds refuse to inject rather than guessing.
Environment variables
| Variable | Since | What it does |
|---|---|---|
PLANNING_DISABLED=1 |
v3.4.0 | Skips all plan reading for this invocation. For one-shot or CI sessions that share a cwd with a plan they never opted into. |
PLAN_ID=<slug> |
v2.36.0 | Pins the terminal to one plan under $(pwd)/.planning. Slug only, resolved against the current directory. |
PWF_PLAN_ROOT=<abs path> |
v3.9.0 | Pins the thread to a project root by absolute path, which PLAN_ID cannot express. Use it when the agent's cwd is a shared parent such as /workspace while the work lives in /workspace/project. A pin that does not resolve stops injection instead of falling back. |
PWF_SESSION_ID=<id> |
v2.36.0 | Identifies the session for plan attachment. Only consulted when .planning/sessions/ exists, in which case a session sees plan context only if .planning/sessions/<id>.attached exists. Delete that directory to turn session isolation off. |
PWF_INJECT=smart |
v3.8.0 | Replaces the fixed head -50 injection window with the goal, next step, current phase, the full in-progress phase, and the last three decisions. |
PWF_PLAN_GUARD=0 |
v3.10.0 | Turns off the parallel-write guard, which is on by default. The guard compares checked items and completed phases against the previous hook fire and prints one advisory line when they go DOWN, meaning a second session overwrote work. A plan-guard-off token in .mode does the same. |
PWF_MODE |
v2.39.0 | Pi extension runtime mode: auto, parity, cache-safe, notify. Also settable in .pi/settings.json under planningWithFiles.mode. |
PWF_GATE_CAP |
v3.0.0 | Maximum consecutive Stop-gate blocks in gated mode. Default 20. |
Hooks and modes reference
| Platform | Lifecycle hooks | Where registered |
|---|---|---|
| Claude Code | 5: UserPromptSubmit, PreToolUse, PostToolUse, Stop, PreCompact | The skill's SKILL.md frontmatter (not plugin.json), so they ship with the bundled skill |
| Codex CLI | 7: SessionStart, UserPromptSubmit, PreToolUse, PermissionRequest, PostToolUse, PreCompact, Stop | .codex/hooks.json, with event-aware adapters on every platform and commandWindows on Windows |
| Pi | 8 lifecycle handlers in the bundled extension | The injection and recitation handlers stay passive until /plan-execute |
Pi runtime modes:
| Pi mode | Behavior |
|---|---|
auto |
Detects the model and picks parity or cache-safe |
parity |
Full plan injection, mirrors the Claude Code skill |
cache-safe |
A stable reminder instead of full injection, for KV-cache-sensitive models like DeepSeek |
notify |
Status-line only, no model injection |
Key Rules
- Create Plan First — Never start without
task_plan.md - The 2-Action Rule — Save findings after every 2 view/browser operations
- Log ALL Errors — They help avoid repetition
- Never Repeat Failures — Track attempts, mutate approach
When to Use
Use this pattern for:
- Multi-step tasks (3+ steps)
- Research tasks
- Building/creating projects
- Tasks spanning many tool calls
- Long-running agent sessions that must survive
/clearand compaction
File Structure
What the skill writes into your project is three markdown files (see the 3-file pattern). What the repository ships:
planning-with-files/
├── skills/planning-with-files/ # canonical skill: SKILL.md, scripts/, templates/, reference.md, examples.md
├── skills/i18n/ # 5 translated variants: -ar / -de / -es / -zh / -zht
├── .agents/skills/planning-with-files/ # Agent Skills standard path, full surface (v3.7.0+)
├── commands/ # 13 slash commands (plugin route only)
├── scripts/ · templates/ # root-level copies for CLAUDE_PLUGIN_ROOT
├── .claude-plugin/ # plugin + marketplace manifests
├── .codex/ .cursor/ .github/ .gemini/ .kiro/ .continue/ .pi/
├── .codebuddy/ .factory/ .hermes/ .mastracode/ .opencode/ # per-IDE mirrors, parity-locked
├── docs/ # 25+ guides incl. per-platform setup, evals.md, benchmark/
├── tests/ # cross-platform pytest suite, green on Windows, Linux, and macOS CI
├── CHANGELOG.md · MIGRATION.md · SECURITY.md · CONTRIBUTING.md · CONTRIBUTORS.md
├── CITATION.cff · llms.txt · LICENSE
└── README.md
Every release maintains 18 tracked parity targets plus the gitignored ClawHub upload stage when it is present. scripts/bump-version.py updates every available target, and CI fails if a tracked variant lags.
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 the active plan, and after a /clear or a new session the skill re-reads the files from disk (session recovery), so the agent recovers its goals and progress automatically.
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, 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 just stops being active. Anything worth keeping should be promoted into code, a commit, or a doc. See After Completion: What Happens to the Plan Files for the full lifecycle and how to retain a completed plan. This is a deliberate default, not a missing feature; a completion-triggered archive step is a welcome opt-in extension.
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.
| Version | Highlights |
|---|---|
| v3.11.0 | The 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.2 | PLANNING_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.1 | Codex 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.0 | Two 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. Attest |
No comments yet
Be the first to share your take.