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
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user