howiclaudearmorycommon build

the rig

r/wkbefwky

CommonUnrated

Bind on Pickupanonymous

Item Level · this rig hasn’t been appraised yet (run the analyze prompt)

configClaude Code 2.1.144OpusiTerm2

claude‑ing sinceFeb 2025

[ Get the rig card → ]Download PNG
  • KeyboardLogitech MX Keyboard
  • PointerLogitech MX Master
  • Displays27" + 13" laptop2 screens
  • MicAirPods Proon a boom arm
  • AudioAirPods Proearbuds
  • RigMacBook Air M3 · 16GBsitting desk

gear names link out — affiliate links — howiclaude may earn a commission

  • Augment:frontend-designplugin
  • Augment:superpowersplugin
  • Augment:swift-lspplugin
  • Augment:claude-md-managementplugin
  • Augment:skill-creatorplugin
  • Augment:feature-devplugin
  • Augment:claude-code-setupplugin
  • Attuned:GmailGmail: Search/draft Gmail from inside Claude — kills the mid-session context switch.
  • Use:Claude from CLI
  • Burns 2,350,112,463 tokens per month (~2.4B)
  • Inspected 0 times

No achievements unlocked yet — this rig hasn’t earned any badges.

2.35B tokens/mo, almost all Opus, mostly dictated

their statusline

┌ claude (fullscreen TUI) ──────────┐
│ session badge · branch · PR · ctx │
│                                   │
│        terminal canvas            │
│                                   │
└───────────────────────────────────┘

how the panes are tiled

▸ a couple of their prompts — running

> [hold] OK so this is a Next.js project, we want a card-deck nav that supports keyboard and swipe, lives in src/components/RigDeckNav, wires up on routes that arrive with ?from=feed [release] Listening… (0.8s)Reading existing nav components for conventions…Glob() ⎿ src/components/**/Nav*.tsxRead(src/components/RigPageV2/Masthead.tsx)Two component patterns found — I'll match the RigPageV2 conventions. Plan ready.
> rewrite RigDeckNav to support touch swipe Triggering hook… (0.2s)Badge: 'rewrite RigDeckNav to support touch swipe' Haiku refining label… (2.4s)Badge: 'Touch swipe for RigDeckNav'
inspect: the full config — 9 sections · 31 cards9 sections · 31 cards · every one exportable
a self-contained prompt — paste it into your Claude Code to install the lot

TL;DR

2.35B tokens/mo, almost all Opus, mostly dictated

MacBook Air M3 + a Dell 5K. Voice-hold dictation into Opus on xhigh, defaultMode:auto, skipAutoPermissionPrompt. 79 sessions a week, peak 9–11pm. Custom statusline + an async-Haiku badge updater that re-labels each session as I work. The Tinkerer / Night-Shift profile.

How I actually work

A typical session

I open a worktree, hold the voice key, brief the agent like a colleague. xhigh + auto mode means it runs end-to-end without polite check-ins. The statusline tells me what session I'm in, what the agent is on, and how close I am to the 5h limit. 11/day across ~14 projects.

Voice-hold dictation on Opus

#voice-dictation

Typing is the bottleneck on a long brief. Hold the key, talk like you're walking a colleague through it, release. Opus xhigh fills in the typing-quality gap.

> [hold] OK so this is a Next.js project, we want a card-deck nav that supports keyboard and swipe, lives in src/components/RigDeckNav, wires up on routes that arrive with ?from=feed [release] Listening… (0.8s)Reading existing nav components for conventions…Glob() ⎿ src/components/**/Nav*.tsxRead(src/components/RigPageV2/Masthead.tsx)Two component patterns found — I'll match the RigPageV2 conventions. Plan ready.

Night shift (9pm–11pm peak)

#night-shift

The house is quiet, the inbox is closed, and Opus is in a steady cadence. The longest streak (24 days) was built one 10pm session at a time.

Config that matters

xhigh + auto + skipAutoPermissionPrompt

Why it's there: The 'just let it cook' triplet. effortLevel:xhigh for plan quality, defaultMode:auto to skip the polite check-ins, skipAutoPermissionPrompt to remove the prompt-on-first-tool dialog. Pair with a tight allow/deny list so the autonomy doesn't bite.

~/.claude/settings.json
{
  "effortLevel": "xhigh",
  "permissions": { "defaultMode": "auto" },
  "skipAutoPermissionPrompt": true
}
requires Claude Code 2.1+

Voice hold-mode

Why it's there: The voice-key acts like a push-to-talk radio. Hold → speak → release inserts the transcription as your prompt. Removes the typing latency from long briefs.

~/.claude/settings.json
{
  "voice": { "enabled": true, "mode": "hold" }
}
requires Claude Code 2.1+requires mic permissions

editorMode: normal (vim) + fullscreen TUI

Why it's there: Normal-mode keybindings in the prompt input + fullscreen TUI to take over the terminal. The session name carries the work label so I know which window I'm in.

~/.claude/settings.json
{
  "editorMode": "normal",
  "tui": "fullscreen"
}
requires Claude Code 2.0+

Tight allow/deny list under defaultMode:auto

Why it's there: auto-mode is reckless without a deny list. Allow the common safe Bash verbs + scoped Read/Write/Edit; hard-deny destructive git + rm -rf + sudo.

~/.claude/settings.json
{
  "permissions": {
    "allow": [
      "WebFetch", "WebSearch", "Read",
      "Edit(~/Documents/projects/**)",
      "Write(~/Documents/projects/**)",
      "Bash(git *)", "Bash(gh *)", "Bash(npm *)", "Bash(npx *)",
      "Bash(node *)", "Bash(open *)", "Bash(ls *)", "Bash(cat *)",
      "Bash(mkdir *)", "Bash(cp *)", "Bash(mv *)",
      "Bash(pwd)", "Bash(which *)", "Bash(echo *)",
      "Bash(wc *)", "Bash(head *)", "Bash(tail *)",
      "Bash(sort *)", "Bash(curl *)"
    ],
    "deny": [
      "Bash(git push --force *)",
      "Bash(git push -f *)",
      "Bash(git reset --hard *)",
      "Bash(rm -rf *)",
      "Bash(sudo *)"
    ],
    "defaultMode": "auto"
  }
}
requires Claude Code 2.0+

Stop hook → afplay Tink

Why it's there: A single short chime when the agent stops talking. Trains you that 'silence then Tink = your turn'. Nothing fancier.

~/.claude/settings.json
{
  "hooks": {
    "Stop": [{
      "matcher": "",
      "hooks": [{
        "type": "command",
        "command": "[ -z \"${_LIVED_BADGE_HOOK:-}\" ] && afplay /System/Library/Sounds/Tink.aiff &"
      }]
    }]
  }
}
requires macOS

Async-Haiku iTerm badge updater (the centerpiece)

Why it's there: UserPromptSubmit hook writes the user's prompt as the iTerm badge immediately (instant feedback), then fires a background Haiku call that returns a 3–6 word topic phrase and overwrites the badge. statusline.sh reads the per-session file every tick and pushes OSC 1337 SetBadgeFormat to the terminal. Net effect: the watermark on the top-right of each session tracks the work as it evolves. Cost: pennies/month. Recursion guard via _LIVED_BADGE_HOOK so the Haiku subprocess doesn't re-fire the hook.

~/.claude/hooks/badge-update.sh
#!/bin/bash
# Recursion guard: the Haiku call below is itself a `claude -p` which fires hooks.
[ -n "${_LIVED_BADGE_HOOK:-}" ] && exit 0

input=$(cat)
prompt=$(printf '%s' "$input" | jq -r '.prompt // empty')
session_id=$(printf '%s' "$input" | jq -r '.session_id // empty')
[ -z "$session_id" ] && exit 0

state_file="$HOME/.claude/badge-state/$session_id"
mkdir -p "$(dirname "$state_file")"

clean=$(printf '%s' "$prompt" | tr '\n\t' '  ' | sed 's/^[^[:alnum:]]*//; s/[[:space:]]\{2,\}/ /g')
[ "${#clean}" -lt 12 ] && exit 0

# 1) Immediate: write the truncated prompt as the label.
printf '%s' "${clean:0:60}" > "$state_file"
requires macOSrequires iTerm2requires jqrequires Claude Code 2.0+
> rewrite RigDeckNav to support touch swipe Triggering hook… (0.2s)Badge: 'rewrite RigDeckNav to support touch swipe' Haiku refining label… (2.4s)Badge: 'Touch swipe for RigDeckNav'

Rich statusline + iTerm badge/tab integration

Why it's there: One bar shows everything that matters per tick: session name, worktree purpose (with a ⚠MAIN warning if you're NOT in a worktree), branch, PR state (cached 60s via gh), context % dot, 5h rate dot + reset countdown, sandbox/remote flags. Also pushes OSC 1337 SetBadgeFormat + OSC 1 tab title to the terminal so each tab is identifiable at a glance. Falls back from /dev/tty to the parent's ttys### when the statusline subprocess has no controlling terminal — the part that makes the badge actually show reliably.

~/.claude/statusline.sh
# (excerpt — the file is ~200 lines; the trick is the OSC + parent-tty fallback)
if [ "${TERM_PROGRAM:-}" = "iTerm.app" ]; then
  badge_b64=$(printf '%s' "$badge_label" | base64)
  term_dev=""
  if { : > /dev/tty; } 2>/dev/null; then
    term_dev="/dev/tty"
  else
    # statusline subprocess often has no controlling tty — fall back to parent's.
    ppid_tty=$(ps -o tty= -p "${PPID:-0}" | tr -d ' ')
    case "$ppid_tty" in
      ttys*|tty*) [ -w "/dev/$ppid_tty" ] && term_dev="/dev/$ppid_tty" ;;
    esac
  fi
  [ -n "$term_dev" ] && {
    printf '\e]1337;SetBadgeFormat=%s\a' "$badge_b64" > "$term_dev"
    printf '\e]1;%s\a' "$session_label" > "$term_dev"
  }
fi
requires macOSrequires iTerm2requires jqrequires gh

remoteControlAtStartup + agentPushNotifEnabled

Why it's there: Remote-control opens the door to controlling sessions from the phone; push notifs page me when a long agent run finishes. Lets the night-shift cadence keep working when I'm not staring at the screen.

~/.claude/settings.json
{
  "remoteControlAtStartup": true,
  "agentPushNotifEnabled": true
}
requires Claude Code 2.1+

Plugins enabled

frontend-design

Why it's there: Distinctive frontend output — used heavily on the howiclaude rig-page redesign.

superpowers (5.1.0)

Why it's there: Brainstorming, TDD, systematic-debugging, writing-plans — the discipline rails.

swift-lsp

Why it's there: Swift work outside this repo.

claude-md-management

Why it's there: Periodic CLAUDE.md audits + the revise-claude-md command.

skill-creator

Why it's there: Building / editing custom skills.

feature-dev

Why it's there: code-architect / code-explorer / code-reviewer subagents.

claude-code-setup

Why it's there: Automation recommender + setup helpers.

My CLAUDE.md

I don't keep a global CLAUDE.md

No `~/.claude/CLAUDE.md` at all. Project-level CLAUDE.md files do the heavy lifting (this howiclaude repo's is dense and load-bearing: principles + build order + memory pointers). The opinion: global rules drift and become noise; per-project context is where the rationale + history live.

Stack & MCP

Gmail (MCP)

Why it's there: Search threads, draft replies, label triage from inside Claude — kills the context-switch cost of jumping back to mail mid-session.

requires Claude.ai Gmail MCP connector

On the desk

MacBook Air M3 · 16GB

Why it's there: Yes, on an Air. The Air is enough — Claude does the heavy lifting in the datacenter. The constraint forces tight session hygiene + worktree discipline.

Dell U2720Q 5K (main display)

Why it's there: 27" 5K at 2560×1440 UI scale. One big canvas: editor + statusline + terminal all visible at once; no window-shuffling between context-switches.

Logitech MX Keyboard + MX Master mouse

Why it's there: MX Master scroll wheel + back/forward buttons are worth real money for fast file navigation. The MX keyboard's quiet keys matter on the night shift.

AirPods Pro (mic + headphones)

Why it's there: Voice-hold dictation goes through the AirPods mic. The noise-canceling means the household can be loud without it bleeding into the transcription.

Stats (113-day window from local JSONL)

2,350,112,463 tokens / month

Why it's there: Scaled from the 113-day window. Dollar figure stays private.

1,286 sessions · 79.7/week

Why it's there: ≈11 sessions a day across ~14 projects. The rhythm is project-switching, not single-flow.

94.2% Opus · 2.4% Sonnet · 3.5% Haiku

Why it's there: Opus does the work, Haiku does the background labels (badge updater), Sonnet barely appears. The price tag is the trade — bought back in throughput.

Peak 9pm–11pm

Why it's there: Hour-of-start buckets: 21h=158, 22h=146, 20h=119, 19h=97. The Night Shift signature is unambiguous.

Longest streak: 24 days

Why it's there: Built one 10pm session at a time. Current streak: 5 days.

Why this setup

The bet: high-quality model + minimal friction > everything else

Opus xhigh costs more, auto-mode is risky, dictation feels weird at first. The combined effect is that the marginal cost of starting a session is near-zero — voice key down, brief, voice key up, done. That's what makes 79 sessions a week sustainable.