Problem
.caveman-active is single global file. When multiple Claude Code sessions run simultaneously with different caveman levels, they clobber each other.
Session A sets ultra → writes ~/.claude/.caveman-active = "ultra"
Session B starts → overwrites file = "full"
Session A statusline now shows wrong mode.
Both caveman-activate.js (SessionStart) and caveman-mode-tracker.js (UserPromptSubmit) write to same global path.
Fix
Use session_id from hook stdin JSON to write per-session flag files:
~/.claude/.caveman-active-{session_id}
session_id is available in:
- Hook stdin JSON (
data.session_id)
- Statusline stdin JSON (
.session_id)
Changes needed
caveman-activate.js — parse stdin for session_id, write ~/.claude/.caveman-active-{session_id}, cleanup stale files >24h
caveman-mode-tracker.js — extract session_id from already-parsed stdin, write per-session file
caveman-statusline.sh — extract session_id via jq, read per-session file, fallback to global
Environment
- macOS, Claude Code CLI
- Multiple terminal sessions with different caveman levels
Problem
.caveman-activeis single global file. When multiple Claude Code sessions run simultaneously with different caveman levels, they clobber each other.Session A sets ultra → writes
~/.claude/.caveman-active= "ultra"Session B starts → overwrites file = "full"
Session A statusline now shows wrong mode.
Both
caveman-activate.js(SessionStart) andcaveman-mode-tracker.js(UserPromptSubmit) write to same global path.Fix
Use
session_idfrom hook stdin JSON to write per-session flag files:session_idis available in:data.session_id).session_id)Changes needed
caveman-activate.js— parse stdin forsession_id, write~/.claude/.caveman-active-{session_id}, cleanup stale files >24hcaveman-mode-tracker.js— extractsession_idfrom already-parsed stdin, write per-session filecaveman-statusline.sh— extractsession_idvia jq, read per-session file, fallback to globalEnvironment