Feature Request: Meaningful plan file names
Status Fixed / completed
Maintainer reply None cached
Workaround ✓ Mentioned in thread ↓
Activity 12 comments · opened Jan 27, 2026 · closed Aug 17, 2026
Feature Request: Meaningful Plan File Names
Summary
Use descriptive kebab-case names for plan files instead of random adjective-verb-noun patterns.
Current Behavior
Plan files are saved with random names:
fuzzy-snuggling-fog.mdabundant-noodling-firefly.mdbubbly-launching-mango.md
Proposed Behavior
Name plans with a short kebab-case summary of the feature/task:
add-user-authentication.mdfix-cache-invalidation.mdrefactor-api-endpoints.md
Why This Matters
- Findability: When returning to a project, it's hard to find the relevant plan among dozens of randomly-named files
- Context: The filename itself provides context about what the plan covers
- Consistency: Aligns with how specs and other project documents are typically named
- History: Makes
~/.claude/plans/a useful reference of past work
Showing cached comments. Read the full discussion on GitHub ↗
11 Comments
Found 3 possible duplicate issues:
This issue will be automatically closed as a duplicate in 3 days.
🤖 Generated with Claude Code
This would be a huge usability improvement.
Not a fix, but an effective workaround (identified after looking at Claude's Debug logs and recognising events that could be targeted) - remap "write" and "Edit" and "ExitPlanMode" actions to custom hooks that push plan content into a consistently-named and repo-based Serena folder.
Step 1: Ensure Serena's active on your project (who doesn't want to save tokens, eh!)
Step 2: Create the 4 files that drive the solution (_and also take the opportunity in session-directive.sh to remind Claude on every StartSession, Resume or Compact key points you wish he'd remember_).
plan-file-redirect.sh
session-directive.sh
session-init.sh
sync-plan-to-serena.sh
Step 3: Add to your claude.settings.json file (_not sure how to make code blocks line-break, sorry_):
{
"plansDirectory": ".claude/plans",
"hooks": {
"SessionStart": [
{
"matcher": "startup",
"hooks": [
{
"type": "command",
"command": "bash .claude/hooks/session-init.sh",
"timeout": 15,
"statusMessage": "Initialising session..."
},
{
"type": "command",
"command": "bash .claude/hooks/session-directive.sh",
"timeout": 5
}
]
},
{
"matcher": "resume",
"hooks": [
{
"type": "command",
"command": "bash .claude/hooks/session-directive.sh",
"timeout": 5
}
]
},
{
"matcher": "compact",
"hooks": [
{
"type": "command",
"command": "bash .claude/hooks/sync-plan-to-serena.sh",
"timeout": 10
},
{
"type": "command",
"command": "bash .claude/hooks/session-directive.sh",
"timeout": 5
}
]
},
{
... <Existing SessionStart hooks if any> ...
}
],
"PostToolUse": [
{
"matcher": "Write",
"hooks": [
{
"type": "command",
"command": "bash .claude/hooks/plan-file-redirect.sh",
"timeout": 10
}
]
},
{
"matcher": "Edit",
"hooks": [
{
"type": "command",
"command": "bash .claude/hooks/plan-file-redirect.sh",
"timeout": 10
}
]
},
{
"matcher": "ExitPlanMode",
"hooks": [
{
"type": "command",
"command": "bash .claude/hooks/sync-plan-to-serena.sh",
"timeout": 10
}
]
},
{
... <Existing hooks if any> ...
}
],
"PostToolUse": [
{
"matcher": "Write",
"hooks": [
{
"type": "command",
"command": "bash .claude/hooks/plan-file-redirect.sh",
"timeout": 10
}
]
},
{
"matcher": "Edit",
"hooks": [
{
"type": "command",
"command": "bash .claude/hooks/plan-file-redirect.sh",
"timeout": 10
}
]
},
{
... <Existing PostToolUse hooks if any> ...
}
],
"PreToolUse": [
{
"matcher": "ExitPlanMode",
"hooks": [
{
"type": "command",
"command": "bash .claude/hooks/sync-plan-to-serena.sh",
"timeout": 10
}
]
},
{
... <Existing PreToolUse hooks if any> ...
}
]
},
"permissions": {
"allow": [
...<existing allow permissions>...
]
}
}
<EOF>
_Update: formatting_
add a timestamp to avoid collisions:
Can someone from Anthropic comment on this? This feature has been requested over and over, and closed as a duplicate over and over.
It's pretty crazy how well thought out Claude Code is, and that Claude is _able to generate meaningful file names_, yet this feature request remains ignored.
Another +1 on this, this is a persistent pain point.
Update: Looks like CC v2.1.77 added the ability to automatically rename the session when a plan is accepted. In other words - it already generates a short summary when a plan is created/accepted, so my original request can be satisfied by just using that as the plan name (or allowing us to configure CC to do so).
As of v2.1.111, plan files are now partially based on the prompt and partially randomized. This results in plan file names such as
fix-build-errors-in-<random-words>.md. However I'd like to note that this solution introduced another issue, as this new naming scheme seems to be confusing Claude:I just have a hook to rename the file after the title line claude gives the plan - at least it has all the key info.
If the purpose of keeping the filename partially random was to prevent conflicts due to having the same plan filename, I'd like to suggest adding a timestamp instead. These random words are quickly becoming a real annoyance. Here's another example from
implement-server-side-filtering-and-iridescent-star.md(the question is asked before the plan file is written so you can't even see where it's coming from):<img width="909" height="159" alt="Image" src="https://github.com/user-attachments/assets/8fabe790-388d-4a0b-8c71-3bd6e9891c06" />
Just adding another comment before the bot auto-closes this, this is still an issue and happened to me twice today.