From qult
Register qult hooks in .claude/settings.local.json as a fallback. Use when plugin hooks don't fire (VS Code, some environments). NOT needed if hooks already work via plugin.
npx claudepluginhub hir4ta/qult --plugin qultThis skill uses the workspace's default tool permissions.
Register qult hooks in `.claude/settings.local.json` as a fallback for environments where plugin hooks don't fire reliably.
Guides strict Test-Driven Development (TDD): write failing tests first for features, bugfixes, refactors before any production code. Enforces red-green-refactor cycle.
Guides systematic root cause investigation for bugs, test failures, unexpected behavior, performance issues, and build failures before proposing fixes.
Guides A/B test setup with mandatory gates for hypothesis validation, metrics definition, sample size calculation, and execution readiness checks.
Register qult hooks in .claude/settings.local.json as a fallback for environments where plugin hooks don't fire reliably.
/qult:doctor reports hooks not working/qult:init, gates are configured but hooks never trigger.claude/settings.local.json (create if missing, start with {})hooks object. Preserve any non-qult hooks and other keys already in the file.The hooks to register (must match plugin/hooks/hooks.json):
{
"hooks": {
"SessionStart": [
{
"hooks": [
{
"type": "command",
"command": "node ${CLAUDE_PLUGIN_ROOT}/dist/hook.mjs session-start",
"timeout": 5
}
]
}
],
"PostToolUse": [
{
"matcher": "Edit|Write|Bash",
"hooks": [
{
"type": "command",
"command": "node ${CLAUDE_PLUGIN_ROOT}/dist/hook.mjs post-tool",
"timeout": 15
}
]
}
],
"PreToolUse": [
{
"matcher": "Edit|Write|ExitPlanMode",
"hooks": [
{
"type": "command",
"command": "node ${CLAUDE_PLUGIN_ROOT}/dist/hook.mjs pre-tool",
"timeout": 5
}
]
},
{
"matcher": "Bash",
"if": "Bash(git commit*)",
"hooks": [
{
"type": "command",
"command": "node ${CLAUDE_PLUGIN_ROOT}/dist/hook.mjs pre-tool",
"timeout": 5
}
]
}
],
"Stop": [
{
"hooks": [
{
"type": "command",
"command": "node ${CLAUDE_PLUGIN_ROOT}/dist/hook.mjs stop",
"timeout": 5
}
]
}
],
"SubagentStop": [
{
"hooks": [
{
"type": "command",
"command": "node ${CLAUDE_PLUGIN_ROOT}/dist/hook.mjs subagent-stop",
"timeout": 5
}
]
}
],
"TaskCompleted": [
{
"hooks": [
{
"type": "command",
"command": "node ${CLAUDE_PLUGIN_ROOT}/dist/hook.mjs task-completed",
"timeout": 15
}
]
}
],
"PostCompact": [
{
"hooks": [
{
"type": "command",
"command": "node ${CLAUDE_PLUGIN_ROOT}/dist/hook.mjs post-compact",
"timeout": 5
}
]
}
]
}
}
Note: These use ${CLAUDE_PLUGIN_ROOT} so the binary stays in the plugin cache — no file copy needed. When plugin hooks work, these are deduplicated (same command = runs once).
Confirm: qult hooks registered in .claude/settings.local.json (7 events). Restart Claude Code for hooks to take effect.
To remove fallback hooks, edit .claude/settings.local.json and delete the qult hook entries (commands containing hook.mjs). Or delete the file if it only contains qult hooks.