@zhixuan92/multi-model-agent 3.10.4 → 3.10.6

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/README.md CHANGED
@@ -287,7 +287,7 @@ Full design rationale: [DIRECTION.md](https://github.com/zhixuan312/multi-model-
287
287
 
288
288
  ## What's new
289
289
 
290
- Latest: **3.10.4** — review stages were recording the implementer's model (V3 R3 violation root cause). Now record the actual reviewer's resolved tier + model. Plus: telemetry validation is fully warn-only events never drop, and cross-field warnings now include actual offending values (model, tokens, totals) so config issues vs lifecycle bugs are distinguishable at a glance. Full history: [CHANGELOG](https://github.com/zhixuan312/multi-model-agent/blob/master/CHANGELOG.md).
290
+ Latest: **3.10.6** — Skill docs now match executor code. Only `mma-delegate` accepts `agentType` per task every other route hardcodes its tier and rejects `agentType` with HTTP 400 (`/execute-plan` → standard; `/audit` / `/review` / `/debug` / `/verify` / `/investigate` → complex). The router skill previously claimed `mma-execute-plan` accepts `agentType` (false) and that `mma-verify` defaults to standard (also false; defaults to complex). Also added a new "Reasoning effort: auto-inferred" section documenting the `inferEffort()` heuristics. Full history: [CHANGELOG](https://github.com/zhixuan312/multi-model-agent/blob/master/CHANGELOG.md).
291
291
 
292
292
  ## Full documentation
293
293
 
@@ -8,7 +8,7 @@ when_to_use: >-
8
8
  User asks for a doc/spec/config audit OR a methodology skill
9
9
  (superpowers:dispatching-parallel-agents, /security-review) points at one AND
10
10
  mmagent is running. Audit on PROSE/SPEC docs — use mma-review for source code.
11
- version: 3.10.4
11
+ version: 3.10.6
12
12
  ---
13
13
 
14
14
  # mma-audit
@@ -57,6 +57,8 @@ Send a document or set of files to workers for structured auditing. Each file is
57
57
 
58
58
  Either `document` or `filePaths` (or both) must be provided.
59
59
 
60
+ > Worker tier for `mma-audit` is hardcoded to `complex` and is not caller-configurable. Sending `agentType` is rejected with HTTP 400.
61
+
60
62
  ## Full example
61
63
 
62
64
  ```bash
@@ -72,26 +74,42 @@ BATCH_ID=$(echo "$BATCH" | jq -r '.batchId')
72
74
 
73
75
  @include _shared/response-shape.md
74
76
 
75
- ## Reading the review verdicts (annotation model — 3.8.1+)
76
-
77
- The terminal envelope includes:
78
- - `specReviewVerdict: 'not_applicable'` read-only routes have no spec review stage.
79
- - `qualityReviewVerdict` outcome of the single annotation pass.
80
- - `roundsUsed` — `1` when reviewer ran (annotated or errored), `0` when reviewer was skipped.
81
-
82
- There is no rework loop. The reviewer annotates each finding in place and exits — never gates, never causes the worker to re-run.
83
-
84
- Action per `qualityReviewVerdict`:
85
- - `'annotated'` every finding in `findings[]` has `reviewerConfidence` (integer 0-100) and possibly `reviewerSeverity`. Sort or filter by confidence; treat low-confidence findings with skepticism.
86
- - `'skipped'` kill switch (`MMAGENT_READ_ONLY_REVIEW=disabled` or per-route `MMAGENT_READ_ONLY_REVIEW_AUDIT=disabled`) bypassed the reviewer. Findings carry no reviewer fields; treat as raw worker output.
87
- - `'error'` reviewer call or response parsing failed. Findings have no reviewer fields; fall back to caution.
88
-
89
- ### Per-finding reviewer fields
90
-
91
- Every finding the worker emits has the standard fields (`id`, `severity`, `claim`, `evidence`, `suggestion?`). After a successful annotation pass, two more fields are added:
92
-
93
- - `reviewerConfidence` (integer 0-100): how confident the reviewer is that the finding is correct, on-brief, and grounded. Use as a filter (`>=70`) or a sort key for triage.
94
- - `reviewerSeverity?` (`'high' | 'medium' | 'low'`): only present when the reviewer disagrees with the worker's `severity`. Workers tend to inflate severity; use this to dial down. Trust `reviewerSeverity` over `severity` when present.
77
+ ## Reading the findings (3.10.5+)
78
+
79
+ The terminal envelope's `results[N].annotatedFindings` is a list of structured
80
+ findings the reviewer extracted and scored from the implementer's narrative.
81
+ Every finding has the same shape:
82
+
83
+ | Field | Type | Notes |
84
+ |---|---|---|
85
+ | `id` | string | Reviewer-assigned, e.g. `F1`, `F2`. |
86
+ | `severity` | `'critical' \| 'high' \| 'medium' \| 'low'` | 4-tier. |
87
+ | `claim` | string | One-sentence summary. |
88
+ | `evidence` | string ≥20 chars | Quoted from worker output when grounded. |
89
+ | `suggestion?` | string | Optional fix recommendation. |
90
+ | `reviewerConfidence` | `number \| null` | 0–100 from the reviewer; `null` when emitted via deterministic fallback. |
91
+ | `evidenceGrounded` | boolean | True when `evidence` is a verbatim substring of worker output. |
92
+
93
+ ### Verdict states (`qualityReviewVerdict`)
94
+
95
+ - `'annotated'` every finding is structured. May be reviewer-emitted (with
96
+ numeric `reviewerConfidence`) or deterministic-fallback (with
97
+ `reviewerConfidence: null`). The route ALWAYS reaches `'annotated'` unless
98
+ the reviewer call itself fails transport.
99
+ - `'skipped'` — kill switch (`MMAGENT_READ_ONLY_REVIEW=disabled`).
100
+ - `'error'` — only when the reviewer call fails transport (network / 5xx).
101
+
102
+ ### Recommended rendering by the main agent
103
+
104
+ 1. Show ALL findings — never silently drop. Confidence and grounding are
105
+ soft signals, not gates.
106
+ 2. Default sort: severity (critical → low) then `reviewerConfidence` desc
107
+ (nulls last).
108
+ 3. `severity` is the reviewer's authoritative final value — use it directly.
109
+ 4. Mark findings with `evidenceGrounded: false` or
110
+ `reviewerConfidence < 70` as "lower-trust" (collapsed section, lighter
111
+ color, or `(low confidence)` annotation). User decides what to do.
112
+ 5. Severity-tier counts feed the dashboard via V3 `findingsBySeverity`.
95
113
 
96
114
  ## Best practices
97
115
 
@@ -12,7 +12,7 @@ when_to_use: >-
12
12
  `proposedInterpretation` is a hard gate — the batch is paused, not
13
13
  informational. The batch will not complete until the caller responds. Treating
14
14
  it as advisory is the clarification-as-info anti-pattern (AP5).
15
- version: 3.10.4
15
+ version: 3.10.6
16
16
  ---
17
17
 
18
18
  # mma-clarifications
@@ -12,7 +12,7 @@ when_to_use: >-
12
12
  Register once here, then pass the ID via `contextBlockIds` on mma-delegate /
13
13
  mma-execute-plan / mma-audit / mma-review / mma-verify / mma-debug /
14
14
  mma-investigate. Cheaper and faster than inlining the same content N times.
15
- version: 3.10.4
15
+ version: 3.10.6
16
16
  ---
17
17
 
18
18
  # mma-context-blocks
@@ -10,7 +10,7 @@ when_to_use: >-
10
10
  read files, reproduce, trace — OR a methodology skill
11
11
  (superpowers:systematic-debugging) points at the investigation step. Delegate
12
12
  the read/reproduce/trace; the main agent stays on the hypothesis and the fix.
13
- version: 3.10.4
13
+ version: 3.10.6
14
14
  ---
15
15
 
16
16
  # mma-debug
@@ -63,6 +63,8 @@ Submit a problem, context, and hypothesis to a worker for focused debugging. Unl
63
63
  | `filePaths` | string[] | no | All files investigated together (cross-file reasoning) |
64
64
  | `contextBlockIds` | string[] | no | IDs from `mma-context-blocks` (e.g. error logs, traces) |
65
65
 
66
+ > Worker tier for `mma-debug` is hardcoded to `complex` and is not caller-configurable. Sending `agentType` is rejected with HTTP 400.
67
+
66
68
  ## Full example
67
69
 
68
70
  ```bash
@@ -78,26 +80,42 @@ BATCH_ID=$(echo "$BATCH" | jq -r '.batchId')
78
80
 
79
81
  @include _shared/response-shape.md
80
82
 
81
- ## Reading the review verdicts (annotation model — 3.8.1+)
82
-
83
- The terminal envelope includes:
84
- - `specReviewVerdict: 'not_applicable'` read-only routes have no spec review stage.
85
- - `qualityReviewVerdict` outcome of the single annotation pass.
86
- - `roundsUsed` — `1` when reviewer ran (annotated or errored), `0` when reviewer was skipped.
87
-
88
- There is no rework loop. The reviewer annotates each finding in place and exits — never gates, never causes the worker to re-run.
89
-
90
- Action per `qualityReviewVerdict`:
91
- - `'annotated'` every finding in `findings[]` has `reviewerConfidence` (integer 0-100) and possibly `reviewerSeverity`. Sort or filter by confidence; treat low-confidence findings with skepticism.
92
- - `'skipped'` kill switch (`MMAGENT_READ_ONLY_REVIEW=disabled` or per-route `MMAGENT_READ_ONLY_REVIEW_DEBUG=disabled`) bypassed the reviewer. Findings carry no reviewer fields; treat as raw worker output.
93
- - `'error'` reviewer call or response parsing failed. Findings have no reviewer fields; fall back to caution.
94
-
95
- ### Per-finding reviewer fields
96
-
97
- Every finding the worker emits has the standard fields (`id`, `severity`, `claim`, `evidence`, `suggestion?`). After a successful annotation pass, two more fields are added:
98
-
99
- - `reviewerConfidence` (integer 0-100): how confident the reviewer is that the finding is correct, on-brief, and grounded. Use as a filter (`>=70`) or a sort key for triage.
100
- - `reviewerSeverity?` (`'high' | 'medium' | 'low'`): only present when the reviewer disagrees with the worker's `severity`. Workers tend to inflate severity; use this to dial down. Trust `reviewerSeverity` over `severity` when present.
83
+ ## Reading the findings (3.10.5+)
84
+
85
+ The terminal envelope's `results[N].annotatedFindings` is a list of structured
86
+ findings the reviewer extracted and scored from the implementer's narrative.
87
+ Every finding has the same shape:
88
+
89
+ | Field | Type | Notes |
90
+ |---|---|---|
91
+ | `id` | string | Reviewer-assigned, e.g. `F1`, `F2`. |
92
+ | `severity` | `'critical' \| 'high' \| 'medium' \| 'low'` | 4-tier. |
93
+ | `claim` | string | One-sentence summary. |
94
+ | `evidence` | string ≥20 chars | Quoted from worker output when grounded. |
95
+ | `suggestion?` | string | Optional fix recommendation. |
96
+ | `reviewerConfidence` | `number \| null` | 0–100 from the reviewer; `null` when emitted via deterministic fallback. |
97
+ | `evidenceGrounded` | boolean | True when `evidence` is a verbatim substring of worker output. |
98
+
99
+ ### Verdict states (`qualityReviewVerdict`)
100
+
101
+ - `'annotated'` every finding is structured. May be reviewer-emitted (with
102
+ numeric `reviewerConfidence`) or deterministic-fallback (with
103
+ `reviewerConfidence: null`). The route ALWAYS reaches `'annotated'` unless
104
+ the reviewer call itself fails transport.
105
+ - `'skipped'` — kill switch (`MMAGENT_READ_ONLY_REVIEW=disabled`).
106
+ - `'error'` — only when the reviewer call fails transport (network / 5xx).
107
+
108
+ ### Recommended rendering by the main agent
109
+
110
+ 1. Show ALL findings — never silently drop. Confidence and grounding are
111
+ soft signals, not gates.
112
+ 2. Default sort: severity (critical → low) then `reviewerConfidence` desc
113
+ (nulls last).
114
+ 3. `severity` is the reviewer's authoritative final value — use it directly.
115
+ 4. Mark findings with `evidenceGrounded: false` or
116
+ `reviewerConfidence < 70` as "lower-trust" (collapsed section, lighter
117
+ color, or `(low confidence)` annotation). User decides what to do.
118
+ 5. Severity-tier counts feed the dashboard via V3 `findingsBySeverity`.
101
119
 
102
120
  ## Best practices
103
121
 
@@ -11,7 +11,7 @@ when_to_use: >-
11
11
  and keep main context free. If a plan file exists → use mma-execute-plan. If
12
12
  the task is audit / review / verify / debug / investigate → use the matching
13
13
  specialized skill.
14
- version: 3.10.4
14
+ version: 3.10.6
15
15
  ---
16
16
 
17
17
  # mma-delegate
@@ -10,7 +10,7 @@ when_to_use: >-
10
10
  superpowers:subagent-driven-development / superpowers:executing-plans —
11
11
  workers are cheaper and don't pollute main context. Task descriptors must
12
12
  match plan headings verbatim.
13
- version: 3.10.4
13
+ version: 3.10.6
14
14
  ---
15
15
 
16
16
  # mma-execute-plan
@@ -68,7 +68,7 @@ Dispatch named tasks from a plan file to workers. Each `tasks` string must match
68
68
 
69
69
  @include _shared/verify-and-review.md
70
70
 
71
- > **No `agentType` here.** Worker tier is set by the plan and per-route defaults. For ad-hoc work where you need direct tier control, use `mma-delegate`.
71
+ > **No `agentType` here.** Worker tier is hardcoded to `standard` for every plan task; sending `agentType` (top-level or per-task) is rejected with HTTP 400. For tasks that need `complex` tier, dispatch via `mma-delegate` with the plan task as the prompt and `agentType: "complex"`.
72
72
 
73
73
  If the batch reaches `awaiting_clarification`, use `mma-clarifications` to confirm or correct the proposed interpretation.
74
74
 
@@ -12,7 +12,7 @@ when_to_use: >-
12
12
  git-history queries. OR you are about to read 3+ files / run any grep in main
13
13
  context — that's the inline-labor-leakage anti-pattern (AP2); delegate to this
14
14
  skill instead.
15
- version: 3.10.4
15
+ version: 3.10.6
16
16
  ---
17
17
 
18
18
  # mma-investigate
@@ -124,26 +124,42 @@ Each task carries an `investigation` field on its per-task report:
124
124
 
125
125
  `workerStatus` is one of `done`, `done_with_concerns`, `needs_context`, `blocked`. When `done_with_concerns`, the per-task report carries `incompleteReason` (`turn_cap`, `cost_cap`, `timeout`, or `missing_sections`). When `needs_context`, the worker flagged a `[needs_context]` bullet under `## Unresolved` — re-dispatch with extra context (anchor paths, a context block, or a clarification turn).
126
126
 
127
- ## Reading the review verdicts (annotation model — 3.8.1+)
128
-
129
- The terminal envelope includes:
130
- - `specReviewVerdict: 'not_applicable'` read-only routes have no spec review stage.
131
- - `qualityReviewVerdict` outcome of the single annotation pass.
132
- - `roundsUsed` — `1` when reviewer ran (annotated or errored), `0` when reviewer was skipped.
133
-
134
- There is no rework loop. The reviewer annotates each finding in place and exits — never gates, never causes the worker to re-run.
135
-
136
- Action per `qualityReviewVerdict`:
137
- - `'annotated'` every finding in `findings[]` has `reviewerConfidence` (integer 0-100) and possibly `reviewerSeverity`. Sort or filter by confidence; treat low-confidence findings with skepticism.
138
- - `'skipped'` kill switch (`MMAGENT_READ_ONLY_REVIEW=disabled` or per-route `MMAGENT_READ_ONLY_REVIEW_INVESTIGATE=disabled`) bypassed the reviewer. Findings carry no reviewer fields; treat as raw worker output.
139
- - `'error'` reviewer call or response parsing failed. Findings have no reviewer fields; fall back to caution.
140
-
141
- ### Per-finding reviewer fields
142
-
143
- Every finding the worker emits has the standard fields (`id`, `severity`, `claim`, `evidence`, `suggestion?`). After a successful annotation pass, two more fields are added:
144
-
145
- - `reviewerConfidence` (integer 0-100): how confident the reviewer is that the finding is correct, on-brief, and grounded. Use as a filter (`>=70`) or a sort key for triage.
146
- - `reviewerSeverity?` (`'high' | 'medium' | 'low'`): only present when the reviewer disagrees with the worker's `severity`. Workers tend to inflate severity; use this to dial down. Trust `reviewerSeverity` over `severity` when present.
127
+ ## Reading the findings (3.10.5+)
128
+
129
+ The terminal envelope's `results[N].annotatedFindings` is a list of structured
130
+ findings the reviewer extracted and scored from the implementer's narrative.
131
+ Every finding has the same shape:
132
+
133
+ | Field | Type | Notes |
134
+ |---|---|---|
135
+ | `id` | string | Reviewer-assigned, e.g. `F1`, `F2`. |
136
+ | `severity` | `'critical' \| 'high' \| 'medium' \| 'low'` | 4-tier. |
137
+ | `claim` | string | One-sentence summary. |
138
+ | `evidence` | string ≥20 chars | Quoted from worker output when grounded. |
139
+ | `suggestion?` | string | Optional fix recommendation. |
140
+ | `reviewerConfidence` | `number \| null` | 0–100 from the reviewer; `null` when emitted via deterministic fallback. |
141
+ | `evidenceGrounded` | boolean | True when `evidence` is a verbatim substring of worker output. |
142
+
143
+ ### Verdict states (`qualityReviewVerdict`)
144
+
145
+ - `'annotated'` every finding is structured. May be reviewer-emitted (with
146
+ numeric `reviewerConfidence`) or deterministic-fallback (with
147
+ `reviewerConfidence: null`). The route ALWAYS reaches `'annotated'` unless
148
+ the reviewer call itself fails transport.
149
+ - `'skipped'` — kill switch (`MMAGENT_READ_ONLY_REVIEW=disabled`).
150
+ - `'error'` — only when the reviewer call fails transport (network / 5xx).
151
+
152
+ ### Recommended rendering by the main agent
153
+
154
+ 1. Show ALL findings — never silently drop. Confidence and grounding are
155
+ soft signals, not gates.
156
+ 2. Default sort: severity (critical → low) then `reviewerConfidence` desc
157
+ (nulls last).
158
+ 3. `severity` is the reviewer's authoritative final value — use it directly.
159
+ 4. Mark findings with `evidenceGrounded: false` or
160
+ `reviewerConfidence < 70` as "lower-trust" (collapsed section, lighter
161
+ color, or `(low confidence)` annotation). User decides what to do.
162
+ 5. Severity-tier counts feed the dashboard via V3 `findingsBySeverity`.
147
163
 
148
164
  ## Best practices
149
165
 
@@ -10,7 +10,7 @@ when_to_use: >-
10
10
  you want to re-try the failed indices only. Prefer this over re-dispatching
11
11
  the whole batch or inline-retrying — it's idempotent and preserves the
12
12
  original batch's diagnostics.
13
- version: 3.10.4
13
+ version: 3.10.6
14
14
  ---
15
15
 
16
16
  # mma-retry
@@ -10,7 +10,7 @@ when_to_use: >-
10
10
  AND mmagent is running. Delegate so each file reviews on its own worker; the
11
11
  main agent only decides what to merge. Review on SOURCE CODE — use mma-audit
12
12
  for prose specs / configs.
13
- version: 3.10.4
13
+ version: 3.10.6
14
14
  ---
15
15
 
16
16
  # mma-review
@@ -60,6 +60,8 @@ Send code files to workers for structured review. Each file is reviewed independ
60
60
 
61
61
  Either `code` or `filePaths` (or both) must be provided.
62
62
 
63
+ > Worker tier for `mma-review` is hardcoded to `complex` and is not caller-configurable. Sending `agentType` is rejected with HTTP 400.
64
+
63
65
  ## Full example
64
66
 
65
67
  ```bash
@@ -75,26 +77,42 @@ BATCH_ID=$(echo "$BATCH" | jq -r '.batchId')
75
77
 
76
78
  @include _shared/response-shape.md
77
79
 
78
- ## Reading the review verdicts (annotation model — 3.8.1+)
79
-
80
- The terminal envelope includes:
81
- - `specReviewVerdict: 'not_applicable'` read-only routes have no spec review stage.
82
- - `qualityReviewVerdict` outcome of the single annotation pass.
83
- - `roundsUsed` — `1` when reviewer ran (annotated or errored), `0` when reviewer was skipped.
84
-
85
- There is no rework loop. The reviewer annotates each finding in place and exits — never gates, never causes the worker to re-run.
86
-
87
- Action per `qualityReviewVerdict`:
88
- - `'annotated'` every finding in `findings[]` has `reviewerConfidence` (integer 0-100) and possibly `reviewerSeverity`. Sort or filter by confidence; treat low-confidence findings with skepticism.
89
- - `'skipped'` kill switch (`MMAGENT_READ_ONLY_REVIEW=disabled` or per-route `MMAGENT_READ_ONLY_REVIEW_REVIEW=disabled`) bypassed the reviewer. Findings carry no reviewer fields; treat as raw worker output.
90
- - `'error'` reviewer call or response parsing failed. Findings have no reviewer fields; fall back to caution.
91
-
92
- ### Per-finding reviewer fields
93
-
94
- Every finding the worker emits has the standard fields (`id`, `severity`, `claim`, `evidence`, `suggestion?`). After a successful annotation pass, two more fields are added:
95
-
96
- - `reviewerConfidence` (integer 0-100): how confident the reviewer is that the finding is correct, on-brief, and grounded. Use as a filter (`>=70`) or a sort key for triage.
97
- - `reviewerSeverity?` (`'high' | 'medium' | 'low'`): only present when the reviewer disagrees with the worker's `severity`. Workers tend to inflate severity; use this to dial down. Trust `reviewerSeverity` over `severity` when present.
80
+ ## Reading the findings (3.10.5+)
81
+
82
+ The terminal envelope's `results[N].annotatedFindings` is a list of structured
83
+ findings the reviewer extracted and scored from the implementer's narrative.
84
+ Every finding has the same shape:
85
+
86
+ | Field | Type | Notes |
87
+ |---|---|---|
88
+ | `id` | string | Reviewer-assigned, e.g. `F1`, `F2`. |
89
+ | `severity` | `'critical' \| 'high' \| 'medium' \| 'low'` | 4-tier. |
90
+ | `claim` | string | One-sentence summary. |
91
+ | `evidence` | string ≥20 chars | Quoted from worker output when grounded. |
92
+ | `suggestion?` | string | Optional fix recommendation. |
93
+ | `reviewerConfidence` | `number \| null` | 0–100 from the reviewer; `null` when emitted via deterministic fallback. |
94
+ | `evidenceGrounded` | boolean | True when `evidence` is a verbatim substring of worker output. |
95
+
96
+ ### Verdict states (`qualityReviewVerdict`)
97
+
98
+ - `'annotated'` every finding is structured. May be reviewer-emitted (with
99
+ numeric `reviewerConfidence`) or deterministic-fallback (with
100
+ `reviewerConfidence: null`). The route ALWAYS reaches `'annotated'` unless
101
+ the reviewer call itself fails transport.
102
+ - `'skipped'` — kill switch (`MMAGENT_READ_ONLY_REVIEW=disabled`).
103
+ - `'error'` — only when the reviewer call fails transport (network / 5xx).
104
+
105
+ ### Recommended rendering by the main agent
106
+
107
+ 1. Show ALL findings — never silently drop. Confidence and grounding are
108
+ soft signals, not gates.
109
+ 2. Default sort: severity (critical → low) then `reviewerConfidence` desc
110
+ (nulls last).
111
+ 3. `severity` is the reviewer's authoritative final value — use it directly.
112
+ 4. Mark findings with `evidenceGrounded: false` or
113
+ `reviewerConfidence < 70` as "lower-trust" (collapsed section, lighter
114
+ color, or `(low confidence)` annotation). User decides what to do.
115
+ 5. Severity-tier counts feed the dashboard via V3 `findingsBySeverity`.
98
116
 
99
117
  ## Best practices
100
118
 
@@ -10,7 +10,7 @@ when_to_use: >-
10
10
  against implemented work BEFORE claiming success. Delegate so each checklist
11
11
  item gets independent evidence-gathering on a worker. Use this BEFORE saying
12
12
  "done" — never after.
13
- version: 3.10.4
13
+ version: 3.10.6
14
14
  ---
15
15
 
16
16
  # mma-verify
@@ -61,6 +61,8 @@ Submit work product and a checklist to workers for independent verification. Eac
61
61
  | `filePaths` | string[] | no | Files to verify against (workers can read them) |
62
62
  | `contextBlockIds` | string[] | no | IDs from `mma-context-blocks` (e.g. the spec the work was supposed to satisfy) |
63
63
 
64
+ > Worker tier for `mma-verify` is hardcoded to `complex` and is not caller-configurable. Sending `agentType` is rejected with HTTP 400.
65
+
64
66
  ## Full example
65
67
 
66
68
  ```bash
@@ -76,26 +78,42 @@ BATCH_ID=$(echo "$BATCH" | jq -r '.batchId')
76
78
 
77
79
  @include _shared/response-shape.md
78
80
 
79
- ## Reading the review verdicts (annotation model — 3.8.1+)
80
-
81
- The terminal envelope includes:
82
- - `specReviewVerdict: 'not_applicable'` read-only routes have no spec review stage.
83
- - `qualityReviewVerdict` outcome of the single annotation pass.
84
- - `roundsUsed` — `1` when reviewer ran (annotated or errored), `0` when reviewer was skipped.
85
-
86
- There is no rework loop. The reviewer annotates each finding in place and exits — never gates, never causes the worker to re-run.
87
-
88
- Action per `qualityReviewVerdict`:
89
- - `'annotated'` every finding in `findings[]` has `reviewerConfidence` (integer 0-100) and possibly `reviewerSeverity`. Sort or filter by confidence; treat low-confidence findings with skepticism.
90
- - `'skipped'` kill switch (`MMAGENT_READ_ONLY_REVIEW=disabled` or per-route `MMAGENT_READ_ONLY_REVIEW_VERIFY=disabled`) bypassed the reviewer. Findings carry no reviewer fields; treat as raw worker output.
91
- - `'error'` reviewer call or response parsing failed. Findings have no reviewer fields; fall back to caution.
92
-
93
- ### Per-finding reviewer fields
94
-
95
- Every finding the worker emits has the standard fields (`id`, `severity`, `claim`, `evidence`, `suggestion?`). After a successful annotation pass, two more fields are added:
96
-
97
- - `reviewerConfidence` (integer 0-100): how confident the reviewer is that the finding is correct, on-brief, and grounded. Use as a filter (`>=70`) or a sort key for triage.
98
- - `reviewerSeverity?` (`'high' | 'medium' | 'low'`): only present when the reviewer disagrees with the worker's `severity`. Workers tend to inflate severity; use this to dial down. Trust `reviewerSeverity` over `severity` when present.
81
+ ## Reading the findings (3.10.5+)
82
+
83
+ The terminal envelope's `results[N].annotatedFindings` is a list of structured
84
+ findings the reviewer extracted and scored from the implementer's narrative.
85
+ Every finding has the same shape:
86
+
87
+ | Field | Type | Notes |
88
+ |---|---|---|
89
+ | `id` | string | Reviewer-assigned, e.g. `F1`, `F2`. |
90
+ | `severity` | `'critical' \| 'high' \| 'medium' \| 'low'` | 4-tier. |
91
+ | `claim` | string | One-sentence summary. |
92
+ | `evidence` | string ≥20 chars | Quoted from worker output when grounded. |
93
+ | `suggestion?` | string | Optional fix recommendation. |
94
+ | `reviewerConfidence` | `number \| null` | 0–100 from the reviewer; `null` when emitted via deterministic fallback. |
95
+ | `evidenceGrounded` | boolean | True when `evidence` is a verbatim substring of worker output. |
96
+
97
+ ### Verdict states (`qualityReviewVerdict`)
98
+
99
+ - `'annotated'` every finding is structured. May be reviewer-emitted (with
100
+ numeric `reviewerConfidence`) or deterministic-fallback (with
101
+ `reviewerConfidence: null`). The route ALWAYS reaches `'annotated'` unless
102
+ the reviewer call itself fails transport.
103
+ - `'skipped'` — kill switch (`MMAGENT_READ_ONLY_REVIEW=disabled`).
104
+ - `'error'` — only when the reviewer call fails transport (network / 5xx).
105
+
106
+ ### Recommended rendering by the main agent
107
+
108
+ 1. Show ALL findings — never silently drop. Confidence and grounding are
109
+ soft signals, not gates.
110
+ 2. Default sort: severity (critical → low) then `reviewerConfidence` desc
111
+ (nulls last).
112
+ 3. `severity` is the reviewer's authoritative final value — use it directly.
113
+ 4. Mark findings with `evidenceGrounded: false` or
114
+ `reviewerConfidence < 70` as "lower-trust" (collapsed section, lighter
115
+ color, or `(low confidence)` annotation). User decides what to do.
116
+ 5. Severity-tier counts feed the dashboard via V3 `findingsBySeverity`.
99
117
 
100
118
  ## Best practices
101
119
 
@@ -11,7 +11,7 @@ when_to_use: >-
11
11
  tasks — AND mmagent is running. Read this once, pick the matching mma-* skill,
12
12
  and delegate there. Applies equally whether the user invoked a superpowers
13
13
  methodology skill or asked directly.
14
- version: 3.10.4
14
+ version: 3.10.6
15
15
  ---
16
16
 
17
17
  # multi-model-agent (router)
@@ -156,13 +156,34 @@ Every request requires `Authorization: Bearer $MMAGENT_AUTH_TOKEN`. The token ro
156
156
 
157
157
  ## Worker tier: `agentType`
158
158
 
159
- `mma-delegate` and `mma-execute-plan` accept `agentType: "standard" | "complex"`. Default is `"standard"` (cheaper, faster). Pick `"complex"` when:
159
+ Only `mma-delegate` accepts `agentType: "standard" | "complex"` per task — default `"standard"` (cheaper, faster). Pick `"complex"` when:
160
160
 
161
161
  - The task touches many files or requires multi-step reasoning a standard-tier model cannot hold in context.
162
162
  - A prior standard run came back with `filesWritten: 0` or `incompleteReason: "turn_cap"` / `"cost_cap"` / `"timeout"`.
163
163
  - The task is security-sensitive or ambiguous enough that being wrong is costly.
164
164
 
165
- `mma-audit`, `mma-review`, `mma-debug`, `mma-investigate` already default to complex; `mma-verify` already defaults to standard. These are not caller-configurable.
165
+ Every other route hardcodes its tier and rejects `agentType` with HTTP 400:
166
+
167
+ | Route | Hardcoded tier |
168
+ |---|---|
169
+ | `mma-execute-plan` | `standard` |
170
+ | `mma-audit` | `complex` |
171
+ | `mma-review` | `complex` |
172
+ | `mma-debug` | `complex` |
173
+ | `mma-verify` | `complex` |
174
+ | `mma-investigate` | `complex` |
175
+
176
+ If you need `complex` tier on plan-style work, dispatch via `mma-delegate` with the plan task as the prompt and `agentType: "complex"`.
177
+
178
+ ## Reasoning effort: auto-inferred
179
+
180
+ Independent of tier, every task runs through `inferEffort(prompt)` (`run-tasks/index.ts`) when `effort` is undefined:
181
+
182
+ - Code block > 20 lines in the prompt → `low` (treated as exact-write).
183
+ - File path + action verb (`edit`/`modify`/`update`/`fix`/`refactor`/`replace`) → `medium`.
184
+ - Otherwise → falls through to provider config default.
185
+
186
+ This is automatic and not caller-overridable from any `mma-*` skill — it shapes how hard the worker thinks within its tier.
166
187
 
167
188
  ## General flow
168
189
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zhixuan92/multi-model-agent",
3
- "version": "3.10.4",
3
+ "version": "3.10.6",
4
4
  "type": "module",
5
5
  "license": "MIT",
6
6
  "description": "Standalone HTTP server for multi-model-agent. Routes tool-invocation work to Claude, Codex, or OpenAI-compatible sub-agents with async-polling REST dispatch and installable skills for Claude Code, Gemini CLI, Codex CLI, and Cursor.",
@@ -52,7 +52,7 @@
52
52
  },
53
53
  "dependencies": {
54
54
  "@asteasolutions/zod-to-openapi": "^8.5.0",
55
- "@zhixuan92/multi-model-agent-core": "^3.10.4",
55
+ "@zhixuan92/multi-model-agent-core": "^3.10.6",
56
56
  "gray-matter": "^4.0.3",
57
57
  "minimist": "^1.2.8",
58
58
  "proper-lockfile": "^4.1.2",