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>
227 lines
7.5 KiB
Markdown
227 lines
7.5 KiB
Markdown
# 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.
|
|
|
|
```bash
|
|
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
|
|
|
|
```bash
|
|
# 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:
|
|
|
|
```markdown
|
|
## 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)
|
|
|
|
```bash
|
|
# 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
|