Skip to content

Repository files navigation

claude-code-setup

My personal Claude Code configuration — operating notes (CLAUDE.md), status line, commands, skills, hooks, and settings. Clone it on any machine and run one script to get the same setup.

[Fable · high] 🟢 14% (142K/1000K) | 📁 evex-backend | 🌿 master | ⏱️ Jun 8, 9:14am

Quick install

git clone https://github.com/mattkuda/claude-code-setup.git
cd claude-code-setup
./install.sh

Then restart Claude Code so it reloads ~/.claude/settings.json.

The installer copies files into ~/.claude/. It will not overwrite an existing settings.json or .mcp.json — those get seeded only on a fresh install.

What's inside

Path What it is
CLAUDE.md Global operating notes — model-delegation policy (Fable orchestrates → Sonnet implements → Opus escalates) + response formatting
settings.example.json Template for ~/.claude/settings.json — hooks, statusline, env vars, plugins
mcp.example.json Template for ~/.claude/.mcp.json — MCP servers (Supabase etc.)
statusline/statusline.sh Bash script that renders the status line
commands/ Slash commands (/review-branch)
skills/ Skills (grill-me, html-spec)
hooks/ Stop hooks (mirror-ai-title.sh — auto-populates the session title; stop-sound-main-only.sh — chimes only on the main agent, not sub-agents)
install.sh Copies everything into ~/.claude/

Status line

statusline/statusline.sh reads JSON on stdin from Claude Code and prints:

[Model · effort] <colored dot> <context %> (<tokens used>/<context size>) | 📁 cwd | 🌿 branch | ⏱️ last message time

  • 🟢 < 60% context, 🟡 60–80%, 🔴 ≥ 80%
  • The right segment shows the absolute time of your last sent message, read from the session transcript (transcript_path) — the last entry you typed, ignoring tool results — formatted like Jun 8, 9:14am. It's deliberately absolute, not relative (13m ago): the status line only re-renders on Claude Code's refresh cadence, so a relative value freezes when you switch away and come back, whereas an absolute timestamp stays correct with nothing to update. Falls back to a per-session tmpfile in ~/.claude/statusline/ if the transcript isn't readable.
  • Git branch only shows when the cwd is inside a repo

Wired up in settings via:

"statusLine": {
  "type": "command",
  "command": "$HOME/.claude/statusline/statusline.sh"
}

Hooks

hooks/mirror-ai-title.sh is a Stop hook that copies Claude Code's native ai-title into the session's displayed custom-title, so the title chip auto-populates without a manual /rename. It makes no LLM call — it only mirrors the title Claude already generated — keeps no state/marker files, and respects a manual /rename (it backs off if the current title was never one of Claude's ai-titles, and otherwise keeps the chip in sync as the ai-title evolves). Requires jq. Wired up in settings.example.json as a second Stop hook.

hooks/stop-sound-main-only.sh is the Stop-sound wrapper. Claude Code converts a Stop hook to SubagentStop for sub-agents, so a plain sound hook chimes once per sub-agent. This wrapper checks the hook payload for an agent_id (present only inside a sub-agent / teammate call) and stays silent for those — so with the delegation workflow you hear one chime, when the main agent finishes and it's your turn. Uses jq if present, else a grep fallback.

Notable settings

  • Stop / Notification hooks play Glass.aiff when the main agent finishes a turn or needs permission — handy when working in another window. The Stop sound is gated to the main agent only (stop-sound-main-only.sh), so parallel sub-agents don't each chime.
  • CLAUDE_CODE_EFFORT=high (plus effort / effortLevel) — high is the sweet spot; xhigh/max tend to overthink simple steps and cost more without better results.
  • defaultMode: bypassPermissions + dangerously-skip-permissions: true skip most permission prompts. Read these before installing — they trade safety for speed. Remove them if you'd rather be prompted before destructive tool calls.
  • Plugins: frontend-design, swift-lsp, feature-dev, superpowers (official); andrej-karpathy-skills (from forrestchang/andrej-karpathy-skills); warp (from warpdotdev/claude-code-warp).

Operating notes (CLAUDE.md)

CLAUDE.md loads into every session as always-on guidance. It sets a delegation policy — the main model (Fable / Opus) orchestrates and plans, spawns Sonnet sub-agents for the actual implementation, and escalates to Opus only when Sonnet's output misses the bar — plus a response-formatting convention. No plugin or custom agents required; sub-agents are spun up on the fly.

Updating

After pulling new commits, re-run ./install.sh to push the latest commands/skills/hooks/statusline into ~/.claude/. Your local settings.json, .mcp.json, and CLAUDE.md are left untouched — diff them against the repo versions manually if you want to pull in new defaults.

License

MIT.

About

My personal Claude Code setup — status line, agents, commands, skills, and settings. One script to install on any machine.

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages