# {the skills}. Enterprise UX agent skills

10 skills. Free, open source, never gated.
Repo: https://github.com/roxanneallard/euxlab-skills

## What you need

A folder you can write to, and a coding agent that can read and write files in it.

No Obsidian, no note-taking app, no wiki, no second brain. Everything these skills
share between steps is plain markdown in an ordinary directory. Every path inside
is relative and every cross-reference is an ordinary markdown link, so the folder
opens anywhere, greps, and versions in git. If you already keep a vault, put the
engagement folder inside it and nothing changes.

## Install

### 1. Get the skills

#### Claude Code (plugin)

Install the whole set as a managed, read-only plugin. It updates when a new version ships.

```bash
claude plugins marketplace add roxanneallard/euxlab-skills
claude plugins install euxlab-skills@euxlab
```

Update with: `/plugin marketplace update euxlab`

Plugin skills carry the plugin prefix, so setup runs as /euxlab-skills:euxlab-setup.

#### Codex and other agents (skills.sh)

Pick the skills and the agents you use. The installer writes editable files into your project.

```bash
npx skills@latest add roxanneallard/euxlab-skills
```

Update with: `npx skills update`

Take euxlab-setup and the four reference skills. The loop skills load them.

Pick one. Installing both gives you every skill twice.

Claude desktop or web? Download the skill zips from the latest release and upload each one under Settings > Capabilities > Skills. Upload the four reference skills first. https://github.com/roxanneallard/euxlab-skills/releases/latest

### 2. Run `/euxlab-setup`

Once per engagement, inside the engagement folder. It asks for:

- The client, the product, and the domain
- The design system every artifact has to obey
- The consent and retention posture for research recordings
- Who asks for the work, who signs off, and who is measured on the outcome

Then it writes the folder scaffold every other skill reads.

### 3. Start the loop

When a stakeholder request arrives, run `/euxlab-grill-the-ask`.

## The loop

Run together as {the system} (https://euxlab.com/system/), every skill reads the file the
previous step wrote. Two steps are handwork, not skills.


[request]  A request arrives. "We need a new dashboard."
  |
  v  /euxlab-grill-the-ask  (asks critical questions about requirements, scope and users)

[docs/interview-guide.md]  the request sharpened, plus the questions for the interviews
  |
  v  interviewing stakeholders and users  (handwork: no skill. You talk to stakeholders and users)

[transcripts]  in research/raw/
  |
  v  /euxlab-create-personas-and-job-stories  (per transcript)

[research/personas/]  role description, workflows, job stories, pain points, needs, and more
  |
  v  /euxlab-synthesize

[research/insights/]  insights I01, I02 with evidence from the transcripts. Contradictions as C01
  |
  v  /euxlab-design-brief

[docs/design-brief.md]  the design assignment: scope, requirements, and which insights the design must serve
  |
  v  designing  (handwork: no skill. You do this, in Figma)

[design]  screens and a prototype, each screen naming the insight it serves
  |
  v  /euxlab-design-review

[two reports]  Standards: heuristics, WCAG. Evidence: which insight does this screen serve, and where is that written

## Two rules

**Every claim carries a pointer.** Participant ID plus a line range, back to raw. A claim with no pointer does not ship. This is what makes a contradiction detectable six weeks later, and what lets /euxlab-design-review walk from any screen back to the quote behind it.

**Raw research is people.** Participants are identified by ID everywhere outside `research/raw/`. Redaction happens on the way out of every skill, not as a final cleanup pass.

## The skills

### 01 Getting started

Run once per engagement. Everything else reads what this writes.

#### /euxlab-setup

- Summary: Configure one engagement and write the folder scaffold.
- Invocation: you invoke
- Writes: docs/agents/engagement.md
- Input: What you know about the client, the domain, the design system, and the consent posture.
- Output: A filled engagement file, a glossary stub, and the folder scaffold every other skill reads.
- Completion criterion: `docs/agents/engagement.md` exists with every section filled or explicitly marked `not yet known`, the folder scaffold matches the tree, and the consent posture names a retention period and an identification scheme. A blank field is allowed; a missing section is not.
- Docs: https://euxlab.com/skills/euxlab-setup/

### 02 The loop

Request to reviewed design, in order. Every output is the next input.

#### /euxlab-grill-the-ask

- Summary: Critical questions about requirements, scope and users, every claim graded, and the questions for the interviews.
- Invocation: you invoke
- Writes: docs/interview-guide.md
- Input: A vague stakeholder ask, and you in the room to be interviewed about it.
- Output: One file: the ask sharpened, a graded assumption register, and the interview questions, each naming the assumption it tests.
- Completion criterion: The question frontier is empty, every assumption in the register carries a grade, and every C and D assumption is either covered by a numbered question or carries an explicit written decision to accept the risk untested. A colleague who was not in the room could run the sessions from the file.
- Docs: https://euxlab.com/skills/euxlab-grill-the-ask/

#### /euxlab-create-personas-and-job-stories

- Summary: One transcript in, one cited professional persona and its job stories out.
- Invocation: you invoke
- Writes: research/personas/
- Input: One transcript from `research/raw/`, plus the interview guide that produced the session.
- Output: One persona document: role, workflows, job stories, pain points and needs, every trait cited, no insights, labelled `n=1, provisional`.
- Completion criterion: Every persona field carries a participant ID plus a line range, or the literal `not covered`. Every pain point names the structural problem, the workaround observed, and its citation. Every job story is in strict format, names no solution in the motivation, and cites the struggle moment it came from. The document contains no insights and no insight IDs. No persona merges participants with different decision authority. Zero uncited traits: one uncited trait and the file does not ship.
- Docs: https://euxlab.com/skills/euxlab-create-personas-and-job-stories/

#### /euxlab-synthesize

- Summary: The cross-transcript pass, and the only skill that writes insights: one file each, cited and graded.
- Invocation: you invoke
- Writes: research/insights/
- Input: The provisional personas and the full raw research set.
- Output: Insights I01, I02, one file each with evidence from the transcripts, contradictions as C01, an index, and personas promoted or retired.
- Completion criterion: Every insight has its own file named by its ID, and cites at least two evidence items from at least two participants, or is explicitly marked `n=1, provisional`. No insight exists without a citation trail back to raw. Every contradiction is written as a callout with an ID, none silently resolved. Every provisional persona is promoted, merged, or retired, each with a reason. `research/insights/index.md` lists every insight and every contradiction.
- Docs: https://euxlab.com/skills/euxlab-synthesize/

#### /euxlab-design-brief

- Summary: Insights into the design assignment, agreed before the first frame exists.
- Invocation: you invoke
- Writes: docs/design-brief.md
- Input: Cited insights from `research/insights/`, the personas, and a stakeholder willing to sign.
- Output: One file a designer can start from: scope, requirements, the insight IDs each requirement serves, and the observable with today’s number.
- Completion criterion: Every requirement is solution-free, carries at least one insight ID that resolves to a file in `research/insights/`, and states an observable with a baseline or a stated way to get one. Every persona named in a requirement exists in `research/personas/`. The out-of-scope section is not empty. The tracing section tells the designer to label every screen with its insight ID. The stakeholder has confirmed the brief with a name and a date. A requirement whose observable cannot be checked is sent back, not carried forward.
- Docs: https://euxlab.com/skills/euxlab-design-brief/

#### /euxlab-design-review

- Summary: Two parallel reviews, Standards and Evidence, side by side. Evidence walks every screen to its insight.
- Invocation: you invoke
- Writes: two reports
- Input: The design (screens and a prototype), `docs/design-brief.md`, `research/insights/`, and the engagement’s design system.
- Output: Two reports: Standards (heuristics, WCAG 2.1 AA, design system, enterprise smells) and Evidence (which insight does each screen serve, and where is that written), with a trace table per screen.
- Completion criterion: Both reports delivered, one-line summary per axis, worst issue named within each axis, and no single winner across axes. The Evidence report has a trace row for every screen, and every Evidence finding names the insight ID, its file, and the requirement by its R number. Every Standards finding names the specific rule, ratio, or smell it violates. A finding with no rule and no insight behind it is an opinion and gets cut before the report ships.
- Docs: https://euxlab.com/skills/euxlab-design-review/

### 03 Reference

Model-invoked. The vocabulary lives here so the other skills cite instead of restating.

#### /euxlab-grilling

- Summary: The interview primitive: rounds, the frontier, pressure.
- Invocation: model invokes
- Writes: nothing (reference only)
- Input: A subject with open decisions in it.
- Output: A settled decision tree, walked to the leaves, with nothing silently assumed.
- Completion criterion: The question frontier is empty: every decision in the tree is either settled by the user or written down as an explicit open question. Facts are the agent’s job, decisions are the user’s, and the transcript shows that line was held.
- Docs: https://euxlab.com/skills/euxlab-grilling/

#### /euxlab-evidence-standards

- Summary: The four-grade strength scale, downgrade triggers, and the research anti-patterns.
- Invocation: model invokes
- Writes: nothing (reference only)
- Input: A claim, and what is known about where it came from.
- Output: A grade (A observed, B reported, C inferred, D asserted) and, for weak grades, the cheapest test that would move it.
- Completion criterion: Every graded claim names the evidence that earned the grade and, at C or D, the specific cheaper-than-guessing method that would raise it. A grade with no stated basis is not a grade.
- Docs: https://euxlab.com/skills/euxlab-evidence-standards/

#### /euxlab-enterprise-ux-stance

- Summary: Ten enterprise design smells and their fixes, applied as labelled judgment calls.
- Invocation: model invokes
- Writes: nothing (reference only)
- Input: A design artifact or a recommendation, plus any documented engagement standards.
- Output: Findings in the form `Smell: <name>`, each with the evidence that triggered it and the fix.
- Completion criterion: Every smell reported as a labelled judgment call, never as a rule violation, with the triggering evidence and a fix attached. Where documented engagement standards override the baseline, that is stated rather than argued.
- Docs: https://euxlab.com/skills/euxlab-enterprise-ux-stance/

#### /euxlab-outcome-vocabulary

- Summary: Job story format, ODI outcome format, the job map, the opportunity algorithm.
- Invocation: model invokes
- Writes: nothing (reference only)
- Input: A struggle moment, a job, or a draft outcome statement.
- Output: Statements in strict format, in the right one of the three types.
- Completion criterion: Every statement matches its type’s strict format and names no solution. A statement that smuggles a solution into the motivation is rewritten, not accepted.
- Docs: https://euxlab.com/skills/euxlab-outcome-vocabulary/

## The state contract

| Path | Written by | Read by | Rule |
|---|---|---|---|
| `docs/agents/engagement.md` | /euxlab-setup | all | client, design system, consent posture, stakeholders |
| `GLOSSARY.md` | /euxlab-grill-the-ask, persona skill | all | a term earns an entry when it is fuzzy, contested, or overloaded |
| `docs/interview-guide.md` | /euxlab-grill-the-ask | persona skill, /euxlab-synthesize | the sharpened request, the graded assumption register, the questions |
| `research/raw/` | interviewing | persona skill, /euxlab-synthesize | immutable, consent-checked, may contain PII |
| `research/personas/` | persona skill | /euxlab-synthesize, /euxlab-design-brief | role, workflows, job stories, pain points, needs. No insights. Provisional until synthesis reconciles |
| `research/insights/` | /euxlab-synthesize | /euxlab-design-brief, /euxlab-design-review | one file per insight, ID’d, graded, cited to raw |
| `docs/design-brief.md` | /euxlab-design-brief | designing, /euxlab-design-review | requirements, each serving named insight IDs |
| `the design` | designing | /euxlab-design-review | every screen names the insight ID it serves |
