Files
gastown/docs/sling-design.md
Steve Yegge 5732218da3 Clean up redundant 'ephemeral' terminology in wisp docs (gt-3x0z.11)
Remove redundant phrases like 'ephemeral wisp' and 'ephemeral molecule'
since wisp already implies ephemeral. Keep 'ephemeral' only where it is
definitional (explaining what wisps are) or contrasting (vs durable mol).

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-22 21:43:27 -08:00

7.5 KiB

The Sling: Gas Town's Universal Work Dispatch

Status: Design Draft Issue: gt-z3qf

The Propulsion Principle

Gas Town runs on one rule:

If you find something on your hook, YOU RUN IT.

No decisions. No "should I?" Just ignition. This is the Universal Gas Town Propulsion Principle. Every agent - polecat, deacon, witness, refinery - follows this single rule.

Hook has work → Work happens.

That's the whole engine. Everything else is plumbing.

The Sling Operation

gt sling is the unified command for putting work on an agent's hook.

gt sling <thing> <target> [options]

Where:

  • <thing> - What to sling (molecule, bead, epic)
  • <target> - Who to sling it at (agent address)
  • [options] - How to sling it (--wisp, --priority, etc.)

Examples

# Sling a molecule at a polecat
gt sling feature polecat/alpha

# Sling a specific issue with a molecule
gt sling gt-xyz polecat/alpha --molecule bugfix

# Sling a wisp at the deacon (ephemeral, won't accumulate)
gt sling patrol deacon/ --wisp

# Sling an epic at refinery for batch processing
gt sling gt-epic-123 refinery/

What Can Be Slung?

Thing Prefix Example Notes
Molecule proto none gt sling feature polecat/alpha Spawns from proto
Issue/Bead gt-*, bd-* gt sling gt-xyz polecat/alpha Work item
Epic gt-* (type=epic) gt sling gt-epic refinery/ Batch of issues
Wisp --wisp flag gt sling patrol deacon/ --wisp Wisp (no audit trail)

What Happens When You Sling?

┌─────────────────────────────────────────────────────────┐
│                    gt sling lifecycle                    │
├─────────────────────────────────────────────────────────┤
│                                                          │
│  1. SPAWN (if proto)     2. ASSIGN           3. PIN     │
│     proto → molecule        mol → agent         → hook  │
│                                                          │
│  ┌─────────┐            ┌─────────┐        ┌─────────┐  │
│  │  Proto  │ ────────►  │Molecule │ ─────► │  Hook   │  │
│  │(catalog)│   spawn    │(instance)│ assign │(pinned) │  │
│  └─────────┘            └─────────┘        └─────────┘  │
│                                                  │       │
│                                            agent wakes   │
│                                                  │       │
│                                                  ▼       │
│                                            ┌─────────┐  │
│                                            │ IGNITION│  │
│                                            └─────────┘  │
└─────────────────────────────────────────────────────────┘

The Agent's View

From the agent's perspective, life is simple:

## Your One Rule

1. Check your hook: `gt mol status`
2. Found something? **Run it.** No thinking required.
3. Nothing? Check mail for new slings.
4. Repeat.

The agent never decides whether to run. The molecule tells them what to do. They execute until complete, then check the hook again.

Agent Startup (New Model)

# Old way (too much thinking)
gt mail inbox
if has_molecule; then
    gt molecule instantiate ...
    # figure out what to do...
fi

# New way (propulsion)
gt mol status          # What's on my hook?
# Output tells you exactly what to do
# Just follow the molecule phases

Command Reference

gt sling

gt sling <thing> <target> [flags]

Arguments:
  thing     Proto name, issue ID, or epic ID
  target    Agent address (polecat/name, deacon/, witness/, refinery/)

Flags:
  --wisp           Create wisp (burned on complete, squashed to digest)
  --molecule, -m   Specify molecule proto when slinging an issue
  --priority, -p   Override priority (P0-P4)
  --force          Re-sling even if hook already has work

Examples:
  gt sling feature polecat/alpha              # Spawn feature mol, sling to alpha
  gt sling gt-xyz polecat/beta -m bugfix      # Sling issue with bugfix workflow
  gt sling patrol deacon/ --wisp              # Patrol wisp
  gt sling gt-epic-batch refinery/            # Batch work to refinery

gt mol status

gt mol status [target]

Shows what's on an agent's hook (or your own if no target).

Output:
  Slung: feature (gt-abc123)
  Phase: 2/4 - Implement
  Progress: ████████░░░░ 67%
  Wisp: no

  Next: Complete implementation, then run tests

gt mol catalog

gt mol catalog

Lists available molecule protos that can be slung.

Output:
  NAME        PHASES  DESCRIPTION
  feature     4       Feature development workflow
  bugfix      3       Bug investigation and fix
  patrol      2       Operational check cycle (wisp-only)
  review      2       Code review workflow

Relationship to bd mol

Command gt mol bd mol Notes
Create molecule via gt sling bd mol spawn gt adds assignment
List protos gt mol catalog bd mol catalog Same data
Show molecule gt mol status bd mol show gt adds agent context
Combine - bd mol bond Data operation only
Destroy gt mol burn bd mol burn gt may need cleanup
Condense wisps gt mol squash bd mol squash Same operation

Design principle: bd mol is pure data operations. gt sling and gt mol add agent context (assignment, hooks, sessions).

Migration Path

Old Commands → New

Old New Notes
gt molecule instantiate gt sling With assignment
gt molecule attach gt sling --force Re-sling to hook
gt molecule detach gt mol burn Or auto on complete
gt molecule progress gt mol status Better name
gt molecule list gt mol catalog Protos only
gt spawn --molecule gt sling Unified

Template Updates Required

  1. deacon.md.tmpl - Use gt mol status, remove decision logic
  2. polecat.md.tmpl - Propulsion principle, check hook on wake
  3. witness.md.tmpl - Sling wisps to agents it spawns
  4. refinery.md.tmpl - Accept slung epics

Open Design Questions

  1. Default molecule: If you gt sling gt-xyz polecat/alpha without -m, should we infer from issue type? (bug→bugfix, feature→feature)

  2. Hook collision: If hook already has work and you sling more, error or queue? Current thinking: error unless --force (which replaces).

  3. Self-sling: Can an agent sling to itself? (gt sling patrol .) Probably yes for wisp loops.

  4. Sling notification: Should sling send mail to target, or is hook presence enough? Probably just hook - mail is for human-readable context.

Implementation Plan

See beads:

  • gt-z3qf: Parent issue (gt mol overhaul)
  • [TBD]: gt sling command implementation
  • [TBD]: gt mol status command
  • [TBD]: Template updates for propulsion principle
  • [TBD]: Documentation updates