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.
This issue has 2 comments on GitHub. Read the full discussion on GitHub ↗