Design skill
Manually-invoked meta-skill that authors a new designer trait card against design-skill/TEMPLATE.md. Use when the user explicitly asks to author a new design trait, scaffold a new trait card for the designer skill, add a design flavor alongside declarative and deterministic, or run a design-skill walkthrough. Manually invoked only — do not auto-apply on bare 'create a skill' phrasings or unrelated authoring tasks.From its SKILL.md
npx -y skills add yliapis/dotfiles --skill design-skillAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its file declares
Copied from the file, not written here
The file declares its own license as MIT. That is the author’s claim about this one file, and it is not the same thing as the license GitHub reports for the repository, which is listed with the other numbers below.
SKILL.md
15.6 KB, as published. Nobody here has run it
Design Skill
Author a new trait card that conforms to ./TEMPLATE.md. Two motions: mode=walkthrough walks the user through TEMPLATE.md section-by-section (drafting each section's body, prompting for review, advancing); mode=propose takes a trait name and a one-paragraph spec and generates a complete first draft in one shot. Both motions consume TEMPLATE.md at invocation time as the canonical contract; the meta-skill never inlines, paraphrases, or summarizes TEMPLATE.md's body into its own prompt or output.
The deliverable is the new trait card itself — a plain markdown file under the designer skill's traits/ directory, not a standalone skill. By default, the meta-skill writes it to ai-coding/plugins/design-suite/skills/designer/traits/<trait_name>.md inside a dedicated worktree; opt out with persistence=chat for a draft-only run.
When to Invoke
This skill is manually invoked. Apply it only when the user explicitly invokes one of:
design-skill mode=... trait_name=... description="..."(inline-token form).- "author a new
<trait>design trait" - "scaffold a new trait card for the designer skill"
- "add a design flavor alongside declarative and deterministic"
- "run design-skill walkthrough" / "run design-skill propose"
Do not auto-apply on bare "create a skill" phrasings or unrelated authoring tasks. The cost of authoring a new trait is real (it adds a new row to the controller's trait map; future composition will load it); apply only when the user has explicitly asked to scaffold one.
Invocation Contract
Same parsing rules as ../designer/SKILL.md:
- Inline
key=valuetokens win over natural-language back-references. - Lists bracketed and comma-separated; strings with whitespace double-quoted; booleans
true/false; integers bare digits. - Unknown keys abort with
unknown knob: <key>; available knobs: <list>.
Knob Inventory
Required:
trait_name— kebab-case identifier; becomes the card filename (<trait_name>.md) and the trait-map row name. Validation: matches^[a-z][a-z0-9-]*$.description— one-paragraph spec for the trait the new skill models. Required inmode=propose. Inmode=walkthrough, collected during the framing step (round 0) if not pinned at invocation.
Composition:
mode—walkthrough|propose. Defaultwalkthrough.walkthroughruns an interactive section-by-section authoring loop against TEMPLATE.md (one round per section);proposegenerates the full draft in one shot fromdescription.force— boolean. Defaultfalse. Whenfalse, abort if<artifact_path>already exists. Whentrue, overwrite.
Persistence:
persistence—chat|codebase. Defaultcodebase(the artifact IS the deliverable).artifact_path— repo-relative path. Defaultai-coding/plugins/design-suite/skills/designer/traits/<trait_name>.md. Required whenpersistence=codebase; rejected whenpersistence=chat. The default targets the plugin source, never a generated mirror under.cursor/,.claude/, or.opencode/; a card written into a mirror is overwritten or pruned on the nextmake mirrors.use_worktree— boolean. Defaulttruewhenpersistence=codebase; MUST befalsewhenpersistence=chat. Whentrue, the disk write happens inside a dedicated worktree forked from the current branch; the calling working tree is never touched.
Safety:
max_iterations— integer>= 1. Default20. Meaningful only inmode=walkthrough. Hard cap on total rounds (one per TEMPLATE.md section, plus refines).
Knob applicability rejections (any of these abort with an explanatory error before any work begins):
descriptionunset withmode=propose.force=truewithpersistence=chat(no file to overwrite).artifact_pathoruse_worktree=truewithpersistence=chat.max_iterationsset explicitly withmode=propose.
Workflow
- Parse and validate. Extract knobs; apply defaults; run every applicability check from
## Knob Inventoryand## Validation Rules. Abort fast on validation failure with zero filesystem side effects. - Resolve TEMPLATE.md.
Read./TEMPLATE.md in full. Identify its section headers and section order; these become the round structure formode=walkthroughand the slot list formode=propose. If TEMPLATE.md cannot be read, abort withcannot read design-skill/TEMPLATE.md: <path>. - Pre-flight artifact path. When
persistence=codebase, check whether<artifact_path>already exists. If yes andforce=false, abort with<artifact_path> already exists; pass force=true to overwrite, or pick a different trait_name. If no, continue. - Set up persistence. When
persistence=codebaseanduse_worktree=true, rungit worktree addto create a new worktree forked from the current branch and route every subsequent disk write into it. Whenpersistence=codebaseanduse_worktree=false, write directly into the calling working tree (caller has accepted the risk). Whenpersistence=chat, hold draft state in memory only. - Dispatch on
mode:propose: fromtrait_nameanddescription, generate every section of TEMPLATE.md in a single pass. Replace placeholders with concrete content; remove the template's<!-- TEMPLATE FILE -->HTML comment and every italic guidance note. Emit the assembled draft.walkthrough: walk TEMPLATE.md's sections in declared order. For each section:- Read the section's placeholder structure and italic guidance from TEMPLATE.md.
- Draft the section's body (anchored on
trait_name,description, and content drafted in earlier sections). - Present the draft and the running working-document state; prompt the user to review.
- On
accept: apply, advance. - On
refine: take the user's feedback, redraft, re-prompt (round counter still increments per attempt). - On
back: rewind to the named earlier section's last accepted draft; re-enter the loop at the section after. - On
done: exit the loop with the current document. - Evaluate
max_iterations; halt with terminal stateiteration-cap-hitif reached.
- Write the deliverable. When
persistence=codebase, write the assembled card verbatim to<artifact_path>(overwriting only whenforce=true) inside the worktree (whenuse_worktree=true). The HTML template comment and italic guidance notes are stripped before writing. - Emit the report per
## Output Format. Do not merge the worktree branch; do not delete the worktree. Do not edit the controller's trait map (the user adds the row themselves once the new skill is reviewed).
Output Format
A single markdown report with these sections, in order. Omit any section whose body would be empty.
Run Summary
Mode:walkthroughorpropose.Trait name: resolvedtrait_name.Knobs: every resolved knob name and value.Persistence:chat, orcodebaseplus the resolvedartifact_path.Worktree: branch name and absolute path, orn/awhenuse_worktree=falseorpersistence=chat.Counts: rounds run / accepted / refined / backs (only inmode=walkthrough).
Iteration Log
Present this section only in mode=walkthrough. A bullet list with one entry per round, in execution order: round index, section name, choice (accept / refine / back / done), and a one-line summary of what landed.
Final Draft
The assembled traits/<trait_name>.md content, rendered inline as a fenced code block. The reader can copy-paste this verbatim into the canonical path even when persistence=chat.
Persistence Result
Present this section only when persistence=codebase.
Wrote artifact to: absolute path inside the worktree (or in the calling tree whenuse_worktree=false).Worktree path: absolute path, orn/awhenuse_worktree=false.Branch: branch name, orn/a.Diff: a fenced```diffblock containinggit diff <base>..HEAD.
Next Steps
A short bullet list reminding the user of the steps NOT done by this skill:
- Add a row to ../designer/SKILL.md's
## Trait Mappairing<trait_name>with./traits/<trait_name>.md. - Review and merge the worktree branch.
- Run
make mirrorsso the new card reaches the nine project mirrors.
Guardrails
- MUST require explicit invocation (a phrase from
## When to Invoke); MUST NOT auto-apply on bare "create a skill" phrasings or unrelated authoring tasks. - MUST
Read./TEMPLATE.md at invocation time and use it as the canonical contract for the new skill's structure; MUST NOT inline, hard-code, summarize, or paraphrase TEMPLATE.md's body into this skill or the emitted draft. - MUST strip the template's
<!-- TEMPLATE FILE -->HTML comment and every italic guidance note from the emitted draft before writing or rendering. - MUST refuse to overwrite an existing
<artifact_path>unlessforce=true. - MUST keep every disk write inside the worktree when
use_worktree=true; MUST NOT touch the calling working tree's working directory or index. - MUST NOT modify any other file: not the controller's trait map, not other trait cards, not TEMPLATE.md itself. The new card is one new file; everything else is the user's call.
- MUST NOT push, open PRs, merge branches, delete worktrees, create tags, or rebase pre-existing branches.
- MUST validate every knob before any read, write, or worktree creation; abort fast on validation failure with zero filesystem side effects.
- Scope: produce one new
traits/<trait_name>.mdcard against TEMPLATE.md. Out of scope: editing the controller, editing TEMPLATE.md, editing other trait cards, registering the new trait in the controller's map, applying the new trait, or invokingdesign-skillrecursively.
Worked Examples
Example 1: Interactive walkthrough, codebase persistence
design-skill mode=walkthrough trait_name=secure description="Audit a target for security regressions and propose minimal patches that close them" persistence=codebase
Resolved knobs: mode=walkthrough, trait_name=secure, description="Audit a target for ...", persistence=codebase, artifact_path=ai-coding/plugins/design-suite/skills/designer/traits/secure.md, use_worktree=true, force=false, max_iterations=20.
Behavior: the meta-skill reads TEMPLATE.md, creates a worktree forked from the current branch, walks the TEMPLATE.md sections in declared order, prompts the user at each section, and writes the final assembled card to ai-coding/plugins/design-suite/skills/designer/traits/secure.md inside the worktree. Round 0 collects the framing paragraph; rounds 1..N draft each subsequent section. The calling working tree is never touched.
Example 2: One-shot propose, chat persistence (preview)
design-skill mode=propose trait_name=accessible description="Audit a UI target for accessibility regressions (WCAG AA), enumerate violations with severity, and propose minimal changes that bring it back into compliance" persistence=chat
Resolved knobs: mode=propose, trait_name=accessible, description="Audit a UI target for ...", persistence=chat, use_worktree=false, force=false.
Behavior: the meta-skill reads TEMPLATE.md, generates a full draft of traits/accessible.md in one shot from description and the template's section structure, and emits the complete draft inline in ## Final Draft. No filesystem writes; no worktree. Used for previewing what the meta-skill would produce before committing to a persistence=codebase run.
When Not To Use
- Bare "create a skill" phrasings. This skill is manually invoked. If the user has not used a phrase from
## When to Invoke, point them at the right artifact (a new trait card, a hook, a rule, a regular skill) instead of inferring intent. - Editing an existing trait card. This skill scaffolds NEW cards. To change an existing trait, edit its card directly; this skill MUST refuse to overwrite without
force=true. - Authoring a standalone skill. TEMPLATE.md is specific to the design-trait family (When to Invoke → Walkthrough → Worked Example → Deliverable → Validation & Verification → When Not To Use → Principles), and its output is a card the
designerskill loads, not a skill a client discovers on its own. For a standalone skill, see thecreate-skillskill or writeSKILL.mdfrom scratch. - Registering a new trait in the controller. This skill produces the new card only; adding the row to the controller's
## Trait Mapis the user's call. Out of scope on purpose so the card can be reviewed before it goes live. - Recursive scaffolding. This skill MUST NOT invoke itself.
Validation Rules
A valid design-skill invocation MUST satisfy every rule below.
- Required knobs present.
trait_nameis set;descriptionis set inmode=propose. - Trait name shape.
trait_namematches^[a-z][a-z0-9-]*$(kebab-case, lowercase, no leading digit, no underscores). - Mode-description compatibility.
descriptionis required inmode=propose; optional inmode=walkthrough(collected at round 0 if not pinned). - Mode-max_iterations compatibility.
max_iterationsis set only whenmode=walkthrough. - Persistence-path compatibility.
artifact_pathis set if and only ifpersistence=codebase.use_worktree=truerequirespersistence=codebase.force=truerequirespersistence=codebase. - Artifact path repo-relative.
artifact_pathis repo-relative underai-coding/plugins/design-suite/skills/designer/traits/; generated mirrors (.cursor/,.claude/,.opencode/),~/,$HOME, absolute paths outside the repo, and machine-specific home directories are rejected before any read or write. - No clobber without force. When
persistence=codebaseand<artifact_path>already exists, abort unlessforce=true. - Template available. ./TEMPLATE.md is readable from the canonical path before any draft is generated.
- No unknown knobs. Every
key=...token's key is in the knob inventory.
Design-Skill Principles
Frame every meta-skill decision around these. Each is a "do this, not that" choice, not an abstract value.
- TEMPLATE.md is read, not transcribed. The meta-skill
Reads TEMPLATE.md at invocation and uses it as the structural contract; it never copies TEMPLATE.md's body verbatim into its own prompt or its emitted draft. - One file per invocation. The meta-skill produces exactly one new
traits/<trait_name>.md. The controller's trait map, other trait cards, and TEMPLATE.md are out of scope. - No clobber by default. The meta-skill refuses to overwrite an existing skill file unless the caller explicitly opts in via
force=true. - Worktree-first persistence. When the meta-skill writes to disk, it writes inside a dedicated worktree; the calling working tree is never silently mutated.
- The new card must stand on its own. Once generated, the card should be readable end-to-end with no reference back to TEMPLATE.md or the meta-skill; placeholder text and italic guidance notes are stripped at emit time.
- Authoring is the artifact. The deliverable IS the new card (when
persistence=codebase) or its draft (whenpersistence=chat). The skill's report exists to record what was done; the file is what ships.