npx claudepluginhub marvinrichter/clarc --plugin clarcDefined in hooks/hooks.json
{
"Stop": [
{
"hooks": [
{
"type": "command",
"command": "node \"${CLAUDE_PLUGIN_ROOT}/scripts/hooks/response-dashboard.js\""
}
],
"matcher": "*",
"description": "Response dashboard: shows tools used, agents invoked, and estimated cost after each response. Disable: CLARC_RESPONSE_DASHBOARD=false or .clarc/hooks-config.json {response_dashboard: false}"
},
{
"hooks": [
{
"type": "command",
"command": "node \"${CLAUDE_PLUGIN_ROOT}/scripts/hooks/check-console-log.js\""
}
],
"matcher": "*",
"description": "Check for console.log in modified files after each response"
}
],
"PreCompact": [
{
"hooks": [
{
"type": "command",
"command": "node \"${CLAUDE_PLUGIN_ROOT}/scripts/hooks/pre-compact.js\""
}
],
"matcher": "*",
"description": "Save state before context compaction"
}
],
"PreToolUse": [
{
"hooks": [
{
"type": "command",
"command": "node \"${CLAUDE_PLUGIN_ROOT}/scripts/hooks/pre-bash-dispatch.js\""
}
],
"matcher": "Bash",
"description": "Bash pre-checks: block dev servers outside tmux, tmux reminder for long-running commands, git push review reminder"
},
{
"hooks": [
{
"type": "command",
"command": "node \"${CLAUDE_PLUGIN_ROOT}/scripts/hooks/doc-file-warning.js\""
}
],
"matcher": "Write",
"description": "Doc file warning: warn about non-standard documentation files (exit code 0; warns only)"
},
{
"hooks": [
{
"type": "command",
"command": "node \"${CLAUDE_PLUGIN_ROOT}/scripts/hooks/pre-write-secret-scan.js\""
}
],
"matcher": "Write",
"description": "Pre-write secret scan: blocks Write if tool_input.content contains secrets (AWS keys, GH tokens, PEM headers, Slack tokens, api_key/token=). Exit 2 to abort."
},
{
"hooks": [
{
"type": "command",
"async": true,
"command": "node \"${CLAUDE_PLUGIN_ROOT}/scripts/hooks/suggest-compact.js\"",
"timeout": 5
}
],
"matcher": "Edit|Write",
"description": "Suggest manual compaction at logical intervals"
},
{
"hooks": [
{
"type": "command",
"command": "node \"${CLAUDE_PLUGIN_ROOT}/scripts/hooks/budget-guard.js\""
}
],
"matcher": "Agent",
"description": "Budget guard: warn if daily spend > CLAUDE_COST_WARN ($5 default), block if > CLAUDE_BUDGET_LIMIT ($20 default). Runs before Agent tool calls (most expensive tool)."
}
],
"SessionEnd": [
{
"hooks": [
{
"type": "command",
"command": "node \"${CLAUDE_PLUGIN_ROOT}/scripts/hooks/session-end.js\""
}
],
"matcher": "*",
"description": "Persist session state on end"
},
{
"hooks": [
{
"type": "command",
"command": "node \"${CLAUDE_PLUGIN_ROOT}/scripts/hooks/evaluate-session.js\""
}
],
"matcher": "*",
"description": "Evaluate session for extractable patterns"
},
{
"hooks": [
{
"type": "command",
"async": true,
"command": "node \"${CLAUDE_PLUGIN_ROOT}/scripts/instinct-decay.js\"",
"timeout": 15
}
],
"matcher": "*",
"description": "instinct-decay-runner: weekly confidence decay for stale instincts (no-op if decay ran within 6 days)"
}
],
"PostToolUse": [
{
"hooks": [
{
"type": "command",
"async": true,
"command": "node \"${CLAUDE_PLUGIN_ROOT}/scripts/hooks/agent-tracker.js\"",
"timeout": 5
}
],
"matcher": "Agent",
"description": "Agent tracker: log agent invocations to ~/.clarc/agent-log.jsonl for /agent-stats analytics"
},
{
"hooks": [
{
"type": "command",
"command": "node \"${CLAUDE_PLUGIN_ROOT}/scripts/hooks/auto-checkpoint.js\"",
"timeout": 15
}
],
"matcher": "Edit|Write",
"description": "Auto-checkpoint: create a lightweight git checkpoint after every Edit/Write for /undo support. Runs synchronously before format-dispatch to avoid async race."
},
{
"hooks": [
{
"type": "command",
"command": "node \"${CLAUDE_PLUGIN_ROOT}/scripts/hooks/pr-url-logger.js\""
}
],
"matcher": "Bash",
"description": "Log PR URL and provide review command after PR creation"
},
{
"hooks": [
{
"type": "command",
"async": true,
"command": "node \"${CLAUDE_PLUGIN_ROOT}/scripts/hooks/post-edit-format-dispatch.js\"",
"timeout": 10
}
],
"matcher": "Edit|Write",
"description": "Auto-format + console.log check after edits/writes: JS/TS (Biome/Prettier), Python (ruff), Go (goimports/gofmt), Java (google-java-format/spotless), Swift (swift-format/swiftformat), Rust (rustfmt)"
},
{
"hooks": [
{
"type": "command",
"command": "node \"${CLAUDE_PLUGIN_ROOT}/scripts/hooks/system-health-check.js\""
}
],
"matcher": "Edit|Write",
"description": "System health check after editing agents/skills/commands: verifies frontmatter, cross-references, and naming conventions"
},
{
"hooks": [
{
"type": "command",
"async": true,
"command": "node \"${CLAUDE_PLUGIN_ROOT}/scripts/hooks/post-edit-workflow-nudge.js\"",
"timeout": 5
}
],
"matcher": "Edit|Write",
"description": "Workflow nudges after code edits: security-scan, code-review, doc-update, tdd-guard. Suppressible via .clarc/hooks-config.json"
},
{
"hooks": [
{
"type": "command",
"async": true,
"command": "node \"${CLAUDE_PLUGIN_ROOT}/scripts/hooks/build-failure-router.js\"",
"timeout": 5
}
],
"matcher": "Bash",
"description": "Build failure router: detects compile/type errors in Bash output and suggests build-error-resolver agent"
},
{
"hooks": [
{
"type": "command",
"async": true,
"command": "node \"${CLAUDE_PLUGIN_ROOT}/scripts/hooks/post-edit-typecheck.js\"",
"timeout": 30
}
],
"matcher": "Edit|Write",
"description": "TypeScript check after editing or writing .ts/.tsx files (timeout: 30s)"
},
{
"hooks": [
{
"type": "command",
"async": true,
"command": "node \"${CLAUDE_PLUGIN_ROOT}/scripts/hooks/post-edit-typecheck-rust.js\"",
"timeout": 60
}
],
"matcher": "Edit",
"description": "Rust cargo check after editing .rs files (timeout: 60s)"
},
{
"hooks": [
{
"type": "command",
"async": true,
"command": "${CLAUDE_PLUGIN_ROOT}/skills/continuous-learning-v2/hooks/observe.sh",
"timeout": 10
}
],
"matcher": "Edit|Write|Bash",
"description": "Capture tool use results for continuous learning"
}
],
"Notification": [
{
"hooks": [
{
"type": "command",
"command": "node \"${CLAUDE_PLUGIN_ROOT}/scripts/hooks/notification-handler.js\""
}
],
"matcher": "*",
"description": "Log notifications and suggest /compact on context pressure"
}
],
"SessionStart": [
{
"hooks": [
{
"type": "command",
"command": "node \"${CLAUDE_PLUGIN_ROOT}/scripts/hooks/session-start.js\""
}
],
"matcher": "*",
"description": "Load previous context and detect package manager on new session"
},
{
"hooks": [
{
"type": "command",
"command": "node \"${CLAUDE_PLUGIN_ROOT}/scripts/hooks/context-banner.js\""
}
],
"matcher": "*",
"description": "Context-aware banner: shows top 3 relevant clarc commands for detected project stack. Once per day, suppressible via .clarc/config.json"
}
]
}"{\"riskFlags\": {\"touchesBash\": true, \"matchAllTools\": false, \"touchesFileWrites\": true}, \"typeStats\": {\"command\": 24}, \"eventStats\": {\"Stop\": 2, \"PreCompact\": 1, \"PreToolUse\": 5, \"SessionEnd\": 3, \"PostToolUse\": 10, \"Notification\": 1, \"SessionStart\": 2}, \"originCounts\": {\"absolutePaths\": 0, \"pluginScripts\": 24, \"projectScripts\": 0}, \"timeoutStats\": {\"commandsWithoutTimeout\": 14}}"