Commit Graph

2987 Commits

Author SHA1 Message Date
Steve Yegge
e984a55fe5 feat: add mail system and CLI commands
- internal/mail: Message types with priority support
- internal/mail: Mailbox JSONL operations (list, get, append, delete)
- internal/mail: Router for address resolution and delivery
- gt mail send: Send messages to agents
- gt mail inbox: List messages (--unread, --json)
- gt mail read: Read and mark messages as read
- Address formats: mayor/, rig/, rig/polecat, rig/refinery
- High priority messages trigger tmux notification
- Auto-detect sender from GT_RIG/GT_POLECAT env vars

Closes gt-u1j.6, gt-u1j.12

Generated with Claude Code

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-16 14:19:15 -08:00
Steve Yegge
d3d929105e feat: add refinery package and CLI commands
- internal/refinery: Types for Refinery, MergeRequest, queue items
- internal/refinery: Manager with start/stop/status/queue operations
- gt refinery start: Start refinery for a rig (--foreground option)
- gt refinery stop: Stop running refinery
- gt refinery status: Show refinery state and statistics
- gt refinery queue: Show pending merge requests
- Auto-discover polecat work branches as queue items
- JSON output support for status and queue commands

Closes gt-rm3

Generated with Claude Code

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-16 14:16:36 -08:00
Steve Yegge
b26e9aa308 feat: add CLI spawn command for polecat work assignment
- gt spawn <rig/polecat> --issue <id>: Assign issue and start session
- gt spawn <rig> --issue <id>: Auto-select idle polecat
- gt spawn -m task: Free-form task assignment
- --create: Create polecat if does not exist
- --no-start: Assign without starting session
- Fetches issue details from beads for rich context
- Auto-selects idle polecats when polecat not specified

Closes gt-u1j.19

Generated with Claude Code

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-16 14:14:02 -08:00
Steve Yegge
d92c67629e feat: add CLI swarm commands (create, start, status, list, land, cancel)
- gt swarm create: Create swarm from beads epic with workers
- gt swarm start: Activate a created swarm
- gt swarm status: Show detailed swarm info with task progress
- gt swarm list: List swarms with filtering by rig/status
- gt swarm land: Manually trigger landing to target branch
- gt swarm cancel: Cancel an active swarm
- SwarmStore: JSON-based persistence for swarm state
- Support for --json output on status and list commands

Closes gt-kmn.7

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-16 14:11:57 -08:00
Steve Yegge
807ba76a9b feat: add integration branch management for swarms
- CreateIntegrationBranch: create from BaseCommit, push to origin
- MergeToIntegration: merge worker branch with conflict detection
- LandToMain: merge integration to target branch
- CleanupBranches: remove all swarm branches after landing
- Helper functions for branch naming conventions

Closes gt-kmn.3

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-16 14:01:46 -08:00
Steve Yegge
515d8f82ce feat: add SwarmManager for swarm lifecycle operations
- Create/Start/Cancel swarm lifecycle methods
- State transition validation (Created->Active->Merging->Landed)
- Task assignment and state tracking
- GetReadyTasks/GetActiveTasks queries
- IsComplete check for swarm completion
- Integration with beads CLI for task loading

Closes gt-kmn.2

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-16 14:00:07 -08:00
Steve Yegge
f7a0b4045c feat: add gt stop --all emergency shutdown command
- gt stop --all: Kill all sessions across all rigs
- gt stop --rig <name>: Kill sessions in specific rig
- gt stop --graceful: Try graceful shutdown before force kill
- Captures session output before stopping
- Reports success/failure summary

Closes gt-u1j.22

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-16 13:58:03 -08:00
Steve Yegge
29e4436891 fix: code review fixes from gt-2tp and gt-y0t
- Replace custom contains() with strings.Contains in init.go
- Make session stop --force flag actually work
- Update session.Manager.Stop() to accept force parameter

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-16 13:56:32 -08:00
Steve Yegge
eef28f3ee5 feat: add CLI session commands (start, stop, at, list, capture, inject)
- start: Create tmux session and launch claude for polecat
- stop: Graceful shutdown with optional --force
- at: Attach to running session
- list: Show all active sessions with --json support
- capture: Get recent terminal output
- inject: Send message to session via tmux send-keys

Closes gt-u1j.11

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-16 13:51:37 -08:00
Steve Yegge
a5023c633b feat: add CLI core commands (status, prime, init)
- status: Show town status with rig/polecat/witness counts (--json supported)
- prime: Output role context based on current directory
- init: Initialize a git repo as a Gas Town rig

Closes gt-u1j.10

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-16 13:49:48 -08:00
Steve Yegge
452c649ce7 feat: add polecat lifecycle management
Types:
- Polecat: worker agent with state, clone, branch, issue
- State: idle/active/working/done/stuck
- Summary: concise status view

Manager operations:
- Add: clone rig, create branch, init state
- Remove: delete polecat (checks for uncommitted changes)
- List: enumerate all polecats
- Get: retrieve specific polecat

State management:
- SetState: update lifecycle state
- AssignIssue: assign work (sets StateWorking)
- ClearIssue: remove assignment (sets StateIdle)
- Wake: idle → active
- Sleep: active → idle

State persisted to polecats/<name>/state.json

Closes gt-u1j.8

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-16 13:37:34 -08:00
Steve Yegge
29ae7762a6 feat: add session management for polecat lifecycle
Manager operations:
- Start: create tmux session with optional issue assignment
- Stop: graceful shutdown with Ctrl+C then kill
- IsRunning: check if session exists
- List: enumerate all sessions for rig
- Attach: attach to session
- Capture: get recent output
- Inject: send message to session
- StopAll: terminate all sessions

Session naming: gt-<rig>-<polecat>

StartOptions:
- WorkDir: override working directory
- Issue: initial issue to work on
- Command: override default "claude" command

Environment variables set on start:
- GT_RIG: rig name
- GT_POLECAT: polecat name

Closes gt-u1j.7

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-16 13:35:22 -08:00
Steve Yegge
a0ecc051b8 feat: add rig management package
Types:
- Rig: managed repository with polecats, witness, refinery, mayor
- RigSummary: concise rig overview
- Manager: rig discovery, loading, creation

Manager operations:
- DiscoverRigs: load all registered rigs
- GetRig: get specific rig by name
- RigExists, ListRigNames: query helpers
- AddRig: clone and register new rig
- RemoveRig: unregister rig (keeps files)

Rig structure follows docs/architecture.md:
- polecats/, refinery/rig/, witness/rig/, mayor/rig/

Closes gt-u1j.5

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-16 13:33:52 -08:00
Steve Yegge
355759be15 feat: add swarm package with core types
Types:
- Swarm: coordinated multi-agent work unit
- SwarmTask: single task assigned to worker
- SwarmState: lifecycle states (created/active/merging/landed/failed/cancelled)
- TaskState: task states (pending/assigned/in_progress/review/merged/failed)
- SwarmSummary: high-level progress overview

Methods:
- SwarmState.IsTerminal(), IsActive()
- TaskState.IsComplete()
- Swarm.Summary(), Progress()

Closes gt-kmn.1

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-16 13:31:56 -08:00
Steve Yegge
8bd1a353db feat: add workspace detection by walking up directory tree
Detection:
- Find() walks up from given directory looking for markers
- Primary marker: config/town.json
- Secondary marker: mayor/ directory
- Follows symlinks using filepath.EvalSymlinks

Functions:
- Find, FindOrError: from given directory
- FindFromCwd, FindFromCwdOrError: from current directory
- IsWorkspace: check if directory is workspace root

Closes gt-f9x.2

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-16 13:30:25 -08:00
Steve Yegge
5a4e861a85 feat: add tmux wrapper package for session operations
Session lifecycle:
- NewSession, KillSession, HasSession, ListSessions, RenameSession

Session interaction:
- SendKeys, SendKeysRaw, CapturePane, CapturePaneAll, AttachSession

Environment and windows:
- SetEnvironment, GetEnvironment, SelectWindow, GetSessionInfo

Error handling:
- Detects ErrNoServer, ErrSessionExists, ErrSessionNotFound
- Graceful handling when no tmux server running

Closes gt-u1j.4

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-16 13:28:35 -08:00
Steve Yegge
f46a1e6eab feat: add git wrapper package for subprocess operations
Operations:
- Clone, Checkout, Fetch, Pull, Push
- Add, Commit, CommitAll
- Status, CurrentBranch, HasUncommittedChanges, RemoteURL
- Merge, Rebase, AbortMerge, AbortRebase
- CreateBranch, DeleteBranch, Rev, IsAncestor

Error handling:
- Detects ErrNotARepo, ErrMergeConflict, ErrAuthFailure, ErrRebaseConflict
- Wraps git stderr in error messages

Closes gt-u1j.3

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-16 13:27:03 -08:00
Steve Yegge
e16931b304 feat: add config package with types and JSON serialization
Types:
- TownConfig: main town configuration (config/town.json)
- RigsConfig: rigs registry with BeadsConfig per rig
- AgentState: agent state with role, session, extras

Features:
- Load/Save functions for all types
- Version compatibility checks
- Required field validation
- Creates parent directories on save

Closes gt-f9x.1

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-16 13:24:28 -08:00
Steve Yegge
a4677191d1 chore: ignore gt binary 2025-12-16 13:19:47 -08:00
Steve Yegge
7217b34a90 feat: add Cobra CLI scaffolding with Lipgloss styles
- cmd/gt/main.go: Entry point using Cobra
- internal/cmd/root.go: Root command with description
- internal/cmd/version.go: Version command with build info
- internal/style/style.go: Lipgloss styles for terminal output

Closes gt-u1j.1

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-16 13:19:27 -08:00
Steve Yegge
008eb6ba3a chore: add beads messaging tracking (gt-r01), block mail tasks 2025-12-16 13:12:38 -08:00
Steve Yegge
794ef9c293 bd sync: beads state 2025-12-16 03:05:19 -08:00
Steve Yegge
195f9006e9 docs: add multi-wave swarm and daemon lifecycle design
Key Design Decisions added:
- #11: Beads as Swarm State (No Separate Database)
- #12: Agent Session Lifecycle (Daemon Protection)
- #13: Resource-Constrained Worker Pool

New section: Multi-Wave Swarms
- Wave orchestration via dependency graph
- Witness multi-wave loop pseudocode
- Long-running autonomy through daemon persistence

This eliminates the need for SQLite/manifest storage for swarms.
Beads epics and dependencies encode all swarm state.

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-16 01:52:10 -08:00
Steve Yegge
9fb82dd3b4 docs: add GGT prompt architecture design
Comprehensive prompt system documentation including:
- Full PGT prompt inventory (roles, mail, spawn, lifecycle)
- Gap analysis (Witness has no prompts!)
- GGT architecture recommendations (directory structure, template engine)
- Complete Witness prompt design (new role!)
- Implementation plan with phases

Related: gt-59p

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-16 00:48:10 -08:00
Steve Yegge
693ffe5b77 docs: add beads config, ASCII layout, and direct landing to architecture
- Add beads multi-agent configuration table (daemon/worktree/sync-branch)
- Add ASCII directory layout for non-mermaid rendering
- Document direct landing workflow (bypass merge queue)
- Add design decisions 9 (direct landing) and 10 (daemon awareness)
- Add CLI commands for gt land and merge queue

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-16 00:30:25 -08:00
Steve Yegge
ddebc4087a docs: add Mermaid architecture diagrams
- System overview: Town hierarchy with Overseer, Mayor, Rigs, Agents
- Communication flows: Mail-based agent communication
- Swarm dispatch sequence: Full workflow from Overseer to completion
- Worker cleanup sequence: Witness verification with escalation path
- Session cycling sequence: Mail-to-self handoff pattern
- Rig structure: Visual of container with agent directories
- Merge queue flow: Polecat branches → Refinery → main

All diagrams render in GitHub markdown.

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-15 23:41:25 -08:00
Steve Yegge
ba9622d273 docs: add Overseer role, failure modes, emergency ops
- Add Overseer section documenting human operator role
- Add escalation path to worker cleanup diagram (→ Overseer)
- Add Failure Modes and Recovery section with recovery table
- Add Emergency Operations CLI commands (gt stop --all)
- Fix design decision numbering (7/8 were swapped)
- Clarify "four AI agent roles" vs Overseer

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-15 23:23:54 -08:00
Steve Yegge
884f6a88dc docs: add plugin architecture (agents-as-plugins)
Plugins are just more agents in the wasteland - with identities,
mailboxes, and beads access. No special framework, just directory
conventions and mail-based invocation.

Added beads:
- gt-axz: Plugin architecture epic
- gt-8dv: CLI plugin commands
- gt-pio: merge-oracle plugin (merge queue analysis)
- gt-35x: plan-oracle plugin (work decomposition)

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-15 22:53:55 -08:00
Steve Yegge
bc6f76ccb1 docs: rig as container not clone, BEADS_DIR for issue tracking
Major architecture decision: rigs are now pure container directories,
not git clones. This prevents agent confusion by ensuring each agent
has exactly one place to work (their own /rig/ clone).

Key changes:
- Rig root is NOT a git repo - just a container
- Rig-level .beads/ holds issues for all agents in that rig
- Agents use BEADS_DIR env var to point to rig's beads
- Refinery's clone is the authoritative "main branch" view
- Added design decisions #6 (rig as container) and #7 (BEADS_DIR)

See also: beads issue bd-411u for BEADS_DIR documentation.

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-15 22:08:49 -08:00
Steve Yegge
185d8bf688 beads: audit GGT beads for consistency and completeness
Closes gt-61o (Review and audit all GGT beads)

Changes:
- Fixed 4 stale doc references (town-design.md → architecture.md)
- Fixed architecture inconsistency in gt-f9x.2 (.gastown → config/)
- Enriched 25+ sparse implementation descriptions with:
  - Go interfaces and type definitions
  - Implementation notes and error handling
  - CLI command specifications
  - Integration patterns

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-15 21:24:22 -08:00
Steve Yegge
07f23c86de docs: consolidate design docs into architecture.md and beads
Replaced 4 individual design docs with single master architecture doc.
Design content moved to bead descriptions (self-contained, no markdown refs).
Closed gt-cr0.

- Add docs/architecture.md: top-down Gas Town explanation
- Delete docs/{town,swarm-shutdown,polecat-beads-access,mayor-handoff}-design.md
- Update CLAUDE.md to point to architecture.md
- Update beads: gt-sd6, gt-f8v, gt-eu9, gt-gl2, gt-zx3, gt-e1y, gt-cjb, gt-082,
  gt-g2d, gt-sye, gt-vci, gt-82y, gt-l3c, gt-u82 now self-contained

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-15 20:52:49 -08:00
Steve Yegge
fbb8b1f040 docs: add design docs for swarm shutdown, polecat beads, and mayor handoff
- swarm-shutdown-design.md: Worker cleanup, Witness verification, session cycling
- polecat-beads-access-design.md: Per-rig beads config, worker prompting
- mayor-handoff-design.md: Mayor session cycling and handoff protocol

Closes design epics: gt-82y, gt-l3c, gt-u82

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-15 20:16:31 -08:00
Steve Yegge
9385429e4d design: add mayor session cycling epic (gt-u82)
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-15 20:03:32 -08:00
Steve Yegge
c75430a04b design: add epics for polecat beads-write and swarm shutdown
- gt-l3c: Polecat Beads write access (reversing read-only decision)
  - Per-rig beads repo configuration
  - Worker prompting updates
  - Witness proxy removal
  - Worker cleanup beads sync

- gt-82y: Swarm shutdown and worker cleanup
  - Witness pre-kill verification protocol
  - Witness session cycling and handoff
  - Mayor vs Witness responsibility clarification
  - Enhanced polecat decommission prompting

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-15 20:03:04 -08:00
Steve Yegge
d566d1a171 docs: update town-design.md with decentralized architecture
Architecture decision (gt-iib):
- Per-rig agents: mayor/, witness/, refinery/, polecats/ in each rig
- Visible config dir: config/ not .gastown/
- Witness role: per-rig pit boss with its own clone
- Minimal invasiveness: only .git/info/exclude modified
- Updated config file examples for new structure

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-15 19:22:45 -08:00
Steve Yegge
4d66bfd8a4 docs: fix epic IDs in CLAUDE.md to canonical gt-u1j and gt-f9x
The old epic IDs (gt-fqwd, gt-evp2) were from the PGT repo.
The canonical GGT epics are:
- gt-u1j: Port Gas Town to Go
- gt-f9x: Town & Rig Management

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-15 17:36:41 -08:00
Steve Yegge
4c782bc59d Initial commit: Go port scaffolding
- Go project structure (go.mod, cmd/gt/main.go)
- Beads database initialized with gt- prefix
- Town management design doc (docs/town-design.md)
- Basic README and CLAUDE.md

Epics tracked:
- gt-u1j: Port Gas Town to Go
- gt-f9x: Town & Rig Management

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-15 16:38:23 -08:00