agentleFS
phahadekphahadek/claude-orchestrator/skills/design/SKILL.md

design

Skill1 starsChanged 3 months agoMITView on GitHub

Run a Design Execution session for a milestone. Loads full project context deterministically (via design-load.mjs), investigates the open questions in each Ready / In-Progress πŸ“ Design and πŸ“‹ Planning task, proposes a thematic execution order for human sign-off, then walks each task one open-question at a time β€” debating trade-offs, locking decisions, updating architecture pages, and filing follow-on πŸ”² Backlog Code tasks. Use when the user says "design", "design session", "let's run a design session for milestone X", "execute the design tasks", or starts a Design Execution session. Requires a grooming manifest in the central config tree (config/projects/<dir>/grooming.json), shared with the /groom skill.

197 other projects use a version of this.

Adopted by

Most recently taken up by

Used with

Projects with it also use banner-design, ui-styling 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.
  • seikaikyoSkill

    banner-design

    Design banners for social media, ads, website heroes, creative assets, and print. Multiple art direction options with optional generated or supplied visuals. Actions: design, create, generate banner. Platforms: Facebook, Twitter/X, LinkedIn, YouTube, Instagram, Google Display, website hero, print. Styles: minimalist, gradient, bold typography, photo-based, illustrated, geometric, retro, glassmorphism, 3D, neon, duotone, editorial, collage.

    Also in 38 projects that use this

  • MicrosoftSkill

    ui-styling

    Guide for the visual style, structure, and shared building blocks used by Semantic Link Labs interactive UI tools (HTML widgets and anywidget-based widgets). Use this when adding a new interactive UI, modifying an existing one, or adding shared visual components.

    Also in 39 projects that use this

  • seikaikyoSkill

    brand

    Brand voice, visual identity, messaging frameworks, asset management, brand consistency. Activate for branded content, tone of voice, marketing assets, brand compliance, style guides.

    Also in 43 projects that use this

  • mayankjain1815-commitsSkill

    infra-audit

    Reads docker-compose, env files, ORM configs, and connection strings to map current infrastructure. Flags missing layers (cache, queue, analytics) based on observed access patterns. Outputs a structured infrastructure manifest.

    Also in 3 projects that use this

  • JetBrainsSkill

    slides

    Create and edit presentation slide decks (`.pptx`) with PptxGenJS and render/validation utilities. Use when tasks involve building a new PowerPoint deck, recreating slides from screenshots/PDFs/reference decks, modifying slide content while preserving editable output, adding charts/diagrams/visuals, or diagnosing layout issues such as overflow, overlaps, and font substitution.

    Also in 42 projects that use this

  • AnthropicSkill

    design-system

    Audit, document, or extend your design system. Use when checking for naming inconsistencies or hardcoded values across components, writing documentation for a component's variants, states, and accessibility notes, or designing a new pattern that fits the existing system.

    Also in 49 projects that use this

The file

Show its rules and text

We split this skill into the rules it gives an agent

24 rules. 0 are common, 13 are distinctive, and 11 are very specific to this project.

  • 0

    Common

    Most of the 174 edited versions we read keep these.

  • 13

    Distinctive

    This author's own choices. Worth a look.

  • 11

    Very specific

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

  • Common
  • Distinctive
  • Very specific
  1. Very specific:

    Read the repo's grooming manifest from the central config tree β€” <config>/projects/<repo-dir>/grooming.json (shared with /groom.

    line 50
  2. Distinctive:

    Never improvise a board id β€” copy it from the board's Notion URL / context.md.

    line 65
  3. Distinctive:

    Run the loader. Do not hand-fetch context pages or task bodies yourself β€” that is the step that gets skipped.

    line 81
  4. Distinctive:

    If it exits non-zero, stop β€” a partial load means a contaminated session.

    line 91
  5. Very specific:

    Read the non-architecture context-page bodies in context/ β€” πŸ—ΊοΈ Project Context, 🧩 Product Design Doc, βš™οΈ Dev Setup & Git, πŸ”­ Future Scope …

    line 118
  6. Very specific:

    Read each task's architecture from design-worklist.json β†’ arch_units, dual-read per arch_source:

    line 129
  7. Distinctive:

    Keep package reads in subagents so the main window stays small β€” same reason as grooming's Step 1b: the procedure must survive context …

    line 183
  8. Very specific:

    If design-worklist.json lists any executable task whose dep_status is blocked, surface it and stop β€” that task isn't actually executable …

    line 186
  9. Very specific:

    Follow reference/presentation.md Β§ Prioritization.

    line 200
  10. Very specific:

    Follow reference/presentation.md Β§ Per-question cadence.

    line 221
  11. Distinctive:

    If body and state disagree, surface the conflict.

    line 235
  12. Distinctive:

    Record cross-task carries structurally, not in prose: If the locked decision constrains or feeds a sibling task (an atomic-apply another …

    line 255
  13. Distinctive:

    Run the pass even when the task feels complete β€” it earns its keep exactly on the tasks that feel done.

    line 304
  14. Very specific:

    No per-task body sign-off β€” the body is the skill's draft, the human reviews it later (when /groom brings it to Ready) or edits the Notion …

    line 369
  15. Very specific:

    After each create, post a 1-line confirmation in chat: _"Filed at πŸ”² Backlog: <title> β€” <new page URL>."_ This is a notice, not a request β€” …

    line 373
  16. Distinctive:

    When every executable Design task for the milestone is at βœ… Done, emit a session summary:

    line 389
  17. Distinctive:

    Follow-on πŸ”² Backlog tasks filed (title + new Notion ID).

    line 395
  18. Distinctive:

    Scope is the target milestone only: Do not touch Design tasks on other boards unless a dependency issue is explicitly identified and the …

    line 414
  19. Distinctive:

    No silent architecture-page or Design-task-body writes: Every arch-page edit and every Design-task status flip is confirmed in chat first.

    line 421
  20. Distinctive:

    Never silently drop a needed capture: When a decision must be recorded and its obvious destination isn't in the pre-loaded context bundle, …

    line 426
  21. Very specific:

    Persist each lock the instant it's signed off: Write to design-state.json before presenting the next question β€” never batch the …

    line 433
  22. Very specific:

    Before inventing an answer another managed project may already have validated, read its arch pages / context.md / code.

    line 450
  23. Very specific:

    Read + Write the whole file).

    line 455
  24. Distinctive:

    After every question is locked, the skill marks the Design task βœ… Done itself β€” its "doneness" is the spec + page edits + filed follow-ons, …

    line 469

β€œCommon” is measured: kept by at least 6 in 10 of the 174 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

Design Execution

Design Execution is the upstream sister to grooming. A πŸ“ Design or πŸ“‹ Planning task arrives with an unresolved decision space; this skill drives that space to a locked spec, applies the spec into the live architecture pages, and files the follow-on Code / Operational / Investigation tasks that /groom will then bring to Ready.

πŸ“ Design / πŸ“‹ Planning  ──/design──▢  πŸ”² Backlog Code  ──/groom──▢  πŸ—‚οΈ Ready  ──implement──▢  βœ… Done

Scope note. Throughout this skill, "Design task" refers to both πŸ“ Design and πŸ“‹ Planning tasks β€” they share the same workflow shape (open questions β†’ locked decisions β†’ follow-on Backlog tasks, with or without architecture-page edits). The skill targets both types and treats them identically. The only material difference in practice: Planning tasks more often have an empty Notion pages affected list (planning produces task sequencing, not architecture lock-ins), which is handled transparently by Step 3.5 (the page-edits loop just iterates a possibly-empty list).

This skill exists because the procedure is load-bearing but routinely improvised: under context pressure a session executing a Design task tends to batch-lock implementation notes mid-discussion, silently widen scope, edit architecture pages without showing the diff, or call a defer a "resolve." The anti-pattern file already prescribes the shape (reference/anti-patterns.md) β€” this skill operationalizes it.

Read reference/anti-patterns.md now β€” those failure modes are the whole reason this skill exists. Read reference/presentation.md before Step 2, and reference/page-edits.md before any architecture-page write in Step 3.


Step 0 β€” Resolve manifest & mode

  1. Read the repo's grooming manifest from the central config tree β€” <config>/projects/<repo-dir>/grooming.json (shared with /groom; resolved via $ORCHESTRATOR_CONFIG_DIR / --config-dir / a host-aware default). If it is missing, stop and tell the human (point them at the /groom skill's reference/manifest.example.json). Do not improvise.
  2. Note architectural_control:
    • full β†’ this skill's default behavior (decide-and-rewrite within the rules).
    • low β†’ propose-and-route mode. The skill drafts the decision and the page edit but does not apply them; instead it routes to the owner via comment / sub-task. Same Step-3 cadence; different terminal step.
  3. Determine the milestone (from the user, e.g. "design M9"). If it isn't yet registered in manifest.milestones (routine right after a new milestone board is created), the loader no longer dead-ends β€” it prints a copy-pasteable entry with the neighbour auto-filled. Add that entry to the manifest, or pass --board <data-source-id> to run immediately and persist the printed snippet afterward. Never improvise a board id β€” copy it from the board's Notion URL / context.md.
  4. Determine mode from the cache dir .skill-cache/design/<milestone>/:
    • absent β†’ fresh design session.
    • present β†’ resume: the loader preserves signed-off question decisions and applied page edits across runs.

Design Execution runs interactively in the main repo on dev β€” never in an ephemeral implementation worktree (the cache must persist; this skill drives the human, it does not ship code). Any implementation triggered by a follow-on Code task is a separate session on its own feature branch, governed by the normal workflow.


Step 1 β€” Deterministic load (the script, not you)

Run the loader. Do not hand-fetch context pages or task bodies yourself β€” that is the step that gets skipped. The script owns it.

node ~/.claude/scripts/design-load.mjs \
  --milestone <M> \
  --repo <repo-root> \
  --env <manifest.notion_env>

If it exits non-zero, stop β€” a partial load means a contaminated session. Report the error.

Internally, the loader no longer hand-fetches the fixed context pages (or a task's architecture) from Notion directly β€” that was flag-blind to the project's archStoreAdopted migration flag and would always treat the Notion pages as canonical even for a migrated project. It instead calls the backend's device-authed GET /api/design-context route once per task, via the sanctioned design-context-client.mjs (same shape of cutover /groom already made β€” see packages/backend/src/routes/designContext.ts), which wraps the same loadDesignContext() the dashboard uses. Do not shell out to Notion directly for context pages or task architecture β€” the route is the sole loader now.

On success it has written, under .skill-cache/design/<milestone>/:

  • context-bundle.json β€” the fixed context pages (bodies in context/), the target milestone board, neighbour boards, and every non-Done πŸ“ Design task (bodies in tasks/).
  • design-worklist.json β€” per executable task: parsed open_questions, pages_affected, depends_on, dep_status (resolved against the board), theme_tags, size, and its dual-read architecture (arch_source + arch_units β€” see below). Plus a blocked list (Design tasks at πŸ”² Backlog that need /groom first, or whose deps aren't ready).
  • design-state.json β€” per-task skeleton (the artifact tracking progress); preserved across resumes. Signed-off open questions and applied page edits survive; new questions in the task body are appended.

Read the non-architecture context-page bodies in context/ β€” πŸ—ΊοΈ Project Context, 🧩 Product Design Doc, βš™οΈ Dev Setup & Git, πŸ”­ Future Scope β€” always populated, regardless of arch_source, since these pages are not migrating into the arch_unit store. Future Scope is always present, but its shape varies by project: a standalone page in some (e.g. polimarket-analyser), a ## Future Scope section of the Master Context page in others (e.g. claude-orchestrator). Either way it is the home for defer-to-future decisions β€” locate it in the loaded bundle before you ever conclude "there's nowhere to put this" (see Β§ the silent-non-capture anti-pattern). Also read the universal task-authoring standard at config/task-writing.md (no longer a Notion context page β€” read it from local disk).

Read each task's architecture from design-worklist.json β†’ arch_units, dual-read per arch_source:

  • arch_source: 'notion' β€” the project has not adopted the arch_unit store; the task's pages_affected resolve against the milestone's fixed Notion architecture pages exactly as before. This is also the branch page-edits.md's Notion diff-then-apply protocol targets.
  • arch_source: 'store' β€” the project has adopted the arch_unit store; arch_units[] carries the store's selected units ({id, title}) β€” the project's active invariants plus, when a pages_affected reference resolves to a store unit, that unit's topic. Fetch a unit's full body with the mcp__orchestrator__architecture_getUnit tool ({id}) before citing it, and this is also the branch whose architecture-page writes go through the arch.* staged-intent surface in page-edits.md, never a Notion edit.

This is non-negotiable: executing a design task without the architectural constraints loaded is how design sessions produce confidently-wrong decisions that cascade through every Code task that consumes them.


Step 1b β€” Investigate (cached, judgment where needed)

Each Design task's open_questions define what needs deciding. Before presenting any question in Step 3, do the read-only investigation it implies:

  • Code reads for any question that turns on what the code actually does. Reuse the package-freshness model: dispatch one Explore subagent per stale/missing package, write digests to .skill-cache/design/<milestone>/code-map.json keyed by package path and stamped with the baseline SHA (same shape as grooming's, but a separate file β€” different question).
  • Live API calls for any question that turns on the shape of an external API. reference/anti-patterns.md warns against locking an external surface from community docs alone; this is the step where that warning binds. Hit the endpoint once, cache the observed shape (.skill-cache/design/<milestone>/api-shapes/), cite the cached shape when presenting the question.
  • Architecture-page reads for any question that touches a load-bearing constraint already locked in an arch page. Cite the page section verbatim when the constraint binds.
  • Cross-project prior-art reads for any question that designs a capability a sister / more-mature managed project may already have solved β€” a backup strategy, a deploy trigger surface, an arch-page structure, a resource-isolation model. Before recommending an invented answer, read that project's arch pages / context.md / code as prior art (the project index in procedures.md lists the managed projects). A validated answer beats an invented one β€” this is among the highest-leverage moves in a design session. Cite what the sister project does when presenting the question.
  • Premise checks on the task body itself. The Open Questions are not the only thing to investigate β€” the facts the body asserts can be stale. A body that says a method/field already exists, that "there's no single target task," that a subset "isn't session-stageable," or any other stated premise, must be verified against current reality, not taken on faith. Falsify before you build on it; a wrong premise silently invalidates every decision layered on top of it.

Keep package reads in subagents so the main window stays small β€” same reason as grooming's Step 1b: the procedure must survive context pressure.

If design-worklist.json lists any executable task whose dep_status is blocked, surface it and stop β€” that task isn't actually executable yet. Same fail-loud posture as /groom.


Step 2 β€” Prioritization proposal

Scale this to the milestone. For a small milestone (≀ ~4 executable tasks) the full thematic-prioritization machinery is usually a no-op β€” collapse it to one line ("N tasks, deps allow any order; proposed order: …, objections?") and move on. Reserve the full grouping-by-theme treatment for milestones large enough that sequencing actually changes the outcome.

Follow reference/presentation.md Β§ Prioritization. In short:

  • Hard rule: depends_on chain. Tasks whose deps aren't Done/Ready appear in a "Blocked" sub-list, not in the executable order.
  • Heuristic axes (not hard rules β€” debate expected):
    1. Theme cohesion β€” group tasks touching the same arch-page area, the same source_root package, or the same downstream Code-task chain. A cluster of decisions lands consistent.
    2. Size balance β€” interleave so the human sees variety, not five 1-question tasks before one 6-question task.
  • Priority tags (πŸ”΄ / 🟑 / 🟒) are a tiebreaker only, not the ordering axis.

Present the proposed order grouped by theme with a one-line rationale per group. End with: "This is the proposed order β€” push back, regroup, or approve." Debate is expected and desired; the human reshuffles freely. Do not move to Step 3 until the order is signed off.


Step 3 β€” Execute one Design task at a time

Follow reference/presentation.md Β§ Per-question cadence.

For the current Design task (in the approved order):

  1. Move task to πŸ”„ In Progress via mcp__claude_ai_Notion__notion-update-page (command: "update_properties"). Confirm in chat. Stamp design-state.json β†’ task entry β†’ moved_to_in_progress_at.
    • Reconcile body-locked decisions before presenting anything. A resumed or reclassified task often already carries locked answers in its body (a LOCKED β†’ marker in Implementation notes, or an "Open questions resolved" row) that the loader seeded into design-state.json as unlocked β€” so it looks fresh when it isn't. Check the body first; for each already-settled question, reconcile it into design-state.json (locked_decision + signed_off_at) and confirm with the human rather than re-litigating it. If body and state disagree, surface the conflict; don't silently pick one.
    • Surface inbound carries. Scan design-state.json for any carry aimed at this task β€” a carries: [{to_task, note}] entry recorded on a sibling task pointing to_task here (Step 3.2). Surface each note before you start; a sibling's earlier lock may already constrain a decision on this task.
  2. For each open question, one at a time, in the order written in the task body:
    • Present the question + the investigation findings from Step 1b + 2–3 viable answers with one-line pros/cons + a recommendation.
    • Invite pushback explicitly. "Where am I wrong? Push back." The session is ready to be wrong; the human is the decider. Iterate as long as the human wants to debate.
    • On explicit sign-off, record the locked decision in design-state.json β†’ open_questions[i].locked_decision + signed_off_at β€” immediately, before you present the next question. The write is load-bearing for resume-safety: a crash mid-task must lose nothing, so never defer the state-writes to finalization (that is a distinct anti-pattern from batch-locking β€” see anti-patterns.md). After each edit, re-read the file to confirm it is still valid JSON (a bad edit once corrupted it). Never batch-lock multiple questions in one message.
    • Record cross-task carries structurally, not in prose. If the locked decision constrains or feeds a sibling task (an atomic-apply another task must honor, a shared hard-block, a cap the sibling enforces), record it as an outbound carry: design-state.json β†’ this task β†’ carries: [{to_task, note}]. That way the constraint travels to the sibling (surfaced at its Step 3.1) instead of living only in this task's locked_decision prose or your head β€” where cross-task threads get dropped. Reach for carries first, not the follow-on task's Dependencies/prose. A constraint threaded into a follow-on body reads as ordering, not as the specific decision the sibling must honor, and it's easy to under-use the field precisely when you're deep in a decision β€” the moment you say "…and that means task X must…" is the cue to write a carry.
  3. Completeness-critic pass β€” mandatory, once every question is signed off, before composing the Implementation notes. Ask the load-bearing question: "What would an implementer of this task's locked spec hit that no open question owns?" Probe deliberately for the gap classes that recur:

    • Durability / failure modes β€” crash, restart, partial write, empty input, the backup / recovery path no question asked about.
    • Dual-read / consumer-set gaps β€” who else reads or writes this surface? A decision made for one consumer can be wrong for a second that no question named.
    • Interaction bugs β€” does the locked spec collide with an existing component (a sweeper, a scheduler, a sibling analyzer, a hot-reload path)?
    • Missing scaffolding β€” a loader, a trigger surface, a deploy step, a config-seed the spec silently assumes.
    • State-mutation granularity β€” for any design that mutates state (a store write, an apply, a supersede, a status flip), probe granularity + atomicity + partial-failure explicitly: per-item or grouped? atomic group or piecemeal? content-idempotent on replay? what state results from a partial failure? The pull is consistently toward finer granularity, atomic group semantics, and content-idempotency β€” surface those before presenting, not after pushback.
    • Unstated premises β€” a fact the spec leans on that no question verified.

    Consume the orchestrator's advisory trace-coverage signal as an aid β€” POST /api/design/:taskId/trace-coverage maps each follow-on Code task's regions

    • this task's acceptance criteria against the locked decisions and flags any output that traces back to no locked decision as a possibly-unasked question. It is advisory, never a gate (no error, no promotion block, no question-count threshold) β€” a clean signal is not evidence the critic ran.

    For each gap, classify and dispose β€” never drop (disposition-don't-drop):

    • fold β†’ it belongs to an existing open question: reopen it, investigate, re-present, re-lock.
    • note β†’ real but already-decided detail: record it in the Implementation notes.
    • file-sibling β†’ a distinct decision needing its own design: file a sibling πŸ“ Design task at πŸ”² Backlog (via Step 3.6's create path).
    • sibling-owned β†’ another task already covers it: note the reference and move on.

    Run the pass even when the task feels complete β€” it earns its keep exactly on the tasks that feel done. Surface the critic's findings + your proposed dispositions to the human and get sign-off before composing the Implementation notes; the human can add gaps or redirect a disposition. Record every candidate's disposition in the durable completeness-disposition store β€” POST /api/design/:taskId/completeness-disposition (one row per critic run: {question, disposition: accepted|dismissed, reason}) β€” never as body prose and never silently dropped.

  4. Once every question for this task is signed off and the completeness-critic pass is dispositioned, compose the Implementation notes for the Design task body:
    • One-paragraph decision summary at the top.
    • An "Open questions resolved" table if there are β‰₯2 questions (the convention from closed Design tasks in the corpus).
    • A "Notion pages updated" list β€” filled in as Step 3.5 progresses.
    • A "Follow-on tasks filed" list β€” filled in as Step 3.6 progresses. Draft inline and show the human before writing to Notion.
  5. For each entry in "Notion pages affected" β€” per reference/page-edits.md, which branches on this task's arch_source (Step 1): a store-sourced task stages arch.* intents against the arch_unit units in arch_units, never a Notion write; a notion-sourced task keeps the diff-then-apply Notion protocol below, unchanged. If the list is empty, don't just skip this step β€” ask the durable-home question explicitly: "where do these locked decisions durably land?" A terse Design task often under-declares its arch home (declares no pages-affected while clearly warranting a Technical Architecture edit); catch that here by default, not by leaning on the completeness-critic to find it. If the answer is a real arch page or arch unit, add it and proceed; if the decisions genuinely live only in the Implementation notes / a follow-on, say so deliberately.
    • notion branch: Fetch the target page via notion-page.mjs (full body, not MCP search).
    • Identify the exact section to amend; quote enough context to disambiguate.
    • Compose the exact addition/edit.
    • Present: "I'm going to update <page title> Β§ <section> β€” append after this anchor / replace these N lines. Diff below. Okay?"
    • On sign-off, apply via notion-update-page. Stamp design-state.json β†’ pages_affected[i].applied_at. Never write to a context page silently.
  6. For each follow-on Code / Operational / Investigation task identified during the design:
    • Pick the Type deliberately (it determines downstream execution β€” see procedures.md Β§ Task types β€” what Ready triggers). Pure code-generation work that does not depend on implementation-time data β†’ πŸ’» Code (so the orchestrator auto-dispatches it once Ready). Work that changes prod/environment state through a sanctioned surface β†’ πŸ”§ Operational; work that diagnoses from live data and files follow-ons β†’ πŸ”Ž Investigation; observational / E2E runs β†’ πŸ§ͺ Testing (an Investigation variant). (πŸ› οΈ Tooling is retired β€” it split into πŸ”§ Operational / πŸ”Ž Investigation.) If a single follow-on mixes dispatchable code-gen with interactive/observational work, file two tasks β€” never bury dispatchable code-gen inside an Operational/Investigation/Testing task, where the orchestrator won't auto-dispatch it.
    • If the decision implies machine enforcement, file the orchestrator-side Code task β€” not just skill/docs. When a locked decision says an invariant should be enforced (a gate, a validation, a write-path check) rather than merely documented, its durable home is orchestrator/backend code β€” the "machine-enforced > skill prose" principle. Scoping the follow-on as Docs/skill-only when the real fix is a backend enforcement point is the exact skill-first scoping of an orchestrator surface trap task-writing.md warns against: scope the owned surface (the orchestrator API / gate / check) first, the skill/UI as its consumer. If in doubt whether the decision needs a machine home, it does β€” file the Code task.
    • Draft the full body inline per config/task-writing.md (Summary / Dependencies / Context / Files paths affected / Acceptance criteria / Implementation notes-placeholder).
    • Create immediately via notion-create-pages with Status = "πŸ”² Backlog". No per-task body sign-off β€” the body is the skill's draft, the human reviews it later (when /groom brings it to Ready) or edits the Notion page directly if a correction is needed sooner. The check-task-status.mjs PreToolUse hook enforces Backlog status on create.
    • After each create, post a 1-line confirmation in chat: "Filed at πŸ”² Backlog: <title> β€” <new page URL>." This is a notice, not a request β€” the user can override after the fact.
    • Record the new page ID in design-state.json β†’ followon_tasks[].
  7. Write the Implementation notes to the Design task body via notion-update-page. Move task β†’ βœ… Done. Confirm in chat. Move to the next Design task. A Design task's "doneness" is the spec being locked, the completeness-critic being dispositioned, the pages being updated, and the follow-on tasks being filed β€” all of which this step has just completed. There is no PR to merge or human review step downstream for the Design task itself; Done means done.

Step 4 β€” Session close

When every executable Design task for the milestone is at βœ… Done, emit a session summary:

  • Tasks closed (title + Notion ID).
  • Architecture / Future Scope pages updated (page title + section + a 1-line diff fingerprint pulled from design-state.json).
  • Follow-on πŸ”² Backlog tasks filed (title + new Notion ID).
  • Suggest next: "Run /groom <M> to bring these Backlog tasks to Ready."

Rules (hard)

See ../_shared/reference/hard-rules.md for the planning-procedure core this skill shares with /groom and /ops (deterministic load, the human as the gate, no silent writes, git -C not cd, and cache/state files via the Edit/Write tool) β€” canonical source packages/backend/src/planning/procedureCore.ts. Design-specific rules below:

  • Source of truth: task definitions are always Notion. Architectural rules and decisions dual-read per arch_source (Step 1) β€” Notion for a project that hasn't adopted the arch_unit store, the store otherwise; never both, never per-page. For implemented detail (DDL, signatures, analyzer specs), the code under source_root wins; on intent/rationale, the resolved architecture source wins.
  • Scope is the target milestone only. Do not touch Design tasks on other boards unless a dependency issue is explicitly identified and the human approves it.
  • Never re-open a βœ… Done or ⏭️ Deferred task by moving it back to In Progress.
  • Never retroactively edit a Design task already at βœ… Done β€” file a sibling Design task instead.
  • Never widen the scope of an in-flight Design task. A surprise during execution = file a sibling Design task at πŸ”² Backlog (and let /groom handle it).
  • No silent architecture-page or Design-task-body writes. Every arch-page edit and every Design-task status flip is confirmed in chat first. Follow-on Code/Operational/Investigation tasks are the exception β€” they are created without per-body sign-off (Backlog status only; the human reviews at groom time or edits in Notion directly).
  • Never silently drop a needed capture. When a decision must be recorded and its obvious destination isn't in the pre-loaded context bundle, you do not get to quietly decide "there's nowhere to put this." Find the destination (Future Scope and the arch pages are always in Notion, trivially searchable β€” the loaded bundle is a convenience, not the boundary of what exists) or surface the gap to the human β€” then capture. A silent non-capture of something explicitly needed is a defect, not a judgment call.
  • Persist each lock the instant it's signed off. Write to design-state.json before presenting the next question β€” never batch the state-writes to finalization. Resume-safety depends on it: a mid-task crash must lose nothing. Re-read the file after each edit to confirm it's still valid JSON.
  • The completeness-critic pass (Step 3) is mandatory, not optional. Run it after every question locks and before composing Implementation notes, even when the task feels done. Dispose every gap it finds (fold / note / file-sibling / sibling-owned) β€” never drop one. The orchestrator's advisory trace-coverage signal feeds this pass as an aid, never a gate; record each candidate's disposition in the durable completeness-disposition store (accepted|dismissed + reason), never as body prose and never silently.
  • Split-don't-trim. A too-large decision space is handled by the file-sibling disposition β€” file sibling Design tasks and carry the questions there β€” never by trimming questions to shrink the set. Question-count is a soft diagnostic (>~6 is a prompt to consider splitting), not a numeric trigger and not wired into size_check.
  • Check sister projects for prior art, and verify the task body's premises. Before inventing an answer another managed project may already have validated, read its arch pages / context.md / code. And investigate the facts the body asserts, not just its open questions β€” a stale premise invalidates everything built on it.
  • Cache/state files are edited with the Edit/Write tool, never a shell script. design-state.json / code-map.json are loader-seeded JSON on disk β€” Edit them (or Read + Write the whole file). Never node _q6lock.cjs && rm … or any cd … && … route; that is what causes the constant permission prompts.
  • Inspect the repo with git -C <repo> …, never cd <repo> && git …. See ../_shared/reference/hard-rules.md for why the cd … && git form prompts every time under Design Execution.
  • No question-bundling. One open question per decision.pickOne intent, one sign-off per question β€” but independent questions can each be staged as their own intent in the same turn; only a question that depends on another still-unresolved one waits.
  • Investigate before deciding. Code reads / API calls / arch-page reads come before presenting a question. "Decide at implementation time" is a defer, not a resolve β€” it becomes an explicit Open Question in the follow-on Code task.
  • The human is the gate for open-question locks and arch-page writes. Even a recommendation that looks obvious waits for explicit sign-off on the question. After every question is locked, the skill marks the Design task βœ… Done itself β€” its "doneness" is the spec + page edits + filed follow-ons, all of which have completed within the session.
  • Follow-on Code tasks always start at πŸ”² Backlog. The check-task-status.mjs hook blocks creation at any other status β€” trying to short-cut is the smell.

See reference/anti-patterns.md for the failure modes these rules prevent.

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.