~ / rigs / steve-magne / hookstack

steve-magne/hookstack

Claude Code hooks catalogue — production-ready hooks for Claude Code, OpenAI Codex & GitHub Copilot. Install in one npx command.

↗ GitHub ★ 7 mit updated 1mo ago project Claude CodeCodex
share on X
ARCHETYPE
Orchestrator
A bench of specialised subagents. The main agent mostly delegates.
CONTEXT TAX · EVERY TURN
~9.0k tokens
Heavy · median rig: 2.3k · breakdown
GUARDRAILS
3/5
Blocks destructive commands · Pre-tool screening hook · No YOLO mode · details

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-engineerIngé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-engineerIngé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-authorAuteur 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-librarianBibliothé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-engineerSpé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)

eventmatcherruns
PreToolUseBashnode $CLAUDE_PROJECT_DIR/.claude/hooks/detect-secrets.mjs
PreToolUseBashnode $CLAUDE_PROJECT_DIR/.claude/hooks/block-destructive.mjs
PreToolUseBashnode $CLAUDE_PROJECT_DIR/.claude/hooks/enforce-package-managers.mjs
PreToolUseBashnode $CLAUDE_PROJECT_DIR/.claude/hooks/block-push-closed-pr.mjs
PreToolUseBashnode $CLAUDE_PROJECT_DIR/.claude/hooks/block-curl-pipe-sh.mjs
PreToolUseBashnode $CLAUDE_PROJECT_DIR/.claude/hooks/guard-force-push-any.mjs
PreToolUseBashnode $CLAUDE_PROJECT_DIR/.claude/hooks/warn-sudo.mjs
PreToolUseWrite|Editnode $CLAUDE_PROJECT_DIR/.claude/hooks/protect-paths.mjs
PreToolUseWrite|Editnode $CLAUDE_PROJECT_DIR/.claude/hooks/protect-lockfiles.mjs
PreToolUseWrite|Editnode $CLAUDE_PROJECT_DIR/.claude/hooks/pre-write-main-guard.mjs
PreToolUseWrite|Editnode $CLAUDE_PROJECT_DIR/.claude/hooks/pre-write-secret-detection.mjs
PreToolUseWrite|Editnode $CLAUDE_PROJECT_DIR/.claude/hooks/block-generated-paths.mjs
PreToolUseWrite|Editnode $CLAUDE_PROJECT_DIR/.claude/hooks/env-gitignore-guard.mjs
PreToolUseEdit|Writenode $CLAUDE_PROJECT_DIR/.claude/hooks/worktree-guard.mjs
PreToolUseWebSearchnode $CLAUDE_PROJECT_DIR/.claude/hooks/websearch-temporal-context.mjs
PreToolUseReadnode $CLAUDE_PROJECT_DIR/.claude/hooks/file-to-markdown.mjs
PreToolUseReadnode $CLAUDE_PROJECT_DIR/.claude/hooks/pre-read-block-binary.mjs
PreToolUseReadnode $CLAUDE_PROJECT_DIR/.claude/hooks/pre-read-json-csv-compact.mjs
PreToolUseReadnode $CLAUDE_PROJECT_DIR/.claude/hooks/pre-read-env-guard.mjs
PreToolUseWebFetchnode $CLAUDE_PROJECT_DIR/.claude/hooks/pre-webfetch-html-to-markdown.mjs
PreToolUseWritenode $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

copied ✓