Generate and edit Draw.io, Mermaid, and Excalidraw diagrams from natural language using a structured JSON spec.
Design & media
design-brief
Try itTurn a vague feature idea into an approved design brief — a file recording the intent, every decision made (with why and cost-if-wrong), scope boundaries, exact interfaces, and constraints — that task-executor, backlog-planner, and autopilot then consume as the spec. Produces decisions, not code; nothing is implemented. Use this skill whenever the user says "brainstorm this", "let's design this first", "think through this feature with me", "spec this out", "I have an idea for", "how should we build", "before we plan this", or "/design-brief" — even if they don't name the skill. Not for a task that already has a clear spec (task-executor), a bug (diagnose), or turning a decided design into tasks (backlog-planner).
What it does
Turn "I have an idea" into a design the team has actually agreed on, written down where the executing skills can read it. The brief records **decisions**, not ideas — a brainstorm that ends without decisions has produced nothing an executor can use. This skill never writes code.
The skill document
Design Brief
Turn "I have an idea" into a design the team has actually agreed on, written down where the executing skills can read it. The brief records decisions, not ideas — a brainstorm that ends without decisions has produced nothing an executor can use. This skill never writes code.
When to use this skill
- "brainstorm this", "let's design this first", "think through this feature with me"
- "spec this out", "I have an idea for …", "how should we build …", "before we plan this"
/design-brieftask-executorclassified a task as architectural, orbacklog-plannerfound the idea undecided — both route here.
Do not auto-trigger when the task already has a clear spec (task-executor), something is broken (diagnose), the friction is in existing code rather than a new feature (improve-codebase-architecture), or the design is decided and only needs splitting into tasks (backlog-planner).
The brief contract
Path: .claude/design-briefs/.md in the project root (create the directory if missing; slug = 2–5 kebab-case words naming the feature). Every brief has these sections, in this order, none omitted — an empty section says none and why:
- Status —
DRAFTorAPPROVED. Only the user's explicit approval flips it. - Intent — one line: "this needs
___so that___", plus how we'll know it worked (an observable signal, not "users are happier"). - Decisions — table: question → decision → why → cost if wrong. Every fork the interview resolved is a row. A decision without a why is a preference, not a decision.
- Scope — in / out, as two lists. "Out" is where the ideas that didn't make the cut live, so they're not lost and not built.
- Interfaces — exact names, signatures, endpoints, tables, events the new work exposes or consumes.
Produces:/Consumes:lines, verbatim-ready forbacklog-planner. - Constraints — project-wide rules that bind every task (version floors, layering rules, platform targets), one line each, values verbatim.
- Precedent — the existing feature this one follows, with
file:line, or "no precedent found — searchedfor". - Considered alternative — present when Design It Twice ran:
— rejected because. - Open questions — must be empty before
APPROVED. An approved brief with open questions is a draft wearing a badge.
Workflow
Before each phase, restate the intent line. If the phase isn't serving it, stop and say so.
Phase 0 — Anchor
- List
.claude/design-briefs/and read the Status and Intent line of every file there. One matches this subject → resume it (list its open questions, continue from there); never start a duplicate under a new slug. - Read
CONTEXT.md/CONTEXT-MAP.mdif present — its terms are canonical; a conflict between the user's words and the glossary is the first thing to resolve. - Write the intent line. Can't fill the "so that" blank from what the user said → that is question #1.
Phase 1 — Read the code before asking
Find the nearest thing that already exists — a sibling feature, entity, endpoint, or screen — and read it end to end. Every answer the code gives is recorded with a file:line citation instead of asked. A claim about code you haven't opened is a hypothesis and is labeled one.
- ❌ "How do you usually handle authorization on endpoints?" — the answer is in
src/middleware/auth.ts; asking wastes a turn and invites a wrong answer. - ✅ "Endpoints here check
requireRole()in the route file (src/routes/orders.ts:14). I'll assume the same unless this one is different — is it?"
Phase 2 — Interview
One question at a time via AskUserQuestion, 2–4 concrete options, recommended pick first. Wait for the answer before the next question.
A question earns its slot only if different answers lead to different designs. Before asking, name to yourself what changes per answer. Nothing changes → don't ask.
- ❌ "Should this be secure and handle errors gracefully?" — every answer is "yes"; nothing forks.
- ✅ "When an order loses priority, do we keep who set it and when?" — "yes" is an audit table, "no" is two columns. The answer picks the schema.
Rules:
- Sharpen fuzzy words. "Account" → customer or user? "Cancel" → soft-delete, hard-delete, or status transition?
- Probe with scenarios. "What happens if they submit twice while the first request is in flight?" Edge cases force precision.
- Surface contradictions with the code. "Your
OrderService.Cancelcancels the whole order (src/services/order.ts:88); you just described partial cancellation. Which wins?" - Record each answer as a Decisions row immediately — with the why the user gave. Ask for the why if they didn't give one.
Topics to cover, skipping any the code or the user already answered: intent · inputs/outputs and error cases · domain entities touched (new vs. extended) · authorization and tenancy · persistence and backfill · side effects (email, queue, audit, cache, webhooks) · concurrency and idempotency · edge cases (empty, max, unicode, timezone, partial failure) · observability.
Exit gate: every topic is answered by the user, answered by code with a citation, or explicitly deferred by the user into Open questions. Stop the moment further questions stop changing the design.
Phase 3 — Design fork gate
Ask: is there a genuine design choice the codebase precedent doesn't already settle? Name the axis in one sentence ("new OrderAuditLog table vs. two columns on Orders"). Can't name it cleanly → no fork → single design, move on. Don't manufacture a fork for ceremony.
Design It Twice (only when the axis is named):
- Send a single message with 2
Agentcalls (general-purpose), each carrying the Decisions table, Phase 1 precedent findings, the axis, and one side to defend: "Draft the best design for your side: files by layer, interfaces, migration if any, test plan by test name, and why it beats the alternative on this codebase — citefile:line. ≤700 words. Do not write files." IfAgentis unavailable, draft both yourself under the same instructions. - Debate inline: 3 things A does better · 3 things B does better · the recommendation in one paragraph, naming the Phase 1/2 evidence that broke the tie.
- The winner becomes the brief; the loser becomes the Considered alternative line.
Phase 4 — Write, present, approve
- Write the brief as
DRAFTwith every section filled. - Present a condensed summary inline (intent, decision count, interfaces, alternative if any, open questions) and ask: approve, change, or drop?
- Approve → set
APPROVED, report the path, and name the next step: one PR-sized change →task-executorwith the brief as its spec; several tasks →backlog-plannerreads the brief and writes the roadmap tasks. Change → back to the phase the change belongs to; re-present. Drop → keep the file asDRAFTwithDropped:under Status — the decisions stay findable. Never edit anAPPROVEDbrief silently — a change after approval is a newDRAFTrevision with the old decision struck through and the new one dated.
A brief-less outcome is valid. If Phase 1–2 show the idea is one change to an existing flow with no fork and no new interface, say so and hand straight to task-executor — the interview was the spec.
Examples
Example 1: Undecided feature
User: "I have an idea — let users pin orders to the top of their list."
Claude: Reads the existing list endpoint and sort logic (src/routes/orders.ts:31), finds no priority concept. Asks whether pinning is per-user or per-order, then whether pin history matters (audit table vs. one column). Names the fork, runs Design It Twice, recommends the single column citing the codebase's other per-user flags. Writes .claude/design-briefs/pin-orders.md, presents the summary, user approves → suggests backlog-planner for the three resulting tasks.
Example 2: Routed in from task-executor
User: "Work on task: move notifications to a queue."
Claude (in task-executor): classifies as architectural → hands here. This skill anchors on the intent, interviews on delivery guarantees, retry, and ordering, writes the brief, gets approval, then task-executor resumes with the brief as its spec.
Anti-patterns
- ❌ Asking the checklist top to bottom regardless of answers — a question whose answer changes nothing is filler.
- ❌ Asking what the code already answers — read the precedent first, cite it, confirm only the deviation.
- ❌ Ending with a list of ideas and no Decisions rows — that's a brainstorm transcript, not a brief; nothing downstream can execute it.
- ❌ Marking
APPROVEDbecause the user said "sounds good" to the summary while Open questions is non-empty. - ❌ Writing code, a migration, or "a quick prototype to check feasibility" — feasibility is a
task-executorspike; this skill ends at the approved file. - ❌ Running Design It Twice on a choice the codebase already made — one precedent slice beats two sub-agent essays.
- ✅ Code read first, forking questions only, decisions with their why, exact interfaces, one approved file, then hand off.
Notes
- Composes with:
task-executor(consumes the brief as its spec; routes architectural tasks here),backlog-planner(turns an approved brief into roadmap tasks),autopilot(consumes anAPPROVEDbrief as its spec; an architectural task without one is a hard stop there — the brief is the route back),think-like-fable(interview rigor). - Briefs are project-scoped and should be git-ignored or committed deliberately — an approved brief committed next to the code is a lightweight ADR.
Related skills
Find why your productivity system keeps failing, then apply the smallest fix — capacity math, bottleneck routing, durable local notes.
Stores durable facts in a categorized, plain-markdown vault on disk, alongside your agent's built-in memory.
Join a video meeting as an AI bot with voice, avatar, and screenshare across four operating modes.
Fetch raw ad creative, app, ranking, and revenue data from AdMapix as structured JSON.
Run Git operations — commits, branches, merges, rebases, conflict resolution, and recovery — with safety rules enforced.
More from dennisrongo
Browse all skillsSurface architectural friction in a codebase and propose **deepening opportunities** — refactors that turn shallow modules into deep ones, informed by the project's `CONTEXT.md` glossary and `docs/adr/` decisions. Walks the codebase with an Explore sub-agent, applies the **deletion test** to suspected pass-through modules, presents a numbered list of candidates with files / problem / solution / benefits, and drops into a grilling loop once the user picks one — naming new concepts into `CONTEXT.md` inline and offering an ADR only when a rejection is load-bearing. Writes no production code. Use this skill whenever the user says "improve architecture", "improve the architecture", "architecture review", "find refactoring opportunities", "find deepening opportunities", "find shallow modules", "make this more testable", "this code is hard to navigate", or invokes `/improve-codebase-architecture` — even if they don't name the skill.
Write and run E2E tests for React Native / Expo apps using Maestro CLI — the open-source tool that drives the **real native app** on an Android emulator or iOS simulator, not a web build. Covers what browser-based e2e (Playwright, Expect, e2e-verify) cannot reach: native components, biometrics, secure storage, push notifications, platform-specific modules. Write YAML flows, run headed for authoring or headless for CI. Scripts currently automate the Android workflow end-to-end (Java + SDK detection, emulator boot, adb reverse); iOS simulator setup requires Xcode + `xcrun simctl` and is documented but not automated by the setup script. Use this skill whenever the user says "test my react native app", "e2e test the mobile app", "write maestro tests", "test the expo app", "automate emulator testing", or "/maestro-mobile-test" — even if they don't name the skill. Not for web apps (e2e-verify), unit/component tests (write-tests with RNTL + Jest), or API contract tests.
Verify a change end-to-end in a real browser, routed by one question — who needs this check to run again? Ephemeral checks run via Expect (millionco/expect) or browser-use (AI agent driving headless Chromium — references/browser-use.md) when installed, else Claude driving the browser directly; regression-critical flows (auth, money, signup, checkout, deletion) get durable Playwright tests under write-tests discipline. Evidence rule either way — an AI-walked flow yields "no issues found in the paths walked" with observations quoted, never "e2e passes". Safety gate: never production, never real user cookies. Use this skill whenever the user says "verify this in the browser", "test it end to end", "test my web app", "e2e test this", "write playwright tests", "run expect", "run browser-use", "smoke test the UI", or "/e2e-verify" — even if they don't name the skill. Not for native mobile (maestro-mobile-test), unit/integration authoring (write-tests), or debugging a failing e2e test (diagno
Pre-commit SQL code review for uncommitted database changes. Detects antipatterns that cause real production incidents — broken TRY/CATCH error handling, swallowed errors, retry patterns without loops, tables missing PK/indexes, type-mismatch truncation, dynamic-SQL injection, NOLOCK in write paths, UPDATE/DELETE without WHERE, hardcoded env values, cross-DB refs, and more (full catalog in the skill body). Reports BLOCKER/WARN/INFO findings with file:line citations and fixes. Never edits SQL. Use this skill whenever the user says "/sql-review", "review my SQL", "review the SQL diff", "lint the SQL", "check my SQL changes", "SQL pre-commit check", "audit my stored proc", or asks about SQL antipatterns in a diff — even if they don't name the skill. Distinct from code-review (general review) — this carries SQL-specific incident patterns.
Scaffold a new Tauri 2 desktop app (Rust backend + TypeScript/React frontend) using a thin-frontend / rich-Rust-backend architecture with modular commands, trait-based platform abstractions, encrypted secrets at rest, single-instance enforcement, a self-hosted updater, and a cross-platform CI matrix. Three modes: full project scaffold, add a Tauri command slice, add a Rust module slice. Use this skill whenever the user says "create a new Tauri app", "scaffold a Tauri 2 project", "new desktop app with Tauri", "Tauri + React project", "add a Tauri command end-to-end", "add a Rust module to my Tauri app", "my Tauri conventions", or "/tauri-2-app" — even if they don't name the skill. Full good-pattern catalog and pitfall list live in the skill body.
Turn a feature idea, conversation context, or rough notes into researched, detailed, dependency-ordered checkbox tasks appended to the project's roadmap/backlog file — exactly the format goal-runner consumes, so a fresh unattended session can execute them. Grounds every task in the actual codebase before writing it (grep/read or Explore scouts; think-like-fable rigor if installed), puts what + done-when on the checkbox line with verified files, acceptance criteria, and a verification command in plain sub-bullets, and labels assumptions. Appends to the existing ROADMAP.md/BACKLOG.md/TODO.md; when none exists it asks once and defaults to ROADMAP.md. Use this skill whenever the user says "add this to the backlog", "add it to the roadmap", "plan these tasks", "break this down into tasks", "capture this as roadmap tasks", "turn these notes into a task list", or "/backlog-planner" — even if they don't name the skill. Not for executing tasks (goal-runner, task-executor, autopilot) — this writ