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:
+13
-13
@@ -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
|
||||||
|
|||||||
@@ -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"
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -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
@@ -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
@@ -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
|
||||||
|
|||||||
@@ -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": {
|
||||||
|
|||||||
@@ -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,
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
|||||||
@@ -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),
|
||||||
|
|||||||
@@ -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`,
|
||||||
|
|||||||
@@ -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.`,
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
@@ -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
@@ -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"
|
||||||
|
|||||||
@@ -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
@@ -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,
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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
@@ -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)
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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
@@ -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,
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
@@ -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
|
||||||
|
|||||||
@@ -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 == "" {
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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,
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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,
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user