Ux interview
Collection of Claude Code and Claude Desktop skills for developer workflows, automation, and productivity
npx -y skills add mostafa-drz/claude-skills --skill ux-interviewAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 2 stars2 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Plays the role of a real user in an interview-style usability test. Takes context about the product (URL, description, focus areas), auto-suggests a persona (overridable), then drives real Chrome via the claude-in-chrome extension to explore the product think-aloud style — narrating live reactions while flagging confusion, friction, and delight, and capturing GIFs/screenshots of the friction moments. Produces a structured UX report with severity-ranked pain points, what worked, and prioritized recommendations. Learns over time which findings the user considers signal vs noise. Use when you want a real-user-perspective audit of a web product to catch UX/UI/product issues that automated tests can't catch.
SKILL.md
16.8 KB, as published. Nobody here has run it
UX Interview
Play a real user in an interview-style test of a web product. Narrate think-aloud reactions live as you click, scroll, and try to accomplish realistic goals — then deliver a structured report with severity-ranked findings, delight moments, and prioritized recommendations.
This skill is not an automated test runner (see /ui-test for that). It is a qualitative user-perspective audit. Findings are based on judgement, not assertions.
Preferences
On startup, use the Read tool to load ~/.claude/skills/ux-interview/preferences.md. If missing, treat as first-run (see First-time detection).
Defaults when no preferences exist:
output-root:./ux-interviews/(cwd-relative when in a project; falls back to~/.claude/skills/ux-interview/runs/otherwise)default-depth:standard(quick ≈ 5–7 min walkthrough / standard ≈ 12–18 min / deep ≈ 25 min+ with multiple flows)narration-style:expressive(expressive — feels like a real user / neutral — observational / terse — short notes only)persona-mode:auto-suggest(auto-suggest with override / always-ask / fixed-default)severity-floor:minor(nitpick / minor / moderate / major — anything at-or-above is reported)capture-mode:friction-only(friction-only / per-section / never) — when GIFs/screenshots are takenviewport:1440x900— also accepts a list (e.g.375x812,1440x900) to test responsiveconfirm-plan:always(always / never) — confirm the test plan before opening the browserauto-open-report:true
Also load ~/.claude/skills/ux-interview/feedback-journal.md if present — surface the latest 5 Signal: lines to bias defaults (e.g. if the user repeatedly downgraded "minor copy issues", raise the severity floor pre-selection).
Context
On startup, use Bash to detect: today's date+time (date +%Y-%m-%d-%H%M), the current working directory (pwd), and whether the configured output-root exists. Do NOT call any browser tool yet — that happens in Step 4.
Command routing
Check $ARGUMENTS:
help→ display help, stopconfig→ run config flow, stopreset→ deletepreferences.md+feedback-journal.md+sessions/+resume-state.md, confirm, stopfeedback→ collect ratings on the most recent session (see Feedback section), stophistory→ list recent session folders with verdict + timestamp, stopresume→ reopenresume-state.mdand continue an interrupted session, stop on completion--from-brief <path>→ read the brief from a markdown file, run the session- anything else → treat
$ARGUMENTSas an inline brief (URL + free-text description), run from Step 1
Help
ux-interview — Real-user-perspective UX testing via real Chrome
Usage:
/ux-interview "<url> <brief>" Inline brief, runs the session
/ux-interview --from-brief <path> Load brief from a markdown file
/ux-interview resume Resume an interrupted session
/ux-interview history List recent sessions (verdict + date)
/ux-interview feedback Rate the last session (teaches the skill)
/ux-interview config Set preferences
/ux-interview reset Clear preferences + journal + sessions
/ux-interview help This help
Per-run flags:
--persona "<who>" Override the auto-suggested persona
--focus "<areas>" Comma-list of areas/flows to prioritize
--depth quick|standard|deep
--viewport <WxH[,WxH]> Single viewport or comma-list for responsive
--no-narration Skip live think-aloud, only output the final report
--no-gif Disable GIF capture
--severity-floor <nitpick|minor|moderate|major>
--verbose
Examples:
/ux-interview "https://stripe.com — checkout flow + nav clarity"
/ux-interview --from-brief ./brief.md --persona "non-technical small-biz owner"
/ux-interview "https://acme.app/signup --focus signup,onboarding --depth deep"
Output: {output-root}/{YYYY-MM-DD-HHMM}-{slug}/ contains
report.md, brief.md, transcript.md, findings.json, captures/.
Current preferences:
(loaded from preferences.md)
Config
Use AskUserQuestion to collect (max 4 per call):
Batch 1 — Output & defaults
- Output root path (default
./ux-interviews/) - Default depth (
quick/standard/deep) - Persona mode (
auto-suggest/always-ask/fixed-default) - Default narration style (
expressive/neutral/terse)
Batch 2 — Capture & strictness
5. Severity floor (nitpick / minor / moderate / major)
6. Capture mode (friction-only / per-section / never)
7. Default viewport (e.g. 1440x900 or 375x812,1440x900)
8. Confirm plan before browser (always / never)
Save to ~/.claude/skills/ux-interview/preferences.md in the three-tier format below.
Preferences file format
# /ux-interview preferences
Updated: YYYY-MM-DD
## Defaults
- output-root: ./ux-interviews/
- default-depth: standard
- narration-style: expressive
- persona-mode: auto-suggest
- severity-floor: minor
- capture-mode: friction-only
- viewport: 1440x900
- confirm-plan: always
- auto-open-report: true
## Profile (optional — edit freely)
- I usually test B2B SaaS — bias personas toward time-pressed admins.
- Skip nitpicky copy issues unless they actually block comprehension.
## Learned
- (populated from feedback over time)
Reset
Delete preferences.md, feedback-journal.md, sessions/, and resume-state.md. Confirm: Cleared. Defaults + journal + sessions wiped.
First-time detection
If no preferences.md exists:
First time using
/ux-interview? Run/ux-interview configto set defaults — or just continue and I'll use sensible ones.
Then proceed.
Workflow
Step 0 — Load learning context
Read preferences.md and feedback-journal.md (graceful: if missing, continue with defaults). Note any Learned rules — they pre-bias the choices in Steps 2–6 (persona pick, severity floor, narration style).
Step 1 — Gather the brief
Inputs may come from: $ARGUMENTS inline string, --from-brief <path>, or interactive prompt. The brief should answer:
- Product URL (required — must be reachable in Chrome)
- What the product does (1–3 sentences)
- Focus areas / flows to test (e.g. signup, checkout, dashboard, search)
- Known constraints (e.g. "skip auth — use creds X", "ignore the legacy /v1 pages")
If any are missing, ask via AskUserQuestion (≤4 questions in one batch). Pre-select based on Learned rules.
Save the parsed brief to {session-dir}/brief.md.
Step 2 — Suggest a persona
Based on the product description + focus areas, propose a persona that's likely to surface real issues. A persona is 3–5 lines:
- Who they are (role / context / level of tech savvy)
- What they're trying to do (the goal that brought them here)
- What they care about (speed? trust? cost? clarity?)
- What they'd give up on (their patience threshold)
Per persona-mode:
auto-suggest: present the suggested persona viaAskUserQuestionwith optionsUse it / Tweak it / Pick a different onealways-ask: skip the suggestion, prompt the user for the personafixed-default: use the persona stored inpreferences.mdProfile
Save the chosen persona to {session-dir}/brief.md under ## Persona.
Step 3 — Plan the session
Draft a short test plan (5–10 bullet points) covering:
- Entry intent — what the user is trying to do as they land on the page
- Realistic flows — 2–4 flows aligned to focus areas, in the order a real user would attempt them
- Edge probes — 1–2 deliberate "what if I do this wrong" moments (typos, back button, refresh)
- Wrap intent — when the user would close the tab in real life
If confirm-plan: always, present the plan and ask one AskUserQuestion to approve, tweak, or restart. If confirm-plan: never, log the plan to the transcript and proceed.
Save the plan to {session-dir}/transcript.md under ## Plan.
Step 4 — Run the session (think-aloud)
Open a fresh Chrome tab via mcp__claude-in-chrome__tabs_create_mcp (call tabs_context_mcp first if you don't have a current tab). Set viewport via resize_window. Then walk the plan.
For each step:
- State intent before acting — one short sentence in the voice of the persona ("Okay, I want to find pricing — I'll scroll down").
- Act —
navigate,find,computer(click/scroll/type),form_inputfor forms. - Observe —
read_pageorget_page_textfor content;read_console_messagesif something looks broken. - React — narrate what the persona feels in 1–2 sentences. Tag the moment with one of:
[delight]— something exceeded expectations[friction]— slow, awkward, or required guessing (severity: nitpick / minor / moderate / major)[confusion]— couldn't tell what to do, where to go, or what something meant[bug]— broken or behaved unexpectedly[neutral]— noted but no judgement
- Capture (per
capture-mode):friction-only→ callgif_creatoronly on friction/confusion/bug momentsper-section→ capture a short GIF for each major flow transitionnever→ skip capture Save captures under{session-dir}/captures/.
Append every reaction to {session-dir}/transcript.md as a timestamped line:
[HH:MM:SS] [tag/severity] (location) "narration" — observation
Stop conditions — end early if:
- The persona would realistically give up (note this as a major friction)
- The product 500s, redirects to login you can't pass, or hits a hard block
- The depth budget is hit (quick: ~5 reactions/section, standard: ~10, deep: ~20+)
If the session is interrupted (user halts, browser disconnect), save resume-state.md with the current step + transcript pointer.
Step 5 — Analyze findings
After exploration:
- Group transcript items into findings. A finding combines related reactions ("Couldn't find the pricing link → had to use search → search returned no results" = one finding, not three).
- Score each finding:
- Severity: nitpick / minor / moderate / major / blocker
- Confidence: low / medium / high (low = single observation, high = repeat or systemic)
- Type: copy / IA & nav / visual / interaction / performance / trust / accessibility-felt
- Apply the
severity-floor— anything below the floor goes to## Below floor(kept but not promoted). - Identify delight moments (anything tagged
[delight]). - Draft prioritized recommendations — for each major/moderate finding, propose 1 concrete fix. Order by
(severity × confidence) / effort(effort guessed: low/med/high).
Save structured data to {session-dir}/findings.json.
Step 6 — Generate the report
Write {session-dir}/report.md with this structure:
# UX Interview — {product name} — {date}
## Verdict (one paragraph)
Persona "{persona-summary}" tried to {goal}. Outcome: {succeeded / partially / abandoned}. {1–2 sentences on overall feel}.
## Top friction (severity ≥ {floor})
1. **{Title}** — {severity} · {confidence} · {type}
What happened: {…}
Why it matters: {…}
Where: {URL or location} ({capture link if any})
Suggested fix: {…}
## What worked
- {delight moment 1}
- {delight moment 2}
## Prioritized recommendations
| # | Issue | Severity | Effort | Impact |
|---|-------|----------|--------|--------|
| 1 | … | major | low | high |
## Persona & plan
{persona block}
{plan bullets}
## Full transcript
See `transcript.md`.
## Captures
See `captures/` ({N} files).
If auto-open-report: true, run open {session-dir}/report.md.
Step 7 — Final summary + invite feedback
Print to chat:
- Verdict line + counts (
{N} major, {M} moderate, {K} minor; {D} delight moments) - Path to
report.md - One follow-up
AskUserQuestion:What's next? — Open report / Run another persona on the same product / Try a different flow / Done
Then add the line:
Run
/ux-interview feedback— even one rating helps me sharpen which findings are signal vs noise for you.
Append a session log to ~/.claude/skills/ux-interview/sessions/{YYYY-MM-DD-HHMM}.md with the brief, persona, plan summary, finding counts by severity, and a 1-line verdict. This is what feedback reads.
Feedback & learning
When invoked as /ux-interview feedback:
- Find the most recent
sessions/YYYY-MM-DD-HHMM.md. If none, sayNo recent session found.and stop. - Print a one-line summary of that session.
- Ask via
AskUserQuestion(4 questions in one batch):- Persona fit — was the persona believable for this product? (
spot-on / close / off) - Findings quality — were the issues real or fabricated/noisy? (
mostly real / mixed / mostly noise) - Severity calibration — were severities right? (
right / too harsh / too lenient) - Depth — was the session the right depth? (
right / too shallow / too deep)
- Persona fit — was the persona believable for this product? (
- Append to
~/.claude/skills/ux-interview/feedback-journal.md:## {session slug} — {date} - Persona fit: {answer} - Findings quality: {answer} - Severity calibration: {answer} - Depth: {answer} - Signal: {one-line generalisation, e.g. "User wants severity floor raised for B2B SaaS — they keep flagging minor copy as noise"} - Promotion rule: when 3+ recent sessions show the same
Signal, promote it to## Learnedinpreferences.md. Mention once:Noticed you consistently {…}. Saved as standing default. - Drift correction: if a
Learnedrule is contradicted in 2 newer sessions, demote it (log the demotion in the journal).
Pre-selection in Step 2's persona question and Step 5's severity-floor application should be biased by Learned rules.
Principles
- Real user, not assertion engine — narrate the felt experience. If something is technically working but emotionally annoying, that's still a finding.
- Stay in persona — if the persona is "non-technical small-biz owner", do NOT use the dev tools mindset to spot CSS issues. Note what they would notice.
- Severity is honest — a "tiny copy issue" is
nitpick, notmajor. Inflating severity ruins the signal. - Capture the moment, not the page — GIFs should show the friction (the wrong click, the back-button, the squinting), not a clean recording.
- Graceful degradation — continue with built-in defaults if
preferences.md/feedback-journal.mdcan't be read; skip captures ifgif_creatorfails; don't abort the whole session for one tool error. - Learn quietly — promote a rule only after 3+ consistent signals; mention once when promoting.
- Destructive actions need confirmation — never click anything that obviously deletes/posts/charges without asking the persona-as-user "would I really click this?" and confirming with the human user.
- Stop means stop — when the human user halts mid-session, save
resume-state.mdand exit cleanly. Don't keep poking the browser. - Skill orchestrates, does not re-judge — preserve the user's brief verbatim; don't rewrite their focus areas to be "more testable".