Replace 'gastown' with 'greenplace' in user-facing docs/examples
Using "greenplace" (The Green Place from Mad Max: Fury Road) as the canonical example project/rig name in documentation and help text. This provides a clearer distinction from the actual gastown repo name. Changes: - docs/*.md: Updated all example paths and commands - internal/cmd/*.go: Updated help text examples - internal/templates/: Updated example references - Tests: Updated to use greenplace in example session names Note: Import paths (github.com/steveyegge/gastown) and actual code paths referencing the gastown repo structure are unchanged. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -56,16 +56,16 @@ Supported event types for refinery:
|
||||
queue_processed - When refinery finishes processing queue
|
||||
|
||||
Common options:
|
||||
--actor Who is emitting the event (e.g., gastown/witness)
|
||||
--actor Who is emitting the event (e.g., greenplace/witness)
|
||||
--rig Which rig the event is about
|
||||
--message Human-readable message
|
||||
|
||||
Examples:
|
||||
gt activity emit patrol_started --rig gastown --count 3
|
||||
gt activity emit polecat_checked --rig gastown --polecat Toast --status working --issue gt-xyz
|
||||
gt activity emit polecat_nudged --rig gastown --polecat Toast --reason "idle for 10 minutes"
|
||||
gt activity emit escalation_sent --rig gastown --target Toast --to mayor --reason "unresponsive"
|
||||
gt activity emit patrol_complete --rig gastown --count 3 --message "All polecats healthy"`,
|
||||
gt activity emit patrol_started --rig greenplace --count 3
|
||||
gt activity emit polecat_checked --rig greenplace --polecat Toast --status working --issue gp-xyz
|
||||
gt activity emit polecat_nudged --rig greenplace --polecat Toast --reason "idle for 10 minutes"
|
||||
gt activity emit escalation_sent --rig greenplace --target Toast --to mayor --reason "unresponsive"
|
||||
gt activity emit patrol_complete --rig greenplace --count 3 --message "All polecats healthy"`,
|
||||
Args: cobra.ExactArgs(1),
|
||||
RunE: runActivityEmit,
|
||||
}
|
||||
|
||||
@@ -41,8 +41,8 @@ Shows a unified timeline of work performed by an actor including:
|
||||
- Activity feed events
|
||||
|
||||
Examples:
|
||||
gt audit --actor=gastown/crew/joe # Show all work by joe
|
||||
gt audit --actor=gastown/polecats/toast # Show polecat toast's work
|
||||
gt audit --actor=greenplace/crew/joe # Show all work by joe
|
||||
gt audit --actor=greenplace/polecats/toast # Show polecat toast's work
|
||||
gt audit --actor=mayor # Show mayor's activity
|
||||
gt audit --since=24h # Show all activity in last 24h
|
||||
gt audit --actor=joe --since=1h # Combined filters
|
||||
@@ -167,7 +167,7 @@ func collectGitCommits(townRoot, actor string, since time.Time) ([]AuditEntry, e
|
||||
|
||||
if actor != "" {
|
||||
// Try to match actor in author name
|
||||
// Actor format might be "gastown/crew/joe" - extract "joe" as the author name
|
||||
// Actor format might be "greenplace/crew/joe" - extract "joe" as the author name
|
||||
authorName := extractAuthorName(actor)
|
||||
args = append(args, "--author="+authorName)
|
||||
}
|
||||
@@ -221,7 +221,7 @@ func collectGitCommits(townRoot, actor string, since time.Time) ([]AuditEntry, e
|
||||
|
||||
// extractAuthorName extracts the likely git author name from an actor address.
|
||||
func extractAuthorName(actor string) string {
|
||||
// Actor format: "gastown/crew/joe" -> "joe"
|
||||
// Actor format: "greenplace/crew/joe" -> "joe"
|
||||
// Or: "mayor" -> "mayor"
|
||||
parts := strings.Split(actor, "/")
|
||||
if len(parts) > 0 {
|
||||
|
||||
@@ -35,7 +35,7 @@ The message is sent as a nudge to each worker's Claude Code session.
|
||||
|
||||
Examples:
|
||||
gt broadcast "Check your mail"
|
||||
gt broadcast --rig gastown "New priority work available"
|
||||
gt broadcast --rig greenplace "New priority work available"
|
||||
gt broadcast --all "System maintenance in 5 minutes"
|
||||
gt broadcast --dry-run "Test message"`,
|
||||
Args: cobra.ExactArgs(1),
|
||||
|
||||
@@ -57,7 +57,7 @@ The workspace is created at <rig>/crew/<name>/ with:
|
||||
|
||||
Examples:
|
||||
gt crew add dave # Create in current rig
|
||||
gt crew add emma --rig gastown # Create in specific rig
|
||||
gt crew add emma --rig greenplace # Create in specific rig
|
||||
gt crew add fred --branch # Create with feature branch`,
|
||||
Args: cobra.ExactArgs(1),
|
||||
RunE: runCrewAdd,
|
||||
@@ -72,7 +72,7 @@ Shows git branch, session state, and git status for each workspace.
|
||||
|
||||
Examples:
|
||||
gt crew list # List in current rig
|
||||
gt crew list --rig gastown # List in specific rig
|
||||
gt crew list --rig greenplace # List in specific rig
|
||||
gt crew list --json # JSON output`,
|
||||
RunE: runCrewList,
|
||||
}
|
||||
@@ -244,7 +244,7 @@ var crewStartCmd = &cobra.Command{
|
||||
This is an alias for 'gt start crew'. It combines 'gt crew add' and 'gt crew at --detached'.
|
||||
The crew session starts in the background with Claude running and ready.
|
||||
|
||||
The name can include the rig in slash format (e.g., gastown/joe).
|
||||
The name can include the rig in slash format (e.g., greenplace/joe).
|
||||
If not specified, the rig is inferred from the current directory.
|
||||
|
||||
Role Discovery:
|
||||
@@ -254,7 +254,7 @@ Role Discovery:
|
||||
|
||||
Examples:
|
||||
gt crew start joe # Start joe in current rig
|
||||
gt crew start gastown/joe # Start joe in gastown rig
|
||||
gt crew start greenplace/joe # Start joe in gastown rig
|
||||
gt crew start beads/grip beads/fang # Start multiple crew members
|
||||
gt crew start joe --rig beads # Start joe in beads rig
|
||||
gt crew start # Auto-detect from cwd`,
|
||||
|
||||
@@ -30,9 +30,9 @@ var cycleCmd = &cobra.Command{
|
||||
|
||||
Session groups:
|
||||
- Town sessions: Mayor ↔ Deacon
|
||||
- Crew sessions: All crew members in the same rig (e.g., gastown/crew/max ↔ gastown/crew/joe)
|
||||
- Crew sessions: All crew members in the same rig (e.g., greenplace/crew/max ↔ greenplace/crew/joe)
|
||||
- Rig infra sessions: Witness ↔ Refinery (per rig)
|
||||
- Polecat sessions: All polecats in the same rig (e.g., gastown/Toast ↔ gastown/Nux)
|
||||
- Polecat sessions: All polecats in the same rig (e.g., greenplace/Toast ↔ greenplace/Nux)
|
||||
|
||||
The appropriate cycling is detected automatically from the session name.`,
|
||||
}
|
||||
|
||||
@@ -84,7 +84,7 @@ Examples:
|
||||
gt feed --plain # Plain text output (bd activity)
|
||||
gt feed --window # Open in dedicated tmux window
|
||||
gt feed --since 1h # Events from last hour
|
||||
gt feed --rig gastown # Use gastown rig's beads`,
|
||||
gt feed --rig greenplace # Use gastown rig's beads`,
|
||||
RunE: runFeed,
|
||||
}
|
||||
|
||||
|
||||
@@ -46,7 +46,7 @@ Examples:
|
||||
gt log # Show last 20 events
|
||||
gt log -n 50 # Show last 50 events
|
||||
gt log --type spawn # Show only spawn events
|
||||
gt log --agent gastown/ # Show events for gastown rig
|
||||
gt log --agent greenplace/ # Show events for gastown rig
|
||||
gt log --since 1h # Show events from last hour
|
||||
gt log -f # Follow log (like tail -f)`,
|
||||
RunE: runLog,
|
||||
@@ -65,19 +65,19 @@ The exit code determines if this was a crash or expected exit:
|
||||
- Exit code non-zero: Crash (logged as 'crash')
|
||||
|
||||
Examples:
|
||||
gt log crash --agent gastown/Toast --session gt-gastown-Toast --exit-code 1`,
|
||||
gt log crash --agent greenplace/Toast --session gt-greenplace-Toast --exit-code 1`,
|
||||
RunE: runLogCrash,
|
||||
}
|
||||
|
||||
func init() {
|
||||
logCmd.Flags().IntVarP(&logTail, "tail", "n", 20, "Number of events to show")
|
||||
logCmd.Flags().StringVarP(&logType, "type", "t", "", "Filter by event type (spawn,wake,nudge,handoff,done,crash,kill)")
|
||||
logCmd.Flags().StringVarP(&logAgent, "agent", "a", "", "Filter by agent prefix (e.g., gastown/, gastown/crew/max)")
|
||||
logCmd.Flags().StringVarP(&logAgent, "agent", "a", "", "Filter by agent prefix (e.g., gastown/, greenplace/crew/max)")
|
||||
logCmd.Flags().StringVar(&logSince, "since", "", "Show events since duration (e.g., 1h, 30m, 24h)")
|
||||
logCmd.Flags().BoolVarP(&logFollow, "follow", "f", false, "Follow log output (like tail -f)")
|
||||
|
||||
// crash subcommand flags
|
||||
logCrashCmd.Flags().StringVar(&crashAgent, "agent", "", "Agent ID (e.g., gastown/Toast)")
|
||||
logCrashCmd.Flags().StringVar(&crashAgent, "agent", "", "Agent ID (e.g., greenplace/Toast)")
|
||||
logCrashCmd.Flags().StringVar(&crashSession, "session", "", "Tmux session name")
|
||||
logCrashCmd.Flags().IntVar(&crashExitCode, "exit-code", -1, "Exit code from pane")
|
||||
_ = logCrashCmd.MarkFlagRequired("agent")
|
||||
|
||||
@@ -61,10 +61,10 @@ MAIL ROUTING:
|
||||
│ │
|
||||
│ ┌─────────────────────────────────────────────┐ │
|
||||
│ │ gastown/ (rig mailboxes) │ │
|
||||
│ │ ├── witness ← gastown/witness │ │
|
||||
│ │ ├── refinery ← gastown/refinery │ │
|
||||
│ │ ├── Toast ← gastown/Toast │ │
|
||||
│ │ └── crew/max ← gastown/crew/max │ │
|
||||
│ │ ├── witness ← greenplace/witness │ │
|
||||
│ │ ├── refinery ← greenplace/refinery │ │
|
||||
│ │ ├── Toast ← greenplace/Toast │ │
|
||||
│ │ └── crew/max ← greenplace/crew/max │ │
|
||||
│ └─────────────────────────────────────────────┘ │
|
||||
└─────────────────────────────────────────────────────┘
|
||||
|
||||
@@ -72,8 +72,8 @@ ADDRESS FORMATS:
|
||||
mayor/ → Mayor inbox
|
||||
<rig>/witness → Rig's Witness
|
||||
<rig>/refinery → Rig's Refinery
|
||||
<rig>/<polecat> → Polecat (e.g., gastown/Toast)
|
||||
<rig>/crew/<name> → Crew worker (e.g., gastown/crew/max)
|
||||
<rig>/<polecat> → Polecat (e.g., greenplace/Toast)
|
||||
<rig>/crew/<name> → Crew worker (e.g., greenplace/crew/max)
|
||||
--human → Special: human overseer
|
||||
|
||||
COMMANDS:
|
||||
@@ -115,14 +115,14 @@ Priority levels:
|
||||
Use --urgent as shortcut for --priority 0.
|
||||
|
||||
Examples:
|
||||
gt mail send gastown/Toast -s "Status check" -m "How's that bug fix going?"
|
||||
gt mail send greenplace/Toast -s "Status check" -m "How's that bug fix going?"
|
||||
gt mail send mayor/ -s "Work complete" -m "Finished gt-abc"
|
||||
gt mail send gastown/ -s "All hands" -m "Swarm starting" --notify
|
||||
gt mail send gastown/Toast -s "Task" -m "Fix bug" --type task --priority 1
|
||||
gt mail send gastown/Toast -s "Urgent" -m "Help!" --urgent
|
||||
gt mail send greenplace/Toast -s "Task" -m "Fix bug" --type task --priority 1
|
||||
gt mail send greenplace/Toast -s "Urgent" -m "Help!" --urgent
|
||||
gt mail send mayor/ -s "Re: Status" -m "Done" --reply-to msg-abc123
|
||||
gt mail send --self -s "Handoff" -m "Context for next session"
|
||||
gt mail send gastown/Toast -s "Update" -m "Progress report" --cc overseer
|
||||
gt mail send greenplace/Toast -s "Update" -m "Progress report" --cc overseer
|
||||
gt mail send list:oncall -s "Alert" -m "System down"`,
|
||||
Args: cobra.MaximumNArgs(1),
|
||||
RunE: runMailSend,
|
||||
@@ -139,8 +139,8 @@ Use --identity for polecats to explicitly specify their identity.
|
||||
Examples:
|
||||
gt mail inbox # Current context (auto-detected)
|
||||
gt mail inbox mayor/ # Mayor's inbox
|
||||
gt mail inbox gastown/Toast # Polecat's inbox
|
||||
gt mail inbox --identity gastown/Toast # Explicit polecat identity`,
|
||||
gt mail inbox greenplace/Toast # Polecat's inbox
|
||||
gt mail inbox --identity greenplace/Toast # Explicit polecat identity`,
|
||||
Args: cobra.MaximumNArgs(1),
|
||||
RunE: runMailInbox,
|
||||
}
|
||||
@@ -203,7 +203,7 @@ Use --identity for polecats to explicitly specify their identity.
|
||||
Examples:
|
||||
gt mail check # Simple check (auto-detect identity)
|
||||
gt mail check --inject # For hooks
|
||||
gt mail check --identity gastown/Toast # Explicit polecat identity`,
|
||||
gt mail check --identity greenplace/Toast # Explicit polecat identity`,
|
||||
RunE: runMailCheck,
|
||||
}
|
||||
|
||||
@@ -256,7 +256,7 @@ func init() {
|
||||
// Inbox flags
|
||||
mailInboxCmd.Flags().BoolVar(&mailInboxJSON, "json", false, "Output as JSON")
|
||||
mailInboxCmd.Flags().BoolVarP(&mailInboxUnread, "unread", "u", false, "Show only unread messages")
|
||||
mailInboxCmd.Flags().StringVar(&mailInboxIdentity, "identity", "", "Explicit identity for inbox (e.g., gastown/Toast)")
|
||||
mailInboxCmd.Flags().StringVar(&mailInboxIdentity, "identity", "", "Explicit identity for inbox (e.g., greenplace/Toast)")
|
||||
mailInboxCmd.Flags().StringVar(&mailInboxIdentity, "address", "", "Alias for --identity")
|
||||
|
||||
// Read flags
|
||||
@@ -265,7 +265,7 @@ func init() {
|
||||
// Check flags
|
||||
mailCheckCmd.Flags().BoolVar(&mailCheckInject, "inject", false, "Output format for Claude Code hooks")
|
||||
mailCheckCmd.Flags().BoolVar(&mailCheckJSON, "json", false, "Output as JSON")
|
||||
mailCheckCmd.Flags().StringVar(&mailCheckIdentity, "identity", "", "Explicit identity for inbox (e.g., gastown/Toast)")
|
||||
mailCheckCmd.Flags().StringVar(&mailCheckIdentity, "identity", "", "Explicit identity for inbox (e.g., greenplace/Toast)")
|
||||
mailCheckCmd.Flags().StringVar(&mailCheckIdentity, "address", "", "Alias for --identity")
|
||||
|
||||
// Thread flags
|
||||
@@ -744,7 +744,7 @@ func detectSender() string {
|
||||
|
||||
// detectSenderFromRole builds an address from the GT_ROLE and related env vars.
|
||||
// GT_ROLE can be either a simple role name ("crew", "polecat") or a full address
|
||||
// ("gastown/crew/joe") depending on how the session was started.
|
||||
// ("greenplace/crew/joe") depending on how the session was started.
|
||||
//
|
||||
// If GT_ROLE is a simple name but required env vars (GT_RIG, GT_POLECAT, etc.)
|
||||
// are missing, falls back to cwd-based detection. This could return "overseer"
|
||||
|
||||
@@ -135,9 +135,9 @@ Output includes:
|
||||
- Next action hint
|
||||
|
||||
Examples:
|
||||
gt mol status # Show current agent's hook
|
||||
gt mol status gastown/nux # Show specific polecat's hook
|
||||
gt mol status gastown/witness # Show witness's hook`,
|
||||
gt mol status # Show current agent's hook
|
||||
gt mol status greenplace/nux # Show specific polecat's hook
|
||||
gt mol status greenplace/witness # Show witness's hook`,
|
||||
Args: cobra.MaximumNArgs(1),
|
||||
RunE: runMoleculeStatus,
|
||||
}
|
||||
@@ -159,10 +159,10 @@ Output includes:
|
||||
- Current step that should be worked on next
|
||||
|
||||
Examples:
|
||||
gt molecule current # Current agent's work
|
||||
gt molecule current gastown/furiosa
|
||||
gt molecule current # Current agent's work
|
||||
gt molecule current greenplace/furiosa
|
||||
gt molecule current deacon
|
||||
gt mol current gastown/witness`,
|
||||
gt mol current greenplace/witness`,
|
||||
Args: cobra.MaximumNArgs(1),
|
||||
RunE: runMoleculeCurrent,
|
||||
}
|
||||
|
||||
@@ -68,7 +68,7 @@ Creates a merge-request bead that will be processed by the Refinery.
|
||||
|
||||
Auto-detection:
|
||||
- Branch: current git branch
|
||||
- Issue: parsed from branch name (e.g., polecat/Nux/gt-xyz → gt-xyz)
|
||||
- Issue: parsed from branch name (e.g., polecat/Nux/gp-xyz → gt-xyz)
|
||||
- Worker: parsed from branch name
|
||||
- Rig: detected from current directory
|
||||
- Target: automatically determined (see below)
|
||||
@@ -91,7 +91,7 @@ Polecat auto-cleanup:
|
||||
|
||||
Examples:
|
||||
gt mq submit # Auto-detect everything + auto-cleanup
|
||||
gt mq submit --issue gt-abc # Explicit issue
|
||||
gt mq submit --issue gp-abc # Explicit issue
|
||||
gt mq submit --epic gt-xyz # Target integration branch explicitly
|
||||
gt mq submit --priority 0 # Override priority (P0)
|
||||
gt mq submit --no-cleanup # Submit without auto-cleanup`,
|
||||
@@ -107,8 +107,8 @@ Resets a failed MR so it can be processed again by the refinery.
|
||||
The MR must be in a failed state (open with an error).
|
||||
|
||||
Examples:
|
||||
gt mq retry gastown gt-mr-abc123
|
||||
gt mq retry gastown gt-mr-abc123 --now`,
|
||||
gt mq retry greenplace gp-mr-abc123
|
||||
gt mq retry greenplace gp-mr-abc123 --now`,
|
||||
Args: cobra.ExactArgs(2),
|
||||
RunE: runMQRetry,
|
||||
}
|
||||
@@ -122,16 +122,16 @@ Lists all pending merge requests waiting to be processed.
|
||||
|
||||
Output format:
|
||||
ID STATUS PRIORITY BRANCH WORKER AGE
|
||||
gt-mr-001 ready P0 polecat/Nux/gt-xyz Nux 5m
|
||||
gt-mr-001 ready P0 polecat/Nux/gp-xyz Nux 5m
|
||||
gt-mr-002 in_progress P1 polecat/Toast/gt-abc Toast 12m
|
||||
gt-mr-003 blocked P1 polecat/Capable/gt-def Capable 8m
|
||||
(waiting on gt-mr-001)
|
||||
|
||||
Examples:
|
||||
gt mq list gastown
|
||||
gt mq list gastown --ready
|
||||
gt mq list gastown --status=open
|
||||
gt mq list gastown --worker=Nux`,
|
||||
gt mq list greenplace
|
||||
gt mq list greenplace --ready
|
||||
gt mq list greenplace --status=open
|
||||
gt mq list greenplace --worker=Nux`,
|
||||
Args: cobra.ExactArgs(1),
|
||||
RunE: runMQList,
|
||||
}
|
||||
@@ -145,8 +145,8 @@ This closes the MR with a 'rejected' status without merging.
|
||||
The source issue is NOT closed (work is not done).
|
||||
|
||||
Examples:
|
||||
gt mq reject gastown polecat/Nux/gt-xyz --reason "Does not meet requirements"
|
||||
gt mq reject gastown mr-Nux-12345 --reason "Superseded by other work" --notify`,
|
||||
gt mq reject greenplace polecat/Nux/gp-xyz --reason "Does not meet requirements"
|
||||
gt mq reject greenplace mr-Nux-12345 --reason "Superseded by other work" --notify`,
|
||||
Args: cobra.ExactArgs(2),
|
||||
RunE: runMQReject,
|
||||
}
|
||||
@@ -160,7 +160,7 @@ Shows all MR fields, current status with timestamps, dependencies,
|
||||
blockers, and processing history.
|
||||
|
||||
Example:
|
||||
gt mq status gt-mr-abc123`,
|
||||
gt mq status gp-mr-abc123`,
|
||||
Args: cobra.ExactArgs(1),
|
||||
RunE: runMqStatus,
|
||||
}
|
||||
|
||||
@@ -33,8 +33,8 @@ Special targets:
|
||||
deacon Maps to the Deacon session (gt-deacon)
|
||||
|
||||
Examples:
|
||||
gt nudge gastown/furiosa "Check your mail and start working"
|
||||
gt nudge gastown/alpha "What's your status?"
|
||||
gt nudge greenplace/furiosa "Check your mail and start working"
|
||||
gt nudge greenplace/alpha "What's your status?"
|
||||
gt nudge deacon session-started`,
|
||||
Args: cobra.ExactArgs(2),
|
||||
RunE: runNudge,
|
||||
|
||||
@@ -29,9 +29,9 @@ The nudge/peek pair provides the canonical interface for agent sessions:
|
||||
gt peek - read output FROM a session (capture-pane wrapper)
|
||||
|
||||
Examples:
|
||||
gt peek gastown/furiosa # Last 100 lines (default)
|
||||
gt peek gastown/furiosa 50 # Last 50 lines
|
||||
gt peek gastown/furiosa -n 200 # Last 200 lines`,
|
||||
gt peek greenplace/furiosa # Last 100 lines (default)
|
||||
gt peek greenplace/furiosa 50 # Last 50 lines
|
||||
gt peek greenplace/furiosa -n 200 # Last 200 lines`,
|
||||
Args: cobra.RangeArgs(1, 2),
|
||||
RunE: runPeek,
|
||||
}
|
||||
|
||||
@@ -51,9 +51,9 @@ all currently active polecats with their states:
|
||||
- stuck: Needs assistance
|
||||
|
||||
Examples:
|
||||
gt polecat list gastown
|
||||
gt polecat list greenplace
|
||||
gt polecat list --all
|
||||
gt polecat list gastown --json`,
|
||||
gt polecat list greenplace --json`,
|
||||
RunE: runPolecatList,
|
||||
}
|
||||
|
||||
@@ -66,7 +66,7 @@ Creates a polecat directory, clones the rig repo, creates a work branch,
|
||||
and initializes state.
|
||||
|
||||
Example:
|
||||
gt polecat add gastown Toast`,
|
||||
gt polecat add greenplace Toast`,
|
||||
Args: cobra.ExactArgs(2),
|
||||
RunE: runPolecatAdd,
|
||||
}
|
||||
@@ -81,10 +81,10 @@ Warns if uncommitted changes exist.
|
||||
Use --force to bypass checks.
|
||||
|
||||
Examples:
|
||||
gt polecat remove gastown/Toast
|
||||
gt polecat remove gastown/Toast gastown/Furiosa
|
||||
gt polecat remove gastown --all
|
||||
gt polecat remove gastown --all --force`,
|
||||
gt polecat remove greenplace/Toast
|
||||
gt polecat remove greenplace/Toast greenplace/Furiosa
|
||||
gt polecat remove greenplace --all
|
||||
gt polecat remove greenplace --all --force`,
|
||||
Args: cobra.MinimumNArgs(1),
|
||||
RunE: runPolecatRemove,
|
||||
}
|
||||
@@ -100,7 +100,7 @@ via 'gt sling'. This command is kept for backward compatibility.
|
||||
Transitions: done → working
|
||||
|
||||
Example:
|
||||
gt polecat wake gastown/Toast`,
|
||||
gt polecat wake greenplace/Toast`,
|
||||
Args: cobra.ExactArgs(1),
|
||||
RunE: runPolecatWake,
|
||||
}
|
||||
@@ -117,7 +117,7 @@ backward compatibility.
|
||||
Transitions: working → done
|
||||
|
||||
Example:
|
||||
gt polecat sleep gastown/Toast`,
|
||||
gt polecat sleep greenplace/Toast`,
|
||||
Args: cobra.ExactArgs(1),
|
||||
RunE: runPolecatSleep,
|
||||
}
|
||||
@@ -133,8 +133,8 @@ Clears the assigned issue.
|
||||
Fails if session is running (stop first).
|
||||
|
||||
Example:
|
||||
gt polecat done gastown/Toast
|
||||
gt polecat finish gastown/Toast`,
|
||||
gt polecat done greenplace/Toast
|
||||
gt polecat finish greenplace/Toast`,
|
||||
Args: cobra.ExactArgs(1),
|
||||
RunE: runPolecatDone,
|
||||
}
|
||||
@@ -150,7 +150,7 @@ Use when polecat is stuck in an unexpected state.
|
||||
Fails if session is running (stop first).
|
||||
|
||||
Example:
|
||||
gt polecat reset gastown/Toast`,
|
||||
gt polecat reset greenplace/Toast`,
|
||||
Args: cobra.ExactArgs(1),
|
||||
RunE: runPolecatReset,
|
||||
}
|
||||
@@ -167,9 +167,9 @@ Use --all to sync all polecats in a rig.
|
||||
Use --from-main to only pull (no push).
|
||||
|
||||
Examples:
|
||||
gt polecat sync gastown/Toast
|
||||
gt polecat sync gastown --all
|
||||
gt polecat sync gastown/Toast --from-main`,
|
||||
gt polecat sync greenplace/Toast
|
||||
gt polecat sync greenplace --all
|
||||
gt polecat sync greenplace/Toast --from-main`,
|
||||
Args: cobra.MaximumNArgs(1),
|
||||
RunE: runPolecatSync,
|
||||
}
|
||||
@@ -187,8 +187,8 @@ Displays comprehensive information including:
|
||||
- Last activity time
|
||||
|
||||
Examples:
|
||||
gt polecat status gastown/Toast
|
||||
gt polecat status gastown/Toast --json`,
|
||||
gt polecat status greenplace/Toast
|
||||
gt polecat status greenplace/Toast --json`,
|
||||
Args: cobra.ExactArgs(1),
|
||||
RunE: runPolecatStatus,
|
||||
}
|
||||
@@ -217,8 +217,8 @@ This command removes orphaned branches:
|
||||
- Old timestamped branches (keeps only the current one per polecat)
|
||||
|
||||
Examples:
|
||||
gt polecat gc gastown
|
||||
gt polecat gc gastown --dry-run`,
|
||||
gt polecat gc greenplace
|
||||
gt polecat gc greenplace --dry-run`,
|
||||
Args: cobra.ExactArgs(1),
|
||||
RunE: runPolecatGC,
|
||||
}
|
||||
@@ -237,10 +237,10 @@ This is the nuclear option for post-merge cleanup. It:
|
||||
Use this after the Refinery has merged the polecat's work.
|
||||
|
||||
Examples:
|
||||
gt polecat nuke gastown/Toast
|
||||
gt polecat nuke gastown/Toast gastown/Furiosa
|
||||
gt polecat nuke gastown --all
|
||||
gt polecat nuke gastown --all --dry-run`,
|
||||
gt polecat nuke greenplace/Toast
|
||||
gt polecat nuke greenplace/Toast greenplace/Furiosa
|
||||
gt polecat nuke greenplace --all
|
||||
gt polecat nuke greenplace --all --dry-run`,
|
||||
Args: cobra.MinimumNArgs(1),
|
||||
RunE: runPolecatNuke,
|
||||
}
|
||||
@@ -259,8 +259,8 @@ Checks:
|
||||
- Stashes: stashed changes
|
||||
|
||||
Examples:
|
||||
gt polecat git-state gastown/Toast
|
||||
gt polecat git-state gastown/Toast --json`,
|
||||
gt polecat git-state greenplace/Toast
|
||||
gt polecat git-state greenplace/Toast --json`,
|
||||
Args: cobra.ExactArgs(1),
|
||||
RunE: runPolecatGitState,
|
||||
}
|
||||
@@ -465,7 +465,7 @@ func runPolecatRemove(cmd *cobra.Command, args []string) error {
|
||||
rigName := args[0]
|
||||
// Check if it looks like rig/polecat format
|
||||
if _, _, err := parseAddress(rigName); err == nil {
|
||||
return fmt.Errorf("with --all, provide just the rig name (e.g., 'gt polecat remove gastown --all')")
|
||||
return fmt.Errorf("with --all, provide just the rig name (e.g., 'gt polecat remove greenplace --all')")
|
||||
}
|
||||
|
||||
mgr, r, err := getPolecatManager(rigName)
|
||||
@@ -1150,7 +1150,7 @@ func runPolecatNuke(cmd *cobra.Command, args []string) error {
|
||||
rigName := args[0]
|
||||
// Check if it looks like rig/polecat format
|
||||
if _, _, err := parseAddress(rigName); err == nil {
|
||||
return fmt.Errorf("with --all, provide just the rig name (e.g., 'gt polecat nuke gastown --all')")
|
||||
return fmt.Errorf("with --all, provide just the rig name (e.g., 'gt polecat nuke greenplace --all')")
|
||||
}
|
||||
|
||||
mgr, r, err := getPolecatManager(rigName)
|
||||
|
||||
@@ -13,15 +13,15 @@ func TestParsePolecatSessionName(t *testing.T) {
|
||||
// Valid polecat sessions
|
||||
{
|
||||
name: "simple polecat",
|
||||
sessionName: "gt-gastown-Toast",
|
||||
wantRig: "gastown",
|
||||
sessionName: "gt-greenplace-Toast",
|
||||
wantRig: "greenplace",
|
||||
wantPolecat: "Toast",
|
||||
wantOk: true,
|
||||
},
|
||||
{
|
||||
name: "another polecat",
|
||||
sessionName: "gt-gastown-Nux",
|
||||
wantRig: "gastown",
|
||||
sessionName: "gt-greenplace-Nux",
|
||||
wantRig: "greenplace",
|
||||
wantPolecat: "Nux",
|
||||
wantOk: true,
|
||||
},
|
||||
@@ -34,8 +34,8 @@ func TestParsePolecatSessionName(t *testing.T) {
|
||||
},
|
||||
{
|
||||
name: "polecat with hyphen in name",
|
||||
sessionName: "gt-gastown-Max-01",
|
||||
wantRig: "gastown",
|
||||
sessionName: "gt-greenplace-Max-01",
|
||||
wantRig: "greenplace",
|
||||
wantPolecat: "Max-01",
|
||||
wantOk: true,
|
||||
},
|
||||
@@ -43,21 +43,21 @@ func TestParsePolecatSessionName(t *testing.T) {
|
||||
// Not polecat sessions (should return false)
|
||||
{
|
||||
name: "crew session",
|
||||
sessionName: "gt-gastown-crew-jack",
|
||||
sessionName: "gt-greenplace-crew-jack",
|
||||
wantRig: "",
|
||||
wantPolecat: "",
|
||||
wantOk: false,
|
||||
},
|
||||
{
|
||||
name: "witness session",
|
||||
sessionName: "gt-gastown-witness",
|
||||
sessionName: "gt-greenplace-witness",
|
||||
wantRig: "",
|
||||
wantPolecat: "",
|
||||
wantOk: false,
|
||||
},
|
||||
{
|
||||
name: "refinery session",
|
||||
sessionName: "gt-gastown-refinery",
|
||||
sessionName: "gt-greenplace-refinery",
|
||||
wantRig: "",
|
||||
wantPolecat: "",
|
||||
wantOk: false,
|
||||
@@ -99,7 +99,7 @@ func TestParsePolecatSessionName(t *testing.T) {
|
||||
},
|
||||
{
|
||||
name: "no name after rig",
|
||||
sessionName: "gt-gastown-",
|
||||
sessionName: "gt-greenplace-",
|
||||
wantRig: "",
|
||||
wantPolecat: "",
|
||||
wantOk: false,
|
||||
|
||||
@@ -42,8 +42,8 @@ and merges them to the appropriate target branches.
|
||||
If rig is not specified, infers it from the current directory.
|
||||
|
||||
Examples:
|
||||
gt refinery start gastown
|
||||
gt refinery start gastown --foreground
|
||||
gt refinery start greenplace
|
||||
gt refinery start greenplace --foreground
|
||||
gt refinery start # infer rig from cwd`,
|
||||
Args: cobra.MaximumNArgs(1),
|
||||
RunE: runRefineryStart,
|
||||
@@ -93,7 +93,7 @@ or manual intervention.
|
||||
If rig is not specified, infers it from the current directory.
|
||||
|
||||
Examples:
|
||||
gt refinery attach gastown
|
||||
gt refinery attach greenplace
|
||||
gt refinery attach # infer rig from cwd`,
|
||||
Args: cobra.MaximumNArgs(1),
|
||||
RunE: runRefineryAttach,
|
||||
@@ -108,7 +108,7 @@ Stops the current session (if running) and starts a fresh one.
|
||||
If rig is not specified, infers it from the current directory.
|
||||
|
||||
Examples:
|
||||
gt refinery restart gastown
|
||||
gt refinery restart greenplace
|
||||
gt refinery restart # infer rig from cwd`,
|
||||
Args: cobra.MaximumNArgs(1),
|
||||
RunE: runRefineryRestart,
|
||||
|
||||
@@ -106,7 +106,7 @@ Polecats are NOT started by this command - they are spawned
|
||||
on demand when work is assigned.
|
||||
|
||||
Examples:
|
||||
gt rig boot gastown`,
|
||||
gt rig boot greenplace`,
|
||||
Args: cobra.ExactArgs(1),
|
||||
RunE: runRigBoot,
|
||||
}
|
||||
@@ -120,7 +120,7 @@ This is equivalent to 'gt rig shutdown' followed by 'gt rig boot'.
|
||||
Useful after polecats complete work and land their changes.
|
||||
|
||||
Examples:
|
||||
gt rig reboot gastown
|
||||
gt rig reboot greenplace
|
||||
gt rig reboot beads --force`,
|
||||
Args: cobra.ExactArgs(1),
|
||||
RunE: runRigReboot,
|
||||
@@ -145,9 +145,9 @@ Use --force to skip graceful shutdown and kill immediately.
|
||||
Use --nuclear to bypass ALL safety checks (will lose work!).
|
||||
|
||||
Examples:
|
||||
gt rig shutdown gastown
|
||||
gt rig shutdown gastown --force
|
||||
gt rig shutdown gastown --nuclear # DANGER: loses uncommitted work`,
|
||||
gt rig shutdown greenplace
|
||||
gt rig shutdown greenplace --force
|
||||
gt rig shutdown greenplace --nuclear # DANGER: loses uncommitted work`,
|
||||
Args: cobra.ExactArgs(1),
|
||||
RunE: runRigShutdown,
|
||||
}
|
||||
|
||||
@@ -120,7 +120,7 @@ This command is a low-level primitive for file-based injection or
|
||||
cases where you need raw tmux send-keys behavior.
|
||||
|
||||
Examples:
|
||||
gt nudge gastown/furiosa "Check your mail" # Preferred
|
||||
gt nudge greenplace/furiosa "Check your mail" # Preferred
|
||||
gt session inject wyvern/Toast -f prompt.txt # For file injection`,
|
||||
Args: cobra.ExactArgs(1),
|
||||
RunE: runSessionInject,
|
||||
@@ -160,7 +160,7 @@ Use this for manual health checks or debugging session issues.
|
||||
|
||||
Examples:
|
||||
gt session check # Check all rigs
|
||||
gt session check gastown # Check specific rig`,
|
||||
gt session check greenplace # Check specific rig`,
|
||||
Args: cobra.MaximumNArgs(1),
|
||||
RunE: runSessionCheck,
|
||||
}
|
||||
|
||||
@@ -35,18 +35,18 @@ This is THE command for assigning work in Gas Town. It handles:
|
||||
Target Resolution:
|
||||
gt sling gt-abc # Self (current agent)
|
||||
gt sling gt-abc crew # Crew worker in current rig
|
||||
gt sling gt-abc gastown # Auto-spawn polecat in rig
|
||||
gt sling gt-abc gastown/Toast # Specific polecat
|
||||
gt sling gp-abc greenplace # Auto-spawn polecat in rig
|
||||
gt sling gt-abc greenplace/Toast # Specific polecat
|
||||
gt sling gt-abc mayor # Mayor
|
||||
gt sling gt-abc deacon/dogs # Auto-dispatch to idle dog
|
||||
gt sling gt-abc deacon/dogs/alpha # Specific dog
|
||||
|
||||
Spawning Options (when target is a rig):
|
||||
gt sling gt-abc gastown --molecule mol-review # Use specific workflow
|
||||
gt sling gt-abc gastown --create # Create polecat if missing
|
||||
gt sling gt-abc gastown --naked # No-tmux (manual start)
|
||||
gt sling gt-abc gastown --force # Ignore unread mail
|
||||
gt sling gt-abc gastown --account work # Use specific Claude account
|
||||
gt sling gp-abc greenplace --molecule mol-review # Use specific workflow
|
||||
gt sling gp-abc greenplace --create # Create polecat if missing
|
||||
gt sling gp-abc greenplace --naked # No-tmux (manual start)
|
||||
gt sling gp-abc greenplace --force # Ignore unread mail
|
||||
gt sling gp-abc greenplace --account work # Use specific Claude account
|
||||
|
||||
Natural Language Args:
|
||||
gt sling gt-abc --args "patch release"
|
||||
@@ -64,9 +64,9 @@ Formula-on-Bead (--on flag):
|
||||
gt sling shiny --on gt-abc crew # Apply formula, sling to crew
|
||||
|
||||
Quality Levels (shorthand for polecat workflows):
|
||||
gt sling gt-abc gastown --quality=basic # mol-polecat-basic (trivial fixes)
|
||||
gt sling gt-abc gastown --quality=shiny # mol-polecat-shiny (standard)
|
||||
gt sling gt-abc gastown --quality=chrome # mol-polecat-chrome (max rigor)
|
||||
gt sling gp-abc greenplace --quality=basic # mol-polecat-basic (trivial fixes)
|
||||
gt sling gp-abc greenplace --quality=shiny # mol-polecat-shiny (standard)
|
||||
gt sling gp-abc greenplace --quality=chrome # mol-polecat-chrome (max rigor)
|
||||
|
||||
Compare:
|
||||
gt hook <bead> # Just attach (no action)
|
||||
@@ -126,7 +126,7 @@ func runSling(cmd *cobra.Command, args []string) error {
|
||||
}
|
||||
|
||||
// --quality is shorthand for formula-on-bead with polecat workflow
|
||||
// Convert: gt sling gt-abc gastown --quality=shiny
|
||||
// Convert: gt sling gp-abc greenplace --quality=shiny
|
||||
// To: gt sling mol-polecat-shiny --on gt-abc gastown
|
||||
if slingQuality != "" {
|
||||
qualityFormula, err := qualityToFormula(slingQuality)
|
||||
@@ -793,10 +793,10 @@ func runSlingFormula(args []string) error {
|
||||
func updateAgentHookBead(agentID, beadID string) {
|
||||
// Convert agent ID to agent bead ID
|
||||
// Format examples (canonical: prefix-rig-role-name):
|
||||
// gastown/crew/max -> gt-gastown-crew-max
|
||||
// gastown/polecats/Toast -> gt-gastown-polecat-Toast
|
||||
// greenplace/crew/max -> gt-greenplace-crew-max
|
||||
// greenplace/polecats/Toast -> gt-greenplace-polecat-Toast
|
||||
// mayor -> gt-mayor
|
||||
// gastown/witness -> gt-gastown-witness
|
||||
// greenplace/witness -> gt-greenplace-witness
|
||||
agentBeadID := agentIDToBeadID(agentID)
|
||||
if agentBeadID == "" {
|
||||
return
|
||||
|
||||
@@ -89,12 +89,12 @@ var startCrewCmd = &cobra.Command{
|
||||
This is a convenience command that combines 'gt crew add' and 'gt crew at --detached'.
|
||||
The crew session starts in the background with Claude running and ready.
|
||||
|
||||
The name can include the rig in slash format (e.g., gastown/joe).
|
||||
The name can include the rig in slash format (e.g., greenplace/joe).
|
||||
If not specified, the rig is inferred from the current directory.
|
||||
|
||||
Examples:
|
||||
gt start crew joe # Start joe in current rig
|
||||
gt start crew gastown/joe # Start joe in gastown rig
|
||||
gt start crew greenplace/joe # Start joe in gastown rig
|
||||
gt start crew joe --rig beads # Start joe in beads rig`,
|
||||
Args: cobra.ExactArgs(1),
|
||||
RunE: runStartCrew,
|
||||
@@ -660,7 +660,7 @@ func cleanupPolecats(townRoot string) {
|
||||
func runStartCrew(cmd *cobra.Command, args []string) error {
|
||||
name := args[0]
|
||||
|
||||
// Parse rig/name format (e.g., "gastown/joe" -> rig=gastown, name=joe)
|
||||
// Parse rig/name format (e.g., "greenplace/joe" -> rig=gastown, name=joe)
|
||||
rigName := startCrewRig
|
||||
if parsedRig, crewName, ok := parseRigSlashName(name); ok {
|
||||
if rigName == "" {
|
||||
|
||||
@@ -60,7 +60,7 @@ type OverseerInfo struct {
|
||||
// AgentRuntime represents the runtime state of an agent.
|
||||
type AgentRuntime struct {
|
||||
Name string `json:"name"` // Display name (e.g., "mayor", "witness")
|
||||
Address string `json:"address"` // Full address (e.g., "gastown/witness")
|
||||
Address string `json:"address"` // Full address (e.g., "greenplace/witness")
|
||||
Session string `json:"session"` // tmux session name
|
||||
Role string `json:"role"` // Role type
|
||||
Running bool `json:"running"` // Is tmux session running?
|
||||
@@ -95,7 +95,7 @@ type MQSummary struct {
|
||||
|
||||
// AgentHookInfo represents an agent's hook (pinned work) status.
|
||||
type AgentHookInfo struct {
|
||||
Agent string `json:"agent"` // Agent address (e.g., "gastown/toast", "gastown/witness")
|
||||
Agent string `json:"agent"` // Agent address (e.g., "greenplace/toast", "greenplace/witness")
|
||||
Role string `json:"role"` // Role type (polecat, crew, witness, refinery)
|
||||
HasWork bool `json:"has_work"` // Whether agent has pinned work
|
||||
Molecule string `json:"molecule,omitempty"` // Attached molecule ID
|
||||
|
||||
@@ -89,8 +89,8 @@ Creates a swarm that coordinates multiple polecats working on tasks from
|
||||
a beads epic. All workers branch from the same base commit.
|
||||
|
||||
Examples:
|
||||
gt swarm create gastown --epic gt-abc --worker Toast --worker Nux
|
||||
gt swarm create gastown --epic gt-abc --worker Toast --start`,
|
||||
gt swarm create greenplace --epic gp-abc --worker Toast --worker Nux
|
||||
gt swarm create greenplace --epic gp-abc --worker Toast --start`,
|
||||
Args: cobra.ExactArgs(1),
|
||||
RunE: runSwarmCreate,
|
||||
}
|
||||
@@ -113,9 +113,9 @@ var swarmListCmd = &cobra.Command{
|
||||
|
||||
Examples:
|
||||
gt swarm list
|
||||
gt swarm list gastown
|
||||
gt swarm list greenplace
|
||||
gt swarm list --status=active
|
||||
gt swarm list gastown --status=landed`,
|
||||
gt swarm list greenplace --status=landed`,
|
||||
Args: cobra.MaximumNArgs(1),
|
||||
RunE: runSwarmList,
|
||||
}
|
||||
@@ -161,7 +161,7 @@ to an idle polecat in the rig.
|
||||
|
||||
Examples:
|
||||
gt swarm dispatch gt-abc # Dispatch next task from epic gt-abc
|
||||
gt swarm dispatch gt-abc --rig gastown # Dispatch in specific rig`,
|
||||
gt swarm dispatch gt-abc --rig greenplace # Dispatch in specific rig`,
|
||||
Args: cobra.ExactArgs(1),
|
||||
RunE: runSwarmDispatch,
|
||||
}
|
||||
|
||||
@@ -23,8 +23,8 @@ another agent's hook.
|
||||
Examples:
|
||||
gt unsling # Clear my hook (whatever's there)
|
||||
gt unsling gt-abc # Only unsling if gt-abc is hooked
|
||||
gt unsling gastown/joe # Clear joe's hook
|
||||
gt unsling gt-abc gastown/joe # Unsling gt-abc from joe
|
||||
gt unsling greenplace/joe # Clear joe's hook
|
||||
gt unsling gt-abc greenplace/joe # Unsling gt-abc from joe
|
||||
|
||||
The bead's status changes from 'pinned' back to 'open'.
|
||||
|
||||
@@ -154,7 +154,7 @@ func runUnsling(cmd *cobra.Command, args []string) error {
|
||||
// isAgentTarget checks if a string looks like an agent target rather than a bead ID.
|
||||
// Agent targets contain "/" or are known role names.
|
||||
func isAgentTarget(s string) bool {
|
||||
// Contains "/" means it's a path like "gastown/joe"
|
||||
// Contains "/" means it's a path like "greenplace/joe"
|
||||
for _, c := range s {
|
||||
if c == '/' {
|
||||
return true
|
||||
|
||||
@@ -44,8 +44,8 @@ Launches the monitoring agent which watches polecats for stuck or idle
|
||||
states and takes action to keep work flowing.
|
||||
|
||||
Examples:
|
||||
gt witness start gastown
|
||||
gt witness start gastown --foreground`,
|
||||
gt witness start greenplace
|
||||
gt witness start greenplace --foreground`,
|
||||
Args: cobra.ExactArgs(1),
|
||||
RunE: runWitnessStart,
|
||||
}
|
||||
@@ -83,7 +83,7 @@ If the witness is not running, this will start it first.
|
||||
If rig is not specified, infers it from the current directory.
|
||||
|
||||
Examples:
|
||||
gt witness attach gastown
|
||||
gt witness attach greenplace
|
||||
gt witness attach # infer rig from cwd`,
|
||||
Args: cobra.MaximumNArgs(1),
|
||||
RunE: runWitnessAttach,
|
||||
@@ -97,7 +97,7 @@ var witnessRestartCmd = &cobra.Command{
|
||||
Stops the current session (if running) and starts a fresh one.
|
||||
|
||||
Examples:
|
||||
gt witness restart gastown`,
|
||||
gt witness restart greenplace`,
|
||||
Args: cobra.ExactArgs(1),
|
||||
RunE: runWitnessRestart,
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user