feat: Add role shortcuts to gt nudge (mayor, witness, refinery)

gt nudge now accepts role shortcuts that expand to session names:
- mayor → gt-mayor
- witness → gt-<rig>-witness (uses current rig)
- refinery → gt-<rig>-refinery (uses current rig)

This makes it easier to nudge common targets without needing to
remember the full session naming conventions.

(gt-w1te9)

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
gastown/polecats/dag
2025-12-30 22:33:55 -08:00
committed by Steve Yegge
parent 4a84f68d48
commit fb041145ab

View File

@@ -6,6 +6,7 @@ import (
"github.com/spf13/cobra"
"github.com/steveyegge/gastown/internal/events"
"github.com/steveyegge/gastown/internal/session"
"github.com/steveyegge/gastown/internal/style"
"github.com/steveyegge/gastown/internal/tmux"
"github.com/steveyegge/gastown/internal/workspace"
@@ -32,12 +33,17 @@ Uses a reliable delivery pattern:
This is the ONLY way to send messages to Claude sessions.
Do not use raw tmux send-keys elsewhere.
Special targets:
deacon Maps to the Deacon session (gt-deacon)
Role shortcuts (expand to session names):
mayor Maps to gt-mayor
deacon Maps to gt-deacon
witness Maps to gt-<rig>-witness (uses current rig)
refinery Maps to gt-<rig>-refinery (uses current rig)
Examples:
gt nudge greenplace/furiosa "Check your mail and start working"
gt nudge greenplace/alpha -m "What's your status?"
gt nudge mayor "Status update requested"
gt nudge witness "Check polecat health"
gt nudge deacon session-started`,
Args: cobra.RangeArgs(1, 2),
RunE: runNudge,
@@ -82,6 +88,27 @@ func runNudge(cmd *cobra.Command, args []string) error {
t := tmux.NewTmux()
// Expand role shortcuts to session names
// These shortcuts let users type "mayor" instead of "gt-mayor"
switch target {
case "mayor":
target = session.MayorSessionName()
case "witness", "refinery":
// These need the current rig
roleInfo, err := GetRole()
if err != nil {
return fmt.Errorf("cannot determine rig for %s shortcut: %w", target, err)
}
if roleInfo.Rig == "" {
return fmt.Errorf("cannot determine rig for %s shortcut (not in a rig context)", target)
}
if target == "witness" {
target = session.WitnessSessionName(roleInfo.Rig)
} else {
target = session.RefinerySessionName(roleInfo.Rig)
}
}
// Special case: "deacon" target maps to the Deacon session
if target == "deacon" {
// Check if Deacon session exists