{ "description": "InkStone Environment Plugin (ISEP) —— leo 的 Claude Code 環境唯一真相源:所有機械閘、slash command、skill、腳本。本機與雲端裝同一份,總管自己也吃它(dogfood)。", "hooks": { "PreToolUse": [ { "matcher": "Bash", "hooks": [ { "type": "command", "command": "${CLAUDE_PLUGIN_ROOT}/hooks/github-contact-guard.sh" }, { "type": "command", "command": "${CLAUDE_PLUGIN_ROOT}/hooks/kbdb-api-wall-guard.sh" }, { "type": "command", "command": "${CLAUDE_PLUGIN_ROOT}/hooks/stage-before-prod-guard.sh" }, { "type": "command", "command": "${CLAUDE_PLUGIN_ROOT}/hooks/main-and-prod-push-guard.sh" }, { "type": "command", "command": "${CLAUDE_PLUGIN_ROOT}/hooks/prod-write-guard.sh" }, { "type": "command", "command": "${CLAUDE_PLUGIN_ROOT}/hooks/not-my-branch-guard.sh" }, { "type": "command", "command": "${CLAUDE_PLUGIN_ROOT}/hooks/leo21c-write-guard.sh" }, { "type": "command", "command": "${CLAUDE_PLUGIN_ROOT}/hooks/release-tag-guard.sh" }, { "type": "command", "command": "${CLAUDE_PLUGIN_ROOT}/hooks/ticket-api-bypass-guard.sh" }, { "type": "command", "command": "${CLAUDE_PLUGIN_ROOT}/hooks/comment-carries-task-guard.sh" }, { "type": "command", "command": "${CLAUDE_PLUGIN_ROOT}/hooks/milestone-due-guard.sh" }, { "type": "command", "command": "${CLAUDE_PLUGIN_ROOT}/hooks/milestone-account-guard.sh" }, { "type": "command", "command": "${CLAUDE_PLUGIN_ROOT}/hooks/reply-identity-guard.sh" }, { "type": "command", "command": "${CLAUDE_PLUGIN_ROOT}/hooks/search-is-not-proof-guard.sh" } ] }, { "matcher": ".*(arcrun_push_workflow|arcrun_delete_workflow|arcrun_recipe_push|arcrun_recipe_delete|arcrun_create_tag|arcrun_delete_tag|arcrun_tag_resource|arcrun_untag_resource|kbdb_create_record|kbdb_create_template).*", "hooks": [ { "type": "command", "command": "${CLAUDE_PLUGIN_ROOT}/hooks/prod-write-guard.sh" } ] }, { "matcher": "Write|Edit|MultiEdit", "hooks": [ { "type": "command", "command": "${CLAUDE_PLUGIN_ROOT}/hooks/guard-cross-project.sh" }, { "type": "command", "command": "${CLAUDE_PLUGIN_ROOT}/hooks/wiki-secret-scan.sh" }, { "type": "command", "command": "${CLAUDE_PLUGIN_ROOT}/hooks/component-guard.sh" }, { "type": "command", "command": "${CLAUDE_PLUGIN_ROOT}/hooks/sdd-guard.sh" }, { "type": "command", "command": "${CLAUDE_PLUGIN_ROOT}/hooks/credential-only-guard.sh" }, { "type": "command", "command": "${CLAUDE_PLUGIN_ROOT}/hooks/arcrun-intent-guard.sh" }, { "type": "command", "command": "${CLAUDE_PLUGIN_ROOT}/hooks/kbdb-api-wall-guard.sh" }, { "type": "command", "command": "${CLAUDE_PLUGIN_ROOT}/hooks/subagent-first-guard.sh" }, { "type": "command", "command": "${CLAUDE_PLUGIN_ROOT}/hooks/mistake-needs-ticket-guard.sh" }, { "type": "command", "command": "${CLAUDE_PLUGIN_ROOT}/hooks/pending-changes-retired.sh" } ] }, { "matcher": "Grep|Glob|Read|Bash", "hooks": [ { "type": "command", "command": "${CLAUDE_PLUGIN_ROOT}/hooks/wiki-first-search.sh" } ] }, { "matcher": "Task", "hooks": [ { "type": "command", "command": "${CLAUDE_PLUGIN_ROOT}/hooks/subagent-wiki-guard.sh" }, { "type": "command", "command": "${CLAUDE_PLUGIN_ROOT}/hooks/kbdb-api-wall-guard.sh" }, { "type": "command", "command": "${CLAUDE_PLUGIN_ROOT}/hooks/micromanage-guard.sh" }, { "type": "command", "command": "${CLAUDE_PLUGIN_ROOT}/hooks/irreversible-dispatch-guard.sh" }, { "type": "command", "command": "${CLAUDE_PLUGIN_ROOT}/hooks/no-ticket-no-dispatch.sh" }, { "type": "command", "command": "${CLAUDE_PLUGIN_ROOT}/hooks/dispatch-format-guard.sh" }, { "type": "command", "command": "${CLAUDE_PLUGIN_ROOT}/hooks/search-is-not-proof-guard.sh" } ] }, { "matcher": ".*arcrun_(push_workflow|validate_yaml).*", "hooks": [ { "type": "command", "command": "${CLAUDE_PLUGIN_ROOT}/hooks/arcrun-intent-guard.sh" } ] }, { "matcher": "Edit|MultiEdit", "hooks": [ { "type": "command", "command": "${CLAUDE_PLUGIN_ROOT}/hooks/history-first-guard.sh" } ] }, { "matcher": "Agent", "hooks": [ { "type": "command", "command": "${CLAUDE_PLUGIN_ROOT}/hooks/micromanage-guard.sh" }, { "type": "command", "command": "${CLAUDE_PLUGIN_ROOT}/hooks/irreversible-dispatch-guard.sh" }, { "type": "command", "command": "${CLAUDE_PLUGIN_ROOT}/hooks/no-ticket-no-dispatch.sh" }, { "type": "command", "command": "${CLAUDE_PLUGIN_ROOT}/hooks/dispatch-format-guard.sh" }, { "type": "command", "command": "${CLAUDE_PLUGIN_ROOT}/hooks/search-is-not-proof-guard.sh" } ] }, { "matcher": "AskUserQuestion", "hooks": [ { "type": "command", "command": "${CLAUDE_PLUGIN_ROOT}/hooks/ask-user-question-guard.sh" } ] } ], "SessionStart": [ { "matcher": "startup|resume|clear", "hooks": [ { "type": "command", "command": "${CLAUDE_PLUGIN_ROOT}/hooks/session-start-recall.sh" }, { "type": "command", "command": "${CLAUDE_PLUGIN_ROOT}/hooks/skill-deploy-drift-guard.sh" }, { "type": "command", "command": "${CLAUDE_PLUGIN_ROOT}/hooks/isep-presence-beacon.sh" }, { "type": "command", "command": "${CLAUDE_PLUGIN_ROOT}/scripts/countdown-milestone-refresh.sh" } ] } ], "Stop": [ { "hooks": [ { "type": "command", "command": "\"${CLAUDE_PLUGIN_ROOT}\"/hooks/empty-handed-stop-guard.sh" } ] }, { "hooks": [ { "type": "command", "command": "${CLAUDE_PLUGIN_ROOT}/hooks/worklist-guard.sh" }, { "type": "command", "command": "${CLAUDE_PLUGIN_ROOT}/hooks/factory-idle-guard.sh" }, { "type": "command", "command": "${CLAUDE_PLUGIN_ROOT}/hooks/mainline-idle-guard.sh" }, { "type": "command", "command": "${CLAUDE_PLUGIN_ROOT}/hooks/pr-verdict-guard.sh" } ] }, { "hooks": [ { "type": "command", "command": "${CLAUDE_PLUGIN_ROOT}/hooks/browser-verify-guard.sh" } ] }, { "hooks": [ { "type": "command", "command": "${CLAUDE_PLUGIN_ROOT}/hooks/self-drive-police.sh" }, { "type": "command", "command": "${CLAUDE_PLUGIN_ROOT}/hooks/self-drive-judge.sh" }, { "type": "command", "command": "${CLAUDE_PLUGIN_ROOT}/hooks/delivery-police.sh" }, { "type": "command", "command": "${CLAUDE_PLUGIN_ROOT}/hooks/wiki-first-police.sh" } ] }, { "hooks": [ { "type": "command", "command": "${CLAUDE_PLUGIN_ROOT}/hooks/unpushed-police.sh" } ] }, { "hooks": [ { "type": "command", "command": "${CLAUDE_PLUGIN_ROOT}/hooks/countdown-guard.sh" } ] } ], "SubagentStop": [ { "hooks": [ { "type": "command", "command": "${CLAUDE_PLUGIN_ROOT}/hooks/worklist-guard.sh" } ] }, { "hooks": [ { "type": "command", "command": "${CLAUDE_PLUGIN_ROOT}/hooks/self-drive-police.sh" }, { "type": "command", "command": "${CLAUDE_PLUGIN_ROOT}/hooks/self-drive-judge.sh" }, { "type": "command", "command": "${CLAUDE_PLUGIN_ROOT}/hooks/delivery-police.sh" }, { "type": "command", "command": "${CLAUDE_PLUGIN_ROOT}/hooks/wiki-first-police.sh" } ] }, { "hooks": [ { "type": "command", "command": "${CLAUDE_PLUGIN_ROOT}/hooks/unpushed-police.sh" } ] } ], "PostToolUse": [ { "matcher": ".*kbdb_(search|get_map|query|graph_neighbors).*", "hooks": [ { "type": "command", "command": "${CLAUDE_PLUGIN_ROOT}/hooks/kbdb-asked-stamp.sh" } ] }, { "matcher": ".*kbdb_(search|get_record|query|graph_neighbors|get_map).*", "hooks": [ { "type": "command", "command": "${CLAUDE_PLUGIN_ROOT}/hooks/kbdb-evidence-stamp.sh" } ] }, { "matcher": "Agent|Task", "hooks": [ { "type": "command", "command": "${CLAUDE_PLUGIN_ROOT}/hooks/subagent-first-stamp.sh" }, { "type": "command", "command": "${CLAUDE_PLUGIN_ROOT}/hooks/issue-status-autoflip.sh" }, { "type": "command", "command": "${CLAUDE_PLUGIN_ROOT}/hooks/baton-handback-guard.sh" } ] } ], "UserPromptSubmit": [ { "hooks": [ { "type": "command", "command": "${CLAUDE_PLUGIN_ROOT}/hooks/countdown-guard.sh" } ] } ] } }