architecture
Use when the user asks to improve architecture, find refactoring opportunities, surface deepening opportunities, consolidate…
Use this skill when orchestrating agentic end-to-end tests. Resolves target + profile, dispatches the right driver(s) (playwright for web today, peekaboo for macOS (issue #381)), invokes the ux-evaluator agent (opus, read-only) against driver artifacts, reconciles findings with
Claude Code
$ npx -y skills add Kanevry/session-orchestrator --skill test-runner --agent claude-code
Codex
$ npx skills add Kanevry/session-orchestrator --skill test-runner -a codex -y
Cursor
$ npx skills add Kanevry/session-orchestrator --skill test-runner -a cursor -y
Gemini CLI
$ npx skills add Kanevry/session-orchestrator --skill test-runner -a gemini-cli -y
GitHub Copilot
$ npx skills add Kanevry/session-orchestrator --skill test-runner -a github-copilot -y
OpenCode
$ npx skills add Kanevry/session-orchestrator --skill test-runner -a opencode -y
Windsurf
$ npx skills add Kanevry/session-orchestrator --skill test-runner -a windsurf -y
name: test-runner user-invocable: false tags: [test, orchestrator, e2e, ux] model: sonnet model-preference: sonnet model-preference-codex: gpt-5.4 model-preference-cursor: claude-sonnet-4-6 description: > Use this skill when orchestrating agentic end-to-end tests. Resolves target + profile, dispatches the right driver(s) (playwright for web today, peekaboo for macOS (issue #381)), invokes the ux-evaluator agent (opus, read-only) against driver artifacts, reconciles findings with the open issue tracker via scripts/lib/test-runner/issue-reconcile.mjs, and writes report.md + JSONL roll-up. Wraps upstream tools (no forks). Hard-gates Playwright MCP for browser drive (4× token cost vs CLI per Microsoft's own benchmark).
> Project-instruction file resolution: `CLAUDE.md` and `AGENTS.md` (Codex CLI) are transparent aliases — see [skills/_shared/instruction-file-resolution.md](../_shared/instruction-file-resolution.md). Wherever this skill mentions `CLAUDE.md`, the alias rule applies.
Before anything else, read and internalize `soul.md` in this skill directory. It defines WHO you are — your role as an orchestrator, your delegation boundaries, and your non-negotiable constraints.
Read `skills/_shared/bootstrap-gate.md` and execute the gate check. If GATE_CLOSED, invoke `skills/bootstrap/SKILL.md` and wait for completion. If GATE_OPEN, continue to Phase 1.
<HARD-GATE> Do NOT proceed past Phase 0 if GATE_CLOSED. There is no bypass. Refer to `skills/_shared/bootstrap-gate.md` for the full HARD-GATE constraints. </HARD-GATE>
Read and parse Session Config per `skills/_shared/config-reading.md`. Store result as `$CONFIG`.
Test-runner specific fields (parse these specifically):
Resolution order (first match wins):
1. **CLI argument** `--target <name> --profile <name>` (explicit, highest priority) 2. **Policy file lookup** — `.orchestrator/policy/test-profiles.json` by target name (if present) 3. **Convention-based detection** (marker files):
4. **Fallback** → emit error and halt:
Error: Cannot resolve target — provide --target or add .orchestrator/policy/test-profiles.json
Resolve the rubric and requested target right after the profile; verify the target against Phase 2 capture evidence before Phase 3 passes it to the evaluator.
**`RUBRIC`** — the selected profile's `rubric` field:
import { loadProfiles, getProfile } from 'scripts/lib/profiles/registry.mjs';
const reg = await loadProfiles(); // .orchestrator/policy/test-profiles.json
const hit = reg.ok ? getProfile(reg.profiles, PROFILE) : { ok: false };
const RUBRIC = hit.ok ? hit.profile.rubric : 'skills/test-runner/rubric-v2.md';`getProfile()` already applies the schema default (`scripts/lib/profiles/schema.mjs`, rubric-v2) when a profile names no rubric, so a pin is honoured and an unpinned profile gets v2. No registry file or no matching profile (convention-based detection) → rubric-v2. The mac profiles pin `rubric-v1.md` on purpose: peekaboo writes `ax-snapshots/<scenario>.json`, no 1440/390 viewports, so the v2 human checks could never complete there.
**`TARGET_KIND` / `TARGET_URL`** — what the run actually looked at (rubric-v2 Hard rule 4):
Generate a run ID immediately after target resolution:
import { makeRunId } from 'scripts/lib/test-runner/artifact-paths.mjs';
const runId = makeRunId(); // e.g. "your-target-app-1715688000123"All artifact paths in subsequent phases derive from this run ID. Never use ad-hoc paths.
After resolution, emit: `Test Runner: target=[name] profile=[name] run_id=[runId] driver=[drive
Your coding agents get an agreed plan, a check after each round of changes and a handover to the next session. A free, MIT-licensed workflow plugin for people running Claude Code, Codex CLI, Cursor IDE or Pi on a git repository.
Use when the user asks to improve architecture, find refactoring opportunities, surface deepening opportunities, consolidate…
Use this skill when running an autonomous session-orchestration loop. Chains session-start → session-plan → wave-executor →…
Use this skill when scaffolding the minimum repository structure required by session-orchestrator. Invoked automatically by the…
Use when you have a feature idea but the scope or UX is still ambiguous — runs a lightweight Socratic design dialogue (3-5 AUQ…
Use when detecting drift between CLAUDE.md (or AGENTS.md, the Codex CLI alias) / _meta narrative and live repository state. Ten…
You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…
Ask which skill or flow fits your situation. A router over the skills in this repo.