Update all prompts to use gt hook instead of gt mol status
- Role templates (crew, polecat, mayor, deacon, witness, refinery) - prime.go startup protocol messages - Documentation (propulsion, reference, molecules, wisp architecture) - Session hints and sling prompts - Formula template instructions - CLAUDE.md The hook is the user-facing concept, molecules are implementation details. Agents should use `gt hook` to check what work is assigned to them. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
committed by
Steve Yegge
parent
23ee6efd41
commit
b4a7b930e5
@@ -46,7 +46,7 @@ Load the convoy bead and verify it's ready for archival.
|
||||
|
||||
**1. Check your assignment:**
|
||||
```bash
|
||||
gt mol status # Shows hook_bead = convoy ID
|
||||
gt hook # Shows hook_bead = convoy ID
|
||||
bd show {{convoy}} # Full convoy details
|
||||
```
|
||||
|
||||
|
||||
@@ -44,7 +44,7 @@ Load the closed issue and identify cross-rig dependents.
|
||||
|
||||
**1. Check your assignment:**
|
||||
```bash
|
||||
gt mol status # Shows hook_bead = resolved issue ID
|
||||
gt hook # Shows hook_bead = resolved issue ID
|
||||
bd show {{resolved_issue}} # Full issue details
|
||||
```
|
||||
|
||||
|
||||
@@ -47,7 +47,7 @@ Establish the time range for this digest.
|
||||
|
||||
**1. Check assignment:**
|
||||
```bash
|
||||
gt mol status # Shows period type
|
||||
gt hook # Shows period type
|
||||
```
|
||||
|
||||
**2. Calculate time range:**
|
||||
|
||||
@@ -48,7 +48,7 @@ Establish what to scan for orphans.
|
||||
|
||||
**1. Check assignment:**
|
||||
```bash
|
||||
gt mol status # Shows scope in hook_bead
|
||||
gt hook # Shows scope in hook_bead
|
||||
```
|
||||
|
||||
**2. Resolve scope:**
|
||||
|
||||
@@ -49,7 +49,7 @@ bd prime # Load beads context
|
||||
|
||||
**2. Check your hook:**
|
||||
```bash
|
||||
gt mol status # Shows your pinned molecule and hook_bead
|
||||
gt hook # Shows your pinned molecule and hook_bead
|
||||
```
|
||||
|
||||
The hook_bead is your assigned issue. Read it carefully:
|
||||
|
||||
@@ -47,7 +47,7 @@ Establish GC aggressiveness level.
|
||||
|
||||
**1. Check assignment:**
|
||||
```bash
|
||||
gt mol status # Shows mode in hook_bead
|
||||
gt hook # Shows mode in hook_bead
|
||||
```
|
||||
|
||||
**2. Mode definitions:**
|
||||
|
||||
@@ -117,7 +117,7 @@ bd mol current # Where am I in the current molecule?
|
||||
|
||||
```bash
|
||||
# Hook management
|
||||
gt mol status # What's on MY hook
|
||||
gt hook # What's on MY hook
|
||||
gt mol current # What should I work on next
|
||||
gt mol progress <id> # Execution progress of molecule
|
||||
gt mol attach <bead> <mol> # Pin molecule to bead
|
||||
|
||||
@@ -23,7 +23,7 @@ Patrol agents (Witness, Refinery, Deacon) use **wisps** to prevent accumulation.
|
||||
|
||||
```bash
|
||||
# 1. Check current status
|
||||
gt mol status
|
||||
gt hook
|
||||
|
||||
# 2. Find next step
|
||||
bd ready --parent=gt-abc
|
||||
@@ -122,7 +122,7 @@ bd mol burn gt-abc
|
||||
### Checking Your Hook
|
||||
|
||||
```bash
|
||||
gt mol status
|
||||
gt hook
|
||||
```
|
||||
|
||||
Shows what molecule is pinned to your current agent and the associated bead.
|
||||
@@ -150,7 +150,7 @@ gt done
|
||||
|
||||
```
|
||||
1. Spawn with work on hook
|
||||
2. gt mol status # What's hooked?
|
||||
2. gt hook # What's hooked?
|
||||
3. bd mol current # Where am I?
|
||||
4. Execute current step
|
||||
5. bd close <step> --continue
|
||||
|
||||
@@ -17,7 +17,7 @@ depends on one thing: when an agent finds work on their hook, they EXECUTE.
|
||||
When you were spawned, work was hooked for you. The system trusts that:
|
||||
|
||||
1. You will find it on your hook
|
||||
2. You will understand what it is (`bd show` / `gt mol status`)
|
||||
2. You will understand what it is (`bd show` / `gt hook`)
|
||||
3. You will BEGIN IMMEDIATELY
|
||||
|
||||
This isn't about being a good worker. This is physics. Steam engines don't
|
||||
@@ -31,7 +31,7 @@ memorize steps or wait for instructions - discover them:
|
||||
### Orientation Commands
|
||||
|
||||
```bash
|
||||
gt mol status # What's on my hook?
|
||||
gt hook # What's on my hook?
|
||||
bd mol current # Where am I in the molecule?
|
||||
bd ready # What step is next?
|
||||
bd show <step-id> # What does this step require?
|
||||
@@ -62,7 +62,7 @@ One command. Auto-advance. Momentum preserved.
|
||||
### The Propulsion Loop
|
||||
|
||||
```
|
||||
1. gt mol status # What's hooked?
|
||||
1. gt hook # What's hooked?
|
||||
2. bd mol current # Where am I?
|
||||
3. Execute step
|
||||
4. bd close <step> --continue # Close and advance
|
||||
@@ -82,7 +82,7 @@ Polecat restarts with work on hook
|
||||
|
||||
## Startup Behavior
|
||||
|
||||
1. Check hook (`gt mol status`)
|
||||
1. Check hook (`gt hook`)
|
||||
2. Work hooked → EXECUTE immediately
|
||||
3. Hook empty → Check mail for attached work
|
||||
4. Nothing anywhere → ERROR: escalate to Witness
|
||||
|
||||
@@ -145,7 +145,7 @@ bd mol burn <id> # Discard wisp (explicit ID)
|
||||
|
||||
```bash
|
||||
# Hook management (operates on current agent's hook)
|
||||
gt mol status # What's on MY hook
|
||||
gt hook # What's on MY hook
|
||||
gt mol current # What should I work on next
|
||||
gt mol progress <id> # Execution progress of molecule
|
||||
gt mol attach <bead> <mol> # Pin molecule to bead
|
||||
|
||||
@@ -194,7 +194,7 @@ func runHook(cmd *cobra.Command, args []string) error {
|
||||
|
||||
fmt.Printf("%s Work attached to hook (pinned bead)\n", style.Bold.Render("✓"))
|
||||
fmt.Printf(" Use 'gt handoff' to restart with this work\n")
|
||||
fmt.Printf(" Use 'gt mol status' to see hook status\n")
|
||||
fmt.Printf(" Use 'gt hook' to see hook status\n")
|
||||
|
||||
// Log hook event to activity feed
|
||||
_ = events.LogFeed(events.TypeHook, agentID, events.HookPayload(beadID))
|
||||
|
||||
@@ -123,7 +123,7 @@ func runMoleculeAttachFromMail(cmd *cobra.Command, args []string) error {
|
||||
if attachment != nil && attachment.AttachedAt != "" {
|
||||
fmt.Printf(" Attached at: %s\n", attachment.AttachedAt)
|
||||
}
|
||||
fmt.Printf("\n%s Run 'gt mol status' to see progress\n", style.Dim.Render("Hint:"))
|
||||
fmt.Printf("\n%s Run 'gt hook' to see progress\n", style.Dim.Render("Hint:"))
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -465,7 +465,7 @@ func outputStartupDirective(ctx RoleContext) {
|
||||
fmt.Println("**STARTUP PROTOCOL**: You are the Mayor. Please:")
|
||||
fmt.Println("1. Announce: \"Mayor, checking in.\"")
|
||||
fmt.Println("2. Check mail: `gt mail inbox` - look for 🤝 HANDOFF messages")
|
||||
fmt.Println("3. Check for attached work: `gt mol status`")
|
||||
fmt.Println("3. Check for attached work: `gt hook`")
|
||||
fmt.Println(" - If mol attached → **RUN IT** (no human input needed)")
|
||||
fmt.Println(" - If no mol → await user instruction")
|
||||
case RoleWitness:
|
||||
@@ -475,7 +475,7 @@ func outputStartupDirective(ctx RoleContext) {
|
||||
fmt.Println("**STARTUP PROTOCOL**: You are the Witness. Please:")
|
||||
fmt.Println("1. Announce: \"Witness, checking in.\"")
|
||||
fmt.Println("2. Check mail: `gt mail inbox` - look for 🤝 HANDOFF messages")
|
||||
fmt.Println("3. Check for attached patrol: `gt mol status`")
|
||||
fmt.Println("3. Check for attached patrol: `gt hook`")
|
||||
fmt.Println(" - If mol attached → **RUN IT** (resume from current step)")
|
||||
fmt.Println(" - If no mol → create patrol: `bd mol wisp mol-witness-patrol`")
|
||||
case RolePolecat:
|
||||
@@ -486,7 +486,7 @@ func outputStartupDirective(ctx RoleContext) {
|
||||
fmt.Printf("1. Announce: \"%s Polecat %s, checking in.\"\n", ctx.Rig, ctx.Polecat)
|
||||
fmt.Println("2. Check mail: `gt mail inbox`")
|
||||
fmt.Println("3. If there's a 🤝 HANDOFF message, read it for context")
|
||||
fmt.Println("4. Check for attached work: `gt mol status`")
|
||||
fmt.Println("4. Check for attached work: `gt hook`")
|
||||
fmt.Println(" - If mol attached → **RUN IT** (you were spawned with this work)")
|
||||
fmt.Println(" - If no mol → ERROR: polecats must have work attached; escalate to Witness")
|
||||
case RoleRefinery:
|
||||
@@ -496,7 +496,7 @@ func outputStartupDirective(ctx RoleContext) {
|
||||
fmt.Println("**STARTUP PROTOCOL**: You are the Refinery. Please:")
|
||||
fmt.Println("1. Announce: \"Refinery, checking in.\"")
|
||||
fmt.Println("2. Check mail: `gt mail inbox` - look for 🤝 HANDOFF messages")
|
||||
fmt.Println("3. Check for attached patrol: `gt mol status`")
|
||||
fmt.Println("3. Check for attached patrol: `gt hook`")
|
||||
fmt.Println(" - If mol attached → **RUN IT** (resume from current step)")
|
||||
fmt.Println(" - If no mol → create patrol: `bd mol wisp mol-refinery-patrol`")
|
||||
case RoleCrew:
|
||||
@@ -507,7 +507,7 @@ func outputStartupDirective(ctx RoleContext) {
|
||||
fmt.Printf("1. Announce: \"%s Crew %s, checking in.\"\n", ctx.Rig, ctx.Polecat)
|
||||
fmt.Println("2. Check mail: `gt mail inbox`")
|
||||
fmt.Println("3. If there's a 🤝 HANDOFF message, read it and continue the work")
|
||||
fmt.Println("4. Check for attached work: `gt mol status`")
|
||||
fmt.Println("4. Check for attached work: `gt hook`")
|
||||
fmt.Println(" - If attachment found → **RUN IT** (no human input needed)")
|
||||
fmt.Println(" - If no attachment → await user instruction")
|
||||
case RoleDeacon:
|
||||
@@ -518,7 +518,7 @@ func outputStartupDirective(ctx RoleContext) {
|
||||
fmt.Println("1. Announce: \"Deacon, checking in.\"")
|
||||
fmt.Println("2. Signal awake: `gt deacon heartbeat \"starting patrol\"`")
|
||||
fmt.Println("3. Check mail: `gt mail inbox` - look for 🤝 HANDOFF messages")
|
||||
fmt.Println("4. Check for attached patrol: `gt mol status`")
|
||||
fmt.Println("4. Check for attached patrol: `gt hook`")
|
||||
fmt.Println(" - If mol attached → **RUN IT** (resume from current step)")
|
||||
fmt.Println(" - If no mol → create patrol: `bd mol wisp mol-deacon-patrol`")
|
||||
}
|
||||
|
||||
@@ -453,7 +453,7 @@ func injectStartPrompt(pane, beadID, subject, args string) error {
|
||||
} else if subject != "" {
|
||||
prompt = fmt.Sprintf("Work slung: %s (%s). Start working on it now - no questions, just begin.", beadID, subject)
|
||||
} else {
|
||||
prompt = fmt.Sprintf("Work slung: %s. Start working on it now - run `gt mol status` to see the hook, then begin.", beadID)
|
||||
prompt = fmt.Sprintf("Work slung: %s. Start working on it now - run `gt hook` to see the hook, then begin.", beadID)
|
||||
}
|
||||
|
||||
// Use the reliable nudge pattern (same as gt nudge / tmux.NudgeSession)
|
||||
@@ -772,9 +772,9 @@ func runSlingFormula(args []string) error {
|
||||
|
||||
var prompt string
|
||||
if slingArgs != "" {
|
||||
prompt = fmt.Sprintf("Formula %s slung. Args: %s. Run `gt mol status` to see your hook, then execute using these args.", formulaName, slingArgs)
|
||||
prompt = fmt.Sprintf("Formula %s slung. Args: %s. Run `gt hook` to see your hook, then execute using these args.", formulaName, slingArgs)
|
||||
} else {
|
||||
prompt = fmt.Sprintf("Formula %s slung. Run `gt mol status` to see your hook, then execute the steps.", formulaName)
|
||||
prompt = fmt.Sprintf("Formula %s slung. Run `gt hook` to see your hook, then execute the steps.", formulaName)
|
||||
}
|
||||
t := tmux.NewTmux()
|
||||
if err := t.NudgePane(targetPane, prompt); err != nil {
|
||||
|
||||
@@ -31,7 +31,7 @@ The bead's status changes from 'pinned' back to 'open'.
|
||||
Related commands:
|
||||
gt sling <bead> # Hook + start (inverse of unsling)
|
||||
gt hook <bead> # Hook without starting
|
||||
gt mol status # See what's on your hook`,
|
||||
gt hook # See what's on your hook`,
|
||||
Args: cobra.MaximumNArgs(2),
|
||||
RunE: runUnsling,
|
||||
}
|
||||
|
||||
@@ -428,7 +428,7 @@ func (m *Manager) StopAll(force bool) error {
|
||||
}
|
||||
|
||||
// hookIssue pins an issue to a polecat's hook using bd update.
|
||||
// This makes the work visible via 'gt mol status' when the session starts.
|
||||
// This makes the work visible via 'gt hook' when the session starts.
|
||||
func (m *Manager) hookIssue(issueID, agentID, workDir string) error {
|
||||
// Use bd update to set status=hooked and assign to the polecat
|
||||
cmd := exec.Command("bd", "update", issueID, "--status=hooked", "--assignee="+agentID)
|
||||
|
||||
@@ -63,5 +63,5 @@ func SessionBeacon(address, molID string) string {
|
||||
// The agent receives this as user input, triggering the propulsion principle:
|
||||
// "If work is on your hook, YOU RUN IT."
|
||||
func PropulsionNudge() string {
|
||||
return "Run `gt mol status` to check your hook and begin work."
|
||||
return "Run `gt hook` to check your hook and begin work."
|
||||
}
|
||||
|
||||
@@ -18,7 +18,7 @@ on their hook, they EXECUTE. No confirmation. No questions. No waiting.
|
||||
**The handoff contract:**
|
||||
When someone slings work to you (or you sling to yourself), they trust that:
|
||||
1. You will find it on your hook
|
||||
2. You will understand what it is (`bd show` / `gt mol status`)
|
||||
2. You will understand what it is (`gt hook` / `bd show`)
|
||||
3. You will BEGIN IMMEDIATELY
|
||||
|
||||
This isn't about being a good worker. This is physics. Steam engines don't
|
||||
@@ -32,7 +32,7 @@ run on politeness - they run on pistons firing. You are the piston.
|
||||
- Work sits idle. Gas Town stops.
|
||||
|
||||
**Your startup behavior:**
|
||||
1. Check hook (`gt mol status`)
|
||||
1. Check hook (`gt hook`)
|
||||
2. If work is hooked → EXECUTE (no announcement beyond one line, no waiting)
|
||||
3. If hook empty → Check mail, then wait for assignment
|
||||
|
||||
@@ -190,7 +190,7 @@ Unlike polecats, you're human-managed. But the hook protocol still applies:
|
||||
|
||||
```bash
|
||||
# Step 1: Check your hook
|
||||
gt mol status # Shows hooked work (if any)
|
||||
gt hook # Shows hooked work (if any)
|
||||
|
||||
# Step 2: Work hooked? → RUN IT
|
||||
# Hook empty? → Check mail for attached work
|
||||
|
||||
@@ -33,7 +33,7 @@ flywheel - your continuous patrol keeps the whole system spinning.
|
||||
- Mayor stalls. Witnesses stall. Gas Town stops.
|
||||
|
||||
**Your startup behavior:**
|
||||
1. Check hook (`gt mol status`)
|
||||
1. Check hook (`gt hook`)
|
||||
2. If patrol wisp hooked → EXECUTE immediately
|
||||
3. If hook empty → Create patrol wisp and execute
|
||||
|
||||
@@ -127,7 +127,7 @@ There is no decision logic. Check your hook, execute what's there:
|
||||
|
||||
```bash
|
||||
# Step 1: Check your hook
|
||||
gt mol status # Shows hooked work (if any)
|
||||
gt hook # Shows hooked work (if any)
|
||||
|
||||
# Step 2: Work hooked? → RUN IT
|
||||
# Hook empty? → Check mail for attached work
|
||||
|
||||
@@ -18,7 +18,7 @@ on their hook, they EXECUTE. No confirmation. No questions. No waiting.
|
||||
**The handoff contract:**
|
||||
When you (or the human) sling work to yourself, the contract is:
|
||||
1. You will find it on your hook
|
||||
2. You will understand what it is (`bd show` / `gt mol status`)
|
||||
2. You will understand what it is (`gt hook` / `bd show`)
|
||||
3. You will BEGIN IMMEDIATELY
|
||||
|
||||
This isn't about being a good worker. This is physics. Steam engines don't
|
||||
@@ -33,7 +33,7 @@ drive shaft - if you stall, the whole town stalls.
|
||||
- Work sits idle. Witnesses wait. Polecats idle. Gas Town stops.
|
||||
|
||||
**Your startup behavior:**
|
||||
1. Check hook (`gt mol status`)
|
||||
1. Check hook (`gt hook`)
|
||||
2. If work is hooked → EXECUTE (no announcement beyond one line, no waiting)
|
||||
3. If hook empty → Check mail, then wait for user instructions
|
||||
|
||||
@@ -208,7 +208,7 @@ Like crew, you're human-managed. But the hook protocol still applies:
|
||||
|
||||
```bash
|
||||
# Step 1: Check your hook
|
||||
gt mol status # Shows hooked work (if any)
|
||||
gt hook # Shows hooked work (if any)
|
||||
|
||||
# Step 2: Work hooked? → RUN IT
|
||||
# Hook empty? → Check mail for attached work
|
||||
|
||||
@@ -18,7 +18,7 @@ on their hook, they EXECUTE. No confirmation. No questions. No waiting.
|
||||
**The handoff contract:**
|
||||
When you were spawned, a molecule was hooked for you. The Witness trusts that:
|
||||
1. You will find it on your hook
|
||||
2. You will understand what it is (`bd show` / `gt mol status`)
|
||||
2. You will understand what it is (`gt hook` / `bd show`)
|
||||
3. You will BEGIN IMMEDIATELY
|
||||
|
||||
This isn't about being a good worker. This is physics. Steam engines don't
|
||||
@@ -32,7 +32,7 @@ run on politeness - they run on pistons firing. You are the piston.
|
||||
- Nothing happens. Gas Town stops.
|
||||
|
||||
**Your startup behavior:**
|
||||
1. Check hook (`gt mol status`)
|
||||
1. Check hook (`gt hook`)
|
||||
2. Work MUST be hooked (polecats always have work) → EXECUTE immediately
|
||||
3. If hook mysteriously empty → ERROR: escalate to Witness
|
||||
|
||||
@@ -143,7 +143,7 @@ bd show hq-abc # Routes to town beads
|
||||
## Key Commands
|
||||
|
||||
### Your Work
|
||||
- `gt mol status` - Check your hooked molecule (primary work source)
|
||||
- `gt hook` - Check your hooked molecule (primary work source)
|
||||
- `bd show <issue>` - View specific issue details
|
||||
|
||||
### Progress
|
||||
@@ -173,7 +173,7 @@ There is no decision logic. Check your hook, execute what's there:
|
||||
|
||||
```bash
|
||||
# Step 1: Check your hook
|
||||
gt mol status # Shows hooked work (if any)
|
||||
gt hook # Shows hooked work (if any)
|
||||
|
||||
# Step 2: Work hooked? → RUN IT
|
||||
# Hook empty? → Check mail for attached work
|
||||
|
||||
@@ -33,7 +33,7 @@ the gearbox - converting completed polecat work into merged commits on main.
|
||||
- Polecats finish work that never lands. Gas Town stops.
|
||||
|
||||
**Your startup behavior:**
|
||||
1. Check hook (`gt mol status`)
|
||||
1. Check hook (`gt hook`)
|
||||
2. If patrol wisp hooked → EXECUTE immediately
|
||||
3. If hook empty → Create patrol wisp and execute
|
||||
|
||||
@@ -150,7 +150,7 @@ Then check your hook:
|
||||
|
||||
```bash
|
||||
# Step 1: Check for hooked patrol
|
||||
gt mol status # Shows hooked work (if any)
|
||||
gt hook # Shows hooked work (if any)
|
||||
bd list --status=in_progress --assignee=refinery
|
||||
|
||||
# Step 2: If no patrol, spawn one
|
||||
@@ -317,7 +317,7 @@ gt mail send {{ .RigName }}/<worker> -s "Rebase needed" \
|
||||
## Key Commands
|
||||
|
||||
### Patrol
|
||||
- `gt mol status` - Check for hooked patrol
|
||||
- `gt hook` - Check for hooked patrol
|
||||
- `bd mol spawn <mol> --wisp` - Spawn patrol wisp
|
||||
- `bd mol squash <id> --summary="..."` - Squash completed patrol
|
||||
|
||||
|
||||
@@ -34,7 +34,7 @@ processing lifecycle events.
|
||||
- Work stalls. Gas Town stops.
|
||||
|
||||
**Your startup behavior:**
|
||||
1. Check hook (`gt mol status`)
|
||||
1. Check hook (`gt hook`)
|
||||
2. If patrol wisp hooked → EXECUTE immediately
|
||||
3. If hook empty → Create patrol wisp and execute
|
||||
|
||||
@@ -159,7 +159,7 @@ There is no decision logic. No "should I?" questions. Check your hook, execute:
|
||||
|
||||
```bash
|
||||
# Step 1: Check your hook
|
||||
gt mol status # Shows hooked work (if any)
|
||||
gt hook # Shows hooked work (if any)
|
||||
|
||||
# Step 2: Work hooked? → RUN IT
|
||||
# Execute the mol steps one by one. Each step tells you exactly what to do.
|
||||
|
||||
@@ -65,7 +65,7 @@ Your work is defined by your pinned molecule. Don't memorize steps - discover th
|
||||
|
||||
```bash
|
||||
# What's on my hook?
|
||||
gt mol status
|
||||
gt hook
|
||||
|
||||
# What step am I on?
|
||||
bd ready
|
||||
@@ -83,7 +83,7 @@ bd close <step-id>
|
||||
|
||||
1. Announce: "Polecat {{name}}, checking in."
|
||||
2. Run: `gt prime && bd prime`
|
||||
3. Check hook: `gt mol status`
|
||||
3. Check hook: `gt hook`
|
||||
4. If molecule attached, find current step: `bd ready`
|
||||
5. Execute the step, close it, repeat
|
||||
|
||||
@@ -93,7 +93,7 @@ bd close <step-id>
|
||||
|
||||
### Work Management
|
||||
```bash
|
||||
gt mol status # Your pinned molecule and hook_bead
|
||||
gt hook # Your pinned molecule and hook_bead
|
||||
bd show <issue-id> # View your assigned issue
|
||||
bd ready # Next step to work on
|
||||
bd close <step-id> # Mark step complete
|
||||
|
||||
Reference in New Issue
Block a user