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:
gastown/crew/max
2025-12-30 22:09:58 -08:00
committed by Steve Yegge
parent 23ee6efd41
commit b4a7b930e5
24 changed files with 49 additions and 49 deletions

View File

@@ -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))

View File

@@ -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
}

View File

@@ -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`")
}

View File

@@ -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 {

View File

@@ -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,
}

View File

@@ -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)

View File

@@ -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."
}

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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.