After install the user got no guidance to set up project agents — the summary only mentioned /new-agent (single), never /onboard (scan all projects → create a specialist per project). The installer is bash and can't launch a skill, so: - New SessionStart hook first-run-onboard.sh: on the FIRST Claude Code session after install, injects context nudging the user/Claude to run `/onboard ~/Projects/*` (scan stack + create per-project agent, delegates to /new-agent). Fires once (marker ~/.claude/.kei-firstrun-shown), then silent. Reset: rm the marker. - settings-snippet.json: wire the hook under SessionStart (matcher "*"). - lib-summary.sh next-steps: lead with `/onboard ~/Projects/*`, then /new-agent. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
296 lines
9.1 KiB
JSON
296 lines
9.1 KiB
JSON
{
|
|
"_comment": "Merge these entries into your ~/.claude/settings.json under the matching keys. If you already have PostToolUse/PreToolUse/Stop arrays, append the objects below to them instead of overwriting. install.sh --activate-hooks automates the merge and de-dupes by hooks[].command. statusLine (the KeiSei tamagotchi) is set ONLY when you have none — an existing statusLine is never clobbered.",
|
|
"statusLine": {
|
|
"type": "command",
|
|
"command": "~/.claude/scripts/keisei-pet.sh",
|
|
"padding": 0
|
|
},
|
|
"hooks": {
|
|
"PostToolUse": [
|
|
{
|
|
"matcher": "Write|Edit",
|
|
"hooks": [
|
|
{
|
|
"type": "command",
|
|
"command": "~/.claude/hooks/assemble-agents.sh"
|
|
},
|
|
{
|
|
"type": "command",
|
|
"command": "~/.claude/hooks/site-wysiwyd-check.sh",
|
|
"statusMessage": "site-wysiwyd drift check..."
|
|
},
|
|
{
|
|
"type": "command",
|
|
"command": "~/.claude/hooks/post-write-check.sh",
|
|
"statusMessage": "post-write checks..."
|
|
},
|
|
{
|
|
"type": "command",
|
|
"command": "~/.claude/scripts/keisei-pet-update.sh lang"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"matcher": "Bash",
|
|
"hooks": [
|
|
{
|
|
"type": "command",
|
|
"command": "~/.claude/hooks/milestone-commit-hook.sh",
|
|
"statusMessage": "milestone self-audit check (RULE 0.14)..."
|
|
},
|
|
{
|
|
"type": "command",
|
|
"command": "~/.claude/hooks/post-commit-audit.sh",
|
|
"statusMessage": "post-commit audit..."
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"matcher": "Agent",
|
|
"hooks": [
|
|
{
|
|
"type": "command",
|
|
"command": "~/.claude/hooks/task-timer.sh",
|
|
"statusMessage": "task duration tracker (RULE 0.18)..."
|
|
},
|
|
{
|
|
"type": "command",
|
|
"command": "~/.claude/hooks/agent-fork-done.sh",
|
|
"statusMessage": "agent-fork-done — close ledger lifecycle..."
|
|
},
|
|
{
|
|
"type": "command",
|
|
"command": "~/.claude/hooks/agent-stub-scan.sh",
|
|
"statusMessage": "STATUS-TRUTH marker scan (RULE 0.16)..."
|
|
},
|
|
{
|
|
"type": "command",
|
|
"command": "~/.claude/hooks/agent-event-done.sh"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"matcher": "ExitPlanMode",
|
|
"hooks": [
|
|
{
|
|
"type": "command",
|
|
"command": "~/.claude/scripts/keisei-pet-update.sh plan"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"matcher": "*",
|
|
"hooks": [
|
|
{
|
|
"type": "command",
|
|
"command": "~/.claude/hooks/error-spike-detector.sh",
|
|
"statusMessage": "error-spike rolling window (RULE 0.14)..."
|
|
},
|
|
{
|
|
"type": "command",
|
|
"command": "~/.claude/hooks/agent-heartbeat-tick.sh"
|
|
}
|
|
]
|
|
}
|
|
],
|
|
"PreToolUse": [
|
|
{
|
|
"matcher": "Bash",
|
|
"hooks": [
|
|
{
|
|
"type": "command",
|
|
"command": "~/.claude/hooks/assemble-validate.sh"
|
|
},
|
|
{
|
|
"type": "command",
|
|
"command": "~/.claude/hooks/agent-capability-check.sh",
|
|
"statusMessage": "agent-capability-check (Agent Substrate v1, phase 4)..."
|
|
},
|
|
{
|
|
"type": "command",
|
|
"command": "~/.claude/hooks/destructive-guard.sh",
|
|
"statusMessage": "destructive-op guard..."
|
|
},
|
|
{
|
|
"type": "command",
|
|
"command": "~/.claude/hooks/block-dangerous.sh",
|
|
"statusMessage": "dangerous-command block..."
|
|
},
|
|
{
|
|
"type": "command",
|
|
"command": "~/.claude/hooks/safety-guard.sh",
|
|
"statusMessage": "safety-guard..."
|
|
},
|
|
{
|
|
"type": "command",
|
|
"command": "~/.claude/hooks/disk-headroom-check.sh",
|
|
"statusMessage": "disk headroom (RULE 0.17)..."
|
|
},
|
|
{
|
|
"type": "command",
|
|
"command": "~/.claude/hooks/no-python-without-approval.sh",
|
|
"statusMessage": "rust-first python gate (RULE 0.2)..."
|
|
},
|
|
{
|
|
"type": "command",
|
|
"command": "~/.claude/hooks/no-github-push.sh",
|
|
"statusMessage": "no-github-push guard (RULE 0.1)..."
|
|
},
|
|
{
|
|
"type": "command",
|
|
"command": "CMD=$(cat | jq -r '.tool_input.command // empty'); echo \"$CMD\" | grep -qiE 'git push.*github|gh repo (create|push|sync)' && ~/.claude/scripts/keisei-pet-update.sh github_block; exit 0"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"matcher": "Edit|Write",
|
|
"hooks": [
|
|
{
|
|
"type": "command",
|
|
"command": "~/.claude/hooks/no-hand-edit-agents.sh"
|
|
},
|
|
{
|
|
"type": "command",
|
|
"command": "~/.claude/hooks/agent-capability-check.sh",
|
|
"statusMessage": "agent-capability-check (Agent Substrate v1, phase 4)..."
|
|
},
|
|
{
|
|
"type": "command",
|
|
"command": "~/.claude/hooks/numeric-claims-guard.sh",
|
|
"statusMessage": "numeric-claims-guard (RULE 0.18)..."
|
|
},
|
|
{
|
|
"type": "command",
|
|
"command": "~/.claude/hooks/citation-verify.sh",
|
|
"statusMessage": "citation-verify (RULE 0.4)..."
|
|
},
|
|
{
|
|
"type": "command",
|
|
"command": "~/.claude/hooks/secrets-pre-guard.sh",
|
|
"statusMessage": "secrets-pre-guard (RULE 0.8)..."
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"matcher": "Read",
|
|
"hooks": [
|
|
{
|
|
"type": "command",
|
|
"command": "~/.claude/hooks/tomd-preread.sh",
|
|
"statusMessage": "tomd pre-read auto-convert check..."
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"matcher": "Agent",
|
|
"hooks": [
|
|
{
|
|
"type": "command",
|
|
"command": "~/.claude/hooks/agent-fork-logger.sh",
|
|
"statusMessage": "agent-fork-logger (RULE 0.12)..."
|
|
},
|
|
{
|
|
"type": "command",
|
|
"command": "~/.claude/hooks/orchestrator-dirty-check.sh",
|
|
"statusMessage": "orchestrator-dirty-check (RULE 0.13)..."
|
|
},
|
|
{
|
|
"type": "command",
|
|
"command": "~/.claude/hooks/orchestrator-branch-check.sh",
|
|
"statusMessage": "orchestrator branch ownership (RULE 0.13)..."
|
|
},
|
|
{
|
|
"type": "command",
|
|
"command": "~/.claude/hooks/task-timer.sh"
|
|
},
|
|
{
|
|
"type": "command",
|
|
"command": "~/.claude/hooks/agent-event-spawn.sh"
|
|
}
|
|
]
|
|
}
|
|
],
|
|
"UserPromptSubmit": [
|
|
{
|
|
"matcher": "*",
|
|
"hooks": [
|
|
{
|
|
"type": "command",
|
|
"command": "~/.claude/hooks/recurrence-suggest.sh",
|
|
"statusMessage": "recurrence-escalate suggester (RULE 0.10)..."
|
|
},
|
|
{
|
|
"type": "command",
|
|
"command": "~/.claude/hooks/rust-first.sh",
|
|
"statusMessage": "rust-first reminder (RULE 0.2)..."
|
|
},
|
|
{
|
|
"type": "command",
|
|
"command": "~/.claude/hooks/no-downgrade.sh",
|
|
"statusMessage": "no-downgrade reminder (RULE -1)..."
|
|
},
|
|
{
|
|
"type": "command",
|
|
"command": "~/.claude/hooks/alignment-check.sh"
|
|
},
|
|
{
|
|
"type": "command",
|
|
"command": "~/.claude/hooks/chat-numeric-prewarn.sh",
|
|
"statusMessage": "chat-numeric-prewarn (RULE 0.18)..."
|
|
},
|
|
{
|
|
"type": "command",
|
|
"command": "~/.claude/scripts/keisei-pet-update.sh prompt"
|
|
}
|
|
]
|
|
}
|
|
],
|
|
"Stop": [
|
|
{
|
|
"matcher": "*",
|
|
"hooks": [
|
|
{
|
|
"type": "command",
|
|
"command": "~/.claude/hooks/session-end-dump.sh",
|
|
"statusMessage": "session-end trace dump (RULE 0.14)..."
|
|
},
|
|
{
|
|
"type": "command",
|
|
"command": "~/.claude/hooks/stop-verify.sh",
|
|
"statusMessage": "stop-verify (uncommitted/Modal-running warning)..."
|
|
},
|
|
{
|
|
"type": "command",
|
|
"command": "~/.claude/hooks/task-timer.sh"
|
|
},
|
|
{
|
|
"type": "command",
|
|
"command": "~/.claude/hooks/extract-task-durations.sh",
|
|
"statusMessage": "extract-task-durations — pull async durations from notifications..."
|
|
},
|
|
{
|
|
"type": "command",
|
|
"command": "~/.claude/hooks/chat-numeric-postflag.sh",
|
|
"statusMessage": "chat-numeric-postflag (RULE 0.18)..."
|
|
},
|
|
{
|
|
"type": "command",
|
|
"command": "~/.claude/scripts/keisei-pet-update.sh sleep"
|
|
}
|
|
]
|
|
}
|
|
],
|
|
"SessionStart": [
|
|
{
|
|
"matcher": "*",
|
|
"hooks": [
|
|
{
|
|
"type": "command",
|
|
"command": "~/.claude/hooks/first-run-onboard.sh",
|
|
"statusMessage": "KeiSeiKit first-run onboard nudge..."
|
|
}
|
|
]
|
|
}
|
|
]
|
|
}
|
|
}
|