@axiomantic/garden 0.2.3 → 0.2.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/SKILL.md +28 -4
- package/bin/binaries/garden-darwin-arm64 +0 -0
- package/bin/binaries/garden-darwin-x64 +0 -0
- package/bin/binaries/garden-linux-arm64 +0 -0
- package/bin/binaries/garden-linux-x64 +0 -0
- package/bin/binaries/garden-win32-x64.exe +0 -0
- package/package.json +1 -1
- package/skills/garden/SKILL.md +28 -4
- package/skills/launch-workers/SKILL.md +16 -2
- package/skills/orchestrate-swarm/SKILL.md +37 -15
package/SKILL.md
CHANGED
|
@@ -103,6 +103,19 @@ Upon receiving the operator's responses:
|
|
|
103
103
|
The primary conversation session acts as the Lead Orchestrator. The orchestrator directs, reviews, and weaves; it never performs large multi-file implementation edits directly when a worker fleet is active.
|
|
104
104
|
</CRITICAL>
|
|
105
105
|
|
|
106
|
+
<CRITICAL>
|
|
107
|
+
Orchestrator Intake Gate & Non-Implementation Invariant (GVR-016):
|
|
108
|
+
The Lead Orchestrator is a CONDUCTOR, NOT A CODER.
|
|
109
|
+
Whenever the operator presents a task, feature request, bugfix, or asks to work on something:
|
|
110
|
+
THE ORCHESTRATOR MUST NEVER DIRECTLY JUMP INTO CODE EDITING OR IMPLEMENTATION TOOLS (e.g. `write_to_file`, `replace_file_content`).
|
|
111
|
+
Instead, it MUST STOP and ask the operator how they want the work routed using `ask_question`:
|
|
112
|
+
- Option 1 (Recommended): Enqueue to Cluster Work Queue (`rhizo enqueue queue:<project>:tasks --subject "..." --body "..."`) for background cluster workers.
|
|
113
|
+
- Option 2: Dispatch directly to an active cluster worker (`rhizo send <worker> --subject "..." --body "..."`).
|
|
114
|
+
- Option 3: Execute inline in main chat (only if the operator explicitly selects/confirms this option).
|
|
115
|
+
|
|
116
|
+
This intake gate applies to ANY request to "work on X", "build Y", "fix Z", or "implement feature W". Direct inline implementation is prohibited unless the operator explicitly directs the orchestrator to code it inline in the main session.
|
|
117
|
+
</CRITICAL>
|
|
118
|
+
|
|
106
119
|
<INVARIANT>
|
|
107
120
|
Delegation Precedence: When instructed to "delegate", "assign", or "dispatch" work, the Lead Orchestrator MUST route tasks to active cluster workers via Rhizo (`rhizo send <worker>`, `rhizo enqueue queue:<project>:tasks`, or `rhizo task assign/claim`). Harness-internal subagents (e.g. `invoke_subagent`, `Task`, `Agent`) must ONLY be used if the operator explicitly requests a "subagent" by name, or if no cluster workers exist in the cluster roster (`rhizo who`).
|
|
108
121
|
</INVARIANT>
|
|
@@ -111,6 +124,13 @@ Delegation Precedence: When instructed to "delegate", "assign", or "dispatch" wo
|
|
|
111
124
|
Zero Theatrical Dialogue: Every dialectical assertion must be substantiated with empirical evidence obtained through tool calls (file reading, test executions, benchmarks, or AST inspections). Theoretical roleplay without evidence is rejected.
|
|
112
125
|
</INVARIANT>
|
|
113
126
|
|
|
127
|
+
<CRITICAL>
|
|
128
|
+
Worker Autonomous Execution Invariant (GVR-017):
|
|
129
|
+
Swarm workers are sovereign, autonomous implementers, not passive chatbots.
|
|
130
|
+
When 'rhizo listen' delivers an incoming task and exits, workers MUST NOT wait for an operator prompt or ask "Shall I begin?".
|
|
131
|
+
They MUST immediately transition to active execution: claim the task, enter the isolated Vine strand, perform the work, verify the Two-Key Gate, report results, and re-arm the single-shot listener before concluding their turn.
|
|
132
|
+
</CRITICAL>
|
|
133
|
+
|
|
114
134
|
<INVARIANT>
|
|
115
135
|
Never merge code into the canonical trunk without a verified Two-Key Gate pass ('vine gate' exit code 0) inside an isolated Rift strand.
|
|
116
136
|
</INVARIANT>
|
|
@@ -145,6 +165,8 @@ Context compaction purges detailed operational invariants, ceremony rules, and p
|
|
|
145
165
|
2. **Maintain Runtime State**: Keep this exact block in the working context:
|
|
146
166
|
<!-- SWARM_RUNTIME_STATE: DO NOT DISCARD OR ABBREVIATE IN COMPACTION -->
|
|
147
167
|
- AGENT_NAME: <codename> (Role: <role>)
|
|
168
|
+
- AGENT_ROLE: Lead Orchestrator (NON-IMPLEMENTING CONDUCTOR)
|
|
169
|
+
- INTAKE_GATE: MANDATORY_ASK (Never implement directly; ask to enqueue vs dispatch vs inline)
|
|
148
170
|
- WORKSPACE_MODE: Root Trunk | Strand (<path>)
|
|
149
171
|
- ACTIVE_STRAND: <branch> (Parent: <parent_branch>)
|
|
150
172
|
- ACTIVE_PEERS:
|
|
@@ -166,10 +188,12 @@ To prevent silent deadlocks when workers stall, crash, or fail to re-arm listene
|
|
|
166
188
|
2. **Watchdog Window**: If a worker fails to respond within the expected turn window (e.g. 5–10 minutes) and `rhizo probe` reveals `NO_LISTENER` or unread inbox items:
|
|
167
189
|
- **Escalate Immediately**: Prompt the operator via `ask_question` with the diagnostic status.
|
|
168
190
|
- **Actionable Remediation**: Offer options to (1) re-arm the listener in the worker's terminal session (`rhizo listen <worker>`), (2) reboot the agent harness, or (3) reassign the task via `rhizo reroute <worker> <new_worker>`.
|
|
169
|
-
3. **Orchestrator Self-Audit Watchdog &
|
|
170
|
-
- For harnesses supporting `schedule` (e.g. Antigravity), arm a debounced
|
|
171
|
-
-
|
|
172
|
-
-
|
|
191
|
+
3. **Orchestrator Self-Audit Watchdog & Stepped Backoff Protocol (GVR-014, GVR-015)**:
|
|
192
|
+
- For harnesses supporting `schedule` (e.g. Antigravity), arm a debounced watchdog timer (`schedule(DurationSeconds=cadence, Prompt="...", TimerCondition="any")`).
|
|
193
|
+
- **Stepped Backoff & 4-Strike Cap**: Starts at base 15m (900s). On consecutive quiescent checks with a stable listener, backs off (15m $\rightarrow$ 30m $\rightarrow$ 60m $\rightarrow$ 120m) and stands down at check 4 (`recommended_cadence=0`), preventing infinite token-eating polling loops.
|
|
194
|
+
- **Reset Invariant**: Resets immediately to base 15m (streak 0) on any listener failure, unread inbox backlog, outbound task dispatch (`rhizo send`/`enqueue`), worker reply, or user chat prompt.
|
|
195
|
+
- **Replace, Never Stack**: Kills previous timer via `manage_task(Action='kill')` before arming a new one. Arriving worker traffic cancels the timer automatically with zero token overhead.
|
|
196
|
+
- When the timer fires, execute the short check: `rhizo watchdog check --agent <orchestrator> --json` and follow `next_action` (`SCHEDULE_TIMER` or `STAND_DOWN`).
|
|
173
197
|
|
|
174
198
|
---
|
|
175
199
|
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/package.json
CHANGED
package/skills/garden/SKILL.md
CHANGED
|
@@ -103,6 +103,19 @@ Upon receiving the operator's responses:
|
|
|
103
103
|
The primary conversation session acts as the Lead Orchestrator. The orchestrator directs, reviews, and weaves; it never performs large multi-file implementation edits directly when a worker fleet is active.
|
|
104
104
|
</CRITICAL>
|
|
105
105
|
|
|
106
|
+
<CRITICAL>
|
|
107
|
+
Orchestrator Intake Gate & Non-Implementation Invariant (GVR-016):
|
|
108
|
+
The Lead Orchestrator is a CONDUCTOR, NOT A CODER.
|
|
109
|
+
Whenever the operator presents a task, feature request, bugfix, or asks to work on something:
|
|
110
|
+
THE ORCHESTRATOR MUST NEVER DIRECTLY JUMP INTO CODE EDITING OR IMPLEMENTATION TOOLS (e.g. `write_to_file`, `replace_file_content`).
|
|
111
|
+
Instead, it MUST STOP and ask the operator how they want the work routed using `ask_question`:
|
|
112
|
+
- Option 1 (Recommended): Enqueue to Cluster Work Queue (`rhizo enqueue queue:<project>:tasks --subject "..." --body "..."`) for background cluster workers.
|
|
113
|
+
- Option 2: Dispatch directly to an active cluster worker (`rhizo send <worker> --subject "..." --body "..."`).
|
|
114
|
+
- Option 3: Execute inline in main chat (only if the operator explicitly selects/confirms this option).
|
|
115
|
+
|
|
116
|
+
This intake gate applies to ANY request to "work on X", "build Y", "fix Z", or "implement feature W". Direct inline implementation is prohibited unless the operator explicitly directs the orchestrator to code it inline in the main session.
|
|
117
|
+
</CRITICAL>
|
|
118
|
+
|
|
106
119
|
<INVARIANT>
|
|
107
120
|
Delegation Precedence: When instructed to "delegate", "assign", or "dispatch" work, the Lead Orchestrator MUST route tasks to active cluster workers via Rhizo (`rhizo send <worker>`, `rhizo enqueue queue:<project>:tasks`, or `rhizo task assign/claim`). Harness-internal subagents (e.g. `invoke_subagent`, `Task`, `Agent`) must ONLY be used if the operator explicitly requests a "subagent" by name, or if no cluster workers exist in the cluster roster (`rhizo who`).
|
|
108
121
|
</INVARIANT>
|
|
@@ -111,6 +124,13 @@ Delegation Precedence: When instructed to "delegate", "assign", or "dispatch" wo
|
|
|
111
124
|
Zero Theatrical Dialogue: Every dialectical assertion must be substantiated with empirical evidence obtained through tool calls (file reading, test executions, benchmarks, or AST inspections). Theoretical roleplay without evidence is rejected.
|
|
112
125
|
</INVARIANT>
|
|
113
126
|
|
|
127
|
+
<CRITICAL>
|
|
128
|
+
Worker Autonomous Execution Invariant (GVR-017):
|
|
129
|
+
Swarm workers are sovereign, autonomous implementers, not passive chatbots.
|
|
130
|
+
When 'rhizo listen' delivers an incoming task and exits, workers MUST NOT wait for an operator prompt or ask "Shall I begin?".
|
|
131
|
+
They MUST immediately transition to active execution: claim the task, enter the isolated Vine strand, perform the work, verify the Two-Key Gate, report results, and re-arm the single-shot listener before concluding their turn.
|
|
132
|
+
</CRITICAL>
|
|
133
|
+
|
|
114
134
|
<INVARIANT>
|
|
115
135
|
Never merge code into the canonical trunk without a verified Two-Key Gate pass ('vine gate' exit code 0) inside an isolated Rift strand.
|
|
116
136
|
</INVARIANT>
|
|
@@ -145,6 +165,8 @@ Context compaction purges detailed operational invariants, ceremony rules, and p
|
|
|
145
165
|
2. **Maintain Runtime State**: Keep this exact block in the working context:
|
|
146
166
|
<!-- SWARM_RUNTIME_STATE: DO NOT DISCARD OR ABBREVIATE IN COMPACTION -->
|
|
147
167
|
- AGENT_NAME: <codename> (Role: <role>)
|
|
168
|
+
- AGENT_ROLE: Lead Orchestrator (NON-IMPLEMENTING CONDUCTOR)
|
|
169
|
+
- INTAKE_GATE: MANDATORY_ASK (Never implement directly; ask to enqueue vs dispatch vs inline)
|
|
148
170
|
- WORKSPACE_MODE: Root Trunk | Strand (<path>)
|
|
149
171
|
- ACTIVE_STRAND: <branch> (Parent: <parent_branch>)
|
|
150
172
|
- ACTIVE_PEERS:
|
|
@@ -166,10 +188,12 @@ To prevent silent deadlocks when workers stall, crash, or fail to re-arm listene
|
|
|
166
188
|
2. **Watchdog Window**: If a worker fails to respond within the expected turn window (e.g. 5–10 minutes) and `rhizo probe` reveals `NO_LISTENER` or unread inbox items:
|
|
167
189
|
- **Escalate Immediately**: Prompt the operator via `ask_question` with the diagnostic status.
|
|
168
190
|
- **Actionable Remediation**: Offer options to (1) re-arm the listener in the worker's terminal session (`rhizo listen <worker>`), (2) reboot the agent harness, or (3) reassign the task via `rhizo reroute <worker> <new_worker>`.
|
|
169
|
-
3. **Orchestrator Self-Audit Watchdog &
|
|
170
|
-
- For harnesses supporting `schedule` (e.g. Antigravity), arm a debounced
|
|
171
|
-
-
|
|
172
|
-
-
|
|
191
|
+
3. **Orchestrator Self-Audit Watchdog & Stepped Backoff Protocol (GVR-014, GVR-015)**:
|
|
192
|
+
- For harnesses supporting `schedule` (e.g. Antigravity), arm a debounced watchdog timer (`schedule(DurationSeconds=cadence, Prompt="...", TimerCondition="any")`).
|
|
193
|
+
- **Stepped Backoff & 4-Strike Cap**: Starts at base 15m (900s). On consecutive quiescent checks with a stable listener, backs off (15m $\rightarrow$ 30m $\rightarrow$ 60m $\rightarrow$ 120m) and stands down at check 4 (`recommended_cadence=0`), preventing infinite token-eating polling loops.
|
|
194
|
+
- **Reset Invariant**: Resets immediately to base 15m (streak 0) on any listener failure, unread inbox backlog, outbound task dispatch (`rhizo send`/`enqueue`), worker reply, or user chat prompt.
|
|
195
|
+
- **Replace, Never Stack**: Kills previous timer via `manage_task(Action='kill')` before arming a new one. Arriving worker traffic cancels the timer automatically with zero token overhead.
|
|
196
|
+
- When the timer fires, execute the short check: `rhizo watchdog check --agent <orchestrator> --json` and follow `next_action` (`SCHEDULE_TIMER` or `STAND_DOWN`).
|
|
173
197
|
|
|
174
198
|
---
|
|
175
199
|
|
|
@@ -28,7 +28,14 @@ description: "Generates and formats X distinct copy-pasteable bootstrap prompts
|
|
|
28
28
|
Inside worker prompts, `rhizo listen <name>` must always be presented as a single-shot, blocking foreground command with zero timeout (infinite wait).
|
|
29
29
|
NEVER wrap `rhizo listen` in a shell loop (`while true; do rhizo listen; done` or `until rhizo listen; do ...`). Loops trap message payloads inside unmonitored subshell logs and hang coordination.
|
|
30
30
|
</CRITICAL>
|
|
31
|
-
4. **
|
|
31
|
+
4. **Worker Autonomous Execution Invariant (GVR-017)**:
|
|
32
|
+
<CRITICAL>
|
|
33
|
+
Swarm workers operate as sovereign, autonomous implementers, not passive chatbots.
|
|
34
|
+
When 'rhizo listen' unblocks and exits, a directive has been delivered!
|
|
35
|
+
Workers MUST NOT wait for operator intervention or ask "Shall I start?".
|
|
36
|
+
They MUST immediately inspect the delivered directive, claim the task, switch to their isolated Vine strand, execute the requested work, verify the Two-Key Gate, report results, and re-arm their single-shot listener.
|
|
37
|
+
</CRITICAL>
|
|
38
|
+
5. **Zero Dirty Commits**:
|
|
32
39
|
- Never stage coordination state (`.rhizo.*`, `*.lock`, `.vine.json`, `workspaces/`) into Git.
|
|
33
40
|
|
|
34
41
|
---
|
|
@@ -95,8 +102,15 @@ The Orchestrator presents the generated prompt blocks to the operator with clear
|
|
|
95
102
|
- `cd "<project_dir>"`
|
|
96
103
|
- `export RHIZO_AGENT_NAME="<name>"`
|
|
97
104
|
- `rhizo open "<name>" "<tags>"`
|
|
105
|
+
- `rhizo hook install --codex --agent "<name>"` (if running in Codex CLI/Desktop)
|
|
98
106
|
- `rhizo listen "<name>"` (blocking foreground command with infinite wait)
|
|
99
|
-
5. **
|
|
107
|
+
5. **Scheduled Health Check Template (For Codex / Antigravity / Schedulers)**:
|
|
108
|
+
If workers configure a recurring 15-minute listener health check, prompts include the bulletproof 4-step template:
|
|
109
|
+
- STEP 1: Inspect completed subagents/tasks for unhandled delivered tasks and execute them immediately (never stay quiet with pending work).
|
|
110
|
+
- STEP 2: Inspect active tasks to verify a listener is currently running, and re-arm if missing.
|
|
111
|
+
- STEP 3: Run `rhizo probe <name> --json` and drain any inbox backlog.
|
|
112
|
+
- STEP 4: Stay quiet ONLY when a listener is actively running AND no delivered tasks are pending.
|
|
113
|
+
6. **Readiness Prompt**:
|
|
100
114
|
Instruct the operator: *"Once you have pasted these prompts and the sessions are listening, tell me here (or I will automatically detect them online via `rhizo who`), and we will proceed to Phase 3 (Dialectical Deliberation)."*
|
|
101
115
|
|
|
102
116
|
### Step 3: Verify Cluster Readiness Gate
|
|
@@ -23,6 +23,19 @@ Whenever instructed to "delegate", "assign", or "dispatch" work, the Lead Orches
|
|
|
23
23
|
NEVER spawn harness-internal subagents (e.g. `invoke_subagent`, `Task`) when asked to delegate, UNLESS the operator explicitly specifies the word "subagent". Cluster workers running in dedicated sessions are the primary execution vehicle.
|
|
24
24
|
</CRITICAL>
|
|
25
25
|
|
|
26
|
+
<CRITICAL>
|
|
27
|
+
Orchestrator Intake Gate & Non-Implementation Invariant (GVR-016):
|
|
28
|
+
The Lead Orchestrator is a CONDUCTOR, NOT A CODER.
|
|
29
|
+
Whenever the operator presents a task, feature request, bugfix, or asks to work on something:
|
|
30
|
+
THE ORCHESTRATOR MUST NEVER DIRECTLY JUMP INTO CODE EDITING OR IMPLEMENTATION TOOLS (e.g. `write_to_file`, `replace_file_content`).
|
|
31
|
+
Instead, it MUST STOP and ask the operator how they want the work routed using `ask_question`:
|
|
32
|
+
- Option 1 (Recommended): Enqueue to Cluster Work Queue (`rhizo enqueue queue:<project>:tasks --subject "..." --body "..."`) for background cluster workers.
|
|
33
|
+
- Option 2: Dispatch directly to an active cluster worker (`rhizo send <worker> --subject "..." --body "..."`).
|
|
34
|
+
- Option 3: Execute inline in main chat (only if the operator explicitly selects/confirms this option).
|
|
35
|
+
|
|
36
|
+
This intake gate applies to ANY request to "work on X", "build Y", "fix Z", or "implement feature W". Direct inline implementation is prohibited unless the operator explicitly directs the orchestrator to code it inline in the main session.
|
|
37
|
+
</CRITICAL>
|
|
38
|
+
|
|
26
39
|
<CRITICAL>
|
|
27
40
|
Compaction Preservation Rider & Post-Compact Invariant (GVR-010):
|
|
28
41
|
Context compaction purges detailed operational invariants, ceremony rules, and protocol mechanics from working memory.
|
|
@@ -49,6 +62,8 @@ Context compaction purges detailed operational invariants, ceremony rules, and p
|
|
|
49
62
|
2. **Maintain Runtime State**: Keep this exact block in the working context:
|
|
50
63
|
<!-- SWARM_RUNTIME_STATE: DO NOT DISCARD OR ABBREVIATE IN COMPACTION -->
|
|
51
64
|
- AGENT_NAME: <codename> (Role: Lead Orchestrator)
|
|
65
|
+
- AGENT_ROLE: Lead Orchestrator (NON-IMPLEMENTING CONDUCTOR)
|
|
66
|
+
- INTAKE_GATE: MANDATORY_ASK (Never implement directly; ask to enqueue vs dispatch vs inline)
|
|
52
67
|
- WORKSPACE_MODE: Root Trunk (/Users/eek/Development/<project>)
|
|
53
68
|
- ACTIVE_STRAND: canonical trunk
|
|
54
69
|
- ACTIVE_PEERS:
|
|
@@ -70,27 +85,34 @@ Whenever the Lead Orchestrator dispatches a task, broadcasts instructions, or aw
|
|
|
70
85
|
|
|
71
86
|
FORBIDDEN: Never yield the conversation turn to the operator after dispatching work without an active background listener running. Yielding a turn without a listener severs the swarm's physical lifeline, trapping worker replies in Redis and causing silent swarm stalls.
|
|
72
87
|
|
|
73
|
-
Safety Net (Scheduled Timer Watchdog & Debouncer Protocol):
|
|
88
|
+
Safety Net (Scheduled Timer Watchdog & Debouncer Protocol — Stepped Backoff & 4-Strike Cap):
|
|
74
89
|
In harnesses supporting `schedule` (e.g. Google Antigravity), arm a debounced watchdog timer to ensure an orchestrator session is never abandoned if a listener fails to arm or terminates prematurely.
|
|
75
|
-
- **Cadence
|
|
90
|
+
- **Base Cadence & Stepped Backoff**:
|
|
91
|
+
- Initial / After Activity: Base 15 minutes (`DurationSeconds=900`).
|
|
92
|
+
- Quiescent Check 1 (Streak 1): 30 minutes (`DurationSeconds=1800`).
|
|
93
|
+
- Quiescent Check 2 (Streak 2): 60 minutes (`DurationSeconds=3600`).
|
|
94
|
+
- Quiescent Check 3 (Streak 3): 120 minutes (`DurationSeconds=7200`).
|
|
95
|
+
- Quiescent Check 4 (Streak 4): **Stand Down** (`recommended_cadence=0`, do not reschedule).
|
|
96
|
+
- **The Non-Exponential Reset Invariant**:
|
|
97
|
+
The quiescent streak and timer cadence IMMEDIATELY reset to 0 (base 15m / 900s) upon:
|
|
98
|
+
1. Any listener failure or missing process (`ACTION_REQUIRED: REARM_LISTENER`).
|
|
99
|
+
2. Any unread inbox backlog (`ACTION_REQUIRED: UNREAD_MESSAGES`).
|
|
100
|
+
3. Any outbound task dispatch (`rhizo send`, `rhizo enqueue`, `rhizo reply`).
|
|
101
|
+
4. Any worker gate report or message receipt.
|
|
102
|
+
5. Any operator interaction or new prompt in chat.
|
|
76
103
|
- **Replace, Never Stack Invariant**:
|
|
77
104
|
Harnesses prohibit concurrent timers with `TimerCondition="any"`. Before setting a timer, inspect running tasks with `manage_task(Action='list')`. If an existing watchdog task is active (`toolName == "schedule"` or prompt includes `[RHIZO WATCHDOG]`), cancel it via `manage_task(Action='kill', TaskId=...)`.
|
|
78
|
-
- **
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
2. Worker Message / Gate Report receipt.
|
|
82
|
-
3. Implementation Plan updates (`implementation_plan.md` checkboxes).
|
|
83
|
-
4. Watchdog Wakeup turn (if tasks are still in flight).
|
|
84
|
-
- **Stand Down Invariant**:
|
|
85
|
-
When all tasks in `implementation_plan.md` are complete (`- [x]` 100%), kill any running watchdog timer and do not reschedule.
|
|
105
|
+
- **Stand Down Invariants**:
|
|
106
|
+
1. When all tasks in `implementation_plan.md` are complete (`- [x]` 100%), kill any running watchdog timer and do not reschedule.
|
|
107
|
+
2. When the watchdog reaches `substatus: "MAX_STREAK_REACHED"` (streak 4/4), stand down and do not reschedule. The background listener process (`rhizo listen`) remains continuously active on Redis `BRPOP` and will wake the session on any new message.
|
|
86
108
|
- **Zero-Token Happy Path**:
|
|
87
|
-
Because `TimerCondition="any"` is set, any arriving worker message or background task completion automatically cancels the timer early before it expires. The timer only fires if the orchestrator was silent and deaf for
|
|
109
|
+
Because `TimerCondition="any"` is set, any arriving worker message or background task completion automatically cancels the timer early before it expires. The timer only fires if the orchestrator was silent and deaf for the full cadence duration.
|
|
88
110
|
- **The Short Check (When Timer Fires)**:
|
|
89
111
|
Run `rhizo watchdog check --agent <name> --json`.
|
|
90
|
-
* If `ACTION_REQUIRED: REARM_LISTENER`: start `rhizo listen <name>` in background and
|
|
91
|
-
* If `ACTION_REQUIRED: UNREAD_MESSAGES`: drain messages with `rhizo drain 10 <name>`, start listener, and
|
|
92
|
-
* If `OK: LISTENING`: listener is healthy;
|
|
93
|
-
* If `STAND_DOWN: IDLE`:
|
|
112
|
+
* If `ACTION_REQUIRED: REARM_LISTENER`: start `rhizo listen <name>` in background and schedule base timer (`DurationSeconds=900`).
|
|
113
|
+
* If `ACTION_REQUIRED: UNREAD_MESSAGES`: drain messages with `rhizo drain 10 <name>`, start listener, and schedule base timer (`DurationSeconds=900`).
|
|
114
|
+
* If `OK: LISTENING`: listener is healthy; check `recommended_cadence`. If `next_action == "SCHEDULE_TIMER"`, schedule timer with `DurationSeconds=recommended_cadence` and return to sleep with minimal or no user-facing chat output.
|
|
115
|
+
* If `STAND_DOWN: MAX_STREAK_REACHED` or `STAND_DOWN: IDLE`: stand down and do NOT reschedule.
|
|
94
116
|
</CRITICAL>
|
|
95
117
|
|
|
96
118
|
---
|