architecture
Use when the user asks to improve architecture, find refactoring opportunities, surface deepening opportunities, consolidate…
Use when a running web app's UX has to be audited reproducibly rather than by feel — a deterministic mechanical pass over routes and viewports (axe, target size, horizontal overflow, page title, scripted journeys) followed by a screenshot-grounded interrogation of the operator,
Claude Code
$ npx -y skills add Kanevry/session-orchestrator --skill ux-grill --agent claude-code
Codex
$ npx skills add Kanevry/session-orchestrator --skill ux-grill -a codex -y
Cursor
$ npx skills add Kanevry/session-orchestrator --skill ux-grill -a cursor -y
Gemini CLI
$ npx skills add Kanevry/session-orchestrator --skill ux-grill -a gemini-cli -y
GitHub Copilot
$ npx skills add Kanevry/session-orchestrator --skill ux-grill -a github-copilot -y
OpenCode
$ npx skills add Kanevry/session-orchestrator --skill ux-grill -a opencode -y
Windsurf
$ npx skills add Kanevry/session-orchestrator --skill ux-grill -a windsurf -y
name: ux-grill user-invocable: true argument-hint: "[url | manifest-path]" description: Use when a running web app's UX has to be audited reproducibly rather than by feel — a deterministic mechanical pass over routes and viewports (axe, target size, horizontal overflow, page title, scripted journeys) followed by a screenshot-grounded interrogation of the operator, journey by journey, with two persona lenses from the target repo's manifest. Triggered by "grill the UX", "roast the dashboard", "UX-Audit", "/ux-grill". Bootstraps its own manifest from a loopback URL on the first run, so it never requires a hand-written file to start. model: inherit color: magenta tools: Read, Grep, Glob, Bash, Write
> Two stages, hard boundary. **Stufe 1** measures — a Node pass over routes × viewports that calls `agent-browser` and writes JSON, with no model in the loop. **Stufe 2** grills — the `/grill` loop applied to journeys, where every claim carries a screenshot path. Severity is never a judgment here; it comes out of `schema.mjs`.
The user invoked `/ux-grill` with arguments: **$ARGUMENTS**. Parse them before anything else — exactly one positional argument is recognised:
Examples:
**No CI, no HARD-GATE.** Stufe 1 is built CI-shaped (deterministic, exit-coded, LLM-free) but is deliberately not wired into any pipeline — the PRD's dose argument. `/ux-grill` gates nothing: it writes measurement artefacts, an optional dossier and — only through `reconcile.mjs` <!-- path-check: planned #1327 --> — issues. It never commits, never pushes, never edits product code.
Read `soul.md` in this skill directory before anything else. It defines WHO you are — the UX Interrogator — the persona-lens discipline, and the six tactics in their UX form. The rubric you measure against is `rubric-v2.md`; read it before Phase 1 so you can read `findings.jsonl` without guessing what a `checkId` means.
Per § Invocation above: a loopback URL selects the bootstrap path, a file path or empty selects `DEFAULT_MANIFEST_PATH` from `scripts/lib/ux-grill/manifest.mjs`.
This path exists because the predecessor skill died of its absence: a tool that presupposes a hand-written manifest is never started.
1. **Ask ONCE, up to three questions in a single `AskUserQuestion` call** — the env FILE name and the two login env NAMES. Never a value; the manifest and everything downstream carry names only.
AskUserQuestion({
questions: [
{ question: "Which env file of the target repo holds the login credentials?",
header: "Env-Datei",
options: [
{ label: ".env.local (Recommended)", description: "The usual dev file. Cost: none — only the NAME is stored; values stay in the gitignored file." },
{ label: ".env.e2e.local", description: "A separate e2e file, where one exists. Same storage contract." },
{ label: "Ohne Login", description: "No credentials at all — personas stay empty and only the unauthenticated navigation is crawled. Cost: journeys behind the login are invisible." },
{ label: "Other / describe below", description: "Name a different file." } ],
multiSelect: false },
{ question: "Which env variable holds the login e-mail?",
header: "Mail-Env",
options: [
{ label: "TEST_USER_EMAIL (Recommended)", description: "The most common name in the env file you picked. Cost: none — the NAME is stored, the value never is." },
{ label: "LOGIN_EMAIL", description: "Use when the target repo names it that way." },
{ label: "Other / describe below", description: "Name the variable yourself; read it from the env file first." } ],
multiSelect: false },
{ question: "Which envYour 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.