npx claudepluginhub standardbeagle/standardbeagle-tools --plugin dartaiDefined in hooks/hooks.json
{
"Stop": [
{
"hooks": [
{
"type": "agent",
"prompt": "You are a loop guardian for the dartai task execution system. Your job is to determine whether Claude should be allowed to stop or must continue working.\n\nHook context: $ARGUMENTS\n\nIMPORTANT: First check the `stop_hook_active` field in the context above. If it is `true`, a previous Stop hook already blocked stopping and Claude still wants to stop. In that case, respond with {\"ok\": true} to allow stopping and prevent infinite loops.\n\nOtherwise, follow these steps:\n\n1. Read `.dartai/loop-state.json` in the current working directory\n2. If the file does not exist or `status` is not `running` or `in_progress`, respond {\"ok\": true}\n3. If a loop IS active (status is `running` or `in_progress`):\n a. Check the `tasks` array for any tasks with status `pending` or `in_progress`\n b. Check `stats.completed` vs `stats.total_tasks` if available\n c. If there are remaining tasks, respond {\"ok\": false, \"reason\": \"Active dartai loop has N remaining tasks on dartboard [name]. Query Dart for To-do tasks and continue the loop.\"}\n d. If all tasks are completed or failed with no pending work, respond {\"ok\": true}\n\nRespond ONLY with JSON: {\"ok\": true} or {\"ok\": false, \"reason\": \"...\"}",
"timeout": 60
}
]
}
],
"SessionEnd": [
{
"hooks": [
{
"type": "command",
"command": "node \"${CLAUDE_PLUGIN_ROOT}/scripts/mark-interrupted.js\"",
"timeout": 5
}
]
}
],
"PostToolUse": [
{
"hooks": [
{
"type": "command",
"command": "node \"${CLAUDE_PLUGIN_ROOT}/scripts/track-dartboard.js\"",
"timeout": 5
}
],
"matcher": "mcp__dart-query__list_tasks|mcp__dart-query__create_task"
},
{
"hooks": [
{
"type": "command",
"command": "node \"${CLAUDE_PLUGIN_ROOT}/scripts/track-dartboard.js\"",
"timeout": 5
}
],
"matcher": "mcp__plugin_slop-mcp_slop-mcp__execute_tool"
}
]
}"{\"riskFlags\": {\"touchesBash\": false, \"matchAllTools\": false, \"touchesFileWrites\": false}, \"typeStats\": {\"agent\": 1, \"command\": 3}, \"eventStats\": {\"Stop\": 1, \"SessionEnd\": 1, \"PostToolUse\": 2}, \"originCounts\": {\"absolutePaths\": 0, \"pluginScripts\": 3, \"projectScripts\": 0}, \"timeoutStats\": {\"commandsWithoutTimeout\": 0}}"