Custom theme set via project .claude/settings.local.json reverts to the default theme after /rename
[BUG] Custom theme set via project .claude/settings.local.json reverts to the default theme after /rename
Environment
- Claude Code v2.1.218 (also latest at time of writing)
- Windows 11, Windows Terminal + Git Bash
- Interactive TUI session
Description
A theme key in a project-scope .claude/settings.local.json pointing at a custom theme is honored at session start — the input border, session badge, and spinner render in the custom colors. But running /rename <name> mid-session makes those colors revert to the built-in default theme's accents for the remainder of the session. Starting a new session in the same directory restores the custom colors.
It looks like the title change triggers a theme re-resolution that only consults user-scope settings, dropping the project/local-scope theme layer that was applied at startup.
Steps to reproduce
- Create a custom theme
~/.claude/themes/demo-blue.json:
{
"name": "Demo Blue",
"base": "dark",
"overrides": {
"promptBorder": "#7aa2f7",
"promptBorderShimmer": "#a8c3fa",
"claude": "#7aa2f7",
"claudeShimmer": "#a8c3fa"
}
}
- Create
C:\projects\demo-app\.claude\settings.local.json:
{
"theme": "custom:demo-blue"
}
(user-scope ~/.claude/settings.json has "theme": "dark")
- Run
claudeinC:\projects\demo-app— the input border and spinner render in the custom blue. ✔ - Run
/rename My Session.
Expected
The session is renamed; the active theme is unchanged.
Actual
The session is renamed, but the input border, badge, and spinner revert to the default dark theme's teal/orange. The custom theme stays inactive until the session ends; the next claude session in the directory is themed correctly again.
<img width="1095" height="501" alt="Image" src="https://github.com/user-attachments/assets/0d7ef754-5744-4436-b885-6820cf53580e" />
<img width="1093" height="498" alt="Image" src="https://github.com/user-attachments/assets/8b8a4f24-9235-472a-8c7c-cf07a22f3fc2" />
Notes
- The
themekey does not appear in the documented settings table, but it is clearly read from project scope at startup (and local scope correctly overrides user scope there). If per-projectthemeis intended to be supported, the/renamepath should re-resolve it the same way startup does; if it is not intended, a docs note about its scope would help.
3 Comments
Updated to include screenshots
Thanks for the detailed report — reproduced on the current release (v2.1.233), on Linux as well, so it's not Windows-specific.
With a custom theme (
~/.claude/themes/demo-blue.json) selected via a project.claude/settings.local.json, the custom accent colors are applied correctly at startup, and after/renamethe input border and session badge revert to the default theme's accents for the rest of the session. A new session restores the custom colors, exactly as you describe.One extra data point from testing: the same revert happens when the custom theme is set in user-scope
~/.claude/settings.json, so the rename path is dropping the custom-theme resolution entirely rather than only skipping project scope.Marking as a confirmed bug.
🤖 Generated with Claude Code
For your information: the label reproduced on this issue does not prevent it from becoming stale and eventually auto-closed. See https://github.com/anthropics/claude-code/issues/87647 for details, and consider upvoting that for visibility.