npx claudepluginhub jwilger/claude-code-plugins --plugin sdlcDefined in hooks/hooks.json
{
"PreCompact": [
{
"hooks": [
{
"type": "command",
"command": "${CLAUDE_PLUGIN_ROOT}/.claude-plugin/hooks/pre-compact.sh"
}
]
}
],
"PreToolUse": [
{
"hooks": [
{
"type": "command",
"command": "${CLAUDE_PLUGIN_ROOT}/.claude-plugin/hooks/gh-api-check.sh"
}
],
"matcher": "Bash(gh api *)"
}
],
"SessionStart": [
{
"hooks": [
{
"type": "command",
"command": "${CLAUDE_PLUGIN_ROOT}/.claude-plugin/hooks/session-start.sh"
}
]
}
],
"SubagentStop": [
{
"hooks": [
{
"type": "prompt",
"prompt": "DOMAIN REVIEW CHECKPOINT (MANDATORY)\n\nDetect which agent just completed and enforce domain review requirements.\n\n## Check Agent Identity\n\nExamine the conversation to determine which agent just finished. Look for:\n- Agent invocation patterns (Task tool with subagent_type)\n- Agent self-identification in output\n- File modifications patterns (test files = red, production = green)\n\n## Enforcement Rules\n\n**If sdlc:red just completed:**\n- A failing test was just written\n- Domain review is MANDATORY before proceeding\n- Next action MUST be: Launch sdlc:domain with DOMAIN_CONTEXT: AFTER_RED\n- Block if orchestrator tries to skip directly to GREEN\n\n**If sdlc:green just completed:**\n- Production code was just implemented\n- Domain review is MANDATORY before proceeding \n- Next action MUST be: Launch sdlc:domain with DOMAIN_CONTEXT: AFTER_GREEN\n- Block if orchestrator tries to write another test without review\n\n**If sdlc:domain just completed:**\n- Domain review passed, workflow may continue\n- Allow orchestrator to proceed to next phase\n\n**If any other agent completed:**\n- Allow (domain review not required)\n\n## Response Format\n\n**After RED or GREEN (domain review required):**\n{\"ok\": false, \"reason\": \"Domain review is MANDATORY after {agent} phase. You must launch sdlc:domain with appropriate DOMAIN_CONTEXT before proceeding. This is NOT optional - there are NO valid reasons to skip domain review.\"}\n\n**After DOMAIN or other agents:**\n{\"ok\": true}\n\nThis enforces the TDD cycle discipline: RED → DOMAIN → GREEN → DOMAIN."
}
]
},
{
"hooks": [
{
"type": "prompt",
"prompt": "SUBAGENT COMPLETED - ORCHESTRATION REMINDER\n\nAn agent just finished. Before proceeding:\n\nYOU ARE AN ORCHESTRATOR, NOT AN IMPLEMENTER\n\nYou MUST NEVER use Edit or Write tools directly.\n\nNEXT STEPS PROTOCOL:\n- Need to edit test code? Launch sdlc:red\n- Need to edit production code? Launch sdlc:green\n- Need to edit type definitions? Launch sdlc:domain\n- Need to edit ARCHITECTURE.md? Launch sdlc:adr, sdlc:design-facilitator, or sdlc:architect\n- Need to edit event model docs? Launch sdlc:gwt, sdlc:workflow-designer, sdlc:model-checker, or sdlc:discovery\n- Need to edit config/docs/scripts? Launch sdlc:file-updater\n\nTDD CYCLE CHECKPOINT:\n- After RED → Launch sdlc:domain (review test)\n- After DOMAIN (post-red) → Launch sdlc:green (implement)\n- After GREEN → Launch sdlc:domain (review implementation)\n- After DOMAIN (post-green) → Next test or refactor\n\nNO EXCEPTIONS. NO \"QUICK FIXES\". NO \"JUST ONE LINE\".\n\nIf you need to make ANY file change, launch the appropriate agent with FULL CONTEXT:\n- File paths\n- Test names and error messages\n- Required gate confirmations (RED_CONTEXT, DOMAIN_CONTEXT, GREEN confirmations)\n- Current TDD phase\n\nAgents have ZERO memory of this conversation - provide complete context every time.\n\nRespond with JSON only: {\"ok\": true}"
}
]
},
{
"hooks": [
{
"type": "prompt",
"prompt": "QUESTION DETECTION - AskUserQuestion ENFORCEMENT\n\nAnalyze the agent's final output for patterns indicating it's blocking on user input.\n\n## What to Look For\n\n**BLOCKING QUESTION PATTERNS** (require AskUserQuestion tool):\n- \"Before I proceed, I need to know...\"\n- \"I have a few questions:\"\n- Numbered/bulleted lists of questions (2+)\n- \"Should I... or should I...\"\n- \"Which approach would you prefer:\"\n- \"Would you like me to... or...?\"\n- Questions followed by waiting (no action taken)\n\n**ACCEPTABLE PATTERNS** (no tool needed):\n- Single clarifying question while continuing work\n- Rhetorical questions in explanations (\"Why does this matter?\")\n- Questions the agent answers itself\n- Questions in code comments or documentation\n\n## Check Tool Usage\n\nDid the agent use the AskUserQuestion tool in this turn?\n\n## Decision Logic\n\n**BLOCK** if ALL of these are true:\n- Output contains 2+ questions requiring user input to proceed\n- Questions use blocking language (\"before I\", \"I need to know\")\n- Agent has NOT taken action (appears to be waiting)\n- AskUserQuestion tool was NOT used\n\n**ALLOW** if ANY of these are true:\n- AskUserQuestion was used with structured options\n- Only 0-1 simple questions asked\n- Questions are informational/rhetorical, not blocking\n- Agent continued working and asked incidental questions\n\n## Response Format\n\n**To block (force tool usage):**\n{\"ok\": false, \"reason\": \"You asked multiple questions requiring user input but didn't use AskUserQuestion. Please reformulate using AskUserQuestion tool with structured options for: [list specific questions]\"}\n\n**To allow:**\n{\"ok\": true}\n\nBe specific in the reason - quote the actual questions that need reformulation."
}
]
}
],
"SubagentStart": [
{
"hooks": [
{
"type": "command",
"command": "${CLAUDE_PLUGIN_ROOT}/.claude-plugin/hooks/subagent-start-context.sh"
}
],
"matcher": "red|green|domain"
}
]
}"{\"riskFlags\": {\"touchesBash\": true, \"matchAllTools\": false, \"touchesFileWrites\": false}, \"typeStats\": {\"prompt\": 3, \"command\": 4}, \"eventStats\": {\"PreCompact\": 1, \"PreToolUse\": 1, \"SessionStart\": 1, \"SubagentStop\": 3, \"SubagentStart\": 1}, \"originCounts\": {\"absolutePaths\": 0, \"pluginScripts\": 4, \"projectScripts\": 0}, \"timeoutStats\": {\"commandsWithoutTimeout\": 4}}"