| Run multiple journeys as a cross-platform test suite. Discover journeys, invoke journey-runner in isolated workspaces, deploy, verify, capture screenshots, clean up only owned Azure resources, and produce a consolidated report.
npx skills add https://github.com/microsoft/agentic-journeys --skill journey-test-harness
Orchestrate journey-runner across the selected journey directories. The harness must work on Windows, Mac, and Linux and must never delete an Azure environment merely because it appears in azd env list.
alltruewestus1; increase only when quota, local ports, and API limits allow itEach deployed journey uses cleanup: after-verification unless the user explicitly requests otherwise.
Use repository file-search APIs or Node.js fs.readdir() to find journeys/*/README.md. Do not use ls | sed, shell globs, or platform-specific path parsing.
For each journey, record:
PLAN.md presenceFilter only against the discovered folder names. Fail early for an unknown requested journey.
Load journey-runner and run its cross-platform preflight before creating any workspace or Azure resource.
The union of selected-journey requirements may include:
azd 1.28.0 or later with auth.useAzCliAuth=truesqlcmd for SmartTodoUse .github/skills/journey-runner/scripts/check-prerequisites.mjs with the union of required tools. Missing required tools stop the whole suite before provider registration. Do not install system tools during the suite.
Check Azure CLI and azd authentication separately. Confirm the intended subscription and location.
Register only providers required by selected journeys. Run provider commands as individual processes with argument arrays, not shell loops. Wait for required registrations before starting the first deployment.
Record the subscription ID and each provider's state in the suite report.
Create directories through Node.js filesystem APIs or the active agent's file tools:
<journey-runs-root>/test-suite-<UTC timestamp>/
├── test-report.md
├── screenshots/
└── runs/
└── <journey>-<UTC timestamp>/
Use path.join() and absolute paths. Don't embed ~/, date, mkdir, or shell-specific separators in executable instructions.
Copy PLAN.md with fs.copyFile() when needed. Generated application code, infrastructure, logs, and secrets stay inside the isolated run directory, never the source repository.
Invoke journey-runner with:
Journey: <journey-source-path>
Stack: <stack>
Location: <location>
Working directory: <absolute-run-directory>
Cleanup: after-verification
The runner owns per-journey preflight, prompts, local ports, deployment, verification, screenshots, and scoped cleanup.
Run serially by default. Parallel runs require:
azd environment namesNever share an azd environment across journeys.
Before removing a run directory, copy these artifacts with Node.js filesystem APIs:
run-report.mdissues.mdscreenshot-*.pngUse the mapping below:
| Journey | Web output | Screenshot |
|---|---|---|
| Grafana | GRAFANA_URL | Login page |
| n8n | N8N_URL | Owner-setup or login page |
| Superset | SUPERSET_URL | Authenticated welcome page when credentials are available |
| AIMarket | WEB_URL | Storefront with all images loaded |
| SmartTodo | None | No screenshot on Windows/Linux; simulator screenshot only on a suitable Mac/Xcode host |
Use journey-runner's pinned Playwright Chromium helper. Never use a branded Chrome channel.
Cleanup runs in a finally path after each deployment attempt, including build, deployment, verification, or screenshot failures.
For each journey, delete only:
azd environmentNever run a pipeline over every row from azd env list. Other environments may belong to unrelated work.
After azd down --force --purge --no-prompt, verify:
If cleanup is incomplete, preserve the workspace and list exact remaining resource IDs in the consolidated report.
Delete a per-journey working directory only when all of these are true:
Use Node.js fs.rm(path, { recursive: true, force: true }) on the exact recorded run directory. Never construct a deletion path from untrusted output.
Write test-report.md directly with file tools or Node.js. Don't build Markdown through a large shell one-liner.
Include:
Example result table:
| Journey | Build | Deploy | Verify | Screenshot | Cleanup | Result |
|---|---:|---:|---:|---:|---:|---:|
| Grafana | PASS | PASS | PASS | PASS | PASS | PASS |
| n8n | PASS | PASS | PASS | PASS | PASS | PASS |
| Superset | PASS | PASS | PASS | PASS | PASS | PASS |
| AIMarket | PASS | PASS | PASS | PASS | PASS | PASS |
| SmartTodo | PASS | PASS | PASS | N/A on Linux/Windows | PASS | PASS |
A journey can't receive PASS when cleanup was requested but not verified.
azd environments.Take microsoft/journey-test-harness from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.