/plugin marketplace add Zate/cc-plugins/plugin install zate-devloop-plugins-devloop@Zate/cc-pluginsDefined in hooks/hooks.json
{
"Stop": [
{
"hooks": [
{
"type": "prompt",
"timeout": 20,
"promptFile": "${CLAUDE_PLUGIN_ROOT}/hooks/prompts/stop-routing.md"
}
],
"matcher": ".*"
}
],
"PreToolUse": [
{
"hooks": [
{
"type": "command",
"command": "bash ${CLAUDE_PLUGIN_ROOT}/hooks/log-task-invocation.sh",
"timeout": 5
}
],
"matcher": "Task"
},
{
"hooks": [
{
"type": "command",
"command": "bash ${CLAUDE_PLUGIN_ROOT}/hooks/track-skill-start.sh",
"timeout": 5
}
],
"matcher": "Skill"
},
{
"hooks": [
{
"type": "prompt",
"prompt": "Analyze the file being edited and suggest relevant language-specific skills if appropriate.\n\nDetect the file extension from the tool input:\n- .go files → Suggest: Skill: go-patterns (Go interfaces, error handling, goroutines, testing)\n- .py files → Suggest: Skill: python-patterns (Type hints, async patterns, pytest, error handling)\n- .java files → Suggest: Skill: java-patterns (Spring, streams, dependency injection, exception handling)\n- .tsx, .jsx, .ts files → Suggest: Skill: react-patterns (Hooks, component design, state management, performance)\n\nRules:\n1. Only suggest if the file extension matches one of the above\n2. This is informational only - do NOT block the operation\n3. If the skill is already being used (check context), don't suggest again\n4. Keep the suggestion brief and relevant\n\nRespond with:\n{\"suggestion\": \"Skill: skill-name\", \"reason\": \"Brief explanation of why this skill helps\"}\n\nOr if no suggestion needed:\n{\"suggestion\": \"none\"}",
"timeout": 10
}
],
"matcher": "Write|Edit"
},
{
"hooks": [
{
"type": "command",
"command": "bash ${CLAUDE_PLUGIN_ROOT}/hooks/pre-commit.sh \"$TOOL_INPUT\"",
"timeout": 10,
"condition": "git commit"
}
],
"matcher": "Bash"
},
{
"hooks": [
{
"type": "prompt",
"prompt": "You are validating a file write operation. Briefly check if this change follows good practices:\n\n1. Does it follow project conventions (if CLAUDE.md exists)?\n2. Does it avoid obvious security issues (no secrets, no SQL injection patterns)?\n3. Is the change reasonable for the current task?\n\nIf everything looks fine, respond with just: {\"decision\": \"approve\"}\n\nIf there's a concern, respond with: {\"decision\": \"warn\", \"message\": \"Brief explanation of concern\"}\n\nOnly use \"deny\" for serious security issues: {\"decision\": \"deny\", \"message\": \"Reason\"}",
"timeout": 15
}
],
"matcher": "Write|Edit|MultiEdit"
},
{
"hooks": [
{
"type": "prompt",
"prompt": "You are validating a bash command. Check for safety:\n\n1. Is this a destructive command (rm -rf, drop database, etc.)?\n2. Does it contain obvious security risks?\n3. Is it appropriate for a development workflow?\n\nApprove safe commands: {\"decision\": \"approve\"}\nWarn on risky but possibly intentional: {\"decision\": \"warn\", \"message\": \"Brief concern\"}\nDeny dangerous commands: {\"decision\": \"deny\", \"message\": \"Reason\"}",
"timeout": 10
}
],
"matcher": "Bash"
}
],
"SessionEnd": [
{
"hooks": [
{
"type": "command",
"command": "bash ${CLAUDE_PLUGIN_ROOT}/hooks/session-end.sh",
"timeout": 15
}
],
"matcher": ".*"
}
],
"PostToolUse": [
{
"hooks": [
{
"type": "command",
"command": "bash ${CLAUDE_PLUGIN_ROOT}/hooks/post-commit.sh \"$TOOL_INPUT\" \"$TOOL_OUTPUT\"",
"timeout": 10,
"condition": "git commit"
},
{
"type": "prompt",
"prompt": "Analyze the bash command result:\n\n1. Did the command succeed or fail?\n2. If it failed, is this expected or unexpected?\n3. Are there warning signs in the output (deprecation warnings, permission issues, etc.)?\n\nProvide brief analysis in this format:\n{\"status\": \"success|warning|error\", \"summary\": \"One line summary\", \"action\": \"none|retry|investigate\"}",
"timeout": 10
}
],
"matcher": "Bash"
},
{
"hooks": [
{
"type": "command",
"command": "bash ${CLAUDE_PLUGIN_ROOT}/hooks/track-agent-end.sh",
"timeout": 5
},
{
"type": "prompt",
"prompt": "An agent task has completed. Briefly assess:\n\n1. Did the agent accomplish its goal?\n2. Were there any issues or warnings?\n3. Are follow-up actions needed?\n\nRespond with: {\"completed\": true|false, \"summary\": \"Brief outcome\", \"followUp\": \"none|action needed\"}",
"timeout": 15
}
],
"matcher": "Task"
},
{
"hooks": [
{
"type": "command",
"command": "bash ${CLAUDE_PLUGIN_ROOT}/hooks/track-skill-end.sh",
"timeout": 5
}
],
"matcher": "Skill"
}
],
"Notification": [
{
"hooks": [
{
"type": "prompt",
"prompt": "A potential issue was detected. Analyze the notification:\n\n1. Is this a test failure, error, or exception?\n2. What's the severity (critical, warning, info)?\n3. Should the user be alerted?\n\nRespond with: {\"severity\": \"critical|warning|info\", \"summary\": \"Brief description\", \"alert\": true|false}",
"timeout": 10
}
],
"matcher": ".*test.*fail.*|.*error.*|.*exception.*"
},
{
"hooks": [
{
"type": "prompt",
"prompt": "A milestone notification was received. Summarize:\n\n{\"type\": \"milestone\", \"summary\": \"Brief description of what completed\"}",
"timeout": 5
}
],
"matcher": ".*build.*complete.*|.*deploy.*success.*"
}
],
"SessionStart": [
{
"hooks": [
{
"type": "command",
"command": "bash ${CLAUDE_PLUGIN_ROOT}/hooks/session-start.sh",
"timeout": 10
}
],
"matcher": ".*"
}
],
"UserPromptSubmit": [
{
"hooks": [
{
"type": "prompt",
"prompt": "Analyze the user's prompt and detect if they're requesting development work that could benefit from devloop workflow commands.\n\nKeyword → Command mapping:\n- \"bug\", \"fix\", \"broken\", \"error\", \"issue\" → /devloop:bugs (for bug tracking) or /devloop:quick (for small fixes)\n- \"feature\", \"implement\", \"add\", \"create\" → /devloop (for full workflow) or /devloop:quick (for small tasks)\n- \"refactor\", \"clean up\", \"restructure\", \"improve\" → /devloop:analyze\n- \"test\", \"coverage\", \"unit test\" → Suggest test-related workflow\n- \"review\", \"check\", \"audit\" → /devloop:review\n- \"continue\", \"resume\", \"finish\" → /devloop:continue\n- \"plan\", \"roadmap\", \"what's next\" → /devloop:plan (view current plan)\n\nRules:\n1. Only suggest if keywords are clearly present and intent is development work\n2. Don't suggest for simple questions or clarifications\n3. Don't suggest if the user already used a /devloop command\n4. Be helpful, not intrusive\n\nRespond with:\n{\"show\": true, \"suggestion\": \"/devloop:command\", \"reason\": \"Brief explanation\"}\n\nOr if no suggestion needed:\n{\"show\": false}",
"timeout": 10
}
],
"matcher": ".*"
}
]
}{
"riskFlags": {
"touchesBash": true,
"matchAllTools": false,
"touchesFileWrites": true
},
"typeStats": {
"prompt": 9,
"command": 8
},
"eventStats": {
"Stop": 1,
"PreToolUse": 6,
"SessionEnd": 1,
"PostToolUse": 5,
"Notification": 2,
"SessionStart": 1,
"UserPromptSubmit": 1
},
"originCounts": {
"absolutePaths": 0,
"pluginScripts": 8,
"projectScripts": 0
},
"timeoutStats": {
"commandsWithoutTimeout": 0
}
}