agentleFS
napnap11napnap11/claude-skills/devex-review/SKILL.md

devex-review

Skill1 starsChanged 5 months agoMITView on GitHub

Interactive developer experience plan review. Explores developer personas, benchmarks against competitors, designs magical moments, traces friction points, then scores 0-10 across 8 dimensions. Three modes: DX EXPANSION (competitive advantage), DX POLISH (bulletproof every touchpoint), DX TRIAGE (critical gaps only). Use when the user says "DX review", "/devex-review", "developer experience audit", "devex review", or "API design review".

  • Commits and pushes

26 other projects use a version of this, 2 of them edited.

Adopted by

Most recently taken up by

Used with

Projects with it also use ios-clean, ios-fix and 10 more.

Other files people use alongside this one.

Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
  • Saqlain-811Skill

    ios-clean

    Remove the DebugBridge SPM package and all #if DEBUG wiring from an iOS app. (gstack)

    Also in 5 projects that use this

  • Saqlain-811Skill

    ios-fix

    Autonomous iOS bug fixer. (gstack)

    Also in 5 projects that use this

  • ShreyRaviSkill

    landing-report

    Read-only queue dashboard for workspace-aware ship. Shows which VERSION slots are currently claimed by open PRs, which sibling Conductor workspaces have WIP work likely to ship soon, and what slot /ship would pick next. No mutations — just a snapshot. Use when asked to "landing report", "what's in the queue", "show me open PRs", or "which version do I claim next". (gstack)

    Also in 8 projects that use this

  • timurgaleevSkill

    document-generate

    Generate missing docs for a feature, module or project as tutorials, how-tos, reference and explanation.

    Also in 7 projects that use this

  • ShreyRaviSkill

    setup-gbrain

    Set up gbrain for this coding agent: install the CLI, initialize a local PGLite or Supabase brain, register MCP, capture per-remote trust policy. One command from zero to "gbrain is running, and this agent can call it." Use when: "setup gbrain", "connect gbrain", "start gbrain", "install gbrain", "configure gbrain for this machine". (gstack)

    Also in 6 projects that use this

  • bastosSkill

    ios-design-review

    Review iOS app UI/UX design quality using Apple's design principles and the Liquid Glass-era design language from WWDC25/26. Use when asked for a design review, UX critique, visual design assessment, or evaluation of an app's interface quality, design intent, alignment with the new Apple design system, or usability. Triggers: "design review", "UX review", "visual design critique", "review the UI", "does this design work", "evaluate this interface", "design feedback", "Liquid Glass review".

    Also in 5 projects that use this

  • +2 more from Saqlain-811
  • +4 more from ShreyRavi

The file

Show its rules and text

We split this skill into the rules it gives an agent

49 rules. 0 are common, 44 are distinctive, and 5 are very specific to this project.

  • 0

    Common

    Most of the 19 edited versions we read keep these.

  • 44

    Distinctive

    This author's own choices. Worth a look.

  • 5

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    No em dashes. Use commas, periods, or "..." instead.

    line 71
  2. Distinctive:

    No AI vocabulary: delve, crucial, robust, comprehensive, nuanced, multifaceted.

    line 72
  3. Distinctive:

    No banned phrases: "here's the thing", "plot twist", "let me break this down".

    line 73
  4. Distinctive:

    Incremental steps: Never make a developer understand the whole system before getting value from one piece.

    line 85
  5. Distinctive:

    When rating each pass, hold it up against these exemplars.

    line 144
  6. Distinctive:

    Never skip Step 0, the persona interrogation, or the empathy narrative.

    line 169
  7. Distinctive:

    Before anything else, gather context on the developer-facing product.

    line 175
  8. Distinctive:

    DX artifacts scan: Look for existing DX-relevant content:

    line 194
  9. Distinctive:

    Read the plan and infer the developer product type from its content:

    line 207
  10. Distinctive:

    If NONE of these fit: the plan has no developer-facing surface.

    line 216
  11. Distinctive:

    If one fits: state your classification and ask for confirmation.

    line 218
  12. Very specific:

    Gather evidence first: Read README.md for "who is this for" language.

    line 232
  13. Distinctive:

    After the user answers, produce a persona card:

    line 256
  14. Distinctive:

    STOP: Do NOT proceed until the user responds.

    line 267
  15. Distinctive:

    Write a 150-250 word first-person narrative from the persona's point of view.

    line 271
  16. Distinctive:

    Use the persona from 0A. Reference real files and content from the pre-review audit.

    line 273
  17. Distinctive:

    Before scoring anything, understand how comparable tools handle DX.

    line 291
  18. Distinctive:

    Run three searches, each a different angle:

    line 293
  19. Distinctive:

    Default: run these searches sequentially in this context: Read the top 2-3 results per angle, pull each comparable tool's …

    line 298
  20. Distinctive:

    Every great developer tool has a magical moment: the instant a developer flips from "is this worth my time?" to "oh wow, this is real." …

    line 374
  21. Distinctive:

    STOP: Do NOT proceed until the user responds.

    line 419
  22. Very specific:

    Trace the actual path: Read the README, docs, package.json, CLI help, or whatever the developer would hit at this stage.

    line 427
  23. Distinctive:

    DX TRIAGE mode: Only trace Install and Hello World.

    line 445
  24. Distinctive:

    Critical rule: Every rating MUST reference evidence from Step 0.

    line 503
  25. Distinctive:

    DX EXPANSION: After fixing to 10, also ask "What would make this dimension best-in-class?

    line 515
  26. Distinctive:

    DX TRIAGE: Only flag gaps that would block adoption (score below 5).

    line 517
  27. Distinctive:

    If the workflow fails or times out, fall back to running the passes inline.

    line 583
  28. Distinctive:

    Free tier: No credit card, no sales call, no company email?

    line 595
  29. Distinctive:

    Defaults: Every parameter has a sensible default?

    line 615
  30. Distinctive:

    Pricing transparency: No surprise bills?

    line 704
  31. Distinctive:

    Check each item. For any unchecked item, explain what's missing and suggest the fix.

    line 726
  32. Distinctive:

    Use AskUserQuestion (main loop):

    line 736
  33. Distinctive:

    If A: Run the challenge with four lenses, each grounded in Step 0A (Developer Persona) and Step 0C (Competitive Benchmark) so the critique …

    line 748
  34. Distinctive:

    After presenting, note points where the outside voice disagrees with earlier findings:

    line 807
  35. Distinctive:

    User Sovereignty: Do NOT auto-incorporate outside voice recommendations.

    line 815
  36. Distinctive:

    If no tension points exist, note: "No cross-model tension, both reviewers agree."

    line 827
  37. Distinctive:

    One issue = one AskUserQuestion call: Never combine multiple issues.

    line 833
  38. Distinctive:

    Escape hatch: If a section has no issues, say so and move on.

    line 838
  39. Distinctive:

    If all passes 8+: "DX plan is solid.

    line 903
  40. Distinctive:

    If any below 6: Flag as critical DX debt with specific impact on adoption.

    line 904
  41. Distinctive:

    If TTHW > 10 min: Flag as a blocking issue.

    line 905
  42. Distinctive:

    If any AskUserQuestion goes unanswered, note it here.

    line 933
  43. Very specific:

    Do NOT write to or append to REVIEWED.md — that file is reserved for code-level reviews only.

    line 938
  44. Very specific:

    Do NOT overwrite PLAN_REVIEW_<ref>.md or SCOPE_REVIEW_<ref>.md — each review type has its own file.

    line 939
  45. Very specific:

    Use the PR number, commit ref, or feature name as <ref> (from $ARGUMENTS if provided).

    line 940
  46. Distinctive:

    After displaying the DX Scorecard, recommend next reviews:

    line 944
  47. Distinctive:

    A) Run /plan-review next

    line 951
  48. Distinctive:

    B) Run /design-review (only if UI scope detected)

    line 952
  49. Distinctive:

    After each pass, pause and wait for feedback before moving on.

    line 975

“Common” is measured: kept by at least 6 in 10 of the 19 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Developer Experience Plan Review

You are a developer advocate who has lived through the first five minutes of a hundred different dev tools. You know exactly which ones lose people at minute two and which ones earn a "wait, that's it?" by minute five.

The point is not to hand back a number. The point is to push the plan toward a developer experience people actually talk about. The scores fall out of that work; they are not the work.

Do NOT touch code. Do NOT start implementing. The whole job is reviewing and sharpening the plan's DX decisions, nothing else.

DX is just UX with a longer arc. Developer journeys span multiple tools, demand fast comprehension of new concepts, and ripple out to everyone downstream. That raises the bar: you are a chef plating for other chefs.

Gather context first

This skill ships standalone, so it can't assume your project's conventions, house style, or preferences the way it could for its author. Before doing the main work:

  1. Auto-detect what you safely can from the repo — language/stack, base branch, build/test commands, existing config and docs. Never ask for something you can read for yourself.
  2. Ask, don't assume, for the rest. Where an input, convention, or preference would change the result and you can't reliably detect it, ask ONE concise AskUserQuestion (put a sensible default first, labelled Recommended) instead of guessing. The user has less context than this skill's author assumed — a wrong silent default is worse than a quick question. Don't ask about things you can detect, and don't ask more than you need.

For this skill, confirm up front (only the items you can't already detect):

  • What's under review — the plan, design doc, branch diff, or feature being assessed, and the <ref> used to label output. Auto-detect from $ARGUMENTS or the current branch; ask only if neither resolves it.
  • Base branch to diff against — auto-detect the repo's default branch (not always main); confirm if several long-lived branches make the base ambiguous.
  • Where the review goes — whether to write DEVEX_REVIEW_<ref>.md to the project root or report inline, and which <ref> to use.
  • Review depth — DX EXPANSION vs DX POLISH vs DX TRIAGE. Step 0E walks this interactively; surface the default early if the user already gave a mode hint in $ARGUMENTS.

How this runs (interactive, single context by default)

This skill lives in the main conversation, and that is deliberate. The interactive spine only works face-to-face with the user: Step 0 (persona interrogation, empathy narrative, mode selection, the friction-point ceremonies, the roleplay walkthrough), the per-pass "STOP, one AskUserQuestion per issue" walkthrough, and the cross-model tension calls all need a direct answer. Keep that spine inline. AskUserQuestion runs natively here.

By default, run the whole review inline in this one context — the search burst, the 8 passes, and the outside-voice challenge included. That keeps it cheap. Three parts are independent, non-interactive compute bursts that can be parallelized when a job is big enough to justify it:

PartCould parallelize asWhy it might pay off
Competitive DX Benchmarking (0C)multi-modal search sweep — one agent per anglea single search angle misses TTHW datapoints
The 8 Review Passesone agent per pass8 independent analytical passes; running them serially is pure latency
Outside Voicejudge panel — one challenger per lensdistinct lenses catch what one challenger misses

Parallelizing is opt-in only. Before spawning any subagent or Workflow, stop and ask the user, for example:

This DX review has three burst-able stages (competitive sweep, 8 analysis passes, outside-voice panel). I can run them inline here (cheaper, slower) or fan out parallel subagents (faster, more tokens). Which do you want?

Spawn subagents/workflows only after an explicit yes. If the user declines or doesn't answer, do the whole job inline.

When you do fan out (opt-in only): Workflow agent() calls run in the background. They cannot call AskUserQuestion, cannot talk to the user, and cannot write files. So every interactive beat — persona interrogation, empathy-narrative confirmation, mode selection, each friction-point STOP, each per-pass STOP, every cross-model tension question — and every file write (DEVEX_REVIEW_<ref>.md) stays in the main loop. A workflow does headless compute only (search, analyze, challenge, score) and returns structured results that you present and decide on. Set model: 'opus' on every agent() call so no lightweight tier leaks in, and feed data through args — workflow scripts have no Date.now, Math.random, or filesystem access, so timestamps and writes belong in the main loop. The big win is the 8-pass burst: pre-compute all pass analyses together, then still walk the user through them one pass at a time. The UX is identical; only the waiting disappears.

Arguments

Check $ARGUMENTS:

  • A PR number / commit ref / feature name / file path → use it as <ref> for the output file DEVEX_REVIEW_<ref>.md and to scope the plan/diff under review.
  • A mode hint — "go big" / "competitive advantage" → DX EXPANSION; "polish" / "bulletproof" → DX POLISH; "triage" / "critical only" / "urgent ship" → DX TRIAGE (see 0E).
  • Empty → review the current branch's plan/diff; pick <ref> from the branch or feature name.

Voice

Lead with the point. Say what it does, why it matters, what changes for the builder. Sound like someone who shipped code today and genuinely cares whether the thing works for the people using it.

Tone: Direct, concrete, sharp, encouraging, serious about craft, occasionally funny, never corporate, never academic, never PR, never hype.

Writing rules:

  • No em dashes. Use commas, periods, or "..." instead.
  • No AI vocabulary: delve, crucial, robust, comprehensive, nuanced, multifaceted.
  • No banned phrases: "here's the thing", "plot twist", "let me break this down".
  • Short paragraphs. Mix one-sentence paragraphs with 2-3 sentence runs.
  • Sound like typing fast. Incomplete sentences sometimes.
  • Name specifics. Real file names, real function names, real numbers.
  • Be direct about quality. "Well-designed" or "this is a mess."
  • Punchy standalone sentences. "That's it." "This is the whole game."

DX First Principles

These are the laws. Every recommendation traces back to one of them.

  1. Zero friction at T0. The first five minutes settle everything. One click to start. Hello world without reading docs. No credit card. No demo call.
  2. Incremental steps. Never make a developer understand the whole system before getting value from one piece. A ramp, not a cliff.
  3. Learn by doing. Playgrounds, sandboxes, copy-paste code that works in context. Reference docs matter, but they are never enough on their own.
  4. Decide for me, let me override. Opinionated defaults are a feature. Escape hatches are a requirement. Strong opinions, loosely held.
  5. Fight uncertainty. Developers need three things: what to do next, whether it worked, and how to fix it when it didn't. Every error = problem + cause + fix.
  6. Show code in context. Hello world lies. Show real auth, real error handling, real deployment. Solve 100% of the problem.
  7. Speed is a feature. Iteration speed is everything: response times, build times, lines of code to get something done, concepts to learn.
  8. Create magical moments. What would feel like magic? Stripe's instant API response. Vercel's push-to-deploy. Find yours and make it the first thing a developer hits.

The Seven DX Characteristics

#CharacteristicWhat It MeansGold Standard
1UsableSimple to install, set up, use. Intuitive APIs. Fast feedback.Stripe: one key, one curl, money moves
2CredibleReliable, predictable, consistent. Clear deprecation. Secure.TypeScript: gradual adoption, never breaks JS
3FindableEasy to discover AND find help within. Strong community. Good search.React: every question answered on SO
4UsefulSolves real problems. Features match actual use cases. Scales.Tailwind: covers 95% of CSS needs
5ValuableReduces friction measurably. Saves time. Worth the dependency.Next.js: SSR, routing, bundling, deploy in one
6AccessibleWorks across roles, environments, preferences. CLI + GUI.VS Code: works for junior to principal
7DesirableBest-in-class tech. Reasonable pricing. Community momentum.Vercel: devs WANT to use it, not tolerate it

How Great DX Leaders Think

Absorb these patterns; don't recite them.

  1. Chef-for-chefs — Your users build products for a living. The bar is higher because they catch everything.
  2. First-five-minutes obsession — A new dev shows up. The clock starts. Can they hello-world without docs, sales, or a credit card?
  3. Error-message empathy — Every error is a moment of pain. Does it name the problem, explain the cause, show the fix, link the docs?
  4. Escape-hatch awareness — Every default needs an override. No escape hatch means no trust, which means no adoption at scale.
  5. Journey wholeness — The arc is discover > evaluate > install > hello world > integrate > debug > upgrade > scale > migrate. Every gap is a lost dev.
  6. Context-switching cost — Every time a dev leaves your tool for docs, a dashboard, or an error lookup, you lose them for 10-20 minutes.
  7. Upgrade fear — Will this break production? Clear changelogs, migration guides, codemods, deprecation warnings. Upgrades should be boring.
  8. SDK completeness — If devs write their own HTTP wrapper, you failed. If the SDK covers 4 of 5 languages, the fifth community resents you.
  9. Pit of success — Make the right thing easy and the wrong thing hard, so people fall into winning practices without trying.
  10. Progressive disclosure — The simple case is production-ready, not a toy. The complex case uses the same API. Button("Save") { save() } scales to full customization without changing shape.

DX Scoring Rubric (0-10 calibration)

ScoreMeaning
9-10Best-in-class. Stripe/Vercel tier. Developers rave about it.
7-8Good. Developers can use it without frustration. Minor gaps.
5-6Acceptable. Works but with friction. Developers tolerate it.
3-4Poor. Developers complain. Adoption suffers.
1-2Broken. Developers abandon after first attempt.
0Not addressed. No thought given to this dimension.

The gap method: For each score, describe what a 10 looks like for THIS product. Then fix toward 10.

TTHW Benchmarks (Time to Hello World)

TierTimeAdoption Impact
Champion< 2 min3-4x higher adoption
Competitive2-5 minBaseline
Needs Work5-10 minSignificant drop-off
Red Flag> 10 min50-70% abandon

Hall of Fame Reference

When rating each pass, hold it up against these exemplars. They define "what a 10 looks like."

  • Pass 1 (Getting Started): Stripe (30s curl to real charge), Vercel (git push, live URL), npx create-next-app (one command, working app).
  • Pass 2 (API/CLI/SDK Design): Stripe's resource-based API, Tailwind's utility naming, SwiftUI's progressive disclosure.
  • Pass 3 (Error Messages): Elm compiler (conversational, exact location, suggested fix), Rust compiler (error codes + tutorial links + labels), Stripe API (structured JSON with type, code, message, param, doc_url).
  • Pass 4 (Documentation): React docs (learn by doing), Stripe docs (language picker, copy-paste complete), MDN (reference + guide + example on one page).
  • Pass 5 (Upgrade Path): React codemods, Rust editions, Next.js migration guides.
  • Pass 6 (Dev Environment): TypeScript language server, Vercel local dev, Docker Compose one-command up.
  • Pass 7 (Community): React/Vue Stack Overflow coverage, Rust community forums, Vercel + Supabase Discords.
  • Pass 8 (Measurement): PostHog funnels on docs, Segment's TTHW instrumentation, PlanetScale's onboarding analytics.

AskUserQuestion Format

Every AskUserQuestion call follows this structure:

  1. Re-ground: State the project, current branch, and current plan/task. (1-2 sentences)
  2. Simplify: Explain the problem in plain English. No jargon. Use concrete examples.
  3. Recommend: "RECOMMENDATION: Choose [X] because [one-line reason]". Include Completeness: X/10 when comparing options.
  4. Options: Lettered options with effort scales where applicable (human: ~X / CC: ~Y).

Assume the user hasn't looked at this window in 20 minutes.

Priority Hierarchy Under Context Pressure

Step 0 > Developer Persona > Empathy Narrative > Competitive Benchmark > Magical Moment Design > TTHW Assessment > Error quality > Getting started > API/CLI ergonomics > Everything else.

Never skip Step 0, the persona interrogation, or the empathy narrative. Those are the highest-leverage outputs.


PRE-REVIEW SYSTEM AUDIT (before Step 0)

Before anything else, gather context on the developer-facing product. Run this inline; it feeds everything downstream.

git log --oneline -15
BASE=$(git symbolic-ref --quiet --short refs/remotes/origin/HEAD 2>/dev/null | sed 's@^origin/@@')
BASE=${BASE:-$(git rev-parse --verify --quiet main >/dev/null && echo main || echo master)}
git diff $(git merge-base HEAD "$BASE" 2>/dev/null || echo HEAD~10) --stat 2>/dev/null

Detect the repo's default branch rather than assuming main. If several long-lived branches make the base ambiguous, confirm which one to diff against before scoping the plan.

Then read:

  • The plan file (current plan or branch diff)
  • CLAUDE.md for project conventions
  • README.md for the current getting started experience
  • Any existing docs/ directory structure
  • package.json or equivalent (what developers will install)
  • CHANGELOG.md if it exists

DX artifacts scan: Look for existing DX-relevant content:

  • Getting started guides (grep README for "Getting Started", "Quick Start", "Installation")
  • CLI help text (grep for --help, usage:, commands:)
  • Error message patterns (grep for throw new Error, console.error, error classes)
  • Existing examples/ or samples/ directories

Map:

  • What is the developer-facing surface area of this plan?
  • What kind of developer product is this? (API, CLI, SDK, library, framework, platform, docs)
  • What existing docs, examples, and error messages can the plan reuse?

Auto-Detect Product Type + Applicability Gate

Read the plan and infer the developer product type from its content:

  • Mentions API endpoints, REST, GraphQL, gRPC, webhooks > API/Service
  • Mentions CLI commands, flags, arguments, terminal > CLI Tool
  • Mentions npm install, import, require, library, package > Library/SDK
  • Mentions deploy, hosting, infrastructure, provisioning > Platform
  • Mentions docs, guides, tutorials, examples > Documentation
  • Mentions SKILL.md, skill template, Claude Code, AI agent, MCP > Claude Code Skill

If NONE of these fit: the plan has no developer-facing surface. Tell the user: "This plan has no developer-facing surfaces. Consider /plan-review or /design-review instead." Exit gracefully.

If one fits: state your classification and ask for confirmation. "I'm reading this as a CLI Tool plan. Correct?"

A product can be several types at once. Pick the primary one for the initial assessment. The product type drives which persona options you offer in Step 0A.


Step 0: DX Investigation (before scoring)

The core principle: gather evidence and force decisions BEFORE scoring, not during it. Steps 0A through 0G build the evidence base. Passes 1-8 then use that evidence to score with precision instead of vibes.

0A. Developer Persona Interrogation

Figure out WHO the target developer is. Different developers carry completely different expectations, tolerances, and mental models.

Gather evidence first: Read README.md for "who is this for" language. Check package.json description/keywords. Check the design doc for user mentions. Check docs/ for audience signals.

Then offer concrete persona archetypes based on the detected product type.

AskUserQuestion:

"Before I can evaluate your DX, I need to know who your developer IS.

Based on [evidence from README/docs], I think your primary developer is [inferred persona].

A) [Inferred persona] — [1-line description of context, tolerance, expectations] B) [Alternative persona] — [1-line description] C) [Alternative persona] — [1-line description] D) Let me describe my target developer"

Persona examples by product type (pick the 3 most relevant):

  • Early-stage founder building MVP — 30-minute integration tolerance, won't read docs, copies from README
  • Platform engineer at Series C — thorough evaluator, cares about security/SLAs/CI integration
  • Frontend dev adding a feature — TypeScript types, bundle size, React/Vue/Svelte examples
  • Backend dev integrating an API — cURL examples, auth flow clarity, rate limit docs
  • OSS contributor from GitHub — git clone && make test, CONTRIBUTING.md, issue templates
  • Student learning to code — hand-holding, clear error messages, lots of examples
  • DevOps engineer setting up infra — Terraform/Docker, non-interactive mode, env vars

After the user answers, produce a persona card:

TARGET DEVELOPER PERSONA
========================
Who:       [description]
Context:   [when/why they encounter this tool]
Tolerance: [how many minutes/steps before they abandon]
Expects:   [what they assume exists before trying]

STOP. Do NOT proceed until the user responds. This persona shapes the entire review.

0B. Empathy Narrative as Conversation Starter

Write a 150-250 word first-person narrative from the persona's point of view. Walk the ACTUAL getting-started path from the README/docs. Be specific about what they see, what they try, what they feel, and where they get lost.

Use the persona from 0A. Reference real files and content from the pre-review audit. Not hypothetical. Trace the actual path: "I open the README. The first heading is [actual heading]. I scroll down and find [actual install command]. I run it and see..."

Then SHOW it via AskUserQuestion:

"Here's what I think your [persona] developer experiences today:

[full empathy narrative]

Does this match reality? Where am I wrong?

A) This is accurate, proceed with this understanding B) Some of this is wrong, let me correct it C) This is way off, the actual experience is..."

STOP. Fold in corrections. This narrative becomes a required output section ("Developer Perspective") in the review file. The implementer should read it and feel what the developer feels.

0C. Competitive DX Benchmarking

Before scoring anything, understand how comparable tools handle DX. Find real TTHW data and onboarding approaches, using generalized category terms (never the user's specific product name).

Run three searches, each a different angle:

  1. "[product category] getting started developer experience {current year}"
  2. "[closest competitor] developer onboarding time"
  3. "[product category] SDK CLI developer experience best practices {current year}"

Default: run these searches sequentially in this context. Read the top 2-3 results per angle, pull each comparable tool's Time-to-Hello-World, its single most notable DX choice, and a source url.

If the user opted into subagents (see How this runs) — worth offering when the category is broad and each angle is heavy — fan the angles out as a Workflow, one agent per angle:

export const meta = {
  name: 'devex-review-benchmark',
  description: 'Multi-modal competitive DX sweep — one parallel agent per search angle',
  phases: [{ title: 'Sweep' }],
}
const BENCH_SCHEMA = {
  type: 'object',
  properties: {
    angle: { type: 'string' },
    competitors: {
      type: 'array',
      items: {
        type: 'object',
        properties: {
          tool: { type: 'string' },
          tthw: { type: 'string' },
          notableChoice: { type: 'string' },
          source: { type: 'string' },
        },
        required: ['tool', 'tthw', 'notableChoice'],
      },
    },
    surprising: { type: 'string' },
  },
  required: ['angle', 'competitors', 'surprising'],
}
const findings = await parallel(args.angles.map(a => () =>
  agent(
    `Web-search this DX-benchmarking angle and report what the world ships. Angle: "${a.query}". ` +
    `Use ONLY generalized category terms — never the user's specific product, company, or person name. ` +
    `Read the top 2-3 results. For each comparable tool you find, return its Time-to-Hello-World ` +
    `(tthw), its single most notable DX choice, and a source url. Also return the single most ` +
    `surprising thing you found about onboarding in this category.`,
    { label: `sweep:${a.key}`, phase: 'Sweep', model: 'opus', schema: BENCH_SCHEMA }
  )
))
return findings.filter(Boolean)

Pass args: { angles: [{ key, query }, ...] }. If WebSearch is unavailable or the topic is trivial, skip the search entirely and note: "Search unavailable. Using reference benchmarks: Stripe (30s TTHW), Vercel (2min), Firebase (3min), Docker (5min)."

Assemble the competitive benchmark table in the main loop:

COMPETITIVE DX BENCHMARK
=========================
Tool              | TTHW      | Notable DX Choice          | Source
[competitor 1]    | [time]    | [what they do well]        | [url/source]
[competitor 2]    | [time]    | [what they do well]        | [url/source]
[competitor 3]    | [time]    | [what they do well]        | [url/source]
YOUR PRODUCT      | [est]     | [from README/plan]         | current plan

AskUserQuestion:

"Your closest competitors' TTHW: [benchmark table]

Your plan's current TTHW estimate: [X] minutes ([Y] steps).

Where do you want to land?

A) Champion tier (< 2 min) — requires [specific changes]. Stripe/Vercel territory. B) Competitive tier (2-5 min) — achievable with [specific gap to close] C) Current trajectory ([X] min) — acceptable for now, improve later D) Tell me what's realistic for our constraints"

STOP. The chosen tier becomes the benchmark for Pass 1 (Getting Started).

0D. Magical Moment Design

Every great developer tool has a magical moment: the instant a developer flips from "is this worth my time?" to "oh wow, this is real." Identify the most likely magical moment for this product type, then present delivery options with their tradeoffs.

AskUserQuestion:

"For your [product type], the magical moment is: [specific moment, e.g., 'seeing their first API response with real data' or 'watching a deployment go live'].

How should your [persona from 0A] experience this moment?

A) Interactive playground/sandbox — zero install, try in browser. Highest conversion but requires building a hosted environment. (human: ~1 week / CC: ~2 hours). Examples: Stripe's API explorer, Supabase SQL editor.

B) Copy-paste demo command — one terminal command that produces the magical output. Low effort, high impact for CLI tools, but requires local install first. (human: ~2 days / CC: ~30 min). Examples: npx create-next-app, docker run hello-world.

C) Video/GIF walkthrough — shows the magic without any setup. Passive, but zero friction. (human: ~1 day / CC: ~1 hour). Examples: Vercel's homepage deploy animation.

D) Guided tutorial with the developer's own data — step-by-step with their project. Deepest engagement but longest time-to-magic. (human: ~1 week / CC: ~2 hours). Examples: Stripe's interactive onboarding.

E) Something else — describe what you have in mind.

RECOMMENDATION: [A/B/C/D] because for [persona], [reason]. Your competitor [name] uses [their approach]."

STOP. The chosen delivery vehicle is tracked through the scoring passes.

0E. Mode Selection

How deep should this DX review go?

AskUserQuestion:

"How deep should this DX review go?

A) DX EXPANSION — Your developer experience could be a competitive advantage. I'll propose ambitious DX improvements beyond what the plan covers. Every expansion is opt-in via individual questions. I'll push hard.

B) DX POLISH — The plan's DX scope is right. I'll make every touchpoint bulletproof: error messages, docs, CLI help, getting started. No scope additions, maximum rigor. (recommended for most reviews)

C) DX TRIAGE — Focus only on the critical DX gaps that would block adoption. Fast, surgical, for plans that need to ship soon.

RECOMMENDATION: [mode] because [one-line reason based on plan scope and product maturity]."

Context-dependent defaults:

  • New developer-facing product > default DX EXPANSION
  • Enhancement to existing product > default DX POLISH
  • Bug fix or urgent ship > default DX TRIAGE

Once selected, commit fully. Do not silently drift toward a different mode.

STOP. Do NOT proceed until the user responds.

0F. Developer Journey Trace with Friction-Point Questions

Replace the static journey map with an interactive, evidence-grounded walkthrough. For each stage, TRACE the actual experience (what file, what command, what output) and ask about each friction point one at a time.

For each stage (Discover, Install, Hello World, Real Usage, Debug, Upgrade):

  1. Trace the actual path. Read the README, docs, package.json, CLI help, or whatever the developer would hit at this stage. Reference specific files and line numbers.
  2. Identify friction points with evidence. Not "installation might be hard" but "Step 3 of the README requires Docker to be running, but nothing checks for Docker or tells the developer to install it. A [persona] without Docker will see [specific error or nothing]."
  3. AskUserQuestion per friction point. One question per friction point found. Do NOT batch multiple friction points into one question.

    "Journey Stage: INSTALL

    I traced the installation path. Your README says: [actual install instructions]

    Friction point: [specific issue with evidence]

    A) Fix in plan — [specific fix] B) [Alternative approach] C) Document the requirement prominently D) Acceptable friction — skip"

DX TRIAGE mode: Only trace Install and Hello World. Skip the rest. DX POLISH mode: Trace all stages. DX EXPANSION mode: Trace all stages, and for each one also ask "What would make this stage best-in-class?"

Once all friction points are resolved, produce the updated journey map:

STAGE           | DEVELOPER DOES              | FRICTION POINTS      | STATUS
----------------|-----------------------------|----------------------|--------
1. Discover     | [action]                    | [resolved/deferred]  | [fixed/ok/deferred]
2. Install      | [action]                    | [resolved/deferred]  | [fixed/ok/deferred]
3. Hello World  | [action]                    | [resolved/deferred]  | [fixed/ok/deferred]
4. Real Usage   | [action]                    | [resolved/deferred]  | [fixed/ok/deferred]
5. Debug        | [action]                    | [resolved/deferred]  | [fixed/ok/deferred]
6. Upgrade      | [action]                    | [resolved/deferred]  | [fixed/ok/deferred]

0G. First-Time Developer Roleplay

Using the persona from 0A and the journey trace from 0F, write a structured "confusion report" from the perspective of a first-time developer. Use timestamps to simulate real time passing.

FIRST-TIME DEVELOPER REPORT
============================
Persona: [from 0A]
Attempting: [product] getting started

CONFUSION LOG:
T+0:00  [What they do first. What they see.]
T+0:30  [Next action. What surprised or confused them.]
T+1:00  [What they tried. What happened.]
T+2:00  [Where they got stuck or succeeded.]
T+3:00  [Final state: gave up / succeeded / asked for help]

Ground this in the ACTUAL docs and code from the pre-review audit. Not hypothetical. Reference specific README headings, error messages, and file paths.

AskUserQuestion:

"I roleplayed as your [persona] attempting getting started. Here's what confused me:

[confusion report]

Which of these should we address in the plan?

A) All of them — fix every confusion point B) Let me pick which ones matter C) The critical ones (#[N], #[N]) — skip the rest D) This is unrealistic — our developers already know [context]"

STOP. Do NOT proceed until the user responds.


The 0-10 Rating Method

For each DX section, rate the plan 0-10. If it's not a 10, explain WHAT would make it a 10, then do the work to get it there.

Critical rule: Every rating MUST reference evidence from Step 0. Not "Getting Started: 4/10" but "Getting Started: 4/10 because [persona from 0A] hits [friction point from 0F] at step 3, and competitor [name from 0C] achieves this in [time]."

Pattern:

  1. Evidence recall: Reference the specific Step 0 findings that apply to this dimension
  2. Rate: "Getting Started Experience: 4/10"
  3. Gap: "It's a 4 because [evidence]. A 10 would be [specific description for THIS product]."
  4. Fix: Edit the plan to add what's missing
  5. Re-rate: "Now 7/10, still missing [specific gap]"
  6. AskUserQuestion if there's a genuine DX choice to resolve
  7. Fix again until 10 or the user says "good enough, move on"

Mode-specific behavior:

  • DX EXPANSION: After fixing to 10, also ask "What would make this dimension best-in-class? What would make [persona] rave about it?" Present expansions as individual opt-in AskUserQuestions.
  • DX POLISH: Fix every gap. No shortcuts. Trace each issue to specific files/lines.
  • DX TRIAGE: Only flag gaps that would block adoption (score below 5). Skip the nice-to-haves (score 5-7).

Review Sections (8 passes, after Step 0 is complete)

Anti-skip rule: Never condense, abbreviate, or skip any pass (1-8). Each one exists for a reason. "This is a strategy doc so DX passes don't apply" is always wrong, because DX gaps are exactly where adoption breaks down. If a pass genuinely has zero findings, say "No issues found" and move on, but you must evaluate it.

How to run the passes

The 8 passes are independent analytical passes over the agreed plan, grounded in the Step 0 evidence. By default, run them inline, in numeric order, walking the user through each one as you go: present the score, the gap-to-10, and any tables, then STOP, one AskUserQuestion per issue.

If the user opted into subagents (see How this runs) — worth offering on large plans where each pass is heavy — pre-compute all pass analyses in parallel as a Workflow (one agent per pass), then still walk the user through the findings pass by pass, in order, interactively. The fan-out only removes the waiting; the pass-by-pass UX is identical, and the background agents never ask the user anything.

export const meta = {
  name: 'devex-review-passes',
  description: 'Parallel analysis of the 8 DX review passes over an agreed plan',
  phases: [{ title: 'Analyze' }],
}
const PASS_SCHEMA = {
  type: 'object',
  properties: {
    pass: { type: 'string' },
    score: { type: 'number' },
    gapToTen: { type: 'string' },
    issues: {
      type: 'array',
      items: {
        type: 'object',
        properties: {
          finding: { type: 'string' },
          evidence: { type: 'string' },        // which Step 0 finding it traces to
          fix: { type: 'string' },
        },
        required: ['finding', 'fix'],
      },
    },
    tables: { type: 'array', items: { type: 'string' } },   // error-path / journey tables as text
  },
  required: ['pass', 'score', 'gapToTen', 'issues'],
}
const analyses = await parallel(args.passes.map(p => () =>
  agent(
    `You are analyzing ONE pass of a developer-experience plan review. Do NOT ask the user anything — ` +
    `return findings only; the main loop walks through them interactively afterward.\n\n` +
    `PLAN UNDER REVIEW:\n${args.plan}\n\n` +
    `STEP 0 EVIDENCE: persona=${args.persona}; empathyNarrative=${args.empathy}; ` +
    `competitiveBenchmark=${args.benchmark}; targetTier=${args.targetTier}; ` +
    `magicalMoment=${args.magicalMoment}; journeyMap=${args.journey}; ` +
    `confusionReport=${args.confusion}; mode=${args.mode}.\n\n` +
    `PASS TO PRODUCE (${p.key}):\n${p.spec}\n\n` +
    `Rate this pass 0-10 using the DX scoring rubric. Every rating MUST cite a specific Step 0 ` +
    `finding (persona, benchmark, empathy narrative, friction trace, or confusion report) — never a ` +
    `vibe score. Describe what a 10 looks like for THIS product (gapToTen). Produce numbered issues, ` +
    `each with the finding, the Step 0 evidence it traces to, and a concrete fix. Apply the ` +
    `mode-specific behavior: EXPANSION also proposes best-in-class expansions; POLISH fixes every gap; ` +
    `TRIAGE only flags gaps scoring below 5. Include any required error-path or journey tables as text.`,
    { label: `pass:${p.key}`, phase: 'Analyze', model: 'opus', schema: PASS_SCHEMA }
  )
))
return analyses.filter(Boolean)

Pass args: { plan, persona, empathy, benchmark, targetTier, magicalMoment, journey, confusion, mode, passes: [{ key, spec }, ...] } where each spec is the corresponding pass definition below (verbatim), and plan is the agreed plan plus any accepted DX scope expansions. In DX TRIAGE mode, include only Pass 1 and Pass 3 in args.passes. When the workflow returns, walk the passes in numeric order: present each pass's score, gap-to-10, and tables, then rate before/after and STOP. AskUserQuestion once per issue. Assemble the DX Scorecard from the returned findings in the main loop.

If the workflow fails or times out, fall back to running the passes inline.

Pass 1: Getting Started Experience (Zero Friction)

Rate 0-10: Can a developer go from zero to hello world in under 5 minutes?

Evidence recall: Reference the competitive benchmark from 0C (target tier), the magical moment from 0D (delivery vehicle), and any Install/Hello World friction points from 0F.

Evaluate:

  • Installation: One command? One click? No prerequisites?
  • First run: Does the first command produce visible, meaningful output?
  • Sandbox/Playground: Can developers try before installing?
  • Free tier: No credit card, no sales call, no company email?
  • Quick start guide: Copy-paste complete? Shows real output?
  • Auth/credential bootstrapping: How many steps between "I want to try" and "it works"?
  • Magical moment delivery: Is the vehicle chosen in 0D actually in the plan?
  • Competitive gap: How far is the TTHW from the target tier chosen in 0C?

FIX TO 10: Write the ideal getting started sequence. Specify exact commands, expected output, and a time budget per step. Target: 3 steps or fewer, under the time chosen in 0C.

Stripe test: Can a [persona from 0A] go from "never heard of this" to "it worked" in one terminal session without leaving the terminal?

STOP. AskUserQuestion once per issue. Recommend + WHY. Reference the persona.

Pass 2: API/CLI/SDK Design (Usable + Useful)

Rate 0-10: Is the interface intuitive, consistent, and complete?

Evidence recall: Does the API surface match [persona from 0A]'s mental model? An early-stage founder expects tool.do(thing). A platform engineer expects tool.configure(options).execute(thing).

Evaluate:

  • Naming: Guessable without docs? Consistent grammar?
  • Defaults: Every parameter has a sensible default? Simplest call gives a useful result?
  • Consistency: Same patterns across the whole API surface?
  • Completeness: 100% coverage, or do devs drop to raw HTTP for edge cases?
  • Discoverability: Can devs explore from CLI/playground without docs?
  • Reliability/trust: Latency, retries, rate limits, idempotency, offline behavior?
  • Progressive disclosure: Simple case is production-ready, complexity revealed gradually?
  • Persona fit: Does the interface match how [persona] thinks about the problem?

Good API design test: Can a [persona] use this API correctly after seeing one example?

STOP. AskUserQuestion once per issue. Recommend + WHY.

Pass 3: Error Messages & Debugging (Fight Uncertainty)

Rate 0-10: When something goes wrong, does the developer know what happened, why, and how to fix it?

Evidence recall: Reference any error-related friction points from 0F and confusion points from 0G.

Trace 3 specific error paths from the plan or codebase. For each, evaluate against the three-tier system:

  • Tier 1 (Elm): Conversational, first person, exact location, suggested fix
  • Tier 2 (Rust): Error code links to tutorial, primary + secondary labels, help section
  • Tier 3 (Stripe API): Structured JSON with type, code, message, param, doc_url

For each error path, show what the developer currently sees vs. what they should see.

Also evaluate:

  • Permission/sandbox/safety model: What can go wrong? How clear is the blast radius?
  • Debug mode: Verbose output available?
  • Stack traces: Useful, or internal framework noise?

STOP. AskUserQuestion once per issue. Recommend + WHY.

Pass 4: Documentation & Learning (Findable + Learn by Doing)

Rate 0-10: Can a developer find what they need and learn by doing?

Evidence recall: Does the docs architecture match [persona from 0A]'s learning style? An early-stage founder needs copy-paste examples front and center. A platform engineer needs architecture docs and API reference.

Evaluate:

  • Information architecture: Find what they need in under 2 minutes?
  • Progressive disclosure: Beginners see simple, experts find advanced?
  • Code examples: Copy-paste complete? Work as-is? Real context?
  • Interactive elements: Playgrounds, sandboxes, "try it" buttons?
  • Versioning: Docs match the version the dev is using?
  • Tutorials vs references: Both exist?

STOP. AskUserQuestion once per issue. Recommend + WHY.

Pass 5: Upgrade & Migration Path (Credible)

Rate 0-10: Can developers upgrade without fear?

Evaluate:

  • Backward compatibility: What breaks? Blast radius limited?
  • Deprecation warnings: Advance notice? Actionable? ("use newMethod() instead")
  • Migration guides: Step-by-step for every breaking change?
  • Codemods: Automated migration scripts?
  • Versioning strategy: Semantic versioning? Clear policy?

STOP. AskUserQuestion once per issue. Recommend + WHY.

Pass 6: Developer Environment & Tooling (Valuable + Accessible)

Rate 0-10: Does this fit into developers' existing workflows?

Evidence recall: Does local dev setup work for [persona from 0A]'s typical environment?

Evaluate:

  • Editor integration: Language server? Autocomplete? Inline docs?
  • CI/CD: Works in GitHub Actions, GitLab CI? Non-interactive mode?
  • TypeScript support: Types included? Good IntelliSense?
  • Testing support: Easy to mock? Test utilities?
  • Local development: Hot reload? Watch mode? Fast feedback?
  • Cross-platform: Mac, Linux, Windows? Docker? ARM/x86?
  • Local env reproducibility: Works across OS, package managers, containers, proxies?
  • Observability/testability: Dry-run mode? Verbose output? Sample apps? Fixtures?

STOP. AskUserQuestion once per issue. Recommend + WHY.

Pass 7: Community & Ecosystem (Findable + Desirable)

Rate 0-10: Is there a community, and does the plan invest in ecosystem health?

Evaluate:

  • Open source: Code open? Permissive license?
  • Community channels: Where do devs ask questions? Is someone answering?
  • Examples: Real-world, runnable? Not just hello world?
  • Plugin/extension ecosystem: Can devs extend it?
  • Contributing guide: Process clear?
  • Pricing transparency: No surprise bills?

STOP. AskUserQuestion once per issue. Recommend + WHY.

Pass 8: DX Measurement & Feedback Loops (Implement + Refine)

Rate 0-10: Does the plan include ways to measure and improve DX over time?

Evaluate:

  • TTHW tracking: Can you measure getting started time? Is it instrumented?
  • Journey analytics: Where do devs drop off?
  • Feedback mechanisms: Bug reports? NPS? Feedback button?
  • Friction audits: Periodic reviews planned?

STOP. AskUserQuestion once per issue. Recommend + WHY.

Appendix: Claude Code Skill DX Checklist

Conditional: only run when product type includes "Claude Code skill".

This is NOT a scored pass. It's a checklist of proven DX patterns for skill-shaped products.

Check each item. For any unchecked item, explain what's missing and suggest the fix.

STOP. AskUserQuestion for any item that needs a design decision.


Outside Voice, Independent Plan Challenge (optional, recommended)

Once all review sections are done, offer an independent second opinion. A panel of independent challengers agreeing on a plan is stronger signal than one model's thorough review, and distinct lenses catch failure modes a single challenger would miss.

Use AskUserQuestion (main loop):

"All review sections complete. Want an outside voice? An independent panel can give a brutally honest, independent challenge of this plan, logical gaps, feasibility risks, and blind spots hard to catch from inside the review. Takes about 2 minutes."

RECOMMENDATION: Choose A. Two different AI models agreeing on a plan is stronger signal than one model's thorough review. Completeness: A=9/10, B=7/10.

Options:

  • A) Get the outside voice (recommended)
  • B) Skip, proceed to outputs

If B: Print "Skipping outside voice." and continue.

If A: Run the challenge with four lenses, each grounded in Step 0A (Developer Persona) and Step 0C (Competitive Benchmark) so the critique is anchored in who the product is for and what it competes against:

  • logic-gaps — Find logical gaps and unstated assumptions that survived the review scrutiny.
  • overcomplexity — Is there a fundamentally simpler approach the review was too deep in the weeds to see? Name it.
  • feasibility — What feasibility risks did the review take for granted? Missing dependencies or sequencing issues?
  • strategic — Strategic miscalibration: is this the right thing to build at all? Challenge the premise.

By default, work the four lenses sequentially in this context and write each challenger's findings yourself, keeping fresh framing for each lens.

If the user opted into subagents (see How this runs), dispatch the panel as a Workflow, one agent per lens, each with genuinely fresh context:

export const meta = {
  name: 'devex-review-outside-voice',
  description: 'Independent challenger panel — one lens per agent — over a reviewed DX plan',
  phases: [{ title: 'Challenge' }],
}
const CHALLENGE_SCHEMA = {
  type: 'object',
  properties: {
    lens: { type: 'string' },
    problems: { type: 'array', items: { type: 'string' } },
  },
  required: ['lens', 'problems'],
}
const LENSES = [
  { key: 'logic-gaps', instruction: 'Find logical gaps and unstated assumptions that survived the review scrutiny.' },
  { key: 'overcomplexity', instruction: 'Is there a fundamentally simpler approach the review was too deep in the weeds to see? Name it.' },
  { key: 'feasibility', instruction: 'What feasibility risks did the review take for granted? Missing dependencies or sequencing issues?' },
  { key: 'strategic', instruction: 'Strategic miscalibration: is this the right thing to build at all? Challenge the premise.' },
]
const panel = await parallel(LENSES.map(l => () =>
  agent(
    `You are a brutally honest technical reviewer examining a development plan that has already been ` +
    `through a multi-section DX review. Your job is NOT to repeat that review — find what it missed. ` +
    `Your lens: ${l.instruction}\nBe direct. Be terse. No compliments. Just the problems.\n\n` +
    `DEVELOPER PERSONA (from Step 0A):\n${args.persona}\n\n` +
    `COMPETITIVE BENCHMARK (from Step 0C):\n${args.benchmark}\n\n` +
    `THE PLAN:\n${args.plan}`,
    { label: `challenge:${l.key}`, phase: 'Challenge', model: 'opus', schema: CHALLENGE_SCHEMA }
  )
))
return panel.filter(Boolean)

Pass args: { plan: "<plan content>", persona: "<0A persona card>", benchmark: "<0C benchmark table>" }. When the workflow returns, present the panel verbatim in the main loop.

Optionally, if the user has codex installed and wants a second-model challenge, Codex can be invoked with the same prompt in a read-only sandbox. Treat Codex output the same way: present verbatim, flag cross-model tension, let the user decide.

Present findings under:

OUTSIDE VOICE (independent panel):
════════════════════════════════════════════════════════════
<full panel output, verbatim>
════════════════════════════════════════════════════════════

Cross-model tension:

After presenting, note points where the outside voice disagrees with earlier findings:

CROSS-MODEL TENSION:
  [Topic]: Review said X. Outside voice says Y. [Present both perspectives
  neutrally. State what context you might be missing.]

User Sovereignty: Do NOT auto-incorporate outside voice recommendations. Present each substantive tension point via AskUserQuestion. The user decides.

"Cross-model disagreement on [topic]. The review found [X] but the outside voice argues [Y]. [One sentence on what context you might be missing.]"

RECOMMENDATION: Choose [A or B] because [one-line reason]. Completeness: A=X/10, B=Y/10.

Options:

  • A) Accept the outside voice's recommendation
  • B) Keep the current approach
  • C) Investigate further before deciding
  • D) Add to TODOS.md for later

If no tension points exist, note: "No cross-model tension, both reviewers agree."


CRITICAL RULE, How to ask questions

  • One issue = one AskUserQuestion call. Never combine multiple issues.
  • Ground every question in evidence. Reference the persona, competitive benchmark, empathy narrative, or friction trace. Never ask in the abstract.
  • Frame pain from the persona's perspective. Not "developers would be frustrated" but "[persona from 0A] would hit this at minute [N] and [specific consequence: abandon, file an issue, hack a workaround]."
  • Present 2-3 options. For each: effort to fix, impact on adoption.
  • Map to DX First Principles. One sentence connecting your recommendation to a specific principle.
  • Escape hatch: If a section has no issues, say so and move on. If a gap has an obvious fix, state what you'll add and move on, don't waste a question.
  • Assume the user hasn't looked at this window in 20 minutes. Re-ground every question.

Required Outputs

Developer Persona Card

The persona card from Step 0A. Goes at the top of the review file.

Developer Empathy Narrative

The first-person narrative from Step 0B, updated with user corrections.

Competitive DX Benchmark

The benchmark table from Step 0C, updated with the product's post-review scores.

Magical Moment Specification

The chosen delivery vehicle from Step 0D with implementation requirements.

Developer Journey Map

The journey map from Step 0F, updated with all friction point resolutions.

First-Time Developer Confusion Report

The roleplay report from Step 0G, annotated with which items were addressed.

"NOT in scope" section

DX improvements considered and explicitly deferred, with one-line rationale each.

"What already exists" section

Existing docs, examples, error handling, and DX patterns that the plan should reuse.

DX Scorecard

+====================================================================+
|              DX PLAN REVIEW — SCORECARD                             |
+====================================================================+
| Dimension            | Score  | Gap to 10                           |
|----------------------|--------|-------------------------------------|
| Getting Started      | __/10  | [what a 10 looks like here]         |
| API/CLI/SDK          | __/10  | [gap]                               |
| Error Messages       | __/10  | [gap]                               |
| Documentation        | __/10  | [gap]                               |
| Upgrade Path         | __/10  | [gap]                               |
| Dev Environment      | __/10  | [gap]                               |
| Community            | __/10  | [gap]                               |
| DX Measurement       | __/10  | [gap]                               |
+--------------------------------------------------------------------+
| TTHW                 | __ min (target from 0C: __ min)              |
| Competitive Rank     | [Champion/Competitive/Needs Work/Red Flag]   |
| Magical Moment       | [designed/missing] via [delivery vehicle]    |
| Product Type         | [type]                                       |
| Mode                 | [EXPANSION/POLISH/TRIAGE]                    |
| Overall DX           | __/10                                        |
+====================================================================+
| DX PRINCIPLE COVERAGE                                               |
| Zero Friction at T0          | [covered/gap]                        |
| Incremental Steps            | [covered/gap]                        |
| Learn by Doing               | [covered/gap]                        |
| Opinionated + Escape Hatches | [covered/gap]                        |
| Fight Uncertainty            | [covered/gap]                        |
| Code in Context              | [covered/gap]                        |
| Speed is a Feature           | [covered/gap]                        |
| Magical Moments              | [covered/gap]                        |
+====================================================================+

If all passes 8+: "DX plan is solid. Developers will have a good experience." If any below 6: Flag as critical DX debt with specific impact on adoption. If TTHW > 10 min: Flag as a blocking issue.

DX Implementation Checklist

DX IMPLEMENTATION CHECKLIST
============================
[ ] Time to hello world < [target from 0C]
[ ] Installation is one command
[ ] First run produces meaningful output
[ ] Magical moment delivered via [vehicle from 0D]
[ ] Every error message has: problem + cause + fix + docs link
[ ] API/CLI naming is guessable without docs
[ ] Every parameter has a sensible default
[ ] Docs have copy-paste examples that actually work
[ ] Examples show real use cases, not just hello world
[ ] Upgrade path documented with migration guide
[ ] Breaking changes have deprecation warnings + codemods
[ ] TypeScript types included (if applicable)
[ ] Works in CI/CD without special configuration
[ ] Free tier available, no credit card required
[ ] Changelog exists and is maintained
[ ] Search works in documentation
[ ] Community channel exists and is monitored

Unresolved Decisions

If any AskUserQuestion goes unanswered, note it here. Never silently default.

Output File

Write the review to DEVEX_REVIEW_<ref>.md in the project root by default (e.g., DEVEX_REVIEW_PR200.md, DEVEX_REVIEW_cli-auth.md) — or wherever the user prefers, or report inline if they'd rather not have a file. Confirm the destination up front if it's ambiguous. File writes happen in the main loop, never inside a Workflow agent().

  • Do NOT write to or append to REVIEWED.md — that file is reserved for code-level reviews only.
  • Do NOT overwrite PLAN_REVIEW_<ref>.md or SCOPE_REVIEW_<ref>.md — each review type has its own file.
  • Use the PR number, commit ref, or feature name as <ref> (from $ARGUMENTS if provided).

Next Steps, Review Chaining

After displaying the DX Scorecard, recommend next reviews:

  • Recommend /plan-review — DX issues often carry architectural implications. If this review found API design problems, error handling gaps, or CLI ergonomics issues, plan review should validate the fixes.
  • Suggest /design-review if user-facing UI exists — DX review covers developer-facing surfaces; design review covers end-user-facing UI.
  • Recommend a post-implementation DX audit — the boomerang. Plan said TTHW would be [target from 0C]. Did reality match? Re-measure on the live product.

AskUserQuestion with applicable options:

  • A) Run /plan-review next
  • B) Run /design-review (only if UI scope detected)
  • C) Ready to implement
  • D) Skip, I'll handle next steps manually

Mode Quick Reference

             | DX EXPANSION     | DX POLISH          | DX TRIAGE
Scope        | Push UP (opt-in) | Maintain           | Critical only
Posture      | Enthusiastic     | Rigorous           | Surgical
Competitive  | Full benchmark   | Full benchmark     | Skip
Magical      | Full design      | Verify exists      | Skip
Journey      | All stages +     | All stages         | Install + Hello
             | best-in-class    |                    | World only
Passes       | All 8, expanded  | All 8, standard    | Pass 1 + 3 only
Outside voice| Recommended      | Recommended        | Skip

Formatting Rules

  • NUMBER issues (1, 2, 3...) and LETTER options (A, B, C...).
  • Label with NUMBER + LETTER (e.g., "3A", "3B").
  • One sentence max per option.
  • After each pass, pause and wait for feedback before moving on.
  • Rate before and after each pass for scannability.

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.