{"id":"80e5d148-1549-4e0e-acb4-2140c6d97351","shortId":"6FvqFd","kind":"skill","title":"devex-review","tagline":"Live developer experience audit. Uses the browse tool to actually TEST the\ndeveloper experience: navigates docs, tries the getting started flow, times\nTTHW, screenshots error messages, evaluates CLI help text. Produces a DX\nscorecard with evidence. Compares against /plan-devex-re","description":"## Preamble\n\n```bash\neval \"$(~/.vibestack/bin/vibe-slug 2>/dev/null)\" 2>/dev/null || SLUG=\"unknown\"\n_LEARN_FILE=\"${VIBESTACK_HOME:-$HOME/.vibestack}/projects/${SLUG:-unknown}/learnings.jsonl\"\nif [ -f \"$_LEARN_FILE\" ]; then\n  _LEARN_COUNT=$(wc -l < \"$_LEARN_FILE\" 2>/dev/null | tr -d ' ')\n  echo \"LEARNINGS: $_LEARN_COUNT entries loaded\"\n  if [ \"$_LEARN_COUNT\" -gt 5 ] 2>/dev/null; then\n    ~/.vibestack/bin/vibe-learnings-search --limit 5 2>/dev/null || true\n  fi\nelse\n  echo \"LEARNINGS: none yet\"\nfi\n```\n\n## Step 0: Detect platform and base branch\n\nFirst, detect the git hosting platform from the remote URL:\n\n```bash\ngit remote get-url origin 2>/dev/null\n```\n\n- If the URL contains \"github.com\" → platform is **GitHub**\n- If the URL contains \"gitlab\" → platform is **GitLab**\n- Otherwise, check CLI availability:\n  - `gh auth status 2>/dev/null` succeeds → platform is **GitHub** (covers GitHub Enterprise)\n  - `glab auth status 2>/dev/null` succeeds → platform is **GitLab** (covers self-hosted)\n  - Neither → **unknown** (use git-native commands only)\n\nDetermine which branch this PR/MR targets, or the repo's default branch if no\nPR/MR exists. Use the result as \"the base branch\" in all subsequent steps.\n\n**If GitHub:**\n1. `gh pr view --json baseRefName -q .baseRefName` — if succeeds, use it\n2. `gh repo view --json defaultBranchRef -q .defaultBranchRef.name` — if succeeds, use it\n\n**If GitLab:**\n1. `glab mr view -F json 2>/dev/null` and extract the `target_branch` field — if succeeds, use it\n2. `glab repo view -F json 2>/dev/null` and extract the `default_branch` field — if succeeds, use it\n\n**Git-native fallback (if unknown platform, or CLI commands fail):**\n1. `git symbolic-ref refs/remotes/origin/HEAD 2>/dev/null | sed 's|refs/remotes/origin/||'`\n2. If that fails: `git rev-parse --verify origin/main 2>/dev/null` → use `main`\n3. If that fails: `git rev-parse --verify origin/master 2>/dev/null` → use `master`\n\nIf all fail, fall back to `main`.\n\nPrint the detected base branch name. In every subsequent `git diff`, `git log`,\n`git fetch`, `git merge`, and PR/MR creation command, substitute the detected\nbranch name wherever the instructions say \"the base branch\" or `<default>`.\n\n---\n\n## SETUP\n\n```bash\n# vibestack does not include a browse daemon.\necho \"BROWSE_NOT_AVAILABLE\"\n```\n\nIf `BROWSE_NOT_AVAILABLE`: skip all `$B` commands and use text-only fallbacks (curl, open, direct HTTP checks).\n\n## DX First Principles\n\nThese are the laws. Every recommendation traces back to one of these.\n\n1. **Zero friction at T0.** First five minutes decide everything. One click to start. Hello world without reading docs. No credit card. No demo call.\n2. **Incremental steps.** Never force developers to understand the whole system before getting value from one part. Gentle ramp, not cliff.\n3. **Learn by doing.** Playgrounds, sandboxes, copy-paste code that works in context. Reference docs are necessary but never sufficient.\n4. **Decide for me, let me override.** Opinionated defaults are features. Escape hatches are requirements. Strong opinions, loosely held.\n5. **Fight uncertainty.** Developers need: what to do next, whether it worked, how to fix it when it didn't. Every error = problem + cause + fix.\n6. **Show code in context.** Hello world is a lie. Show real auth, real error handling, real deployment. Solve 100% of the problem.\n7. **Speed is a feature.** Iteration speed is everything. Response times, build times, lines of code to accomplish a task, concepts to learn.\n8. **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 developers experience.\n\n## The Seven DX Characteristics\n\n| # | Characteristic | What It Means | Gold Standard |\n|---|---------------|---------------|---------------|\n| 1 | **Usable** | Simple to install, set up, use. Intuitive APIs. Fast feedback. | Stripe: one key, one curl, money moves |\n| 2 | **Credible** | Reliable, predictable, consistent. Clear deprecation. Secure. | TypeScript: gradual adoption, never breaks JS |\n| 3 | **Findable** | Easy to discover AND find help within. Strong community. Good search. | React: every question answered on SO |\n| 4 | **Useful** | Solves real problems. Features match actual use cases. Scales. | Tailwind: covers 95% of CSS needs |\n| 5 | **Valuable** | Reduces friction measurably. Saves time. Worth the dependency. | Next.js: SSR, routing, bundling, deploy in one |\n| 6 | **Accessible** | Works across roles, environments, preferences. CLI + GUI. | VS Code: works for junior to principal |\n| 7 | **Desirable** | Best-in-class tech. Reasonable pricing. Community momentum. | Vercel: devs WANT to use it, not tolerate it |\n\n## Cognitive Patterns — How Great DX Leaders Think\n\nInternalize these; don't enumerate them.\n\n1. **Chef-for-chefs** — Your users build products for a living. The bar is higher because they notice everything.\n2. **First five minutes obsession** — New dev arrives. Clock starts. Can they hello-world without docs, sales, or credit card?\n3. **Error message empathy** — Every error is pain. Does it identify the problem, explain the cause, show the fix, link to docs?\n4. **Escape hatch awareness** — Every default needs an override. No escape hatch = no trust = no adoption at scale.\n5. **Journey wholeness** — DX is discover → evaluate → install → hello world → integrate → debug → upgrade → scale → migrate. Every gap = a lost dev.\n6. **Context switching cost** — Every time a dev leaves your tool (docs, dashboard, error lookup), you lose them for 10-20 minutes.\n7. **Upgrade fear** — Will this break my production app? Clear changelogs, migration guides, codemods, deprecation warnings. Upgrades should be boring.\n8. **SDK completeness** — If devs write their own HTTP wrapper, you failed. If the SDK works in 4 of 5 languages, the fifth community hates you.\n9. **Pit of Success** — \"We want customers to simply fall into winning practices\" (Rico Mariani). Make the right thing easy, the wrong thing hard.\n10. **Progressive disclosure** — Simple case is production-ready, not a toy. Complex case uses the same API. SwiftUI: \\`Button(\"Save\") { save() }\\` → full customization, same API.\n\n## DX Scoring Rubric (0-10 calibration)\n\n| Score | Meaning |\n|-------|---------|\n| 9-10 | Best-in-class. Stripe/Vercel tier. Developers rave about it. |\n| 7-8 | Good. Developers can use it without frustration. Minor gaps. |\n| 5-6 | Acceptable. Works but with friction. Developers tolerate it. |\n| 3-4 | Poor. Developers complain. Adoption suffers. |\n| 1-2 | Broken. Developers abandon after first attempt. |\n| 0 | Not addressed. No thought given to this dimension. |\n\n**The gap method:** For each score, explain what a 10 looks like for THIS product. Then fix toward 10.\n\n## TTHW Benchmarks (Time to Hello World)\n\n| Tier | Time | Adoption Impact |\n|------|------|-----------------|\n| Champion | < 2 min | 3-4x higher adoption |\n| Competitive | 2-5 min | Baseline |\n| Needs Work | 5-10 min | Significant drop-off |\n| Red Flag | > 10 min | 50-70% abandon |\n\n## Hall of Fame Reference\n\nDuring each review pass, load the relevant section from:\n\\`~/.claude/skills/plan-devex-review/dx-hall-of-fame.md\\`\n\nRead ONLY the section for the current pass (e.g., \"## Pass 1\" for Getting Started).\nDo NOT read the entire file at once. This keeps context focused.\n\n## Scope Declaration\n\nBrowse can test web-accessible surfaces: docs pages, API playgrounds, web dashboards,\nsignup flows, interactive tutorials, error pages.\n\nBrowse CANNOT test: CLI install friction, terminal output quality, local environment\nsetup, email verification flows, auth requiring real credentials, offline behavior,\nbuild times, IDE integration.\n\nFor untestable dimensions, use bash (for CLI --help, README, CHANGELOG) or mark as\nINFERRED from artifacts. Never guess. State your evidence source for every score.\n\n## Step 0: Target Discovery\n\n1. Read CLAUDE.md for project URL, docs URL, CLI install command\n2. Read README.md for getting started instructions\n3. Read package.json or equivalent for install commands\n\nIf URLs are missing, AskUserQuestion: \"What's the URL for the docs/product I should test?\"\n\n### Boomerang Baseline\n\nCheck for prior /plan-devex-review scores:\n\n```bash\neval \"$(~/.vibestack/bin/vibe-slug 2>/dev/null)\"\ntrue # vibe-review-read 2>/dev/null | grep plan-devex-review || echo \"NO_PRIOR_PLAN_REVIEW\"\n```\n\nIf prior scores exist, display them. These are your baseline for the boomerang comparison.\n\n## Step 1: Getting Started Audit\n\nNavigate to the docs/landing page via browse. Screenshot it.\n\n```\nGETTING STARTED AUDIT\n=====================\nStep 1: [what dev does]          Time: [est]  Friction: [low/med/high]  Evidence: [screenshot/bash output]\nStep 2: [what dev does]          Time: [est]  Friction: [low/med/high]  Evidence: [screenshot/bash output]\n...\nTOTAL: [N steps, M minutes]\n```\n\nScore 0-10. Load \"## Pass 1\" from dx-hall-of-fame.md for calibration.\n\n## Step 2: API/CLI/SDK Ergonomics Audit\n\nTest what you can:\n- CLI: Run `--help` via bash. Evaluate output quality, flag design, discoverability.\n- API playground: Navigate via browse if one exists. Screenshot.\n- Naming: Check consistency across the API surface.\n\nScore 0-10. Load \"## Pass 2\" from dx-hall-of-fame.md for calibration.\n\n## Step 3: Error Message Audit\n\nTrigger common error scenarios:\n- Browse: Navigate to 404 pages, submit invalid forms, try unauthenticated access\n- CLI: Run with missing args, invalid flags, bad input\n\nScreenshot each error. Score against the Elm/Rust/Stripe three-tier model.\n\nScore 0-10. Load \"## Pass 3\" from dx-hall-of-fame.md for calibration.\n\n## Step 4: Documentation Audit\n\nNavigate the docs structure via browse:\n- Check search functionality (try 3 common queries)\n- Verify code examples are copy-paste-complete\n- Check language switcher behavior\n- Check information architecture (can you find what you need in <2 min?)\n\nScreenshot key findings. Score 0-10. Load \"## Pass 4\" from dx-hall-of-fame.md.\n\n## Step 5: Upgrade Path Audit\n\nRead via bash:\n- CHANGELOG quality (clear? user-facing? migration notes?)\n- Migration guides (exist? step-by-step?)\n- Deprecation warnings in code (grep for deprecated/obsolete)\n\nScore 0-10. Evidence: INFERRED from files. Load \"## Pass 5\" from dx-hall-of-fame.md.\n\n## Step 6: Developer Environment Audit\n\nRead via bash:\n- README setup instructions (steps? prerequisites? platform coverage?)\n- CI/CD configuration (exists? documented?)\n- TypeScript types (if applicable)\n- Test utilities / fixtures\n\nScore 0-10. Evidence: INFERRED from files. Load \"## Pass 6\" from dx-hall-of-fame.md.\n\n## Step 7: Community & Ecosystem Audit\n\nBrowse:\n- Community links (GitHub Discussions, Discord, Stack Overflow)\n- GitHub issues (response time, templates, labels)\n- Contributing guide\n\nScore 0-10. Evidence: TESTED where web-accessible, INFERRED otherwise.\n\n## Step 8: DX Measurement Audit\n\nCheck for feedback mechanisms:\n- Bug report templates\n- NPS or feedback widgets\n- Analytics on docs\n\nScore 0-10. Evidence: INFERRED from files/pages.\n\n## DX Scorecard with Evidence\n\n```\n+====================================================================+\n|              DX LIVE AUDIT — SCORECARD                              |\n+====================================================================+\n| Dimension            | Score  | Evidence | Method   |\n|----------------------|--------|----------|----------|\n| Getting Started      | __/10  | [screenshots] | TESTED   |\n| API/CLI/SDK          | __/10  | [screenshots] | PARTIAL  |\n| Error Messages       | __/10  | [screenshots] | PARTIAL  |\n| Documentation        | __/10  | [screenshots] | TESTED   |\n| Upgrade Path         | __/10  | [file refs]   | INFERRED |\n| Dev Environment      | __/10  | [file refs]   | INFERRED |\n| Community            | __/10  | [screenshots] | TESTED   |\n| DX Measurement       | __/10  | [file refs]   | INFERRED |\n+--------------------------------------------------------------------+\n| TTHW (measured)      | __ min | [step count]  | TESTED   |\n| Overall DX           | __/10  |               |          |\n+====================================================================+\n```\n\n## Boomerang Comparison\n\nIf /plan-devex-review scores exist from the baseline check:\n\n```\nPLAN vs REALITY\n================\n| Dimension        | Plan Score | Live Score | Delta | Alert |\n|------------------|-----------|-----------|-------|-------|\n| Getting Started  | __/10     | __/10     | __    | ⚠/✓   |\n| API/CLI/SDK      | __/10     | __/10     | __    | ⚠/✓   |\n| Error Messages   | __/10     | __/10     | __    | ⚠/✓   |\n| Documentation    | __/10     | __/10     | __    | ⚠/✓   |\n| Upgrade Path     | __/10     | __/10     | __    | ⚠/✓   |\n| Dev Environment  | __/10     | __/10     | __    | ⚠/✓   |\n| Community        | __/10     | __/10     | __    | ⚠/✓   |\n| DX Measurement   | __/10     | __/10     | __    | ⚠/✓   |\n| TTHW             | __ min    | __ min    | __ min| ⚠/✓   |\n```\n\nFlag any dimension where live score < plan score - 2 (reality fell short of plan).\n\n## Review Log\n\n**PLAN MODE EXCEPTION — ALWAYS RUN:**\n\n```bash\ntrue # vibe-review-log '{\"skill\":\"devex-review\",\"timestamp\":\"TIMESTAMP\",\"status\":\"STATUS\",\"overall_score\":N,\"product_type\":\"TYPE\",\"tthw_measured\":\"TTHW\",\"dimensions_tested\":N,\"dimensions_inferred\":N,\"boomerang\":\"YES_OR_NO\",\"commit\":\"COMMIT\"}'\n```\n\n## Review Readiness Dashboard\n\nAfter completing the review, read the review log and config to display the dashboard.\n\n```bash\ntrue # vibe-review-read\n```\n\nParse the output. Find the most recent entry for each skill (plan-ceo-review, plan-eng-review, review, plan-design-review, design-review-lite, adversarial-review, codex-review, codex-plan-review). Ignore entries with timestamps older than 7 days. For the Eng Review row, show whichever is more recent between `review` (diff-scoped pre-landing review) and `plan-eng-review` (plan-stage architecture review). Append \"(DIFF)\" or \"(PLAN)\" to the status to distinguish. For the Adversarial row, show whichever is more recent between `adversarial-review` (new auto-scaled) and `codex-review` (legacy). For Design Review, show whichever is more recent between `plan-design-review` (full visual audit) and `design-review-lite` (code-level check). Append \"(FULL)\" or \"(LITE)\" to the status to distinguish. For the Outside Voice row, show the most recent `codex-plan-review` entry — this captures outside voices from both /plan-ceo-review and /plan-eng-review.\n\n**Source attribution:** If the most recent entry for a skill has a \\`\"via\"\\` field, append it to the status label in parentheses. Examples: `plan-eng-review` with `via:\"autoplan\"` shows as \"CLEAR (PLAN via /autoplan)\". `review` with `via:\"ship\"` shows as \"CLEAR (DIFF via /ship)\". Entries without a `via` field show as \"CLEAR (PLAN)\" or \"CLEAR (DIFF)\" as before.\n\nNote: `autoplan-voices` and `design-outside-voices` entries are audit-trail-only (forensic data for cross-model consensus analysis). They do not appear in the dashboard and are not checked by any consumer.\n\nDisplay:\n\n```\n+====================================================================+\n|                    REVIEW READINESS DASHBOARD                       |\n+====================================================================+\n| Review          | Runs | Last Run            | Status    | Required |\n|-----------------|------|---------------------|-----------|----------|\n| Eng Review      |  1   | 2026-03-16 15:00    | CLEAR     | YES      |\n| CEO Review      |  0   | —                   | —         | no       |\n| Design Review   |  0   | —                   | —         | no       |\n| Adversarial     |  0   | —                   | —         | no       |\n| Outside Voice   |  0   | —                   | —         | no       |\n+--------------------------------------------------------------------+\n| VERDICT: CLEARED — Eng Review passed                                |\n+====================================================================+\n```\n\n**Review tiers:**\n- **Eng Review (required by default):** The only review that gates shipping. Covers architecture, code quality, tests, performance. Can be disabled globally with \\`vibe-config set skip_eng_review true\\` (the \"don't bother me\" setting).\n- **CEO Review (optional):** Use your judgment. Recommend it for big product/business changes, new user-facing features, or scope decisions. Skip for bug fixes, refactors, infra, and cleanup.\n- **Design Review (optional):** Use your judgment. Recommend it for UI/UX changes. Skip for backend-only, infra, or prompt-only changes.\n- **Adversarial Review (automatic):** Always-on for every review. Every diff gets both Claude adversarial subagent and Codex adversarial challenge. Large diffs (200+ lines) additionally get Codex structured review with P1 gate. No configuration needed.\n- **Outside Voice (optional):** Independent plan review from a different AI model. Offered after all review sections complete in /plan-ceo-review and /plan-eng-review. Falls back to Claude subagent if Codex is unavailable. Never gates shipping.\n\n**Verdict logic:**\n- **CLEARED**: Eng Review has >= 1 entry within 7 days from either \\`review\\` or \\`plan-eng-review\\` with status \"clean\" (or \\`skip_eng_review\\` is \\`true\\`)\n- **NOT CLEARED**: Eng Review missing, stale (>7 days), or has open issues\n- CEO, Design, and Codex reviews are shown for context but never block shipping\n- If \\`skip_eng_review\\` config is \\`true\\`, Eng Review shows \"SKIPPED (global)\" and verdict is CLEARED\n\n**Staleness detection:** After displaying the dashboard, check if any existing reviews may be stale:\n- Parse the \\`---HEAD---\\` section from the bash output to get the current HEAD commit hash\n- For each review entry that has a \\`commit\\` field: compare it against the current HEAD. If different, count elapsed commits: \\`git rev-list --count STORED_COMMIT..HEAD\\`. Display: \"Note: {skill} review from {date} may be stale — {N} commits since review\"\n- For entries without a \\`commit\\` field (legacy entries): display \"Note: {skill} review from {date} has no commit tracking — consider re-running for accurate staleness detection\"\n- If all reviews match the current HEAD, do not display any staleness notes\n\n## Plan File Review Report\n\nAfter displaying the Review Readiness Dashboard in conversation output, also update the\n**plan file** itself so review status is visible to anyone reading the plan.\n\n### Detect the plan file\n\n1. Check if there is an active plan file in this conversation (the host provides plan file\n   paths in system messages — look for plan file references in the conversation context).\n2. If not found, skip this section silently — not every review runs in plan mode.\n\n### Generate the report\n\nRead the review log output you already have from the Review Readiness Dashboard step above.\nParse each JSONL entry. Each skill logs different fields:\n\n- **plan-ceo-review**: \\`status\\`, \\`unresolved\\`, \\`critical_gaps\\`, \\`mode\\`, \\`scope_proposed\\`, \\`scope_accepted\\`, \\`scope_deferred\\`, \\`commit\\`\n  → Findings: \"{scope_proposed} proposals, {scope_accepted} accepted, {scope_deferred} deferred\"\n  → If scope fields are 0 or missing (HOLD/REDUCTION mode): \"mode: {mode}, {critical_gaps} critical gaps\"\n- **plan-eng-review**: \\`status\\`, \\`unresolved\\`, \\`critical_gaps\\`, \\`issues_found\\`, \\`mode\\`, \\`commit\\`\n  → Findings: \"{issues_found} issues, {critical_gaps} critical gaps\"\n- **plan-design-review**: \\`status\\`, \\`initial_score\\`, \\`overall_score\\`, \\`unresolved\\`, \\`decisions_made\\`, \\`commit\\`\n  → Findings: \"score: {initial_score}/10 → {overall_score}/10, {decisions_made} decisions\"\n- **plan-devex-review**: \\`status\\`, \\`initial_score\\`, \\`overall_score\\`, \\`product_type\\`, \\`tthw_current\\`, \\`tthw_target\\`, \\`mode\\`, \\`persona\\`, \\`competitive_tier\\`, \\`unresolved\\`, \\`commit\\`\n  → Findings: \"score: {initial_score}/10 → {overall_score}/10, TTHW: {tthw_current} → {tthw_target}\"\n- **devex-review**: \\`status\\`, \\`overall_score\\`, \\`product_type\\`, \\`tthw_measured\\`, \\`dimensions_tested\\`, \\`dimensions_inferred\\`, \\`boomerang\\`, \\`commit\\`\n  → Findings: \"score: {overall_score}/10, TTHW: {tthw_measured}, {dimensions_tested} tested/{dimensions_inferred} inferred\"\n- **codex-review**: \\`status\\`, \\`gate\\`, \\`findings\\`, \\`findings_fixed\\`\n  → Findings: \"{findings} findings, {findings_fixed}/{findings} fixed\"\n\nAll fields needed for the Findings column are now present in the JSONL entries.\nFor the review you just completed, you may use richer details from your own Completion\nSummary. For prior reviews, use the JSONL fields directly — they contain all required data.\n\nProduce this markdown table:\n\n\\`\\`\\`markdown\n## VIBESTACK REVIEW REPORT\n\n| Review | Trigger | Why | Runs | Status | Findings |\n|--------|---------|-----|------|--------|----------|\n| CEO Review | \\`/plan-ceo-review\\` | Scope & strategy | {runs} | {status} | {findings} |\n| Codex Review | \\`/codex review\\` | Independent 2nd opinion | {runs} | {status} | {findings} |\n| Eng Review | \\`/plan-eng-review\\` | Architecture & tests (required) | {runs} | {status} | {findings} |\n| Design Review | \\`/plan-design-review\\` | UI/UX gaps | {runs} | {status} | {findings} |\n| DX Review | \\`/plan-devex-review\\` | Developer experience gaps | {runs} | {status} | {findings} |\n\\`\\`\\`\n\nBelow the table, add these lines (omit any that are empty/not applicable):\n\n- **CODEX:** (only if codex-review ran) — one-line summary of codex fixes\n- **CROSS-MODEL:** (only if both Claude and Codex reviews exist) — overlap analysis\n- **UNRESOLVED:** total unresolved decisions across all reviews\n- **VERDICT:** list reviews that are CLEAR (e.g., \"CEO + ENG CLEARED — ready to implement\").\n  If Eng Review is not CLEAR and not skipped globally, append \"eng review required\".\n\n### Write to the plan file\n\n**PLAN MODE EXCEPTION — ALWAYS RUN:** This writes to the plan file, which is the one\nfile you are allowed to edit in plan mode. The plan file review report is part of the\nplan's living status.\n\n- Search the plan file for a \\`## VIBESTACK REVIEW REPORT\\` section **anywhere** in the file\n  (not just at the end — content may have been added after it).\n- If found, **replace it** entirely using the Edit tool. Match from \\`## VIBESTACK REVIEW REPORT\\`\n  through either the next \\`## \\` heading or end of file, whichever comes first. This ensures\n  content added after the report section is preserved, not eaten. If the Edit fails\n  (e.g., concurrent edit changed the content), re-read the plan file and retry once.\n- If no such section exists, **append it** to the end of the plan file.\n- Always place it as the very last section in the plan file. If it was found mid-file,\n  move it: delete the old location and append at the end.\n\n{{include lib/snippets/capture-learnings.md}}\n## Next Steps\n\nAfter the audit, recommend:\n- Fix the gaps found (specific, actionable fixes)\n- Re-run /devex-review after fixes to verify improvement\n- If boomerang showed significant gaps, re-run /plan-devex-review on the next feature plan\n\n## Formatting Rules\n\n* NUMBER issues (1, 2, 3...) and LETTERS for options (A, B, C...).\n* Rate every dimension with evidence source.\n* Screenshots are the gold standard. File references are acceptable. Guesses are not.","tags":["devex","review","vibestack","timurgaleev","agent-skills","ai-agents","claude-code","cursor-ide","developer-tools","kiro","mcp","prompt-engineering"],"capabilities":["skill","source-timurgaleev","skill-devex-review","topic-agent-skills","topic-ai-agents","topic-claude-code","topic-cursor-ide","topic-developer-tools","topic-kiro","topic-mcp","topic-prompt-engineering","topic-slash-commands"],"categories":["vibestack"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/timurgaleev/vibestack/devex-review","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add timurgaleev/vibestack","source_repo":"https://github.com/timurgaleev/vibestack","install_from":"skills.sh"}},"qualityScore":"0.457","qualityRationale":"deterministic score 0.46 from registry signals: · indexed on github topic:agent-skills · 15 github stars · SKILL.md body (23,232 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-05-18T19:06:20.924Z","embedding":null,"createdAt":"2026-05-18T19:06:20.924Z","updatedAt":"2026-05-18T19:06:20.924Z","lastSeenAt":"2026-05-18T19:06:20.924Z","tsv":"'-03':2094 '-10':967,972,1073,1333,1379,1429,1483,1521,1559,1592,1622 '-16':2095 '-2':1012 '-20':865 '-4':1005,1061 '-5':1067 '-6':995 '-70':1084 '-8':984 '/.claude/skills/plan-devex-review/dx-hall-of-fame.md':1099 '/.vibestack/bin/vibe-learnings-search':91 '/.vibestack/bin/vibe-slug':46,1251 '/10':1641,1645,1650,1654,1659,1665,1670,1675,1687,1710,1711,1713,1714,1717,1718,1720,1721,1724,1725,1728,1729,1731,1732,1735,1736,2637,2640,2669,2672,2698 '/autoplan':2018 '/codex':2790 '/dev/null':48,50,74,89,95,129,154,166,245,263,292,307,321,1253,1260 '/devex-review':3084 '/learnings.jsonl':61 '/plan-ceo-review':1980,2261,2782 '/plan-design-review':2809 '/plan-devex-re':42 '/plan-devex-review':1247,1691,2817,3098 '/plan-eng-review':1982,2263,2800 '/projects':58 '/ship':2028 '0':105,966,1019,1198,1332,1378,1428,1482,1520,1558,1591,1621,2102,2106,2109,2113,2589 '00':2097 '1':212,238,285,412,609,744,1011,1110,1201,1286,1303,1336,2092,2282,2487,3108 '10':864,937,1037,1046,1081 '100':542 '15':2096 '2':47,49,73,88,94,128,153,165,224,244,256,262,291,296,306,320,437,628,764,1058,1066,1212,1252,1259,1315,1342,1382,1476,1749,2517,3109 '200':2230 '2026':2093 '2nd':2793 '3':310,458,642,785,1004,1060,1219,1388,1432,1451,3110 '4':479,661,807,904,1438,1486 '404':1399 '5':87,93,498,678,825,906,994,1072,1490,1528 '50':1083 '6':523,695,845,1532,1566 '7':546,711,867,983,1570,1864,2285,2310 '8':569,887,1602 '9':913,971 '95':674 'abandon':1015,1085 'accept':996,2571,2580,2581,3132 'access':696,1133,1406,1598 'accomplish':563 'accur':2438 'across':698,1373,2867 'action':3079 'activ':2493 'actual':13,668 'ad':2962,2994 'add':2827 'addit':2232 'address':1021 'adopt':638,822,1009,1055,1064 'adversari':1849,1906,1915,2108,2208,2222,2226 'adversarial-review':1848,1914 'ai':2252 'alert':1707 'allow':2920 'alreadi':2541 'also':2467 'alway':1760,2212,2905,3036 'always-on':2211 'analysi':2065,2862 'analyt':1617 'answer':658 'anyon':2479 'anywher':2949 'api':581,618,954,962,1137,1361,1375 'api/cli/sdk':1343,1644,1712 'app':875 'appear':2069 'append':1895,1951,1997,2893,3027,3062 'applic':1553,2835 'architectur':1468,1893,2134,2801 'arg':1411 'arriv':771 'artifact':1187 'askuserquest':1231 'attempt':1018 'attribut':1984 'audit':7,1289,1301,1345,1391,1440,1493,1535,1573,1605,1633,1941,2055,3072 'audit-trail-on':2054 'auth':151,163,535,1162 'auto':1919 'auto-sc':1918 'automat':2210 'autoplan':2012,2045 'autoplan-voic':2044 'avail':149,377,381 'awar':810 'b':384,3116 'back':328,407,2265 'backend':2200 'backend-on':2199 'bad':1414 'bar':757 'base':109,204,334,362 'baselin':1069,1243,1280,1696 'baserefnam':217,219 'bash':44,121,366,1176,1249,1354,1496,1538,1762,1814,2365 'behavior':1167,1465 'benchmark':1048 'best':714,974 'best-in-class':713,973 'big':2167 'block':2327 'boomerang':1242,1283,1688,1791,2692,3091 'bore':886 'bother':2155 'branch':110,185,194,205,250,268,335,355,363 'break':640,872 'broken':1013 'brows':10,372,375,379,1128,1147,1296,1365,1396,1446,1574 'bug':1610,2180 'build':557,751,1168 'bundl':691 'button':956 'c':3117 'calibr':968,1340,1386,1436 'call':436 'cannot':1148 'captur':1975 'card':433,784 'case':670,941,950 'caus':521,800 'ceo':1833,2100,2158,2316,2561,2780,2877 'challeng':2227 'champion':1057 'chang':2169,2196,2207,3010 'changelog':877,1181,1497 'characterist':602,603 'check':147,396,1244,1371,1447,1462,1466,1606,1697,1950,2076,2351,2488 'chef':746,748 'chef-for-chef':745 'ci/cd':1546 'class':716,976 'claud':2221,2267,2856 'claude.md':1203 'clean':2297 'cleanup':2185 'clear':633,876,1499,2015,2025,2036,2039,2098,2116,2278,2305,2344,2875,2879,2888 'cli':31,148,282,702,1150,1178,1209,1350,1407 'click':423 'cliff':457 'clock':772 'code':467,525,561,705,1455,1515,1948,2135 'code-level':1947 'codemod':880 'codex':1852,1855,1923,1970,2225,2234,2270,2319,2709,2788,2836,2840,2848,2858 'codex-plan-review':1854,1969 'codex-review':1851,1922,2708,2839 'cognit':731 'column':2729 'come':2989 'command':181,283,351,385,1211,1226 'commit':1795,1796,2372,2381,2393,2400,2412,2419,2431,2574,2611,2632,2664,2693 'common':1393,1452 'communiti':652,720,910,1571,1575,1669,1730 'compar':40,2383 'comparison':1284,1689 'competit':1065,2661 'complain':1008 'complet':889,1461,1801,2259,2742,2751 'complex':949 'concept':566 'concurr':3008 'config':1809,2146,2333 'configur':1547,2241 'consensus':2064 'consid':2433 'consist':632,1372 'consum':2079 'contain':133,141,2762 'content':2958,2993,3012 'context':471,527,846,1124,2324,2516 'contribut':1588 'convers':2465,2498,2515 'copi':465,1459 'copy-past':464 'copy-paste-complet':1458 'cost':848 'count':68,80,85,1683,2391,2398 'cover':159,171,673,2133 'coverag':1545 'creat':570 'creation':350 'credenti':1165 'credibl':629 'credit':432,783 'critic':2565,2596,2598,2606,2616,2618 'cross':2062,2851 'cross-model':2061,2850 'css':676 'curl':392,625 'current':1106,2370,2387,2446,2656,2675 'custom':919,960 'd':76 'daemon':373 'dashboard':857,1140,1799,1813,2072,2083,2350,2463,2547 'data':2059,2765 'date':2407,2428 'day':1865,2286,2311 'debug':836 'decid':420,480 'decis':2177,2630,2641,2643,2866 'declar':1127 'default':193,267,487,812,2126 'defaultbranchref':229 'defaultbranchref.name':231 'defer':2573,2583,2584 'delet':3057 'delta':1706 'demo':435 'depend':687 'deploy':540,588,692 'deprec':634,881,1512 'deprecated/obsolete':1518 'design':1359,1842,1845,1927,1937,1944,2049,2104,2186,2317,2622,2807 'design-outside-voic':2048 'design-review-lit':1844,1943 'desir':712 'detail':2747 'detect':106,112,333,354,2346,2440,2483 'determin':183 'dev':723,770,844,852,891,1305,1317,1663,1726 'develop':5,16,442,501,597,979,986,1001,1007,1014,1533,2818 'devex':2,1264,1770,2646,2679 'devex-review':1,1769,2678 'didn':516 'diff':341,1879,1896,2026,2040,2218,2229 'diff-scop':1878 'differ':2251,2390,2557 'dimens':1027,1174,1635,1701,1743,1785,1788,2688,2690,2702,2705,3120 'direct':394,2760 'disabl':2141 'disclosur':939 'discord':1579 'discov':646,830 'discover':1360 'discoveri':1200 'discuss':1578 'display':1275,1811,2080,2348,2402,2423,2450,2459 'distinguish':1903,1959 'doc':19,430,473,780,806,856,1135,1207,1443,1619 'docs/landing':1293 'docs/product':1238 'document':1439,1549,1653,1719 'drop':1077 'drop-off':1076 'dx':36,397,601,735,828,963,1603,1627,1631,1673,1686,1733,2815 'dx-hall-of-fame.md':1338,1384,1434,1488,1530,1568 'e.g':1108,2876,3007 'easi':644,932 'eaten':3002 'echo':77,99,374,1266 'ecosystem':1572 'edit':2922,2972,3005,3009 'either':2288,2980 'elaps':2392 'elm/rust/stripe':1422 'els':98 'email':1159 'empathi':788 'empty/not':2834 'end':2957,2985,3031,3065 'eng':1837,1868,1888,2008,2090,2117,2122,2149,2279,2293,2300,2306,2331,2336,2602,2798,2878,2884,2894 'ensur':2992 'enterpris':161 'entir':1118,2969 'entri':81,1827,1859,1973,1989,2029,2052,2283,2377,2416,2422,2553,2736 'enumer':742 'environ':700,1157,1534,1664,1727 'equival':1223 'ergonom':1344 'error':28,519,537,786,790,858,1145,1389,1394,1418,1648,1715 'escap':490,808,817 'est':1308,1320 'eval':45,1250 'evalu':30,831,1355 'everi':338,404,518,656,789,811,840,849,1195,2215,2217,2526,3119 'everyth':421,554,763 'evid':39,1192,1311,1323,1522,1560,1593,1623,1630,1637,3122 'exampl':1456,2005 'except':1759,2904 'exist':198,1274,1368,1507,1548,1693,2354,2860,3026 'experi':6,17,598,2819 'explain':798,1034 'extract':247,265 'f':63,242,260 'face':1502,2173 'fail':284,299,313,326,898,3006 'fall':327,922,2264 'fallback':277,391 'fame':1088 'fast':619 'fear':869 'featur':489,550,666,2174,3102 'feedback':620,1608,1615 'feel':575 'fell':1751 'fetch':345 'fi':97,103 'field':251,269,1996,2033,2382,2420,2558,2587,2724,2759 'fifth':909 'fight':499 'file':54,65,72,1119,1525,1563,1660,1666,1676,2455,2471,2486,2495,2503,2511,2901,2912,2917,2928,2942,2952,2987,3018,3035,3047,3054,3129 'files/pages':1626 'find':589,648,1471,1480,1823,2575,2612,2633,2665,2694,2713,2714,2716,2717,2718,2719,2721,2728,2779,2787,2797,2806,2814,2823 'findabl':643 'first':111,398,417,595,765,1017,2990 'five':418,766 'fix':512,522,803,1044,2181,2715,2720,2722,2849,3074,3080,3086 'fixtur':1556 'flag':1080,1358,1413,1741 'flow':24,1142,1161 'focus':1125 'forc':441 'forens':2058 'form':1403 'format':3104 'found':2520,2609,2614,2966,3051,3077 'friction':414,681,1000,1152,1309,1321 'frustrat':991 'full':959,1939,1952 'function':1449 'gap':841,993,1029,2566,2597,2599,2607,2617,2619,2811,2820,3076,3094 'gate':2131,2239,2274,2712 'generat':2532 'gentl':454 'get':22,125,449,1112,1216,1287,1299,1639,1708,2219,2233,2368 'get-url':124 'gh':150,213,225 'git':114,122,179,275,286,300,314,340,342,344,346,2394 'git-nat':178,274 'github':137,158,160,211,1577,1582 'github.com':134 'gitlab':142,145,170,237 'given':1024 'glab':162,239,257 'global':2142,2340,2892 'gold':607,3127 'good':653,985 'gradual':637 'great':734 'grep':1261,1516 'gt':86 'guess':1189,3133 'gui':703 'guid':879,1506,1589 'hall':1086 'handl':538 'hard':936 'hash':2373 'hatch':491,809,818 'hate':911 'head':2361,2371,2388,2401,2447,2983 'held':497 'hello':426,528,777,833,1051 'hello-world':776 'help':32,649,1179,1352 'higher':759,1063 'hold/reduction':2592 'home':56 'home/.vibestack':57 'host':115,174,2500 'http':395,895 'ide':1170 'identifi':795 'ignor':1858 'impact':1056 'implement':2882 'improv':3089 'includ':370,3066 'increment':438 'independ':2246,2792 'infer':1185,1523,1561,1599,1624,1662,1668,1678,1789,2691,2706,2707 'inform':1467 'infra':2183,2202 'initi':2625,2635,2649,2667 'input':1415 'instal':613,832,1151,1210,1225 'instant':580 'instruct':359,1218,1541 'integr':835,1171 'interact':1143 'intern':738 'intuit':617 'invalid':1402,1412 'issu':1583,2315,2608,2613,2615,3107 'iter':551 'journey':826 'js':641 'json':216,228,243,261 'jsonl':2552,2735,2758 'judgment':2163,2191 'junior':708 'keep':1123 'key':623,1479 'l':70 'label':1587,2002 'land':1883 'languag':907,1463 'larg':2228 'last':2086,3042 'law':403 'leader':736 'learn':53,64,67,71,78,79,84,100,459,568 'leav':853 'legaci':1925,2421 'let':483 'letter':3112 'level':1949 'lib/snippets/capture-learnings.md':3067 'lie':532 'like':576,1039 'limit':92 'line':559,2231,2829,2845 'link':804,1576 'list':2397,2871 'lite':1847,1946,1954 'live':4,755,1632,1704,1745,2937 'load':82,1094,1334,1380,1430,1484,1526,1564 'local':1156 'locat':3060 'log':343,1756,1767,1807,2538,2556 'logic':2277 'look':1038,2508 'lookup':859 'loos':496 'lose':861 'lost':843 'low/med/high':1310,1322 'm':1329 'made':2631,2642 'magic':571,577 'main':309,330 'make':592,928 'mariani':927 'mark':1183 'markdown':2768,2770 'master':323 'match':667,2444,2974 'may':2356,2408,2744,2959 'mean':606,970 'measur':682,1604,1674,1680,1734,1783,2687,2701 'mechan':1609 'merg':347 'messag':29,787,1390,1649,1716,2507 'method':1030,1638 'mid':3053 'mid-fil':3052 'migrat':839,878,1503,1505 'min':1059,1068,1074,1082,1477,1681,1738,1739,1740 'minor':992 'minut':419,767,866,1330 'miss':1230,1410,2308,2591 'mode':1758,2531,2567,2593,2594,2595,2610,2659,2903,2925 'model':1426,2063,2253,2852 'moment':572 'momentum':721 'money':626 'move':627,3055 'mr':240 'n':1327,1778,1787,1790,2411 'name':336,356,1370 'nativ':180,276 'navig':18,1290,1363,1397,1441 'necessari':475 'need':502,677,813,1070,1474,2242,2725 'neither':175 'never':440,477,639,1188,2273,2326 'new':769,1917,2170 'next':506,2982,3068,3101 'next.js':688 'none':101 'note':1504,2043,2403,2424,2453 'notic':762 'nps':1613 'number':3106 'obsess':768 'offer':2254 'offlin':1166 'old':3059 'older':1862 'omit':2830 'one':409,422,452,622,624,694,1367,2844,2916 'one-lin':2843 'open':393,2314 'opinion':486,495,2794 'option':2160,2188,2245,3114 'origin':127 'origin/main':305 'origin/master':319 'otherwis':146,1600 'output':1154,1313,1325,1356,1822,2366,2466,2539 'outsid':1962,1976,2050,2111,2243 'overal':1685,1776,2627,2638,2651,2670,2682,2696 'overflow':1581 'overlap':2861 'overrid':485,815 'p1':2238 'package.json':1221 'page':1136,1146,1294,1400 'pain':792 'parenthes':2004 'pars':303,317,1820,2359,2550 'part':453,2932 'partial':1647,1652 'pass':1093,1107,1109,1335,1381,1431,1485,1527,1565,2119 'past':466,1460 'path':1492,1658,1723,2504 'pattern':732 'perform':2138 'persona':2660 'pit':914 'place':3037 'plan':1263,1269,1698,1702,1747,1754,1757,1832,1836,1841,1856,1887,1891,1898,1936,1971,2007,2016,2037,2247,2292,2454,2470,2482,2485,2494,2502,2510,2530,2560,2601,2621,2645,2900,2902,2911,2924,2927,2935,2941,3017,3034,3046,3103 'plan-ceo-review':1831,2559 'plan-design-review':1840,1935,2620 'plan-devex-review':1262,2644 'plan-eng-review':1835,1886,2006,2291,2600 'plan-stag':1890 'platform':107,116,135,143,156,168,280,1544 'playground':462,1138,1362 'poor':1006 'pr':214 'pr/mr':187,197,349 'practic':925 'pre':1882 'pre-land':1881 'preambl':43 'predict':631 'prefer':701 'prerequisit':1543 'present':2732 'preserv':3000 'price':719 'princip':710 'principl':399 'print':331 'prior':1246,1268,1272,2754 'problem':520,545,665,797 'produc':34,2766 'product':752,874,944,1042,1779,2653,2684 'product/business':2168 'production-readi':943 'progress':938 'project':1205 'prompt':2205 'prompt-on':2204 'propos':2569,2577,2578 'provid':2501 'push':586 'push-to-deploy':585 'q':218,230 'qualiti':1155,1357,1498,2136 'queri':1453 'question':657 'ramp':455 'ran':2842 'rate':3118 'rave':980 're':2435,3014,3082,3096 're-read':3013 're-run':2434,3081,3095 'react':655 'read':429,1100,1116,1202,1213,1220,1258,1494,1536,1804,1819,2480,2535,3015 'readi':945,1798,2082,2462,2546,2880 'readm':1180,1539 'readme.md':1214 'real':534,536,539,664,1164 'realiti':1700,1750 'reason':718 'recent':1826,1875,1912,1933,1968,1988 'recommend':405,2164,2192,3073 'red':1079 'reduc':680 'ref':289,1661,1667,1677 'refactor':2182 'refer':472,1089,2512,3130 'refs/remotes/origin':295 'refs/remotes/origin/head':290 'relev':1096 'reliabl':630 'remot':119,123 'replac':2967 'repo':191,226,258 'report':1611,2457,2534,2773,2930,2947,2978,2997 'requir':493,1163,2089,2124,2764,2803,2896 'respons':555,582,1584 'result':201 'retri':3020 'rev':302,316,2396 'rev-list':2395 'rev-pars':301,315 'review':3,1092,1257,1265,1270,1755,1766,1771,1797,1803,1806,1818,1834,1838,1839,1843,1846,1850,1853,1857,1869,1877,1884,1889,1894,1916,1924,1928,1938,1945,1972,2009,2019,2081,2084,2091,2101,2105,2118,2120,2123,2129,2150,2159,2187,2209,2216,2236,2248,2257,2280,2289,2294,2301,2307,2320,2332,2337,2355,2376,2405,2414,2426,2443,2456,2461,2474,2527,2537,2545,2562,2603,2623,2647,2680,2710,2739,2755,2772,2774,2781,2789,2791,2799,2808,2816,2841,2859,2869,2872,2885,2895,2929,2946,2977 'richer':2746 'rico':926 'right':930 'role':699 'rout':690 'row':1870,1907,1964 'rubric':965 'rule':3105 'run':1351,1408,1761,2085,2087,2436,2528,2777,2785,2795,2804,2812,2821,2906,3083,3097 'sale':781 'sandbox':463 'save':683,957,958 'say':360 'scale':671,824,838,1920 'scenario':1395 'scope':1126,1880,2176,2568,2570,2572,2576,2579,2582,2586,2783 'score':964,969,1033,1196,1248,1273,1331,1377,1419,1427,1481,1519,1557,1590,1620,1636,1692,1703,1705,1746,1748,1777,2626,2628,2634,2636,2639,2650,2652,2666,2668,2671,2683,2695,2697 'scorecard':37,1628,1634 'screenshot':27,1297,1369,1416,1478,1642,1646,1651,1655,1671,3124 'screenshot/bash':1312,1324 'sdk':888,901 'search':654,1448,2939 'section':1097,1103,2258,2362,2523,2948,2998,3025,3043 'secur':635 'sed':293 'self':173 'self-host':172 'set':614,2147,2157 'setup':365,1158,1540 'seven':600 'ship':2022,2132,2275,2328 'short':1752 'show':524,533,801,1871,1908,1929,1965,2013,2023,2034,2338,3092 'shown':2322 'signific':1075,3093 'signup':1141 'silent':2524 'simpl':611,940 'simpli':921 'sinc':2413 'skill':1768,1830,1992,2404,2425,2555 'skill-devex-review' 'skip':382,2148,2178,2197,2299,2330,2339,2521,2891 'slug':51,59 'solv':541,663 'sourc':1193,1983,3123 'source-timurgaleev' 'specif':3078 'speed':547,552 'ssr':689 'stack':1580 'stage':1892 'stale':2309,2345,2358,2410,2439,2452 'standard':608,3128 'start':23,425,773,1113,1217,1288,1300,1640,1709 'state':1190 'status':152,164,1774,1775,1901,1957,2001,2088,2296,2475,2563,2604,2624,2648,2681,2711,2778,2786,2796,2805,2813,2822,2938 'step':104,209,439,1197,1285,1302,1314,1328,1341,1387,1437,1489,1509,1511,1531,1542,1569,1601,1682,2548,3069 'step-by-step':1508 'store':2399 'strategi':2784 'stripe':578,621 'stripe/vercel':977 'strong':494,651 'structur':1444,2235 'subag':2223,2268 'submit':1401 'subsequ':208,339 'substitut':352 'succeed':155,167,221,233,253,271 'success':916 'suffer':1010 'suffici':478 'summari':2752,2846 'surfac':1134,1376 'swiftui':955 'switch':847 'switcher':1464 'symbol':288 'symbolic-ref':287 'system':447,2506 't0':416 'tabl':2769,2826 'tailwind':672 'target':188,249,1199,2658,2677 'task':565 'tech':717 'templat':1586,1612 'termin':1153 'test':14,1130,1149,1241,1346,1554,1594,1643,1656,1672,1684,1786,2137,2689,2703,2704,2802 'text':33,389 'text-on':388 'thing':596,931,935 'think':737 'thought':1023 'three':1424 'three-tier':1423 'tier':978,1053,1425,2121,2662 'time':25,556,558,684,850,1049,1054,1169,1307,1319,1585 'timestamp':1772,1773,1861 'toler':729,1002 'tool':11,855,2973 'topic-agent-skills' 'topic-ai-agents' 'topic-claude-code' 'topic-cursor-ide' 'topic-developer-tools' 'topic-kiro' 'topic-mcp' 'topic-prompt-engineering' 'topic-slash-commands' 'total':1326,2864 'toward':1045 'toy':948 'tr':75 'trace':406 'track':2432 'trail':2056 'tri':20,1404,1450 'trigger':1392,2775 'true':96,1254,1763,1815,2151,2303,2335 'trust':820 'tthw':26,1047,1679,1737,1782,1784,2655,2657,2673,2674,2676,2686,2699,2700 'tutori':1144 'type':1551,1780,1781,2654,2685 'typescript':636,1550 'ui/ux':2195,2810 'unauthent':1405 'unavail':2272 'uncertainti':500 'understand':444 'unknown':52,60,176,279 'unresolv':2564,2605,2629,2663,2863,2865 'untest':1173 'updat':2468 'upgrad':837,868,883,1491,1657,1722 'url':120,126,132,140,1206,1208,1228,1235 'usabl':610 'use':8,177,199,222,234,254,272,308,322,387,616,662,669,726,951,988,1175,2161,2189,2745,2756,2970 'user':750,1501,2172 'user-fac':1500,2171 'util':1555 'valu':450 'valuabl':679 'vercel':583,722 'verdict':2115,2276,2342,2870 'verif':1160 'verifi':304,318,1454,3088 'via':1295,1353,1364,1445,1495,1537,1995,2011,2017,2021,2027,2032 'vibe':1256,1765,1817,2145 'vibe-config':2144 'vibe-review-log':1764 'vibe-review-read':1255,1816 'vibestack':55,367,2771,2945,2976 'view':215,227,241,259 'visibl':2477 'visual':1940 'voic':1963,1977,2046,2051,2112,2244 'vs':704,1699 'want':724,918 'warn':882,1513 'wc':69 'web':1132,1139,1597 'web-access':1131,1596 'wherev':357 'whether':507 'whichev':1872,1909,1930,2988 'whole':446,827 'widget':1616 'win':924 'within':650,2284 'without':428,779,990,2030,2417 'work':469,509,697,706,902,997,1071 'world':427,529,778,834,1052 'worth':685 'would':574 'wrapper':896 'write':892,2897,2908 'wrong':934 'x':1062 'yes':1792,2099 'yet':102 'zero':413","prices":[{"id":"13c34022-23f6-47e0-9a44-2e37e46a29b9","listingId":"80e5d148-1549-4e0e-acb4-2140c6d97351","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"timurgaleev","category":"vibestack","install_from":"skills.sh"},"createdAt":"2026-05-18T19:06:20.924Z"}],"sources":[{"listingId":"80e5d148-1549-4e0e-acb4-2140c6d97351","source":"github","sourceId":"timurgaleev/vibestack/devex-review","sourceUrl":"https://github.com/timurgaleev/vibestack/tree/main/skills/devex-review","isPrimary":false,"firstSeenAt":"2026-05-18T19:06:20.924Z","lastSeenAt":"2026-05-18T19:06:20.924Z"}],"details":{"listingId":"80e5d148-1549-4e0e-acb4-2140c6d97351","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"timurgaleev","slug":"devex-review","github":{"repo":"timurgaleev/vibestack","stars":15,"topics":["agent-skills","ai-agents","claude-code","cursor-ide","developer-tools","kiro","mcp","prompt-engineering","slash-commands"],"license":"mit","html_url":"https://github.com/timurgaleev/vibestack","pushed_at":"2026-05-18T18:19:05Z","description":"vibestack is a portable skill pack for AI coding agents. Slash commands like /office-hours, /ship, /investigate, /tdd, /review install once and work across every agent that supports the Agent Skills open standard — Claude Code, Cursor, Kiro, and a growing list of others. ","skill_md_sha":"db39d8565538f9fd8765bc50dacfa5ce1183a61e","skill_md_path":"skills/devex-review/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/timurgaleev/vibestack/tree/main/skills/devex-review"},"layout":"multi","source":"github","category":"vibestack","frontmatter":{"name":"devex-review","description":"Live developer experience audit. Uses the browse tool to actually TEST the\ndeveloper experience: navigates docs, tries the getting started flow, times\nTTHW, screenshots error messages, evaluates CLI help text. Produces a DX\nscorecard with evidence. Compares against /plan-devex-review scores if they\nexist (the boomerang: plan said 3 minutes, reality says 8). Use when asked to\n\"test the DX\", \"DX audit\", \"developer experience test\", or \"try the\nonboarding\". Proactively suggest after shipping a developer-facing feature.\nVoice triggers (speech-to-text aliases): \"dx audit\", \"test the developer experience\", \"try the onboarding\", \"developer experience test\"."},"skills_sh_url":"https://skills.sh/timurgaleev/vibestack/devex-review"},"updatedAt":"2026-05-18T19:06:20.924Z"}}