diff --git a/.beads/issues.jsonl b/.beads/issues.jsonl index 127bf6fb..60a58967 100644 --- a/.beads/issues.jsonl +++ b/.beads/issues.jsonl @@ -455,6 +455,7 @@ {"id":"gt-cpm2","title":"Automatic spawn for ready work","description":"Auto-spawn polecats for ready work:\n\nWhen Witness has capacity (active_workers \u003c max_workers):\n1. Query bd ready for unblocked issues\n2. Filter to rig-appropriate work (by prefix or epic)\n3. For each ready issue up to capacity:\n - gt spawn --issue \u003cid\u003e\n - Track that we spawned for this issue\n\nConfiguration (in rig config.json):\n- max_workers: 4 (default)\n- spawn_delay: 5s between spawns\n- auto_spawn: true/false\n\nThis enables 'fire and forget' swarming:\n- Mayor creates epic with children\n- Mayor tells Witness to work epic\n- Witness spawns polecats automatically\n- Witness cleans up as they complete","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-20T03:14:24.724136-08:00","updated_at":"2025-12-20T09:30:28.050001-08:00","closed_at":"2025-12-20T09:30:28.050001-08:00","dependencies":[{"issue_id":"gt-cpm2","depends_on_id":"gt-53w6","type":"parent-child","created_at":"2025-12-20T03:14:37.365334-08:00","created_by":"daemon"},{"issue_id":"gt-cpm2","depends_on_id":"gt-mxyj","type":"blocks","created_at":"2025-12-20T03:14:38.957826-08:00","created_by":"daemon"}]} {"id":"gt-cr0","title":"Consolidate design docs into beads descriptions","description":"The markdown design docs (swarm-shutdown-design.md, polecat-beads-access-design.md, mayor-handoff-design.md) will decay. Extract key decisions and prompting templates into the beads descriptions themselves, then archive or remove the markdown files. Beads are the source of truth.","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-15T20:24:05.45131-08:00","updated_at":"2025-12-15T20:51:52.083465-08:00","closed_at":"2025-12-15T20:51:52.083465-08:00"} {"id":"gt-cr9","title":"Harness Design \u0026 Documentation","description":"The harness (Gas Town installation directory) needs design cleanup, documentation, and tooling.\n\n## Current Problems\n\n1. **Shared harness confusion**: ~/ai is shared by PGT and GGT with overlapping structures\n - PGT uses ~/ai/mayor/ as town-level Mayor home\n - GGT Mayor works in ~/ai/mayor/rigs/gastown/\n - ~/ai/gastown/ has both .gastown/ (PGT) and mayor/ (git clone)\n\n2. **Beads redirect**: ~/ai/.beads/redirect → mayor/rigs/gastown/.beads\n - This is specific to GGT's decentralized structure\n - Should be documented as an example\n\n3. **architecture.md**: Verify rig-level mayor/rig/ is shown correctly\n\n4. **No harness creation tooling**: Users must manually set up\n\n## Proposed Work\n\n- Document what a harness IS (installation directory)\n- Create harness creation command or template repo\n- Update architecture.md if needed \n- Create example harness configuration for docs\n- Resolve PGT/GGT sharing issue","status":"closed","priority":1,"issue_type":"epic","created_at":"2025-12-17T17:15:08.769961-08:00","updated_at":"2025-12-19T12:02:12.135837-08:00","closed_at":"2025-12-19T12:02:12.135837-08:00"} +{"id":"gt-csba","title":"Digest: mol-deacon-patrol","description":"Patrol 20: Routine - handoff threshold reached","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T22:39:00.441055-08:00","updated_at":"2025-12-24T22:39:00.441055-08:00","closed_at":"2025-12-24T22:39:00.441027-08:00","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-csba","depends_on_id":"gt-ict8","type":"parent-child","created_at":"2025-12-24T22:39:00.442771-08:00","created_by":"stevey"}]} {"id":"gt-ct0u","title":"Merge: gt-3x1.4","description":"branch: polecat/Nux\ntarget: main\nsource_issue: gt-3x1.4\nrig: gastown","status":"closed","priority":1,"issue_type":"merge-request","created_at":"2025-12-19T14:53:53.140259-08:00","updated_at":"2025-12-19T18:26:14.104002-08:00","closed_at":"2025-12-19T17:49:09.234713-08:00"} {"id":"gt-ctr","title":"GGT vs PGT Gap Analysis Summary","description":"Summary of gaps comparing GGT (~4,500 LOC) to PGT (~27,700 LOC).\n\n## Critical Gaps (P1) - Existing Issues\n- gt-u1j.17: Polecat CLI (add, list, wake, sleep) - DETAILED\n- gt-u1j.16: Rig CLI (add, list, show, remove) - DETAILED\n- gt-u1j.18: Witness CLI (start, stop, status) - DETAILED\n- gt-f9x.4: Doctor framework - DETAILED\n- gt-f9x.5: Workspace doctor checks - DETAILED\n- gt-f9x.6: Rig doctor checks - DETAILED\n\n## Critical Gaps (P1) - New Issues\n- gt-a95: Refinery background daemon mode - ENHANCED\n- gt-hgk: Mail message types and threading - ENHANCED\n\n## Significant Gaps (P2) - New Issues\n- gt-d46: Mail CLI archive/purge/search - ENHANCED\n- gt-e9k: Swarm preflight/postflight - ENHANCED\n- gt-662: Swarm report generation - ENHANCED\n- gt-69l: Hook system - ENHANCED\n- gt-3yj: Agent monitoring - ENHANCED\n- gt-1ky: Workspace CLI (may overlap f9x.3) - ENHANCED\n- gt-9j9: Worker status reporting - ENHANCED\n- gt-qao: Mayor CLI - ENHANCED\n- gt-7o7: Session pre-shutdown checks - ENHANCED\n- gt-c92: Batch all command - ENHANCED\n- gt-lno: Swarm state persistence - ENHANCED\n- gt-a9y: File locking - ENHANCED\n- gt-30o: Error handling improvements - ENHANCED\n\n## Significant Gaps (P2) - Existing Issues\n- gt-kmn.12: Ephemeral rig support - DETAILED\n\n## Lower Priority (P3) - New Issues\n- gt-3fm: Mail orchestrator daemon - ENHANCED\n- gt-2kz: Cleanup commands - ENHANCED\n- gt-ebl: Names commands - ENHANCED\n- gt-1u9: Interactive prompts - ENHANCED\n- gt-8lz: Help text improvements - ENHANCED\n\n## Closed as Duplicates\n- gt-3tz → gt-u1j.17 (polecat CLI)\n- gt-e1r → gt-u1j.16 (rig CLI)\n- gt-86w → gt-f9x.4/5/6 (doctor)\n- gt-alx → gt-kmn.12 (ephemeral rigs)\n\n## Execution Order Recommendation\n1. P1 CLI commands (existing detailed issues ready to implement)\n2. gt-a95: Refinery daemon (blocks autonomous operation)\n3. gt-7o7: Pre-shutdown checks (prevents data loss)\n4. gt-a9y: File locking (prevents corruption)\n5. gt-hgk + gt-d46: Mail improvements\n6. gt-69l: Hook system (enables extensibility)\n7. Remaining P2s in any order\n8. P3s as time permits","status":"open","priority":1,"issue_type":"epic","created_at":"2025-12-16T14:49:09.555759-08:00","updated_at":"2025-12-16T16:07:58.413016-08:00"} {"id":"gt-cu7r","title":"Implement handoffs using pinned beads","description":"Replace the current mail-based handoff system with pinned beads.\n\n## Current Problem\n\nHandoff messages get closed before the successor can read them because:\n1. `gt mail read` auto-acks (closes) messages\n2. `bd mail inbox` only shows open messages\n3. Successor sees empty inbox\n\n## Solution\n\nUse pinned beads for handoffs:\n- One pinned bead per role: `mayor-handoff`, `\u003crig\u003e-refinery-handoff`, etc.\n- Predecessor updates the content before cycling\n- Successor reads on startup via `gt prime`\n- Never closes - always available\n\n## Implementation\n\n### 1. Create handoff beads on first cycle\n- `bd create --title='Mayor Handoff' --type=task --status=pinned --assignee=mayor`\n- Store ID in role config or use well-known naming convention\n\n### 2. Update gt handoff command\n- Instead of `bd mail send`, update the pinned handoff bead\n- `bd update \u003chandoff-id\u003e --description='...handoff content...'`\n\n### 3. Update gt prime\n- Read the role's handoff bead\n- Display content to successor\n\n### 4. Compression/reset\n- `gt rig reset` clears handoff content\n- Or manual: `bd update \u003chandoff-id\u003e --description=''`\n\n## Dependencies\n\nRequires beads-6v2 (StatusPinned) to be implemented first.","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-18T21:28:05.738035-08:00","updated_at":"2025-12-19T01:57:17.034513-08:00","closed_at":"2025-12-19T01:57:17.034513-08:00"} @@ -871,7 +872,7 @@ {"id":"gt-qcr6","title":"Polecat template: fix 'git clone' to 'git worktree'","description":"Template says 'You're in a project git clone' but polecats use worktrees, not clones. Fix terminology.","status":"closed","priority":2,"issue_type":"bug","created_at":"2025-12-23T16:56:44.091888-08:00","updated_at":"2025-12-23T17:09:02.10909-08:00","closed_at":"2025-12-23T17:09:02.10909-08:00","close_reason":"Completed in commit 1931ec7","dependencies":[{"issue_id":"gt-qcr6","depends_on_id":"gt-t9u7","type":"parent-child","created_at":"2025-12-23T16:57:16.207186-08:00","created_by":"daemon"}]} {"id":"gt-qe9w","title":"Simplify and reorganize molecular chemistry docs","description":"The Gas Town molecular chemistry docs (molecules.md, molecular-chemistry.md, molecule-algebra.md) are too dramatic and verbose. They need a simplification pass to be more reference-manual style.\n\n**Current problems:**\n1. Too much metaphor and philosophy, not enough practical reference\n2. Start with the chemistry abstraction instead of what users care about (patrols, workflows)\n3. Layer cake is presented top-down (formulas → protos → molecules) instead of bottom-up (issues → dependencies → execution)\n\n**Proposed structure (inverted pyramid):**\n\n1. **Start with execution semantics:**\n - Work = issues with dependencies\n - Dependencies control execution (blocks = sequential, no dep = parallel)\n - Agents traverse dependency graphs until blocked\n - Multi-day workflows via compound bonding\n\n2. **Move to molecules:**\n - Molecules are just epics with workflow intent\n - Bonding = creating dependencies between work graphs\n - No protos required for ad-hoc workflows\n\n3. **Then templates (protos/wisps):**\n - Phase metaphor for storage locations\n - pour/wisp/squash/burn operations\n - When to use each phase\n\n4. **Finally formulas (for advanced users):**\n - YAML compile-time composition\n - extends, compose, aspects\n - Only needed for complex reusable patterns\n\n**Style guidelines:**\n- Reference manual with quick examples\n- Written like agent priming (context they need to execute)\n- Less dramatic, more straightforward\n- TL;DR at top of each doc\n\n**See also:**\n- beads/docs/MOLECULES.md has a simplified version to use as template\n- The execution model section explains multi-day traversal clearly","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-24T19:51:42.43826-08:00","updated_at":"2025-12-24T19:51:42.43826-08:00"} {"id":"gt-qflq","title":"mol-witness-patrol","description":"Per-rig worker monitor patrol loop using the Christmas Ornament pattern.\n\nThe Witness is the Pit Boss for your rig. You watch polecats, nudge them toward\ncompletion, verify clean git state before kills, and escalate stuck workers.\n\n**You do NOT do implementation work.** Your job is oversight, not coding.\n\n## The Christmas Ornament Shape\n\nThis molecule uses dynamic bonding to create inspection arms per-polecat:\n\n```\n ★ mol-witness-patrol (trunk)\n /|\\\n ┌─────┘ │ └─────┐\n PREFLIGHT DISCOVERY CLEANUP\n │ │ │\n ┌───┴───┐ ┌─┴─┐ ┌───┴───┐\n │inbox │ │sur│ │aggreg │\n │refnry │ │vey│ │save │\n │load │ └─┬─┘ │summary│\n └───────┘ │ │contxt │\n │ │loop │\n ┌─────────┼─────────┐ └───────┘\n │ │ │\n ● ● ● mol-polecat-arm (dynamic)\n ace nux toast\n │ │ │\n ┌──┴──┐ ┌──┴──┐ ┌──┴──┐\n │cap │ │cap │ │cap │\n │ass │ │ass │ │ass │\n │dec │ │dec │ │dec │\n │exec │ │exec │ │exec │\n └──┬──┘ └──┬──┘ └──┬──┘\n │ │ │\n └─────────┴─────────┘\n │\n ⬣ base (cleanup)\n```\n\n## Phases\n\n### PREFLIGHT (fixed steps)\n1. inbox-check - Process lifecycle requests, help messages\n2. check-refinery - Ensure MQ is alive and processing\n3. load-state - Read persistent state (nudge counts, etc.)\n\n### DISCOVERY (spawns dynamic arms)\n4. survey-workers - List polecats, bond mol-polecat-arm per polecat\n5. run-plugins - Bond mol-plugin-runner for each witness plugin\n\n### CLEANUP (gate + fixed steps)\n6. aggregate - GATE: WaitsFor all arms + plugins to complete\n7. save-state - Persist nudge counts, action log\n8. generate-summary - Create digest content\n9. context-check - Check if context is high\n10. burn-or-loop - Squash/burn wisp, then loop or exit\n\n## Dynamic Arms\n\nEach polecat gets mol-polecat-arm bonded as a wisp child:\n- capture - Capture tmux output\n- assess - Categorize state (working/idle/error/done)\n- load-history - Get nudge counts for this polecat\n- decide - Apply nudge matrix\n- execute - Take action (nudge/kill/escalate/none)\n\nArms run in PARALLEL. The aggregate step waits for all to complete.\n\n## Activity Feed\n\nThis design enables real-time visibility:\n\n```\n[14:32:08] + patrol-x7k.arm-ace bonded (5 steps)\n[14:32:09] → patrol-x7k.arm-ace.capture in_progress\n[14:32:10] ✓ patrol-x7k.arm-ace.capture completed\n[14:32:14] ✓ patrol-x7k.arm-ace.decide completed (action: nudge-1)\n[14:32:17] ✓ patrol-x7k.arm-ace COMPLETE\n```\n\n## Storage\n\n- Wisp storage: .beads-wisp/ (ephemeral, gitignored)\n- Persistent state: witness handoff bead (nudge counts, etc.)\n- Digests: Squashed summaries in permanent beads\n\n## Dependencies\n\n- bd-xo1o: Dynamic Molecule Bonding epic (in beads rig)\n - bd mol bond with variable substitution\n - WaitsFor directive for fanout gates\n - Activity feed query\n\nLabels: [template, christmas-ornament]","status":"closed","priority":1,"issue_type":"epic","created_at":"2025-12-23T01:39:31.895817-08:00","updated_at":"2025-12-24T14:05:05.645834-08:00","closed_at":"2025-12-24T14:05:05.645834-08:00","close_reason":"Superseded by mol-witness-patrol proto","labels":["template"]} -{"id":"gt-qgbe","title":"Digest: mol-deacon-patrol","description":"Patrol 3: OK","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T20:55:49.186887-08:00","updated_at":"2025-12-24T20:55:49.186887-08:00","closed_at":"2025-12-24T20:55:49.186851-08:00","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-qgbe","depends_on_id":"gt-x0yu","type":"parent-child","created_at":"2025-12-24T20:55:49.187538-08:00","created_by":"stevey"}]} +{"id":"gt-qgbe","title":"Digest: mol-deacon-patrol","description":"Patrol 3: OK","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T20:55:49.186887-08:00","updated_at":"2025-12-24T20:55:49.186887-08:00","closed_at":"2025-12-24T20:55:49.186851-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-qh2","title":"Session cycling UX: smooth transitions via TUI wrapper","description":"## Problem\n\nCurrent CLI agent session cycling is painful:\n- Shell → CC starts → priming → context loads → ready → work → exit/crash → repeat\n- Each cycle is 30-60 seconds of cold boot\n- No continuity between shell and agent's inner state\n- Raw \"session not running, starting...\" loop is the baseline\n\n## GGT Advantages (already have)\n\n- Beads: Work state survives session death completely\n- Mail: Handoff notes from past-self to future-self \n- Prime commands: Structured context reload\n\n## Gap: Transition Mechanics\n\nIdeas to explore when actively using CLI:\n\n1. **In-band cycling** - `/restart` or `/cycle` command, agent handles own restart without dropping to shell\n\n2. **Hot standby** - TUI maintains pre-warmed session in background, switch to already-primed agent\n\n3. **Persistent wrapper** - Bubbletea TUI stays running across session cycles, CC sessions come/go inside it\n\n4. **Session pooling** - Keep 2-3 primed sessions ready, never wait for cold start\n\n## Deferred\n\nDeliberately P4 until we're actively using the simpler CLI and feel the pain firsthand.","status":"open","priority":4,"issue_type":"task","created_at":"2025-12-15T20:38:12.660716-08:00","updated_at":"2025-12-15T23:17:34.27061-08:00"} {"id":"gt-qivm","title":"gt crew at: auto-prime when exec'ing Claude in-session","description":"When running 'gt crew at \u003cname\u003e' from inside the target session, we exec Claude directly. But this means we can't send 'gt prime' afterward since we ARE the process.\n\nPossible solutions:\n1. Claude startup hook that runs gt prime\n2. Pass prompt as argument to claude CLI\n3. Wrapper script approach\n\nRelated: crew resume prompt also can't be sent in this path.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-19T15:13:38.035775-08:00","updated_at":"2025-12-21T11:50:55.924767-08:00","closed_at":"2025-12-21T11:50:55.924767-08:00","close_reason":"Implemented: execClaude now passes 'gt prime' as initial prompt to Claude CLI"} {"id":"gt-qj12","title":"Obsolete beads issues need cleanup","description":"Found obsolete issues that should be closed or fixed:\n\nTest artifacts to close:\n- gt-nriy: Test: Alpha to Beta (message test)\n- gt-gswn: Integration test (test artifact)\n- gt-54kn: Test: New Router\n\nBroken dependencies (reference non-existent gt-test123):\n- gt-vhby: implement\n- gt-tvos: load-context\n- gt-lwuu.2: implement (template variable unresolved)\n\nCloudRun references (non-existent /deploy/cloudrun/):\n- gt-9a2.6, gt-9a2.7, gt-9a2.11\n\nReview and close/update these before launch.","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-24T12:50:57.843146-08:00","updated_at":"2025-12-24T12:50:57.843146-08:00","dependencies":[{"issue_id":"gt-qj12","depends_on_id":"gt-jo9n","type":"blocks","created_at":"2025-12-24T12:52:07.394519-08:00","created_by":"daemon"}]} @@ -891,7 +892,7 @@ {"id":"gt-qvn7.1.2","title":"Wisp directory and format","description":"Define and implement the .beads-wisp directory structure.\n\n## Directory Structure\n\n```\n\u003cclone\u003e/.beads-wisp/\n hook-\u003cagent\u003e.wisp.yaml # Slung work for this agent\n patrol-\u003cid\u003e.wisp.yaml # Patrol cycle state (future)\n```\n\n## Wisp File Format\n\n```yaml\ntype: slung-work | patrol-cycle\ncreated_at: ISO timestamp\ncreated_by: entity who created it\n\n# For slung-work:\nbead_id: gt-xxx\ncontext: optional message\n\n# For patrol-cycle (future):\nformula: mol-deacon-patrol\ncurrent_step: inbox-check\nstep_states: {...}\n```\n\n## Key Properties\n\n- NOT git tracked (.beads-wisp/ in .gitignore)\n- Ephemeral - burned after use\n- Local to each clone\n- Fast writes (no sync needed)\n\n## Implementation\n\n- internal/wisp/dir.go - Directory creation/management\n- internal/wisp/types.go - Wisp type definitions\n- internal/wisp/io.go - Read/write operations","status":"closed","priority":0,"issue_type":"task","created_at":"2025-12-24T15:36:25.061863-08:00","updated_at":"2025-12-24T16:04:14.90022-08:00","closed_at":"2025-12-24T16:04:14.90022-08:00","close_reason":"Closed","dependencies":[{"issue_id":"gt-qvn7.1.2","depends_on_id":"gt-qvn7.1","type":"parent-child","created_at":"2025-12-24T15:36:25.063924-08:00","created_by":"daemon"}]} {"id":"gt-qvn7.1.3","title":"Hook reading in gt prime","description":"Enhance gt prime to check and display hook contents.\n\n## Current Behavior\n\ngt prime loads context:\n- Reads CLAUDE.md\n- Injects beads workflow info\n- Shows status\n\n## New Behavior\n\nAfter loading context, check hook:\n\n```go\n// In prime.go\nfunc checkHook(agent string) {\n wispPath := \".beads-wisp/hook-\" + agent + \".wisp.yaml\"\n if wisp := readWisp(wispPath); wisp != nil {\n // Inject hook info into prime output\n showSlungWork(wisp)\n }\n}\n```\n\n## Output Format\n\nWhen hook has slung work:\n\n```markdown\n## Your Hook\n\nYou have work assigned:\n\n**Bead:** gt-xxx\n**Title:** Fix authentication bug\n**Priority:** P1\n\nContext from previous session:\n\u003e Continue where I left off...\n\n**BEGIN WORK NOW.** Claim it with:\n bd update gt-xxx --status=in_progress\n```\n\n## Files Modified\n\n- cmd/gt/prime.go - Add hook checking\n- internal/wisp/hook.go - Hook reading utilities","status":"closed","priority":0,"issue_type":"task","created_at":"2025-12-24T15:36:37.061178-08:00","updated_at":"2025-12-24T16:07:22.843612-08:00","closed_at":"2025-12-24T16:07:22.843612-08:00","close_reason":"Closed","dependencies":[{"issue_id":"gt-qvn7.1.3","depends_on_id":"gt-qvn7.1","type":"parent-child","created_at":"2025-12-24T15:36:37.063211-08:00","created_by":"daemon"},{"issue_id":"gt-qvn7.1.3","depends_on_id":"gt-qvn7.1.2","type":"blocks","created_at":"2025-12-24T15:36:56.759282-08:00","created_by":"daemon"}]} {"id":"gt-qvn7.1.4","title":"Wisp burn after pickup","description":"Implement wisp cleanup after work is picked up.\n\n## When to Burn\n\nAfter agent has picked up slung work:\n- Agent claims the issue (bd update --status=in_progress)\n- Or agent explicitly acknowledges the handoff\n- Wisp file is deleted\n\n## Implementation Options\n\nOption A: Agent burns manually\n```bash\ngt hook burn # Deletes current hook wisp\n```\n\nOption B: Auto-burn on claim\n- bd update detects theres a hook for this issue\n- Burns the wisp automatically\n\nOption C: Burn in prime (after display)\n- Once shown to agent, delete the wisp\n- Simple but might lose info if agent crashes before reading\n\n## Recommendation\n\nUse Option A (manual burn) for v0.1:\n- Explicit is better than implicit\n- Agent controls when theyre done with handoff\n- Add auto-burn in v0.2\n\n## Command\n\n```bash\ngt hook burn\n# Deletes .beads-wisp/hook-\u003cagent\u003e.wisp.yaml\n# Confirms: \"Hook cleared\"\n```","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-24T15:36:48.284445-08:00","updated_at":"2025-12-24T16:07:22.946068-08:00","closed_at":"2025-12-24T16:07:22.946068-08:00","close_reason":"Closed","dependencies":[{"issue_id":"gt-qvn7.1.4","depends_on_id":"gt-qvn7.1","type":"parent-child","created_at":"2025-12-24T15:36:48.286893-08:00","created_by":"daemon"},{"issue_id":"gt-qvn7.1.4","depends_on_id":"gt-qvn7.1.3","type":"blocks","created_at":"2025-12-24T15:36:56.843124-08:00","created_by":"daemon"}]} -{"id":"gt-qvn7.2","title":"Phase 2: Hook Execution Protocol","description":"# Phase 2: Hook Execution Protocol\n\nMaking agents actually RUN what's on their hook.\n\n## The Problem\n\nCurrently, agents wake up, get primed, and... wait. They don't automatically\nexecute their pinned molecule or slung work. The propulsion is missing.\n\n## The Solution\n\ngt prime should end with an ACTION, not just context loading:\n\n```\ngt prime output:\n 1. Load context (existing)\n 2. Check hook\n 3. If hook has work → tell agent to RUN IT NOW\n```\n\n## Hook Types\n\n| Hook Content | Action |\n|--------------|--------|\n| Pinned molecule (mol-*) | Execute current step, close step when done |\n| Slung bead (gt-xxx) | Show bead, begin work |\n| Nothing | Wait for assignment |\n\n## Molecule Execution Pattern\n\nWhen hook has a molecule:\n\n```markdown\n## Your Hook: mol-deacon-patrol\n\nCurrent step: inbox-check (gt-xxx)\nStatus: pending (ready to execute)\n\n**EXECUTE THIS STEP NOW.**\n\n### Step: inbox-check\nCheck the Mayor's inbox for messages...\n\nWhen complete, close the step:\n bd close gt-xxx\n\nThen check for next step:\n bd ready\n```\n\nThe agent sees this, does the step, closes the step bead.\n\n## Key Insight (from bd-hulf/bd-3zm7 rejection)\n\nMolecule execution state is DERIVED from which child beads are closed vs open.\nNo separate state.yaml files needed. bd mol current already does this.\n\n\"Advancing\" a molecule = closing the current step bead. Next step is\nwhichever child is now ready (unblocked).\n\n## Remaining Work\n\ngt-qvn7.2.3: Enhance gt prime to show molecule step prompt using bd mol current.\n\n## Files Changed\n\n- internal/cmd/prime.go - Hook check and action injection\n- Uses bd mol current for step discovery (already exists in beads)\n\n## Acceptance Criteria\n\n- gt prime shows current hook and prompts action\n- Agent closes step with bd close \u003cstep-id\u003e\n- bd ready / bd mol current shows next step\n- Agent naturally follows the execution flow","status":"open","priority":0,"issue_type":"epic","created_at":"2025-12-24T15:34:32.037329-08:00","updated_at":"2025-12-24T22:32:07.04809-08:00","dependencies":[{"issue_id":"gt-qvn7.2","depends_on_id":"gt-qvn7","type":"parent-child","created_at":"2025-12-24T15:34:32.039415-08:00","created_by":"daemon"},{"issue_id":"gt-qvn7.2","depends_on_id":"gt-qvn7.1","type":"blocks","created_at":"2025-12-24T15:36:00.393831-08:00","created_by":"daemon"}]} +{"id":"gt-qvn7.2","title":"Phase 2: Hook Execution Protocol","description":"# Phase 2: Hook Execution Protocol\n\nMaking agents actually RUN what's on their hook.\n\n## The Problem\n\nCurrently, agents wake up, get primed, and... wait. They don't automatically\nexecute their pinned molecule or slung work. The propulsion is missing.\n\n## The Solution\n\ngt prime should end with an ACTION, not just context loading:\n\n```\ngt prime output:\n 1. Load context (existing)\n 2. Check hook\n 3. If hook has work → tell agent to RUN IT NOW\n```\n\n## Hook Types\n\n| Hook Content | Action |\n|--------------|--------|\n| Pinned molecule (mol-*) | Execute current step, close step when done |\n| Slung bead (gt-xxx) | Show bead, begin work |\n| Nothing | Wait for assignment |\n\n## Molecule Execution Pattern\n\nWhen hook has a molecule:\n\n```markdown\n## Your Hook: mol-deacon-patrol\n\nCurrent step: inbox-check (gt-xxx)\nStatus: pending (ready to execute)\n\n**EXECUTE THIS STEP NOW.**\n\n### Step: inbox-check\nCheck the Mayor's inbox for messages...\n\nWhen complete, close the step:\n bd close gt-xxx\n\nThen check for next step:\n bd ready\n```\n\nThe agent sees this, does the step, closes the step bead.\n\n## Key Insight (from bd-hulf/bd-3zm7 rejection)\n\nMolecule execution state is DERIVED from which child beads are closed vs open.\nNo separate state.yaml files needed. bd mol current already does this.\n\n\"Advancing\" a molecule = closing the current step bead. Next step is\nwhichever child is now ready (unblocked).\n\n## Remaining Work\n\ngt-qvn7.2.3: Enhance gt prime to show molecule step prompt using bd mol current.\n\n## Files Changed\n\n- internal/cmd/prime.go - Hook check and action injection\n- Uses bd mol current for step discovery (already exists in beads)\n\n## Acceptance Criteria\n\n- gt prime shows current hook and prompts action\n- Agent closes step with bd close \u003cstep-id\u003e\n- bd ready / bd mol current shows next step\n- Agent naturally follows the execution flow","status":"closed","priority":0,"issue_type":"epic","created_at":"2025-12-24T15:34:32.037329-08:00","updated_at":"2025-12-24T22:39:10.962963-08:00","closed_at":"2025-12-24T22:39:10.962963-08:00","close_reason":"All children complete. Phase 2 Hook Execution Protocol implemented: gt prime now shows molecule execution prompts with current step details.","dependencies":[{"issue_id":"gt-qvn7.2","depends_on_id":"gt-qvn7","type":"parent-child","created_at":"2025-12-24T15:34:32.039415-08:00","created_by":"daemon"},{"issue_id":"gt-qvn7.2","depends_on_id":"gt-qvn7.1","type":"blocks","created_at":"2025-12-24T15:36:00.393831-08:00","created_by":"daemon"}]} {"id":"gt-qvn7.2.1","title":"bd mol advance command","description":"## Cross-Repo Reference\n\nThis work is tracked in beads repo as **bd-3zm7**.\n\nThe gastown task gt-qvn7.2.1 is a placeholder. \nActual implementation happens in beads.\n\nSee: bd show bd-3zm7 (from beads/crew/dave)","status":"closed","priority":0,"issue_type":"task","created_at":"2025-12-24T15:37:10.413975-08:00","updated_at":"2025-12-24T22:30:52.50792-08:00","closed_at":"2025-12-24T22:30:52.50792-08:00","close_reason":"N/A: Beads counterparts (bd-3zm7, bd-hulf) were rejected. Molecule state is derived from child beads, not separate files. Use bd close \u003cstep-id\u003e instead of bd mol advance.","dependencies":[{"issue_id":"gt-qvn7.2.1","depends_on_id":"gt-qvn7.2","type":"parent-child","created_at":"2025-12-24T15:37:10.416191-08:00","created_by":"daemon"},{"issue_id":"gt-qvn7.2.1","depends_on_id":"gt-qvn7.2.2","type":"blocks","created_at":"2025-12-24T15:37:39.740685-08:00","created_by":"daemon"}]} {"id":"gt-qvn7.2.2","title":"Molecule state file management","description":"## Cross-Repo Reference\n\nThis work is tracked in beads repo as **bd-hulf**.\n\nThe gastown task gt-qvn7.2.2 is a placeholder.\nActual implementation happens in beads.\n\nSee: bd show bd-hulf (from beads/crew/dave)","status":"closed","priority":0,"issue_type":"task","created_at":"2025-12-24T15:37:21.389134-08:00","updated_at":"2025-12-24T22:30:52.526075-08:00","closed_at":"2025-12-24T22:30:52.526075-08:00","close_reason":"N/A: Beads counterparts (bd-3zm7, bd-hulf) were rejected. Molecule state is derived from child beads, not separate files. Use bd close \u003cstep-id\u003e instead of bd mol advance.","dependencies":[{"issue_id":"gt-qvn7.2.2","depends_on_id":"gt-qvn7.2","type":"parent-child","created_at":"2025-12-24T15:37:21.39098-08:00","created_by":"daemon"}]} {"id":"gt-qvn7.2.3","title":"gt prime molecule execution prompt","description":"Enhance gt prime to show molecule execution prompts.\n\n## When Hook Has Molecule\n\ngt prime should output:\n\n```markdown\n## Your Patrol: mol-deacon-patrol\n\n**Current Step:** inbox-check\n**Status:** pending (ready to execute)\n\n### Step: inbox-check\n\nHandle callbacks from agents.\n\nCheck the Mayor inbox for messages from:\n- Witnesses reporting polecat status\n- Refineries reporting merge results\n...\n\n**EXECUTE THIS STEP NOW.**\n\nWhen complete, close the step:\n bd close \u003cstep-id\u003e\n\nThen check for next step:\n bd ready\n```\n\n## Logic\n\n1. Check if hook has pinned molecule (via handoff bead with attachment)\n2. Use bd mol current to find current step (derives from open children)\n3. Get step details from the bead itself\n4. Format execution prompt\n5. Include close command (NOT bd mol advance - that was rejected)\n\n## Key Insight (from bd-hulf rejection)\n\nMolecule execution state is DERIVED from which child beads are closed vs open.\nNo separate state.yaml files. bd mol current already does this correctly.\n\n\"Advancing\" a molecule = closing the current step bead. The next step\nis whichever child is now ready (unblocked).\n\n## Different from Slung Work\n\nSlung work (bead) says \"work on this issue\"\nMolecule says \"execute this step of this workflow\"\n\nBoth use the hook, but prompts differ.\n\n## Files\n\n- internal/cmd/prime.go\n- Uses bd mol current for step discovery","status":"closed","priority":0,"issue_type":"task","created_at":"2025-12-24T15:37:33.304687-08:00","updated_at":"2025-12-24T22:38:38.344642-08:00","closed_at":"2025-12-24T22:38:38.344642-08:00","close_reason":"Implemented in commit 91ebc8f. gt prime now shows molecule execution prompt with current step details from bd mol current.","dependencies":[{"issue_id":"gt-qvn7.2.3","depends_on_id":"gt-qvn7.2","type":"parent-child","created_at":"2025-12-24T15:37:33.306622-08:00","created_by":"daemon"},{"issue_id":"gt-qvn7.2.3","depends_on_id":"gt-qvn7.2.2","type":"blocks","created_at":"2025-12-24T15:37:39.825493-08:00","created_by":"daemon"}]} @@ -1113,6 +1114,7 @@ {"id":"gt-yd98","title":"Molecule format bridge: convert embedded markdown to child issues","description":"## Problem\n\nTwo molecule formats exist:\n1. **Old (gastown builtin)**: Steps embedded as markdown in Description field, parsed by ParseMoleculeSteps()\n2. **New (bd mol)**: Steps as child issues in proper beads DAG\n\nThe daemon's InstantiateMolecule() uses the old format. bd mol spawn uses the new format.\n\n## Options\n\n### Option A: Require child issues (new format)\n- Update daemon to use bd mol spawn instead of InstantiateMolecule\n- Deprecate embedded markdown format\n- Pro: One format, simpler\n- Con: Breaking change for existing molecules\n\n### Option B: Build a bridge\n- In InstantiateMolecule, detect format:\n - If Description has ## Step: markers → parse to child issues\n - If issue has children with template label → use directly\n- Convert old format to new format on instantiation\n- Pro: Backward compatible\n- Con: More complexity\n\n## Recommendation\n\nOption B - build the bridge. On instantiation, convert markdown steps to child issues. This unifies execution while preserving authoring flexibility.","status":"closed","priority":1,"issue_type":"task","assignee":"gastown/valkyrie","created_at":"2025-12-21T17:55:15.751168-08:00","updated_at":"2025-12-23T01:16:16.766608-08:00","closed_at":"2025-12-23T01:16:16.766608-08:00","close_reason":"Merged to main"} {"id":"gt-ye8l","title":"Merge: gt-3x1","description":"branch: polecat/Slit\ntarget: main\nsource_issue: gt-3x1\nrig: gastown","status":"closed","priority":1,"issue_type":"merge-request","created_at":"2025-12-19T14:53:52.344849-08:00","updated_at":"2025-12-20T23:17:25.78961-08:00","closed_at":"2025-12-20T23:17:25.78961-08:00","close_reason":"Branches nuked, MRs obsolete"} {"id":"gt-yewf","title":"Role prompts have mismatched startup protocols","description":"Different role prompts describe different startup protocols:\n\n- deacon.md: Check gt mol status, spawn if none: bd mol spawn\n- refinery.md: Check bd list --status=in_progress, bond if none: gt mol bond\n- polecat.md: Check bd mol current\n\nThese should use consistent terminology and commands.\nThe propulsion principle should be applied uniformly.","status":"open","priority":2,"issue_type":"bug","created_at":"2025-12-24T12:51:22.22295-08:00","updated_at":"2025-12-24T12:51:22.22295-08:00","dependencies":[{"issue_id":"gt-yewf","depends_on_id":"gt-jo9n","type":"blocks","created_at":"2025-12-24T12:52:07.728283-08:00","created_by":"daemon"}]} +{"id":"gt-yk4r","title":"Digest: mol-deacon-patrol","description":"Patrol 19: Routine","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T22:38:50.175501-08:00","updated_at":"2025-12-24T22:38:50.175501-08:00","closed_at":"2025-12-24T22:38:50.175458-08:00","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-yk4r","depends_on_id":"gt-uo34","type":"parent-child","created_at":"2025-12-24T22:38:50.176155-08:00","created_by":"stevey"}]} {"id":"gt-yls","title":"Document merge queue architecture","description":"Update docs/architecture.md with:\n\n- Merge Queue section explaining Beads-native approach\n- Engineer role (renamed from Refinery)\n- Session restart protocol\n- gt mq command reference\n- Federation considerations for queue\n\nAlso update any references to .gastown/ → config/.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-16T23:02:41.533065-08:00","updated_at":"2025-12-17T13:43:41.657433-08:00","closed_at":"2025-12-17T13:43:41.657433-08:00","dependencies":[{"issue_id":"gt-yls","depends_on_id":"gt-h5n","type":"blocks","created_at":"2025-12-16T23:02:56.043373-08:00","created_by":"daemon"}]} {"id":"gt-ynp6","title":"gt context --usage: estimate remaining context via tmux line count","description":"## Summary\n\nImplement `gt context --usage` to estimate remaining context capacity.\n\n## Approach\n\nUse tmux scrollback buffer line count as proxy for token usage:\n- `tmux capture-pane -p | wc -l` gives current line count\n- Heuristics (tunable per model):\n - Opus 4.5: ~1800 lines = warning threshold\n - ~2000+ lines = critical, need handoff\n\n## Output Format\n```\nContext Usage: 1642 lines (~82%)\nStatus: WARNING - consider handoff soon\n```\n\n## Notes\n- Heuristics are model-specific, need config\n- Line count is proxy, not exact token count\n- Good enough for autonomous patrol decisions","status":"open","priority":2,"issue_type":"feature","created_at":"2025-12-23T01:19:13.108332-08:00","updated_at":"2025-12-23T01:19:13.108332-08:00"} {"id":"gt-yt6g","title":"Standardize session end: gt handoff for all roles","description":"## Summary\n\nStandardize session ending across all agent roles to use `gt handoff` as the canonical command. This is critical for the beads propulsion cycle - turning agent sessions from pets into cattle.\n\n## Current State (Inconsistent)\n\n| Role | Current Guidance | Command |\n|------|-----------------|---------|\n| Mayor | Manual mail send | `gt mail send mayor/ -s 'HANDOFF:...' -m '...'` |\n| Crew | Manual mail send | `gt mail send \u003crig\u003e/crew/\u003cname\u003e -s 'HANDOFF:...' -m '...'` |\n| Witness | Manual mail send | `gt mail send \u003crig\u003e/witness -s 'HANDOFF:...' -m '...'` |\n| Refinery | Manual mail send | `gt mail send \u003crig\u003e/refinery -s 'HANDOFF:...' -m '...'` |\n| Deacon | Exit on high context | (implicit) |\n| Polecat | `gt done` | `gt done [--exit TYPE]` |\n\n## Target State (Unified)\n\nAll roles use `gt handoff`:\n- `gt handoff` - Hand off current session to fresh instance\n- `gt handoff -s 'context' -m 'details'` - Hand off with custom message\n- For polecats: `gt handoff` internally calls `gt done`\n\n## Changes Required\n\n### 1. Code Changes\n- [ ] Update `gt handoff` to detect polecat role and call `gt done` internally\n- [ ] Consider adding `--exit` flag to `gt handoff` for polecat compatibility\n\n### 2. CLAUDE.md Updates (gastown)\n- [ ] ~/gt/CLAUDE.md (Mayor)\n- [ ] gastown/crew/max/CLAUDE.md\n- [ ] gastown/crew/joe/CLAUDE.md\n- [ ] gastown/witness/CLAUDE.md\n- [ ] gastown/refinery/CLAUDE.md (and rig/)\n- [ ] deacon/CLAUDE.md\n\n### 3. CLAUDE.md Updates (beads)\n- [ ] beads/mayor/rig/CLAUDE.md\n- [ ] beads/crew/dave/CLAUDE.md\n- [ ] beads/crew/zoey/CLAUDE.md\n- [ ] beads/witness/CLAUDE.md\n- [ ] beads/refinery/CLAUDE.md (and rig/)\n\n### 4. Architecture Docs\n- [ ] docs/patrol-system-design.md\n- [ ] gastown/mayor/rig/docs/prompts.md\n- [ ] gastown/mayor/rig/docs/session-management.md\n\n## New Session End Checklist (Universal)\n\n```\n# SESSION CLOSE PROTOCOL\n\n[ ] 1. git status (check uncommitted changes)\n[ ] 2. git add \u003cfiles\u003e (stage changes)\n[ ] 3. git commit -m '...' (commit with issue ID)\n[ ] 4. bd sync (sync beads)\n[ ] 5. git push (push to remote - CRITICAL)\n[ ] 6. gt handoff (hand off to fresh session)\n OR gt handoff -s 'Context' -m 'Details for next session'\n```\n\n## Why This Matters\n\nThe handoff mechanism is what turns agent sessions from **pets** (precious, long-lived) into **cattle** (disposable, replaceable). At any time, any agent can:\n1. Send itself a detailed handoff mail (or sling itself a mol)\n2. System shuts them down and restarts them\n3. Fresh session runs priming and reads mail\n4. Work continues seamlessly\n\nThis enables:\n- Unlimited context through automatic cycling\n- Clean recovery from any state\n- Consistent behavior across all roles\n- Simplified agent instructions","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-23T12:57:25.246279-08:00","updated_at":"2025-12-23T13:05:12.92201-08:00","closed_at":"2025-12-23T13:05:12.92201-08:00","close_reason":"Standardized session end guidance across all roles to use gt handoff as canonical method"}