~ / rigs / zaffnet / whetstone

zaffnet/whetstone

My macOS setup as a chezmoi repo, a Copier template for Python projects, and the skills and hooks I use with Claude Code, Codex, and Cursor.

↗ GitHub ★ 1 no license updated 3d ago personal setup Claude CodeCodex Claude plugin
share on X
ARCHETYPE
Fort Knox
Deny lists, pre-tool hooks, sandboxing. Nothing touches prod without a signature.
CONTEXT TAX · EVERY TURN
~3.1k tokens
Moderate · median rig: 2.3k · breakdown
GUARDRAILS
4/5
Blocks destructive commands · Pre-tool screening hook · No YOLO mode · Sandbox or ask-first rules · details

Copy this rig

# review before running: this installs third-party code
$ npx degit zaffnet/whetstone/home/dot_claude ./rig-whetstone  # inspect, then merge into .claude/

MCP servers are added to Claude Code at local scope; env vars are shown as YOUR_… placeholders — we never store values. Files are fetched with degit into a separate folder so you can review before merging.

$ npx degit zaffnet/whetstone/skills/a-philosophy-of-software-design .claude/skills/a-philosophy-of-software-design
$ npx degit zaffnet/whetstone/skills/address-pr-comments-sequential .claude/skills/address-pr-comments-sequential
$ npx degit zaffnet/whetstone/skills/clean-architecture .claude/skills/clean-architecture
$ npx degit zaffnet/whetstone/skills/clean-code .claude/skills/clean-code
$ npx degit zaffnet/whetstone/skills/deep-pr-review .claude/skills/deep-pr-review
$ npx degit zaffnet/whetstone/skills/designing-data-intensive-applications .claude/skills/designing-data-intensive-applications
$ npx degit zaffnet/whetstone/skills/domain-driven-design .claude/skills/domain-driven-design
$ npx degit zaffnet/whetstone/skills/implementing-domain-driven-design .claude/skills/implementing-domain-driven-design
$ npx degit zaffnet/whetstone/skills/prose-honesty .claude/skills/prose-honesty
$ npx degit zaffnet/whetstone/skills/simplify-english .claude/skills/simplify-english
$ npx degit zaffnet/whetstone/skills/sync-machine-config-to-repo .claude/skills/sync-machine-config-to-repo
$ npx degit zaffnet/whetstone/skills/teach-me .claude/skills/teach-me
$ npx degit zaffnet/whetstone/skills/writing-whip .claude/skills/writing-whip
$ curl -fsSL --create-dirs -o .claude/agents/code-honesty-auditor.md https://raw.githubusercontent.com/zaffnet/whetstone/main/template/project/.claude/agents/code-honesty-auditor.md
$ curl -fsSL --create-dirs -o .claude/agents/prose-honesty-auditor.md https://raw.githubusercontent.com/zaffnet/whetstone/main/template/project/.claude/agents/prose-honesty-auditor.md
$ curl -fsSL --create-dirs -o .claude/agents/async-safety-reviewer.md https://raw.githubusercontent.com/zaffnet/whetstone/main/agents/async-safety-reviewer.md
$ curl -fsSL --create-dirs -o .claude/agents/code-honesty-auditor.md https://raw.githubusercontent.com/zaffnet/whetstone/main/agents/code-honesty-auditor.md
$ curl -fsSL --create-dirs -o .claude/agents/consumer-agnostic-client-reviewer.md https://raw.githubusercontent.com/zaffnet/whetstone/main/agents/consumer-agnostic-client-reviewer.md
$ curl -fsSL --create-dirs -o .claude/agents/deceptive-test-hunter.md https://raw.githubusercontent.com/zaffnet/whetstone/main/agents/deceptive-test-hunter.md
$ curl -fsSL --create-dirs -o .claude/agents/prose-honesty-auditor.md https://raw.githubusercontent.com/zaffnet/whetstone/main/agents/prose-honesty-auditor.md
$ curl -fsSL --create-dirs -o .claude/agents/variant-extensibility-reviewer.md https://raw.githubusercontent.com/zaffnet/whetstone/main/agents/variant-extensibility-reviewer.md

Merge into .claude/settings.json (project) or ~/.claude/settings.json (user). Hook commands reference scripts in the source repo — copy those too.

{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Bash|Grep",
        "hooks": [
          {
            "type": "command",
            "command": "graphify hook-guard search"
          }
        ]
      },
      {
        "matcher": "Read|Glob",
        "hooks": [
          {
            "type": "command",
            "command": "graphify hook-guard read"
          }
        ]
      },
      {
        "matcher": "*",
        "hooks": [
          {
            "type": "command",
            "command": "~/.config/iterm2/cc-status"
          }
        ]
      }
    ]
  }
}

Skills (13)

Subagents (8)

code-honesty-auditor—
prose-honesty-auditor—
async-safety-reviewerReviews changed Python for async-safety defects in an asyncio stack (FastAPI, asyncpg, httpx AsyncClient, SQLModel AsyncSession). Use after changing any .py file in the project's Python packages. Repo
code-honesty-auditor
model: sonnet
Judges every sentence and clause of the comments, docstrings, and checker suppressions a diff adds against a high bar of usefulness to a later reader. Use before handing a turn back. Reports each part
consumer-agnostic-client-reviewerReviews client libraries (thin wrappers over upstream APIs) and their design docs for consumer coupling: assumptions about who calls them. Use after changing any client source or client design doc. Re
deceptive-test-hunterAudits test changes for deceptive or redundant tests. Use after writing or changing any *_test.py file. Reports tests that only assert their own mock's canned value or that re-check what ruff, mypy, o
prose-honesty-auditor
model: sonnet
Judges every sentence and clause of the prose a diff adds to markdown, text, and HTML files -- READMEs, design docs, ADRs -- against a high bar of usefulness to a later reader. Use before handing a tu
variant-extensibility-reviewerReviews a stack built around a registry of variants (job types, executors, plugins, discriminated unions) for whether a new variant can be added without core surgery. Use after changing any registry,

Hooks (20)

eventmatcherruns
PreToolUseBash|Grepgraphify hook-guard search
PreToolUseRead|Globgraphify hook-guard read
PreToolUse*~/.config/iterm2/cc-status
PostToolUse*~/.config/iterm2/cc-status
SessionStart*if [ -n "$CLAUDE_ENV_FILE" ] && [ -f "$CLAUDE_PROJECT_DIR/.venv/bin/activate" ]; then printf 'export VIRTUAL_ENV="%s/.venv"\nexport PATH="%s/.venv/bin:$PATH"\n' "$CLAUDE_PROJECT_DIR" "$CLAUDE_PROJECT_DIR" >> "$CLAUDE_ENV_FILE"; fi
SessionStart*~/.config/iterm2/cc-status
Notificationpermission_promptafplay /System/Library/Sounds/Glass.aiff
Notificationelicitation_dialogafplay /System/Library/Sounds/Glass.aiff
Notificationidle_promptafplay /System/Library/Sounds/Glass.aiff
Notification*~/.config/iterm2/cc-status
Stop*bash "$HOME/.agents/hooks/typecheck.sh"
Stop*afplay /System/Library/Sounds/Funk.aiff
Stop*~/.config/iterm2/cc-status
StopFailure*afplay /System/Library/Sounds/Sosumi.aiff
StopFailure*~/.config/iterm2/cc-status
PermissionRequest*~/.config/iterm2/cc-status
SessionEnd*~/.config/iterm2/cc-status
SubagentStop*~/.config/iterm2/cc-status
UserPromptSubmit*~/.config/iterm2/cc-status
Stop*bash "$CLAUDE_PROJECT_DIR/.claude/hooks/typecheck.sh"

Plugins (6)

github@claude-plugins-officialpyright-lsp@claude-plugins-officialwhetstone-hooks@whetstonewhetstone-skills@whetstonewhetstone-reviewers@whetstoneevals@ai-evals-course

Similar rigs

copied ✓