feat(deacon): make patrol loop explicit and continuous

The Deacon patrol formula now clearly documents the continuous loop:
1. Execute patrol steps (inbox-check through context-check)
2. Squash wisp, wait for activity via await-signal (15min max)
3. Create new patrol wisp and hook it
4. Repeat from step 1

Changes:
- Formula description emphasizes CONTINUOUS EXECUTION with flow diagram
- loop-or-exit step renamed to "Continuous patrol loop" with explicit
  instructions for creating/hooking new wisps after await-signal
- plugin-run step now clearly shows gt plugin list + gt dog dispatch
- Deacon role template updated to match formula changes
- Formula version bumped to 9

Fixes gt-fm2c: Deacon needs continuous patrol loop for plugin dispatch

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
kerosene
2026-01-23 13:52:25 -08:00
committed by John Ogle
parent 0d065921b6
commit cce261c97b
2 changed files with 143 additions and 67 deletions

View File

@@ -220,7 +220,7 @@ Use this format:
- Brief description of what's happening
- Box width ~65 chars
### End of Patrol Cycle
### End of Patrol Cycle - CONTINUOUS LOOP
At the end of each patrol cycle, print a summary banner:
@@ -231,21 +231,30 @@ At the end of each patrol cycle, print a summary banner:
═══════════════════════════════════════════════════════════════
```
Then squash and decide:
**CRITICAL**: This is a CONTINUOUS loop. You MUST loop back after each cycle.
```bash
# Squash the wisp to a digest
bd mol squash <wisp-id> --summary="Patrol complete: checked inbox, scanned health, no issues"
# Step 1: Squash the wisp
gt mol squash
# Option A: Loop (low context)
bd mol wisp mol-deacon-patrol
bd update <wisp-id> --status=hooked --assignee=deacon
# Continue to first step...
# Step 2: Wait for activity OR timeout (15-minute max)
gt mol step await-signal --agent-bead hq-deacon \
--backoff-base 60s --backoff-mult 2 --backoff-max 15m
# Option B: Exit (high context)
# Just exit - daemon will respawn with fresh context
# Step 3: Reset idle counter
gt agents state hq-deacon --set idle=0
# Step 4: Create new patrol wisp and hook it
WISP_ID=$(bd mol wisp mol-deacon-patrol 2>&1 | grep -o 'hq-[a-z0-9]*')
gt hook $WISP_ID
# Step 5: Execute from inbox-check (first step of new wisp)
# Continue immediately - don't wait for another prompt
```
**Exit path (high context only)**: If `gt context --usage` shows >80% context,
exit cleanly instead of looping. The daemon will respawn you with fresh context.
## Why Wisps?
Patrol cycles are **operational** work, not **auditable deliverables**: