background: false is the default. Use foreground dispatch whenever the result determines the current answer or next action.
- Use
background: true only for independent work. If this turn must consume a background result, call observe exactly once with action: "wait" and a bounded timeout before continuing; never continue independently while the result is pending.
- Otherwise end the turn and wait for the automatic
teammate-complete notification. Do not rely on SendMessage, team_msg, or hook callbacks as completion signals.
- Never silently ignore an unfinished dispatch.
If any required file above was not expanded into context by the host, or its content is no longer in context, Read it explicitly before executing any step.
Mode selection precedence: explicit --mode <name> > intent keyword auto-detection > [@ask] AskUserQuestion (Normal) / error E000 (-y).
Auto-detection from <intent> keywords (first match wins, ordered):
Keyword matching: case-insensitive substring match against the intent text. Multi-word keywords require all words present (not necessarily adjacent). First matching row wins (ordered by specificity).
| Keywords in intent |
Detected mode |
| bug, crash, error, broken, fails, regression, race, leak, "why does" |
debug |
| requirement, implement, build, add feature, I need to implement, I need to build, I need to add, deliver feature, user story |
planex |
| ui, visual, layout, style, component, page, responsive, a11y, accessibility, UI design, visual design, design system, design tokens |
ui |
| security audit, OWASP, vulnerability, CVE, secrets scan, STRIDE, threat model, supply chain, dependency audit, dependencies, supply chain audit |
security |
| defensive programming, defensive code, exception swallowing, silent failure, fallback risk, default value risk, error suppression, 防御性编程, 防御性代码, 异常吞噬, 兜底风险 |
defensive |
| improve, optimize, performance, refactor quality, reliability, observability |
improve |
| review, audit, code check, check the code, inspect the code, inspect changes, "look over", zero-residual |
review |
Ambiguous / no match → Normal: [@ask] AskUserQuestion (7-way mode pick) | -y: E000.
Mode registry:
| Mode |
Purpose |
Discovery phases |
Audit phase |
Fix→verify pair |
Unique states |
debug |
Symptom → root cause → fix → confirm |
ARCHAEOLOGY, EXPLORE |
DIAGNOSE (hypothesis test) |
FIX → CONFIRM |
ESCALATE_DIAGNOSIS |
improve |
6-dimension quality audit → diagnose → fix |
SURVEY |
AUDIT (6 dims) + DIAGNOSE |
FIX → VERIFY |
ESCALATE_DIAGNOSIS |
planex |
Requirement → plan → execute → verify loop |
(none) |
PLAN + EXECUTE |
(EXECUTE) → VERIFY → FIX loop |
— |
review |
Multi-dimension deep review → zero-residual fix |
ARCHAEOLOGY, EXPLORE |
REVIEW (4+ dims) |
FIX → CONFIRM |
— |
security |
Read-only tiered security audit → severity matrix |
RECON |
SCAN (OWASP + deps + secrets + CI/CD + STRIDE + git) |
(none — read-only) |
— |
defensive |
Business-anchor → backward-slice → 8-pattern scan → forward-propagate → risk score |
ANCHOR, SLICE |
SCAN (8 defensive patterns) + PROPAGATE |
(none — read-only) |
— |
ui |
Visual survey → 6-dim audit → diverge → fix |
SURVEY |
AUDIT (6 dims) + DIVERGE |
FIX → VERIFY |
— |
CONFIRM and VERIFY are synonymous — both refer to the post-fix validation phase. Mode workflow files use mode-specific naming; semantics are identical.
The back half is identical across all modes: GENERALIZE → DISCOVER → RECORD → END (see odyssey-base.md §Shared Back-Half).
On mode resolved: read the deferred workflow file for that mode + odyssey-base.md, then execute.
Universal flags: --mode <name> mode selector | --skip-fix audit/diagnose only, skip fix+verify | --skip-generalize skip GENERALIZE+DISCOVER | -y skip all confirmation interactions (including delegate/agent confirmations in execution phases), use default choices; decisions skipped this way are recorded as deferred; never bypasses mode ambiguity (E000), INTAKE gate blockers, escalation | -c resume the most recent unfinished Session of the SAME mode via exact Session resolution: locate it with maestro session list --json + maestro session status --session {session_id} --json (both read-only), re-attach context with maestro session resume-view and the brief-result/3.0 Resume Packet via run brief (exact invocation per run-mode.md), then continue the chain with fenced maestro run next / run check / run complete --advance. If --mode conflicts with the resumed Session's mode → E003 (mode mismatch); no history → ignore -c, create new Session | --heartbeat /loop periodic progress
Mode-scoped flags:
| Flag |
Modes |
Description |
Default |
--template <name> |
debug, planex |
Predefined strategy/criteria template |
— |
--dimensions <list> |
improve, review, ui |
Audit dimension subset |
all |
--fix-threshold <sev> |
improve, review, ui |
Severity cutoff (critical|high|medium|low|all) |
all |
--tier quick|standard|deep |
security, defensive |
Audit depth tier |
standard |
--sink-depth <list> |
defensive |
Explicit sink layer focus (1|2|3|all) |
all |
--max-iterations N |
planex |
Max verify-fix cycles before escalation |
3 |
--method agent|cli|auto |
planex |
Task execution method |
auto |
--executor <tool> |
planex |
Explicit CLI executor |
first enabled |
--skip-verify |
planex |
Skip post-execution validation gate |
false |
--skip-fix applicability: security and defensive modes ignore (read-only, no fix phase); planex skips FIX loop but retains EXECUTE+VERIFY; debug/review/improve/ui skip FIX+VERIFY/CONFIRM. --skip-fix + --skip-verify on planex = PLAN only (no execution).
Mode-scoped flags passed to inapplicable mode: emit W008 warning and ignore the flag.
Session creation: follow run-mode.md exactly. Negotiate capabilities, then use the receipt-chained self-start path: open an empty Session with participant == actor and a unique open request ID, insert odyssey-<mode> plus every mode/domain argument through fenced repeatable --arg, and dispatch it with fenced run next using a third request ID. Every mutation consumes the exact revision returned by the preceding receipt. Consume the resulting birth packet's resolved task and structured executable continuation; never pass task prose via --input. A direct machine-protocol run create is allowed only with positional domain arguments, explicit --session/--run/--step, identical participant/actor values, request ID/reason, exact CAS revision, and --input values restricted to sealed same-Session Artifact IDs.
Session: {run_dir}/outputs/
Output: session.json | evidence.ndjson | understanding.md | explore.json (debug/review only) | anchors.json (defensive only)
Output boundary: ALL session artifacts MUST target the run outputs directory ({run_dir}/outputs/) only. .workflow/state.json and all sessions/<sid>/ protocol files are runtime-owned — a workflow never writes them. Source code modifications during fix/execute phases are in-scope but MUST be committed per action. NEVER write session artifacts outside {run_dir}/outputs/.
session.json — shared core + mode fields:
{ "mode": "debug|improve|planex|review|security|defensive|ui",
"target": "", "dimensions": [],
"patterns": [], "confirmation": null, "generalization_stats": null,
"cross_phase_loops": 0 }
Each mode extends the core — see the mode's workflow file for session fields.
Commit convention: "odyssey-{mode}({slug}): {STATE} — {summary}" (mode = active mode short name; review mode uses odyssey-review).
- Evidence append-only — never delete or overwrite evidence.ndjson entries.
- Phase goal tracking — mark each goal done/failed before transition; no silent skips.
- Generalize is mandatory — GENERALIZE and DISCOVER execute unless
skip_generalize == true. Prior-phase convergence, "no findings / all verified / zero remaining," or context pressure are NOT valid skip reasons. The phase itself determines whether patterns exist.
- Zero-residual (improve/review/ui) — every finding MUST have a concrete action (fix / issue / decision). "Report and shelve" and blanket "pre-existing" skips are forbidden.
- Read-only (security, defensive) — NEVER modify source code, configuration, or dependencies. Security and defensive audits produce reports only; fixes route to
--mode improve.
- Acceptance criteria are sacred (planex) — no "close enough", no manual override without explicit escalation.
- Browser is truth (ui) — verify in real rendering, not just code review. Diverge before converge.
- Goal tracking 与 session 双写 — 各 phase 进入/退出时同步创建/更新 goal,补充 session.json 的 UI 可见进度。
| Mode |
Self-iterating stages |
| debug |
S_ARCHAEOLOGY, S_EXPLORE, S_DIAGNOSE, S_GENERALIZE |
| improve |
S_SURVEY, S_AUDIT, S_DIAGNOSE, S_GENERALIZE |
| planex |
S_PLAN, S_VERIFY, S_GENERALIZE |
| review |
S_ARCHAEOLOGY, S_EXPLORE, S_REVIEW, S_FIX, S_GENERALIZE |
| security |
S_RECON, S_SCAN, S_GENERALIZE |
| defensive |
S_ANCHOR, S_SLICE, S_SCAN, S_PROPAGATE, S_GENERALIZE |
| ui |
S_SURVEY, S_AUDIT, S_DIVERGE, S_GENERALIZE |
|
|
Shared Phase Gates (MANDATORY, BLOCKING)
- INTAKE gate: mode resolved, target/requirement resolved, SESSION_DIR created, session.json initialized (with baseline_metrics for improve; acceptance_criteria for planex), phase_goals[] derived from flags, understanding.md §1 written. BLOCKED if no target (E001) / no requirement (planex E001) / target path not found (E002) / mode unresolved (E000).
- GENERALIZE gate: ALL 3 layers (syntax/semantic/structural) attempted with evidence logged; generalization_stats written with by_layer entries for all 3 layers; generalize goal marked. Any layer not attempted = thoroughness-floor violation (BLOCKED).
- DISCOVER gate: all hits triaged with per-item classification and reason;
remaining_actionable == 0 OR loops >= max_loops with per-item reasons logged; discover goal marked. Unclassified hits = BLOCKED.
Mode-specific phase gates (Discovery, Audit, FIX, VERIFY/CONFIRM) are defined in each mode's workflow file.
1---2name: maestro-odyssey-23description: Long-running iterative cycle — one entry, seven modes (debug|improve|planex|review|security|defensive|ui). Shared archaeology/audit → fix → verify → generalize → discover → persist skeleton with mode-specific dimensions. User-invoked campaign entry; single-step fixes route via /maestro-next Arguments: <intent> --mode debug|improve|planex|review|security|defensive|ui [-y] [-c]4---56<teammate_contract>78- `background: false` is the default. Use foreground dispatch whenever the result determines the current answer or next action.9- Use `background: true` only for independent work. If this turn must consume a background result, call `observe` exactly once with `action: "wait"` and a bounded timeout before continuing; never continue independently while the result is pending.10- Otherwise end the turn and wait for the automatic `teammate-complete` notification. Do not rely on `SendMessage`, `team_msg`, or hook callbacks as completion signals.11- Never silently ignore an unfinished dispatch.1213</teammate_contract>1415<required_reading>16~/.maestro/workflows/run-mode.md17</required_reading>1819If any required file above was not expanded into context by the host, or its content is no longer in context, Read it explicitly before executing any step.2021<deferred_reading>22- [odyssey-base.md](~/.maestro/workflows/odyssey-base.md) — read after mode resolved for shared back-half (INTAKE gate → GENERALIZE → DISCOVER → RECORD → END)23- [odyssey-debug.md](~/.maestro/workflows/odyssey-debug.md) — read when mode=debug24- [odyssey-improve.md](~/.maestro/workflows/odyssey-improve.md) — read when mode=improve25- [odyssey-planex.md](~/.maestro/workflows/odyssey-planex.md) — read when mode=planex26- [odyssey-review.md](~/.maestro/workflows/odyssey-review.md) — read when mode=review27- [odyssey-security.md](~/.maestro/workflows/odyssey-security.md) — read when mode=security28- [odyssey-defensive.md](~/.maestro/workflows/odyssey-defensive.md) — read when mode=defensive29- [odyssey-ui.md](~/.maestro/workflows/odyssey-ui.md) — read when mode=ui30</deferred_reading>3132<purpose>33Long-running, evidence-driven iterative cycle. A single entry dispatches to one of seven modes; all share the same34skeleton — discovery → domain audit → fix → verify → generalize → discover siblings → persist knowledge —35and iterate exhaustively until the mode's exit condition is met or escalation is required.36</purpose>3738<mode_dispatch>3940**Mode selection precedence:** explicit `--mode <name>` > intent keyword auto-detection > [@ask] AskUserQuestion (Normal) / error E000 (`-y`).4142**Auto-detection from `<intent>` keywords** (first match wins, ordered):4344Keyword matching: case-insensitive substring match against the intent text. Multi-word keywords require all words present (not necessarily adjacent). First matching row wins (ordered by specificity).4546| Keywords in intent | Detected mode |47|--------------------|---------------|48| bug, crash, error, broken, fails, regression, race, leak, "why does" | `debug` |49| requirement, implement, build, add feature, I need to implement, I need to build, I need to add, deliver feature, user story | `planex` |50| ui, visual, layout, style, component, page, responsive, a11y, accessibility, UI design, visual design, design system, design tokens | `ui` |51| security audit, OWASP, vulnerability, CVE, secrets scan, STRIDE, threat model, supply chain, dependency audit, dependencies, supply chain audit | `security` |52| defensive programming, defensive code, exception swallowing, silent failure, fallback risk, default value risk, error suppression, 防御性编程, 防御性代码, 异常吞噬, 兜底风险 | `defensive` |53| improve, optimize, performance, refactor quality, reliability, observability | `improve` |54| review, audit, code check, check the code, inspect the code, inspect changes, "look over", zero-residual | `review` |5556Ambiguous / no match → Normal: [@ask] AskUserQuestion (7-way mode pick) | `-y`: E000.5758**Mode registry:**5960| Mode | Purpose | Discovery phases | Audit phase | Fix→verify pair | Unique states |61|------|---------|------------------|-------------|-----------------|---------------|62| `debug` | Symptom → root cause → fix → confirm | ARCHAEOLOGY, EXPLORE | DIAGNOSE (hypothesis test) | FIX → CONFIRM | ESCALATE_DIAGNOSIS |63| `improve` | 6-dimension quality audit → diagnose → fix | SURVEY | AUDIT (6 dims) + DIAGNOSE | FIX → VERIFY | ESCALATE_DIAGNOSIS |64| `planex` | Requirement → plan → execute → verify loop | (none) | PLAN + EXECUTE | (EXECUTE) → VERIFY → FIX loop | — |65| `review` | Multi-dimension deep review → zero-residual fix | ARCHAEOLOGY, EXPLORE | REVIEW (4+ dims) | FIX → CONFIRM | — |66| `security` | Read-only tiered security audit → severity matrix | RECON | SCAN (OWASP + deps + secrets + CI/CD + STRIDE + git) | (none — read-only) | — |67| `defensive` | Business-anchor → backward-slice → 8-pattern scan → forward-propagate → risk score | ANCHOR, SLICE | SCAN (8 defensive patterns) + PROPAGATE | (none — read-only) | — |68| `ui` | Visual survey → 6-dim audit → diverge → fix | SURVEY | AUDIT (6 dims) + DIVERGE | FIX → VERIFY | — |6970CONFIRM and VERIFY are synonymous — both refer to the post-fix validation phase. Mode workflow files use mode-specific naming; semantics are identical.7172The **back half is identical across all modes**: `GENERALIZE → DISCOVER → RECORD → END` (see odyssey-base.md §Shared Back-Half).7374On mode resolved: read the deferred workflow file for that mode + odyssey-base.md, then execute.7576</mode_dispatch>7778<context>79$ARGUMENTS8081**Universal flags:** `--mode <name>` mode selector | `--skip-fix` audit/diagnose only, skip fix+verify | `--skip-generalize` skip GENERALIZE+DISCOVER | `-y` skip all confirmation interactions (including delegate/agent confirmations in execution phases), use default choices; decisions skipped this way are recorded as `deferred`; never bypasses mode ambiguity (E000), INTAKE gate blockers, escalation | `-c` resume the most recent unfinished Session of the SAME mode via exact Session resolution: locate it with `maestro session list --json` + `maestro session status --session {session_id} --json` (both read-only), re-attach context with `maestro session resume-view` and the `brief-result/3.0` Resume Packet via `run brief` (exact invocation per run-mode.md), then continue the chain with fenced `maestro run next` / `run check` / `run complete --advance`. If `--mode` conflicts with the resumed Session's mode → E003 (mode mismatch); no history → ignore -c, create new Session | `--heartbeat` /loop periodic progress8283**Mode-scoped flags:**8485| Flag | Modes | Description | Default |86|------|-------|-------------|---------|87| `--template <name>` | debug, planex | Predefined strategy/criteria template | — |88| `--dimensions <list>` | improve, review, ui | Audit dimension subset | all |89| `--fix-threshold <sev>` | improve, review, ui | Severity cutoff (critical\|high\|medium\|low\|all) | all |90| `--tier quick\|standard\|deep` | security, defensive | Audit depth tier | standard |91| `--sink-depth <list>` | defensive | Explicit sink layer focus (1\|2\|3\|all) | all |92| `--max-iterations N` | planex | Max verify-fix cycles before escalation | 3 |93| `--method agent\|cli\|auto` | planex | Task execution method | auto |94| `--executor <tool>` | planex | Explicit CLI executor | first enabled |95| `--skip-verify` | planex | Skip post-execution validation gate | false |9697`--skip-fix` applicability: security and defensive modes ignore (read-only, no fix phase); planex skips FIX loop but retains EXECUTE+VERIFY; debug/review/improve/ui skip FIX+VERIFY/CONFIRM. `--skip-fix` + `--skip-verify` on planex = PLAN only (no execution).9899Mode-scoped flags passed to inapplicable mode: emit W008 warning and ignore the flag.100101**Session creation**: follow `run-mode.md` exactly. Negotiate capabilities, then use the receipt-chained self-start path: open an empty Session with `participant == actor` and a unique open request ID, insert `odyssey-<mode>` plus every mode/domain argument through fenced repeatable `--arg`, and dispatch it with fenced `run next` using a third request ID. Every mutation consumes the exact revision returned by the preceding receipt. Consume the resulting birth packet's resolved `task` and structured executable `continuation`; never pass task prose via `--input`. A direct machine-protocol `run create` is allowed only with positional domain arguments, explicit `--session`/`--run`/`--step`, identical participant/actor values, request ID/reason, exact CAS revision, and `--input` values restricted to sealed same-Session Artifact IDs.102103**Session**: `{run_dir}/outputs/`104**Output**: `session.json` | `evidence.ndjson` | `understanding.md` | `explore.json` (debug/review only) | `anchors.json` (defensive only)105106**Output boundary**: ALL session artifacts MUST target the run outputs directory (`{run_dir}/outputs/`) only. `.workflow/state.json` and all `sessions/<sid>/` protocol files are runtime-owned — a workflow never writes them. Source code modifications during fix/execute phases are in-scope but MUST be committed per action. NEVER write session artifacts outside `{run_dir}/outputs/`.107108**session.json — shared core + mode fields:**109```json110{ "mode": "debug|improve|planex|review|security|defensive|ui",111 "target": "", "dimensions": [],112 "patterns": [], "confirmation": null, "generalization_stats": null,113 "cross_phase_loops": 0 }114```115Each mode extends the core — see the mode's workflow file for **session fields**.116117**Commit convention:** `"odyssey-{mode}({slug}): {STATE} — {summary}"` (mode = active mode short name; review mode uses `odyssey-review`).118119</context>120121<invariants>122All base invariants apply (evidence append-only, session-as-state, phase goal tracking, auto-commit per action). Additionally:1231241. **Evidence append-only** — never delete or overwrite evidence.ndjson entries.1252. **Phase goal tracking** — mark each goal done/failed before transition; no silent skips.1263. **Generalize is mandatory** — GENERALIZE and DISCOVER execute unless `skip_generalize == true`. Prior-phase convergence, "no findings / all verified / zero remaining," or context pressure are NOT valid skip reasons. The phase itself determines whether patterns exist.1274. **Zero-residual** (improve/review/ui) — every finding MUST have a concrete action (fix / issue / decision). "Report and shelve" and blanket "pre-existing" skips are forbidden.1285. **Read-only** (security, defensive) — NEVER modify source code, configuration, or dependencies. Security and defensive audits produce reports only; fixes route to `--mode improve`.1296. **Acceptance criteria are sacred** (planex) — no "close enough", no manual override without explicit escalation.1307. **Browser is truth** (ui) — verify in real rendering, not just code review. Diverge before converge.1318. **Goal tracking 与 session 双写** — 各 phase 进入/退出时同步创建/更新 goal,补充 session.json 的 UI 可见进度。132</invariants>133134<task_tracking>135~/.maestro/workflows/task-tracking.md136</task_tracking>137138<self_iteration>139Self-iteration (logic in odyssey-base.md) applies to each mode's discovery + audit + GENERALIZE stages:140141| Mode | Self-iterating stages |142|------|----------------------|143| debug | S_ARCHAEOLOGY, S_EXPLORE, S_DIAGNOSE, S_GENERALIZE |144| improve | S_SURVEY, S_AUDIT, S_DIAGNOSE, S_GENERALIZE |145| planex | S_PLAN, S_VERIFY, S_GENERALIZE |146| review | S_ARCHAEOLOGY, S_EXPLORE, S_REVIEW, S_FIX, S_GENERALIZE |147| security | S_RECON, S_SCAN, S_GENERALIZE |148| defensive | S_ANCHOR, S_SLICE, S_SCAN, S_PROPAGATE, S_GENERALIZE |149| ui | S_SURVEY, S_AUDIT, S_DIVERGE, S_GENERALIZE |150</self_iteration>151152<execution>153Follow base execution discipline completely. On entry: resolve mode (§mode_dispatch), then read the deferred workflow file for that mode + odyssey-base.md, and run that mode's state machine. All modes converge on the Shared Back-Half in odyssey-base.md.154155### Shared Phase Gates (MANDATORY, BLOCKING)156157- **INTAKE gate:** mode resolved, target/requirement resolved, SESSION_DIR created, session.json initialized (with baseline_metrics for improve; acceptance_criteria for planex), phase_goals[] derived from flags, understanding.md §1 written. BLOCKED if no target (E001) / no requirement (planex E001) / target path not found (E002) / mode unresolved (E000).158- **GENERALIZE gate:** ALL 3 layers (syntax/semantic/structural) attempted with evidence logged; generalization_stats written with by_layer entries for all 3 layers; generalize goal marked. Any layer not attempted = thoroughness-floor violation (BLOCKED).159- **DISCOVER gate:** all hits triaged with per-item classification and reason; `remaining_actionable == 0` OR `loops >= max_loops` with per-item reasons logged; discover goal marked. Unclassified hits = BLOCKED.160161Mode-specific phase gates (Discovery, Audit, FIX, VERIFY/CONFIRM) are defined in each mode's workflow file.162163</execution>164165<error_codes>166| Code | Severity | Condition | Recovery |167|------|----------|-----------|----------|168| E000 | error | Mode unresolved (`-y`, ambiguous intent, no `--mode`) | Provide `--mode` |169| E001 | error | No target / no requirement (planex) / no issue (debug) | Provide target or -c |170| E002 | error | Target path not found | Check path |171| E003 | error | -c mode mismatch (resumed session is different mode) | Use correct --mode or omit -c |172| E004 | error | Mode workflow file not found (~/.maestro/workflows/odyssey-{mode}.md) | Verify workflow installation or select another mode |173| W001 | warning | No relevant git history / no dependency manifest / no design system | Proceed with defaults |174| W002 | warning | Some dimension agents failed / 3 retries exhausted | Partial coverage / INCONCLUSIVE |175| W003 | warning | Archaeology agent or delegate failure (debug/review) | Proceed with available results, log failed agent |176| W004 | warning | Generalization 0 hits after full 3-layer scan | Advance to S_RECORD (requires all 3 layers attempted with evidence) |177| W005 | warning | Pending decisions | Filter evidence phase=decision |178| W006 | warning | No CLI tools (debug/review explore) | Skip explore |179| W007 | warning | planex CLI review regression concern | Review before next iteration |180| W008 | warning | Mode-scoped flag ignored (not applicable to resolved mode) | Remove flag or use correct mode |181</error_codes>182183<success_criteria>184- [ ] Mode resolved (explicit or auto-detected); session + output files created; prior knowledge searched185- [ ] Discovery phase(s) for the mode completed with evidence (archaeology/explore/survey)186- [ ] Domain audit completed with structured findings + severity matrix (or acceptance criteria + plan for planex)187- [ ] understanding.md sections written progressively per mode188- [ ] Fix + verify/confirm (unless --skip-fix); zero-residual for improve/review/ui; all criteria pass for planex189- [ ] Read-only invariant maintained for security and defensive modes — zero source modifications190- [ ] Multi-layer generalization + discovery triage (unless --skip-generalize); every unfixed finding individually justified191- [ ] phase_goals derived, tracked, and hardened-audited; goal_mode injected via prepare goal:true; `-y` no blocking prompts192- [ ] Session resumable via -c; mode-specific completion summary emitted193</success_criteria>194195<next_step_routing>196| Condition | Next |197|-----------|------|198| Single-file mechanical fix discovered | `/maestro-companion "<fix>"` |199| Discovery issues created | `/maestro-issue list --source {mode}-odyssey` |200| Deeper debug needed (from any mode) | `/maestro-odyssey <finding> --mode debug` |201| Security findings need remediation | `/maestro-odyssey <finding> --mode improve` |202| Defensive findings need remediation | `/maestro-odyssey <finding> --mode improve` |203| Defensive root-cause needed | `/maestro-odyssey <finding> --mode debug` |204| Formal review of changes | `/maestro-odyssey <changed-files> --mode review` |205| UI-related findings | `/maestro-odyssey <component> --mode ui` |206| Document pattern | `/maestro-learn decompose <module>` |207| Second opinion | `/maestro-learn consult <understanding.md>` |208| Related question | `/maestro-learn investigate "<question>"` |209| Design/perf/arch pattern to persist | `/maestro-spec add ui\|coding\|arch "..."` |210| Pending decisions | Filter evidence phase=decision status=pending |211</next_step_routing>