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
+13 -13
View File
@@ -23,7 +23,7 @@ Full work unit reference (HOP protocol):
``` ```
hop://entity/chain/rig/issue-id hop://entity/chain/rig/issue-id
hop://steve@example.com/main-town/gastown/gt-xyz hop://steve@example.com/main-town/greenplace/gp-xyz
``` ```
Cross-repo reference (same platform): Cross-repo reference (same platform):
@@ -36,9 +36,9 @@ beads://github/acme/backend/ac-123
Within a workspace, short forms are preferred: Within a workspace, short forms are preferred:
``` ```
gt-xyz # Local (prefix routes via routes.jsonl) gp-xyz # Local (prefix routes via routes.jsonl)
gastown/gt-xyz # Different rig, same chain greenplace/gp-xyz # Different rig, same chain
./gt-xyz # Explicit current-rig ref ./gp-xyz # Explicit current-rig ref
``` ```
See `~/gt/docs/hop/GRAPH-ARCHITECTURE.md` for full URI specification. See `~/gt/docs/hop/GRAPH-ARCHITECTURE.md` for full URI specification.
@@ -80,7 +80,7 @@ Distribute work across workspaces:
{ {
"type": "delegation", "type": "delegation",
"parent": "hop://acme.com/projects/proj-123", "parent": "hop://acme.com/projects/proj-123",
"child": "hop://alice@example.com/town/gastown/gt-xyz", "child": "hop://alice@example.com/town/greenplace/gp-xyz",
"terms": { "portion": "backend", "deadline": "2025-02-01" } "terms": { "portion": "backend", "deadline": "2025-02-01" }
} }
``` ```
@@ -94,17 +94,17 @@ complete BD_ACTOR format convention.
```bash ```bash
# Set per agent session # Set per agent session
GIT_AUTHOR_NAME="gastown/crew/joe" GIT_AUTHOR_NAME="greenplace/crew/joe"
GIT_AUTHOR_EMAIL="steve@example.com" # Workspace owner GIT_AUTHOR_EMAIL="steve@example.com" # Workspace owner
``` ```
Result: `abc123 Fix bug (gastown/crew/joe <steve@example.com>)` Result: `abc123 Fix bug (greenplace/crew/joe <steve@example.com>)`
### Beads Operations ### Beads Operations
```bash ```bash
BD_ACTOR="gastown/crew/joe" # Set in agent environment BD_ACTOR="greenplace/crew/joe" # Set in agent environment
bd create --title="Task" # Actor auto-populated bd create --title="Task" # Actor auto-populated
``` ```
### Event Logging ### Event Logging
@@ -115,8 +115,8 @@ All events include actor:
{ {
"ts": "2025-01-15T10:30:00Z", "ts": "2025-01-15T10:30:00Z",
"type": "sling", "type": "sling",
"actor": "gastown/crew/joe", "actor": "greenplace/crew/joe",
"payload": { "bead": "gt-xyz", "target": "gastown/polecats/Toast" } "payload": { "bead": "gp-xyz", "target": "greenplace/polecats/Toast" }
} }
``` ```
@@ -131,7 +131,7 @@ Each workspace has identity metadata:
{ {
"owner": "steve@example.com", "owner": "steve@example.com",
"name": "main-town", "name": "main-town",
"public_name": "steve-gastown" "public_name": "steve-greenplace"
} }
``` ```
@@ -161,7 +161,7 @@ bd list --org=acme.com
bd list --project=proj-123 --include-delegated bd list --project=proj-123 --include-delegated
# Agent's full history # Agent's full history
bd audit --actor=gastown/crew/joe bd audit --actor=greenplace/crew/joe
``` ```
## Implementation Status ## Implementation Status
+6 -6
View File
@@ -205,7 +205,7 @@ attached_at: <timestamp>
Examples: Examples:
``` ```
POLECAT_DONE nux POLECAT_DONE nux
MERGE_READY gastown/nux MERGE_READY greenplace/nux
HELP: Polecat stuck on test failures HELP: Polecat stuck on test failures
🤝 HANDOFF: Schema work in progress 🤝 HANDOFF: Schema work in progress
``` ```
@@ -222,9 +222,9 @@ Format: `<rig>/<role>` or `<rig>/<type>/<name>`
Examples: Examples:
``` ```
gastown/witness # Witness for gastown rig greenplace/witness # Witness for greenplace rig
beads/refinery # Refinery for beads rig beads/refinery # Refinery for beads rig
gastown/polecats/nux # Specific polecat greenplace/polecats/nux # Specific polecat
mayor/ # Town-level Mayor mayor/ # Town-level Mayor
deacon/ # Town-level Deacon deacon/ # Town-level Deacon
``` ```
@@ -314,8 +314,8 @@ Witness-N ──┘
gt mail send <addr> -s "Subject" -m "Body" gt mail send <addr> -s "Subject" -m "Body"
# With structured body # With structured body
gt mail send gastown/witness -s "MERGE_READY nux" -m "Branch: feature-xyz gt mail send greenplace/witness -s "MERGE_READY nux" -m "Branch: feature-xyz
Issue: gt-abc Issue: gp-abc
Polecat: nux Polecat: nux
Verified: clean" Verified: clean"
``` ```
+3 -3
View File
@@ -43,7 +43,7 @@ bd create --type=event --event-type=patrol.muted \
# System entered degraded mode # System entered degraded mode
bd create --type=event --event-type=mode.degraded \ bd create --type=event --event-type=mode.degraded \
--actor=system:daemon --target=rig:gastown \ --actor=system:daemon --target=rig:greenplace \
--payload='{"reason":"tmux unavailable"}' --payload='{"reason":"tmux unavailable"}'
``` ```
@@ -230,10 +230,10 @@ Boot specifically:
```bash ```bash
# System entered degraded mode # System entered degraded mode
bd create --type=event --event-type=mode.degraded \ bd create --type=event --event-type=mode.degraded \
--actor=system:daemon --target=rig:gastown \ --actor=system:daemon --target=rig:greenplace \
--payload='{"reason":"tmux unavailable"}' --payload='{"reason":"tmux unavailable"}'
bd update role-gastown --add-label=mode:degraded --remove-label=mode:normal bd update role-greenplace --add-label=mode:degraded --remove-label=mode:normal
``` ```
## Configuration vs State ## Configuration vs State
+2 -2
View File
@@ -31,7 +31,7 @@ Gas Town routes beads commands based on issue ID prefix. You don't need to think
about which database to use - just use the issue ID. about which database to use - just use the issue ID.
```bash ```bash
bd show gt-xyz # Routes to gastown rig's beads bd show gp-xyz # Routes to greenplace rig's beads
bd show hq-abc # Routes to town-level beads bd show hq-abc # Routes to town-level beads
bd show wyv-123 # Routes to wyvern rig's beads bd show wyv-123 # Routes to wyvern rig's beads
``` ```
@@ -42,7 +42,7 @@ prefix maps to its beads location (the mayor's clone in that rig).
| Prefix | Routes To | Purpose | | Prefix | Routes To | Purpose |
|--------|-----------|---------| |--------|-----------|---------|
| `hq-*` | `~/gt/.beads/` | Mayor mail, cross-rig coordination | | `hq-*` | `~/gt/.beads/` | Mayor mail, cross-rig coordination |
| `gt-*` | `~/gt/gastown/mayor/rig/.beads/` | Gastown project issues | | `gp-*` | `~/gt/greenplace/mayor/rig/.beads/` | Greenplace project issues |
| `wyv-*` | `~/gt/wyvern/mayor/rig/.beads/` | Wyvern project issues | | `wyv-*` | `~/gt/wyvern/mayor/rig/.beads/` | Wyvern project issues |
Debug routing: `BD_DEBUG_ROUTING=1 bd show <id>` Debug routing: `BD_DEBUG_ROUTING=1 bd show <id>`
+20 -20
View File
@@ -50,13 +50,13 @@ independent tasks, a swarm lets you:
```bash ```bash
# Create swarm from existing epic # Create swarm from existing epic
gt swarm create gastown --epic gt-abc --worker Toast --worker Nux gt swarm create greenplace --epic gp-abc --worker Toast --worker Nux
# Create and start immediately # Create and start immediately
gt swarm create gastown --epic gt-abc --worker Toast --start gt swarm create greenplace --epic gp-abc --worker Toast --start
# Specify target branch (defaults to main) # Specify target branch (defaults to main)
gt swarm create gastown --epic gt-abc --worker Toast --target develop gt swarm create greenplace --epic gp-abc --worker Toast --target develop
``` ```
The epic should already exist in beads with child tasks. The swarm will track The epic should already exist in beads with child tasks. The swarm will track
@@ -66,7 +66,7 @@ which tasks are ready, in-progress, and complete.
```bash ```bash
# Start a previously created swarm # Start a previously created swarm
gt swarm start gt-abc gt swarm start gp-abc
``` ```
This transitions the swarm from `created` to `active` and begins dispatching This transitions the swarm from `created` to `active` and begins dispatching
@@ -76,10 +76,10 @@ tasks to workers.
```bash ```bash
# Human-readable status # Human-readable status
gt swarm status gt-abc gt swarm status gp-abc
# JSON output # JSON output
gt swarm status gt-abc --json gt swarm status gp-abc --json
``` ```
Shows: Shows:
@@ -96,11 +96,11 @@ Shows:
gt swarm list gt swarm list
# Swarms in specific rig # Swarms in specific rig
gt swarm list gastown gt swarm list greenplace
# Filter by status # Filter by status
gt swarm list --status=active gt swarm list --status=active
gt swarm list gastown --status=landed gt swarm list greenplace --status=landed
# JSON output # JSON output
gt swarm list --json gt swarm list --json
@@ -110,10 +110,10 @@ gt swarm list --json
```bash ```bash
# Auto-dispatch next ready task to idle polecat # Auto-dispatch next ready task to idle polecat
gt swarm dispatch gt-abc gt swarm dispatch gp-abc
# Dispatch in specific rig # Dispatch in specific rig
gt swarm dispatch gt-abc --rig gastown gt swarm dispatch gp-abc --rig greenplace
``` ```
Finds the first unassigned ready task and assigns it to an available polecat. Finds the first unassigned ready task and assigns it to an available polecat.
@@ -123,7 +123,7 @@ Uses `gt sling` internally.
```bash ```bash
# Manually land completed swarm # Manually land completed swarm
gt swarm land gt-abc gt swarm land gp-abc
``` ```
This: This:
@@ -139,7 +139,7 @@ This:
### Cancel a Swarm ### Cancel a Swarm
```bash ```bash
gt swarm cancel gt-abc gt swarm cancel gp-abc
``` ```
Marks the swarm as cancelled. Does not automatically stop sessions or clean up Marks the swarm as cancelled. Does not automatically stop sessions or clean up
@@ -197,22 +197,22 @@ If code is at risk, landing blocks and notifies Mayor.
```bash ```bash
# 1. Create epic with tasks in beads # 1. Create epic with tasks in beads
bd create --type=epic --title="Add authentication" --id gt-auth bd create --type=epic --title="Add authentication" --id gp-auth
bd create --title="Add login form" --parent gt-auth bd create --title="Add login form" --parent gp-auth
bd create --title="Add session management" --parent gt-auth bd create --title="Add session management" --parent gp-auth
bd create --title="Add logout flow" --parent gt-auth bd create --title="Add logout flow" --parent gp-auth
# 2. Create swarm # 2. Create swarm
gt swarm create gastown --epic gt-auth --worker Toast --worker Nux --start gt swarm create greenplace --epic gp-auth --worker Toast --worker Nux --start
# 3. Monitor progress # 3. Monitor progress
gt swarm status gt-auth gt swarm status gp-auth
# 4. Dispatch more as tasks complete # 4. Dispatch more as tasks complete
gt swarm dispatch gt-auth gt swarm dispatch gp-auth
# 5. Land when complete # 5. Land when complete
gt swarm land gt-auth gt swarm land gp-auth
``` ```
## Troubleshooting ## Troubleshooting
+1 -1
View File
@@ -272,7 +272,7 @@ Digests feed into the activity feed for observability:
```json ```json
{ {
"type": "digest", "type": "digest",
"agent": "gastown/witness", "agent": "greenplace/witness",
"timestamp": "2025-12-30T10:00:00Z", "timestamp": "2025-12-30T10:00:00Z",
"summary": "Patrol cycle 47 complete", "summary": "Patrol cycle 47 complete",
"metrics": { "metrics": {
+6 -6
View File
@@ -56,16 +56,16 @@ Supported event types for refinery:
queue_processed - When refinery finishes processing queue queue_processed - When refinery finishes processing queue
Common options: 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 --rig Which rig the event is about
--message Human-readable message --message Human-readable message
Examples: Examples:
gt activity emit patrol_started --rig gastown --count 3 gt activity emit patrol_started --rig greenplace --count 3
gt activity emit polecat_checked --rig gastown --polecat Toast --status working --issue gt-xyz gt activity emit polecat_checked --rig greenplace --polecat Toast --status working --issue gp-xyz
gt activity emit polecat_nudged --rig gastown --polecat Toast --reason "idle for 10 minutes" gt activity emit polecat_nudged --rig greenplace --polecat Toast --reason "idle for 10 minutes"
gt activity emit escalation_sent --rig gastown --target Toast --to mayor --reason "unresponsive" gt activity emit escalation_sent --rig greenplace --target Toast --to mayor --reason "unresponsive"
gt activity emit patrol_complete --rig gastown --count 3 --message "All polecats healthy"`, gt activity emit patrol_complete --rig greenplace --count 3 --message "All polecats healthy"`,
Args: cobra.ExactArgs(1), Args: cobra.ExactArgs(1),
RunE: runActivityEmit, RunE: runActivityEmit,
} }
+4 -4
View File
@@ -41,8 +41,8 @@ Shows a unified timeline of work performed by an actor including:
- Activity feed events - Activity feed events
Examples: Examples:
gt audit --actor=gastown/crew/joe # Show all work by joe gt audit --actor=greenplace/crew/joe # Show all work by joe
gt audit --actor=gastown/polecats/toast # Show polecat toast's work gt audit --actor=greenplace/polecats/toast # Show polecat toast's work
gt audit --actor=mayor # Show mayor's activity gt audit --actor=mayor # Show mayor's activity
gt audit --since=24h # Show all activity in last 24h gt audit --since=24h # Show all activity in last 24h
gt audit --actor=joe --since=1h # Combined filters gt audit --actor=joe --since=1h # Combined filters
@@ -167,7 +167,7 @@ func collectGitCommits(townRoot, actor string, since time.Time) ([]AuditEntry, e
if actor != "" { if actor != "" {
// Try to match actor in author name // 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) authorName := extractAuthorName(actor)
args = append(args, "--author="+authorName) 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. // extractAuthorName extracts the likely git author name from an actor address.
func extractAuthorName(actor string) string { func extractAuthorName(actor string) string {
// Actor format: "gastown/crew/joe" -> "joe" // Actor format: "greenplace/crew/joe" -> "joe"
// Or: "mayor" -> "mayor" // Or: "mayor" -> "mayor"
parts := strings.Split(actor, "/") parts := strings.Split(actor, "/")
if len(parts) > 0 { if len(parts) > 0 {
+1 -1
View File
@@ -35,7 +35,7 @@ The message is sent as a nudge to each worker's Claude Code session.
Examples: Examples:
gt broadcast "Check your mail" 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 --all "System maintenance in 5 minutes"
gt broadcast --dry-run "Test message"`, gt broadcast --dry-run "Test message"`,
Args: cobra.ExactArgs(1), Args: cobra.ExactArgs(1),
+4 -4
View File
@@ -57,7 +57,7 @@ The workspace is created at <rig>/crew/<name>/ with:
Examples: Examples:
gt crew add dave # Create in current rig 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`, gt crew add fred --branch # Create with feature branch`,
Args: cobra.ExactArgs(1), Args: cobra.ExactArgs(1),
RunE: runCrewAdd, RunE: runCrewAdd,
@@ -72,7 +72,7 @@ Shows git branch, session state, and git status for each workspace.
Examples: Examples:
gt crew list # List in current rig 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`, gt crew list --json # JSON output`,
RunE: runCrewList, 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'. 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 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. If not specified, the rig is inferred from the current directory.
Role Discovery: Role Discovery:
@@ -254,7 +254,7 @@ Role Discovery:
Examples: Examples:
gt crew start joe # Start joe in current rig 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 beads/grip beads/fang # Start multiple crew members
gt crew start joe --rig beads # Start joe in beads rig gt crew start joe --rig beads # Start joe in beads rig
gt crew start # Auto-detect from cwd`, gt crew start # Auto-detect from cwd`,
+2 -2
View File
@@ -30,9 +30,9 @@ var cycleCmd = &cobra.Command{
Session groups: Session groups:
- Town sessions: Mayor Deacon - 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) - 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.`, The appropriate cycling is detected automatically from the session name.`,
} }
+1 -1
View File
@@ -84,7 +84,7 @@ Examples:
gt feed --plain # Plain text output (bd activity) gt feed --plain # Plain text output (bd activity)
gt feed --window # Open in dedicated tmux window gt feed --window # Open in dedicated tmux window
gt feed --since 1h # Events from last hour 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, RunE: runFeed,
} }
+4 -4
View File
@@ -46,7 +46,7 @@ Examples:
gt log # Show last 20 events gt log # Show last 20 events
gt log -n 50 # Show last 50 events gt log -n 50 # Show last 50 events
gt log --type spawn # Show only spawn 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 --since 1h # Show events from last hour
gt log -f # Follow log (like tail -f)`, gt log -f # Follow log (like tail -f)`,
RunE: runLog, 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') - Exit code non-zero: Crash (logged as 'crash')
Examples: 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, RunE: runLogCrash,
} }
func init() { func init() {
logCmd.Flags().IntVarP(&logTail, "tail", "n", 20, "Number of events to show") 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(&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().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)") logCmd.Flags().BoolVarP(&logFollow, "follow", "f", false, "Follow log output (like tail -f)")
// crash subcommand flags // 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().StringVar(&crashSession, "session", "", "Tmux session name")
logCrashCmd.Flags().IntVar(&crashExitCode, "exit-code", -1, "Exit code from pane") logCrashCmd.Flags().IntVar(&crashExitCode, "exit-code", -1, "Exit code from pane")
_ = logCrashCmd.MarkFlagRequired("agent") _ = logCrashCmd.MarkFlagRequired("agent")
+16 -16
View File
@@ -61,10 +61,10 @@ MAIL ROUTING:
gastown/ (rig mailboxes) gastown/ (rig mailboxes)
witness gastown/witness witness greenplace/witness
refinery gastown/refinery refinery greenplace/refinery
Toast gastown/Toast Toast greenplace/Toast
crew/max gastown/crew/max crew/max greenplace/crew/max
@@ -72,8 +72,8 @@ ADDRESS FORMATS:
mayor/ Mayor inbox mayor/ Mayor inbox
<rig>/witness Rig's Witness <rig>/witness Rig's Witness
<rig>/refinery Rig's Refinery <rig>/refinery Rig's Refinery
<rig>/<polecat> Polecat (e.g., gastown/Toast) <rig>/<polecat> Polecat (e.g., greenplace/Toast)
<rig>/crew/<name> Crew worker (e.g., gastown/crew/max) <rig>/crew/<name> Crew worker (e.g., greenplace/crew/max)
--human Special: human overseer --human Special: human overseer
COMMANDS: COMMANDS:
@@ -115,14 +115,14 @@ Priority levels:
Use --urgent as shortcut for --priority 0. Use --urgent as shortcut for --priority 0.
Examples: 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 mayor/ -s "Work complete" -m "Finished gt-abc"
gt mail send gastown/ -s "All hands" -m "Swarm starting" --notify 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 greenplace/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 "Urgent" -m "Help!" --urgent
gt mail send mayor/ -s "Re: Status" -m "Done" --reply-to msg-abc123 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 --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"`, gt mail send list:oncall -s "Alert" -m "System down"`,
Args: cobra.MaximumNArgs(1), Args: cobra.MaximumNArgs(1),
RunE: runMailSend, RunE: runMailSend,
@@ -139,8 +139,8 @@ Use --identity for polecats to explicitly specify their identity.
Examples: Examples:
gt mail inbox # Current context (auto-detected) gt mail inbox # Current context (auto-detected)
gt mail inbox mayor/ # Mayor's inbox gt mail inbox mayor/ # Mayor's inbox
gt mail inbox gastown/Toast # Polecat's inbox gt mail inbox greenplace/Toast # Polecat's inbox
gt mail inbox --identity gastown/Toast # Explicit polecat identity`, gt mail inbox --identity greenplace/Toast # Explicit polecat identity`,
Args: cobra.MaximumNArgs(1), Args: cobra.MaximumNArgs(1),
RunE: runMailInbox, RunE: runMailInbox,
} }
@@ -203,7 +203,7 @@ Use --identity for polecats to explicitly specify their identity.
Examples: Examples:
gt mail check # Simple check (auto-detect identity) gt mail check # Simple check (auto-detect identity)
gt mail check --inject # For hooks 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, RunE: runMailCheck,
} }
@@ -256,7 +256,7 @@ func init() {
// Inbox flags // Inbox flags
mailInboxCmd.Flags().BoolVar(&mailInboxJSON, "json", false, "Output as JSON") mailInboxCmd.Flags().BoolVar(&mailInboxJSON, "json", false, "Output as JSON")
mailInboxCmd.Flags().BoolVarP(&mailInboxUnread, "unread", "u", false, "Show only unread messages") 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") mailInboxCmd.Flags().StringVar(&mailInboxIdentity, "address", "", "Alias for --identity")
// Read flags // Read flags
@@ -265,7 +265,7 @@ func init() {
// Check flags // Check flags
mailCheckCmd.Flags().BoolVar(&mailCheckInject, "inject", false, "Output format for Claude Code hooks") mailCheckCmd.Flags().BoolVar(&mailCheckInject, "inject", false, "Output format for Claude Code hooks")
mailCheckCmd.Flags().BoolVar(&mailCheckJSON, "json", false, "Output as JSON") 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") mailCheckCmd.Flags().StringVar(&mailCheckIdentity, "address", "", "Alias for --identity")
// Thread flags // Thread flags
@@ -744,7 +744,7 @@ func detectSender() string {
// detectSenderFromRole builds an address from the GT_ROLE and related env vars. // 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 // 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.) // 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" // are missing, falls back to cwd-based detection. This could return "overseer"
+6 -6
View File
@@ -135,9 +135,9 @@ Output includes:
- Next action hint - Next action hint
Examples: Examples:
gt mol status # Show current agent's hook gt mol status # Show current agent's hook
gt mol status gastown/nux # Show specific polecat's hook gt mol status greenplace/nux # Show specific polecat's hook
gt mol status gastown/witness # Show witness's hook`, gt mol status greenplace/witness # Show witness's hook`,
Args: cobra.MaximumNArgs(1), Args: cobra.MaximumNArgs(1),
RunE: runMoleculeStatus, RunE: runMoleculeStatus,
} }
@@ -159,10 +159,10 @@ Output includes:
- Current step that should be worked on next - Current step that should be worked on next
Examples: Examples:
gt molecule current # Current agent's work gt molecule current # Current agent's work
gt molecule current gastown/furiosa gt molecule current greenplace/furiosa
gt molecule current deacon gt molecule current deacon
gt mol current gastown/witness`, gt mol current greenplace/witness`,
Args: cobra.MaximumNArgs(1), Args: cobra.MaximumNArgs(1),
RunE: runMoleculeCurrent, RunE: runMoleculeCurrent,
} }
+12 -12
View File
@@ -68,7 +68,7 @@ Creates a merge-request bead that will be processed by the Refinery.
Auto-detection: Auto-detection:
- Branch: current git branch - 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 - Worker: parsed from branch name
- Rig: detected from current directory - Rig: detected from current directory
- Target: automatically determined (see below) - Target: automatically determined (see below)
@@ -91,7 +91,7 @@ Polecat auto-cleanup:
Examples: Examples:
gt mq submit # Auto-detect everything + auto-cleanup 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 --epic gt-xyz # Target integration branch explicitly
gt mq submit --priority 0 # Override priority (P0) gt mq submit --priority 0 # Override priority (P0)
gt mq submit --no-cleanup # Submit without auto-cleanup`, 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). The MR must be in a failed state (open with an error).
Examples: Examples:
gt mq retry gastown gt-mr-abc123 gt mq retry greenplace gp-mr-abc123
gt mq retry gastown gt-mr-abc123 --now`, gt mq retry greenplace gp-mr-abc123 --now`,
Args: cobra.ExactArgs(2), Args: cobra.ExactArgs(2),
RunE: runMQRetry, RunE: runMQRetry,
} }
@@ -122,16 +122,16 @@ Lists all pending merge requests waiting to be processed.
Output format: Output format:
ID STATUS PRIORITY BRANCH WORKER AGE 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-002 in_progress P1 polecat/Toast/gt-abc Toast 12m
gt-mr-003 blocked P1 polecat/Capable/gt-def Capable 8m gt-mr-003 blocked P1 polecat/Capable/gt-def Capable 8m
(waiting on gt-mr-001) (waiting on gt-mr-001)
Examples: Examples:
gt mq list gastown gt mq list greenplace
gt mq list gastown --ready gt mq list greenplace --ready
gt mq list gastown --status=open gt mq list greenplace --status=open
gt mq list gastown --worker=Nux`, gt mq list greenplace --worker=Nux`,
Args: cobra.ExactArgs(1), Args: cobra.ExactArgs(1),
RunE: runMQList, 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). The source issue is NOT closed (work is not done).
Examples: Examples:
gt mq reject gastown polecat/Nux/gt-xyz --reason "Does not meet requirements" gt mq reject greenplace polecat/Nux/gp-xyz --reason "Does not meet requirements"
gt mq reject gastown mr-Nux-12345 --reason "Superseded by other work" --notify`, gt mq reject greenplace mr-Nux-12345 --reason "Superseded by other work" --notify`,
Args: cobra.ExactArgs(2), Args: cobra.ExactArgs(2),
RunE: runMQReject, RunE: runMQReject,
} }
@@ -160,7 +160,7 @@ Shows all MR fields, current status with timestamps, dependencies,
blockers, and processing history. blockers, and processing history.
Example: Example:
gt mq status gt-mr-abc123`, gt mq status gp-mr-abc123`,
Args: cobra.ExactArgs(1), Args: cobra.ExactArgs(1),
RunE: runMqStatus, RunE: runMqStatus,
} }
+2 -2
View File
@@ -33,8 +33,8 @@ Special targets:
deacon Maps to the Deacon session (gt-deacon) deacon Maps to the Deacon session (gt-deacon)
Examples: Examples:
gt nudge gastown/furiosa "Check your mail and start working" gt nudge greenplace/furiosa "Check your mail and start working"
gt nudge gastown/alpha "What's your status?" gt nudge greenplace/alpha "What's your status?"
gt nudge deacon session-started`, gt nudge deacon session-started`,
Args: cobra.ExactArgs(2), Args: cobra.ExactArgs(2),
RunE: runNudge, RunE: runNudge,
+3 -3
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) gt peek - read output FROM a session (capture-pane wrapper)
Examples: Examples:
gt peek gastown/furiosa # Last 100 lines (default) gt peek greenplace/furiosa # Last 100 lines (default)
gt peek gastown/furiosa 50 # Last 50 lines gt peek greenplace/furiosa 50 # Last 50 lines
gt peek gastown/furiosa -n 200 # Last 200 lines`, gt peek greenplace/furiosa -n 200 # Last 200 lines`,
Args: cobra.RangeArgs(1, 2), Args: cobra.RangeArgs(1, 2),
RunE: runPeek, RunE: runPeek,
} }
+27 -27
View File
@@ -51,9 +51,9 @@ all currently active polecats with their states:
- stuck: Needs assistance - stuck: Needs assistance
Examples: Examples:
gt polecat list gastown gt polecat list greenplace
gt polecat list --all gt polecat list --all
gt polecat list gastown --json`, gt polecat list greenplace --json`,
RunE: runPolecatList, RunE: runPolecatList,
} }
@@ -66,7 +66,7 @@ Creates a polecat directory, clones the rig repo, creates a work branch,
and initializes state. and initializes state.
Example: Example:
gt polecat add gastown Toast`, gt polecat add greenplace Toast`,
Args: cobra.ExactArgs(2), Args: cobra.ExactArgs(2),
RunE: runPolecatAdd, RunE: runPolecatAdd,
} }
@@ -81,10 +81,10 @@ Warns if uncommitted changes exist.
Use --force to bypass checks. Use --force to bypass checks.
Examples: Examples:
gt polecat remove gastown/Toast gt polecat remove greenplace/Toast
gt polecat remove gastown/Toast gastown/Furiosa gt polecat remove greenplace/Toast greenplace/Furiosa
gt polecat remove gastown --all gt polecat remove greenplace --all
gt polecat remove gastown --all --force`, gt polecat remove greenplace --all --force`,
Args: cobra.MinimumNArgs(1), Args: cobra.MinimumNArgs(1),
RunE: runPolecatRemove, RunE: runPolecatRemove,
} }
@@ -100,7 +100,7 @@ via 'gt sling'. This command is kept for backward compatibility.
Transitions: done working Transitions: done working
Example: Example:
gt polecat wake gastown/Toast`, gt polecat wake greenplace/Toast`,
Args: cobra.ExactArgs(1), Args: cobra.ExactArgs(1),
RunE: runPolecatWake, RunE: runPolecatWake,
} }
@@ -117,7 +117,7 @@ backward compatibility.
Transitions: working done Transitions: working done
Example: Example:
gt polecat sleep gastown/Toast`, gt polecat sleep greenplace/Toast`,
Args: cobra.ExactArgs(1), Args: cobra.ExactArgs(1),
RunE: runPolecatSleep, RunE: runPolecatSleep,
} }
@@ -133,8 +133,8 @@ Clears the assigned issue.
Fails if session is running (stop first). Fails if session is running (stop first).
Example: Example:
gt polecat done gastown/Toast gt polecat done greenplace/Toast
gt polecat finish gastown/Toast`, gt polecat finish greenplace/Toast`,
Args: cobra.ExactArgs(1), Args: cobra.ExactArgs(1),
RunE: runPolecatDone, RunE: runPolecatDone,
} }
@@ -150,7 +150,7 @@ Use when polecat is stuck in an unexpected state.
Fails if session is running (stop first). Fails if session is running (stop first).
Example: Example:
gt polecat reset gastown/Toast`, gt polecat reset greenplace/Toast`,
Args: cobra.ExactArgs(1), Args: cobra.ExactArgs(1),
RunE: runPolecatReset, RunE: runPolecatReset,
} }
@@ -167,9 +167,9 @@ Use --all to sync all polecats in a rig.
Use --from-main to only pull (no push). Use --from-main to only pull (no push).
Examples: Examples:
gt polecat sync gastown/Toast gt polecat sync greenplace/Toast
gt polecat sync gastown --all gt polecat sync greenplace --all
gt polecat sync gastown/Toast --from-main`, gt polecat sync greenplace/Toast --from-main`,
Args: cobra.MaximumNArgs(1), Args: cobra.MaximumNArgs(1),
RunE: runPolecatSync, RunE: runPolecatSync,
} }
@@ -187,8 +187,8 @@ Displays comprehensive information including:
- Last activity time - Last activity time
Examples: Examples:
gt polecat status gastown/Toast gt polecat status greenplace/Toast
gt polecat status gastown/Toast --json`, gt polecat status greenplace/Toast --json`,
Args: cobra.ExactArgs(1), Args: cobra.ExactArgs(1),
RunE: runPolecatStatus, RunE: runPolecatStatus,
} }
@@ -217,8 +217,8 @@ This command removes orphaned branches:
- Old timestamped branches (keeps only the current one per polecat) - Old timestamped branches (keeps only the current one per polecat)
Examples: Examples:
gt polecat gc gastown gt polecat gc greenplace
gt polecat gc gastown --dry-run`, gt polecat gc greenplace --dry-run`,
Args: cobra.ExactArgs(1), Args: cobra.ExactArgs(1),
RunE: runPolecatGC, 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. Use this after the Refinery has merged the polecat's work.
Examples: Examples:
gt polecat nuke gastown/Toast gt polecat nuke greenplace/Toast
gt polecat nuke gastown/Toast gastown/Furiosa gt polecat nuke greenplace/Toast greenplace/Furiosa
gt polecat nuke gastown --all gt polecat nuke greenplace --all
gt polecat nuke gastown --all --dry-run`, gt polecat nuke greenplace --all --dry-run`,
Args: cobra.MinimumNArgs(1), Args: cobra.MinimumNArgs(1),
RunE: runPolecatNuke, RunE: runPolecatNuke,
} }
@@ -259,8 +259,8 @@ Checks:
- Stashes: stashed changes - Stashes: stashed changes
Examples: Examples:
gt polecat git-state gastown/Toast gt polecat git-state greenplace/Toast
gt polecat git-state gastown/Toast --json`, gt polecat git-state greenplace/Toast --json`,
Args: cobra.ExactArgs(1), Args: cobra.ExactArgs(1),
RunE: runPolecatGitState, RunE: runPolecatGitState,
} }
@@ -465,7 +465,7 @@ func runPolecatRemove(cmd *cobra.Command, args []string) error {
rigName := args[0] rigName := args[0]
// Check if it looks like rig/polecat format // Check if it looks like rig/polecat format
if _, _, err := parseAddress(rigName); err == nil { 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) mgr, r, err := getPolecatManager(rigName)
@@ -1150,7 +1150,7 @@ func runPolecatNuke(cmd *cobra.Command, args []string) error {
rigName := args[0] rigName := args[0]
// Check if it looks like rig/polecat format // Check if it looks like rig/polecat format
if _, _, err := parseAddress(rigName); err == nil { 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) mgr, r, err := getPolecatManager(rigName)
+10 -10
View File
@@ -13,15 +13,15 @@ func TestParsePolecatSessionName(t *testing.T) {
// Valid polecat sessions // Valid polecat sessions
{ {
name: "simple polecat", name: "simple polecat",
sessionName: "gt-gastown-Toast", sessionName: "gt-greenplace-Toast",
wantRig: "gastown", wantRig: "greenplace",
wantPolecat: "Toast", wantPolecat: "Toast",
wantOk: true, wantOk: true,
}, },
{ {
name: "another polecat", name: "another polecat",
sessionName: "gt-gastown-Nux", sessionName: "gt-greenplace-Nux",
wantRig: "gastown", wantRig: "greenplace",
wantPolecat: "Nux", wantPolecat: "Nux",
wantOk: true, wantOk: true,
}, },
@@ -34,8 +34,8 @@ func TestParsePolecatSessionName(t *testing.T) {
}, },
{ {
name: "polecat with hyphen in name", name: "polecat with hyphen in name",
sessionName: "gt-gastown-Max-01", sessionName: "gt-greenplace-Max-01",
wantRig: "gastown", wantRig: "greenplace",
wantPolecat: "Max-01", wantPolecat: "Max-01",
wantOk: true, wantOk: true,
}, },
@@ -43,21 +43,21 @@ func TestParsePolecatSessionName(t *testing.T) {
// Not polecat sessions (should return false) // Not polecat sessions (should return false)
{ {
name: "crew session", name: "crew session",
sessionName: "gt-gastown-crew-jack", sessionName: "gt-greenplace-crew-jack",
wantRig: "", wantRig: "",
wantPolecat: "", wantPolecat: "",
wantOk: false, wantOk: false,
}, },
{ {
name: "witness session", name: "witness session",
sessionName: "gt-gastown-witness", sessionName: "gt-greenplace-witness",
wantRig: "", wantRig: "",
wantPolecat: "", wantPolecat: "",
wantOk: false, wantOk: false,
}, },
{ {
name: "refinery session", name: "refinery session",
sessionName: "gt-gastown-refinery", sessionName: "gt-greenplace-refinery",
wantRig: "", wantRig: "",
wantPolecat: "", wantPolecat: "",
wantOk: false, wantOk: false,
@@ -99,7 +99,7 @@ func TestParsePolecatSessionName(t *testing.T) {
}, },
{ {
name: "no name after rig", name: "no name after rig",
sessionName: "gt-gastown-", sessionName: "gt-greenplace-",
wantRig: "", wantRig: "",
wantPolecat: "", wantPolecat: "",
wantOk: false, wantOk: false,
+4 -4
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. If rig is not specified, infers it from the current directory.
Examples: Examples:
gt refinery start gastown gt refinery start greenplace
gt refinery start gastown --foreground gt refinery start greenplace --foreground
gt refinery start # infer rig from cwd`, gt refinery start # infer rig from cwd`,
Args: cobra.MaximumNArgs(1), Args: cobra.MaximumNArgs(1),
RunE: runRefineryStart, RunE: runRefineryStart,
@@ -93,7 +93,7 @@ or manual intervention.
If rig is not specified, infers it from the current directory. If rig is not specified, infers it from the current directory.
Examples: Examples:
gt refinery attach gastown gt refinery attach greenplace
gt refinery attach # infer rig from cwd`, gt refinery attach # infer rig from cwd`,
Args: cobra.MaximumNArgs(1), Args: cobra.MaximumNArgs(1),
RunE: runRefineryAttach, 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. If rig is not specified, infers it from the current directory.
Examples: Examples:
gt refinery restart gastown gt refinery restart greenplace
gt refinery restart # infer rig from cwd`, gt refinery restart # infer rig from cwd`,
Args: cobra.MaximumNArgs(1), Args: cobra.MaximumNArgs(1),
RunE: runRefineryRestart, RunE: runRefineryRestart,
+5 -5
View File
@@ -106,7 +106,7 @@ Polecats are NOT started by this command - they are spawned
on demand when work is assigned. on demand when work is assigned.
Examples: Examples:
gt rig boot gastown`, gt rig boot greenplace`,
Args: cobra.ExactArgs(1), Args: cobra.ExactArgs(1),
RunE: runRigBoot, 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. Useful after polecats complete work and land their changes.
Examples: Examples:
gt rig reboot gastown gt rig reboot greenplace
gt rig reboot beads --force`, gt rig reboot beads --force`,
Args: cobra.ExactArgs(1), Args: cobra.ExactArgs(1),
RunE: runRigReboot, 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!). Use --nuclear to bypass ALL safety checks (will lose work!).
Examples: Examples:
gt rig shutdown gastown gt rig shutdown greenplace
gt rig shutdown gastown --force gt rig shutdown greenplace --force
gt rig shutdown gastown --nuclear # DANGER: loses uncommitted work`, gt rig shutdown greenplace --nuclear # DANGER: loses uncommitted work`,
Args: cobra.ExactArgs(1), Args: cobra.ExactArgs(1),
RunE: runRigShutdown, RunE: runRigShutdown,
} }
+2 -2
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. cases where you need raw tmux send-keys behavior.
Examples: 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`, gt session inject wyvern/Toast -f prompt.txt # For file injection`,
Args: cobra.ExactArgs(1), Args: cobra.ExactArgs(1),
RunE: runSessionInject, RunE: runSessionInject,
@@ -160,7 +160,7 @@ Use this for manual health checks or debugging session issues.
Examples: Examples:
gt session check # Check all rigs gt session check # Check all rigs
gt session check gastown # Check specific rig`, gt session check greenplace # Check specific rig`,
Args: cobra.MaximumNArgs(1), Args: cobra.MaximumNArgs(1),
RunE: runSessionCheck, RunE: runSessionCheck,
} }
+14 -14
View File
@@ -35,18 +35,18 @@ This is THE command for assigning work in Gas Town. It handles:
Target Resolution: Target Resolution:
gt sling gt-abc # Self (current agent) gt sling gt-abc # Self (current agent)
gt sling gt-abc crew # Crew worker in current rig gt sling gt-abc crew # Crew worker in current rig
gt sling gt-abc gastown # Auto-spawn polecat in rig gt sling gp-abc greenplace # Auto-spawn polecat in rig
gt sling gt-abc gastown/Toast # Specific polecat gt sling gt-abc greenplace/Toast # Specific polecat
gt sling gt-abc mayor # Mayor gt sling gt-abc mayor # Mayor
gt sling gt-abc deacon/dogs # Auto-dispatch to idle dog gt sling gt-abc deacon/dogs # Auto-dispatch to idle dog
gt sling gt-abc deacon/dogs/alpha # Specific dog gt sling gt-abc deacon/dogs/alpha # Specific dog
Spawning Options (when target is a rig): Spawning Options (when target is a rig):
gt sling gt-abc gastown --molecule mol-review # Use specific workflow gt sling gp-abc greenplace --molecule mol-review # Use specific workflow
gt sling gt-abc gastown --create # Create polecat if missing gt sling gp-abc greenplace --create # Create polecat if missing
gt sling gt-abc gastown --naked # No-tmux (manual start) gt sling gp-abc greenplace --naked # No-tmux (manual start)
gt sling gt-abc gastown --force # Ignore unread mail gt sling gp-abc greenplace --force # Ignore unread mail
gt sling gt-abc gastown --account work # Use specific Claude account gt sling gp-abc greenplace --account work # Use specific Claude account
Natural Language Args: Natural Language Args:
gt sling gt-abc --args "patch release" 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 gt sling shiny --on gt-abc crew # Apply formula, sling to crew
Quality Levels (shorthand for polecat workflows): Quality Levels (shorthand for polecat workflows):
gt sling gt-abc gastown --quality=basic # mol-polecat-basic (trivial fixes) gt sling gp-abc greenplace --quality=basic # mol-polecat-basic (trivial fixes)
gt sling gt-abc gastown --quality=shiny # mol-polecat-shiny (standard) gt sling gp-abc greenplace --quality=shiny # mol-polecat-shiny (standard)
gt sling gt-abc gastown --quality=chrome # mol-polecat-chrome (max rigor) gt sling gp-abc greenplace --quality=chrome # mol-polecat-chrome (max rigor)
Compare: Compare:
gt hook <bead> # Just attach (no action) 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 // --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 // To: gt sling mol-polecat-shiny --on gt-abc gastown
if slingQuality != "" { if slingQuality != "" {
qualityFormula, err := qualityToFormula(slingQuality) qualityFormula, err := qualityToFormula(slingQuality)
@@ -793,10 +793,10 @@ func runSlingFormula(args []string) error {
func updateAgentHookBead(agentID, beadID string) { func updateAgentHookBead(agentID, beadID string) {
// Convert agent ID to agent bead ID // Convert agent ID to agent bead ID
// Format examples (canonical: prefix-rig-role-name): // Format examples (canonical: prefix-rig-role-name):
// gastown/crew/max -> gt-gastown-crew-max // greenplace/crew/max -> gt-greenplace-crew-max
// gastown/polecats/Toast -> gt-gastown-polecat-Toast // greenplace/polecats/Toast -> gt-greenplace-polecat-Toast
// mayor -> gt-mayor // mayor -> gt-mayor
// gastown/witness -> gt-gastown-witness // greenplace/witness -> gt-greenplace-witness
agentBeadID := agentIDToBeadID(agentID) agentBeadID := agentIDToBeadID(agentID)
if agentBeadID == "" { if agentBeadID == "" {
return return
+3 -3
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'. 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 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. If not specified, the rig is inferred from the current directory.
Examples: Examples:
gt start crew joe # Start joe in current rig 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`, gt start crew joe --rig beads # Start joe in beads rig`,
Args: cobra.ExactArgs(1), Args: cobra.ExactArgs(1),
RunE: runStartCrew, RunE: runStartCrew,
@@ -660,7 +660,7 @@ func cleanupPolecats(townRoot string) {
func runStartCrew(cmd *cobra.Command, args []string) error { func runStartCrew(cmd *cobra.Command, args []string) error {
name := args[0] 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 rigName := startCrewRig
if parsedRig, crewName, ok := parseRigSlashName(name); ok { if parsedRig, crewName, ok := parseRigSlashName(name); ok {
if rigName == "" { if rigName == "" {
+2 -2
View File
@@ -60,7 +60,7 @@ type OverseerInfo struct {
// AgentRuntime represents the runtime state of an agent. // AgentRuntime represents the runtime state of an agent.
type AgentRuntime struct { type AgentRuntime struct {
Name string `json:"name"` // Display name (e.g., "mayor", "witness") 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 Session string `json:"session"` // tmux session name
Role string `json:"role"` // Role type Role string `json:"role"` // Role type
Running bool `json:"running"` // Is tmux session running? Running bool `json:"running"` // Is tmux session running?
@@ -95,7 +95,7 @@ type MQSummary struct {
// AgentHookInfo represents an agent's hook (pinned work) status. // AgentHookInfo represents an agent's hook (pinned work) status.
type AgentHookInfo struct { 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) Role string `json:"role"` // Role type (polecat, crew, witness, refinery)
HasWork bool `json:"has_work"` // Whether agent has pinned work HasWork bool `json:"has_work"` // Whether agent has pinned work
Molecule string `json:"molecule,omitempty"` // Attached molecule ID Molecule string `json:"molecule,omitempty"` // Attached molecule ID
+5 -5
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. a beads epic. All workers branch from the same base commit.
Examples: Examples:
gt swarm create gastown --epic gt-abc --worker Toast --worker Nux gt swarm create greenplace --epic gp-abc --worker Toast --worker Nux
gt swarm create gastown --epic gt-abc --worker Toast --start`, gt swarm create greenplace --epic gp-abc --worker Toast --start`,
Args: cobra.ExactArgs(1), Args: cobra.ExactArgs(1),
RunE: runSwarmCreate, RunE: runSwarmCreate,
} }
@@ -113,9 +113,9 @@ var swarmListCmd = &cobra.Command{
Examples: Examples:
gt swarm list gt swarm list
gt swarm list gastown gt swarm list greenplace
gt swarm list --status=active gt swarm list --status=active
gt swarm list gastown --status=landed`, gt swarm list greenplace --status=landed`,
Args: cobra.MaximumNArgs(1), Args: cobra.MaximumNArgs(1),
RunE: runSwarmList, RunE: runSwarmList,
} }
@@ -161,7 +161,7 @@ to an idle polecat in the rig.
Examples: Examples:
gt swarm dispatch gt-abc # Dispatch next task from epic gt-abc 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), Args: cobra.ExactArgs(1),
RunE: runSwarmDispatch, RunE: runSwarmDispatch,
} }
+3 -3
View File
@@ -23,8 +23,8 @@ another agent's hook.
Examples: Examples:
gt unsling # Clear my hook (whatever's there) gt unsling # Clear my hook (whatever's there)
gt unsling gt-abc # Only unsling if gt-abc is hooked gt unsling gt-abc # Only unsling if gt-abc is hooked
gt unsling gastown/joe # Clear joe's hook gt unsling greenplace/joe # Clear joe's hook
gt unsling gt-abc gastown/joe # Unsling gt-abc from joe gt unsling gt-abc greenplace/joe # Unsling gt-abc from joe
The bead's status changes from 'pinned' back to 'open'. 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. // isAgentTarget checks if a string looks like an agent target rather than a bead ID.
// Agent targets contain "/" or are known role names. // Agent targets contain "/" or are known role names.
func isAgentTarget(s string) bool { 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 { for _, c := range s {
if c == '/' { if c == '/' {
return true return true
+4 -4
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. states and takes action to keep work flowing.
Examples: Examples:
gt witness start gastown gt witness start greenplace
gt witness start gastown --foreground`, gt witness start greenplace --foreground`,
Args: cobra.ExactArgs(1), Args: cobra.ExactArgs(1),
RunE: runWitnessStart, 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. If rig is not specified, infers it from the current directory.
Examples: Examples:
gt witness attach gastown gt witness attach greenplace
gt witness attach # infer rig from cwd`, gt witness attach # infer rig from cwd`,
Args: cobra.MaximumNArgs(1), Args: cobra.MaximumNArgs(1),
RunE: runWitnessAttach, RunE: runWitnessAttach,
@@ -97,7 +97,7 @@ var witnessRestartCmd = &cobra.Command{
Stops the current session (if running) and starts a fresh one. Stops the current session (if running) and starts a fresh one.
Examples: Examples:
gt witness restart gastown`, gt witness restart greenplace`,
Args: cobra.ExactArgs(1), Args: cobra.ExactArgs(1),
RunE: runWitnessRestart, RunE: runWitnessRestart,
} }
+1 -1
View File
@@ -115,7 +115,7 @@ git status # See what conflicted
# DECISION: Can I resolve it? Is it trivial? # DECISION: Can I resolve it? Is it trivial?
# - If trivial: fix, git add, git rebase --continue # - If trivial: fix, git add, git rebase --continue
# - If complex: git rebase --abort, notify polecat # - If complex: git rebase --abort, notify polecat
gt mail send gastown/polecats/rictus -s "Rebase needed" -m "..." gt mail send greenplace/polecats/rictus -s "Rebase needed" -m "..."
``` ```
## Patrol Molecule: mol-refinery-patrol ## Patrol Molecule: mol-refinery-patrol
+1 -1
View File
@@ -20,7 +20,7 @@ type Templates struct {
// RoleData contains information for rendering role contexts. // RoleData contains information for rendering role contexts.
type RoleData struct { type RoleData struct {
Role string // mayor, witness, refinery, polecat, crew, deacon Role string // mayor, witness, refinery, polecat, crew, deacon
RigName string // e.g., "gastown" RigName string // e.g., "greenplace"
TownRoot string // e.g., "/Users/steve/ai" TownRoot string // e.g., "/Users/steve/ai"
WorkDir string // current working directory WorkDir string // current working directory
Polecat string // polecat name (for polecat role) Polecat string // polecat name (for polecat role)