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:
Steve Yegge
2025-12-30 18:02:45 -08:00
parent 708cdb2b24
commit 91fa5e63dc
31 changed files with 187 additions and 187 deletions

View File

@@ -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,
}

View File

@@ -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 {

View File

@@ -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),

View File

@@ -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`,

View File

@@ -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.`,
}

View File

@@ -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,
}

View File

@@ -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")

View File

@@ -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"

View File

@@ -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,
}

View File

@@ -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,
}

View File

@@ -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,

View File

@@ -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,
}

View File

@@ -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)

View File

@@ -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,

View File

@@ -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,

View File

@@ -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,
}

View File

@@ -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,
}

View File

@@ -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

View File

@@ -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 == "" {

View File

@@ -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

View File

@@ -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,
}

View File

@@ -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

View File

@@ -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,
}