Caveman Hooks
These hooks are bundled with the caveman plugin and activate automatically when the plugin is installed. No manual setup required.
If you installed caveman standalone (without the plugin), the unified Node installer at bin/install.js wires them into your settings.json for you — run node bin/install.js --only claude from a clone, or npx -y github:JuliusBrussee/caveman -- --only claude for the curl-pipe path.
What's Included
caveman-activate.js — SessionStart hook
- Runs once when Claude Code starts
- Writes
fullto$CLAUDE_CONFIG_DIR/.caveman-active(default~/.claude/.caveman-active) via the symlink-safesafeWriteFlaghelper - Emits caveman rules as hidden SessionStart context
- Detects missing statusline config and emits setup nudge (Claude will offer to help)
caveman-mode-tracker.js — UserPromptSubmit hook
- Fires on every user prompt, checks for
/cavemancommands and natural-language activation/deactivation phrases ("talk like caveman", "stop caveman", "normal mode") - Writes the active mode to the flag file when a caveman command is detected; deletes it on deactivation
- Emits a small per-turn reinforcement reminder when the flag is set to a non-independent mode (
lite/full/ultra/wenyan*) - Supports:
lite,full,ultra,wenyan,wenyan-lite,wenyan-full,wenyan-ultra,commit,review,compress
caveman-statusline.sh / caveman-statusline.ps1 — Statusline badge script
- Reads
$CLAUDE_CONFIG_DIR/.caveman-active(default~/.claude/.caveman-active) and outputs a colored badge - Shows
[CAVEMAN],[CAVEMAN:ULTRA],[CAVEMAN:WENYAN], etc. - Appends the lifetime savings suffix
⛏ 12.4kfrom$CLAUDE_CONFIG_DIR/.caveman-statusline-suffix(written bycaveman-stats.json each/caveman-statsrun; absent until the first run, so fresh installs render no fake number). Opt out withCAVEMAN_STATUSLINE_SAVINGS=0.
Statusline Badge
The statusline badge shows which caveman mode is active directly in your Claude Code status bar.
Plugin users: If you do not already have a statusLine configured, Claude will detect that on your first session after install and offer to set it up for you. Accept and you're done.
If you already have a custom statusline, caveman does not overwrite it and Claude stays quiet. Add the badge snippet to your existing script instead.
Standalone users: the unified installer (bin/install.js, invoked by the install.sh / install.ps1 shims at the repo root) wires the statusline automatically if you do not already have a custom statusline. If you do, the installer leaves it alone and prints the merge note.
Manual setup: If you need to configure it yourself, add one of these to ~/.claude/settings.json:
{
"statusLine": {
"type": "command",
"command": "bash /path/to/caveman-statusline.sh"
}
}
{
"statusLine": {
"type": "command",
"command": "powershell -ExecutionPolicy Bypass -File C:\\path\\to\\caveman-statusline.ps1"
}
}
Replace the path with the actual script location (e.g. ~/.claude/hooks/ for standalone installs, or the plugin install directory for plugin installs).
Custom statusline: If you already have a statusline script, add this snippet to it:
caveman_text=""
caveman_flag="${CLAUDE_CONFIG_DIR:-$HOME/.claude}/.caveman-active"
if [ -f "$caveman_flag" ]; then
caveman_mode=$(cat "$caveman_flag" 2>/dev/null)
if [ "$caveman_mode" = "full" ] || [ -z "$caveman_mode" ]; then
caveman_text=$'\033[38;5;172m[CAVEMAN]\033[0m'
else
caveman_suffix=$(echo "$caveman_mode" | tr '[:lower:]' '[:upper:]')
caveman_text=$'\033[38;5;172m[CAVEMAN:'"${caveman_suffix}"$']\033[0m'
fi
fi
Badge examples:
/caveman→[CAVEMAN]/caveman ultra→[CAVEMAN:ULTRA]/caveman wenyan→[CAVEMAN:WENYAN]/caveman-commit→[CAVEMAN:COMMIT]/caveman-review→[CAVEMAN:REVIEW]
How It Works
SessionStart hook ──writes "full"──▶ $CLAUDE_CONFIG_DIR/.caveman-active ◀──writes mode── UserPromptSubmit hook
│
reads
▼
Statusline script
[CAVEMAN:ULTRA] │ ...
SessionStart stdout is injected as hidden system context — Claude sees it, users don't. The statusline runs as a separate process. The flag file is the bridge.
Uninstall
If installed via plugin: disable the plugin — hooks deactivate automatically.
If installed via the standalone Node installer:
npx -y github:JuliusBrussee/caveman -- --uninstall
# or, from a clone:
node bin/install.js --uninstall
Or manually:
- Remove the caveman hook files from
$CLAUDE_CONFIG_DIR/hooks/(default~/.claude/hooks/):caveman-activate.js,caveman-mode-tracker.js,caveman-stats.js,caveman-config.js, andcaveman-statusline.{sh,ps1}. - Remove the SessionStart, UserPromptSubmit, and statusLine entries from
$CLAUDE_CONFIG_DIR/settings.json. - Delete
$CLAUDE_CONFIG_DIR/.caveman-active(and$CLAUDE_CONFIG_DIR/.caveman-statusline-suffixif you ran/caveman-stats).