@iamu-dev/iamu 0.3.0-beta.0 → 0.3.0-beta.2

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.
@@ -103,31 +103,31 @@ Ask the user how they would like to triage:
103
103
  2. "Focus only on Critical findings (<C> items)"
104
104
  3. "Review by scenario group: <Top Scenario>"
105
105
  - Otherwise (in CLI or text-only environments):
106
-
107
- How would you like to triage these <N> open findings?
108
- 1. [Recommended] Walk through findings one by one
109
- 2. Focus only on Critical findings (<C> items)
110
- 3. Review by scenario group: <Top Scenario>
111
-
112
- Reply '1' to walk through all [default], select 2-3, or enter a finding number/slug:
106
+ How would you like to triage these <N> open findings? I recommend walking through findings one by one.
107
+ Proceeding with one-by-one triage. (Say "critical only", specify a scenario group, or enter a finding number/slug).
113
108
 
114
109
  ### 3. Direct triage: review one finding
115
110
 
116
111
  Read the finding file at `iamu/findings/<slug>.md`. Parse the YAML frontmatter (`severity`, `type`, `title`, `ui_fact`, `consequence`, `persona`, `walkthrough_step_id`, `screen_title`, `page_url`, `run`) and markdown body (description and recommendation).
117
112
 
118
- Synthesize a comprehensive, dashboard-aligned triage summary. Do NOT force an artificial single `Source: file:line` (UX friction and user blockers often span entire flows, API errors, or policy). Instead, present:
113
+ Synthesize a scannable triage summary. Do NOT output an undifferentiated wall of bullets or academic schema labels like "UI Fact:". The reviewer must be able to parse **What is broken** and **What to fix** in under 3 seconds.
119
114
 
115
+ Format the visible finding in chat:
116
+
117
+ ```markdown
118
+ ### Finding #<N>/<total> [<SEVERITY>] — <title>
119
+ > **Where:** `<Screen title or URL>` (Step <N>) · **Persona:** <Persona Name> (<Role>)
120
+ > **Evidence:** [step-<N>.png](iamu/.runs/<run>/screenshots/step-<N>.png) · [View in Cloud Walkthrough](<url from iamu open <run-id> --print>)
121
+
122
+ **❌ Problem:**
123
+ <What went wrong on screen and why it hinders the persona (synthesizing ui_fact and consequence in 1–2 clear, direct sentences)>
124
+
125
+ **💡 Recommendation:**
126
+ <Concrete fix proposal from finding body>
120
127
  ```
121
- Finding <N>/<total>: [<SEVERITY> · <type>] <title>
122
- • Persona: <Persona Name> (<Role>) · <Screen title or URL, Step N>
123
- • UI Fact: <What the UI showed or did (ui_fact)>
124
- • Consequence: <Impact on the persona completing their task (consequence)>
125
- • Agent Insight: <1–2 plain-language sentences synthesizing why this happens and what it means in context>
126
- • Recommendation: <Concrete fix proposal from finding body>
127
- • Evidence: <iamu/.runs/<run>/screenshots/step-<N>.png> [Dashboard](<url if cloud_linked>)
128
- ```
128
+ *(For `type: "helps"` findings, omit `**❌ Problem:**` and `**💡 Recommendation:**`; render `**✓ Strength:** <Observation>`)*.
129
129
 
130
- If the project is cloud-linked, include the link to the finding in Iamu Cloud (from `iamu open --print`).
130
+ If the project is cloud-linked, include the direct link to the walkthrough in Iamu Cloud (from `iamu open <run-id> --print`).
131
131
 
132
132
  Emit this card visibly into the conversation.
133
133
 
@@ -135,40 +135,20 @@ Emit this card visibly into the conversation.
135
135
 
136
136
  Every finding must land on a decision — never silently skip. Match the user's intent to the closest option.
137
137
 
138
- **CRITICAL: Embed Full Context in Interactive Prompt Modals:**
139
- Host interactive tools (e.g. `ask_question`, `ask_followup_question`) render a modal that obscures the terminal and displays ONLY the tool's `question` argument. **You must embed the complete finding summary inside the `question` argument** so the reviewer has full context directly in the dialog without having to close the modal.
138
+ **Dual-Surface Triage Prompting (Sequencing Rule):**
139
+ You MUST output the rich markdown finding card to the chat stream FIRST. In the SAME turn, invoke `ask_question`:
140
140
 
141
141
  - If your environment provides an interactive user-prompt tool (e.g. `ask_question`, `ask_followup_question`), invoke it:
142
- - **Question:**
143
- """
144
- Finding #<N>/<total>: <title>
145
-
146
- • Impact: [<SEVERITY> · <type>]
147
- • Persona: <Persona Name> (<Role>) · <Screen title or URL, Step N>
148
- • UI Fact: <ui_fact>
149
- • Consequence: <consequence>
150
- • Agent Insight: <1–2 sentences explaining why this happens in simple terms>
151
- • Recommendation: <concrete recommendation>
152
- • Evidence: <screenshot path, local file link, and cloud dashboard link if linked>
153
-
154
- How should we triage this finding?
155
- """
142
+ - **Question:** "Finding #<N>/<total> [<SEVERITY>]: <title> on <Screen title or URL, Step N> — How to triage?"
156
143
  - **Options:**
157
- 1. "[Recommended] Queue to fix (mark for fix & continue triage)"
158
- 2. "Dismiss / Won't fix (record reason & walker guidance rule)"
159
- 3. "Design change needed (open issue / design doc)"
160
- 4. "Defer (revisit in later milestone)"
144
+ 1. "[Recommended] Queue to fix (<brief 3-5 word fix summary>)"
145
+ 2. "Queue all remaining recommended fixes (batch accept)"
146
+ 3. "Dismiss / Skip (<brief reason if obvious, e.g. keep current design>)"
147
+ 4. "Discuss / Explore trade-offs"
161
148
  5. "Fix immediately (leave triage now)"
162
- - Otherwise (in CLI or text-only environments):
163
-
164
- Triage Finding #<N>/<total>: '<finding title>'
165
- 1. [Recommended] Queue to fix (mark for fix & continue triage)
166
- 2. Dismiss / Won't fix (record reason & walker guidance rule)
167
- 3. Design change needed (open issue / design doc)
168
- 4. Defer (revisit in later milestone)
169
- 5. Fix immediately (leave triage now)
170
-
171
- Reply '1' to queue fix [default], enter 2-5, or describe your decision:
149
+ - Otherwise (CLI / text-only conversational fallback):
150
+ > **Recommended Action:** Queue to fix (<brief 3-5 word fix summary>).
151
+ > Say **"queue"** (or **"queue all"**), **"dismiss"** (to teach a rule), or **"discuss"** to explore trade-offs.
172
152
 
173
153
  Record the decision with `iamu triage` — it sets `triage_status` and `triage_note` in `iamu/findings/<slug>.md`, and for a dismissal it also teaches the next walk:
174
154
 
@@ -183,6 +163,10 @@ triage_status: addressed
183
163
  triage_note: "Made handoff notes optional on /sv/handoff; verified on screen."
184
164
  ```
185
165
 
166
+ - **Discuss / Explore trade-offs (Conversational Dialogue Mode — NO MODAL LOOPS)** → when the user chooses "Discuss", asks a question, or wants to explore architectural trade-offs:
167
+ **DO NOT invoke `ask_question` or present multiple-choice menus.** Stay in natural conversational chat as a senior pair programmer. Answer follow-up questions, inspect code, benchmark against competitors, and discuss options in plain markdown. Converse naturally back and forth until you reach a conclusion together.
168
+ Once the user says "queue it", "dismiss it", "fix it now", or "let's do that", execute `iamu triage`, confirm in 1 line: "✓ Decision recorded. Ready for finding #<N+1>?", and immediately emit Finding #<N+1> to chat with its triage prompt. Do NOT trap the user with modal dialogs after each conversational turn.
169
+
186
170
  - **Queue to fix [Recommended in list-mode]** → add to the session's fix queue. Tell the user in 1 line: "✓ Queued for fix. Advancing to next finding..." and loop to the next finding. Complete the triage queue across all findings first.
187
171
 
188
172
  - **Fix immediately (leave triage now)** → the change is small, one-or-two files, and user explicitly chose to leave triage now. Make the edit, verify it loads (if a dev server is running, open the affected screen and check), then record: `iamu triage <slug> --status addressed --note "<one-line change summary>"`. Do not close a finding as addressed before the change lands and is inspected. Tell the user the fix now awaits a re-run: only a later walkthrough of the scenario turns it verified.
@@ -193,12 +177,19 @@ triage_note: "Made handoff notes optional on /sv/handoff; verified on screen."
193
177
 
194
178
  - **Won't fix (accepted trade-off)** → the problem is real but the team accepts it. `iamu triage <slug> --status wont_fix --note "<the trade-off>"`. It stays out of future walks' dismissed list only as a known issue — no guidance rule is written.
195
179
 
196
- - **Not relevant / walker got it wrong** → the finding should never have been reported. Ask which, because they teach different things:
197
- - *Not relevant* (by design, out of scope): `iamu triage <slug> --status dismissed --reason not_relevant --note "<why it is not a problem>"`.
198
- - *Walker error* (the walker misread the screen): `iamu triage <slug> --status dismissed --reason walker_error --note "<what it misread>"`.
180
+ - **Not relevant / walker got it wrong (Load-Bearing Guidance Learning)** → the finding should never have been reported. **Never infer the reason silently.** Always ask the user:
181
+ > "To teach future walkthroughs what not to report, why should this be dismissed?
182
+ > • **By design / intended behavior:** (Why this pattern is expected)
183
+ > • **Walker error:** (What the walker misread or did wrong)
184
+ > • **Out of scope:** (Non-issue for this product/flow)
185
+ > What specific rule should future walkers follow?"
186
+
187
+ Once the user provides their rationale:
188
+ - *Not relevant* (by design, out of scope): `iamu triage <slug> --status dismissed --reason not_relevant --note "<why it is not a problem>" --rule "<rule string>"`.
189
+ - *Walker error* (the walker misread the screen): `iamu triage <slug> --status dismissed --reason walker_error --note "<what it misread>" --rule "<rule string>"`.
199
190
  - *Duplicate* of another finding: `--reason duplicate --note "Duplicate of <slug>"` (no rule is written).
200
191
 
201
- Not relevant and walker error write a **tester guidance rule** to `iamu/guidance/<slug>.md` that every later walker reads (and the matcher uses to flag repeats). The rule text defaults to "Don't report: <title>"; pass `--rule "<one sentence the walker can act on>"` when the title is too narrow or too broad. The rule applies to the whole project unless you pass `--scope outline` or `--scope capability` — narrow it when the finding is only irrelevant in this situation. Several findings dismissed for the same reason go in one call and share one rule. **Tell the user: "Dismissed — future walkthroughs are told not to report this"** and name the rule file. One-word notes ("nope") degrade future runs — name the reason specifically.
192
+ Not relevant and walker error write a **tester guidance rule** to `iamu/guidance/<slug>.md` that every later walker reads (and the matcher uses to flag repeats). The rule text defaults to "Don't report: <title>"; pass `--rule "<one sentence the walker can act on>"` when the title is too narrow or too broad. The rule applies to the whole project unless you pass `--scope outline` or `--scope capability` — narrow it when the finding is only irrelevant in this situation. Several findings dismissed for the same reason go in one call and share one rule. **Tell the user: "✓ Dismissed (<reason>) — Guidance rule taught to future walks in iamu/guidance/<slug>.md: '<rule string>'."** One-word notes ("nope") degrade future runs — capture the user's specific rationale.
202
193
 
203
194
  - **Keep (no decision yet)** → rare. Use only when the reviewer genuinely needs more information. Leave `triage_status: open` and add a `triage_note` noting what you are waiting for: `"Waiting on <thing> before triage."`.
204
195
 
@@ -241,10 +232,8 @@ If `<N> > 0` findings were queued for fix:
241
232
  1. "[Recommended] Apply queued fixes in workspace now"
242
233
  2. "Done for now (keep fixes open in iamu/findings/)"
243
234
  - Otherwise (CLI / text-only):
244
- Apply fixes for the <N> queued findings now?
245
- 1. [Recommended] Apply queued fixes in workspace now
246
- 2. Done for now (keep fixes open in iamu/findings/)
247
- Reply '1' to apply fixes [default], or select 2:
235
+ Triage complete. I recommend: Apply queued fixes in workspace now.
236
+ Proceeding with code edits — say "done" to keep fixes open in iamu/findings/.
248
237
 
249
238
  - **Executing the queued fixes:**
250
239
  When Option 1 is chosen, apply code edits for each queued finding sequentially in the workspace. Verify the changes once (run test/typecheck suite). Update each finding with `iamu triage <slug> --status addressed --note "<summary of fix>"`.
@@ -258,10 +247,8 @@ If `<N> > 0` findings were queued for fix:
258
247
  1. "[Recommended] Re-run walkthrough for <scenario-slug> to verify fixes hold"
259
248
  2. "Done for now (leave verification for later)"
260
249
  - Otherwise (CLI / text-only):
261
- Verify fixes now?
262
- 1. [Recommended] Re-run walkthrough for <scenario-slug> to verify fixes hold
263
- 2. Done for now (leave verification for later)
264
- Reply '1' to re-run [default], or select 2:
250
+ Fixes applied and validated. I recommend: Re-run walkthrough for <scenario-slug> to verify fixes hold.
251
+ Proceeding with verification re-run — say "done" to leave verification for later.
265
252
 
266
253
  When Option 1 is chosen, hand off to `iamu-run <scenario-slug>` to re-run the walkthrough, visit the revisit places, verify resolutions in `canonical.json`, and report the verified delta.
267
254
 
@@ -277,9 +264,7 @@ Report it in one line: `Synced <N> findings to Iamu Cloud.` If the result has `c
277
264
 
278
265
  Then end with the dashboard link from `iamu open --print` (step replay, screenshots side by side, the team's view of the same findings):
279
266
 
280
- ```
281
- Team view: <url>
282
- ```
267
+ > ☁️ **Cloud Walkthrough:** [Open in Iamu Cloud](<url from iamu open --print>)
283
268
 
284
269
  In linked-no-credentials mode, end with `Decisions are local only — iamu auth login, then iamu sync, to share them.` Skip this section entirely in local-only mode. The terminal surface is complete.
285
270
 
@@ -85,26 +85,20 @@ Present 2–3 scannable scenario proposals. Each proposal MUST bundle the situat
85
85
  3. "Select alternative: '<Bundle 2 Title>' as <Persona 2 Name>"
86
86
  4. "Customize situation, checkpoint, or brief"
87
87
  - Otherwise (in CLI or text-only environments):
88
-
89
- Scaffold this scenario for walkthrough?
90
- 1. [Recommended] Scaffold '<Bundle 1 Title>' as <Persona 1 Name>
91
- 2. Switch persona: Walk as <Alternative Persona Name> (<Role>)
92
- 3. Select alternative: '<Bundle 2 Title>' as <Persona 2 Name>
93
- 4. Customize situation, checkpoint, or brief
94
-
95
- Reply '1' to scaffold [default], select 2-3, or type adjustments:
88
+ I recommend scaffolding '<Bundle 1 Title>' as <Persona 1 Name>.
89
+ Proceeding to scaffold scenario — say "switch persona", "select alternative", or describe adjustments to customize.
96
90
 
97
91
  *Execution Flow:*
98
- - **Selecting Option 1 (or hitting Enter):** Proceed IMMEDIATELY to Step 6 (Persist everything). Zero intermediate question modals.
92
+ - **Selecting Option 1 (or conversational confirmation):** Proceed IMMEDIATELY to Step 6 (Persist everything). Zero intermediate question modals.
99
93
  - **Selecting Option 2:** Present the persona switcher (Step 4) then persist.
100
94
  - **Selecting Option 3:** Swap primary bundle and prompt to persist.
101
95
  - **Selecting Option 4 / typing adjustments:** Expand into Step 3 to refine details before persisting.
102
96
 
103
97
  ### 3. Develop the situation (Scenario Spec-Sheet)
104
98
 
105
- In Fast-Path mode or when customizing, present the complete scenario as a structured, scannable Spec-Sheet before creating anything. Every field shown here is written verbatim to disk on confirmation:
99
+ In Fast-Path mode or when customizing, present the complete scenario as a structured, scannable Spec-Sheet before creating anything. Every field shown here is written verbatim to disk on confirmation.
106
100
 
107
- Do NOT output markdown header hashes (`#`, `##`, `###`) or markdown blockquote syntax (`>`), which render as stray hashes or `|` pipe characters in terminal frontends. Keep the narrative capped at 2–3 punchy sentences (problem-space only, zero UI terms).
101
+ Keep the narrative capped at 2–3 punchy sentences (problem-space only, zero UI terms). (Note: When passing text to modal prompt tools like `ask_question`, use plain text without header hashes or blockquotes; in normal chat output, format clearly with standard markdown).
108
102
 
109
103
  ```
110
104
  Scenario Spec-Sheet: <Outline Title>
@@ -133,15 +127,10 @@ Persona & Brief:
133
127
  2. "Switch persona: Walk as <Alternative Persona> (<Role>)"
134
128
  3. "Adjust situation, checkpoint, or brief"
135
129
  - Otherwise (in CLI or text-only environments):
130
+ I recommend scaffolding scenario '<Outline Title>' and preparing the walkthrough.
131
+ Proceeding to scaffold scenario — say "switch persona" or describe adjustments.
136
132
 
137
- Scaffold scenario '<Outline Title>'?
138
- 1. [Recommended] Scaffold scenario and prepare walkthrough
139
- 2. Switch persona: Walk as <Alternative Persona> (<Role>)
140
- 3. Adjust situation, checkpoint, or brief
141
-
142
- Reply '1' to scaffold [default], select 2, or type adjustments:
143
-
144
- *Selecting Option 1 or hitting Enter proceeds IMMEDIATELY to Step 6 (Persist everything).*
133
+ *Selecting Option 1 proceeds IMMEDIATELY to Step 6 (Persist everything).*
145
134
 
146
135
  ### 4. Pick or swap personas (on demand)
147
136
 
@@ -170,7 +159,8 @@ If no existing persona fits, or if testing an uncovered perspective is needed, p
170
159
  1. "[Recommended] Bind existing persona: <slug> (<role>)" (if one fits)
171
160
  2. "Create candidate: <Name> (<Role>)"
172
161
  3. "Leave as draft (no persona bound yet)"
173
- - Otherwise, prompt: "Pick a persona (1–N), 'new' to propose candidates, or 'skip' to save as draft without a persona."
162
+ - Otherwise, state the recommended persona and conversational default:
163
+ "I recommend binding <slug> (<role>). Proceeding with this persona — name a candidate or say 'skip' to save as draft."
174
164
 
175
165
  ### 5. Classify into capabilities
176
166
 
@@ -96,7 +96,8 @@ Existing coverage: <N> scenarios ([<slug1>](iamu/scenarios/<slug1>.md), ...). Un
96
96
  2. "Scaffold '<Candidate 2 Title>' (<Actor>)"
97
97
  3. "Scaffold '<Candidate 3 Title>' (<Actor>)"
98
98
  - Otherwise (in CLI or text-only environments):
99
- Reply '1' to scaffold [default], select 2-3, or describe adjustments:
99
+ I recommend scaffolding Candidate 1: '<Candidate 1 Title>' (<Actor>).
100
+ Proceeding to scaffold scenario — name another candidate or describe adjustments.
100
101
 
101
102
  #### B. When proposing Personas:
102
103
 
@@ -126,7 +127,8 @@ Existing personas: [<slug1>](iamu/personas/<slug1>.md), ... Uncovered roles from
126
127
  2. "Add <Name 2> (<Actor role>)"
127
128
  3. "Add <Name 3> (<Actor role>)"
128
129
  - Otherwise (in CLI or text-only environments):
129
- Reply '1' to add [default], select 2-3, or describe adjustments:
130
+ I recommend adding Candidate 1: <Name 1> (<Actor role>).
131
+ Proceeding to add persona — name another candidate or describe adjustments.
130
132
 
131
133
  Ground rules for generation:
132
134
 
@@ -57,8 +57,8 @@ When `$ARGUMENTS` is empty and no active scenario exists in context, check `iamu
57
57
  1. "[Recommended] Ignore and continue with new run"
58
58
  2. "Finish run `<run-id>`: Run post-walk assembly on existing steps"
59
59
  3. "Discard empty unfinished runs"
60
- - Otherwise (in text-only/conversational environments), state that you are proceeding with Option 1 by default:
61
- "Note: Found <N> unfinished walkthrough run(s). Proceeding with a new run [1]. (Reply 2 to finish run `<run-id>` or 3 to discard empty runs)."
60
+ - Otherwise (in text-only/conversational environments), state the recommended action and default:
61
+ "Found <N> unfinished walkthrough run(s). Proceeding with a new run. (Say 'finish <run-id>' or 'discard empty' to adjust)."
62
62
 
63
63
  Do not block the new run on this, and do not ask again in the same session.
64
64
 
@@ -110,7 +110,8 @@ Omit the first group when `rerun` is empty. If `requests.open` in the status out
110
110
  1. "[Recommended] <Slug or Title>" (e.g. top rerun needing proof, or primary ready scenario)
111
111
  2. "<Alternative Scenario Slug or Title>"
112
112
  3. "Draft a new scenario..."
113
- - Otherwise, prompt: "Pick a scenario number (1–N), enter a slug, or type an intent to draft a new one."
113
+ - Otherwise, state the recommended scenario and conversational default:
114
+ "Recommended scenario: `<Slug or Title>`. Proceeding with this scenario — say '<Alternative Slug>' or describe a new intent to change course."
114
115
 
115
116
  Drafts get a bind prompt before execution (step 2); ready-to-run scenarios skip to step 3.
116
117
 
@@ -125,7 +126,8 @@ If the resolved scenario has `persona: null`, prompt to bind before executing:
125
126
  1. "[Recommended] <Existing Persona 1> (<Role>)"
126
127
  2. "<Existing Persona 2> (<Role>)"
127
128
  3. "Draft a new persona candidate"
128
- - Otherwise, ask: "This scenario is a draft — no persona bound. Pick an existing persona (1–N), or type 'new' to propose candidates."
129
+ - Otherwise, state the recommended persona and conversational default:
130
+ "This scenario is a draft with no persona bound. I recommend binding `<Existing Persona 1>` (<Role>). Proceeding with this persona — name another persona or type 'new' to propose candidates."
129
131
 
130
132
  1. Read `iamu/personas/` directory or run `iamu list personas`; present as pickable list + "new" option.
131
133
  2. Picked existing → bind that persona by updating the scenario file's `persona` field.
@@ -162,11 +164,8 @@ If the target is a local URL (e.g. `http://localhost:*`, `http://127.0.0.1:*`) a
162
164
  2. "I will start the dev server manually (wait for port)"
163
165
  3. "Specify a different target URL"
164
166
  - Otherwise (CLI / text-only):
165
- Target URL <url> is unreachable. Boot dev server now?
166
- 1. [Recommended] Boot dev server in background (`<dev_command>`) and proceed
167
- 2. I will start the dev server manually (wait for port)
168
- 3. Specify a different target URL
169
- Reply '1' to boot dev server [default], select 2-3, or provide target URL:
167
+ Target URL <url> is unreachable. I recommend Option 1: Boot dev server in background (`<dev_command>`) and proceed.
168
+ Proceeding with dev server boot — say "wait" to start manually or provide a different target URL.
170
169
  3. If Option 1 is chosen:
171
170
  - Launch `<dev_command>` in the background as a managed daemon process.
172
171
  - Poll `<url>` with HTTP requests until it responds (timeout: 30s).
@@ -216,7 +215,7 @@ If the product is behind enterprise login where automated dev persona switching
216
215
  If automated switching exists:
217
216
  1. Check the project's own agent docs (`CLAUDE.md`, `AGENTS.md`) for a documented way to switch user or role.
218
217
  2. Map the persona to the closest account or role the product actually has. If nothing fits, say so.
219
- 3. Write what you learned: the mechanism into the `iamu/testability.md` frontmatter as `access:` (it is test setup, so it does not belong in `context.yml`, which holds the domain; if `iamu doctor` finds it there, move it), and the persona's own key with `iamu set persona <slug> --access <key>`. Passwords and tokens never go in either — name where they live (an env var, a vault entry) instead.
218
+ 3. Persist what you learned: the mechanism into `iamu/testability.md` via `iamu set testability --access "<key>"`, and the persona's own key with `iamu set persona <slug> --access <key>`. Passwords and tokens never go in either — name where they live (an env var, a vault entry) instead.
220
219
 
221
220
  Carry the result into the walking prompt as the `## Access` section: the exact steps to become the persona, with the instruction to do them BEFORE the first recorded step.
222
221
 
@@ -248,15 +247,15 @@ iamu browse start --run <run-id>
248
247
 
249
248
  It sizes the page as the device the persona's tags name (`mobile`/`phone`, `tablet`/`ipad`, `desktop`/`laptop`; `start-run` prints it as `device`) and resizes a browser left at another persona's size.
250
249
 
251
- **Get the walker prompt.** The CLI composes the whole thing — persona, situation, brief, access, driving surface, methodology, dismissed findings and the run-directory contract (steps, screenshots, findings, `summary.json`):
250
+ **Get the walker prompt.** The CLI composes the whole thing — persona, situation, brief, access, driving surface, methodology, dismissed findings and the run-directory contract (steps, screenshots, findings, `summary.json`). It also automatically writes `walker_prompt.txt` to the run directory (`iamu/.runs/<run-id>/walker_prompt.txt`):
252
251
 
253
252
  ```bash
254
253
  iamu instructions walk --scenario <scenario-slug> --run <run-id> --surface browse --json
255
254
  ```
256
255
 
257
- `--surface browse` (the default) describes `iamu browse`; start it first (`iamu browse start --run <run-id>`, above). Using your own browser tool instead, pass one sentence naming it and how it saves screenshots, e.g. `--surface "Chrome DevTools MCP attached to the user's Chrome; take_screenshot with filePath"`. For a native app, describe the simulator tool and add the native notes below.
256
+ **Never create prompt generator scripts or temporary files.** The CLI generates and persists the prompt automatically. Never write custom `.cjs`, `.js`, or `.sh` generator scripts into `.cache/`, `iamu/`, or the workspace. Hand-crafting files triggers host IDE file permission prompts.
258
257
 
259
- The result's `walker_prompt` is the walker's entire prompt. Pass it verbatim — do not rewrite, summarize or trim it. The prompt already carries the dismissed findings, the active tester guidance rules (`iamu/guidance/`) for this scenario, and — when fixes await a re-run — the places they were seen (places only, never what was wrong; the list is in `revisit`). The rest of the bundle (`persona`, `outline`, `access`, `dismissed_findings`, `tester_guidance`, …) is there for you, not the walker. If `access` is missing a half, fill it in first (step 3) and re-run this command.
258
+ The result's `walker_prompt` is the walker's entire prompt (also persisted at `walker_prompt_path`). Pass it verbatim — do not rewrite, summarize or trim it. The prompt already carries the dismissed findings, the active tester guidance rules (`iamu/guidance/`) for this scenario, and — when fixes await a re-run — the places they were seen (places only, never what was wrong; the list is in `revisit`). The rest of the bundle (`persona`, `outline`, `access`, `dismissed_findings`, `tester_guidance`, …) is there for you, not the walker. If `access` is missing a half, fill it in first (step 3) and re-run this command.
260
259
 
261
260
  **Preflight: Unattended execution check.** A walkthrough executes 15–30 terminal commands sequentially (`iamu browse step`, `iamu new-finding`). If your agent host requires manual confirmation for terminal/shell commands (standard interactive mode in Claude Code, Cursor, Antigravity, Cline, Windsurf, etc.), the walker subagent will stall waiting for approval on every step. Before dispatching, verify that command auto-approval / unattended execution is enabled in your environment, or warn the user once:
262
261
  "Autonomous walkthroughs require auto-approving terminal commands so the walker can drive the product unattended. If command approvals are prompted, please enable auto-approval or expect to approve steps manually."
@@ -357,6 +356,9 @@ iamu summary <run-id> --worked "What worked well 1" --worked "What worked well 2
357
356
 
358
357
  After the walker returns, you MUST complete ALL of the following before presenting findings to the user. Do NOT present findings early. Do NOT ask the user anything. Execute steps A→B→C→D→E in order.
359
358
 
359
+ > **CRITICAL EXECUTION RULE (Zero Host File Tools):**
360
+ > Never invoke host edit or write tools (`write_to_file`, `create_file`, `replace_file_content`, etc.) on any files in `iamu/` (including run artifacts, steps, findings, outlines, personas, scenarios, or guidance). All files in `iamu/` must be generated and modified exclusively via `iamu` CLI commands (`iamu new`, `iamu set`, `iamu step`, `iamu new-finding`, `iamu evaluate-record`, `iamu match-record`, etc.). If an entity needs a field updated (e.g. adding a capability to an outline), run `iamu set <type> <slug> ...` instead of editing files by hand. Record subagent JSON outputs directly through the CLI using `--data '<json>'` (or pipe via stdin).
361
+
360
362
  **A. Assemble canonical + report (local).** Use `--no-push` so post-processing stays fast, local, and synchronous:
361
363
 
362
364
  ```bash
@@ -373,11 +375,10 @@ This reads all steps, findings, and entity files, assembles `canonical.json`, ge
373
375
  iamu match <run-id> --json
374
376
  ```
375
377
 
376
- If `needed` is `false` (no earlier findings for this scenario, or none this run), skip to C. Otherwise, read the prompt from `iamu/.runs/<run-id>/match_prompt.md` directly and dispatch a matcher subagent with it as its only context (use the **thorough** model tier, e.g. `Model="pro"` in Antigravity, to accurately evaluate semantic equivalence). Record its JSON answer via `--data` (or `--file`):
378
+ If `needed` is `false` (no earlier findings for this scenario, or none this run), skip to C. Otherwise, read the prompt from `iamu/.runs/<run-id>/match_prompt.md` directly and dispatch a matcher subagent with it as its only context (use the **thorough** model tier, e.g. `Model="pro"` in Antigravity, to accurately evaluate semantic equivalence). Record its JSON answer via `--data` (do NOT create a `matches.json` file yourself; pass the JSON string directly into `--data`):
377
379
 
378
380
  ```bash
379
- iamu match-record <run-id> --data '<matches.json>'
380
- # or: iamu match-record <run-id> --file <matches.json>
381
+ iamu match-record <run-id> --data '<raw_matches_json>'
381
382
  ```
382
383
 
383
384
  This links recurrences to their earlier canonical finding, marks earlier findings the run's steps show fixed (only with cited steps), and re-derives the delta and report. If the matcher's output is rejected, show the error to the matcher once and retry; if it fails again, continue without it — the exact-text delta from A stands.
@@ -388,11 +389,10 @@ This links recurrences to their earlier canonical finding, marks earlier finding
388
389
  iamu evaluate <run-id> --json
389
390
  ```
390
391
 
391
- Read the evaluation prompt from `iamu/.runs/<run-id>/judge_prompt.md` directly. Dispatch the evaluator as a subagent with that prompt (use the **thorough** model tier, e.g. `Model="pro"` in Antigravity, to prevent severity inflation). After the evaluator returns verdicts, record them locally with `--no-push` via `--data` (or `--file`):
392
+ Read the evaluation prompt from `iamu/.runs/<run-id>/judge_prompt.md` directly. Dispatch the evaluator as a subagent with that prompt (use the **thorough** model tier, e.g. `Model="pro"` in Antigravity, to prevent severity inflation). After the evaluator returns verdicts, record them locally with `--no-push` via `--data` (do NOT create a `verdicts.json` file yourself; pass the JSON string directly into `--data`):
392
393
 
393
394
  ```bash
394
- iamu evaluate-record <run-id> --data '<verdicts.json>' --no-prompt --no-push
395
- # or: iamu evaluate-record <run-id> --file <verdicts.json> --no-prompt --no-push
395
+ iamu evaluate-record <run-id> --data '<raw_verdicts_json>' --no-prompt --no-push
396
396
  ```
397
397
 
398
398
  This links findings to human tests (`human_test_id`) and updates the report with judge verdicts.
@@ -431,23 +431,23 @@ Render results **inline** as a concise executive scorecard.
431
431
 
432
432
  **ANTI-BLOAT DIRECTIVE:** Terminal viewports are small. Never output multi-screen walls of markdown text. The overview exists only to present the top-line score and orient the user for triage. Do NOT dump long quotes, recommendations, full descriptions, or "What Worked" essays here — those belong in the interactive triage step below.
433
433
 
434
- Keep the presentation under 15 lines total:
434
+ Keep the presentation under 15 lines total. Output as rich Markdown (do NOT wrap the entire summary in a triple-backtick code block so links render as clickable):
435
435
 
436
- ```
437
- Walkthrough: [<scenario-slug>](iamu/scenarios/<scenario-slug>.md) ([<persona>](iamu/personas/<persona>.md))
438
- Verdict: <FAIL / PARTIAL / PASS> · <N> Blockers (Critical) · <M> Friction points (Major/Minor) · <K> Helpers (Steps: <N>)
439
- Focus Checkpoint: "<human_tests[0].question>" → <No / Partial / Yes>: <1-sentence direct answer>
436
+ ### Walkthrough Complete: [<scenario-slug>](iamu/scenarios/<scenario-slug>.md) ([<persona>](iamu/personas/<persona>.md))
437
+ **Verdict:** <FAIL / PARTIAL / PASS> · <N> Blockers (Critical) · <M> Friction points (Major/Minor) · <K> Helpers (<StepCount> steps)
438
+ **Checkpoint:** "<human_tests[0].question>" → <No / Partial / Yes>: <1-sentence direct answer>
440
439
 
441
- Findings:
442
- 1. [<CRITICAL|MAJOR|MINOR> · <type>] <Short title> (Step <N> at <short_url_path>)
443
- 2. [<CRITICAL|MAJOR|MINOR> · <type>] <Short title> (Step <N> at <short_url_path>)
440
+ #### Findings:
441
+ 1. **[CRITICAL]** · *<type>* · <Short title> (Step <N> at `<short_url_path>`)
442
+ 2. **[MAJOR]** · *<type>* · <Short title> (Step <N> at `<short_url_path>`)
444
443
  ...
445
444
  (Helps: • [helps] <short title> (Step <N>))
446
445
 
447
- Cloud: <Shareable report: <url> | Local only>
448
- ```
449
-
450
446
  (If canonical.json contains a `verification` section, include a 1-line delta: `Since last run: ✓ <N> fixed · ✗ <M> persist · + <K> new`.)
447
+
448
+ > ☁️ **Cloud Walkthrough:** [Open in Iamu Cloud](<url from iamu open <run-id> --print>)
449
+ *(If local-only, render instead: `> **Artifact:** [iamu/.runs/<run-id>/report.md](iamu/.runs/<run-id>/report.md) (Local only)`)*
450
+
451
451
  Do NOT output `### What Worked` paragraphs or lengthy bullet essays. Keep the entire summary under 15 lines, then immediately present the triage prompt below.
452
452
 
453
453
  7. **Next actions (Interactive Triage Selection)**:
@@ -459,15 +459,9 @@ Do NOT output `### What Worked` paragraphs or lengthy bullet essays. Keep the en
459
459
  2. "Apply fixes for all clear findings (batch fix)"
460
460
  3. "Discuss findings and persona friction points"
461
461
  4. "Re-run walkthrough to test changes"
462
- - Otherwise (in CLI or text-only environments):
463
-
464
- Walkthrough complete: <F> findings reported.
465
- 1. [Recommended] Walk through findings one by one
466
- 2. Apply fixes for all clear findings (batch fix)
467
- 3. Discuss findings and persona friction points
468
- 4. Re-run walkthrough to test changes
469
-
470
- Reply '1' to review findings [default], enter 2-4, or tell me how to proceed:
462
+ - Otherwise (in CLI or text-only environments):
463
+ Walkthrough complete: <F> findings reported. I recommend walking through findings one by one.
464
+ Proceeding with one-by-one triage. (Say "batch fix", "discuss", or "re-run" to change course).
471
465
 
472
466
  ### 6. Conversational Triage & Guided Review
473
467
 
@@ -475,74 +469,70 @@ The conversation is the triage surface. Do NOT eject the user to manual CLI comm
475
469
 
476
470
  #### A. Guided One-by-One Review ("walk through them" / "review one by one")
477
471
  When the user asks to review findings one by one:
478
- 1. **Present Finding #N in a comprehensive, dashboard-aligned summary:**
479
- Do NOT force an artificial single `Location: file:line` (UX friction and user blockers often span entire flows, API errors, or policy). Instead, present:
480
- ```
481
- Finding <N>/<total>: [<SEVERITY> · <type>] <title>
482
- • Persona: <Persona Name> (<Role>) · <Screen title or URL, Step N>
483
- • UI Fact: <What the UI showed or did (ui_fact)>
484
- • Consequence: <Impact on the persona completing their task (consequence)>
485
- • Agent Insight: <1–2 plain-language sentences synthesizing why this happens and what it means in context>
486
- • Recommendation: <Concrete fix proposal from finding body>
487
- • Evidence: <iamu/.runs/<run>/screenshots/step-<N>.png> [Dashboard](<url if cloud_linked>)
472
+ 1. **Present Finding #N in a scannable format (High Visual Hierarchy):**
473
+ Do NOT output an undifferentiated wall of bullets or academic schema labels like "UI Fact:". The reviewer must be able to parse **What is broken** and **What to fix** in under 3 seconds.
474
+
475
+ Format the visible finding in chat:
476
+ ```markdown
477
+ ### Finding #<N>/<total> [<SEVERITY>] — <title>
478
+ > **Where:** `<Screen title or URL>` (Step <N>) · **Persona:** <Persona Name> (<Role>)
479
+ > **Evidence:** [step-<N>.png](iamu/.runs/<run>/screenshots/step-<N>.png) · [View in Cloud Walkthrough](<url from iamu open <run-id> --print>)
480
+
481
+ **❌ Problem:**
482
+ <What went wrong on screen and why it hinders the persona (synthesizing ui_fact and consequence in 1–2 clear, direct sentences)>
483
+
484
+ **💡 Recommendation:**
485
+ <Concrete fix proposal from finding body>
488
486
  ```
489
- If the project is cloud-linked, include the link to the finding in Iamu Cloud (from `iamu open --print`).
487
+ *(For `type: "helps"` findings, omit `**❌ Problem:**` and `**💡 Recommendation:**`; render `**✓ Strength:** <Observation>`)*.
488
+
489
+ If the project is cloud-linked, include the direct link to the walkthrough in Iamu Cloud (from `iamu open <run-id> --print`).
490
490
 
491
491
  Followed immediately by the decision prompt:
492
492
 
493
- **CRITICAL: Embed Full Context in Interactive Prompt Modals:**
494
- Host interactive tools (e.g. `ask_question`, `ask_followup_question`) render a modal that obscures the terminal and displays ONLY the tool's `question` argument. **You must embed the complete finding summary inside the `question` argument** so the reviewer has full context directly in the dialog without having to close the modal.
493
+ **Dual-Surface Triage Prompting (Sequencing Rule):**
494
+ You MUST output the rich markdown finding card to the chat stream FIRST. In the SAME turn, invoke `ask_question`:
495
495
 
496
496
  - If interactive tool available (e.g. `ask_question`, `ask_followup_question`), invoke it:
497
- - **Question:**
498
- """
499
- Finding #<N>/<total>: <title>
500
-
501
- • Impact: [<SEVERITY> · <type>]
502
- • Persona: <Persona Name> (<Role>) · <Screen title or URL, Step N>
503
- • UI Fact: <ui_fact>
504
- • Consequence: <consequence>
505
- • Agent Insight: <1–2 sentences explaining why this happens in simple terms>
506
- • Recommendation: <concrete recommendation>
507
- • Evidence: <screenshot path, local file link, and cloud dashboard link if linked>
508
-
509
- How should we triage this finding?
510
- """
497
+ - **Question:** "Finding #<N>/<total> [<SEVERITY>]: <title> on <Screen title or URL, Step N> — How to triage?"
511
498
  - **Options:**
512
- 1. "[Recommended] Queue to fix (mark for fix & continue triage)"
513
- 2. "Dismiss / Skip (not relevant or walker error)"
514
- 3. "Discuss / Explore trade-offs"
515
- 4. "Fix immediately (leave triage now)"
516
- 5. "Next finding (keep open / defer)"
517
- - Otherwise (CLI / text-only):
518
- Triage Finding #<N>/<total>: '<finding title>'
519
- 1. [Recommended] Queue to fix (mark for fix & continue triage)
520
- 2. Dismiss / Skip (not relevant or walker error)
521
- 3. Discuss / Explore trade-offs
522
- 4. Fix immediately (leave triage now)
523
- 5. Next finding (keep open / defer)
524
- Reply '1' to queue fix [default], select 2-5, or describe your decision:
499
+ 1. "[Recommended] Queue to fix (<brief 3-5 word fix summary>)"
500
+ 2. "Queue all remaining recommended fixes (batch accept)"
501
+ 3. "Dismiss / Skip (<brief reason if obvious, e.g. keep current design>)"
502
+ 4. "Discuss / Explore trade-offs"
503
+ 5. "Fix immediately (leave triage now)"
504
+ - Otherwise (CLI / text-only conversational fallback):
505
+ > **Recommended Action:** Queue to fix (<brief 3-5 word fix summary>).
506
+ > Say **"queue"** (or **"queue all"**), **"dismiss"** (to teach a rule), or **"discuss"** to explore trade-offs.
525
507
 
526
508
  2. **Handle the user's decision**:
527
509
  - **Queue to fix [Recommended]**:
528
510
  Add finding to the session's fix queue.
529
511
  Tell the user in 1 line: "✓ Queued for fix. Ready for finding #<N+1>?" and advance immediately.
530
512
  Do NOT edit code or leave triage yet — complete triage across all findings first.
531
- - **Skip / Dismiss**:
532
- If reason is not specified, ask or infer the appropriate category:
533
- - `out_of_scope`: Not relevant to this project/flow scope.
534
- - `not_relevant`: By design / intended behavior.
535
- - `walker_error`: Walker misread the screen or made a navigational error.
536
- - `duplicate`: Duplicate of another finding.
537
- Execute: `iamu triage <slug> --status dismissed --reason <reason> --note "<why>"`.
538
- Tell the user in 1 line: "✓ Dismissed as `<reason>` — guidance rule recorded."
513
+ - **Skip / Dismiss (Load-Bearing Guidance Learning)**:
514
+ **Never infer dismissal rationale silently.** If the user has not yet explained why this finding is dismissed, prompt them directly in conversational chat:
515
+ > "To teach future walkthroughs what not to report, why should this be dismissed?
516
+ > • **By design / intended behavior:** (Why this pattern is expected)
517
+ > • **Walker error:** (What the walker misread or did wrong)
518
+ > • **Out of scope:** (Non-issue for this product/flow)
519
+ > What specific rule should future walkers follow?"
520
+
521
+ Once the user provides their reasoning (or if already clear from discussion):
522
+ Derive a concise, actionable guidance rule string.
523
+ Execute: `iamu triage <slug> --status dismissed --reason <reason> --note "<user rationale>" --rule "<rule string>"`.
524
+ Tell the user in 1 line:
525
+ `✓ Dismissed (<reason>) — Guidance rule taught to future walks in iamu/guidance/<slug>.md: "<rule string>"`
539
526
  Then advance to finding #<N+1>.
540
- - **Discuss / Why (STRICT CONSTRAINT: maximum 3-4 concise bullets, under 80 words total)**:
541
- Never write multi-section essays, markdown headers (`### Trade-off Analysis`, `#### 1. Why it was built this way`, `#### 2. The Operational Failure`), or ASCII/markdown tables. Deliver a direct, surgical 3-bullet answer:
527
+ - **Discuss / Explore trade-offs (Conversational Dialogue Mode — NO MODAL LOOPS)**:
528
+ When the user chooses "Discuss", asks a question, or challenges an idea:
529
+ **DO NOT invoke `ask_question` or present multiple-choice menus.** Stay in natural conversational chat as a senior pair programmer:
542
530
  • **Root Cause:** 1 sentence on why the UI or workflow behaves this way (and source file if known).
543
531
  • **Persona Friction:** 1 sentence on the practical operational consequence.
544
- • **Recommended Fix & Trade-off:** 1-2 sentences with concrete approach and any trade-offs.
545
- Immediately re-prompt the triage decision for finding #<N>.
532
+ • **Recommended Fix & Trade-off:** Concrete architectural approach, competitor benchmarks, and trade-offs.
533
+ Converse naturally with the user back and forth in plain markdown text. Answer follow-up questions, inspect code, and discuss options until a conclusion is reached.
534
+ **Only when a consensus is reached** (e.g. user says: "let's do that", "queue it", "dismiss it", "fix it now"):
535
+ Record the agreed decision and advance to finding #<N+1>. Do NOT trap the user with modal dialogs after each conversational turn.
546
536
  - **Fix immediately (leave triage now)**:
547
537
  If the user explicitly chooses to drop out of triage and fix right now:
548
538
  Make the code edit, verify it loads (or check local tests/types), update the finding with `iamu triage <slug> --status addressed --note "<summary of fix>"`.
@@ -564,11 +554,8 @@ When the user asks to review findings one by one:
564
554
  2. "Re-run walkthrough to verify dismissed items first"
565
555
  3. "Done for now (keep fixes open in iamu/findings/)"
566
556
  - Otherwise (CLI / text-only):
567
- Apply fixes for the <K> queued findings now?
568
- 1. [Recommended] Apply fixes for queued findings in workspace now
569
- 2. Re-run walkthrough to verify dismissed items first
570
- 3. Done for now (keep fixes open in iamu/findings/)
571
- Reply '1' to apply fixes [default], or select 2-3:
557
+ Triage complete. I recommend: Apply fixes for queued findings in workspace now.
558
+ Proceeding with code fixes — say "re-run first" or "done for now" to adjust.
572
559
 
573
560
  - **Executing the queued fixes:**
574
561
  When Option 1 is chosen, apply code edits for each queued finding sequentially in the workspace. Verify the changes once (run test/typecheck suite). Update each finding with `iamu triage <slug> --status addressed --note "<summary of fix>"`.
@@ -584,10 +571,8 @@ When the user asks to review findings one by one:
584
571
  1. "[Recommended] Re-run walkthrough to verify fixes hold"
585
572
  2. "Done for now (leave verification for later)"
586
573
  - Otherwise (CLI / text-only):
587
- Verify fixes now?
588
- 1. [Recommended] Re-run walkthrough to verify fixes hold
589
- 2. Done for now (leave verification for later)
590
- Reply '1' to re-run [default], or select 2:
574
+ Fixes applied and validated. I recommend: Re-run walkthrough to verify fixes hold.
575
+ Proceeding with verification re-run — say "done" to leave verification for later.
591
576
 
592
577
  When Option 1 is chosen:
593
578
  1. Start the verification run: `iamu start-run <scenario-slug> --target <target> --json`. Note: `start-run` automatically pulls all awaiting findings into `revisit` places in `walkthrough.json`.