Implement Boot: daemon entry point dog for Deacon triage (gt-rwd5j)

Boot is a watchdog that the daemon pokes instead of Deacon directly,
centralizing the 'when to wake Deacon' decision in an agent that can
reason about context.

Key changes:
- Add internal/boot package with marker file and status tracking
- Add gt boot commands: status, spawn, triage
- Add mol-boot-triage formula for Boot's triage cycle
- Modify daemon to call ensureBootRunning instead of ensureDeaconRunning
- Add tmux.IsAvailable() for degraded mode detection
- Add boot.md.tmpl role template

Boot lifecycle:
1. Daemon tick spawns Boot (fresh each time)
2. Boot runs triage: observe, decide, act
3. Boot cleans stale handoffs from Deacon inbox
4. Boot exits (or handoffs in non-degraded mode)

In degraded mode (no tmux), Boot runs mechanical triage directly.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Steve Yegge
2025-12-30 16:14:54 -08:00
parent 3099d99424
commit 2112804aba
6 changed files with 991 additions and 2 deletions

View File

@@ -91,6 +91,12 @@ func (t *Tmux) KillServer() error {
return err
}
// IsAvailable checks if tmux is installed and can be invoked.
func (t *Tmux) IsAvailable() bool {
cmd := exec.Command("tmux", "-V")
return cmd.Run() == nil
}
// HasSession checks if a session exists.
func (t *Tmux) HasSession(name string) (bool, error) {
_, err := t.run("has-session", "-t", name)