Responses drift into English mid-task despite `language: "japanese"` and CLAUDE.md language rules
Environment
- Claude Code desktop app (Windows 10), also observed via Remote Control on iOS
- Model: Opus 5.5
~/.claude/settings.json:"language": "japanese"- Global and project CLAUDE.md both state that all user-visible text (including progress messages) must be in Japanese
What happens
In long sessions, progress messages between tool calls switch to English, for example:
- "Checking syntax and calling the API on 8081 to confirm the results."
- "The API works, but all 8081 action records are from August, so it's currently falling back to ..."
- "All three images in revision 5 are now adopted (inline, featured, and review comment) but still pending approval ..."
It tends to happen while the session handles a lot of English material (image-generation prompts, English test/commit messages, logs). The user has had to correct this many times across several days; the model returns to Japanese after being told, then drifts again later.
Expected
With language set and explicit CLAUDE.md rules, every user-visible message (including short progress lines) should stay in the configured language for the whole session, including after compaction and while processing English tool output.
Why this matters
The only reliable workaround is a per-tool-call hook that re-injects the rule, which costs the user tokens and adds latency to every action. Users should not have to pay to keep the configured language.
Showing cached comments. Read the full discussion on GitHub ↗
3 Comments
Additional finding: the compaction summary itself is written in English even with
"language": "japanese".The affected session had been compacted 20 times. Each summary was English (it even contains the instruction "must write only Japanese", but in English). After many compactions almost the entire context the model resumes from is English, so subsequent progress messages continue in English. The session's own recent messages are then English too, which reinforces the drift.
Suggested fix: generate compaction summaries in the configured
language, or re-assert the configured language after compaction.https://github.com/anthropics/claude-code/issues/96326 describes a similar problem.
That issue is already upvoted at least 10 times so it won't be auto-closed, but you issue will be. See https://github.com/anthropics/claude-code/issues/87647 for the auto-close bot details, and consider upvoting that for visibility.
This report matters for diagnosis: the drift happens with a single-word
languagevalue, so a sentence-valued or ambiguous setting is not the cause.For comparison, my setup used a sentence-valued
language("Conversations are in Korean, while coding and documentation work is done in English.") from January on. Under that same value, Opus 5 and Fable 5.1 ended about 0.6% of turns in English, and Opus 5.5 ended 9.4%. The value is substituted verbatim into the harness's language section, and I have since changed it to a single word to remove any ambiguity. Given this report, I expect that change to reduce the rate at most, not remove it.Measurement details: https://github.com/anthropics/claude-code/issues/99704