@iamu-dev/iamu 0.0.0-stage → 0.2.0-beta.10
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/LICENSE +9 -0
- package/README.md +103 -2
- package/dist/adapters/claude-plugin.d.ts +13 -0
- package/dist/adapters/registry.d.ts +6 -0
- package/dist/adapters/types.d.ts +19 -0
- package/dist/bin.d.ts +2 -0
- package/dist/bin.js +22853 -0
- package/dist/build-info.d.ts +53 -0
- package/dist/cloud-url.d.ts +19 -0
- package/dist/commands/auth-http.d.ts +37 -0
- package/dist/commands/auth-project-choice.d.ts +74 -0
- package/dist/commands/auth-token-input.d.ts +21 -0
- package/dist/commands/auth.d.ts +84 -0
- package/dist/commands/browse-actions.d.ts +56 -0
- package/dist/commands/browse-driver.d.ts +117 -0
- package/dist/commands/browse.d.ts +170 -0
- package/dist/commands/cloud-push.d.ts +27 -0
- package/dist/commands/complete.d.ts +132 -0
- package/dist/commands/completion.d.ts +2 -0
- package/dist/commands/context.d.ts +58 -0
- package/dist/commands/credentials.d.ts +144 -0
- package/dist/commands/diff-filter.d.ts +11 -0
- package/dist/commands/doctor.d.ts +33 -0
- package/dist/commands/evaluate.d.ts +32 -0
- package/dist/commands/explore-crawl.d.ts +67 -0
- package/dist/commands/explore.d.ts +52 -0
- package/dist/commands/findings.d.ts +7 -0
- package/dist/commands/init.d.ts +16 -0
- package/dist/commands/instructions-walk.d.ts +69 -0
- package/dist/commands/list.d.ts +5 -0
- package/dist/commands/match.d.ts +13 -0
- package/dist/commands/mcp-config.d.ts +10 -0
- package/dist/commands/new-entity.d.ts +28 -0
- package/dist/commands/new-finding.d.ts +19 -0
- package/dist/commands/open.d.ts +8 -0
- package/dist/commands/port.d.ts +17 -0
- package/dist/commands/prune.d.ts +11 -0
- package/dist/commands/pull.d.ts +5 -0
- package/dist/commands/register-cloud.d.ts +5 -0
- package/dist/commands/register-findings.d.ts +5 -0
- package/dist/commands/register-project.d.ts +5 -0
- package/dist/commands/register-walkthrough.d.ts +5 -0
- package/dist/commands/register.d.ts +10 -0
- package/dist/commands/report.d.ts +3 -0
- package/dist/commands/serve.d.ts +11 -0
- package/dist/commands/skills.d.ts +34 -0
- package/dist/commands/start-run.d.ts +54 -0
- package/dist/commands/status.d.ts +3 -0
- package/dist/commands/step-numbering.d.ts +87 -0
- package/dist/commands/step.d.ts +95 -0
- package/dist/commands/sync.d.ts +6 -0
- package/dist/commands/triage.d.ts +21 -0
- package/dist/commands/update.d.ts +4 -0
- package/dist/commands/validate.d.ts +8 -0
- package/dist/commands/view-results.d.ts +9 -0
- package/dist/eval/gemini-eval-cli.d.ts +10 -0
- package/dist/eval/gemini-eval-cli.js +976 -0
- package/dist/eval/gemini-walker.d.ts +46 -0
- package/dist/eval/walkthrough-evaluator.d.ts +61 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.js +22700 -0
- package/dist/sync-mcp/fatal.d.ts +42 -0
- package/dist/sync-mcp/server.d.ts +1 -0
- package/dist/sync-mcp/tools.d.ts +12 -0
- package/dist/templates/prompts/combine.md +69 -0
- package/dist/templates/prompts/complete.md +132 -0
- package/dist/templates/prompts/evaluate.md +64 -0
- package/dist/templates/prompts/outline.md +54 -0
- package/dist/templates/prompts/persona.md +40 -0
- package/dist/templates/prompts/walk.md +179 -0
- package/dist/templates/skills/iamu-findings.md +266 -0
- package/dist/templates/skills/iamu-new.md +263 -0
- package/dist/templates/skills/iamu-propose.md +157 -0
- package/dist/templates/skills/iamu-run.md +520 -0
- package/dist/templates/skills/iamu-setup.md +270 -0
- package/dist/templates/skills/iamu-status.md +71 -0
- package/dist/templates.d.ts +10 -0
- package/dist/ui/journey-diff.d.ts +3 -0
- package/dist/ui/json.d.ts +6 -0
- package/dist/ui/logger.d.ts +5 -0
- package/dist/ui/panic.d.ts +11 -0
- package/dist/ui/symbols.d.ts +11 -0
- package/dist/ui/table.d.ts +20 -0
- package/dist/ui/update-check.d.ts +6 -0
- package/dist/worktree-state.d.ts +49 -0
- package/package.json +72 -3
|
@@ -0,0 +1,520 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: iamu-run
|
|
3
|
+
description: Execute a scenario walkthrough. Accepts scenario slug / UUID / free-form intent / no-arg. Intent chains into iamu-new first, then runs.
|
|
4
|
+
generatedBy: __IAMU_VERSION__
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
Run a scenario against a running product. The walkthrough executes in your agent session using a driving surface you control — a browser MCP for a web product, or the iOS Simulator for a native app — no separate Iamu runner involved for local flows.
|
|
8
|
+
|
|
9
|
+
This skill resolves what you want to run from your argument:
|
|
10
|
+
|
|
11
|
+
- Scenario slug or UUID → load + execute.
|
|
12
|
+
- Free-form intent ("checkout abandonment", "returning customer friction") → fuzzy-match against existing scenarios; if nothing fits, chain into `iamu-new` to draft first, then execute.
|
|
13
|
+
- No argument → pickable list of scenarios: scenarios that need a re-run first, then drafts and ready-to-run.
|
|
14
|
+
|
|
15
|
+
$ARGUMENTS
|
|
16
|
+
|
|
17
|
+
## Prerequisites
|
|
18
|
+
|
|
19
|
+
Before starting, check that `iamu/context.yml` exists and has `domain` filled in. If it is missing or empty, run the `iamu-setup` skill first — context grounds every walkthrough. If `iamu/` does not exist at all, run `iamu init` first.
|
|
20
|
+
|
|
21
|
+
## Steps
|
|
22
|
+
|
|
23
|
+
### 0. Verify a driving surface
|
|
24
|
+
|
|
25
|
+
A walkthrough needs something that drives the product the way a person does. Two surfaces are supported — pick the one the product actually IS, not the one that is easiest to reach.
|
|
26
|
+
|
|
27
|
+
Look at the tools actually available in this session and match on what they can do, not on what they are called — tool names differ per host, plugin, and install method, so any name written here would be wrong somewhere.
|
|
28
|
+
|
|
29
|
+
**Web product** — you need a browser-driving tool set that can: open a URL, click and type into elements, read the page structure (accessibility snapshot or DOM), and save a screenshot to a file path on disk.
|
|
30
|
+
|
|
31
|
+
When more than one qualifies, prefer in this order:
|
|
32
|
+
|
|
33
|
+
1. **One attached to the user's own running Chrome** (a Chrome DevTools-style MCP or a Chrome extension bridge). The user can watch the walk live, the session and dev state they already have is present, and console and network output are available to tell a tooling glitch from a product bug.
|
|
34
|
+
2. **One that launches its own browser** (a Playwright-style MCP). Works, but starts from a blank profile and the user cannot see it happen.
|
|
35
|
+
3. **`iamu browse`** — the CLI's own shell-driven browser, when no tool above can save a screenshot to a file (many hosts' browser tools return screenshots to the model only, and every step then records `screenshot: null`). It drives the installed Chrome in a visible window: `iamu browse start --run <run-id>` after each `start-run` (step 4), then `goto`, `snapshot` (ARIA roles and names), `click <role> "<name>"`, `click-text`, `fill <role> "<name>" "<text>" [--submit]`, `press`, `scroll`, `back`, each with `--shot <png>`; `iamu browse stop` when done. Start it yourself before dispatching the walker, never leave that to the walker; `iamu instructions walk --surface browse` (the default) writes the command list into the walker prompt.
|
|
36
|
+
|
|
37
|
+
Tell the user in one line which one you picked and why. If the project's own agent docs name a preferred browser tool or constrain where screenshots may be written, that wins over the order above.
|
|
38
|
+
|
|
39
|
+
**Native iOS / iPadOS app** — you need a simulator control tool that can tap, type, and launch an app on a named device.
|
|
40
|
+
|
|
41
|
+
A native app has no URL, and a browser tool is not a substitute for one. If the product is native, the target is a device plus a build (step 3).
|
|
42
|
+
|
|
43
|
+
If no surface is available, stop and tell the user:
|
|
44
|
+
|
|
45
|
+
> A walkthrough needs a driving surface. For a web product, `iamu browse` works wherever Chrome or Chromium is installed (or set `IAMU_BROWSER`); a browser-driving MCP that attaches to Chrome also works — restart your agent session after installing one and re-run `iamu-run`. For a native iOS app, a simulator control tool must be available in this session.
|
|
46
|
+
|
|
47
|
+
Do NOT proceed to step 1 before a driving surface is confirmed.
|
|
48
|
+
|
|
49
|
+
**Unfinished runs.** Only check and offer when `iamu-run` is invoked without arguments (`$ARGUMENTS` is empty). If an explicit scenario slug or intent was passed, do NOT block execution with this prompt — log a single line (`Note: <N> unfinished run(s) pending — use iamu status to inspect`) and proceed directly to step 1.
|
|
50
|
+
|
|
51
|
+
When `$ARGUMENTS` is empty, check `iamu status --json` for `runs.incomplete`. If any exist, offer once:
|
|
52
|
+
|
|
53
|
+
- If your environment provides an interactive user-prompt tool (e.g. `ask_question`, `ask_followup_question`), invoke it:
|
|
54
|
+
- Question: "Found <N> unfinished walkthrough run(s). How would you like to handle them?"
|
|
55
|
+
- Options:
|
|
56
|
+
1. "[Recommended] Ignore and continue with new run"
|
|
57
|
+
2. "Finish run `<run-id>`: Run post-walk assembly on existing steps"
|
|
58
|
+
3. "Discard empty unfinished runs"
|
|
59
|
+
- Otherwise (in CLI or text-only environments), present as an enumerated list (1, 2, 3) and carry on if the user selects 1 or skips:
|
|
60
|
+
1. [Recommended] Ignore and continue with new run
|
|
61
|
+
2. Finish run `<run-id>`: Run post-walk report assembly on existing step files
|
|
62
|
+
3. Discard empty runs with no steps
|
|
63
|
+
|
|
64
|
+
Press Enter to continue [1], or select 2-3:
|
|
65
|
+
(Treat empty Enter as Option 1)
|
|
66
|
+
|
|
67
|
+
Do not block the new run on this, and do not ask again in the same session.
|
|
68
|
+
|
|
69
|
+
**Cloud state.** Run `iamu auth status --json` once. It sets the mode for the rest of this skill:
|
|
70
|
+
|
|
71
|
+
- **Linked** (`cloud_linked` and `authenticated` both true) → pull teammates' changes before resolving the scenario: `iamu pull --json`. Pull only adds new entities and fast-forwards files that are unedited here; it never overwrites a local edit (those come back as `diverged` — mention them, never `--force`). This is how a teammate's new scenario, or a dismissal that taught the walker what not to report, reaches this run. If pull fails (offline, cloud down), say so in one line and walk locally.
|
|
72
|
+
- **Linked, no credentials** (`cloud_linked` true, `authenticated` false) → say once: "This project is cloud-linked, but this machine has no credentials — the run stays local until `iamu auth login`." Continue.
|
|
73
|
+
- **Local-only** → nothing to do here.
|
|
74
|
+
|
|
75
|
+
### 1. Resolve the argument
|
|
76
|
+
|
|
77
|
+
Four paths based on `$ARGUMENTS`:
|
|
78
|
+
|
|
79
|
+
**UUID or exact slug match** → Read scenario files from `iamu/scenarios/` directory, or run `iamu list scenarios --json`, and match. Load and skip to step 3.
|
|
80
|
+
|
|
81
|
+
**Slug-like arg with no exact match** → Run fuzzy match against existing scenario slugs (simple substring / levenshtein — the agent should judge similarity). If the best match is obviously close (shared two or more tokens), confirm with the user: "Did you mean `<slug>`?" Accept / correct / treat as free-form intent.
|
|
82
|
+
|
|
83
|
+
**Free-form intent string** (quoted or multi-word, no match) → Chain into `iamu-new` with the intent as seed. After `iamu-new` completes and returns a scenario slug, continue here with that slug.
|
|
84
|
+
|
|
85
|
+
**No arg** → Run `iamu status --json` and `iamu list scenarios --json` (or read `iamu/scenarios/`). `rerun` in the status output lists scenarios holding fixes that no later run has proven yet — a fix counts only once a re-run of its scenario shows it working. Present that group first, most awaiting fixes first, with its `reason`; then drafts and ready-to-run (a scenario in the first group is not repeated below):
|
|
86
|
+
|
|
87
|
+
```
|
|
88
|
+
Needs a re-run (fixes awaiting proof):
|
|
89
|
+
1. maria-gomez--busy-shift — 2 fixes applied after the last run
|
|
90
|
+
|
|
91
|
+
Drafts (need persona):
|
|
92
|
+
2. busy-shift-draft — Busy shift situation (no persona)
|
|
93
|
+
3. checkout-abandon-draft — Abandoned cart situation (no persona)
|
|
94
|
+
|
|
95
|
+
Ready to run:
|
|
96
|
+
4. dev-patel--checkout-abandon — Abandoned cart x Dev Patel
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
Omit the first group when `rerun` is empty. If `requests.open` in the status output is above zero, put one line above the list: `Team requests: <N> waiting — iamu-findings picks them up.` Teammates queued those in Iamu Cloud; a verify or run request names the scenario to walk.
|
|
100
|
+
|
|
101
|
+
**Interactive Scenario Selection:**
|
|
102
|
+
- If your environment provides an interactive user-prompt tool (e.g. `ask_question`, `ask_followup_question`), invoke it with the top prioritized candidates as selectable options:
|
|
103
|
+
- Question: "Which scenario would you like to run?"
|
|
104
|
+
- Options:
|
|
105
|
+
1. "[Recommended] <Slug or Title>" (e.g. top rerun needing proof, or primary ready scenario)
|
|
106
|
+
2. "<Alternative Scenario Slug or Title>"
|
|
107
|
+
3. "Draft a new scenario..."
|
|
108
|
+
- Otherwise, prompt: "Pick a scenario number (1–N), enter a slug, or type an intent to draft a new one."
|
|
109
|
+
|
|
110
|
+
Drafts get a bind prompt before execution (step 2); ready-to-run scenarios skip to step 3.
|
|
111
|
+
|
|
112
|
+
### 2. Bind persona (draft path only)
|
|
113
|
+
|
|
114
|
+
If the resolved scenario has `persona: null`, prompt to bind before executing:
|
|
115
|
+
|
|
116
|
+
**Interactive Persona Binding:**
|
|
117
|
+
- If your environment provides an interactive user-prompt tool (e.g. `ask_question`, `ask_followup_question`), invoke it:
|
|
118
|
+
- Question: "This scenario is a draft with no persona bound. Which persona should walk it?"
|
|
119
|
+
- Options:
|
|
120
|
+
1. "[Recommended] <Existing Persona 1> (<Role>)"
|
|
121
|
+
2. "<Existing Persona 2> (<Role>)"
|
|
122
|
+
3. "Draft a new persona candidate"
|
|
123
|
+
- Otherwise, ask: "This scenario is a draft — no persona bound. Pick an existing persona (1–N), or type 'new' to propose candidates."
|
|
124
|
+
|
|
125
|
+
1. Read `iamu/personas/` directory or run `iamu list personas`; present as pickable list + "new" option.
|
|
126
|
+
2. Picked existing → bind that persona by updating the scenario file's `persona` field.
|
|
127
|
+
3. Picked "new" → generate 3 persona candidates grounded in the situation narrative and project context → user picks one + refines → write persona file to `iamu/personas/<slug>.md` → bind.
|
|
128
|
+
4. After binding the persona, generate a 3--5 sentence first-person brief and write it as the scenario file's markdown body:
|
|
129
|
+
|
|
130
|
+
```yaml
|
|
131
|
+
---
|
|
132
|
+
id: <uuid>
|
|
133
|
+
slug: maria-gomez--busy-shift-handoff
|
|
134
|
+
outline: busy-shift-handoff
|
|
135
|
+
persona: maria-gomez
|
|
136
|
+
---
|
|
137
|
+
I've got five open incidents and my relief is already here...
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
After bind + brief, the scenario is ready to execute. Continue to step 3.
|
|
141
|
+
|
|
142
|
+
### 3. Target
|
|
143
|
+
|
|
144
|
+
**Web** — determine the target URL:
|
|
145
|
+
1. If the user passed an explicit target or the scenario has `target_url`, use that.
|
|
146
|
+
2. Otherwise, check `iamu/testability.md` for `target_url`.
|
|
147
|
+
3. If still unconfigured, prompt the user for the target URL (live product, staging, or localhost).
|
|
148
|
+
Verify target reachability and dev server health with `iamu doctor --target <url>` before launching. If `localhost` is unreachable, prompt the user to boot their dev server (e.g. `npm run dev`) or ask before launching it, so the walker does not fail against an unstarted port.
|
|
149
|
+
|
|
150
|
+
Where the walk *starts* is part of the situation, not of the environment: a persona arriving from a video, an email or a search result lands on a specific page, not the home page. If the scenario has `entry_path`, `iamu start-run` resolves it against the target — pass the product's base URL as `--target`. If it has none but the situation clearly begins on a particular page, set `entry_path` in the scenario frontmatter first (a path like `/en/episodes/1`, never a full URL), so this run and every later one start there. A walk started on the wrong page reports the detour as a finding.
|
|
151
|
+
|
|
152
|
+
**Native iOS** — the target is a device plus a build. Establish three things:
|
|
153
|
+
|
|
154
|
+
- **Which simulator.** Use a DEDICATED device, never the one the project builds to. An `xcrun simctl install` from any other session terminates the app and relaunches it WITHOUT its launch arguments — so a seeded state silently becomes first-run onboarding, mid-scenario. The walker records that as a product defect, and she is right to: nothing visible to her distinguishes it from the product breaking.
|
|
155
|
+
- **Which build.** An installed bundle id, or a freshly built `.app` to install first. Never walk a build that is still being edited — findings from a half-finished screen cannot be attributed to any commit.
|
|
156
|
+
- **Launch arguments**, if the scenario needs a particular state or entry point.
|
|
157
|
+
|
|
158
|
+
Record it as a target string the run can carry, for example `sim://<device-name>/<bundle-id>`.
|
|
159
|
+
|
|
160
|
+
**Then verify the starting state before spawning anyone.** Launch the app and take ONE screenshot confirming the product is where the scenario assumes it starts. Wait a few seconds after launch first: a screen rendered before its state lands shows the wrong thing, and verifying too early makes the verification itself lie — in the direction of "the harness is broken", which costs a debugging detour or, worse, waves a real seeding bug through.
|
|
161
|
+
|
|
162
|
+
**Expected State & Semantic Squinting — verify environment before walking.** A scenario testing triage, review, or audits requires a populated, realistic system.
|
|
163
|
+
1. **Expected State:** If the scenario defines `state.description`, verify the landing screen matches what the persona expects to see (e.g. populated register, open incidents). If the screen is completely blank and the persona cannot self-seed, stop early and report the run as blocked by missing preconditions rather than logging false product bugs.
|
|
164
|
+
2. **Data Squinting & Approximation:** If the exact record described in the narrative is absent (e.g. no "damaged conveyor belt" hazard), the walker must follow `state.approximation` — "squint" at the real data, pick the closest plausible record (e.g. an active mechanical or safety hazard), and proceed with the evaluation/delegation workflow.
|
|
165
|
+
- **Squinting Guardrail:** Squinting is bounded to semantically related items within the same domain workflow. It does NOT permit drifting to unrelated modules (e.g. switching from risk assessment to user profile settings). If no plausible record exists, declare the run blocked.
|
|
166
|
+
3. **Empty State Fallback:**
|
|
167
|
+
- If the database is empty and the persona role has creation rights (e.g. Manager or Reporter), the persona may create the minimal viable record in-character to proceed with the core test.
|
|
168
|
+
- If the persona role is read-only or subordinate (cannot self-seed), stop and report the run as blocked by preconditions.
|
|
169
|
+
|
|
170
|
+
**Access — how the walker becomes this persona.** A walk as a forklift driver that runs with an administrator's session reports nothing true about what the driver can see or reach. Access is recorded in two places, and `iamu instructions walk` (step 4) returns both as `access`:
|
|
171
|
+
|
|
172
|
+
- `access.project` — from `iamu/context.yml` `access`: HOW switching user is done in this product (a dev persona switcher, a storage key, seeded test accounts, a login form). Written once per project.
|
|
173
|
+
- `access.persona` — from the persona file's `access`: WHICH user this persona is (an account name, a role, a switcher key).
|
|
174
|
+
|
|
175
|
+
**Interactive Auth Handshake (for enterprise auth, SSO, 2FA, BankID):**
|
|
176
|
+
If the product is behind enterprise login where automated dev persona switching is not configured:
|
|
177
|
+
1. Open the browser to the target URL (`iamu browse start --run <run-id>` or browser tool).
|
|
178
|
+
2. Prompt the human user:
|
|
179
|
+
> 👉 **Please log in as `<persona.role>` (`<persona.name>`) in the opened browser window.** Press Enter once you reach the dashboard to hand control to the walker...
|
|
180
|
+
3. Wait for the user to confirm, then let the walker drive the authenticated session.
|
|
181
|
+
|
|
182
|
+
If automated switching exists:
|
|
183
|
+
1. Check the project's own agent docs (`CLAUDE.md`, `AGENTS.md`) for a documented way to switch user or role.
|
|
184
|
+
2. Map the persona to the closest account or role the product actually has. If nothing fits, say so.
|
|
185
|
+
3. Write what you learned: the mechanism into `iamu/context.yml` as `access:`, the persona's own key into `iamu/personas/<slug>.md` frontmatter as `access:`. Passwords and tokens never go in either — name where they live (an env var, a vault entry) instead.
|
|
186
|
+
|
|
187
|
+
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.
|
|
188
|
+
|
|
189
|
+
### 4. Execute the walkthrough
|
|
190
|
+
|
|
191
|
+
**Set up the run directory.** Use the CLI to scaffold a valid run:
|
|
192
|
+
|
|
193
|
+
```bash
|
|
194
|
+
iamu start-run <scenario-slug> --target <target> --json
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
This creates the run directory, writes `walkthrough.json` with resolved persona/outline slugs and the build under test (git SHA and branch, whether there are uncommitted changes outside `iamu/` with a fingerprint of them, CI run when in CI), and returns:
|
|
198
|
+
```json
|
|
199
|
+
{ "run_id": "...", "path": "...", "scenario_slug": "...", "target_url": "...", "persona_slug": "...", "outline_slug": "...", "build": { "git_sha": "...", "git_branch": "...", "git_dirty": false }, "environment": "https://staging.example.com" }
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
Pass `--build <label>` to name the build (a version or release tag) and `--env <name>` to name the environment (`staging`, `production`); without `--env` the environment is the target URL's origin. Neither is needed for a local walk.
|
|
203
|
+
|
|
204
|
+
Use the returned `run_id` and `path` for all subsequent operations.
|
|
205
|
+
|
|
206
|
+
**Size the browser for this persona** (`iamu browse` only), every run — also when a browser is already open from an earlier run:
|
|
207
|
+
|
|
208
|
+
```bash
|
|
209
|
+
iamu browse start --run <run-id>
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
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.
|
|
213
|
+
|
|
214
|
+
**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`):
|
|
215
|
+
|
|
216
|
+
```bash
|
|
217
|
+
iamu instructions walk --scenario <scenario-slug> --run <run-id> --surface browse --json
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
`--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.
|
|
221
|
+
|
|
222
|
+
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.
|
|
223
|
+
|
|
224
|
+
**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:
|
|
225
|
+
> "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."
|
|
226
|
+
|
|
227
|
+
**CRITICAL: Dispatch the walker as an isolated subagent.** Spawn a fresh subagent using your host editor's subagent mechanism (e.g. `Agent(...)` in Claude Code, `invoke_subagent` in Antigravity, or host-native subagent launcher). The subagent gets ONLY the walking prompt (`walker_prompt`) — no prior conversation history.
|
|
228
|
+
|
|
229
|
+
A fresh subagent is NOT blind by default. On most hosts it still loads the project's agent instructions and can read files in the repo, so it may know the domain model, the route table, and why a screen was built the way it was — none of which the persona knows. The methodology's "Stay outside the product" rule is what keeps it honest; it is part of `walker_prompt` — never remove or soften it. If the host lets you restrict a subagent's tools, give the walker only the driving surface, file write/edit, and a shell for `iamu` commands.
|
|
230
|
+
|
|
231
|
+
**Model tiering & subagent dispatch:**
|
|
232
|
+
- **Walker (Browser Navigation):** High turn count, mechanical tool-use. Use the **fast** model tier (`flash` or `haiku`) by default to cut walk time by ~60% and conserve session quota.
|
|
233
|
+
- **Matcher & Judge:** Broad synthesis and semantic comparison. Use the **thorough** frontier tier (`pro`, `sonnet`, or active model) to prevent severity inflation.
|
|
234
|
+
|
|
235
|
+
```
|
|
236
|
+
# In Claude Code:
|
|
237
|
+
Agent({ description: "Walk <scenario-slug> as <persona.name>", model: "haiku", prompt: "<walker_prompt, verbatim>" })
|
|
238
|
+
|
|
239
|
+
# In Antigravity / generic subagent hosts:
|
|
240
|
+
invoke_subagent(Role="Persona Walker", Model="flash", Prompt="<walker_prompt, verbatim>")
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
The subagent inherits the driving-surface tools and drives the product independently. It does not see this conversation.
|
|
244
|
+
|
|
245
|
+
**For a native walkthrough, append these to `walker_prompt`** (the one addition allowed), or the run produces instrument artefacts instead of findings:
|
|
246
|
+
|
|
247
|
+
- **She is deaf.** The simulator returns no audio. She may report "I tapped the speaker and nothing visibly confirmed it played" — never anything about what the audio said.
|
|
248
|
+
- **Taps miss.** She taps a coordinate read from a screenshot taken BEFORE the action; mid-animation it lands nowhere. One no-change is never a finding — retry once at the same target, and only a second no-change becomes one.
|
|
249
|
+
- **Screenshot every 3-4 taps at most.** Batching more desyncs the moment an answer opens a screen she did not expect.
|
|
250
|
+
- **Coordinates are device points, origin top-left.** A scaled screenshot must be mapped back to that space before tapping.
|
|
251
|
+
|
|
252
|
+
**If subagent dispatch or model-switching is not supported by your host editor** (e.g. standard Cursor / Windsurf single-session mode), fall back to walking directly in the current session (inheriting the active model) — but strictly adhere to the persona behavioral constraints in `walker_prompt`.
|
|
253
|
+
|
|
254
|
+
After the walker returns, continue to the post-walk pipeline below.
|
|
255
|
+
|
|
256
|
+
**Recording steps:**
|
|
257
|
+
|
|
258
|
+
Use atomic CLI commands to drive and record in one step — do NOT manually author JSON files:
|
|
259
|
+
|
|
260
|
+
- **When using `iamu browse` (web):**
|
|
261
|
+
```bash
|
|
262
|
+
iamu browse step --run <run-id> --action "Opened dashboard" --note "First thing I see is the overview panel" goto https://app.example.com/dashboard
|
|
263
|
+
iamu browse step --run <run-id> --action "Click checkout" --note "Button was hard to find" click button "Checkout"
|
|
264
|
+
```
|
|
265
|
+
**Avoid shell quoting friction:** When persona notes or actions contain quotes, apostrophes, or multi-line monologues, use `--step-file <path>` (or `-` for stdin) to avoid shell escaping errors:
|
|
266
|
+
```bash
|
|
267
|
+
iamu browse step --run <run-id> --step-file <path-to-step.json> click button "Checkout"
|
|
268
|
+
# or pass the entire action payload including cmd via JSON / stdin:
|
|
269
|
+
# { "action": "...", "note": "...", "cmd": ["click", "button", "Checkout"] }
|
|
270
|
+
```
|
|
271
|
+
This executes the browser action, waits for the DOM, takes the screenshot into `screenshots/step-N.png`, captures the URL, and writes `steps/NNN.json` atomically.
|
|
272
|
+
|
|
273
|
+
- **When using an external surface (iOS Simulator / custom MCP):**
|
|
274
|
+
```bash
|
|
275
|
+
iamu step --run <run-id> --action "Tapped proceed" --note "Next screen loaded" --shot <screenshot-path>
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
Step files live at `iamu/.runs/<run-id>/steps/<NNN>.json`. The CLI manages monotonic step numbers, timestamps, and screenshots. Never write raw JSON files with glue code.
|
|
279
|
+
|
|
280
|
+
**Recording findings:**
|
|
281
|
+
|
|
282
|
+
Use the CLI to create findings with valid frontmatter, UUID, and slug:
|
|
283
|
+
|
|
284
|
+
```bash
|
|
285
|
+
iamu new-finding --scenario <slug> --run <run-id> --title "Short title" --type hinders --severity major --ui-fact "What the UI showed" --consequence "Impact on persona" --task-impact impairs --confidence high --json
|
|
286
|
+
```
|
|
287
|
+
|
|
288
|
+
This generates a valid UUID, derives the slug from the title, and writes a frontmatter-valid file to `iamu/findings/<slug>.md`. Returns `{ "slug": "...", "path": "...", "id": "..." }`.
|
|
289
|
+
|
|
290
|
+
After the CLI scaffolds the file, edit the file to add the finding body (description + recommendation) below the frontmatter.
|
|
291
|
+
|
|
292
|
+
Valid `--type` values: `helps`, `hinders`, `missing`, `irrelevant`, `incorrect`.
|
|
293
|
+
Valid `--severity` values: `critical`, `major`, `minor`, `observation`.
|
|
294
|
+
Valid `--task-impact` values (effect on the persona's task): `blocks`, `impairs`, `slows`, `neutral`, `accelerates`, `enables`. A `helps` finding is never `blocks`/`impairs`/`slows`; a problem is never `accelerates`/`enables`.
|
|
295
|
+
Valid `--confidence` values: `high`, `medium`, `low` (use `low` when it may be a tooling limitation).
|
|
296
|
+
|
|
297
|
+
Findings never name a human test: the walker does not see them. The judge links findings to the human tests they bear on (`evaluate-record` writes `human_test_id`).
|
|
298
|
+
|
|
299
|
+
**DEPTH GATE:** Both `--ui-fact` and `--consequence` should be provided. If you cannot articulate both, record as a step note instead — do not create a finding file.
|
|
300
|
+
|
|
301
|
+
**Post-walk pipeline (MANDATORY — do NOT skip any step):**
|
|
302
|
+
|
|
303
|
+
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.
|
|
304
|
+
|
|
305
|
+
**A. Assemble canonical + report (local).** Use `--no-push` so post-processing stays fast, local, and synchronous:
|
|
306
|
+
|
|
307
|
+
```bash
|
|
308
|
+
iamu complete <run-id> --no-prompt --no-push --json
|
|
309
|
+
```
|
|
310
|
+
|
|
311
|
+
This reads all steps, findings, and entity files, assembles `canonical.json`, generates `report.md`, and computes the delta against prior runs.
|
|
312
|
+
|
|
313
|
+
**B. Match findings to earlier runs.** Get the matcher bundle:
|
|
314
|
+
|
|
315
|
+
```bash
|
|
316
|
+
iamu match <run-id> --json
|
|
317
|
+
```
|
|
318
|
+
|
|
319
|
+
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). Write its JSON answer to `<matches.json>` and record it:
|
|
320
|
+
|
|
321
|
+
```bash
|
|
322
|
+
iamu match-record <run-id> --file <matches.json>
|
|
323
|
+
```
|
|
324
|
+
|
|
325
|
+
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.
|
|
326
|
+
|
|
327
|
+
**C. Evaluate human tests.** Get the evaluation prompt:
|
|
328
|
+
|
|
329
|
+
```bash
|
|
330
|
+
iamu evaluate <run-id> --json
|
|
331
|
+
```
|
|
332
|
+
|
|
333
|
+
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`:
|
|
334
|
+
|
|
335
|
+
```bash
|
|
336
|
+
iamu evaluate-record <run-id> --file <verdicts.json> --no-prompt --no-push
|
|
337
|
+
```
|
|
338
|
+
|
|
339
|
+
This links findings to human tests (`human_test_id`) and updates the report with judge verdicts.
|
|
340
|
+
|
|
341
|
+
**D. Read the completed canonical.** Read `iamu/.runs/<run-id>/canonical.json` for the final data including verification delta (if a prior run exists). Use this for step 5 presentation.
|
|
342
|
+
|
|
343
|
+
**E. Publish (linked mode only).** Upload the completed run, screenshots, verdicts, and findings in one atomic sync:
|
|
344
|
+
|
|
345
|
+
```bash
|
|
346
|
+
iamu sync --json
|
|
347
|
+
```
|
|
348
|
+
|
|
349
|
+
Then get the run's link:
|
|
350
|
+
|
|
351
|
+
```bash
|
|
352
|
+
iamu open <run-id> --print
|
|
353
|
+
```
|
|
354
|
+
|
|
355
|
+
It prints the URL only if the run is on the cloud; otherwise it exits 1 and says why. Keep the URL — or the reason — for step 5. From the sync result, keep `conflicts` (a teammate changed the same finding) and `pending_deletes` for step 5 too. Never run `iamu sync --keep-mine` or `--confirm-deletes` yourself: both overwrite or delete team data, and only the user decides that.
|
|
356
|
+
|
|
357
|
+
In linked-no-credentials or local-only mode, skip E.
|
|
358
|
+
|
|
359
|
+
Only after A→E are complete, proceed to step 5.
|
|
360
|
+
|
|
361
|
+
### 4a. Walk methodology summary
|
|
362
|
+
|
|
363
|
+
The `walker_prompt` from `iamu instructions walk` is the source of truth and contains full walking methodology for the subagent.
|
|
364
|
+
|
|
365
|
+
- **Depth gate**: Ensure findings articulate both the specific UI fact and the consequence for this persona.
|
|
366
|
+
- **Dedup**: Skip findings in the dismissed list or already logged in the current run.
|
|
367
|
+
- **Graceful degradation**: On judge evaluation failure, set verdicts to pending/null and proceed with report presentation.
|
|
368
|
+
|
|
369
|
+
### 5. Present assessment — stay in the conversation
|
|
370
|
+
|
|
371
|
+
Render results **inline** with a high-contrast executive summary banner, followed by findings enriched with persona voice, evidence citations, and clickable file links.
|
|
372
|
+
|
|
373
|
+
1. **Executive Summary Banner & Focus Checkpoint**
|
|
374
|
+
|
|
375
|
+
Read the outline's `human_tests[0].question` and answer it directly. Use the evaluation verdict if available:
|
|
376
|
+
|
|
377
|
+
```
|
|
378
|
+
Walkthrough: [<scenario-slug>](iamu/scenarios/<scenario-slug>.md) ([<persona>](iamu/personas/<persona>.md))
|
|
379
|
+
Verdict: <FAIL / PARTIAL / PASS> · <N> Blockers (Critical) · <M> Friction points (Major/Minor) · <K> Helpers (Steps: <N>)
|
|
380
|
+
Focus Checkpoint: "<human_tests[0].question>" → <No / Partial / Yes>: <1-2 sentence direct answer explaining why>
|
|
381
|
+
```
|
|
382
|
+
|
|
383
|
+
2. **Progress since last run** (only when canonical.json contains a `verification` section). Present the delta:
|
|
384
|
+
|
|
385
|
+
```
|
|
386
|
+
Since this scenario's last run:
|
|
387
|
+
✓ 1 fixed, re-checked (handoff note saves — step 6)
|
|
388
|
+
✗ 1 persists (timeout warning)
|
|
389
|
+
○ 2 not seen this run (handoff list filtering, submit confirmation)
|
|
390
|
+
+ 1 new since that run (date picker locale)
|
|
391
|
+
```
|
|
392
|
+
|
|
393
|
+
`resolved` means the matcher saw this run's steps do the thing the finding said failed — say which step. `not_observed` means only that this walk did not record the finding again. Never present it as fixed: the walker may have stopped before that screen or taken another route. Say which ones were not seen and, if the walk plainly never reached the screen they live on, say that too.
|
|
394
|
+
|
|
395
|
+
3. **Findings** — severity-first (CRITICAL → MAJOR → MINOR), grouped by type (hinders and missing first, helps at the bottom). For each finding, include the **persona reaction**, **evidence citation**, and **clickable link**:
|
|
396
|
+
|
|
397
|
+
**Hinders / Missing** (act on these):
|
|
398
|
+
|
|
399
|
+
1. [CRITICAL · hinders] Submit fails opaquely when required field empty ([file](iamu/findings/<slug>.md))
|
|
400
|
+
• Persona: <Persona Name>: "<Persona reaction quote or consequence showing real human friction>"
|
|
401
|
+
• Evidence: Step <N> at <url> (Screenshot: [view](iamu/.runs/<run-id>/screenshots/<NNN>.png))
|
|
402
|
+
• Recommendation: <Concrete recommendation from finding>
|
|
403
|
+
|
|
404
|
+
2. [MAJOR · hinders] Date picker has no "today" shortcut ([file](iamu/findings/<slug>.md))
|
|
405
|
+
• Persona: <Persona Name>: "<Persona reaction quote or consequence>"
|
|
406
|
+
• Evidence: Step <N> at <url>
|
|
407
|
+
• Recommendation: <Concrete recommendation from finding>
|
|
408
|
+
|
|
409
|
+
**Helps** (preserve these):
|
|
410
|
+
|
|
411
|
+
• [helps] Search auto-suggests from recent entries (Step <N>)
|
|
412
|
+
|
|
413
|
+
4. **What worked** — supportive moments worth preserving (brief, from `what_worked` in the canonical JSON).
|
|
414
|
+
|
|
415
|
+
5. **Next-scenario suggestion** — read `iamu/scenarios/` to check coverage, then suggest one of:
|
|
416
|
+
- Same scenario with a different persona (if other personas exist for this situation)
|
|
417
|
+
- Adjacent untested scenario in the same capability
|
|
418
|
+
- Nothing (if coverage is good)
|
|
419
|
+
|
|
420
|
+
6. **Cloud** — one line, by mode:
|
|
421
|
+
- **Linked, run on the cloud** → `Shareable report: <url>` (screenshots and step replay for anyone on the team).
|
|
422
|
+
- **Linked, run not on the cloud** → the reason from step E and its remedy, e.g. `Cloud: queued — retries on the next iamu sync`.
|
|
423
|
+
- **Local-only** → on first completed run: `Want a link to share this report? iamu auth login connects to Iamu Cloud — optional, everything keeps working locally.`
|
|
424
|
+
|
|
425
|
+
7. **Next actions (Interactive Triage Selection)**:
|
|
426
|
+
When the walkthrough completes and yields findings:
|
|
427
|
+
- If your environment provides an interactive user-prompt tool (e.g. `ask_question`, `ask_followup_question`), invoke it:
|
|
428
|
+
- Question: "Walkthrough complete: <F> findings reported. How would you like to proceed?"
|
|
429
|
+
- Options:
|
|
430
|
+
1. "[Recommended] Walk through findings one by one"
|
|
431
|
+
2. "Apply fixes for all clear findings (batch fix)"
|
|
432
|
+
3. "Discuss findings and persona friction points"
|
|
433
|
+
4. "Re-run walkthrough to test changes"
|
|
434
|
+
- Otherwise (in CLI or text-only environments):
|
|
435
|
+
|
|
436
|
+
Walkthrough complete: <F> findings reported.
|
|
437
|
+
1. [Recommended] Walk through findings one by one
|
|
438
|
+
2. Apply fixes for all clear findings (batch fix)
|
|
439
|
+
3. Discuss findings and persona friction points
|
|
440
|
+
4. Re-run walkthrough to test changes
|
|
441
|
+
|
|
442
|
+
Press Enter to review findings [1], enter 2-4, or type specific instructions:
|
|
443
|
+
(Treat empty Enter as Option 1)
|
|
444
|
+
|
|
445
|
+
### 6. Conversational Triage & Guided Review
|
|
446
|
+
|
|
447
|
+
The conversation is the triage surface. Do NOT eject the user to manual CLI commands or dump them at file paths.
|
|
448
|
+
|
|
449
|
+
#### A. Guided One-by-One Review ("walk through them" / "review one by one")
|
|
450
|
+
When the user asks to review findings one by one:
|
|
451
|
+
1. **Present Finding #N in isolation**:
|
|
452
|
+
- Number, severity, type, and title
|
|
453
|
+
- Persona consequence quote and why the friction occurred
|
|
454
|
+
- Relevant source code location (inspect project files to provide file path + line numbers)
|
|
455
|
+
- Step & screenshot evidence ([view](iamu/.runs/<run-id>/screenshots/<NNN>.png))
|
|
456
|
+
- Actionable recommendation
|
|
457
|
+
- Interactive decision prompt:
|
|
458
|
+
- If interactive tool available:
|
|
459
|
+
- Question: "Triage Finding #<N>: '<finding title>'?"
|
|
460
|
+
- Options:
|
|
461
|
+
1. "[Recommended] Fix now (apply inline code fix & verify)"
|
|
462
|
+
2. "Dismiss / Skip (not relevant or walker error)"
|
|
463
|
+
3. "Discuss / Explore trade-offs"
|
|
464
|
+
4. "Next finding (keep open)"
|
|
465
|
+
- Otherwise (CLI / text-only):
|
|
466
|
+
Triage Finding #<N>: '<finding title>'
|
|
467
|
+
1. [Recommended] Fix now (apply inline code fix & verify)
|
|
468
|
+
2. Dismiss / Skip (not relevant or walker error)
|
|
469
|
+
3. Discuss / Explore trade-offs
|
|
470
|
+
4. Next finding (keep open)
|
|
471
|
+
Press Enter to fix [1], select 2-4, or describe decision:
|
|
472
|
+
(Treat empty Enter as Option 1)
|
|
473
|
+
|
|
474
|
+
2. **Handle the user's decision**:
|
|
475
|
+
- **Fix now**:
|
|
476
|
+
Make the code edit, verify it loads (or check local tests/types), update the finding's frontmatter (`triage_status: addressed`, `triage_note: "<summary of fix>"`).
|
|
477
|
+
Tell the user the fix is applied and ask: "Ready for finding #<N+1>?".
|
|
478
|
+
- **Skip / Dismiss**:
|
|
479
|
+
If reason is not specified, ask or infer the appropriate category:
|
|
480
|
+
- `out_of_scope`: Not relevant to this project/flow scope.
|
|
481
|
+
- `not_relevant`: By design / intended behavior.
|
|
482
|
+
- `walker_error`: Walker misread the screen or made a navigational error.
|
|
483
|
+
- `duplicate`: Duplicate of another finding.
|
|
484
|
+
Execute: `iamu triage <slug> --status dismissed --reason <reason> --note "<why>"`.
|
|
485
|
+
Tell the user: "Dismissed as `<reason>` — created guidance rule in `iamu/guidance/<slug>.md` so future walkthroughs will not report this."
|
|
486
|
+
Then advance to finding #<N+1>.
|
|
487
|
+
- **Discuss / Why**:
|
|
488
|
+
Analyze why the persona experienced this friction, cite the persona brief and steps/screenshots, evaluate whether competitor tools solve this pattern, and give a direct opinion on whether it's worth fixing.
|
|
489
|
+
- **Next**:
|
|
490
|
+
Leave open (or set `triage_status: deferred` with note) and advance to finding #<N+1>.
|
|
491
|
+
|
|
492
|
+
3. **Wrap up after all findings are reviewed**:
|
|
493
|
+
- Run `iamu validate --all`.
|
|
494
|
+
- In linked mode, run `iamu sync --json` once so teammates see the triage decisions.
|
|
495
|
+
- Suggest re-running the walkthrough: `iamu-run <scenario-slug>` to verify fixes.
|
|
496
|
+
|
|
497
|
+
#### B. Direct Batch Actions ("fix 1 and 2", "fix all critical")
|
|
498
|
+
Read the finding details from the canonical JSON (already in context), inspect the code, make the edits, and update frontmatter to `triage_status: addressed` with `triage_note`.
|
|
499
|
+
|
|
500
|
+
#### C. Ad-hoc Questions & Challenges ("why did Karl do that?", "is #2 really a bug?")
|
|
501
|
+
Answer directly using persona brief context and step evidence. If the walker got confused or misinterpreted intended behavior, recommend dismissing as `walker_error` or `not_relevant` rather than adding unnecessary code.
|
|
502
|
+
|
|
503
|
+
**Linked mode: publish triage decisions.** When the user is done fixing and dismissing, run `iamu sync --json` once so teammates see the decisions (and any team request for these findings closes). Report it in one line (`Synced 3 findings to Iamu Cloud.`), with conflicts handled as in item 6. Do not sync after every single edit.
|
|
504
|
+
|
|
505
|
+
**Do NOT** dump the user at file paths. The report and finding files exist for later reference, but the conversation is the triage surface. Mention artifacts only if the user asks for them or wants to share the report externally. The cloud link is the exception: in linked mode it IS the shareable report, so it always goes in the presentation.
|
|
506
|
+
|
|
507
|
+
Run `iamu validate --all` to verify all entities before reporting done. If older finding files fail on schema drift (legacy status words, a finding type stored in `severity`, home-made ids), `iamu validate --all --fix` repairs what is mechanical — preview with `--dry-run`. Whatever it leaves invalid is missing information only a person has; report those, do not fill them in.
|
|
508
|
+
|
|
509
|
+
## Guidelines
|
|
510
|
+
|
|
511
|
+
- **Drafts bind in-line, not as a detour.** If the user picks a draft, the persona-bind step should feel like part of running — not a separate invocation.
|
|
512
|
+
- **All generation is local.** All generation — persona suggestions, brief — uses the local LLM directly. No server-side LLM calls.
|
|
513
|
+
- **Scenario vocabulary.** Say "scenario" — never "outline" — when addressing the user.
|
|
514
|
+
- **Adopt, do not audit.** The walkthrough's value is seeing the product through the persona's eyes. Do not narrate as an observer — live it.
|
|
515
|
+
- **The driving surface drives.** Every tool call that navigates the product goes through the driving surface picked in step 0. The `iamu` CLI records observations; it never drives.
|
|
516
|
+
- **Close cleanly but stay present.** Canonical assembly ships the report + findings. Present findings inline and offer to fix — do not eject the user to files or another command. The conversation is the triage surface.
|
|
517
|
+
- **Validate before done.** Always run `iamu validate --all` after a walkthrough to catch any issues.
|
|
518
|
+
- **Use CLI for scaffolding.** `iamu start-run` for runs, `iamu new-finding` for findings, `iamu complete` for assembly. Never manually create run directories or generate UUIDs.
|
|
519
|
+
- **Step files:** Record steps via the CLI (`iamu browse step` or `iamu step`), which manages step numbering, screenshots, and atomic writes to `steps/001.json`.
|
|
520
|
+
- **Finding bodies:** After `iamu new-finding` scaffolds the file, edit the file to add the description and recommendation below the frontmatter.
|