KeiSeiKit-1.0/settings-snippet.json
KeiSei84 1dd4bad97a fix(install): make fresh install actually complete + ship tamagotchi (#26)
Root causes found by reproducing a clean install from keigit:

1. PROFILE_PRIMS resolved only inside check_prereqs → unbound for
   --no-execute (plan showed 0 prims for every profile) and silently
   empty for --skip-prereqs. Now resolved unconditionally in install.sh
   before any reader (SSoT).

2. Every profile (even minimal, advertised "no Rust compile") fell back
   to a 5-15 min `cargo build --workspace` because no prebuilt release
   binaries exist. Auto-set KEI_SKIP_RUST for profiles with no rust
   primitives → minimal installs in ~18s (assembler only). cargo stays a
   hard prereq because the agent assembler always compiles.

3. The assembler aborted the WHOLE install on any single bad manifest
   (set -e). generate_agents is now tolerant: bad manifests print FAIL
   but hooks/skills/settings still land. Commit-time validate stays strict.

4. Data bugs that broke the assembler:
   - duplicate [taxonomy] table in _roles/{auditor,merger}.toml
   - fal-ai-runner handoff → keimd-expert (not shipped in kit)
   - infra-implementer-cicd forbidden_domain literal `${{ secrets.NAME }}`
     collided with assembler ${{ }} placeholder detection

5. Metadata: KeiSei84 (nonexistent GitHub org) → KeiSeiLab/KeiSeiKit-1.0
   across plugin manifests, bootstrap, README, docs, Cargo/npm metadata.
   .claude-plugin/{plugin,marketplace}.json 0.16.0 → 0.38.0. SECURITY.md
   supported version 0.14.x → 0.38.x.

feat: ship KeiSei tamagotchi statusline into the kit
   - scripts/keisei-pet{,-update}.sh (portable, state under ~/.claude/pet/)
   - install copies them to ~/.claude/scripts/
   - settings-snippet adds statusLine (set-if-absent, never clobbers an
     existing one) + 4 pet-update hooks (prompt/rust_write/github_block/sleep)

Verified: clean minimal install RC=0, zero FAIL, 38 agents + 52 hooks +
68 skills, settings valid, statusLine wired, pet renders, idempotent re-run.

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-21 01:40:50 +08:00

267 lines
8.6 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": "FILE=$(cat | jq -r '.tool_input.file_path // empty'); [ -n \"$FILE\" ] && [ \"${FILE##*.}\" = 'rs' ] && ~/.claude/scripts/keisei-pet-update.sh rust_write; exit 0"
}
]
},
{
"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)..."
}
]
},
{
"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"
}
]
}
],
"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"
}
]
}
]
}
}