Polecats share the same beads database at the rig level. The refinery and witness manage syncing beads. Running bd sync on polecat startup causes contention when multiple polecats spawn simultaneously and creates potential race conditions. This change removes bd sync --from-main from: - prompts/roles/polecat.md On Startup section - internal/beads/molecules_session.go orient step - internal/beads/molecules_work.go orient step - docs/polecat-wisp-architecture.md load context section Troubleshooting sections that recommend bd sync --from-main for recovery scenarios are preserved. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
13 KiB
Polecat Wisp Architecture: Proto → Wisp → Mol
Issue: gt-9g82
Executive Summary
This document proposes a three-layer architecture for agent work: Proto → Wisp → Mol. The key insight is that agents should run session wisps that wrap their assigned work. This creates a unified "engineer in a box" pattern that handles onboarding, execution, and cleanup within a single ephemeral container.
1. The Three-Layer Model
┌─────────────────────────────────────────────────────────────────────┐
│ PROTO LAYER │
│ ┌───────────────────────────────────────────────────────────────┐ │
│ │ polecat.md / crew.md (Template/Instructions) │ │
│ │ - Role identity and context │ │
│ │ - How to be this type of agent │ │
│ │ - Workflow patterns │ │
│ └───────────────────────────────────────────────────────────────┘ │
│ │
│ ┌───────────────────────────────────────────────────────────────┐ │
│ │ mol-polecat-session / mol-crew-session │ │
│ │ - Onboarding step │ │
│ │ - Execute work step │ │
│ │ - Cleanup/handoff step │ │
│ └───────────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────────┘
│
│ instantiate
▼
┌─────────────────────────────────────────────────────────────────────┐
│ WISP LAYER │
│ ┌───────────────────────────────────────────────────────────────┐ │
│ │ wisp-<agent-name>-<timestamp> │ │
│ │ Storage: .beads-wisp/ (ephemeral, gitignored) │ │
│ │ │ │
│ │ Steps: │ │
│ │ 1. orient - Load context, read role template │ │
│ │ 2. handoff - Check for predecessor handoff │ │
│ │ 3. execute - Run the attached work molecule │ │
│ │ 4. cleanup - Sync, handoff to successor, exit │ │
│ └───────────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────────┘
│
│ attachment
▼
┌─────────────────────────────────────────────────────────────────────┐
│ MOL LAYER │
│ ┌───────────────────────────────────────────────────────────────┐ │
│ │ The Actual Work (Permanent, Auditable) │ │
│ │ Storage: .beads/ (git-tracked) │ │
│ │ │ │
│ │ Could be: │ │
│ │ - mol-engineer-in-box (full workflow) │ │
│ │ - mol-quick-fix (fast path) │ │
│ │ - Any custom work molecule │ │
│ │ - Direct issue (no molecule, just task) │ │
│ │ - Long-lived epic spanning many sessions │ │
│ └───────────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────────┘
2. Agent Types and Their Wisps
2.1 Comparison: Patrol vs Work Agents
| Aspect | Patrol Wisp (Deacon/Refinery) | Work Wisp (Polecat/Crew) |
|---|---|---|
| Lifecycle | Looping - spawn, execute, burn, repeat | One-shot per session |
| Inner Work | Patrol steps (fixed, no attach) | Attached work mol (variable) |
| Persistence | Burns between cycles | Burns on session end |
| Session | Persists across wisps | Polecat: terminates; Crew: cycles |
| Audit Trail | Digests only (summaries) | Work mol is permanent |
2.2 Polecat Wisp (Ephemeral Worker)
Polecats are transient workers that:
- Get spawned for specific work
- Self-destruct on completion
- Have no persistent identity
Polecat Session Flow:
─────────────────────
spawn → orient → handoff(read) → execute → cleanup → TERMINATE
│
└──▶ [attached work mol]
2.3 Crew Worker Wisp (Persistent Worker)
Crew workers are long-lived agents that:
- Maintain persistent identity across sessions
- Work on long-lived molecules (epics spanning days/weeks)
- Hand off to successor sessions (themselves)
- Can work autonomously overnight if attached mol exists
Crew Worker Session Flow:
─────────────────────────
start → orient → handoff(read) → check attachment
│
┌──────────────┴──────────────┐
│ │
ATTACHED NO ATTACHMENT
│ │
▼ ▼
┌───────────────┐ ┌───────────────┐
│ AUTO-CONTINUE │ │ AWAIT INPUT │
│ (no prompt) │ │ (human directs)│
└───────┬───────┘ └───────────────┘
│
▼
execute mol
│
▼
cleanup → handoff(write) → END SESSION
│
▼
(successor picks up)
Key insight: If there's an attached mol, crew workers continue working without awaiting input. This enables autonomous overnight work on long molecules.
3. The Onboard-Execute-Cleanup Pattern
3.1 mol-polecat-session
## Step: orient
Read polecat.md protocol. Understand:
- Your identity (rig/polecat-name)
- The beads system
- Exit strategies
- Handoff protocols
Load context:
- gt prime
- gt mail inbox
## Step: handoff-read
Check for predecessor handoff mail.
If found, load context from previous session.
## Step: execute
Find attached work:
- gt mol status (shows what's on hook)
- bd show <work-mol-id>
Run the attached work molecule to completion.
Continue until reaching exit-decision step.
## Step: cleanup
1. Sync state: bd sync, git push
2. Close or defer work mol based on exit type
3. Burn this session wisp
4. Request shutdown from Witness
3.2 mol-crew-session (Light Harness)
## Step: orient
Read crew.md protocol. Load context:
- gt prime
- Identify self (crew member name, rig)
## Step: handoff-read
Check inbox for 🤝 HANDOFF messages:
- gt mail inbox
- If found: read and load predecessor context
## Step: check-attachment
Look for pinned work:
- bd list --pinned --assignee=<self> --status=in_progress
- gt mol status
If attachment found:
→ Proceed to execute (no human input needed)
If no attachment:
→ Await user instruction
## Step: execute
Work the attached molecule:
- bd ready --parent=<work-mol-root>
- Continue from last completed step
- Work until context full or natural stopping point
## Step: cleanup
Before session ends:
1. git status / git push
2. bd sync
3. Write handoff mail to self:
gt mail send <self-addr> -s "🤝 HANDOFF: <context>" -m "<details>"
4. Session ends (successor will pick up)
4. Autonomous Overnight Work
4.1 The Vision
With session wisps, crew workers can work autonomously:
Night 1, Session 1:
Human: "Work on gt-abc (big feature epic)"
Crew: Attaches gt-abc, works 2 hours, context full
Crew: Writes handoff, ends session
Night 1, Session 2 (auto-spawned):
Crew: Reads handoff, finds attached gt-abc
Crew: AUTO-CONTINUES (no human needed)
Crew: Works 2 more hours, context full
Crew: Writes handoff, ends session
... repeat through the night ...
Morning:
Human: Checks progress on gt-abc
Crew: "Completed 15 of 23 subtasks overnight"
4.2 Requirements for Autonomous Work
- Attached mol - Work must be pinned/attached
- Clear exit conditions - Mol defines when to stop
- Session cycling - Auto-spawn successor sessions
- Handoff protocol - Each session writes handoff for next
4.3 Safety Rails
- Work mol defines scope (can't go off-rails)
- Each session is bounded (context limit)
- Handoffs create audit trail
- Human can intervene at any session boundary
5. Data Structures
5.1 Session Wisp
{
"id": "wisp-max-2024-12-22T15:00:00Z",
"type": "wisp",
"title": "Crew Session: max",
"status": "in_progress",
"current_step": "execute",
"agent_type": "crew",
"agent_name": "max",
"attached_mol": "gt-abc123",
"attached_at": "2024-12-22T15:01:00Z"
}
5.2 Attachment Mechanism
# Attach a work mol to current session wisp
bd mol attach <mol-id>
# Check current attachment
gt mol status
# Detach (human override)
bd mol detach
6. Implementation Phases
Phase 1: Core Infrastructure (P0)
- Add
mol-crew-sessionto builtin_molecules.go - Add
mol-polecat-sessionto builtin_molecules.go - Add wisp attachment mechanism to beads
- Update spawn.go for polecat session wisps
Phase 2: Crew Worker Integration (P0)
- Update crew startup hook to instantiate session wisp
- Implement auto-continue logic (if attached → work)
- Update crew.md template for session wisp model
Phase 3: Session Cycling (P1)
- Add session successor spawning
- Implement context-full detection
- Auto-handoff on session end
Phase 4: Monitoring & Safety (P1)
- Witness monitors session wisps
- Add emergency stop mechanism
- Progress reporting between sessions
7. Open Questions
- Session cycling trigger: Context percentage? Time limit? Both?
- Emergency stop: How does human halt autonomous work?
- Progress visibility: Dashboard for overnight work progress?
- Mol attachment UI: How does human attach/detach work?
8. Summary
The session wisp architecture enables:
- Separation of concerns: How to work (proto) vs What to work on (mol)
- Session continuity: Handoffs preserve context across sessions
- Autonomous work: Crew workers can work overnight on attached mols
- Unified pattern: Same model for polecats and crew workers
- Audit trail: Work mol is permanent, session wisps are ephemeral
The key unlock is: if there's attached work, continue without prompting. This transforms crew workers from interactive assistants to autonomous workers.