Phase 2 of #630. The rm_gate hook + drone rm now own destructive-delete protection (cross-provider, path-aware, teaching), so the Claude-only blanket deny is redundant AND harmful (it short-circuits before the hook, suppressing the teaching message). - setup.sh: removed Bash(rm -rf*) + Bash(rm -r *) from git_deny (new installs) - bootstrap.py: removed Bash(rm -rf *) shipped via aipass init (project settings) - doctor_wire.reconcile_stale_deny(): aipass doctor WARNs on stale rules; --fix removes them (idempotent, preserves all else) — migration for existing installs (the 'aipass update should be trusted' goal) - .aipass/project_hooks.json template: added rm_gate (new projects get it) Tests: 8 reconcile + 432 aipass total, seedgo 99%. CHANGELOG W23.
105 lines
2.9 KiB
JSON
105 lines
2.9 KiB
JSON
{
|
|
"_comment": "TEMPLATE: base per-project hook config copied into new projects by `aipass init` (DPLAN-0190). Mirrors AIPass's own .aipass/hooks.json. All handlers run from $AIPASS_HOME — projects only flip enabled true/false. Use `drone @hooks enable/disable <hook>` or edit here.",
|
|
"hooks_enabled": true,
|
|
|
|
"UserPromptSubmit": {
|
|
"identity_injector": {
|
|
"enabled": true,
|
|
"handler": "aipass.hooks.apps.handlers.prompt.identity.handle",
|
|
"matcher": ""
|
|
},
|
|
"email_notification": {
|
|
"enabled": true,
|
|
"handler": "aipass.hooks.apps.handlers.notification.email.handle",
|
|
"matcher": ""
|
|
},
|
|
"branch_prompt": {
|
|
"enabled": true,
|
|
"handler": "aipass.hooks.apps.handlers.prompt.branch_loader.handle",
|
|
"matcher": ""
|
|
},
|
|
"global_prompt": {
|
|
"enabled": true,
|
|
"handler": "aipass.hooks.apps.handlers.prompt.global_loader.handle",
|
|
"matcher": ""
|
|
}
|
|
},
|
|
|
|
"PreToolUse": {
|
|
"tool_use_sound": {
|
|
"enabled": true,
|
|
"handler": "aipass.hooks.apps.handlers.notification.tool_sound.handle",
|
|
"matcher": "Bash|Edit|MultiEdit|Write|Read|Grep|Glob|WebSearch|WebFetch|Task"
|
|
},
|
|
"pre_edit_gate": {
|
|
"enabled": true,
|
|
"handler": "aipass.hooks.apps.handlers.security.edit_gate.handle",
|
|
"matcher": "Edit|MultiEdit|Write|NotebookEdit"
|
|
},
|
|
"git_gate": {
|
|
"enabled": true,
|
|
"handler": "aipass.hooks.apps.handlers.security.git_gate.handle",
|
|
"matcher": "Bash|Edit|MultiEdit|Write|NotebookEdit"
|
|
},
|
|
"rm_gate": {
|
|
"enabled": true,
|
|
"handler": "aipass.hooks.apps.handlers.security.rm_gate.handle",
|
|
"matcher": "Bash"
|
|
}
|
|
},
|
|
|
|
"PostToolUse": {
|
|
"auto_fix_diagnostics": {
|
|
"enabled": true,
|
|
"handler": "aipass.hooks.apps.handlers.lifecycle.auto_fix.handle",
|
|
"matcher": "Edit|MultiEdit|Write|NotebookEdit",
|
|
"timeout": 45
|
|
},
|
|
"auto_watchdog": {
|
|
"enabled": true,
|
|
"handler": "aipass.hooks.apps.handlers.lifecycle.auto_watchdog.handle",
|
|
"matcher": "Bash"
|
|
}
|
|
},
|
|
|
|
"SubagentStop": {
|
|
"subagent_stop_gate": {
|
|
"enabled": true,
|
|
"handler": "aipass.hooks.apps.handlers.security.subagent_gate.handle",
|
|
"matcher": "",
|
|
"timeout": 60
|
|
}
|
|
},
|
|
|
|
"Stop": {
|
|
"stop_sound": {
|
|
"enabled": true,
|
|
"handler": "aipass.hooks.apps.handlers.notification.stop_sound.handle",
|
|
"matcher": ""
|
|
}
|
|
},
|
|
|
|
"Notification": {
|
|
"notification_sound": {
|
|
"enabled": true,
|
|
"handler": "aipass.hooks.apps.handlers.notification.announce.handle",
|
|
"matcher": ""
|
|
}
|
|
},
|
|
|
|
"PreCompact": {
|
|
"pre_compact": {
|
|
"enabled": true,
|
|
"handler": "aipass.hooks.apps.handlers.lifecycle.compact.handle",
|
|
"matcher": "",
|
|
"timeout": 60
|
|
},
|
|
"pre_compact_rollover": {
|
|
"enabled": true,
|
|
"handler": "aipass.hooks.apps.handlers.lifecycle.rollover.handle",
|
|
"matcher": "",
|
|
"timeout": 120
|
|
}
|
|
}
|
|
}
|