Stats
Actions
Tags
{"riskFlags": {"touchesBash": true, "matchAllTools": false, "touchesFileWrites": true}, "typeStats": {"prompt": 2, "command": 11}, "eventStats": {"Stop": 1, "PreCompact": 1, "PreToolUse": 3, "PostCompact": 1, "ConfigChange": 1, "SessionStart": 3, "SubagentStop": 1, "UserPromptSubmit": 1, "PostToolUseFailure": 1}, "originCounts": {"absolutePaths": 0, "pluginScripts": 0, "projectScripts": 0}, "timeoutStats": {"commandsWithoutTimeout": 11}}
9 events · 13 hooks
Safety signals detected in this hook configuration
Where this hook configuration is defined
Defined in hooks/hooks.json
Event handlers and matchers — expand Raw Configuration for the full JSON
auto|manualecho 'CONTEXT RE-INJECTION AFTER COMPACTION — Cure Consulting Group standards (always apply):\n- Clean Architecture: domain (pure logic) / data (DTOs + repos) / presentation (VMs + UI)\n- Android: Kotlin + Compose + Hilt + MVI. iOS: SwiftUI + MVVM + structured concurrency. Web: Next.js App Router + TS strict + Tailwind + Server Components. Firebase: Functions v2 (TS) + deny-by-default rules. Python: 3.11+ typed + pytest. Go: 1.22+ errgroup + table-driven tests. Rust: thiserror/anyhow + clippy pedantic + tokio.\n- SQL: parameterized, timestamptz, reversible migrations. Docker: multi-stage, non-root, pinned. Terraform: remote state + plan before apply.\n- Testing: 80% coverage minimum on new code. Security: validate inputs, no hardcoded secrets, parameterized queries.\n\nPlugin: 81 skills, 39 agents, 4 personas — invoke via /cure-product-engineering:<skill>. Full inventory: docs/OVERVIEW.md in the plugin repo.'Edit|WriteFILE=$(echo $CLAUDE_TOOL_INPUT | python3 -c "import sys,json; d=json.load(sys.stdin); print(d.get('file_path',''))" 2>/dev/null); if [ -n "$FILE" ]; then case "$FILE" in *.env|*.env.*) echo 'BLOCKED: Do not modify .env files directly. Use environment variable management.' >&2; exit 2 ;; *-lock.json|*-lock.yaml|*.lock|*shrinkwrap*) echo 'BLOCKED: Lock files should only be modified by package managers, not manually.' >&2; exit 2 ;; */credentials*|*/secrets*|*serviceAccount*|*service-account*|*.pem|*id_rsa*|*id_ed25519*) echo 'BLOCKED: Credential and secret files must not be modified by AI. Manage these manually.' >&2; exit 2 ;; *.tfstate|*.tfstate.*) echo 'BLOCKED: Terraform state files must never be manually edited. Use terraform state commands.' >&2; exit 2 ;; esac; fi; exit 0python3 -c "
import sys, json, os, re
try:
d = json.loads(os.environ.get('CLAUDE_TOOL_INPUT') or '{}')
except Exception:
sys.exit(0)
path = d.get('file_path', '')
if not re.search(r'(^|/)(skills|agents|personas)/', path):
sys.exit(0)
content = d.get('content', '') + d.get('new_string', '')
patterns = [
(r'curl[^\n]*\|\s*(ba)?sh', 'pipes a remote download into a shell'),
(r'wget[^\n]*\|\s*(ba)?sh', 'pipes a remote download into a shell'),
(r'base64\s+(-d|--decode)[^\n]*\|\s*(ba)?sh', 'executes base64-decoded code'),
(r'rm\s+-rf\s+(/|~|[$]HOME)', 'recursive delete of home or root'),
(r'(id_rsa|id_ed25519|\.aws/credentials|serviceAccount.*\.json)', 'references credential files'),
(r'(nc|ncat|curl|wget)[^\n]*[$][(]\s*(cat|env|printenv)', 'exfiltrates local data to the network'),
]
for pat, why in patterns:
if re.search(pat, content):
print(f'BLOCKED: proposed skill/agent/persona content {why}. If intentional, get it reviewed by @skill-security-auditor and apply manually.', file=sys.stderr)
sys.exit(2)
print('Skill/agent/persona file change detected — run @skill-security-auditor before merging.')
"BashCMD=$(echo $CLAUDE_TOOL_INPUT | python3 -c "import sys,json; d=json.load(sys.stdin); print(d.get('command',''))" 2>/dev/null); if [ -n "$CMD" ]; then case "$CMD" in *'rm -rf /'*|*'rm -rf /*'*|*'rm -rf ~'*|*'rm -rf $HOME'*|*'rm -rf .'*|*'mkfs'*|*'dd if='*) echo 'BLOCKED: Dangerous system command detected.' >&2; exit 2 ;; esac; fi; exit 0auto|manualecho 'Context compacted. Cure Consulting Group plugin active — 81 skills, 39 agents, 4 personas. Use /cure-product-engineering:<skill-name> to invoke.'skillsif [ -f scripts/audit-library.py ]; then python3 scripts/audit-library.py --fail-under 8 >/dev/null 2>&1 || echo 'Skill files changed and the library audit now reports issues — run: python3 scripts/audit-library.py'; fistartupecho 'Cure Consulting Group ProductEngineeringSkills plugin loaded (v7.4.5). 81 skills (domain-organized), 39 agents, 4 personas, 11 rules, 9 output styles. Use /cure-product-engineering:<skill-name> to invoke; full inventory: docs/OVERVIEW.md in the plugin repo. New project? /cure-product-engineering:project-bootstrap.'startupecho "Git branch: $(git branch --show-current 2>/dev/null || echo 'not a git repo'). Uncommitted changes: $(git status --porcelain 2>/dev/null | wc -l | tr -d ' '). Last commit: $(git log --oneline -1 2>/dev/null || echo 'none')."startupif [ -n "${CLAUDE_PLUGIN_ROOT:-}" ] && { [ -d .claude ] || [ -d .git ]; }; then PROVISIONED=''; if [ ! -f .claude/loop.md ] && [ -f "$CLAUDE_PLUGIN_ROOT/bootstrap/templates/loop.md" ]; then mkdir -p .claude && cp "$CLAUDE_PLUGIN_ROOT/bootstrap/templates/loop.md" .claude/loop.md && PROVISIONED=".claude/loop.md (Cure maintenance loop — run bare /loop)"; fi; if [ ! -d .claude/workflows ] && [ -d "$CLAUDE_PLUGIN_ROOT/workflows" ]; then mkdir -p .claude/workflows && cp "$CLAUDE_PLUGIN_ROOT/workflows/"*.js .claude/workflows/ 2>/dev/null && PROVISIONED="$PROVISIONED${PROVISIONED:+, }.claude/workflows (/cure-code-audit, /cure-release-check, /cure-migration-sweep)"; fi; if [ -n "$PROVISIONED" ]; then echo "Cure plugin provisioned: $PROVISIONED. Files are yours now — edit freely; existing files are never overwritten."; fi; fi; exit 0refactor-assistant|project-bootstrapper|release-coordinatorecho "Write-capable agent finished. Quality checklist:\n- Tests added/passing? → test-runner agent\n- Lint/types clean? → ci-debugger agent\n- PR ready? → pr-reviewer agent\n- New surface documented? → doc-generator agent"PROMPT=$(echo $CLAUDE_TOOL_INPUT | python3 -c "import sys,json; d=json.load(sys.stdin); print(d.get('prompt','').lower()[:500])" 2>/dev/null); case "$PROMPT" in *'delete all'*|*'drop all'*|*'remove everything'*|*'wipe'*|*'nuke'*) echo '{"warning": "Destructive operation detected in prompt. Proceeding with caution — will confirm before any irreversible actions."}' ;; esac; exit 0Bashnpx claudepluginhub cure-consulting-group/productengineeringskills --plugin cure-product-engineering