@iamu-dev/iamu 0.2.0-beta.10 → 0.2.0-beta.12
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/dist/bin.js +872 -521
- package/dist/commands/live-run-client.d.ts +127 -0
- package/dist/commands/step.d.ts +1 -0
- package/dist/index.js +938 -587
- package/dist/templates/prompts/walk.md +2 -0
- package/dist/templates/skills/iamu-run.md +13 -1
- package/dist/templates/skills/iamu-setup.md +219 -153
- package/package.json +2 -2
|
@@ -80,6 +80,8 @@ Follow the persona's motivation. Spend time on what matters to them. When you ha
|
|
|
80
80
|
|
|
81
81
|
Browser failures — blank page, stuck spinner, cryptic error, 404 — are signal, not noise. Screenshot the failure state, record it as a finding, move on. Do not retry silently or open developer tools: the persona cannot.
|
|
82
82
|
|
|
83
|
+
If a step command fails with `The user stopped this run from the live viewer. End the walk now.`, do not retry or continue: stop the walkthrough immediately and proceed to Synthesis with what you observed so far.
|
|
84
|
+
|
|
83
85
|
## Tooling limitations vs product bugs
|
|
84
86
|
|
|
85
87
|
Your browser tooling has limitations that can look like product bugs. Before recording a finding, ask: "Is this a real product issue, or is my tooling failing?"
|
|
@@ -196,13 +196,16 @@ iamu start-run <scenario-slug> --target <target> --json
|
|
|
196
196
|
|
|
197
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
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" }
|
|
199
|
+
{ "run_id": "...", "path": "...", "scenario_slug": "...", "target_url": "...", "live_viewer_url": "https://app.iamu.dev/projects/.../live/...", "persona_slug": "...", "outline_slug": "...", "build": { "git_sha": "...", "git_branch": "...", "git_dirty": false }, "environment": "https://staging.example.com" }
|
|
200
200
|
```
|
|
201
201
|
|
|
202
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
203
|
|
|
204
204
|
Use the returned `run_id` and `path` for all subsequent operations.
|
|
205
205
|
|
|
206
|
+
**If `live_viewer_url` is returned**, immediately output it to the user so the operator can follow along live in their browser:
|
|
207
|
+
> 🔴 **Live stream:** `<live_viewer_url>`
|
|
208
|
+
|
|
206
209
|
**Size the browser for this persona** (`iamu browse` only), every run — also when a browser is already open from an earlier run:
|
|
207
210
|
|
|
208
211
|
```bash
|
|
@@ -253,6 +256,15 @@ The subagent inherits the driving-surface tools and drives the product independe
|
|
|
253
256
|
|
|
254
257
|
After the walker returns, continue to the post-walk pipeline below.
|
|
255
258
|
|
|
259
|
+
**Live progress reporting (terminal monitoring):**
|
|
260
|
+
While the walker subagent executes, maintain visible feedback in the terminal:
|
|
261
|
+
- At start (if cloud-linked): output the live dashboard viewer link: `Live stream: <viewer_url>`
|
|
262
|
+
- As progress occurs (on subagent notifications or milestone steps): output a concise single-line progress update:
|
|
263
|
+
`step <N> · <action/surface> · <F> finding(s)`
|
|
264
|
+
This gives the terminal operator immediate real-time visibility into the persona's progress.
|
|
265
|
+
- If the walker stops because the user pressed Stop in the viewer (`The user stopped this run from the live viewer. End the walk now.`), respect the cancellation and proceed to post-walk assembly with existing steps.
|
|
266
|
+
- Once the walker finishes, announce completion and proceed immediately to the post-walk pipeline.
|
|
267
|
+
|
|
256
268
|
**Recording steps:**
|
|
257
269
|
|
|
258
270
|
Use atomic CLI commands to drive and record in one step — do NOT manually author JSON files:
|
|
@@ -11,10 +11,12 @@ Model reminder (internal — users never type these): `capability → scenario
|
|
|
11
11
|
What this skill does, end to end:
|
|
12
12
|
|
|
13
13
|
- **Scaffold** — `iamu/` tree on disk via `iamu init`. No login, no cloud.
|
|
14
|
-
- **Understand** — read the repo to
|
|
15
|
-
- **
|
|
16
|
-
- **
|
|
17
|
-
- **
|
|
14
|
+
- **Understand** — read the repo automatically to detect dev server, mock fixtures, external boundaries, domain stakes, and user roles.
|
|
15
|
+
- **Step 1: Safety & Testability Fence** — agree on the sandbox boundaries (`iamu/testability.md`) so the autonomous browser agent never leaks data or hits real external services.
|
|
16
|
+
- **Step 2: Domain Reality & Role Pool** — verify domain context and candidate roles (`iamu/context.yml`) to ground UX evaluations.
|
|
17
|
+
- **Step 3: Co-Design First Journey** — co-create a high-friction scenario, verify auth preconditions (`personas/`, `outlines/`, `scenarios/`), and validate.
|
|
18
|
+
- **Next Action** — copy-pasteable command to launch your first walkthrough.
|
|
19
|
+
- **Cloud (optional)** — link to Iamu Cloud if you want to share findings with your team.
|
|
18
20
|
|
|
19
21
|
$ARGUMENTS
|
|
20
22
|
|
|
@@ -24,11 +26,17 @@ $ARGUMENTS
|
|
|
24
26
|
|
|
25
27
|
Check whether `iamu/config.json` already exists:
|
|
26
28
|
|
|
27
|
-
- **If already scaffolded (`iamu/config.json` exists):** Do not re-run `iamu init`. Introduce the
|
|
28
|
-
>
|
|
29
|
+
- **If already scaffolded (`iamu/config.json` exists):** Do not re-run `iamu init`. Introduce the workflow roadmap concisely and proceed directly to Step 2:
|
|
30
|
+
> **Setting up Iamu.** We'll build your testing foundation together in three clear steps:
|
|
31
|
+
> 1. **Safety Boundary (`testability.md`)**: Ensure the autonomous browser agent is fenced to local dev and cannot trigger real-world external side effects.
|
|
32
|
+
> 2. **Domain Grounding (`context.yml`)**: Teach Iamu what the application does, its real stakes, and candidate roles.
|
|
33
|
+
> 3. **First Journey (`personas/` + `scenarios/`)**: Design a realistic human friction test and verify how your persona logs in.
|
|
29
34
|
- **If not yet scaffolded:** Run `iamu init [project-name]` in the terminal (pass a project name if the user named one explicitly; otherwise omit). The command scaffolds `iamu/config.json`, entity subdirs, `.runs/`, `.cache/`, `.gitignore`.
|
|
30
|
-
Introduce
|
|
31
|
-
> **iamu** tests your product as realistic personas and reports what works, what doesn't, and how to fix it.
|
|
35
|
+
Introduce the workflow roadmap:
|
|
36
|
+
> **iamu** tests your product as realistic personas and reports what works, what doesn't, and how to fix it. We'll build your testing foundation together in three collaborative steps:
|
|
37
|
+
> 1. **Safety Boundary (`testability.md`)**: Define where the browser agent is allowed to go, and what external services must never be touched.
|
|
38
|
+
> 2. **Domain Grounding (`context.yml`)**: Ground Iamu in what your product actually is, its operational reality, and key user roles.
|
|
39
|
+
> 3. **First Journey (`personas/` + `scenarios/`)**: Design a realistic human friction test and verify how your persona logs in.
|
|
32
40
|
- **Error containing "legacy `.iamu/` layout"** → tell the user to remove the legacy directory, then re-run.
|
|
33
41
|
|
|
34
42
|
### 2. Understand the project
|
|
@@ -51,20 +59,13 @@ Explore the codebase automatically — do NOT ask the user what files to read. E
|
|
|
51
59
|
3. **Auth & Persona Access:**
|
|
52
60
|
- Inspect auth route guards (`middleware.ts`, ProtectedRoute, session hooks).
|
|
53
61
|
- Identify dev bypass (`MOCK_AUTH`), test accounts/fixtures, persona switcher, or public access.
|
|
54
|
-
4. **Domain Narrative &
|
|
62
|
+
4. **Domain Narrative & Candidate Roles:**
|
|
55
63
|
- Read `README.md`, `CLAUDE.md`, docs, OpenAPI / JSON schemas, user models.
|
|
56
|
-
- Extract
|
|
64
|
+
- Extract candidate roles from real user models in code.
|
|
57
65
|
- **STRICT REGULATION RULE:** Never infer regulations from industry keywords. Only include `governed_by` if the codebase explicitly references specific legislation or statutory standards. Non-regulated software is the default — omit `governed_by` entirely if absent.
|
|
58
|
-
5. **
|
|
59
|
-
-
|
|
60
|
-
|
|
61
|
-
Synthesize the project into a cohesive, substantive narrative (1–2 paragraphs):
|
|
62
|
-
- What the product fundamentally is, its primary domain, and who uses it.
|
|
63
|
-
- Key user journeys and operational characteristics (e.g. mobile floor use, audit deadlines).
|
|
64
|
-
- Market and geography (only if evident).
|
|
65
|
-
|
|
66
|
-
Audit testability and target environment:
|
|
67
|
-
Inspect `package.json` dev scripts, existing mock harnesses (MSW, seed scripts), auth route guards (`middleware.ts`, ProtectedRoute, session hooks), and page/route directories (`app/`, `src/routes/`). Use these findings to populate `iamu/testability.md`.
|
|
66
|
+
5. **Safety & Untestable Boundaries:**
|
|
67
|
+
- Scan for external API calls, third-party integrations (Stripe, Twilio, external government submission portals, live OAuth/Keycloak SSO).
|
|
68
|
+
- Identify local mock fixtures (`msw`, seed SQL scripts, mock services).
|
|
68
69
|
|
|
69
70
|
**If there is no code (greenfield, design phase, or test sandbox):** do NOT interrogate the user with a multi-part survey or ask for dev auth plumbing. Ask for a single entry point:
|
|
70
71
|
> No local codebase detected. To seed context, provide one of:
|
|
@@ -72,185 +73,250 @@ Inspect `package.json` dev scripts, existing mock harnesses (MSW, seed scripts),
|
|
|
72
73
|
> - A one-sentence description of what this product does
|
|
73
74
|
> - Or type `"sandbox"` to seed a pre-configured B2B SaaS demo
|
|
74
75
|
|
|
75
|
-
|
|
76
|
-
- **URL provided:** Fetch or search public marketing/docs for that site. Automatically extract the substantive narrative, core user journeys, and key actors.
|
|
77
|
-
- **One-sentence summary provided:** Immediately expand into a full substantive narrative using domain knowledge.
|
|
78
|
-
- **"sandbox" provided:** Seed a standard B2B SaaS narrative with Admin and End-User roles.
|
|
76
|
+
---
|
|
79
77
|
|
|
80
|
-
### 3.
|
|
78
|
+
### 3. Step 1/3: Establish the Safety Fence (`iamu/testability.md`)
|
|
81
79
|
|
|
82
|
-
Present the
|
|
80
|
+
Present the detected environment and safety fence. Explain clearly *why* this boundary is required before any autonomous agent runs:
|
|
83
81
|
|
|
84
|
-
|
|
85
|
-
|
|
82
|
+
```markdown
|
|
83
|
+
Step 1/3: Safety Fence & Environment Boundary
|
|
84
|
+
Why this matters: Iamu drives a real headless browser with full agency. This boundary guarantees the agent stays confined to your local environment and never touches external services or triggers real-world side effects.
|
|
86
85
|
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
86
|
+
Detected Environment:
|
|
87
|
+
Target URL: <target_url, e.g. http://localhost:5173>
|
|
88
|
+
Dev Command: <dev_command, e.g. ./dev or pnpm dev>
|
|
89
|
+
Safe Fixtures: <detected seed scripts or mock handlers, e.g. organization_realistic_seed.sql, MSW>
|
|
90
|
+
DO NOT WALK: <detected external services, e.g. Arbetsmiljöverket external submission portal (anmalarbetsskada.se), Real SMS/Email gateways, Real OIDC Keycloak>
|
|
91
|
+
```
|
|
93
92
|
|
|
94
|
-
|
|
93
|
+
**Interactive Decision Gate:**
|
|
94
|
+
Prompt the user to verify the safety boundary:
|
|
95
|
+
- If interactive user-prompt tools exist (`ask_question`, `ask_followup_question`), invoke it:
|
|
96
|
+
- Question: "Confirm safety fence and dev environment?"
|
|
97
|
+
- Options:
|
|
98
|
+
1. "[Recommended] Safety boundaries look safe — save fence and proceed"
|
|
99
|
+
2. "Adjust boundaries (add forbidden external URLs, change dev command or port)"
|
|
100
|
+
3. "Skip safety fence for now"
|
|
101
|
+
- Otherwise (text-only/CLI):
|
|
95
102
|
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
103
|
+
```text
|
|
104
|
+
Confirm safety fence and dev environment?
|
|
105
|
+
1. [Recommended] Safety boundaries look safe — save fence and proceed
|
|
106
|
+
2. Adjust boundaries (add forbidden external URLs, change dev command or port)
|
|
107
|
+
3. Skip safety fence for now
|
|
108
|
+
|
|
109
|
+
Press Enter to accept [1], select 2, or tell me what to adjust:
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
**Action on confirmation (Option 1):**
|
|
113
|
+
Write `iamu/testability.md`:
|
|
114
|
+
```markdown
|
|
115
|
+
---
|
|
116
|
+
target_url: <target_url>
|
|
117
|
+
dev_command: <dev_command>
|
|
118
|
+
auth_strategy: <dev_switcher | interactive | test_accounts | public>
|
|
119
|
+
harnesses:
|
|
120
|
+
- <detected harnesses>
|
|
121
|
+
---
|
|
122
|
+
|
|
123
|
+
# Project Testability & Environment
|
|
124
|
+
|
|
125
|
+
## Target & Run Instructions
|
|
126
|
+
- Command: <dev command>
|
|
127
|
+
- Base URL: <target_url>
|
|
128
|
+
|
|
129
|
+
## Auth & Access Boundary
|
|
130
|
+
- <How a walker becomes this persona in dev or test mode>
|
|
131
|
+
|
|
132
|
+
## Reachable Surfaces
|
|
133
|
+
- <List discovered routes/entry points>
|
|
134
|
+
|
|
135
|
+
## Mocks & Data Fixtures
|
|
136
|
+
- <List existing MSW mock files, DB seed scripts, or fixture directories>
|
|
137
|
+
|
|
138
|
+
## Untestable Boundaries (Do Not Walk)
|
|
139
|
+
- <List un-mocked external dependencies and external submission portals>
|
|
140
|
+
```
|
|
105
141
|
|
|
106
142
|
---
|
|
107
143
|
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
144
|
+
### 4. Step 2/3: Ground Domain Reality & Role Candidates (`iamu/context.yml`)
|
|
145
|
+
|
|
146
|
+
Explain the purpose of domain grounding: traditional tests only assert button clicks; Iamu evaluates user confusion, workflow friction, and whether a real person can succeed under operational pressure.
|
|
147
|
+
|
|
148
|
+
Present the discovered domain reality and candidate roles:
|
|
149
|
+
|
|
150
|
+
```markdown
|
|
151
|
+
Step 2/3: Product Domain & Candidate Roles
|
|
152
|
+
Why this matters: Grounds the AI evaluator in your domain's real operational stakes, vocabulary, and regulations so it can spot human confusion rather than just syntax errors.
|
|
153
|
+
|
|
154
|
+
Discovered Domain Context:
|
|
155
|
+
Domain: <domain name, e.g. Workplace safety management (EHS / SAM)>
|
|
156
|
+
Regulatory Scope: <Jurisdiction or "Standard Web App / Unregulated">
|
|
157
|
+
Candidate Roles: <Role 1>, <Role 2>, <Role 3>
|
|
158
|
+
*(Open casting panel — your team can create unlimited personas anytime via /iamu:new)*
|
|
159
|
+
|
|
160
|
+
<1 cohesive paragraph: what the product fundamentally is, who actually uses it, and its core operational reality. No marketing fluff, no hedging, and no tech stack trivia.>
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
**Interactive Decision Gate:**
|
|
164
|
+
Prompt the user to verify the domain grounding:
|
|
165
|
+
- If interactive user-prompt tools exist (`ask_question`, `ask_followup_question`), invoke it:
|
|
166
|
+
- Question: "Confirm domain grounding and role pool?"
|
|
112
167
|
- Options:
|
|
113
|
-
1. "[Recommended]
|
|
114
|
-
2. "
|
|
115
|
-
3. "Adjust domain
|
|
116
|
-
- Otherwise (
|
|
168
|
+
1. "[Recommended] Domain grounding is accurate — proceed to design first test"
|
|
169
|
+
2. "Save domain context only (skip scenario creation for now)"
|
|
170
|
+
3. "Adjust domain narrative or role pool"
|
|
171
|
+
- Otherwise (text-only/CLI):
|
|
117
172
|
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
173
|
+
```text
|
|
174
|
+
Confirm domain grounding and role pool?
|
|
175
|
+
1. [Recommended] Domain grounding is accurate — proceed to design first test
|
|
176
|
+
2. Save domain context only (skip scenario creation for now)
|
|
177
|
+
3. Adjust domain narrative or role pool
|
|
122
178
|
|
|
123
179
|
Press Enter to accept [1], select 2, or tell me what to adjust:
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
### 4. Scaffold the Test Suite Atomically
|
|
127
|
-
|
|
128
|
-
When the user selects Option 1 (or confirms):
|
|
129
|
-
|
|
130
|
-
1. **Write `iamu/context.yml`**:
|
|
131
|
-
Derive the structured frontmatter fields (`domain`, `actors`, `jurisdiction`, `governed_by`) from the confirmed text, and write `iamu/context.yml` with your file-editing tool. Put structured fields in frontmatter and the substantive narrative in the markdown body below the `---`:
|
|
132
|
-
|
|
133
|
-
```yaml
|
|
134
|
-
---
|
|
135
|
-
schema_version: 1
|
|
136
|
-
domain: workplace safety management
|
|
137
|
-
# jurisdiction: Sweden / EU # optional
|
|
138
|
-
# governed_by: # strictly optional - omit if not regulated
|
|
139
|
-
# - name: AFS 2023:2
|
|
140
|
-
# authority_level: regulation
|
|
141
|
-
actors:
|
|
142
|
-
- name: Store Admin
|
|
143
|
-
role: Manages catalog, inventory, and order fulfillment
|
|
144
|
-
- name: First-Time Buyer
|
|
145
|
-
role: Explores products, adds to cart, and checks out
|
|
146
|
-
- name: Customer Support Agent
|
|
147
|
-
role: Handles order discrepancies, refunds, and customer inquiries
|
|
148
|
-
access: >-
|
|
149
|
-
No login in dev. In the page, set localStorage "dev_persona" to the
|
|
150
|
-
persona's access value and reload.
|
|
151
|
-
---
|
|
152
|
-
|
|
153
|
-
<The substantive 1–2 paragraph project description and core user journeys>
|
|
154
|
-
```
|
|
180
|
+
```
|
|
155
181
|
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
182
|
+
**Action on confirmation (Option 1):**
|
|
183
|
+
Write `iamu/context.yml`. Put structured fields in frontmatter and the substantive narrative in the markdown body below the `---`:
|
|
184
|
+
```yaml
|
|
185
|
+
---
|
|
186
|
+
schema_version: 1
|
|
187
|
+
domain: <domain>
|
|
188
|
+
# jurisdiction: <jurisdiction> # optional
|
|
189
|
+
# governed_by: # strictly optional - omit if not regulated
|
|
190
|
+
# - name: <statutory regulation>
|
|
191
|
+
# authority_level: regulation
|
|
192
|
+
actors:
|
|
193
|
+
- name: <Role 1>
|
|
194
|
+
role: <Responsibilities>
|
|
195
|
+
- name: <Role 2>
|
|
196
|
+
role: <Responsibilities>
|
|
197
|
+
---
|
|
164
198
|
|
|
165
|
-
2
|
|
166
|
-
|
|
199
|
+
<The substantive 1–2 paragraph project description and core user journeys>
|
|
200
|
+
```
|
|
167
201
|
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
target_url: http://localhost:3000
|
|
171
|
-
dev_command: <detected dev script, e.g. pnpm dev or pnpm dev:mock>
|
|
172
|
-
auth_strategy: <dev_switcher | interactive | test_accounts | public>
|
|
173
|
-
harnesses:
|
|
174
|
-
- <detected harnesses, e.g. msw, seed>
|
|
175
|
-
---
|
|
202
|
+
*If user chooses Option 2 (Save context only):* write `context.yml` and exit cleanly:
|
|
203
|
+
> ✓ Project context initialized. When you're ready to create your first test journey, run `/iamu:new`.
|
|
176
204
|
|
|
177
|
-
|
|
205
|
+
---
|
|
178
206
|
|
|
179
|
-
|
|
180
|
-
- Command: <dev command>
|
|
181
|
-
- Base URL: <target_url>
|
|
207
|
+
### 5. Step 3/3: Co-Design Your First Test Journey (`personas/`, `outlines/`, `scenarios/`)
|
|
182
208
|
|
|
183
|
-
|
|
184
|
-
- <How a walker becomes this persona in dev or test mode>
|
|
209
|
+
Explain the journey model: an Iamu test binds a **Persona** (with habits, pressures, and impatience) to a **Situation** (a realistic high-stakes problem) with an **Evaluation Checkpoint** (a concrete binary question for the AI judge).
|
|
185
210
|
|
|
186
|
-
|
|
187
|
-
- <List discovered routes/entry points, e.g. /login, /dashboard, /incidents>
|
|
211
|
+
Present the proposed test journey, including explicit **Auth Precondition Verification**:
|
|
188
212
|
|
|
189
|
-
|
|
190
|
-
|
|
213
|
+
```markdown
|
|
214
|
+
Step 3/3: Co-Design Your First Test Journey
|
|
215
|
+
Why this matters: Validates whether a real human with specific operational pressures can complete a critical task without getting blocked or frustrated.
|
|
191
216
|
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
217
|
+
Baseline Test Proposal (WYSIWGW Spec-Sheet):
|
|
218
|
+
Persona: <Name> (<Role / Title>)
|
|
219
|
+
• Reality: <Working context, physical habits, tenure, pressures>
|
|
220
|
+
• Friction: <Diagnostic friction, skepticism, bounce trigger>
|
|
221
|
+
Situation: <Outline Title>
|
|
222
|
+
• Tension: <Core problem-space tension in X vs Y format — no UI button names>
|
|
223
|
+
• Evaluation: <Concrete binary yes/partial/no question for evaluator>
|
|
224
|
+
Walk Surface: Entry: `<entry_path>` | Target: `<target_url>`
|
|
225
|
+
Auth Precondition: <Detected auth mechanism, e.g. "Dev persona switcher (localStorage.sf_dev_persona = 'anna')" or "Public">
|
|
226
|
+
Walker Brief: "<2–3 sentence first-person test brief that will be written verbatim to disk. States immediate intent and constraints before opening tool. Zero UI terminology.>"
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
**Interactive Decision Gate:**
|
|
230
|
+
Prompt the user to verify the scenario and its auth precondition:
|
|
231
|
+
- If interactive user-prompt tools exist (`ask_question`, `ask_followup_question`), invoke it:
|
|
232
|
+
- Question: "Scaffold this baseline journey?"
|
|
233
|
+
- Options:
|
|
234
|
+
1. "[Recommended] Scaffold journey with <detected auth mechanism>"
|
|
235
|
+
2. "Use interactive human login handshake (pause browser for live login)"
|
|
236
|
+
3. "Switch role / design a different scenario (write-in)"
|
|
237
|
+
4. "Skip scenario for now"
|
|
238
|
+
- Otherwise (text-only/CLI):
|
|
239
|
+
|
|
240
|
+
```text
|
|
241
|
+
Scaffold this baseline journey?
|
|
242
|
+
1. [Recommended] Scaffold journey with <detected auth mechanism>
|
|
243
|
+
2. Use interactive human login handshake (pause browser for live login)
|
|
244
|
+
3. Switch role / design a different scenario
|
|
245
|
+
4. Skip scenario for now
|
|
195
246
|
|
|
196
|
-
|
|
247
|
+
Press Enter to accept [1], select 2, or tell me what to adjust:
|
|
248
|
+
```
|
|
197
249
|
|
|
198
|
-
|
|
199
|
-
|
|
250
|
+
**Action on confirmation (Option 1 or Option 2):**
|
|
251
|
+
1. **Scaffold Persona**:
|
|
200
252
|
```bash
|
|
201
253
|
iamu new persona --name "<Name>" --role "<Role>" --disposition "<Disposition>" --body "<2-4 sentence narrative detailing technical habits, patience level, and specific friction triggers>" [--access "<account-or-role>"] --json
|
|
202
254
|
```
|
|
203
|
-
|
|
204
|
-
4. **Scaffold Situation Outline**:
|
|
205
|
-
Scaffold the inaugural outline into `iamu/outlines/<outline-slug>.md` using the CLI:
|
|
255
|
+
2. **Scaffold Situation Outline**:
|
|
206
256
|
```bash
|
|
207
257
|
iamu new outline --name "<Outline Title>" --tension "<Core Tension>" --human-test "<Concrete yes/partial/no evaluation question>" --narrative "<2-3 sentence problem-space narrative without UI terms>" --json
|
|
208
258
|
```
|
|
209
|
-
|
|
210
|
-
5. **Scaffold Bound Scenario**:
|
|
211
|
-
Bind the persona and outline into `iamu/scenarios/<persona-slug>--<outline-slug>.md` using the CLI:
|
|
259
|
+
3. **Scaffold Bound Scenario**:
|
|
212
260
|
```bash
|
|
213
261
|
iamu new scenario --name "<persona-slug>--<outline-slug>" --outline "<outline-slug>" --persona "<persona-slug>" --entry "<entry_path>" --body "<Persona's first-person test brief describing what they intend to achieve>" --json
|
|
214
262
|
```
|
|
215
|
-
|
|
216
|
-
6. **Validate all entities**:
|
|
263
|
+
4. **Validate all entities**:
|
|
217
264
|
```bash
|
|
218
265
|
iamu validate --all
|
|
219
266
|
```
|
|
220
267
|
|
|
221
|
-
|
|
222
|
-
Render the visual scaffolding tree and provide the direct command to run the walkthrough:
|
|
268
|
+
---
|
|
223
269
|
|
|
224
|
-
|
|
225
|
-
✓ Scaffolding complete:
|
|
270
|
+
### 6. Completion & First Walkthrough Handoff
|
|
226
271
|
|
|
227
|
-
|
|
228
|
-
├── context.yml [domain: <domain>]
|
|
229
|
-
├── testability.md [target: <target_url>]
|
|
230
|
-
├── personas/
|
|
231
|
-
│ └── <persona-slug>.md
|
|
232
|
-
├── outlines/
|
|
233
|
-
│ └── <outline-slug>.md
|
|
234
|
-
└── scenarios/
|
|
235
|
-
└── <persona-slug>--<outline-slug>.md
|
|
272
|
+
Present the completion handoff cleanly.
|
|
236
273
|
|
|
237
|
-
|
|
238
|
-
|
|
274
|
+
**Formatting & Output Rules:**
|
|
275
|
+
- Do NOT output markdown header hashes (`#`, `##`, `###`) in the terminal handoff. Use bold (`**Next Step:**`) or plain text.
|
|
276
|
+
- Do NOT output a redundant bullet list of "Generated entities:" after the file tree. The visual tree already displays the files.
|
|
277
|
+
- Check `iamu/config.json`:
|
|
278
|
+
- **If `cloud_linked: true`:** Output `• iamu sync Sync completed runs and findings to Iamu Cloud`. Do NOT recommend `iamu auth login`.
|
|
279
|
+
- **If `cloud_linked: false`:** Output `• iamu auth login Connect to Iamu Cloud to share run reports with your team (optional)`.
|
|
239
280
|
|
|
240
|
-
|
|
281
|
+
Render the output:
|
|
241
282
|
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
283
|
+
```text
|
|
284
|
+
✓ Scaffolding complete:
|
|
285
|
+
|
|
286
|
+
iamu/
|
|
287
|
+
├── testability.md [safety fence active: <target_url>]
|
|
288
|
+
├── context.yml [domain: <domain>]
|
|
289
|
+
├── personas/
|
|
290
|
+
│ └── <persona-slug>.md
|
|
291
|
+
├── outlines/
|
|
292
|
+
│ └── <outline-slug>.md
|
|
293
|
+
└── scenarios/
|
|
294
|
+
└── <persona-slug>--<outline-slug>.md
|
|
295
|
+
|
|
296
|
+
Next step:
|
|
297
|
+
Ensure your dev server is running on <target_url>, then trigger the walkthrough in your agent:
|
|
298
|
+
|
|
299
|
+
iamu-run <persona-slug>--<outline-slug>
|
|
300
|
+
|
|
301
|
+
Or run directly from your shell:
|
|
302
|
+
|
|
303
|
+
$ iamu start-run <persona-slug>--<outline-slug> --target <target_url>
|
|
304
|
+
|
|
305
|
+
Other commands when you're ready:
|
|
306
|
+
• iamu-new Draft a scenario for a different product flow
|
|
307
|
+
• iamu-propose Brainstorm high-risk workflows and blind spots
|
|
308
|
+
• iamu doctor Diagnose test environment and target health
|
|
309
|
+
<If cloud_linked: true>
|
|
310
|
+
• iamu sync Sync completed runs and findings to Iamu Cloud
|
|
311
|
+
<If cloud_linked: false>
|
|
312
|
+
• iamu auth login Connect to Iamu Cloud to share run reports with your team (optional)
|
|
313
|
+
```
|
|
248
314
|
|
|
249
|
-
###
|
|
315
|
+
### 7. Cloud link (optional)
|
|
250
316
|
|
|
251
317
|
Cloud linking is optional and non-blocking. It is recommended after executing your first walkthrough so you have run reports and findings to share.
|
|
252
318
|
|
|
253
|
-
If the user explicitly asks to link during setup:
|
|
319
|
+
If the project is not yet linked and the user explicitly asks to link during setup:
|
|
254
320
|
1. Tell the user: "Opening browser for Iamu Cloud login..." then run `iamu auth login`. Allow the command at least 150 seconds for the user to complete sign-in in their browser. 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.
|
|
255
321
|
2. 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.
|
|
256
322
|
3. On success the output ends with `Dashboard: <url>` and registered MCP server.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@iamu-dev/iamu",
|
|
3
|
-
"version": "0.2.0-beta.
|
|
3
|
+
"version": "0.2.0-beta.12",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Test your product as realistic personas — scenario-driven development CLI",
|
|
6
6
|
"license": "UNLICENSED",
|
|
@@ -58,8 +58,8 @@
|
|
|
58
58
|
"tsup": "^8.5.1",
|
|
59
59
|
"typescript": "^5.8.0",
|
|
60
60
|
"vitest": "^4.1.11",
|
|
61
|
-
"@iamu-dev/local-store": "0.1.0",
|
|
62
61
|
"@iamu-dev/protocol": "0.1.0",
|
|
62
|
+
"@iamu-dev/local-store": "0.1.0",
|
|
63
63
|
"@iamu/tsconfig": "0.1.0"
|
|
64
64
|
},
|
|
65
65
|
"scripts": {
|