From 97bfe66acb5d4a44f266a37704aca4674e0c7d43 Mon Sep 17 00:00:00 2001 From: Steve Yegge Date: Sun, 21 Dec 2025 18:11:00 -0800 Subject: [PATCH] feat(statusline): Add deacon status line with owl icon MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Shows: 🦉 N rigs | 📬 N (unread mail) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- internal/cmd/statusline.go | 40 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/internal/cmd/statusline.go b/internal/cmd/statusline.go index 058a6398..21e35c7a 100644 --- a/internal/cmd/statusline.go +++ b/internal/cmd/statusline.go @@ -52,6 +52,11 @@ func runStatusLine(cmd *cobra.Command, args []string) error { return runMayorStatusLine(t) } + // Deacon status line + if role == "deacon" || statusLineSession == "gt-deacon" { + return runDeaconStatusLine(t) + } + // Witness status line (session naming: gt-witness-) if role == "witness" || strings.HasPrefix(statusLineSession, "gt-witness-") { return runWitnessStatusLine(t, rigName) @@ -151,6 +156,41 @@ func runMayorStatusLine(t *tmux.Tmux) error { return nil } +// runDeaconStatusLine outputs status for the deacon session. +// Shows: active rigs, patrol status, mail count +func runDeaconStatusLine(t *tmux.Tmux) error { + // Count active rigs by checking for witnesses + sessions, err := t.ListSessions() + if err != nil { + return nil // Silent fail + } + + rigs := make(map[string]bool) + for _, s := range sessions { + agent := categorizeSession(s) + if agent == nil { + continue + } + if agent.Rig != "" { + rigs[agent.Rig] = true + } + } + rigCount := len(rigs) + + // Get deacon mail + unread := getUnreadMailCount("deacon/") + + // Build status + var parts []string + parts = append(parts, fmt.Sprintf("%s %d rigs", AgentTypeIcons[AgentDeacon], rigCount)) + if unread > 0 { + parts = append(parts, fmt.Sprintf("\U0001F4EC %d", unread)) + } + + fmt.Print(strings.Join(parts, " | ") + " |") + return nil +} + // runWitnessStatusLine outputs status for a witness session. // Shows: polecat count under management, mail count func runWitnessStatusLine(t *tmux.Tmux, rigName string) error {