@iamu-dev/iamu 0.0.0-stage → 0.2.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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 +21005 -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 +156 -0
- package/dist/commands/cloud-push.d.ts +27 -0
- package/dist/commands/complete.d.ts +131 -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 +24 -0
- package/dist/commands/evaluate.d.ts +30 -0
- package/dist/commands/findings.d.ts +7 -0
- package/dist/commands/init.d.ts +9 -0
- package/dist/commands/instructions-walk.d.ts +59 -0
- package/dist/commands/list.d.ts +5 -0
- package/dist/commands/match.d.ts +12 -0
- package/dist/commands/mcp-config.d.ts +10 -0
- package/dist/commands/new-entity.d.ts +15 -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 +49 -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/index.d.ts +9 -0
- package/dist/index.js +20852 -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 +167 -0
- package/dist/templates/skills/iamu-findings.md +228 -0
- package/dist/templates/skills/iamu-new.md +206 -0
- package/dist/templates/skills/iamu-propose.md +124 -0
- package/dist/templates/skills/iamu-run.md +400 -0
- package/dist/templates/skills/iamu-setup.md +192 -0
- package/dist/templates/skills/iamu-status.md +64 -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 +69 -3
|
@@ -0,0 +1,400 @@
|
|
|
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.** Run `iamu status --json` and look at `runs.incomplete`. A run listed there was started but never reached `iamu complete` — the walker died or the session ended — so its steps and findings exist but it has no report, no verdicts, and no delta. If there are any, tell the user how many and offer, once:
|
|
50
|
+
|
|
51
|
+
- **Finish** one that has step files: run the post-walk pipeline (step 4, A→B→C→D) on it as it stands. A partial walk with a report is worth more than a complete one nobody assembled.
|
|
52
|
+
- **Discard** ones with no steps: delete the run directory. Runs are ephemeral; findings already written to `iamu/findings/` are kept.
|
|
53
|
+
- **Leave them** and carry on.
|
|
54
|
+
|
|
55
|
+
Do not block the new run on this, and do not ask again in the same session.
|
|
56
|
+
|
|
57
|
+
**Cloud state.** Run `iamu auth status --json` once. It sets the mode for the rest of this skill:
|
|
58
|
+
|
|
59
|
+
- **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.
|
|
60
|
+
- **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.
|
|
61
|
+
- **Local-only** → nothing to do here.
|
|
62
|
+
|
|
63
|
+
### 1. Resolve the argument
|
|
64
|
+
|
|
65
|
+
Four paths based on `$ARGUMENTS`:
|
|
66
|
+
|
|
67
|
+
**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.
|
|
68
|
+
|
|
69
|
+
**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.
|
|
70
|
+
|
|
71
|
+
**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.
|
|
72
|
+
|
|
73
|
+
**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):
|
|
74
|
+
|
|
75
|
+
```
|
|
76
|
+
Needs a re-run (fixes awaiting proof):
|
|
77
|
+
1. maria-gomez--busy-shift — 2 fixes applied after the last run
|
|
78
|
+
|
|
79
|
+
Drafts (need persona):
|
|
80
|
+
2. busy-shift-draft — Busy shift situation (no persona)
|
|
81
|
+
3. checkout-abandon-draft — Abandoned cart situation (no persona)
|
|
82
|
+
|
|
83
|
+
Ready to run:
|
|
84
|
+
4. dev-patel--checkout-abandon — Abandoned cart x Dev Patel
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
Omit the first group when `rerun` is empty. User picks a number or slug. Drafts get a bind prompt before execution (step 2); ready-to-run scenarios skip to step 3.
|
|
88
|
+
|
|
89
|
+
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.
|
|
90
|
+
|
|
91
|
+
### 2. Bind persona (draft path only)
|
|
92
|
+
|
|
93
|
+
If the resolved scenario has `persona: null`, prompt to bind before executing:
|
|
94
|
+
|
|
95
|
+
"This scenario is a draft — no persona bound. Pick one, or draft a new persona."
|
|
96
|
+
|
|
97
|
+
1. Read `iamu/personas/` directory or run `iamu list personas`; present as pickable list + "new" option.
|
|
98
|
+
2. Picked existing → bind that persona by updating the scenario file's `persona` field.
|
|
99
|
+
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.
|
|
100
|
+
4. After binding the persona, generate a 3--5 sentence first-person brief and write it as the scenario file's markdown body:
|
|
101
|
+
|
|
102
|
+
```yaml
|
|
103
|
+
---
|
|
104
|
+
id: <uuid>
|
|
105
|
+
slug: maria-gomez--busy-shift-handoff
|
|
106
|
+
outline: busy-shift-handoff
|
|
107
|
+
persona: maria-gomez
|
|
108
|
+
---
|
|
109
|
+
I've got five open incidents and my relief is already here...
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
After bind + brief, the scenario is ready to execute. Continue to step 3.
|
|
113
|
+
|
|
114
|
+
### 3. Target
|
|
115
|
+
|
|
116
|
+
**Web** — ask for the target URL (live product, staging, or localhost). If the scenario has a default `target_url` in its frontmatter, offer that with a confirm.
|
|
117
|
+
|
|
118
|
+
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.
|
|
119
|
+
|
|
120
|
+
**Native iOS** — the target is a device plus a build. Establish three things:
|
|
121
|
+
|
|
122
|
+
- **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.
|
|
123
|
+
- **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.
|
|
124
|
+
- **Launch arguments**, if the scenario needs a particular state or entry point.
|
|
125
|
+
|
|
126
|
+
Record it as a target string the run can carry, for example `sim://<device-name>/<bundle-id>`.
|
|
127
|
+
|
|
128
|
+
**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.
|
|
129
|
+
|
|
130
|
+
**Web: check the product is ready, not just up.** A server that answers is not a product that has its data. Before spawning the walker, confirm the thing the scenario depends on actually exists — the list the persona will open is populated, the seeded records are there, background setup (seeding, migrations, indexing) has finished. Use the project's documented readiness signal if it has one; otherwise look at one screen or one API response yourself. A walk started too early reports "the feature is missing" as a critical finding, and nothing in the walker's view distinguishes that from a real defect.
|
|
131
|
+
|
|
132
|
+
**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`:
|
|
133
|
+
|
|
134
|
+
- `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.
|
|
135
|
+
- `access.persona` — from the persona file's `access`: WHICH user this persona is (an account name, a role, a switcher key).
|
|
136
|
+
|
|
137
|
+
If both are present, use them as they are. If either is missing, fill the gap now and SAVE it so no later run has to ask:
|
|
138
|
+
|
|
139
|
+
1. Check the project's own agent docs (`CLAUDE.md`, `AGENTS.md`, anything they point to for the dev environment) for a documented way to switch user or role.
|
|
140
|
+
2. Map the persona to the closest account or role the product actually has. If nothing fits, say so — a persona the product cannot represent is itself worth telling the user.
|
|
141
|
+
3. If the docs are silent, ask the user once. "No login, everyone is the same user" is a valid answer.
|
|
142
|
+
4. 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.
|
|
143
|
+
|
|
144
|
+
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.
|
|
145
|
+
|
|
146
|
+
### 4. Execute the walkthrough
|
|
147
|
+
|
|
148
|
+
**Set up the run directory.** Use the CLI to scaffold a valid run:
|
|
149
|
+
|
|
150
|
+
```bash
|
|
151
|
+
iamu start-run <scenario-slug> --target <target> --json
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
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:
|
|
155
|
+
```json
|
|
156
|
+
{ "run_id": "...", "path": "...", "scenario_slug": "...", "target_url": "...", "persona_slug": "...", "outline_slug": "...", "build": { "git_sha": "...", "git_branch": "...", "git_dirty": false }, "environment": "https://staging.example.com" }
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
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.
|
|
160
|
+
|
|
161
|
+
Use the returned `run_id` and `path` for all subsequent operations.
|
|
162
|
+
|
|
163
|
+
**Size the browser for this persona** (`iamu browse` only), every run — also when a browser is already open from an earlier run:
|
|
164
|
+
|
|
165
|
+
```bash
|
|
166
|
+
iamu browse start --run <run-id>
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
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.
|
|
170
|
+
|
|
171
|
+
**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`):
|
|
172
|
+
|
|
173
|
+
```bash
|
|
174
|
+
iamu instructions walk --scenario <scenario-slug> --run <run-id> --surface browse --json
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
`--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.
|
|
178
|
+
|
|
179
|
+
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.
|
|
180
|
+
|
|
181
|
+
**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:
|
|
182
|
+
> "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."
|
|
183
|
+
|
|
184
|
+
**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.
|
|
185
|
+
|
|
186
|
+
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.
|
|
187
|
+
|
|
188
|
+
```
|
|
189
|
+
# In Claude Code:
|
|
190
|
+
Agent({ description: "Walk <scenario-slug> as <persona.name>", prompt: "<walker_prompt, verbatim>" })
|
|
191
|
+
|
|
192
|
+
# In Antigravity / generic subagent hosts:
|
|
193
|
+
invoke_subagent(Role="Persona Walker", Prompt="<walker_prompt, verbatim>")
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
The subagent inherits the driving-surface tools and drives the product independently. It does not see this conversation.
|
|
197
|
+
|
|
198
|
+
**For a native walkthrough, append these to `walker_prompt`** (the one addition allowed), or the run produces instrument artefacts instead of findings:
|
|
199
|
+
|
|
200
|
+
- **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.
|
|
201
|
+
- **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.
|
|
202
|
+
- **Screenshot every 3-4 taps at most.** Batching more desyncs the moment an answer opens a screen she did not expect.
|
|
203
|
+
- **Coordinates are device points, origin top-left.** A scaled screenshot must be mapped back to that space before tapping.
|
|
204
|
+
|
|
205
|
+
**If subagent dispatch is not supported by your host editor** (e.g. standard Cursor without subagent tools), fall back to walking in the same context — but strictly adhere to the persona behavioral constraints in `walker_prompt`.
|
|
206
|
+
|
|
207
|
+
After the walker returns, continue to the post-walk pipeline below.
|
|
208
|
+
|
|
209
|
+
**Recording steps:**
|
|
210
|
+
|
|
211
|
+
Use atomic CLI commands to drive and record in one step — do NOT manually author JSON files:
|
|
212
|
+
|
|
213
|
+
- **When using `iamu browse` (web):**
|
|
214
|
+
```bash
|
|
215
|
+
iamu browse step --run <run-id> --action "Opened dashboard" --note "First thing I see is the overview panel" goto https://app.example.com/dashboard
|
|
216
|
+
iamu browse step --run <run-id> --action "Click checkout" --note "Button was hard to find" click button "Checkout"
|
|
217
|
+
```
|
|
218
|
+
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.
|
|
219
|
+
|
|
220
|
+
- **When using an external surface (iOS Simulator / custom MCP):**
|
|
221
|
+
```bash
|
|
222
|
+
iamu step --run <run-id> --action "Tapped proceed" --note "Next screen loaded" --shot <screenshot-path>
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
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.
|
|
226
|
+
|
|
227
|
+
**Recording findings:**
|
|
228
|
+
|
|
229
|
+
Use the CLI to create findings with valid frontmatter, UUID, and slug:
|
|
230
|
+
|
|
231
|
+
```bash
|
|
232
|
+
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
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
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": "..." }`.
|
|
236
|
+
|
|
237
|
+
After the CLI scaffolds the file, edit the file to add the finding body (description + recommendation) below the frontmatter.
|
|
238
|
+
|
|
239
|
+
Valid `--type` values: `helps`, `hinders`, `missing`, `irrelevant`, `incorrect`.
|
|
240
|
+
Valid `--severity` values: `critical`, `major`, `minor`, `observation`.
|
|
241
|
+
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`.
|
|
242
|
+
Valid `--confidence` values: `high`, `medium`, `low` (use `low` when it may be a tooling limitation).
|
|
243
|
+
|
|
244
|
+
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`).
|
|
245
|
+
|
|
246
|
+
**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.
|
|
247
|
+
|
|
248
|
+
**Post-walk pipeline (MANDATORY — do NOT skip any step):**
|
|
249
|
+
|
|
250
|
+
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.
|
|
251
|
+
|
|
252
|
+
**A. Assemble canonical + report.** Use the CLI:
|
|
253
|
+
|
|
254
|
+
```bash
|
|
255
|
+
iamu complete <run-id> --no-prompt
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
This reads all steps, findings, and entity files, assembles `canonical.json`, generates `report.md`, computes the delta against prior runs, and flips the manifest to completed. All in one command.
|
|
259
|
+
|
|
260
|
+
To get the canonical data for presentation, run with `--json`:
|
|
261
|
+
```bash
|
|
262
|
+
iamu complete <run-id> --no-prompt --json
|
|
263
|
+
```
|
|
264
|
+
|
|
265
|
+
**B. Match findings to earlier runs.** A fresh walker never words a recurring problem the same way twice, so `complete` alone reports recurrences as new and earlier findings as "not seen". Get the matcher bundle:
|
|
266
|
+
|
|
267
|
+
```bash
|
|
268
|
+
iamu match <run-id> --json
|
|
269
|
+
```
|
|
270
|
+
|
|
271
|
+
If `needed` is `false` (no earlier findings for this scenario, or none this run), skip to C. Otherwise dispatch a matcher subagent with `match_prompt` as its only context — NOT the walker, which must never see earlier findings. Write its JSON answer to a file and record it:
|
|
272
|
+
|
|
273
|
+
```bash
|
|
274
|
+
iamu match-record <run-id> --file <matches.json>
|
|
275
|
+
```
|
|
276
|
+
|
|
277
|
+
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.
|
|
278
|
+
|
|
279
|
+
**C. Evaluate human tests.** Use the CLI to get the evaluation prompt:
|
|
280
|
+
|
|
281
|
+
```bash
|
|
282
|
+
iamu evaluate <run-id> --json
|
|
283
|
+
```
|
|
284
|
+
|
|
285
|
+
This returns the judge prompt input bundle. Dispatch the evaluator as a subagent with that prompt. After the evaluator returns verdicts, record them:
|
|
286
|
+
|
|
287
|
+
```bash
|
|
288
|
+
iamu evaluate-record <run-id> --file <verdicts.json> --no-prompt
|
|
289
|
+
```
|
|
290
|
+
|
|
291
|
+
This also links the findings each verdict cites to that human test (`human_test_id` on the finding file, only where none is set), so `iamu sync` carries the link to the cloud.
|
|
292
|
+
|
|
293
|
+
**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.
|
|
294
|
+
|
|
295
|
+
**E. Publish (linked mode only).** `complete` and `evaluate-record` already pushed the run itself — report, steps, screenshots, verdicts. What they do not push are the finding files the matcher and judge updated (recurrence links, `human_test_id`); those go with sync:
|
|
296
|
+
|
|
297
|
+
```bash
|
|
298
|
+
iamu sync --json
|
|
299
|
+
```
|
|
300
|
+
|
|
301
|
+
Then get the run's link:
|
|
302
|
+
|
|
303
|
+
```bash
|
|
304
|
+
iamu open <run-id> --print
|
|
305
|
+
```
|
|
306
|
+
|
|
307
|
+
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.
|
|
308
|
+
|
|
309
|
+
In linked-no-credentials or local-only mode, skip E.
|
|
310
|
+
|
|
311
|
+
Only after A→E are complete, proceed to step 5.
|
|
312
|
+
|
|
313
|
+
### 4a. Walk methodology summary
|
|
314
|
+
|
|
315
|
+
The `walker_prompt` from `iamu instructions walk` is the source of truth and contains full walking methodology for the subagent.
|
|
316
|
+
|
|
317
|
+
- **Depth gate**: Ensure findings articulate both the specific UI fact and the consequence for this persona.
|
|
318
|
+
- **Dedup**: Skip findings in the dismissed list or already logged in the current run.
|
|
319
|
+
- **Graceful degradation**: On judge evaluation failure, set verdicts to pending/null and proceed with report presentation.
|
|
320
|
+
|
|
321
|
+
### 5. Present assessment — stay in the conversation
|
|
322
|
+
|
|
323
|
+
Render results **inline** so the user can act without leaving the conversation. Lead with the overall assessment, not a findings dump.
|
|
324
|
+
|
|
325
|
+
1. **Overall assessment** — answer the research question from the outline's human test. Read the outline's `human_tests[0].question` (the focus question the user defined when creating the scenario). Frame the verdict around it:
|
|
326
|
+
|
|
327
|
+
> **Could the admin complete bulk-import without consulting documentation?** No. The import flow requires knowledge of the role hierarchy that isn't documented in-app. 3 issues found, 1 critical.
|
|
328
|
+
|
|
329
|
+
If the evaluation subagent ran, use its verdict. If it failed or wasn't run, synthesize from findings: count hinders/missing by severity, state whether the persona could complete their task.
|
|
330
|
+
|
|
331
|
+
**This is the most important part of the output.** The user defined this question as their focus — answer it directly.
|
|
332
|
+
|
|
333
|
+
2. **Progress since last run** (only when canonical.json contains a `verification` section). Present the delta:
|
|
334
|
+
|
|
335
|
+
```
|
|
336
|
+
Since this scenario's last run:
|
|
337
|
+
✓ 1 fixed, re-checked (handoff note saves — step 6)
|
|
338
|
+
✗ 1 persists (timeout warning)
|
|
339
|
+
○ 2 not seen this run (handoff list filtering, submit confirmation)
|
|
340
|
+
+ 1 new since that run (date picker locale)
|
|
341
|
+
```
|
|
342
|
+
|
|
343
|
+
`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. `iamu complete` reports whether the walk reached the places where fixes await a re-run (`Re-check places: reached N of M`, `revisit_coverage` in `--json`); name the ones not reached — their fixes stay awaiting.
|
|
344
|
+
|
|
345
|
+
If no prior run exists, skip this.
|
|
346
|
+
|
|
347
|
+
3. **Findings** — severity-first (CRITICAL → MAJOR → MINOR), grouped by type (hinders and missing first — the actionable ones — then helps at the bottom):
|
|
348
|
+
|
|
349
|
+
**Hinders / Missing** (act on these):
|
|
350
|
+
|
|
351
|
+
| # | Severity | Type | Finding | Recommendation |
|
|
352
|
+
|---|----------|------|---------|----------------|
|
|
353
|
+
| 1 | CRITICAL | hinders | Submit fails opaquely when required field empty | Show validation inline before submit |
|
|
354
|
+
| 2 | MAJOR | hinders | Date picker has no "today" shortcut | Add quick-select for common dates |
|
|
355
|
+
| 3 | MINOR | missing | Help text uses jargon ("slutdatum") | Use plain language ("end date") |
|
|
356
|
+
|
|
357
|
+
**Helps** (preserve these):
|
|
358
|
+
|
|
359
|
+
| # | Type | Finding |
|
|
360
|
+
|---|------|---------|
|
|
361
|
+
| 4 | helps | Search auto-suggests from recent entries |
|
|
362
|
+
|
|
363
|
+
4. **What worked** — supportive moments worth preserving (brief, from `what_worked` in the canonical JSON).
|
|
364
|
+
|
|
365
|
+
5. **Next-scenario suggestion** — read `iamu/scenarios/` to check coverage, then suggest one of:
|
|
366
|
+
- Same scenario with a different persona (if other personas exist for this situation)
|
|
367
|
+
- Adjacent untested scenario in the same capability
|
|
368
|
+
- Nothing (if coverage is good)
|
|
369
|
+
|
|
370
|
+
6. **Cloud** — one line, by mode:
|
|
371
|
+
- **Linked, run on the cloud** → `Shareable report: <url>` (screenshots and step replay for anyone on the team).
|
|
372
|
+
- **Linked, run not on the cloud** → the reason from step E and its remedy, e.g. `Cloud: queued — retries on the next iamu sync` or `Cloud: not pushed — <reason>`.
|
|
373
|
+
- **Linked, no credentials** → `Cloud: not pushed — this machine has no credentials; iamu auth login restores them.`
|
|
374
|
+
- **Sync conflicts or pending deletions** (step E) → one line each: name the findings a teammate changed and give the CLI's resolution (`iamu pull --force` to take theirs after copying your edits aside, or `iamu sync --keep-mine` to keep yours — the user runs that one); for deletions, tell the user to review them and run `iamu sync --confirm-deletes` themselves.
|
|
375
|
+
- **Local-only** → nothing, with one exception: on the project's first completed run (`iamu status --json` → `runs.count` is 1), add `Want a link to share this report? iamu auth login connects the project to Iamu Cloud — optional, everything keeps working locally.` Never repeat it on later runs unless the user asks how to share a report.
|
|
376
|
+
|
|
377
|
+
7. **End with a verb**: "Which ones should I fix? (You can also dismiss any finding — it won't show up in future runs.)"
|
|
378
|
+
|
|
379
|
+
**Stay conversational.** The user says "fix 1 and 2" → you read the finding details from the canonical JSON (already in your context from the canonical assembly), look at the relevant code, and make the fix. Mark findings addressed by editing their frontmatter (`triage_status: addressed`, `triage_note: "..."`) as you go.
|
|
380
|
+
|
|
381
|
+
If the user says "skip 3" or "not relevant" or "dismiss" for a finding, set `triage_status: dismissed` with a `triage_note` explaining why. **Tell the user:** "Dismissed — this won't be reported in any future walkthrough."
|
|
382
|
+
|
|
383
|
+
**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.
|
|
384
|
+
|
|
385
|
+
**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.
|
|
386
|
+
|
|
387
|
+
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.
|
|
388
|
+
|
|
389
|
+
## Guidelines
|
|
390
|
+
|
|
391
|
+
- **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.
|
|
392
|
+
- **All generation is local.** All generation — persona suggestions, brief — uses the local LLM directly. No server-side LLM calls.
|
|
393
|
+
- **Scenario vocabulary.** Say "scenario" — never "outline" — when addressing the user.
|
|
394
|
+
- **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.
|
|
395
|
+
- **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.
|
|
396
|
+
- **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.
|
|
397
|
+
- **Validate before done.** Always run `iamu validate --all` after a walkthrough to catch any issues.
|
|
398
|
+
- **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.
|
|
399
|
+
- **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`.
|
|
400
|
+
- **Finding bodies:** After `iamu new-finding` scaffolds the file, edit the file to add the description and recommendation below the frontmatter.
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: iamu-setup
|
|
3
|
+
description: Set up a project for iamu — scaffold the iamu/ tree, capture domain context, and seed primary personas. Stops after context and initial personas; use iamu-new to draft scenarios next.
|
|
4
|
+
generatedBy: __IAMU_VERSION__
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
Set up a project for scenario-driven walkthroughs — all local, no cloud required. Scaffolds an `iamu/` tree under your project root, analyzes the repo to compose a project-context summary, persists that context to `iamu/context.yml`, seeds 1–2 baseline personas to the casting panel, and optionally links to Iamu cloud. Stops there. Scenario creation belongs to `iamu-new`.
|
|
8
|
+
|
|
9
|
+
Model reminder (internal — users never type these): `capability → scenario → run → finding`. A scenario is the runnable thing — a situation narrative bound to a persona. Capabilities are optional labels that group scenarios. `iamu-new` creates scenarios; `iamu-run` executes them; `iamu-findings` reviews results.
|
|
10
|
+
|
|
11
|
+
What this skill does, end to end:
|
|
12
|
+
|
|
13
|
+
- **Scaffold** — `iamu/` tree on disk via `iamu init`. No login, no cloud.
|
|
14
|
+
- **Understand** — read the repo to identify domain, primary user archetypes, and any applicable regulations (if present).
|
|
15
|
+
- **Capture & Seed** — persist to `iamu/context.yml` and scaffold 1–2 primary personas into `iamu/personas/` (or defer if user prefers).
|
|
16
|
+
- **Cloud (optional)** — offer to link to Iamu cloud for sharing / teams / managed runs via `iamu auth login`. User can accept, skip, or defer.
|
|
17
|
+
|
|
18
|
+
This skill does NOT create capabilities, situation outlines, or scenarios. That is what `iamu-new` is for. Setup = context + casting panel seeding.
|
|
19
|
+
|
|
20
|
+
$ARGUMENTS
|
|
21
|
+
|
|
22
|
+
## Steps
|
|
23
|
+
|
|
24
|
+
### 1. Scaffold the iamu/ tree
|
|
25
|
+
|
|
26
|
+
Run `iamu init` in the terminal. Pass a project name when the user names one explicitly; otherwise the tool derives it from the directory basename.
|
|
27
|
+
|
|
28
|
+
```
|
|
29
|
+
iamu init [project-name]
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
The command scaffolds `iamu/config.json`, entity subdirs, `.runs/`, `.cache/`, `.gitignore`.
|
|
33
|
+
|
|
34
|
+
- If `iamu/` was already present, existing files are not overwritten. Treat as success and continue.
|
|
35
|
+
- Error containing "legacy `.iamu/` layout" → tell the user to remove the legacy directory, then re-run.
|
|
36
|
+
|
|
37
|
+
On fresh scaffold, introduce iamu first:
|
|
38
|
+
|
|
39
|
+
> **iamu** tests your product as realistic personas and reports what works, what doesn't, and how to fix it. I'll analyze your codebase now to understand the domain and propose primary personas.
|
|
40
|
+
|
|
41
|
+
On re-run (already scaffolded), skip the intro — the user knows what iamu is.
|
|
42
|
+
|
|
43
|
+
### 2. Understand the project
|
|
44
|
+
|
|
45
|
+
Explore the codebase automatically — do NOT ask the user what files to read. Build a **project-context summary** (3–6 sentences) the downstream skills will use as grounding. Read the following files when present:
|
|
46
|
+
|
|
47
|
+
- `README.md`, `CLAUDE.md`, `agents.md`
|
|
48
|
+
- Package manifests — `package.json`, `Cargo.toml`, `pyproject.toml`, `go.mod`
|
|
49
|
+
- Routes, API schemas, navigation, components, auth/user models
|
|
50
|
+
- `docs/`, OpenAPI / JSON / GraphQL schemas, `src/`-style source directories
|
|
51
|
+
- `.env.example`
|
|
52
|
+
|
|
53
|
+
Extract these key dimensions:
|
|
54
|
+
|
|
55
|
+
1. **Domain** — what does this product do, in one phrase (mandatory).
|
|
56
|
+
2. **Jurisdiction** — country / region (optional — only include if evident from codebase/locale/terms or if legal frameworks apply).
|
|
57
|
+
3. **Regulations (`governed_by`)** — specific compliance frameworks (AFS 2023:2, GDPR, HIPAA, ISO 27001, etc.). **Strictly optional:** only extract if the repo explicitly references legal or compliance standards. Most software is not in a regulated domain; do NOT invent or guess regulations for standard SaaS/apps.
|
|
58
|
+
4. **Primary Personas** — determine the 1–2 most important user archetypes that stress-test this product (e.g. End User / Consumer vs. Admin / Operator, or First-Timer vs. Power User). Propose:
|
|
59
|
+
- Name and Role
|
|
60
|
+
- Disposition / perspective (patience level, tech literacy, primary friction triggers)
|
|
61
|
+
|
|
62
|
+
Also collect silently (write to `context.yml` but do NOT present for confirmation):
|
|
63
|
+
- **Actors** — all identified roles and their responsibilities.
|
|
64
|
+
- **Glossary** — domain-specific terms (helps persona language fidelity).
|
|
65
|
+
- **Access** — if the project documents how to switch user or role in a dev or test environment (a persona switcher, seeded accounts, a storage key), record that mechanism as `access`. It is what lets a walkthrough run as the persona instead of as whoever happens to be signed in. Never record passwords or tokens — name where they live.
|
|
66
|
+
|
|
67
|
+
Do NOT collect architecture (agent reads the codebase directly — tech stack doesn't affect walkthroughs).
|
|
68
|
+
|
|
69
|
+
**If there is no code (greenfield, design phase):** ask the user: what does this project do, who are the users, what domain, and are there any specific regulations?
|
|
70
|
+
|
|
71
|
+
**Present a short proposal for confirmation:**
|
|
72
|
+
|
|
73
|
+
```
|
|
74
|
+
Your project: <domain> (<jurisdiction if known>)
|
|
75
|
+
[Regulations: <reg1>, <reg2>] <-- omit line entirely if none
|
|
76
|
+
|
|
77
|
+
Proposed primary personas:
|
|
78
|
+
1. <Name> (<Role>) — <Key disposition & perspective>
|
|
79
|
+
2. <Name> (<Role>) — <Key disposition & perspective>
|
|
80
|
+
|
|
81
|
+
Confirm context & scaffold these personas? (yes / edit / suggest-others / skip-personas)
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
Wait for the user to confirm or correct before writing. The user only needs to verify domain and choose whether to accept, edit, suggest alternative personas, or defer persona creation.
|
|
85
|
+
|
|
86
|
+
### 3. Capture domain context and scaffold personas
|
|
87
|
+
|
|
88
|
+
Persist the step-2 summary as structured fields so every scenario draft and walkthrough loads the same grounding. Downstream skills auto-read this file.
|
|
89
|
+
|
|
90
|
+
1. Check existing state by reading `iamu/context.yml` directly.
|
|
91
|
+
|
|
92
|
+
2. **Branch on what you find:**
|
|
93
|
+
|
|
94
|
+
- **Empty / not present** → synthesize structured fields from step 2 and write `iamu/context.yml` with your file-editing tool (not a shell heredoc — it avoids permission prompts).
|
|
95
|
+
- **Present but thin** (missing domain) → show what's missing and offer to fill it. User picks **refine** or **replace**.
|
|
96
|
+
- **Present and complete** (domain set) → show summary and ask "Use as-is, refine, or replace?" Default is **skip**.
|
|
97
|
+
|
|
98
|
+
3. **Write `iamu/context.yml`**:
|
|
99
|
+
|
|
100
|
+
```yaml
|
|
101
|
+
---
|
|
102
|
+
schema_version: 1
|
|
103
|
+
domain: e-commerce storefront
|
|
104
|
+
# jurisdiction: EU / US # optional
|
|
105
|
+
# governed_by: # strictly optional - omit if not regulated
|
|
106
|
+
# - name: GDPR
|
|
107
|
+
# authority_level: regulation
|
|
108
|
+
actors:
|
|
109
|
+
- name: Store Admin
|
|
110
|
+
role: Manages catalog, inventory, and order fulfillment
|
|
111
|
+
- name: First-Time Buyer
|
|
112
|
+
role: Explores products, adds to cart, and checks out
|
|
113
|
+
glossary:
|
|
114
|
+
- term: SKU
|
|
115
|
+
definition: Stock Keeping Unit
|
|
116
|
+
access: >-
|
|
117
|
+
No login in dev. In the page, set localStorage "dev_persona" to the
|
|
118
|
+
persona's access value and reload.
|
|
119
|
+
---
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
Rules:
|
|
123
|
+
- `domain` — one line. Mandatory.
|
|
124
|
+
- `jurisdiction` — optional. Only if evident or relevant.
|
|
125
|
+
- `governed_by[]` — strictly optional. Order by authority (legislation > regulation > standard > company_policy > guideline > informational). Specific names, not categories. Omit entirely if no regulations apply.
|
|
126
|
+
- `actors[]` — all identified roles and their responsibilities.
|
|
127
|
+
- `glossary[]` — domain terms only. Thin is better than padded with generic terms.
|
|
128
|
+
- `access` — optional. Only what the docs actually say; leave it out rather than guess. `iamu-run` fills it in on the first walk if it is missing.
|
|
129
|
+
- Do NOT add `industry` or `architecture` — these don't affect walkthroughs.
|
|
130
|
+
|
|
131
|
+
4. **Scaffold confirmed personas (unless `skip-personas` selected):**
|
|
132
|
+
|
|
133
|
+
Always use the CLI to scaffold valid persona entities with schema-compliant UUIDs, slugs, and timestamps:
|
|
134
|
+
```bash
|
|
135
|
+
iamu new persona --name "<Name>" --role "<Role>" --disposition "<Disposition>" --json
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
Then open the created file (`iamu/personas/<slug>.md`) and write 2–4 sentences of background narrative into the markdown body below the frontmatter, detailing their technical habits, patience level, and specific friction triggers.
|
|
139
|
+
|
|
140
|
+
If `iamu/context.yml` has an `access` mechanism, set the persona's `access` field in frontmatter to match an existing product account/role.
|
|
141
|
+
|
|
142
|
+
Run `iamu validate --all`.
|
|
143
|
+
|
|
144
|
+
5. Confirm: "Context saved and personas seeded in iamu/personas/. Run `iamu-new` to draft your first scenario." (or "Context saved. Run `iamu-new` to draft your first scenario." if personas were skipped).
|
|
145
|
+
|
|
146
|
+
### 4. Offer cloud link (optional)
|
|
147
|
+
|
|
148
|
+
Check the current state first:
|
|
149
|
+
|
|
150
|
+
```bash
|
|
151
|
+
iamu auth status --json
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
- **`cloud_linked: true`, `authenticated: true`** → already linked. Say so in one line with the dashboard link from `iamu open --print` and skip the offer.
|
|
155
|
+
- **`cloud_linked: true`, `authenticated: false`** → the project is linked but this machine has no credentials, so nothing will push. Offer `iamu auth login`; it restores credentials for the same project without asking which one.
|
|
156
|
+
- **`cloud_linked: false`** → ask once:
|
|
157
|
+
|
|
158
|
+
> Want to link this project to Iamu Cloud? Every walkthrough then gets a shareable report link (screenshots and step replay), your team can triage findings together, and teammates can queue requests for you. Everything keeps working locally; `iamu auth disconnect` unlinks.
|
|
159
|
+
|
|
160
|
+
Three outcomes:
|
|
161
|
+
|
|
162
|
+
- **Yes** → link it (below).
|
|
163
|
+
- **Skip** → local-only project stays local-only. User can connect later by re-running `iamu-setup` or running `iamu auth login` directly.
|
|
164
|
+
- **Later** → same as skip. No state change.
|
|
165
|
+
|
|
166
|
+
**Linking:**
|
|
167
|
+
|
|
168
|
+
1. Run `iamu auth login` (add `--url <api-url>` only if the user names a self-hosted cloud). It opens the sign-in page in the user's browser and waits up to two minutes — tell the user to approve it there. Allow the command at least 150 seconds before your shell tool times out. If your shell cannot wait that long, or runs where no browser can open (remote or container session), ask the user to run `iamu auth login` in their own terminal and tell you when it is done.
|
|
169
|
+
2. **Never pick the cloud project for the user.** In a non-interactive shell with existing cloud projects, login stops after sign-in and lists them as `iamu auth login --project <id>` lines plus `--project new`. Show that list, ask which project this repository belongs to, then re-run with their choice — the stored sign-in is reused, no second browser trip. Linking pushes every local persona, scenario and finding into the chosen project; a wrong guess leaks them into someone else's.
|
|
170
|
+
3. On success the output ends with `Dashboard: <url>` and, when an agent host was detected, `iamu-sync MCP server registered`. Relay both in two lines: the dashboard link, and that restarting the agent session loads the team tools (work requests, teammate-change alerts).
|
|
171
|
+
|
|
172
|
+
If login fails (cloud unreachable, sign-in timed out), report the error in one line and continue — setup is complete without the cloud.
|
|
173
|
+
|
|
174
|
+
All three outcomes leave a usable local setup. Cloud is strictly additive.
|
|
175
|
+
|
|
176
|
+
### 5. How to use iamu from here
|
|
177
|
+
|
|
178
|
+
Close with one line pointing at the next step:
|
|
179
|
+
|
|
180
|
+
```
|
|
181
|
+
Setup complete. Next: run iamu-new to draft your first scenario.
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
## Guidelines
|
|
185
|
+
|
|
186
|
+
- **Plumbing and casting panel seeding.** This skill scaffolds configuration and seeds 1–2 baseline personas. It does not draft situation outlines or scenarios — that belongs to `iamu-new`.
|
|
187
|
+
- **Non-regulated software is the default.** Do not invent or force regulations (`governed_by`) on apps, developer tools, or consumer software. If the codebase has no compliance documentation, omit `governed_by` entirely.
|
|
188
|
+
- **Explore automatically.** Read the codebase before asking the user anything. The user should only need to confirm or correct, not describe their own project from scratch.
|
|
189
|
+
- **Context on disk is load-bearing.** Once step 3 writes `iamu/context.yml`, every downstream skill (`iamu-new`, `iamu-run`) auto-loads it. No need to pass `project_context` by hand.
|
|
190
|
+
- **Handle re-runs gracefully.** An already-scaffolded project is a no-op on scaffold, a refresh on context/personas (if the user opts in), and a re-prompt on cloud link.
|
|
191
|
+
- **Code-referenced vs inferred.** When drafting context in step 2, be explicit about which claims you read in the codebase vs which you inferred.
|
|
192
|
+
- **Handle errors gracefully.** Unreachable file → note it, move on. Unreachable cloud (step 4) → report and let the user retry or defer.
|