sisyphi 1.2.0 → 1.2.1

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.
Files changed (23) hide show
  1. package/dist/cli.js +1 -1
  2. package/dist/cli.js.map +1 -1
  3. package/dist/templates/agent-plugin/hooks/CLAUDE.md +4 -4
  4. package/dist/templates/agent-plugin/hooks/hooks.json +1 -1
  5. package/dist/templates/agent-plugin/hooks/register-bg-task.sh +10 -7
  6. package/dist/templates/orchestrator-base.md +8 -10
  7. package/dist/templates/orchestrator-impl.md +5 -1
  8. package/dist/templates/orchestrator-plugin/skills/orchestration/CLAUDE.md +1 -1
  9. package/package.json +2 -2
  10. package/templates/agent-plugin/hooks/CLAUDE.md +4 -4
  11. package/templates/agent-plugin/hooks/hooks.json +1 -1
  12. package/templates/agent-plugin/hooks/register-bg-task.sh +10 -7
  13. package/templates/orchestrator-base.md +8 -10
  14. package/templates/orchestrator-impl.md +5 -1
  15. package/templates/orchestrator-plugin/skills/orchestration/CLAUDE.md +1 -1
  16. package/deploy/hetzner/.terraform/providers/registry.terraform.io/hetznercloud/hcloud/1.62.0/darwin_arm64/CHANGELOG.md +0 -1277
  17. package/deploy/hetzner/.terraform/providers/registry.terraform.io/hetznercloud/hcloud/1.62.0/darwin_arm64/LICENSE +0 -373
  18. package/deploy/hetzner/.terraform/providers/registry.terraform.io/hetznercloud/hcloud/1.62.0/darwin_arm64/README.md +0 -202
  19. package/deploy/hetzner/.terraform/providers/registry.terraform.io/hetznercloud/hcloud/1.62.0/darwin_arm64/terraform-provider-hcloud_v1.62.0 +0 -0
  20. package/dist/deploy/hetzner/.terraform/providers/registry.terraform.io/hetznercloud/hcloud/1.62.0/darwin_arm64/CHANGELOG.md +0 -1277
  21. package/dist/deploy/hetzner/.terraform/providers/registry.terraform.io/hetznercloud/hcloud/1.62.0/darwin_arm64/LICENSE +0 -373
  22. package/dist/deploy/hetzner/.terraform/providers/registry.terraform.io/hetznercloud/hcloud/1.62.0/darwin_arm64/README.md +0 -202
  23. package/dist/deploy/hetzner/.terraform/providers/registry.terraform.io/hetznercloud/hcloud/1.62.0/darwin_arm64/terraform-provider-hcloud_v1.62.0 +0 -0
@@ -1,9 +1,9 @@
1
- - The bundled `hooks.json` here is the **manifest** — the daemon merges it with project (`.sisyphus/agent-plugin/hooks/hooks.json`) and user (`~/.sisyphus/agent-plugin/hooks/hooks.json`) layers at spawn time, then writes the merged result into the per-agent plugin dir. Script edits are invisible to running agents; **respawn required**.
2
- - A bundled hook script is only copied into a spawned agent's plugin dir if the merged manifest references it for that agent type — scripts whose entries filter out (e.g. `plan-validate.sh` for a `review` agent) are skipped. Higher layers can suppress a bundled script by basename via `"disable": ["script.sh"]` at the manifest's top level.
1
+ - Script edits are invisible to running agents — the daemon copies scripts at spawn time; **respawn required** to pick up changes.
2
+ - Higher layers can suppress a bundled script by basename via `"disable": ["script.sh"]` at the manifest's top level.
3
3
  - `interactive: true` in agent frontmatter triggers `condition: "non-interactive"` filtering — entries with that condition (currently the bundled `require-submit.sh` Stop hook) are dropped from the merged manifest for interactive agents.
4
4
  - Scripts receive no `{{placeholder}}` substitution — placeholders appear as literal text, unlike `.md` templates.
5
- - Prompt hooks (`userPrompt`, `systemPrompt`) write raw text to stdout. Pre-tool hooks (e.g. `intercept-send-message.sh`) write `{"decision":"block","reason":"..."}` or exit 0 — wrong format silently does nothing.
5
+ - `UserPromptSubmit` hooks write raw text to stdout. PreToolUse hooks (e.g. `intercept-send-message.sh`) write `{"decision":"block","reason":"..."}` or exit 0 — wrong format silently does nothing.
6
6
  - Claude Code invokes hooks unconditionally, not only in sisyphus sessions. Guard: `if [ -z "$SISYPHUS_SESSION_ID" ]; then exit 0; fi`. Stop hooks also need `$SISYPHUS_AGENT_ID`.
7
- - `userPrompt` fires on **every** message. Single-fire: guard `$SISYPHUS_AGENT_ID` and use a flag file at `/tmp/sisyphus-hooks/${SISYPHUS_SESSION_ID}/${SISYPHUS_AGENT_ID}-{name}`.
7
+ - `UserPromptSubmit` fires on **every** message. Single-fire: guard `$SISYPHUS_AGENT_ID` and use a flag file at `/tmp/sisyphus-hooks/${SISYPHUS_SESSION_ID}/${SISYPHUS_AGENT_ID}-{name}`.
8
8
  - Heredoc must use `<<'HINT'` (single-quoted) for static prose — unquoted heredoc silently expands `$SISYPHUS_*`, `$INSTRUCTION`, and backticks. Assign a local var before the heredoc when interpolation is needed. Exception: `$SISYPHUS_SESSION_DIR` and similar env-var references inside `<<'HINT'` are intentional — the agent sees the literal text and expands them itself in Bash tool calls (the pane has these vars set).
9
9
  - Stop hooks receive JSON on stdin. If `stop_hook_active` is true, exit 0 immediately — blocking causes an infinite retry loop.
@@ -24,7 +24,7 @@
24
24
  ],
25
25
  "PostToolUse": [
26
26
  {
27
- "matcher": "Task",
27
+ "matcher": "Task|Agent",
28
28
  "agentTypes": ["all"],
29
29
  "hooks": [{ "type": "command", "command": "bash ${CLAUDE_PLUGIN_ROOT}/hooks/register-bg-task.sh" }]
30
30
  }
@@ -1,8 +1,8 @@
1
1
  #!/bin/bash
2
- # PostToolUse hook (matcher: Task): register background-Task agentIds for require-submit.sh.
3
- # Only fires when Claude Code itself flagged the Task as run_in_background=true —
4
- # structured signal, not prose scraping. Eliminates the false-positive class where
5
- # a non-background Task's output happens to contain the word "background".
2
+ # PostToolUse hook (matcher: Task|Agent): register background sub-agent IDs for require-submit.sh.
3
+ # For Task: only fires when Claude Code itself flagged run_in_background=true —
4
+ # structured signal, not prose scraping.
5
+ # For Agent (FleetView): always async; the run_in_background gate is skipped.
6
6
  # Passthrough (exit 0) if not in a sisyphus session.
7
7
 
8
8
  if [ -z "$SISYPHUS_SESSION_ID" ] || [ -z "$SISYPHUS_AGENT_ID" ]; then
@@ -11,9 +11,12 @@ fi
11
11
 
12
12
  INPUT=$(cat)
13
13
 
14
- RIB=$(echo "$INPUT" | python3 -c "import json,sys; print(json.load(sys.stdin).get('tool_input',{}).get('run_in_background',False))" 2>/dev/null)
15
- if [ "$RIB" != "True" ]; then
16
- exit 0
14
+ TOOL_NAME=$(echo "$INPUT" | python3 -c "import json,sys; print(json.load(sys.stdin).get('tool_name',''))" 2>/dev/null)
15
+ if [ "$TOOL_NAME" != "Agent" ]; then
16
+ RIB=$(echo "$INPUT" | python3 -c "import json,sys; print(json.load(sys.stdin).get('tool_input',{}).get('run_in_background',False))" 2>/dev/null)
17
+ if [ "$RIB" != "True" ]; then
18
+ exit 0
19
+ fi
17
20
  fi
18
21
 
19
22
  # tool_response may be a string or structured; normalize to a string before grepping.
@@ -33,7 +33,7 @@ Each cycle:
33
33
  5. **Don't skip what you notice.** When agent reports or your own review surface minor issues — code smells, small inconsistencies, rough edges — address them. Deprioritizing small things is how quality erodes.
34
34
  6. Decide what to do next: break down work, spawn agents, re-plan, validate, or complete.
35
35
  7. If you need user input, ask and wait — **do NOT yield.** Yielding kills your process. You'll be respawned with no memory of the question and loop forever.
36
- 8. Update roadmap.md and digest.json, spawn agents, write the cycle log, then `sis orch yield --prompt "what to focus on next cycle"`
36
+ 8. Update roadmap.md and digest.json, spawn agents, write the cycle log, then `sis orch yield --mode <current-or-next-mode> --prompt "what to focus on next cycle"`
37
37
 
38
38
  Be proactive. Don't wait for work to arrive — look ahead. If the current stage is wrapping up, prepare context for the next one. If a review found issues, spawn fix agents immediately. If you can run a review alongside the next stage's implementation, do it. Every cycle should maximize agents doing useful work.
39
39
 
@@ -51,7 +51,7 @@ When you need user input — alignment questions, clarification, decisions — o
51
51
 
52
52
  ### Mode Transitions
53
53
 
54
- Each yield can switch your mode the mode determines the system prompt for the next cycle. Omitting `--mode` keeps the current mode.
54
+ Every yield must specify `--mode`. The mode determines the system prompt for the next cycle. Pass the **current mode** to stay in it (no transition); pass a **different mode** to switch phases. There is no implicit "keep current mode" — be explicit every cycle.
55
55
 
56
56
  {{ORCHESTRATOR_MODES}}
57
57
 
@@ -80,20 +80,20 @@ A good yield prompt has two parts: **what happened** (one clause naming the arti
80
80
 
81
81
  <example>
82
82
  <good>
83
- sis orch yield --prompt "Three per-commit reviews complete. Address what they raised, work with the user if any finding is ambiguous, then decide between deeper investigation and synthesis."
83
+ sis orch yield --mode implementation --prompt "Three per-commit reviews complete. Address what they raised, work with the user if any finding is ambiguous, then decide between deeper investigation and synthesis."
84
84
  </good>
85
85
  <good>
86
- sis orch yield --prompt "Explore agents returned maps of the auth and session layers. Open question: whether session refactor is in scope or a follow-up."
86
+ sis orch yield --mode planning --prompt "Explore agents returned maps of the auth and session layers. Open question: whether session refactor is in scope or a follow-up."
87
87
  </good>
88
88
  <bad>
89
- sis orch yield --prompt "Read the three review docs. If any agent produced thin findings, respawn with narrower scope. Then run cross-cutting pass. Then synthesize into context/report.md sorted by severity."
89
+ sis orch yield --mode implementation --prompt "Read the three review docs. If any agent produced thin findings, respawn with narrower scope. Then run cross-cutting pass. Then synthesize into context/report.md sorted by severity."
90
90
  </bad>
91
91
  <rationale>The bad version scripts the next cycle's plan before it has read anything. The good versions name what arrived and what's unresolved, then stop.</rationale>
92
92
  </example>
93
93
 
94
94
  **Write the prompt as orienting content, not as guidance about how to write yield prompts.** Meta-instructions ("don't pre-decide", "stay open", "pick from what surfaced") are for you, the current orchestrator — they belong in your reasoning, not in the string you hand the next cycle. The next orchestrator already has this section; repeating the rules at it wastes the prompt.
95
95
 
96
- Mode-transition yields (`--mode X --prompt Y`) follow the same shape — the mode signals the phase change, the prompt orients.
96
+ When the mode changes between cycles, the `--mode` token itself signals the phase transition — the prompt still just orients with what happened and what's open.
97
97
 
98
98
  </continuation-prompt>
99
99
 
@@ -271,7 +271,7 @@ Rigor calibration:
271
271
 
272
272
  You have unlimited cycles. Failed implementations, deferred issues, and skipped reviews are far more expensive than extra cycles. Each feature is multiple cycles, not one:
273
273
 
274
- - **Critique** — spawn review agents to find flaws, code smells, missed edge cases. They report problems, not fixes.
274
+ - **Critique** — spawn review agents on meaningful code changes to find flaws, code smells, missed edge cases. They report problems, not fixes. Trust agents at their word about what they did — don't spawn a review just to confirm an agent did what it claimed. Reviews target substantive work; they are not audits of agent honesty.
275
275
  - **Refine** — spawn agents to fix what reviewers found.
276
276
  - **Validate** — e2e verification that the feature actually works. When all stages are done, transition to `validation` mode for the comprehensive final pass.
277
277
 
@@ -314,9 +314,7 @@ For open-ended understanding questions mid-flow — "why does this agent behave
314
314
  ## CLI Reference
315
315
 
316
316
  ```bash
317
- sis orch yield # yield — NEVER use when waiting for user input
318
- sis orch yield --prompt "focus on auth middleware next" # yield with guidance for next cycle
319
- sis orch yield --mode <mode> --prompt "guidance" # switch mode for next cycle
317
+ sis orch yield --mode <mode> --prompt "guidance" # yield — NEVER use when waiting for user input. --mode is required: pass the current mode to stay in it, or a new mode to transition.
320
318
  sis session clone <goal> [-c text] [--strategy] [-n name] # fork a sub-concern into a new independent session
321
319
  ```
322
320
 
@@ -100,7 +100,11 @@ A clean report ("No concerns") is a valid and common outcome. When you get one,
100
100
 
101
101
  ## Refine Pass
102
102
 
103
- Aggregate reviewer findings. Spawn fix agents and **point them at the review report** — don't rewrite findings as line-by-line instructions. You triage (skip false positives, note architectural constraints) — they implement.
103
+ Aggregate reviewer findings, then **route each finding to where the fix actually lives**:
104
+
105
+ - **Many code corrections** — spawn fix agents and point them at the review report. You triage (skip false positives, note architectural constraints); they implement. Don't rewrite findings as line-by-line instructions.
106
+ - **Plan or context-doc fixes** — edit the document yourself. A clarified requirement, a corrected assumption, or a tweaked plan section is faster done in the orchestrator than handed to an agent. Spawning an agent to edit a markdown file is overhead, not delegation. (Massive replans are different — see backtrack guidance below.)
107
+ - **A handful of trivial code edits** (a missed import, a typo, a one-line constant) — make them yourself rather than spinning up an agent. The agent overhead exceeds the work.
104
108
 
105
109
  ```bash
106
110
  sis agent spawn --name "fix-review-issues" --agent-type sisyphus:implement \
@@ -1 +1 @@
1
- - `sis orch yield --mode discovery`, `--mode validation`, etc. must be explicit at mode-transition cycles. Omitting silently defaults to `implementation` mode, skipping guardrails the subsequent cycle expects.
1
+ - `sis orch yield --mode <mode>` is required on every yield. Pass the current mode to stay in it; pass a different mode to transition. There is no implicit "keep current mode" fallback the CLI rejects yields without `--mode`.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sisyphi",
3
- "version": "1.2.0",
3
+ "version": "1.2.1",
4
4
  "description": "tmux-integrated orchestration daemon for Claude Code multi-agent workflows",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -40,7 +40,7 @@
40
40
  "prepublishOnly": "npm run build && npm test"
41
41
  },
42
42
  "dependencies": {
43
- "@crouton-kit/humanloop": "^0.1.3",
43
+ "@crouton-kit/humanloop": "^0.1.4",
44
44
  "@r-cli/sdk": "^1.2.0",
45
45
  "commander": "^13.1.0",
46
46
  "string-width": "^5.1.2",
@@ -1,9 +1,9 @@
1
- - The bundled `hooks.json` here is the **manifest** — the daemon merges it with project (`.sisyphus/agent-plugin/hooks/hooks.json`) and user (`~/.sisyphus/agent-plugin/hooks/hooks.json`) layers at spawn time, then writes the merged result into the per-agent plugin dir. Script edits are invisible to running agents; **respawn required**.
2
- - A bundled hook script is only copied into a spawned agent's plugin dir if the merged manifest references it for that agent type — scripts whose entries filter out (e.g. `plan-validate.sh` for a `review` agent) are skipped. Higher layers can suppress a bundled script by basename via `"disable": ["script.sh"]` at the manifest's top level.
1
+ - Script edits are invisible to running agents — the daemon copies scripts at spawn time; **respawn required** to pick up changes.
2
+ - Higher layers can suppress a bundled script by basename via `"disable": ["script.sh"]` at the manifest's top level.
3
3
  - `interactive: true` in agent frontmatter triggers `condition: "non-interactive"` filtering — entries with that condition (currently the bundled `require-submit.sh` Stop hook) are dropped from the merged manifest for interactive agents.
4
4
  - Scripts receive no `{{placeholder}}` substitution — placeholders appear as literal text, unlike `.md` templates.
5
- - Prompt hooks (`userPrompt`, `systemPrompt`) write raw text to stdout. Pre-tool hooks (e.g. `intercept-send-message.sh`) write `{"decision":"block","reason":"..."}` or exit 0 — wrong format silently does nothing.
5
+ - `UserPromptSubmit` hooks write raw text to stdout. PreToolUse hooks (e.g. `intercept-send-message.sh`) write `{"decision":"block","reason":"..."}` or exit 0 — wrong format silently does nothing.
6
6
  - Claude Code invokes hooks unconditionally, not only in sisyphus sessions. Guard: `if [ -z "$SISYPHUS_SESSION_ID" ]; then exit 0; fi`. Stop hooks also need `$SISYPHUS_AGENT_ID`.
7
- - `userPrompt` fires on **every** message. Single-fire: guard `$SISYPHUS_AGENT_ID` and use a flag file at `/tmp/sisyphus-hooks/${SISYPHUS_SESSION_ID}/${SISYPHUS_AGENT_ID}-{name}`.
7
+ - `UserPromptSubmit` fires on **every** message. Single-fire: guard `$SISYPHUS_AGENT_ID` and use a flag file at `/tmp/sisyphus-hooks/${SISYPHUS_SESSION_ID}/${SISYPHUS_AGENT_ID}-{name}`.
8
8
  - Heredoc must use `<<'HINT'` (single-quoted) for static prose — unquoted heredoc silently expands `$SISYPHUS_*`, `$INSTRUCTION`, and backticks. Assign a local var before the heredoc when interpolation is needed. Exception: `$SISYPHUS_SESSION_DIR` and similar env-var references inside `<<'HINT'` are intentional — the agent sees the literal text and expands them itself in Bash tool calls (the pane has these vars set).
9
9
  - Stop hooks receive JSON on stdin. If `stop_hook_active` is true, exit 0 immediately — blocking causes an infinite retry loop.
@@ -24,7 +24,7 @@
24
24
  ],
25
25
  "PostToolUse": [
26
26
  {
27
- "matcher": "Task",
27
+ "matcher": "Task|Agent",
28
28
  "agentTypes": ["all"],
29
29
  "hooks": [{ "type": "command", "command": "bash ${CLAUDE_PLUGIN_ROOT}/hooks/register-bg-task.sh" }]
30
30
  }
@@ -1,8 +1,8 @@
1
1
  #!/bin/bash
2
- # PostToolUse hook (matcher: Task): register background-Task agentIds for require-submit.sh.
3
- # Only fires when Claude Code itself flagged the Task as run_in_background=true —
4
- # structured signal, not prose scraping. Eliminates the false-positive class where
5
- # a non-background Task's output happens to contain the word "background".
2
+ # PostToolUse hook (matcher: Task|Agent): register background sub-agent IDs for require-submit.sh.
3
+ # For Task: only fires when Claude Code itself flagged run_in_background=true —
4
+ # structured signal, not prose scraping.
5
+ # For Agent (FleetView): always async; the run_in_background gate is skipped.
6
6
  # Passthrough (exit 0) if not in a sisyphus session.
7
7
 
8
8
  if [ -z "$SISYPHUS_SESSION_ID" ] || [ -z "$SISYPHUS_AGENT_ID" ]; then
@@ -11,9 +11,12 @@ fi
11
11
 
12
12
  INPUT=$(cat)
13
13
 
14
- RIB=$(echo "$INPUT" | python3 -c "import json,sys; print(json.load(sys.stdin).get('tool_input',{}).get('run_in_background',False))" 2>/dev/null)
15
- if [ "$RIB" != "True" ]; then
16
- exit 0
14
+ TOOL_NAME=$(echo "$INPUT" | python3 -c "import json,sys; print(json.load(sys.stdin).get('tool_name',''))" 2>/dev/null)
15
+ if [ "$TOOL_NAME" != "Agent" ]; then
16
+ RIB=$(echo "$INPUT" | python3 -c "import json,sys; print(json.load(sys.stdin).get('tool_input',{}).get('run_in_background',False))" 2>/dev/null)
17
+ if [ "$RIB" != "True" ]; then
18
+ exit 0
19
+ fi
17
20
  fi
18
21
 
19
22
  # tool_response may be a string or structured; normalize to a string before grepping.
@@ -33,7 +33,7 @@ Each cycle:
33
33
  5. **Don't skip what you notice.** When agent reports or your own review surface minor issues — code smells, small inconsistencies, rough edges — address them. Deprioritizing small things is how quality erodes.
34
34
  6. Decide what to do next: break down work, spawn agents, re-plan, validate, or complete.
35
35
  7. If you need user input, ask and wait — **do NOT yield.** Yielding kills your process. You'll be respawned with no memory of the question and loop forever.
36
- 8. Update roadmap.md and digest.json, spawn agents, write the cycle log, then `sis orch yield --prompt "what to focus on next cycle"`
36
+ 8. Update roadmap.md and digest.json, spawn agents, write the cycle log, then `sis orch yield --mode <current-or-next-mode> --prompt "what to focus on next cycle"`
37
37
 
38
38
  Be proactive. Don't wait for work to arrive — look ahead. If the current stage is wrapping up, prepare context for the next one. If a review found issues, spawn fix agents immediately. If you can run a review alongside the next stage's implementation, do it. Every cycle should maximize agents doing useful work.
39
39
 
@@ -51,7 +51,7 @@ When you need user input — alignment questions, clarification, decisions — o
51
51
 
52
52
  ### Mode Transitions
53
53
 
54
- Each yield can switch your mode the mode determines the system prompt for the next cycle. Omitting `--mode` keeps the current mode.
54
+ Every yield must specify `--mode`. The mode determines the system prompt for the next cycle. Pass the **current mode** to stay in it (no transition); pass a **different mode** to switch phases. There is no implicit "keep current mode" — be explicit every cycle.
55
55
 
56
56
  {{ORCHESTRATOR_MODES}}
57
57
 
@@ -80,20 +80,20 @@ A good yield prompt has two parts: **what happened** (one clause naming the arti
80
80
 
81
81
  <example>
82
82
  <good>
83
- sis orch yield --prompt "Three per-commit reviews complete. Address what they raised, work with the user if any finding is ambiguous, then decide between deeper investigation and synthesis."
83
+ sis orch yield --mode implementation --prompt "Three per-commit reviews complete. Address what they raised, work with the user if any finding is ambiguous, then decide between deeper investigation and synthesis."
84
84
  </good>
85
85
  <good>
86
- sis orch yield --prompt "Explore agents returned maps of the auth and session layers. Open question: whether session refactor is in scope or a follow-up."
86
+ sis orch yield --mode planning --prompt "Explore agents returned maps of the auth and session layers. Open question: whether session refactor is in scope or a follow-up."
87
87
  </good>
88
88
  <bad>
89
- sis orch yield --prompt "Read the three review docs. If any agent produced thin findings, respawn with narrower scope. Then run cross-cutting pass. Then synthesize into context/report.md sorted by severity."
89
+ sis orch yield --mode implementation --prompt "Read the three review docs. If any agent produced thin findings, respawn with narrower scope. Then run cross-cutting pass. Then synthesize into context/report.md sorted by severity."
90
90
  </bad>
91
91
  <rationale>The bad version scripts the next cycle's plan before it has read anything. The good versions name what arrived and what's unresolved, then stop.</rationale>
92
92
  </example>
93
93
 
94
94
  **Write the prompt as orienting content, not as guidance about how to write yield prompts.** Meta-instructions ("don't pre-decide", "stay open", "pick from what surfaced") are for you, the current orchestrator — they belong in your reasoning, not in the string you hand the next cycle. The next orchestrator already has this section; repeating the rules at it wastes the prompt.
95
95
 
96
- Mode-transition yields (`--mode X --prompt Y`) follow the same shape — the mode signals the phase change, the prompt orients.
96
+ When the mode changes between cycles, the `--mode` token itself signals the phase transition — the prompt still just orients with what happened and what's open.
97
97
 
98
98
  </continuation-prompt>
99
99
 
@@ -271,7 +271,7 @@ Rigor calibration:
271
271
 
272
272
  You have unlimited cycles. Failed implementations, deferred issues, and skipped reviews are far more expensive than extra cycles. Each feature is multiple cycles, not one:
273
273
 
274
- - **Critique** — spawn review agents to find flaws, code smells, missed edge cases. They report problems, not fixes.
274
+ - **Critique** — spawn review agents on meaningful code changes to find flaws, code smells, missed edge cases. They report problems, not fixes. Trust agents at their word about what they did — don't spawn a review just to confirm an agent did what it claimed. Reviews target substantive work; they are not audits of agent honesty.
275
275
  - **Refine** — spawn agents to fix what reviewers found.
276
276
  - **Validate** — e2e verification that the feature actually works. When all stages are done, transition to `validation` mode for the comprehensive final pass.
277
277
 
@@ -314,9 +314,7 @@ For open-ended understanding questions mid-flow — "why does this agent behave
314
314
  ## CLI Reference
315
315
 
316
316
  ```bash
317
- sis orch yield # yield — NEVER use when waiting for user input
318
- sis orch yield --prompt "focus on auth middleware next" # yield with guidance for next cycle
319
- sis orch yield --mode <mode> --prompt "guidance" # switch mode for next cycle
317
+ sis orch yield --mode <mode> --prompt "guidance" # yield — NEVER use when waiting for user input. --mode is required: pass the current mode to stay in it, or a new mode to transition.
320
318
  sis session clone <goal> [-c text] [--strategy] [-n name] # fork a sub-concern into a new independent session
321
319
  ```
322
320
 
@@ -100,7 +100,11 @@ A clean report ("No concerns") is a valid and common outcome. When you get one,
100
100
 
101
101
  ## Refine Pass
102
102
 
103
- Aggregate reviewer findings. Spawn fix agents and **point them at the review report** — don't rewrite findings as line-by-line instructions. You triage (skip false positives, note architectural constraints) — they implement.
103
+ Aggregate reviewer findings, then **route each finding to where the fix actually lives**:
104
+
105
+ - **Many code corrections** — spawn fix agents and point them at the review report. You triage (skip false positives, note architectural constraints); they implement. Don't rewrite findings as line-by-line instructions.
106
+ - **Plan or context-doc fixes** — edit the document yourself. A clarified requirement, a corrected assumption, or a tweaked plan section is faster done in the orchestrator than handed to an agent. Spawning an agent to edit a markdown file is overhead, not delegation. (Massive replans are different — see backtrack guidance below.)
107
+ - **A handful of trivial code edits** (a missed import, a typo, a one-line constant) — make them yourself rather than spinning up an agent. The agent overhead exceeds the work.
104
108
 
105
109
  ```bash
106
110
  sis agent spawn --name "fix-review-issues" --agent-type sisyphus:implement \
@@ -1 +1 @@
1
- - `sis orch yield --mode discovery`, `--mode validation`, etc. must be explicit at mode-transition cycles. Omitting silently defaults to `implementation` mode, skipping guardrails the subsequent cycle expects.
1
+ - `sis orch yield --mode <mode>` is required on every yield. Pass the current mode to stay in it; pass a different mode to transition. There is no implicit "keep current mode" fallback the CLI rejects yields without `--mode`.