steve-magne/hookstack
Claude Code hooks catalogue — production-ready hooks for Claude Code, OpenAI Codex & GitHub Copilot. Install in one npx command.
ARCHETYPE
Orchestrator
A bench of specialised subagents. The main agent mostly delegates.
Copy this rig
# review before running: this installs third-party code
$ npx degit steve-magne/hookstack/.claude ./rig-hookstack # 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 steve-magne/hookstack/.claude/skills/analyze-repo .claude/skills/analyze-repo $ npx degit steve-magne/hookstack/.claude/skills/impeccable .claude/skills/impeccable $ npx degit steve-magne/hookstack/.claude/skills/tour-de-controle .claude/skills/tour-de-controle
$ curl -fsSL --create-dirs -o .claude/agents/cli-engineer.md https://raw.githubusercontent.com/steve-magne/hookstack/main/.claude/agents/cli-engineer.md $ curl -fsSL --create-dirs -o .claude/agents/frontend-engineer.md https://raw.githubusercontent.com/steve-magne/hookstack/main/.claude/agents/frontend-engineer.md $ curl -fsSL --create-dirs -o .claude/agents/hook-author.md https://raw.githubusercontent.com/steve-magne/hookstack/main/.claude/agents/hook-author.md $ curl -fsSL --create-dirs -o .claude/agents/okf-librarian.md https://raw.githubusercontent.com/steve-magne/hookstack/main/.claude/agents/okf-librarian.md $ curl -fsSL --create-dirs -o .claude/agents/qa-engineer.md https://raw.githubusercontent.com/steve-magne/hookstack/main/.claude/agents/qa-engineer.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",
"hooks": [
{
"type": "command",
"command": "node $CLAUDE_PROJECT_DIR/.claude/hooks/detect-secrets.mjs"
},
{
"type": "command",
"command": "node $CLAUDE_PROJECT_DIR/.claude/hooks/block-destructive.mjs"
},
{
"type": "command",
"command": "node $CLAUDE_PROJECT_DIR/.claude/hooks/enforce-package-managers.mjs"
},
{
"type": "command",
"command": "node $CLAUDE_PROJECT_DIR/.claude/hooks/block-push-closed-pr.mjs"
},
{
"type": "command",
"command": "node $CLAUDE_PROJECT_DIR/.claude/hooks/block-curl-pipe-sh.mjs"
},
{
"type": "command",
"command": "node $CLAUDE_PROJECT_DIR/.claude/hooks/guard-force-push-any.mjs"
},
{
"type": "command",
"command": "node $CLAUDE_PROJECT_DIR/.claude/hooks/warn-sudo.mjs"
}
]
},
{
"matcher": "Write|Edit",
"hooks": [
{
"type": "command",
"command": "node $CLAUDE_PROJECT_DIR/.claude/hooks/protect-paths.mjs"
},
{
"type": "command",
"command": "node $CLAUDE_PROJECT_DIR/.claude/hooks/protect-lockfiles.mjs"
},
{
"type": "command",
"command": "node $CLAUDE_PROJECT_DIR/.claude/hooks/pre-write-main-guard.mjs"
},
{
"type": "command",
"command": "node $CLAUDE_PROJECT_DIR/.claude/hooks/pre-write-secret-detection.mjs"
},
{
"type": "command",
"command": "node $CLAUDE_PROJECT_DIR/.claude/hooks/block-generated-paths.mjs"
},
{
"type": "command",
"command": "node $CLAUDE_PROJECT_DIR/.claude/hooks/env-gitignore-guard.mjs"
}
]
},
{
"matcher": "Edit|Write",
"hooks": [
{
"type": "command",
"command": "node $CLAUDE_PROJECT_DIR/.claude/hooks/worktree-guard.mjs"
}
]
},
{
"matcher": "WebSearch",
"hooks": [
{
"type": "command",
"command": "node $CLAUDE_PROJECT_DIR/.claude/hooks/websearch-temporal-context.mjs"
}
]
},
{
"matcher": "Read",
"hooks": [
{
"type": "command",
"command": "node $CLAUDE_PROJECT_DIR/.claude/hooks/file-to-markdown.mjs"
},
{
"type": "command",
"command": "node $CLAUDE_PROJECT_DIR/.claude/hooks/pre-read-block-binary.mjs"
},
{
"type": "command",
"command": "node $CLAUDE_PROJECT_DIR/.claude/hooks/pre-read-json-csv-compact.mjs"
},
{
"type": "command",
"command": "node $CLAUDE_PROJECT_DIR/.claude/hooks/pre-read-env-guard.mjs"
}
]
},
{
"matcher": "WebFetch",
"hooks": [
{
"type": "command",
"command": "node $CLAUDE_PROJECT_DIR/.claude/hooks/pre-webfetch-html-to-markdown.mjs"
}
]
},
{
"matcher": "Write",
"hooks": [
{
"type": "command",
"command": "node $CLAUDE_PROJECT_DIR/.claude/hooks/block-huge-write.mjs"
}
]
}
]
}
} Skills (3)
Subagents (5)
| cli-engineer | Ingénieur du CLI Hookstack (packages/cli/, package npm hookstack-cli). Utiliser pour toute évolution du CLI installé par les utilisateurs via npx : scopes d'installation (project/global/copilot/codex- |
| frontend-engineer | Ingénieur front-end Hookstack (Next.js 15 App Router, Tailwind v4, Motion). Utiliser pour créer/modifier des composants React, des pages, le catalogue, le HookConfigurator, des animations, ou toucher |
| hook-author | Auteur de hooks agentiques Hookstack (.claude/hooks/*.mjs). Utiliser pour créer ou modifier un hook du catalogue. Maîtrise le pattern testable run()+DI, le sync vers registry.json (code_snippet dérivé |
| okf-librarian | Bibliothécaire du bundle de connaissance OKF (okf/). À utiliser dès qu'une session a besoin de contexte projet (architecture, vision, marketing, roadmap, conventions) AVANT d'agir. Il lit le bundle da |
| qa-engineer | Spécialiste QA Hookstack. Utiliser en fin d'implémentation pour vérifier un livrable contre ses critères d'acceptation : lancer les tests (vitest), le typecheck, le lint, la validation du registre, le |
Hooks (60)
| event | matcher | runs |
|---|---|---|
| PreToolUse | Bash | node $CLAUDE_PROJECT_DIR/.claude/hooks/detect-secrets.mjs |
| PreToolUse | Bash | node $CLAUDE_PROJECT_DIR/.claude/hooks/block-destructive.mjs |
| PreToolUse | Bash | node $CLAUDE_PROJECT_DIR/.claude/hooks/enforce-package-managers.mjs |
| PreToolUse | Bash | node $CLAUDE_PROJECT_DIR/.claude/hooks/block-push-closed-pr.mjs |
| PreToolUse | Bash | node $CLAUDE_PROJECT_DIR/.claude/hooks/block-curl-pipe-sh.mjs |
| PreToolUse | Bash | node $CLAUDE_PROJECT_DIR/.claude/hooks/guard-force-push-any.mjs |
| PreToolUse | Bash | node $CLAUDE_PROJECT_DIR/.claude/hooks/warn-sudo.mjs |
| PreToolUse | Write|Edit | node $CLAUDE_PROJECT_DIR/.claude/hooks/protect-paths.mjs |
| PreToolUse | Write|Edit | node $CLAUDE_PROJECT_DIR/.claude/hooks/protect-lockfiles.mjs |
| PreToolUse | Write|Edit | node $CLAUDE_PROJECT_DIR/.claude/hooks/pre-write-main-guard.mjs |
| PreToolUse | Write|Edit | node $CLAUDE_PROJECT_DIR/.claude/hooks/pre-write-secret-detection.mjs |
| PreToolUse | Write|Edit | node $CLAUDE_PROJECT_DIR/.claude/hooks/block-generated-paths.mjs |
| PreToolUse | Write|Edit | node $CLAUDE_PROJECT_DIR/.claude/hooks/env-gitignore-guard.mjs |
| PreToolUse | Edit|Write | node $CLAUDE_PROJECT_DIR/.claude/hooks/worktree-guard.mjs |
| PreToolUse | WebSearch | node $CLAUDE_PROJECT_DIR/.claude/hooks/websearch-temporal-context.mjs |
| PreToolUse | Read | node $CLAUDE_PROJECT_DIR/.claude/hooks/file-to-markdown.mjs |
| PreToolUse | Read | node $CLAUDE_PROJECT_DIR/.claude/hooks/pre-read-block-binary.mjs |
| PreToolUse | Read | node $CLAUDE_PROJECT_DIR/.claude/hooks/pre-read-json-csv-compact.mjs |
| PreToolUse | Read | node $CLAUDE_PROJECT_DIR/.claude/hooks/pre-read-env-guard.mjs |
| PreToolUse | WebFetch | node $CLAUDE_PROJECT_DIR/.claude/hooks/pre-webfetch-html-to-markdown.mjs |
| PreToolUse | Write | node $CLAUDE_PROJECT_DIR/.claude/hooks/block-huge-write.mjs |
| UserPromptSubmit | * | node $CLAUDE_PROJECT_DIR/.claude/hooks/inject-conventions.mjs |
| UserPromptSubmit | * | node $CLAUDE_PROJECT_DIR/.claude/hooks/inject-datetime.mjs |
| UserPromptSubmit | * | node $CLAUDE_PROJECT_DIR/.claude/hooks/user-prompt-name-agent.mjs |
| UserPromptSubmit | * | node $CLAUDE_PROJECT_DIR/.claude/hooks/inject-deps-versions.mjs |
| SessionStart | * | node $CLAUDE_PROJECT_DIR/.claude/hooks/load-git-context.mjs |
| SessionStart | * | node $CLAUDE_PROJECT_DIR/.claude/hooks/setup-check-deps.mjs |
| SessionStart | * | node $CLAUDE_PROJECT_DIR/.claude/hooks/session-start-pull-if-main.mjs |
| SessionStart | * | node $CLAUDE_PROJECT_DIR/.claude/hooks/session-start-worktree-if-main.mjs |
| SessionStart | * | node $CLAUDE_PROJECT_DIR/.claude/hooks/session-start-stash-warning.mjs |
Slash commands (2)
/implement/okf
Permissions
deny (0)
—
ask (0)
—
allow (3)
Bash(bash .claude/skills/analyze-repo/scripts/fetch-hook-sources.sh*)
Bash(node .claude/skills/analyze-repo/scripts/*)
Bash(node .claude/sync-hooks.mjs*)
Similar rigs
Anmol-Srv/sigil
Persistent memory for AI coding agents. Local-first. MCP-native. Auto-captured from Claude Code, shared with Cursor, Codex, and any MCP client. Your agents don't remember what you decided yesterday. Sigil does. Every prompt, every session,
Minimalist 223 tok ·
dnsatgit/aigod
Your AI agent workflow is mid. This fixes that. A structured prompt engineering framework for Claude Code. It lives in your git repo as a set of markdown files, JSON configs, and eval templates that give Claude Code consistent behavior, dom
Pragmatist 3.5k tok ·
Mathiew82/minimal-claudeness
A minimal, dependency-free meta-harness for Claude Code.
Pragmatist 2.7k tok ·
SaketMunda/claude-org-template
Drop this into any project and start engineering at AI speed. No setup ceremony. No re-explaining context every session.
Orchestrator 1.4k tok ·