Personal developer tooling: AI-assisted git hooks and Claude Code configuration.
Portable Claude Code setup — global instructions, settings, skills, hooks, commands, and local CLI tools.
# Install on any machine
./claude/install.sh
# Overwrite existing config
./claude/install.sh --forceIncludes:
CLAUDE.md— global defaults (quality bar, work style, succinctness)AGENTS.md— shared agent instructions synced to Claude, Codex, and OpenCode homessettings.json— hooks, plugins, trusted directories- portable skills (
/polish,/verify,/critical-audit,/docs-slop-audit,/tangle-blueprint-expert, etc.) claude-profilein~/bin— switch Claude credentials by named profilegh-drewin~/bin— run GitHub CLI commands only after validating the API account isdrewstone- Langfuse observability hook
Blueprint documentation and copy-audit skills that enforce global agent behavior live here. Blueprint implementation skills that only apply inside one product repo stay with that repo.
Skill inventory and maintenance notes live in claude/skills/README.md. Tool docs live in claude/tools/README.md.
AI-assisted review gates via ai-agent-hooks.
Install the universal fast guards once:
./git/install.shThis sets:
core.hooksPath=/home/drew/code/dotfiles/git/hooksinit.templateDir=/home/drew/code/dotfiles/git/templates
Global baseline behavior:
pre-commit: blocks merge conflict markers and suspicious hard-coded secrets.pre-push: blocks merge conflict markers, suspicious hard-coded secrets, and branches that do not merge cleanly intoorigin/main.
Repos can still opt into stricter review gates with a checked-in .ai-agent-hooks.mjs; that config overrides the global baseline for that repo.
ai-agent-hooks installs reusable pre-commit and pre-push hooks into any Git repository.
Default behavior:
pre-commit- blocks merge conflict markers
- blocks suspicious hard-coded secrets
pre-push- repeats the static guards
- runs a required Codex review gate using
gpt-5.4withmodel_reasoning_effort="high" - requires structured JSON output
- fails closed on invalid output, runner failure, or blocking findings
From a target repository:
pnpm dlx --package /home/drew/code/dotfiles ai-agent-hooks install --init-configThat writes:
.githooks/pre-commit.githooks/pre-push.ai-agent-hooks.mjs
The default Codex review must return structured JSON with:
status:passorfailsummary: short human-readable resultfindings: array of typed findings
Each finding includes:
severity:low | medium | high | criticalcategorytitle- optional
file - optional
line - optional
evidence recommendation
Default blocking policy:
- fail on
high - fail on
critical
Each hook run writes a directory under:
.git/ai-agent-hooks/runs/<timestamp>-<hook>/Expected files for review checks:
summary.json<check>.prompt.txt<check>.diff.patch<check>.changed-files.txt<check>.git-context.json<check>.schema.json<check>.result.json<check>.runner-meta.json<check>.log
This repo is meant to be opinionated, not decorative:
- one enforced default reviewer
- structured output instead of prose-only success
- explicit gating policy
- stable artifacts for auditability
- local tests aligned with the default execution path