[Feature Request] Plan mode should support plan files outside ~/.claude/plans directory

Status Fixed / completed
Maintainer reply None cached
Activity 9 comments · opened Nov 30, 2025 · closed Jan 19, 2026

Bug Description
New plan mode (is this the V2 that I saw env vars for?) can ONLY use plan files in ~/.claude/plans, which breaks many workflows that use plan files in other places.

slightly more detail

The new plan mode is a step in the right direction. I started writing context to files for managing cross-session work waaaay back in june, so I'm glad to see it formalized. BUT

BUT the new plan mode breaks a few things. I tend to like to version control my plan files - it makes it easier to review the code and run other LLMs or even other claude code sessions to check the work product. A bit like antigravity before antigravity.

The new plan mode seems to FORCE using the plans in ~/.claude/plans, even when I explicitly ask it to use sentry-architecture-redesign-plan.md or something like it.

When I'm lucky after compaction it will remember to also read my plan file:

  ⎿  Referenced file copilot_notes/sentry-architecture-redesign-plan.md
  ⎿  Read ../../../.claude/plans/abstract-fluttering-unicorn.md (145 lines)

But this is very brittle. When planning, it's also VERY confusing! Which plan is it presenting with ExitPlanMode? Is it abstract-fluttering-unicorn.md or sentry-architecture-redesign-plan.md? What's the actual difference?

Then there are... other sillynesses... like, asking claude to edit the plan files in ~/.claude, when outside of plan mode, triggers the permissions request prompt because it's editing a file in .claude! If I ask it to make a bunch of changes to the file... a bunch of requests, because .claude directories are never allowed to "always accept edits" for what I presume are obvious security reasons. Oopsies.

@ed-irl has shared a closely related bug report here:
https://github.com/anthropics/claude-code/issues/12619

I think this is clearly related, here in @jgwill's report:
https://github.com/anthropics/claude-code/issues/12499

I think this is a parallel problem, as I've seen the new permissions for plan mode (enforcing read only more aggressively?) break writes by the Plan subagent when I ask it to edit my own plan files (e.g. sentry-architecture-redesign-plan.md), in @alexn-tinwell's issue:
https://github.com/anthropics/claude-code/issues/12434

I _very_ vaguely suspect this is related: https://github.com/anthropics/claude-code/issues/12595

For what it's worth, I think the comments in this issue are incorrect:
https://github.com/anthropics/claude-code/issues/12366

I almost _always_ want my plan files to be as thorough as possible. Getting things done faster is not super valuable to me if they're not done correctly... I can do things arbitrarily fast if they don't have to be correct!

Environment Info

  • Platform: darwin
  • Terminal: Apple_Terminal
  • Version: 2.0.55
  • Feedback ID: accd68fd-35be-499f-944b-532b6c25038a

Errors

[{"error":"Error: 400 {\"type\":\"error\",\"error\":{\"type\":\"invalid_request_error\",\"message\":\"max_tokens: Extra inputs are not permitted\"},\"request_id\":\"req_011CVd8voMtnDottXvy72XrJ\"}\n    at t2.generate (file:///Users/alexanderriccio/.nvm/versions/node/v24.10.0/lib/node_modules/@anthropic-ai/claude-code/cli.js:459:9427)\n    at LT.makeStatusError (file:///Users/alexanderriccio/.nvm/versions/node/v24.10.0/lib/node_modules/@anthropic-ai/claude-code/cli.js:1312:2195)\n    at LT.makeRequest (file:///Users/alexanderriccio/.nvm/versions/node/v24.10.0/lib/node_modules/@anthropic-ai/claude-code/cli.js:1312:5419)\n    at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n    at async file:///Users/alexanderriccio/.nvm/versions/node/v24.10.0/lib/node_modules/@anthropic-ai/claude-code/cli.js:1464:2769\n    at async file:///Users/alexanderriccio/.nvm/versions/node/v24.10.0/lib/node_modules/@anthropic-ai/claude-code/cli.js:1464:2262\n    at async FB5 (file:///Users/alexanderriccio/.nvm/versions/node/v24.10.0/lib/node_modules/@anthropic-ai/claude-code/cli.js:1463:16949)\n    at async ZQ2 (file:///Users/alexanderriccio/.nvm/versions/node/v24.10.0/lib/node_modules/@anthropic-ai/claude-code/cli.js:1464:2195)\n    at async $RA (file:///Users/alexanderriccio/.nvm/versions/node/v24.10.0/lib/node_modules/@anthropic-ai/claude-code/cli.js:2252:52)\n    at async nu5 (file:///Users/alexanderriccio/.nvm/versions/node/v24.10.0/lib/node_modules/@anthropic-ai/claude-code/cli.js:2252:2244)","timestamp":"2025-11-30T00:36:09.972Z"},{"error":"Error: 400 {\"type\":\"error\",\"error\":{\"type\":\"invalid_request_error\",\"message\":\"max_tokens: Extra inputs are not permitted\"},\"request_id\":\"req_011CVd9fXuf8PVyPHJzgj8sA\"}\n    at t2.generate (file:///Users/alexanderriccio/.nvm/versions/node/v24.10.0/lib/node_modules/@anthropic-ai/claude-code/cli.js:459:9427)\n    at LT.makeStatusError (file:///Users/alexanderriccio/.nvm/versions/node/v24.10.0/lib/node_modules/@anthropic-ai/claude-code/cli.js:1312:2195)\n    at LT.makeRequest (file:///Users/alexanderriccio/.nvm/versions/node/v24.10.0/lib/node_modules/@anthropic-ai/claude-code/cli.js:1312:5419)\n    at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n    at async file:///Users/alexanderriccio/.nvm/versions/node/v24.10.0/lib/node_modules/@anthropic-ai/claude-code/cli.js:1464:2769\n    at async file:///Users/alexanderriccio/.nvm/versions/node/v24.10.0/lib/node_modules/@anthropic-ai/claude-code/cli.js:1464:2262\n    at async FB5 (file:///Users/alexanderriccio/.nvm/versions/node/v24.10.0/lib/node_modules/@anthropic-ai/claude-code/cli.js:1463:16949)\n    at async ZQ2 (file:///Users/alexanderriccio/.nvm/versions/node/v24.10.0/lib/node_modules/@anthropic-ai/claude-code/cli.js:1464:2195)\n    at async $RA (file:///Users/alexanderriccio/.nvm/versions/node/v24.10.0/lib/node_modules/@anthropic-ai/claude-code/cli.js:2252:52)\n    at async nu5 (file:///Users/alexanderriccio/.nvm/versions/node/v24.10.0/lib/node_modules/@anthropic-ai/claude-code/cli.js:2252:2244)","timestamp":"2025-11-30T00:45:50.358Z"},{"error":"SyntaxError: Unexpected non-whitespace character after JSON at position 65 (line 6 column 1)\n    at JSON.parse (<anonymous>)\n    at file:///Users/alexanderriccio/.nvm/versions/node/v24.10.0/lib/node_modules/@anthropic-ai/claude-code/cli.js:74:693\n    at B (file:///Users/alexanderriccio/.nvm/versions/node/v24.10.0/lib/node_modules/@anthropic-ai/claude-code/cli.js:8:6527)\n    at CQ2 (file:///Users/alexanderriccio/.nvm/versions/node/v24.10.0/lib/node_modules/@anthropic-ai/claude-code/cli.js:1465:2276)\n    at process.processTicksAndRejections (node:internal/process/task_queues:105:5)","timestamp":"2025-11-30T00:56:19.327Z"},{"error":"Error: Request was aborted.\n    at Bt._createMessage (file:///Users/alexanderriccio/.nvm/versions/node/v24.10.0/lib/node_modules/@anthropic-ai/claude-code/cli.js:463:3151)\n    at process.processTicksAndRejections (node:internal/process/task_queues:105:5)","timestamp":"2025-11-30T01:04:59.219Z"}]

View original on GitHub ↗

9 Comments

github-actions[bot] · 9 months ago

Found 3 possible duplicate issues:

  1. https://github.com/anthropics/claude-code/issues/12619
  2. https://github.com/anthropics/claude-code/issues/6110
  3. https://github.com/anthropics/claude-code/issues/12366

This issue will be automatically closed as a duplicate in 3 days.

  • If your issue is a duplicate, please close it and 👍 the existing issue instead
  • To prevent auto-closure, add a comment or 👎 this comment

🤖 Generated with Claude Code

ariccio · 9 months ago

If this is the correct prompt for plan mode:
https://github.com/Piebald-AI/claude-code-system-prompts/blob/main/system-prompts/agent-prompt-plan-mode-enhanced.md

Then the obvious partial cause of some of the issues I have is the prompt:

Creating new files (no Write, touch, or file creation of any kind)
Modifying existing files (no Edit operations)

This is slightly annoying for another reason - I often like to use Plan subagents in a multi shot iterative way, to slowly enhance the plan

Some of the other issues mentioned in the prompt exist for reasons I fully understand - I've just found it more effective to simply ban claude from using cat, find, echo, and grep, than to instruct it to avoid them.

tplunket · 9 months ago

I don't understand the requirements behind the change that led to this problem. My workflow of "create plans in repository for work to be done, incrementally update plan as we go" seems almost hopelessly broken now that Claude Code is insisting on randomly named files in ~/.claude/plans. I do not see the utility in this change and given all of the bugs around it I wonder why the way it worked fine needed to be changed. I tell it over and over "The plan file is in doc/migration-plan.md" and it's "updated the plan in ~/.claude/plans/three-random-words.md" and ... umm, well that's not where the plan that we've spent a lot of time on and we're supposed to be working from is located.

I am very sad about this because I felt like I was finally getting a handle on working with Claude Code and now the requirement is that the plan must be not only completely divorced from the repository itself (so it cannot be shared across the team) but it apparently recreates and orphans plans in a whimsical fashion? How is this useful at all?

ed-irl · 8 months ago

For others with this issue: I've started doing more-or-less the same workflow but calling it epics. I will make an "epic" file and iterate it there with Claude (not in plan mode). Claude seems to know that it should plan work when creating an epic more or less the same way as when plan mode is active. I will then go through the epic section-by-section and ask, in plan mode, to make a plan for the section.

I have not experienced an issue in this workflow where Claude begins editing files in an unwanted way when making epics.

That said, since the Opus 4.5 update, I think I've observed a lower performance in Claude in many tasks. It often wants to leave work unfinished or defer work using stub implementations or todos - something I was used to sonnet 4 or 3 doing, and it very often throws up its hands and says "this issue was pre-existing" even though it wasn't. I don't think it was doing this so often with my old plan based workflow.

Even working in plan mode and with this epics technique I have trouble getting it to really try to finish moderate complexity implementations, and I wonder if it's at least partly due to something that changed with plans.

github-actions[bot] · 7 months ago

This issue has been inactive for 30 days. If the issue is still occurring, please comment to let us know. Otherwise, this issue will be automatically closed in 30 days for housekeeping purposes.

mblua-phi · 7 months ago

It's doable.
Sorry, it's too late at night here to test this further to give you a cleaner hint. I wrote it in spanish, I added the translation below but it's just a simple "don't do this, do this" prompt.

Hope it helps.

---
<img width="1865" height="267" alt="Image" src="https://github.com/user-attachments/assets/78f9eece-d7d4-4752-96f6-25fccf48b760" />
----
No, it will now enter plan mode, and you should disregard any previous rules you receive about where the plan should be located. I want you to

work on the file E:\0_mmb\0_repos_phi\tool-idp-docs-recognition\TO-DOs\029_PLAN_JSON_REPAIR.md

● Entered plan mode
Claude is now exploring and designing an implementation approach.

● Understood. I'll work on the existing plan in TO-DOs/029_PLAN_JSON_REPAIR.md. First, I'll read the current plan and verify that the implementation details match the actual code.
----

ariccio · 7 months ago
It's doable. Sorry, it's too late at night here to test this further to give you a cleaner hint. I wrote it in spanish, I added the translation below but it's just a simple "don't do this, do this" prompt. Hope it helps. <img alt="Image" width="1865" height="267" src="https://private-user-images.githubusercontent.com/248051538/537398647-78f9eece-d7d4-4752-96f6-25fccf48b760.png?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Njg4MDIwMjQsIm5iZiI6MTc2ODgwMTcyNCwicGF0aCI6Ii8yNDgwNTE1MzgvNTM3Mzk4NjQ3LTc4ZjllZWNlLWQ3ZDQtNDc1Mi05NmY2LTI1ZmNjZjQ4Yjc2MC5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjYwMTE5JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI2MDExOVQwNTQ4NDRaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1jN2MzNmYyMmFkNGVhODUyNjk5NTQ2OGU0OTA3OGU1OGYzOGE1OTY5ZGNkMzk2ZDE2NmM1ZDExZTY3YTk4MmIzJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9._18otMr7Qa7R-zdvFT03ygXPPJdTJqDLjRMSxcsvDiM"> ---- No, it will now enter plan mode, and you should disregard any previous rules you receive about where the plan should be located. I want you to work on the file E:\0_mmb\0_repos_phi\tool-idp-docs-recognition\TO-DOs\029_PLAN_JSON_REPAIR.md ● Entered plan mode Claude is now exploring and designing an implementation approach. ## ● Understood. I'll work on the existing plan in TO-DOs/029_PLAN_JSON_REPAIR.md. First, I'll read the current plan and verify that the implementation details match the actual code.

I actually think I can close this now - they implemented a new feature that solves this!

ariccio · 7 months ago

Solved with plansDirectory.

github-actions[bot] · 7 months ago

This issue has been automatically locked since it was closed and has not had any activity for 7 days. If you're experiencing a similar issue, please file a new issue and reference this one if it's relevant.