The Stop hook with `gt costs record` was causing 30-second timeouts
on every session stop due to beads socket connection issues. Since
cost tracking is disabled anyway (Claude Code doesn't expose session
costs), this hook provided no value.
Changes:
- Remove Stop hook from settings-autonomous.json and settings-interactive.json
- Remove Stop hook validation from claude_settings_check.go
- Update tests to not expect Stop hook
The cost tracking infrastructure remains in costs.go for future use
when Claude Code exposes session costs via API or environment variable.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This ensures Claude Code starts in normal editor mode rather than
potentially using vim mode, which can cause issues with automated
text input via tmux send-keys.
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
The gt tap guard pr-workflow command was added in 37f465bde but the
PreToolUse hooks were never added to the embedded settings templates.
This caused polecats to be created without the PR-blocking hooks,
allowing PR #833 to slip through despite the overlays having the hooks.
Adds the pr-workflow guard hooks to both settings-autonomous.json and
settings-interactive.json templates to block:
- gh pr create
- git checkout -b (feature branches)
- git switch -c (feature branches)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
SessionStart and PreCompact hooks must use --hook flag to avoid
gt doctor warnings about bare gt prime invocations.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add Claude Code Stop hook that automatically records session costs when
sessions end. The hook calls `gt costs record` which now can derive the
session name from GT_* environment variables (GT_RIG, GT_POLECAT, GT_CREW,
GT_ROLE).
Changes:
- Add deriveSessionName() to infer tmux session name from environment
- Add Stop hook to settings-autonomous.json and settings-interactive.json
- Add unit tests for deriveSessionName function
When a Gas Town session ends, the Stop hook fires and records the session
cost as a bead event. Costs then appear in `gt costs --today` output.
Closes: gt-ntzhc
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add special handling for 'deacon' target in gt nudge command
- Maps 'deacon' to gt-deacon session, gracefully handles if not running
- Add gt nudge deacon session-started to SessionStart hooks
- Updated settings-autonomous.json, settings-interactive.json, and
ensurePatrolHooks() template
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Create internal/claude package with embedded settings templates
- settings-autonomous.json: gt prime && gt mail check --inject (SessionStart)
- settings-interactive.json: gt prime only (SessionStart)
- Update witness.go: EnsureSettings before session, remove broken gt prime injection
- Update refinery/manager.go: EnsureSettings before session, remove broken NudgeSession
- Update session/manager.go: EnsureSettings for polecats, remove broken issue injection
All autonomous roles (polecat, witness, refinery) now get proper SessionStart hooks
automatically when their sessions are created. No more timing-based gt prime injection.