[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-red-hat-developer-skill-maker":3,"mdc--uh1nlr-key":37,"related-repo-red-hat-developer-skill-maker":3545,"related-org-red-hat-developer-skill-maker":3656},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":12,"stars":26,"repoUrl":27,"updatedAt":28,"license":29,"forks":30,"topics":31,"repo":32,"sourceUrl":35,"mdContent":36},"skill-maker","author and audit agent skills","Create, audit, or consolidate agent skills following the Agent Skills open standard (agentskills.io). Interviews the user relentlessly about intent, scope, and edge cases before drafting. Covers SKILL.md structure, frontmatter, progressive disclosure, description optimization, script bundling, sub-command architecture, setup gates, context systems, and review. Use when the user wants to create a skill, write a skill, build a new skill, make a skill, draft a SKILL.md, or mentions \"skill-maker\". Also use when asked to review a skill, audit a SKILL.md, check why a skill never triggers, improve an existing skill, or fix a skill. Also use when asked to package expertise, workflows, or domain knowledge into a reusable skill. Also use when asked to consolidate skills, merge skills, combine skills, reduce skill count, or refactor multiple skills into one.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},"red-hat-developer","Red Hat Developer","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fred-hat-developer.png","redhat-developer",[13,17,20,23],{"name":14,"slug":15,"type":16},"Documentation","documentation","tag",{"name":18,"slug":19,"type":16},"Plugin Development","plugin-development",{"name":21,"slug":22,"type":16},"Agents","agents",{"name":24,"slug":25,"type":16},"Technical Writing","technical-writing",15,"https:\u002F\u002Fgithub.com\u002Fredhat-developer\u002Frhdh-skill","2026-07-16T06:03:22.991134",null,28,[],{"repoUrl":27,"stars":26,"forks":30,"topics":33,"description":34},[],"Claude Code skill for RHDH plugin lifecycle management","https:\u002F\u002Fgithub.com\u002Fredhat-developer\u002Frhdh-skill\u002Ftree\u002FHEAD\u002Fskills\u002Fskill-maker","---\nname: skill-maker\ndescription: Create, audit, or consolidate agent skills following the Agent Skills open standard (agentskills.io). Interviews the user relentlessly about intent, scope, and edge cases before drafting. Covers SKILL.md structure, frontmatter, progressive disclosure, description optimization, script bundling, sub-command architecture, setup gates, context systems, and review. Use when the user wants to create a skill, write a skill, build a new skill, make a skill, draft a SKILL.md, or mentions \"skill-maker\". Also use when asked to review a skill, audit a SKILL.md, check why a skill never triggers, improve an existing skill, or fix a skill. Also use when asked to package expertise, workflows, or domain knowledge into a reusable skill. Also use when asked to consolidate skills, merge skills, combine skills, reduce skill count, or refactor multiple skills into one.\n---\n\n\u003Cintake>\n\n# Create, Audit, or Consolidate Skills\n\nCreate agent skills following the [Agent Skills open standard](https:\u002F\u002Fagentskills.io\u002Fspecification).\n\nWhat do you need to do?\n\n1. **Audit an existing skill** — Review, improve, or debug a SKILL.md\n2. **Create a new skill** — Interview, draft, and review from scratch\n3. **Consolidate skills** — Merge multiple skills into fewer\n\n**Wait for response before proceeding.**\n\u003C\u002Fintake>\n\n\u003Crouting>\n\n| Response | Workflow |\n|----------|----------|\n| 1, \"audit\", \"review\", \"check\", \"fix\", \"improve\" | Audit Workflow (Step 1–4 in this file) |\n| 2, \"create\", \"write\", \"build\", \"new\", \"draft\" | Phases 1–5 (Interview → Draft → Description → Scripts → Review) in this file |\n| 3, \"consolidate\", \"merge\", \"combine\" | `references\u002Fconsolidation-guide.md` — return to Phase 5 for final checklist |\n\n\u003C\u002Frouting>\n\n## Audit Workflow\n\nUse this workflow when reviewing, improving, or debugging an existing skill.\n\n### Step 1: Locate and read the skill\n\nRead the full SKILL.md and list all files in the skill directory (`references\u002F`, `scripts\u002F`, `templates\u002F`, `assets\u002F`).\n\n### Step 2: Run the audit checklist\n\nCheck each category. Note issues as you go.\n\n**Frontmatter:**\n\n- [ ] `name` matches the directory name, lowercase+hyphens, max 64 chars\n- [ ] `description` is under 1024 chars, non-empty, third person\n- [ ] `description` includes trigger phrases (not just a summary of what the skill does)\n- [ ] `description` covers edge phrasings users would actually say\n\n**Structure:**\n\n- [ ] SKILL.md body is under 500 lines\n- [ ] Essential principles are inline in SKILL.md (not only in a reference file)\n- [ ] All referenced files exist (check every path in the SKILL.md)\n- [ ] References are one level deep (no nested chains: A → B → C)\n\n**Content quality:**\n\n- [ ] No rigid ALWAYS\u002FNEVER rules without reasoning (explain WHY)\n- [ ] No explanations of things the agent already knows from training\n- [ ] Steps are specific and verifiable (not \"handle errors appropriately\")\n- [ ] Success criteria are observable and testable\n- [ ] Examples use fake data where appropriate\n\n**Router pattern** (if applicable):\n\n- [ ] Intake question asks what the user wants before routing\n- [ ] Router table maps commands to reference files\n- [ ] All referenced workflow\u002Freference files exist\n- [ ] Essential principles are in SKILL.md, not only in sub-command references\n- [ ] If skill has multiple semantic sections, consider XML tags for structure (see `references\u002Fxml-structure-guide.md`)\n\n**Scripts** (if present):\n\n- [ ] Scripts have shebangs, `--help`, and structured output\n- [ ] No interactive prompts (all input via flags\u002Fenv\u002Fstdin)\n- [ ] Cross-platform paths (pathlib, no hardcoded separators)\n- [ ] Error messages explain what went wrong and what to do\n\nRead `references\u002Fanti-patterns.md` for the full catalog of common failures.\n\n### Step 3: Generate the report\n\nPresent findings grouped by severity:\n\n1. **Critical** — skill won't trigger or produces wrong output\n2. **Important** — structural issues, missing files, spec violations\n3. **Minor** — style, conciseness, optimization opportunities\n\nFor each finding, state the issue, cite the specific line or section, and recommend a fix.\n\n### Step 4: Offer fixes\n\nAsk the user which findings to fix. Apply changes surgically — don't rewrite sections that aren't broken. Run the Phase 5 review checklist on the modified skill before finishing.\n\n## Phase 1: Interview\n\nInterview the user about every aspect of this skill until reaching shared understanding. Walk down each branch of the design tree, resolving dependencies between decisions one-by-one. For each question, provide your recommended answer.\n\n### Interview cadence\n\nAsk **one question at a time**. Wait for the answer before asking the next. Adapt follow-ups based on what you learn. Each question should provide clear benefit toward building a better skill — cut questions the codebase can answer for you.\n\nIf a question can be answered by exploring the codebase, explore the codebase instead of asking.\n\nFocus areas, roughly in order:\n\n1. **Purpose and audience.** What task does this skill cover? What specific problem does it solve? What does the user do today without it?\n2. **Scope boundaries.** What should this skill NOT do? What adjacent tasks belong to other skills?\n3. **Input\u002Foutput.** What does the user provide? What does the skill produce? Specific formats?\n4. **Edge cases.** What goes wrong? Common mistakes? Gotchas for new users?\n5. **Success criteria.** How do you know the skill worked correctly?\n6. **What can be scripted?** Look for deterministic operations that should be code, not LLM instructions. Scripts are cheaper, faster, and more reliable.\n7. **References needed?** Domain knowledge too large for SKILL.md that should live in separate files?\n8. **Existing patterns.** Similar skills or workflows to draw from? Check the codebase.\n9. **Platform constraints.** macOS, Windows, and Linux? Scripts must handle path separators, temp directories, and shell differences.\n10. **External services and APIs.** Does the skill call external APIs or services? If yes, read `references\u002Fapi-skill-patterns.md` — it covers credential handling, schema discovery, instance-specific values, and error placement.\n\n### Architecture decision tree\n\nAfter the interview questions above, decide the architecture. Most skills are simple — only escalate when the answers demand it.\n\n**Question 1: How many distinct things can a user want to do?**\n\n- One specific thing → **Simple skill** (single SKILL.md, under 200 lines)\n- Multiple things with shared principles → continue to Q2\n\n**Question 2: Is there shared domain knowledge across those operations?**\n\n- No, each operation is self-contained → **Simple skill** (or multiple separate simple skills)\n- Yes, multiple operations share knowledge → **Router skill** (SKILL.md + `references\u002F`)\n\n**Question 3: Does it cover a full lifecycle (build, debug, test, ship)?**\n\n- No → **Router skill** is sufficient\n- Yes → **Domain expertise skill** (exhaustive references, full lifecycle workflows)\n\n| What you're building | Pattern |\n|---|---|\n| \"A skill that commits with a conventional message\" | Simple |\n| \"A skill that manages PRs — create, review, merge, close\" | Router |\n| \"A skill for building and shipping macOS apps\" | Domain expertise |\n| \"A skill that audits other skills\" | Simple (upgrade to Router if it grows) |\n\nFor Router and Domain expertise patterns, also ask:\n\n- **Does the skill need project-level context?** If every command needs the same background, design a context file pattern with a loader script.\n- **Are there mandatory setup gates?** Steps that must pass before any work begins. Gates prevent generic output.\n- **Does behavior vary by task type?** If so, design a register\u002Fmode system that classifies the task first, then loads different references.\n\nRead `references\u002Farchitecture-patterns.md` for implementation details of each pattern.\n\n**Consolidation signal check:** If the interview reveals the new skill overlaps significantly with existing skills (shared scripts, cross-references, linear pipeline), consider consolidating instead of creating. Read `references\u002Fconsolidation-guide.md` for the signals and workflow.\n\nDo not proceed to Phase 2 until the user confirms the scope is complete.\n\n## Phase 2: Draft the SKILL.md\n\nWrite the skill following the spec. Read `references\u002Fspec-guide.md` for the full format reference before drafting.\n\n**Starter templates:** Use `templates\u002Fsimple-skill.md` for single-purpose skills, `templates\u002Frouter-skill.md` for multi-command skills using markdown headings, or `templates\u002Frouter-skill-xml.md` for multi-command skills using XML structure. Copy the template as a starting point, then customize.\n\n### Frontmatter\n\n```yaml\n---\nname: skill-name        # lowercase, hyphens, max 64 chars\ndescription: |           # max 1024 chars — this is the ONLY triggering mechanism\n  What the skill does. Use when [specific triggers].\n  Also use when [additional triggers].\n---\n```\n\nThe description must be slightly \"pushy\" — agents tend to undertrigger. Include both what the skill does AND specific phrases\u002Fcontexts that should activate it.\n\n### Body structure\n\nFollow progressive disclosure — three loading levels:\n\n1. **Metadata** (~100 tokens): `name` and `description` loaded at startup for all skills\n2. **Instructions** (\u003C 500 lines): Full SKILL.md body loaded when skill activates\n3. **Resources** (as needed): `references\u002F`, `scripts\u002F`, `assets\u002F` loaded only when required\n\nKeep the SKILL.md body under 500 lines. If approaching this limit, split domain-specific content into `references\u002F` files with clear pointers about when to read them.\n\n### Deduplication check\n\nBefore writing domain knowledge into a new reference file, check if it already exists in another reference. Shared data (exit criteria, field mappings, workflow rules) must live in exactly one file. New references should point to the existing source — not embed a copy.\n\nCommon trap: a new sub-command reference duplicates tables from an existing reference because it \"needs them for context.\" Instead, add a one-line pointer: \"Load `references\u002Fworkflows.md` for exit criteria per status.\"\n\n**Exception: intentional duplication.** When two sub-commands need the same query pattern but referencing each other would create a transitive loading chain (A → B → C), duplicate the pattern and add a note: \"Same query pattern as X.md Step N — duplicated here to avoid transitive loading.\" This is cheaper than forcing the agent to load an unrelated file.\n\n### Writing patterns\n\n- **Imperative form**: \"Run the command\" not \"You should run the command\"\n- **Explain WHY, not just what**: Avoid rigid ALWAYS\u002FNEVER rules without reasoning. Agents generalize from principles better than from rigid rules. Instead of \"ALWAYS use pdfplumber. NEVER use PyPDF2,\" write \"Use pdfplumber over PyPDF2 — it handles malformed PDFs more gracefully and preserves layout metadata needed for table extraction.\" Principles adapt to edge cases; rigid rules break.\n- **Don't explain what the agent already knows**: Skip basic programming concepts, standard library usage, and well-known tool behavior. Only add context the agent doesn't have — project-specific conventions, non-obvious behavior, domain-specific gotchas. A 30-token code example beats a 150-token explanation of what a library is.\n- **Output templates**: Define exact formats when the output structure matters\n- **Concrete examples**: Show input → output for non-obvious workflows\n- **Gotchas sections**: Common mistakes the agent should avoid\n- **Checklists**: Multi-step workflows with validation gates\n- **Conditional loading**: \"Read `references\u002Fapi-errors.md` if the API returns a non-200 status code\" — not \"see references\u002F for details\"\n- **Absolute bans**: When certain patterns are always wrong, use match-and-refuse lists. \"If you're about to write X, stop and do Y instead.\" More effective than vague \"be careful\" guidance.\n- **Avoid hardcoded thresholds**: Don't write arbitrary numbers as rules (e.g., \"when you have 3+ sub-commands\" or \"if more than 5 issues\") unless the threshold comes from a real constraint (API limit, spec requirement). Instead, describe the signal that triggers the behavior (e.g., \"when you're copying the same text into another sub-command\"). Hardcoded numbers feel authoritative but are usually guesses that don't generalize.\n\nRead `references\u002Fanti-patterns.md` during drafting to avoid known pitfalls.\n\n### XML structure (router and domain expertise skills)\n\nAgents parse XML tags more reliably than markdown headings when a skill has semantically distinct sections (principles, intake, routing, references). XML tags create unambiguous containers; markdown headings blend together in long prompts.\n\nRead `references\u002Fxml-structure-guide.md` for suggested patterns and anti-patterns.\n\n**When XML helps:**\n\n- Skills with an intake question + routing table + essential principles\n- Skills where an agent needs to quickly locate a specific section\n- Skills with inline workflows that need clear start\u002Fend boundaries\n\n**When markdown is enough:**\n\n- Simple skills with a single linear workflow\n- Sequential instructional content (phases, steps) where order matters more than section lookup\n\n### Sub-command router (when applicable)\n\nFor skills with multiple distinct operations, use a router table in SKILL.md.\n\n```xml\n\u003Cintake>\n## What would you like to do?\n\n1. **Craft a feature** — Build end-to-end\n2. **Audit code** — Technical quality checks\n\n**Wait for response before proceeding.**\n\u003C\u002Fintake>\n\n\u003Crouting>\n| Response | Workflow |\n|----------|----------|\n| 1, \"craft\", \"build\" | `references\u002Fcraft.md` |\n| 2, \"audit\", \"check\" | `references\u002Faudit.md` |\n\u003C\u002Frouting>\n```\n\nBack the router with a `scripts\u002Fcommand-metadata.json` as the single source of truth:\n\n```json\n{\n  \"craft\": {\n    \"description\": \"Full build flow. Use when building a new feature end-to-end.\",\n    \"argumentHint\": \"[feature description]\"\n  }\n}\n```\n\n### Setup gates (when applicable)\n\nNon-negotiable checks before any file edits. Gates prevent generic output from missing context.\n\n```markdown\n## Setup (non-optional)\n\n| Gate | Required check | If fail |\n|---|---|---|\n| Context | Project config loaded via `python scripts\u002Fload_context.py` | Run the loader first |\n| Config | Config file exists and is valid | Run `skill-name setup` |\n| Command | Sub-command reference is loaded | Load the reference |\n| Mutation | All gates above pass | Do not edit project files |\n```\n\n### Register\u002Fmode system (when applicable)\n\nWhen behavior varies by task type, classify first, then load different references:\n\n```markdown\n## Register\n\nEvery task is **library** (published, API-stable) or **application** (internal, can break).\nIdentify before acting. Load the matching reference: [references\u002Flibrary.md] or [references\u002Fapplication.md].\n```\n\n### Capability-gating\n\nSteps that depend on optional environment capabilities (browser automation, specific CLI tools) must degrade gracefully:\n\n```markdown\n### Automated Scan (Capability-Gated)\n\nRun the automated scanner when ALL of these are true:\n- The target files exist and are readable\n- The required CLI tool is installed\n\nIf unavailable, state in one line that the step is skipped and why. Do not ask the user to install tooling.\n```\n\n### Structured artifacts as handoffs\n\nWhen one command produces output that another consumes, define the artifact structure explicitly. The producing command's reference defines the format; the consuming command's reference says what it expects:\n\n```markdown\n### Plan Structure\n\n**1. Summary** (2-3 sentences)\n**2. Primary Goal**\n**3. Approach**\n...\n```\n\n### Self-critique loops\n\nFor build\u002Fimplementation commands, mandate inspect-and-fix passes with explicit exit bars:\n\n```markdown\n### Critique and fix loop\n\nAfter the first pass, write a short self-critique and patch. Repeat until no material issues remain:\n1. Does it match the requirements?\n2. Does it pass the [quality test]?\n3. Check every expected scenario.\n4. Check edge cases.\n\nThe exit bar is not \"it works.\" It is: [explicit quality threshold].\n```\n\n## Phase 3: Description Optimization\n\nThe description is the only thing agents see at startup. Read `references\u002Fdescription-guide.md` for the full optimization process.\n\nQuick validation:\n\n1. Write 5 should-trigger queries (different phrasings, including ones that don't name the skill directly)\n2. Write 5 should-not-trigger queries (near-misses that share keywords but need different skills)\n3. Check: would the description correctly distinguish these?\n4. Revise if needed — broaden for missed triggers, narrow for false triggers\n5. Verify under 1024 characters\n\nFor skills with sub-commands, the main description covers the skill broadly. Each sub-command's description in `command-metadata.json` is optimized separately for auto-trigger keyword matching.\n\n## Phase 4: Scripts\n\nRead `references\u002Fscripts-guide.md` for the full guide.\n\n**Bias toward scripts.** Every deterministic operation should be a script, not an instruction. Scripts are cheaper (no LLM tokens), faster (no reasoning), and more reliable (no hallucination).\n\nFor each piece of the skill's workflow, ask: \"Could a script do this?\" If yes, write the script.\n\n**Should be scripts:**\n\n- Validation (input format, required fields, schema compliance)\n- File generation from templates\n- Data extraction and transformation\n- API calls with structured responses\n- Setup and environment checks\n- Output formatting\n- Context loading (read project files, resolve paths, return JSON)\n- Pin\u002Funpin shortcuts (create\u002Fremove command aliases)\n- Cleanup (remove deprecated files after skill updates)\n\n**Should stay as instructions:**\n\n- Deciding between architectural approaches\n- Reviewing code for quality or style\n- Explaining tradeoffs to the user\n- Creative writing or design decisions\n- Interview\u002Fdiscovery conversations\n\nKey patterns:\n\n- **Python without dependencies**: stdlib only, `argparse` for CLI parsing\n- **Python with dependencies**: PEP 723 inline metadata with `uv run`\n- **All scripts**: Structured output (JSON when piped), clear exit codes, descriptive `--help`\n\n### Context loader pattern\n\nFor skills that need project-level context, write a loader script:\n\nThe script should follow all standard patterns: `argparse` with `--help`, structured JSON output (pretty when interactive, compact when piped), clear exit codes (0 = found, 1 = missing), `pathlib` for cross-platform paths, and stdlib-only imports. See the \"Context File System\" section in `references\u002Farchitecture-patterns.md` for a skeleton.\n\nThe SKILL.md references it: \"Load context via `python scripts\u002Fload_context.py`. Consume the full JSON output. Never pipe through `head`, `tail`, or `grep`.\"\n\n## Phase 5: Review\n\nBefore presenting the final skill, verify against this checklist:\n\n### Basics\n\n- [ ] `name` is lowercase, hyphens only, max 64 chars\n- [ ] `description` is under 1024 chars and includes trigger phrases\n- [ ] `description` is slightly pushy — covers edge phrasings that should activate the skill\n- [ ] SKILL.md body is under 500 lines\n- [ ] Instructions use imperative form\n\n### Architecture (if applicable)\n\n- [ ] Sub-commands have a router table with clear routing rules\n- [ ] `command-metadata.json` is the single source of truth for command descriptions\n- [ ] Setup gates are defined with fail actions for each gate\n- [ ] Register\u002Fmode system classifies before loading references\n- [ ] Capability-gated steps degrade gracefully with one-line skip reasons\n- [ ] Router\u002Fdomain skills with distinct sections (intake, routing, principles) consider XML tags for clarity (`references\u002Fxml-structure-guide.md`)\n\n### References\n\n- [ ] Domain knowledge split into `references\u002F` with clear \"when to read\" pointers\n- [ ] Each reference is self-contained — no transitive loading (see `spec-guide.md` → Reference Architecture)\n- [ ] Reference loading is conditional, not eager (\"Read X if Y happens\")\n- [ ] Shared concerns (auth, config) extracted into their own reference, not embedded in a consumer\n- [ ] Error handling lives in the reference for the tool that produces the error\n- [ ] Multi-approach skills include a decision table routing to the correct reference\n- [ ] No browser-only tools referenced (Postman, API consoles, OAuth login pages)\n\n### Scripts\n\n- [ ] Scripts (if any) have shebangs, structured output, and `--help`\n- [ ] Context loader returns JSON, handles missing files, resolves fallback paths\n- [ ] Scripts are cross-platform (pathlib, tempfile, no hardcoded paths)\n- [ ] Scripts are idempotent — safe to re-run\n\n### API\u002FService Skills (if applicable)\n\n- [ ] Credential files are never read into context — passed via shell substitution only\n- [ ] Credential setup is single-sourced in its own reference file\n- [ ] Capability gate checks for credentials before attempting API calls\n- [ ] API schema discovery is documented (OpenAPI download, GraphQL introspection, or live endpoints)\n- [ ] API examples have been validated against the live endpoint\n- [ ] Instance-specific values include programmatic discovery methods\n\n### Consolidation (if merging existing skills)\n\n- [ ] No references to old skill names anywhere in the project (`grep -rn` the entire repo)\n- [ ] Router intake menus are sequentially numbered (no gaps from removed items)\n- [ ] Script docstrings and `--help` text reference the new skill name, not the old ones\n- [ ] Reference paths resolve correctly from each file's location (no `references\u002Freferences\u002F` nesting)\n- [ ] All example files from old skills are represented in the consolidated examples\n- [ ] Scripts in the same skill use consistent patterns (NO_COLOR, shell flags, TTY checks, exit codes)\n- [ ] README, ADRs, and other docs updated to reflect new skill structure\n- [ ] New description covers all trigger phrases from all old skills' descriptions\n\n### Quality\n\n- [ ] No time-sensitive information (URLs to specific versions, dates that will go stale)\n- [ ] Examples use fake data where possible (emails, names, tokens) — see `spec-guide.md` → Fake Data in Examples\n- [ ] Consistent terminology throughout\n- [ ] Concrete examples included for non-obvious workflows\n- [ ] Absolute bans defined for patterns that are always wrong\n- [ ] Self-critique loops defined for build\u002Fimplementation commands with explicit exit bars\n\n\u003Creference_index>\n\n## Reference Index\n\n| Reference | Load when... |\n|-----------|-------------|\n| `references\u002Fspec-guide.md` | Drafting a SKILL.md (Phase 2) — full format reference |\n| `references\u002Fdescription-guide.md` | Optimizing the description (Phase 3) |\n| `references\u002Fscripts-guide.md` | Writing scripts (Phase 4) |\n| `references\u002Fanti-patterns.md` | Drafting or auditing — common failures to avoid |\n| `references\u002Farchitecture-patterns.md` | Choosing between simple, router, and domain expertise patterns |\n| `references\u002Fapi-skill-patterns.md` | Skill calls external APIs or services |\n| `references\u002Fconsolidation-guide.md` | Merging multiple skills into fewer |\n| `references\u002Fxml-structure-guide.md` | Deciding on XML vs markdown structure |\n\n\u003C\u002Freference_index>\n",{"data":38,"body":39},{"name":4,"description":6},{"type":40,"children":41},"root",[42,3539],{"type":43,"tag":44,"props":45,"children":46},"element","intake",{},[47,55,72,77,113,121,199,206,211,218,253,259,264,272,345,353,393,401,450,460,517,527,575,588,594,599,632,637,643,648,654,659,665,677,682,687,798,804,809,817,837,845,877,885,911,985,990,1023,1035,1052,1057,1063,1076,1110,1116,1215,1220,1226,1231,1297,1309,1315,1320,1333,1343,1349,1460,1471,1477,1482,1493,1501,1519,1527,1540,1546,1551,1686,1699,1833,1839,1844,2082,2088,2093,2212,2218,2223,2298,2304,2309,2397,2403,2408,2509,2515,2528,2533,2561,2574,2580,2592,2602,2607,2615,2663,2671,2699,2704,2756,2762,2767,2801,2836,2842,2847,2853,2919,2925,2995,3001,3083,3088,3133,3139,3197,3203,3302,3308,3373,3378,3384,3534],{"type":43,"tag":48,"props":49,"children":51},"h1",{"id":50},"create-audit-or-consolidate-skills",[52],{"type":53,"value":54},"text","Create, Audit, or Consolidate Skills",{"type":43,"tag":56,"props":57,"children":58},"p",{},[59,61,70],{"type":53,"value":60},"Create agent skills following the ",{"type":43,"tag":62,"props":63,"children":67},"a",{"href":64,"rel":65},"https:\u002F\u002Fagentskills.io\u002Fspecification",[66],"nofollow",[68],{"type":53,"value":69},"Agent Skills open standard",{"type":53,"value":71},".",{"type":43,"tag":56,"props":73,"children":74},{},[75],{"type":53,"value":76},"What do you need to do?",{"type":43,"tag":78,"props":79,"children":80},"ol",{},[81,93,103],{"type":43,"tag":82,"props":83,"children":84},"li",{},[85,91],{"type":43,"tag":86,"props":87,"children":88},"strong",{},[89],{"type":53,"value":90},"Audit an existing skill",{"type":53,"value":92}," — Review, improve, or debug a SKILL.md",{"type":43,"tag":82,"props":94,"children":95},{},[96,101],{"type":43,"tag":86,"props":97,"children":98},{},[99],{"type":53,"value":100},"Create a new skill",{"type":53,"value":102}," — Interview, draft, and review from scratch",{"type":43,"tag":82,"props":104,"children":105},{},[106,111],{"type":43,"tag":86,"props":107,"children":108},{},[109],{"type":53,"value":110},"Consolidate skills",{"type":53,"value":112}," — Merge multiple skills into fewer",{"type":43,"tag":56,"props":114,"children":115},{},[116],{"type":43,"tag":86,"props":117,"children":118},{},[119],{"type":53,"value":120},"Wait for response before proceeding.",{"type":43,"tag":122,"props":123,"children":124},"routing",{},[125],{"type":43,"tag":126,"props":127,"children":128},"table",{},[129,148],{"type":43,"tag":130,"props":131,"children":132},"thead",{},[133],{"type":43,"tag":134,"props":135,"children":136},"tr",{},[137,143],{"type":43,"tag":138,"props":139,"children":140},"th",{},[141],{"type":53,"value":142},"Response",{"type":43,"tag":138,"props":144,"children":145},{},[146],{"type":53,"value":147},"Workflow",{"type":43,"tag":149,"props":150,"children":151},"tbody",{},[152,166,179],{"type":43,"tag":134,"props":153,"children":154},{},[155,161],{"type":43,"tag":156,"props":157,"children":158},"td",{},[159],{"type":53,"value":160},"1, \"audit\", \"review\", \"check\", \"fix\", \"improve\"",{"type":43,"tag":156,"props":162,"children":163},{},[164],{"type":53,"value":165},"Audit Workflow (Step 1–4 in this file)",{"type":43,"tag":134,"props":167,"children":168},{},[169,174],{"type":43,"tag":156,"props":170,"children":171},{},[172],{"type":53,"value":173},"2, \"create\", \"write\", \"build\", \"new\", \"draft\"",{"type":43,"tag":156,"props":175,"children":176},{},[177],{"type":53,"value":178},"Phases 1–5 (Interview → Draft → Description → Scripts → Review) in this file",{"type":43,"tag":134,"props":180,"children":181},{},[182,187],{"type":43,"tag":156,"props":183,"children":184},{},[185],{"type":53,"value":186},"3, \"consolidate\", \"merge\", \"combine\"",{"type":43,"tag":156,"props":188,"children":189},{},[190,197],{"type":43,"tag":191,"props":192,"children":194},"code",{"className":193},[],[195],{"type":53,"value":196},"references\u002Fconsolidation-guide.md",{"type":53,"value":198}," — return to Phase 5 for final checklist",{"type":43,"tag":200,"props":201,"children":203},"h2",{"id":202},"audit-workflow",[204],{"type":53,"value":205},"Audit Workflow",{"type":43,"tag":56,"props":207,"children":208},{},[209],{"type":53,"value":210},"Use this workflow when reviewing, improving, or debugging an existing skill.",{"type":43,"tag":212,"props":213,"children":215},"h3",{"id":214},"step-1-locate-and-read-the-skill",[216],{"type":53,"value":217},"Step 1: Locate and read the skill",{"type":43,"tag":56,"props":219,"children":220},{},[221,223,229,231,237,238,244,245,251],{"type":53,"value":222},"Read the full SKILL.md and list all files in the skill directory (",{"type":43,"tag":191,"props":224,"children":226},{"className":225},[],[227],{"type":53,"value":228},"references\u002F",{"type":53,"value":230},", ",{"type":43,"tag":191,"props":232,"children":234},{"className":233},[],[235],{"type":53,"value":236},"scripts\u002F",{"type":53,"value":230},{"type":43,"tag":191,"props":239,"children":241},{"className":240},[],[242],{"type":53,"value":243},"templates\u002F",{"type":53,"value":230},{"type":43,"tag":191,"props":246,"children":248},{"className":247},[],[249],{"type":53,"value":250},"assets\u002F",{"type":53,"value":252},").",{"type":43,"tag":212,"props":254,"children":256},{"id":255},"step-2-run-the-audit-checklist",[257],{"type":53,"value":258},"Step 2: Run the audit checklist",{"type":43,"tag":56,"props":260,"children":261},{},[262],{"type":53,"value":263},"Check each category. Note issues as you go.",{"type":43,"tag":56,"props":265,"children":266},{},[267],{"type":43,"tag":86,"props":268,"children":269},{},[270],{"type":53,"value":271},"Frontmatter:",{"type":43,"tag":273,"props":274,"children":277},"ul",{"className":275},[276],"contains-task-list",[278,299,315,330],{"type":43,"tag":82,"props":279,"children":282},{"className":280},[281],"task-list-item",[283,289,291,297],{"type":43,"tag":284,"props":285,"children":288},"input",{"disabled":286,"type":287},true,"checkbox",[],{"type":53,"value":290}," ",{"type":43,"tag":191,"props":292,"children":294},{"className":293},[],[295],{"type":53,"value":296},"name",{"type":53,"value":298}," matches the directory name, lowercase+hyphens, max 64 chars",{"type":43,"tag":82,"props":300,"children":302},{"className":301},[281],[303,306,307,313],{"type":43,"tag":284,"props":304,"children":305},{"disabled":286,"type":287},[],{"type":53,"value":290},{"type":43,"tag":191,"props":308,"children":310},{"className":309},[],[311],{"type":53,"value":312},"description",{"type":53,"value":314}," is under 1024 chars, non-empty, third person",{"type":43,"tag":82,"props":316,"children":318},{"className":317},[281],[319,322,323,328],{"type":43,"tag":284,"props":320,"children":321},{"disabled":286,"type":287},[],{"type":53,"value":290},{"type":43,"tag":191,"props":324,"children":326},{"className":325},[],[327],{"type":53,"value":312},{"type":53,"value":329}," includes trigger phrases (not just a summary of what the skill does)",{"type":43,"tag":82,"props":331,"children":333},{"className":332},[281],[334,337,338,343],{"type":43,"tag":284,"props":335,"children":336},{"disabled":286,"type":287},[],{"type":53,"value":290},{"type":43,"tag":191,"props":339,"children":341},{"className":340},[],[342],{"type":53,"value":312},{"type":53,"value":344}," covers edge phrasings users would actually say",{"type":43,"tag":56,"props":346,"children":347},{},[348],{"type":43,"tag":86,"props":349,"children":350},{},[351],{"type":53,"value":352},"Structure:",{"type":43,"tag":273,"props":354,"children":356},{"className":355},[276],[357,366,375,384],{"type":43,"tag":82,"props":358,"children":360},{"className":359},[281],[361,364],{"type":43,"tag":284,"props":362,"children":363},{"disabled":286,"type":287},[],{"type":53,"value":365}," SKILL.md body is under 500 lines",{"type":43,"tag":82,"props":367,"children":369},{"className":368},[281],[370,373],{"type":43,"tag":284,"props":371,"children":372},{"disabled":286,"type":287},[],{"type":53,"value":374}," Essential principles are inline in SKILL.md (not only in a reference file)",{"type":43,"tag":82,"props":376,"children":378},{"className":377},[281],[379,382],{"type":43,"tag":284,"props":380,"children":381},{"disabled":286,"type":287},[],{"type":53,"value":383}," All referenced files exist (check every path in the SKILL.md)",{"type":43,"tag":82,"props":385,"children":387},{"className":386},[281],[388,391],{"type":43,"tag":284,"props":389,"children":390},{"disabled":286,"type":287},[],{"type":53,"value":392}," References are one level deep (no nested chains: A → B → C)",{"type":43,"tag":56,"props":394,"children":395},{},[396],{"type":43,"tag":86,"props":397,"children":398},{},[399],{"type":53,"value":400},"Content quality:",{"type":43,"tag":273,"props":402,"children":404},{"className":403},[276],[405,414,423,432,441],{"type":43,"tag":82,"props":406,"children":408},{"className":407},[281],[409,412],{"type":43,"tag":284,"props":410,"children":411},{"disabled":286,"type":287},[],{"type":53,"value":413}," No rigid ALWAYS\u002FNEVER rules without reasoning (explain WHY)",{"type":43,"tag":82,"props":415,"children":417},{"className":416},[281],[418,421],{"type":43,"tag":284,"props":419,"children":420},{"disabled":286,"type":287},[],{"type":53,"value":422}," No explanations of things the agent already knows from training",{"type":43,"tag":82,"props":424,"children":426},{"className":425},[281],[427,430],{"type":43,"tag":284,"props":428,"children":429},{"disabled":286,"type":287},[],{"type":53,"value":431}," Steps are specific and verifiable (not \"handle errors appropriately\")",{"type":43,"tag":82,"props":433,"children":435},{"className":434},[281],[436,439],{"type":43,"tag":284,"props":437,"children":438},{"disabled":286,"type":287},[],{"type":53,"value":440}," Success criteria are observable and testable",{"type":43,"tag":82,"props":442,"children":444},{"className":443},[281],[445,448],{"type":43,"tag":284,"props":446,"children":447},{"disabled":286,"type":287},[],{"type":53,"value":449}," Examples use fake data where appropriate",{"type":43,"tag":56,"props":451,"children":452},{},[453,458],{"type":43,"tag":86,"props":454,"children":455},{},[456],{"type":53,"value":457},"Router pattern",{"type":53,"value":459}," (if applicable):",{"type":43,"tag":273,"props":461,"children":463},{"className":462},[276],[464,473,482,491,500],{"type":43,"tag":82,"props":465,"children":467},{"className":466},[281],[468,471],{"type":43,"tag":284,"props":469,"children":470},{"disabled":286,"type":287},[],{"type":53,"value":472}," Intake question asks what the user wants before routing",{"type":43,"tag":82,"props":474,"children":476},{"className":475},[281],[477,480],{"type":43,"tag":284,"props":478,"children":479},{"disabled":286,"type":287},[],{"type":53,"value":481}," Router table maps commands to reference files",{"type":43,"tag":82,"props":483,"children":485},{"className":484},[281],[486,489],{"type":43,"tag":284,"props":487,"children":488},{"disabled":286,"type":287},[],{"type":53,"value":490}," All referenced workflow\u002Freference files exist",{"type":43,"tag":82,"props":492,"children":494},{"className":493},[281],[495,498],{"type":43,"tag":284,"props":496,"children":497},{"disabled":286,"type":287},[],{"type":53,"value":499}," Essential principles are in SKILL.md, not only in sub-command references",{"type":43,"tag":82,"props":501,"children":503},{"className":502},[281],[504,507,509,515],{"type":43,"tag":284,"props":505,"children":506},{"disabled":286,"type":287},[],{"type":53,"value":508}," If skill has multiple semantic sections, consider XML tags for structure (see ",{"type":43,"tag":191,"props":510,"children":512},{"className":511},[],[513],{"type":53,"value":514},"references\u002Fxml-structure-guide.md",{"type":53,"value":516},")",{"type":43,"tag":56,"props":518,"children":519},{},[520,525],{"type":43,"tag":86,"props":521,"children":522},{},[523],{"type":53,"value":524},"Scripts",{"type":53,"value":526}," (if present):",{"type":43,"tag":273,"props":528,"children":530},{"className":529},[276],[531,548,557,566],{"type":43,"tag":82,"props":532,"children":534},{"className":533},[281],[535,538,540,546],{"type":43,"tag":284,"props":536,"children":537},{"disabled":286,"type":287},[],{"type":53,"value":539}," Scripts have shebangs, ",{"type":43,"tag":191,"props":541,"children":543},{"className":542},[],[544],{"type":53,"value":545},"--help",{"type":53,"value":547},", and structured output",{"type":43,"tag":82,"props":549,"children":551},{"className":550},[281],[552,555],{"type":43,"tag":284,"props":553,"children":554},{"disabled":286,"type":287},[],{"type":53,"value":556}," No interactive prompts (all input via flags\u002Fenv\u002Fstdin)",{"type":43,"tag":82,"props":558,"children":560},{"className":559},[281],[561,564],{"type":43,"tag":284,"props":562,"children":563},{"disabled":286,"type":287},[],{"type":53,"value":565}," Cross-platform paths (pathlib, no hardcoded separators)",{"type":43,"tag":82,"props":567,"children":569},{"className":568},[281],[570,573],{"type":43,"tag":284,"props":571,"children":572},{"disabled":286,"type":287},[],{"type":53,"value":574}," Error messages explain what went wrong and what to do",{"type":43,"tag":56,"props":576,"children":577},{},[578,580,586],{"type":53,"value":579},"Read ",{"type":43,"tag":191,"props":581,"children":583},{"className":582},[],[584],{"type":53,"value":585},"references\u002Fanti-patterns.md",{"type":53,"value":587}," for the full catalog of common failures.",{"type":43,"tag":212,"props":589,"children":591},{"id":590},"step-3-generate-the-report",[592],{"type":53,"value":593},"Step 3: Generate the report",{"type":43,"tag":56,"props":595,"children":596},{},[597],{"type":53,"value":598},"Present findings grouped by severity:",{"type":43,"tag":78,"props":600,"children":601},{},[602,612,622],{"type":43,"tag":82,"props":603,"children":604},{},[605,610],{"type":43,"tag":86,"props":606,"children":607},{},[608],{"type":53,"value":609},"Critical",{"type":53,"value":611}," — skill won't trigger or produces wrong output",{"type":43,"tag":82,"props":613,"children":614},{},[615,620],{"type":43,"tag":86,"props":616,"children":617},{},[618],{"type":53,"value":619},"Important",{"type":53,"value":621}," — structural issues, missing files, spec violations",{"type":43,"tag":82,"props":623,"children":624},{},[625,630],{"type":43,"tag":86,"props":626,"children":627},{},[628],{"type":53,"value":629},"Minor",{"type":53,"value":631}," — style, conciseness, optimization opportunities",{"type":43,"tag":56,"props":633,"children":634},{},[635],{"type":53,"value":636},"For each finding, state the issue, cite the specific line or section, and recommend a fix.",{"type":43,"tag":212,"props":638,"children":640},{"id":639},"step-4-offer-fixes",[641],{"type":53,"value":642},"Step 4: Offer fixes",{"type":43,"tag":56,"props":644,"children":645},{},[646],{"type":53,"value":647},"Ask the user which findings to fix. Apply changes surgically — don't rewrite sections that aren't broken. Run the Phase 5 review checklist on the modified skill before finishing.",{"type":43,"tag":200,"props":649,"children":651},{"id":650},"phase-1-interview",[652],{"type":53,"value":653},"Phase 1: Interview",{"type":43,"tag":56,"props":655,"children":656},{},[657],{"type":53,"value":658},"Interview the user about every aspect of this skill until reaching shared understanding. Walk down each branch of the design tree, resolving dependencies between decisions one-by-one. For each question, provide your recommended answer.",{"type":43,"tag":212,"props":660,"children":662},{"id":661},"interview-cadence",[663],{"type":53,"value":664},"Interview cadence",{"type":43,"tag":56,"props":666,"children":667},{},[668,670,675],{"type":53,"value":669},"Ask ",{"type":43,"tag":86,"props":671,"children":672},{},[673],{"type":53,"value":674},"one question at a time",{"type":53,"value":676},". Wait for the answer before asking the next. Adapt follow-ups based on what you learn. Each question should provide clear benefit toward building a better skill — cut questions the codebase can answer for you.",{"type":43,"tag":56,"props":678,"children":679},{},[680],{"type":53,"value":681},"If a question can be answered by exploring the codebase, explore the codebase instead of asking.",{"type":43,"tag":56,"props":683,"children":684},{},[685],{"type":53,"value":686},"Focus areas, roughly in order:",{"type":43,"tag":78,"props":688,"children":689},{},[690,700,710,720,730,740,750,760,770,780],{"type":43,"tag":82,"props":691,"children":692},{},[693,698],{"type":43,"tag":86,"props":694,"children":695},{},[696],{"type":53,"value":697},"Purpose and audience.",{"type":53,"value":699}," What task does this skill cover? What specific problem does it solve? What does the user do today without it?",{"type":43,"tag":82,"props":701,"children":702},{},[703,708],{"type":43,"tag":86,"props":704,"children":705},{},[706],{"type":53,"value":707},"Scope boundaries.",{"type":53,"value":709}," What should this skill NOT do? What adjacent tasks belong to other skills?",{"type":43,"tag":82,"props":711,"children":712},{},[713,718],{"type":43,"tag":86,"props":714,"children":715},{},[716],{"type":53,"value":717},"Input\u002Foutput.",{"type":53,"value":719}," What does the user provide? What does the skill produce? Specific formats?",{"type":43,"tag":82,"props":721,"children":722},{},[723,728],{"type":43,"tag":86,"props":724,"children":725},{},[726],{"type":53,"value":727},"Edge cases.",{"type":53,"value":729}," What goes wrong? Common mistakes? Gotchas for new users?",{"type":43,"tag":82,"props":731,"children":732},{},[733,738],{"type":43,"tag":86,"props":734,"children":735},{},[736],{"type":53,"value":737},"Success criteria.",{"type":53,"value":739}," How do you know the skill worked correctly?",{"type":43,"tag":82,"props":741,"children":742},{},[743,748],{"type":43,"tag":86,"props":744,"children":745},{},[746],{"type":53,"value":747},"What can be scripted?",{"type":53,"value":749}," Look for deterministic operations that should be code, not LLM instructions. Scripts are cheaper, faster, and more reliable.",{"type":43,"tag":82,"props":751,"children":752},{},[753,758],{"type":43,"tag":86,"props":754,"children":755},{},[756],{"type":53,"value":757},"References needed?",{"type":53,"value":759}," Domain knowledge too large for SKILL.md that should live in separate files?",{"type":43,"tag":82,"props":761,"children":762},{},[763,768],{"type":43,"tag":86,"props":764,"children":765},{},[766],{"type":53,"value":767},"Existing patterns.",{"type":53,"value":769}," Similar skills or workflows to draw from? Check the codebase.",{"type":43,"tag":82,"props":771,"children":772},{},[773,778],{"type":43,"tag":86,"props":774,"children":775},{},[776],{"type":53,"value":777},"Platform constraints.",{"type":53,"value":779}," macOS, Windows, and Linux? Scripts must handle path separators, temp directories, and shell differences.",{"type":43,"tag":82,"props":781,"children":782},{},[783,788,790,796],{"type":43,"tag":86,"props":784,"children":785},{},[786],{"type":53,"value":787},"External services and APIs.",{"type":53,"value":789}," Does the skill call external APIs or services? If yes, read ",{"type":43,"tag":191,"props":791,"children":793},{"className":792},[],[794],{"type":53,"value":795},"references\u002Fapi-skill-patterns.md",{"type":53,"value":797}," — it covers credential handling, schema discovery, instance-specific values, and error placement.",{"type":43,"tag":212,"props":799,"children":801},{"id":800},"architecture-decision-tree",[802],{"type":53,"value":803},"Architecture decision tree",{"type":43,"tag":56,"props":805,"children":806},{},[807],{"type":53,"value":808},"After the interview questions above, decide the architecture. Most skills are simple — only escalate when the answers demand it.",{"type":43,"tag":56,"props":810,"children":811},{},[812],{"type":43,"tag":86,"props":813,"children":814},{},[815],{"type":53,"value":816},"Question 1: How many distinct things can a user want to do?",{"type":43,"tag":273,"props":818,"children":819},{},[820,832],{"type":43,"tag":82,"props":821,"children":822},{},[823,825,830],{"type":53,"value":824},"One specific thing → ",{"type":43,"tag":86,"props":826,"children":827},{},[828],{"type":53,"value":829},"Simple skill",{"type":53,"value":831}," (single SKILL.md, under 200 lines)",{"type":43,"tag":82,"props":833,"children":834},{},[835],{"type":53,"value":836},"Multiple things with shared principles → continue to Q2",{"type":43,"tag":56,"props":838,"children":839},{},[840],{"type":43,"tag":86,"props":841,"children":842},{},[843],{"type":53,"value":844},"Question 2: Is there shared domain knowledge across those operations?",{"type":43,"tag":273,"props":846,"children":847},{},[848,859],{"type":43,"tag":82,"props":849,"children":850},{},[851,853,857],{"type":53,"value":852},"No, each operation is self-contained → ",{"type":43,"tag":86,"props":854,"children":855},{},[856],{"type":53,"value":829},{"type":53,"value":858}," (or multiple separate simple skills)",{"type":43,"tag":82,"props":860,"children":861},{},[862,864,869,871,876],{"type":53,"value":863},"Yes, multiple operations share knowledge → ",{"type":43,"tag":86,"props":865,"children":866},{},[867],{"type":53,"value":868},"Router skill",{"type":53,"value":870}," (SKILL.md + ",{"type":43,"tag":191,"props":872,"children":874},{"className":873},[],[875],{"type":53,"value":228},{"type":53,"value":516},{"type":43,"tag":56,"props":878,"children":879},{},[880],{"type":43,"tag":86,"props":881,"children":882},{},[883],{"type":53,"value":884},"Question 3: Does it cover a full lifecycle (build, debug, test, ship)?",{"type":43,"tag":273,"props":886,"children":887},{},[888,899],{"type":43,"tag":82,"props":889,"children":890},{},[891,893,897],{"type":53,"value":892},"No → ",{"type":43,"tag":86,"props":894,"children":895},{},[896],{"type":53,"value":868},{"type":53,"value":898}," is sufficient",{"type":43,"tag":82,"props":900,"children":901},{},[902,904,909],{"type":53,"value":903},"Yes → ",{"type":43,"tag":86,"props":905,"children":906},{},[907],{"type":53,"value":908},"Domain expertise skill",{"type":53,"value":910}," (exhaustive references, full lifecycle workflows)",{"type":43,"tag":126,"props":912,"children":913},{},[914,930],{"type":43,"tag":130,"props":915,"children":916},{},[917],{"type":43,"tag":134,"props":918,"children":919},{},[920,925],{"type":43,"tag":138,"props":921,"children":922},{},[923],{"type":53,"value":924},"What you're building",{"type":43,"tag":138,"props":926,"children":927},{},[928],{"type":53,"value":929},"Pattern",{"type":43,"tag":149,"props":931,"children":932},{},[933,946,959,972],{"type":43,"tag":134,"props":934,"children":935},{},[936,941],{"type":43,"tag":156,"props":937,"children":938},{},[939],{"type":53,"value":940},"\"A skill that commits with a conventional message\"",{"type":43,"tag":156,"props":942,"children":943},{},[944],{"type":53,"value":945},"Simple",{"type":43,"tag":134,"props":947,"children":948},{},[949,954],{"type":43,"tag":156,"props":950,"children":951},{},[952],{"type":53,"value":953},"\"A skill that manages PRs — create, review, merge, close\"",{"type":43,"tag":156,"props":955,"children":956},{},[957],{"type":53,"value":958},"Router",{"type":43,"tag":134,"props":960,"children":961},{},[962,967],{"type":43,"tag":156,"props":963,"children":964},{},[965],{"type":53,"value":966},"\"A skill for building and shipping macOS apps\"",{"type":43,"tag":156,"props":968,"children":969},{},[970],{"type":53,"value":971},"Domain expertise",{"type":43,"tag":134,"props":973,"children":974},{},[975,980],{"type":43,"tag":156,"props":976,"children":977},{},[978],{"type":53,"value":979},"\"A skill that audits other skills\"",{"type":43,"tag":156,"props":981,"children":982},{},[983],{"type":53,"value":984},"Simple (upgrade to Router if it grows)",{"type":43,"tag":56,"props":986,"children":987},{},[988],{"type":53,"value":989},"For Router and Domain expertise patterns, also ask:",{"type":43,"tag":273,"props":991,"children":992},{},[993,1003,1013],{"type":43,"tag":82,"props":994,"children":995},{},[996,1001],{"type":43,"tag":86,"props":997,"children":998},{},[999],{"type":53,"value":1000},"Does the skill need project-level context?",{"type":53,"value":1002}," If every command needs the same background, design a context file pattern with a loader script.",{"type":43,"tag":82,"props":1004,"children":1005},{},[1006,1011],{"type":43,"tag":86,"props":1007,"children":1008},{},[1009],{"type":53,"value":1010},"Are there mandatory setup gates?",{"type":53,"value":1012}," Steps that must pass before any work begins. Gates prevent generic output.",{"type":43,"tag":82,"props":1014,"children":1015},{},[1016,1021],{"type":43,"tag":86,"props":1017,"children":1018},{},[1019],{"type":53,"value":1020},"Does behavior vary by task type?",{"type":53,"value":1022}," If so, design a register\u002Fmode system that classifies the task first, then loads different references.",{"type":43,"tag":56,"props":1024,"children":1025},{},[1026,1027,1033],{"type":53,"value":579},{"type":43,"tag":191,"props":1028,"children":1030},{"className":1029},[],[1031],{"type":53,"value":1032},"references\u002Farchitecture-patterns.md",{"type":53,"value":1034}," for implementation details of each pattern.",{"type":43,"tag":56,"props":1036,"children":1037},{},[1038,1043,1045,1050],{"type":43,"tag":86,"props":1039,"children":1040},{},[1041],{"type":53,"value":1042},"Consolidation signal check:",{"type":53,"value":1044}," If the interview reveals the new skill overlaps significantly with existing skills (shared scripts, cross-references, linear pipeline), consider consolidating instead of creating. Read ",{"type":43,"tag":191,"props":1046,"children":1048},{"className":1047},[],[1049],{"type":53,"value":196},{"type":53,"value":1051}," for the signals and workflow.",{"type":43,"tag":56,"props":1053,"children":1054},{},[1055],{"type":53,"value":1056},"Do not proceed to Phase 2 until the user confirms the scope is complete.",{"type":43,"tag":200,"props":1058,"children":1060},{"id":1059},"phase-2-draft-the-skillmd",[1061],{"type":53,"value":1062},"Phase 2: Draft the SKILL.md",{"type":43,"tag":56,"props":1064,"children":1065},{},[1066,1068,1074],{"type":53,"value":1067},"Write the skill following the spec. Read ",{"type":43,"tag":191,"props":1069,"children":1071},{"className":1070},[],[1072],{"type":53,"value":1073},"references\u002Fspec-guide.md",{"type":53,"value":1075}," for the full format reference before drafting.",{"type":43,"tag":56,"props":1077,"children":1078},{},[1079,1084,1086,1092,1094,1100,1102,1108],{"type":43,"tag":86,"props":1080,"children":1081},{},[1082],{"type":53,"value":1083},"Starter templates:",{"type":53,"value":1085}," Use ",{"type":43,"tag":191,"props":1087,"children":1089},{"className":1088},[],[1090],{"type":53,"value":1091},"templates\u002Fsimple-skill.md",{"type":53,"value":1093}," for single-purpose skills, ",{"type":43,"tag":191,"props":1095,"children":1097},{"className":1096},[],[1098],{"type":53,"value":1099},"templates\u002Frouter-skill.md",{"type":53,"value":1101}," for multi-command skills using markdown headings, or ",{"type":43,"tag":191,"props":1103,"children":1105},{"className":1104},[],[1106],{"type":53,"value":1107},"templates\u002Frouter-skill-xml.md",{"type":53,"value":1109}," for multi-command skills using XML structure. Copy the template as a starting point, then customize.",{"type":43,"tag":212,"props":1111,"children":1113},{"id":1112},"frontmatter",[1114],{"type":53,"value":1115},"Frontmatter",{"type":43,"tag":1117,"props":1118,"children":1123},"pre",{"className":1119,"code":1120,"language":1121,"meta":1122,"style":1122},"language-yaml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","---\nname: skill-name        # lowercase, hyphens, max 64 chars\ndescription: |           # max 1024 chars — this is the ONLY triggering mechanism\n  What the skill does. Use when [specific triggers].\n  Also use when [additional triggers].\n---\n","yaml","",[1124],{"type":43,"tag":191,"props":1125,"children":1126},{"__ignoreMap":1122},[1127,1139,1166,1189,1198,1207],{"type":43,"tag":1128,"props":1129,"children":1132},"span",{"class":1130,"line":1131},"line",1,[1133],{"type":43,"tag":1128,"props":1134,"children":1136},{"style":1135},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[1137],{"type":53,"value":1138},"---\n",{"type":43,"tag":1128,"props":1140,"children":1142},{"class":1130,"line":1141},2,[1143,1148,1154,1160],{"type":43,"tag":1128,"props":1144,"children":1146},{"style":1145},"--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178",[1147],{"type":53,"value":296},{"type":43,"tag":1128,"props":1149,"children":1151},{"style":1150},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[1152],{"type":53,"value":1153},":",{"type":43,"tag":1128,"props":1155,"children":1157},{"style":1156},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[1158],{"type":53,"value":1159}," skill-name",{"type":43,"tag":1128,"props":1161,"children":1163},{"style":1162},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic",[1164],{"type":53,"value":1165},"        # lowercase, hyphens, max 64 chars\n",{"type":43,"tag":1128,"props":1167,"children":1169},{"class":1130,"line":1168},3,[1170,1174,1178,1184],{"type":43,"tag":1128,"props":1171,"children":1172},{"style":1145},[1173],{"type":53,"value":312},{"type":43,"tag":1128,"props":1175,"children":1176},{"style":1150},[1177],{"type":53,"value":1153},{"type":43,"tag":1128,"props":1179,"children":1181},{"style":1180},"--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic",[1182],{"type":53,"value":1183}," |",{"type":43,"tag":1128,"props":1185,"children":1186},{"style":1162},[1187],{"type":53,"value":1188},"           # max 1024 chars — this is the ONLY triggering mechanism\n",{"type":43,"tag":1128,"props":1190,"children":1192},{"class":1130,"line":1191},4,[1193],{"type":43,"tag":1128,"props":1194,"children":1195},{"style":1156},[1196],{"type":53,"value":1197},"  What the skill does. Use when [specific triggers].\n",{"type":43,"tag":1128,"props":1199,"children":1201},{"class":1130,"line":1200},5,[1202],{"type":43,"tag":1128,"props":1203,"children":1204},{"style":1156},[1205],{"type":53,"value":1206},"  Also use when [additional triggers].\n",{"type":43,"tag":1128,"props":1208,"children":1210},{"class":1130,"line":1209},6,[1211],{"type":43,"tag":1128,"props":1212,"children":1213},{"style":1135},[1214],{"type":53,"value":1138},{"type":43,"tag":56,"props":1216,"children":1217},{},[1218],{"type":53,"value":1219},"The description must be slightly \"pushy\" — agents tend to undertrigger. Include both what the skill does AND specific phrases\u002Fcontexts that should activate it.",{"type":43,"tag":212,"props":1221,"children":1223},{"id":1222},"body-structure",[1224],{"type":53,"value":1225},"Body structure",{"type":43,"tag":56,"props":1227,"children":1228},{},[1229],{"type":53,"value":1230},"Follow progressive disclosure — three loading levels:",{"type":43,"tag":78,"props":1232,"children":1233},{},[1234,1258,1268],{"type":43,"tag":82,"props":1235,"children":1236},{},[1237,1242,1244,1249,1251,1256],{"type":43,"tag":86,"props":1238,"children":1239},{},[1240],{"type":53,"value":1241},"Metadata",{"type":53,"value":1243}," (~100 tokens): ",{"type":43,"tag":191,"props":1245,"children":1247},{"className":1246},[],[1248],{"type":53,"value":296},{"type":53,"value":1250}," and ",{"type":43,"tag":191,"props":1252,"children":1254},{"className":1253},[],[1255],{"type":53,"value":312},{"type":53,"value":1257}," loaded at startup for all skills",{"type":43,"tag":82,"props":1259,"children":1260},{},[1261,1266],{"type":43,"tag":86,"props":1262,"children":1263},{},[1264],{"type":53,"value":1265},"Instructions",{"type":53,"value":1267}," (\u003C 500 lines): Full SKILL.md body loaded when skill activates",{"type":43,"tag":82,"props":1269,"children":1270},{},[1271,1276,1278,1283,1284,1289,1290,1295],{"type":43,"tag":86,"props":1272,"children":1273},{},[1274],{"type":53,"value":1275},"Resources",{"type":53,"value":1277}," (as needed): ",{"type":43,"tag":191,"props":1279,"children":1281},{"className":1280},[],[1282],{"type":53,"value":228},{"type":53,"value":230},{"type":43,"tag":191,"props":1285,"children":1287},{"className":1286},[],[1288],{"type":53,"value":236},{"type":53,"value":230},{"type":43,"tag":191,"props":1291,"children":1293},{"className":1292},[],[1294],{"type":53,"value":250},{"type":53,"value":1296}," loaded only when required",{"type":43,"tag":56,"props":1298,"children":1299},{},[1300,1302,1307],{"type":53,"value":1301},"Keep the SKILL.md body under 500 lines. If approaching this limit, split domain-specific content into ",{"type":43,"tag":191,"props":1303,"children":1305},{"className":1304},[],[1306],{"type":53,"value":228},{"type":53,"value":1308}," files with clear pointers about when to read them.",{"type":43,"tag":212,"props":1310,"children":1312},{"id":1311},"deduplication-check",[1313],{"type":53,"value":1314},"Deduplication check",{"type":43,"tag":56,"props":1316,"children":1317},{},[1318],{"type":53,"value":1319},"Before writing domain knowledge into a new reference file, check if it already exists in another reference. Shared data (exit criteria, field mappings, workflow rules) must live in exactly one file. New references should point to the existing source — not embed a copy.",{"type":43,"tag":56,"props":1321,"children":1322},{},[1323,1325,1331],{"type":53,"value":1324},"Common trap: a new sub-command reference duplicates tables from an existing reference because it \"needs them for context.\" Instead, add a one-line pointer: \"Load ",{"type":43,"tag":191,"props":1326,"children":1328},{"className":1327},[],[1329],{"type":53,"value":1330},"references\u002Fworkflows.md",{"type":53,"value":1332}," for exit criteria per status.\"",{"type":43,"tag":56,"props":1334,"children":1335},{},[1336,1341],{"type":43,"tag":86,"props":1337,"children":1338},{},[1339],{"type":53,"value":1340},"Exception: intentional duplication.",{"type":53,"value":1342}," When two sub-commands need the same query pattern but referencing each other would create a transitive loading chain (A → B → C), duplicate the pattern and add a note: \"Same query pattern as X.md Step N — duplicated here to avoid transitive loading.\" This is cheaper than forcing the agent to load an unrelated file.",{"type":43,"tag":212,"props":1344,"children":1346},{"id":1345},"writing-patterns",[1347],{"type":53,"value":1348},"Writing patterns",{"type":43,"tag":273,"props":1350,"children":1351},{},[1352,1362,1372,1382,1392,1402,1412,1422,1440,1450],{"type":43,"tag":82,"props":1353,"children":1354},{},[1355,1360],{"type":43,"tag":86,"props":1356,"children":1357},{},[1358],{"type":53,"value":1359},"Imperative form",{"type":53,"value":1361},": \"Run the command\" not \"You should run the command\"",{"type":43,"tag":82,"props":1363,"children":1364},{},[1365,1370],{"type":43,"tag":86,"props":1366,"children":1367},{},[1368],{"type":53,"value":1369},"Explain WHY, not just what",{"type":53,"value":1371},": Avoid rigid ALWAYS\u002FNEVER rules without reasoning. Agents generalize from principles better than from rigid rules. Instead of \"ALWAYS use pdfplumber. NEVER use PyPDF2,\" write \"Use pdfplumber over PyPDF2 — it handles malformed PDFs more gracefully and preserves layout metadata needed for table extraction.\" Principles adapt to edge cases; rigid rules break.",{"type":43,"tag":82,"props":1373,"children":1374},{},[1375,1380],{"type":43,"tag":86,"props":1376,"children":1377},{},[1378],{"type":53,"value":1379},"Don't explain what the agent already knows",{"type":53,"value":1381},": Skip basic programming concepts, standard library usage, and well-known tool behavior. Only add context the agent doesn't have — project-specific conventions, non-obvious behavior, domain-specific gotchas. A 30-token code example beats a 150-token explanation of what a library is.",{"type":43,"tag":82,"props":1383,"children":1384},{},[1385,1390],{"type":43,"tag":86,"props":1386,"children":1387},{},[1388],{"type":53,"value":1389},"Output templates",{"type":53,"value":1391},": Define exact formats when the output structure matters",{"type":43,"tag":82,"props":1393,"children":1394},{},[1395,1400],{"type":43,"tag":86,"props":1396,"children":1397},{},[1398],{"type":53,"value":1399},"Concrete examples",{"type":53,"value":1401},": Show input → output for non-obvious workflows",{"type":43,"tag":82,"props":1403,"children":1404},{},[1405,1410],{"type":43,"tag":86,"props":1406,"children":1407},{},[1408],{"type":53,"value":1409},"Gotchas sections",{"type":53,"value":1411},": Common mistakes the agent should avoid",{"type":43,"tag":82,"props":1413,"children":1414},{},[1415,1420],{"type":43,"tag":86,"props":1416,"children":1417},{},[1418],{"type":53,"value":1419},"Checklists",{"type":53,"value":1421},": Multi-step workflows with validation gates",{"type":43,"tag":82,"props":1423,"children":1424},{},[1425,1430,1432,1438],{"type":43,"tag":86,"props":1426,"children":1427},{},[1428],{"type":53,"value":1429},"Conditional loading",{"type":53,"value":1431},": \"Read ",{"type":43,"tag":191,"props":1433,"children":1435},{"className":1434},[],[1436],{"type":53,"value":1437},"references\u002Fapi-errors.md",{"type":53,"value":1439}," if the API returns a non-200 status code\" — not \"see references\u002F for details\"",{"type":43,"tag":82,"props":1441,"children":1442},{},[1443,1448],{"type":43,"tag":86,"props":1444,"children":1445},{},[1446],{"type":53,"value":1447},"Absolute bans",{"type":53,"value":1449},": When certain patterns are always wrong, use match-and-refuse lists. \"If you're about to write X, stop and do Y instead.\" More effective than vague \"be careful\" guidance.",{"type":43,"tag":82,"props":1451,"children":1452},{},[1453,1458],{"type":43,"tag":86,"props":1454,"children":1455},{},[1456],{"type":53,"value":1457},"Avoid hardcoded thresholds",{"type":53,"value":1459},": Don't write arbitrary numbers as rules (e.g., \"when you have 3+ sub-commands\" or \"if more than 5 issues\") unless the threshold comes from a real constraint (API limit, spec requirement). Instead, describe the signal that triggers the behavior (e.g., \"when you're copying the same text into another sub-command\"). Hardcoded numbers feel authoritative but are usually guesses that don't generalize.",{"type":43,"tag":56,"props":1461,"children":1462},{},[1463,1464,1469],{"type":53,"value":579},{"type":43,"tag":191,"props":1465,"children":1467},{"className":1466},[],[1468],{"type":53,"value":585},{"type":53,"value":1470}," during drafting to avoid known pitfalls.",{"type":43,"tag":212,"props":1472,"children":1474},{"id":1473},"xml-structure-router-and-domain-expertise-skills",[1475],{"type":53,"value":1476},"XML structure (router and domain expertise skills)",{"type":43,"tag":56,"props":1478,"children":1479},{},[1480],{"type":53,"value":1481},"Agents parse XML tags more reliably than markdown headings when a skill has semantically distinct sections (principles, intake, routing, references). XML tags create unambiguous containers; markdown headings blend together in long prompts.",{"type":43,"tag":56,"props":1483,"children":1484},{},[1485,1486,1491],{"type":53,"value":579},{"type":43,"tag":191,"props":1487,"children":1489},{"className":1488},[],[1490],{"type":53,"value":514},{"type":53,"value":1492}," for suggested patterns and anti-patterns.",{"type":43,"tag":56,"props":1494,"children":1495},{},[1496],{"type":43,"tag":86,"props":1497,"children":1498},{},[1499],{"type":53,"value":1500},"When XML helps:",{"type":43,"tag":273,"props":1502,"children":1503},{},[1504,1509,1514],{"type":43,"tag":82,"props":1505,"children":1506},{},[1507],{"type":53,"value":1508},"Skills with an intake question + routing table + essential principles",{"type":43,"tag":82,"props":1510,"children":1511},{},[1512],{"type":53,"value":1513},"Skills where an agent needs to quickly locate a specific section",{"type":43,"tag":82,"props":1515,"children":1516},{},[1517],{"type":53,"value":1518},"Skills with inline workflows that need clear start\u002Fend boundaries",{"type":43,"tag":56,"props":1520,"children":1521},{},[1522],{"type":43,"tag":86,"props":1523,"children":1524},{},[1525],{"type":53,"value":1526},"When markdown is enough:",{"type":43,"tag":273,"props":1528,"children":1529},{},[1530,1535],{"type":43,"tag":82,"props":1531,"children":1532},{},[1533],{"type":53,"value":1534},"Simple skills with a single linear workflow",{"type":43,"tag":82,"props":1536,"children":1537},{},[1538],{"type":53,"value":1539},"Sequential instructional content (phases, steps) where order matters more than section lookup",{"type":43,"tag":212,"props":1541,"children":1543},{"id":1542},"sub-command-router-when-applicable",[1544],{"type":53,"value":1545},"Sub-command router (when applicable)",{"type":43,"tag":56,"props":1547,"children":1548},{},[1549],{"type":53,"value":1550},"For skills with multiple distinct operations, use a router table in SKILL.md.",{"type":43,"tag":1117,"props":1552,"children":1556},{"className":1553,"code":1554,"language":1555,"meta":1122,"style":1122},"language-xml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u003Cintake>\n## What would you like to do?\n\n1. **Craft a feature** — Build end-to-end\n2. **Audit code** — Technical quality checks\n\n**Wait for response before proceeding.**\n\u003C\u002Fintake>\n\n\u003Crouting>\n| Response | Workflow |\n|----------|----------|\n| 1, \"craft\", \"build\" | `references\u002Fcraft.md` |\n| 2, \"audit\", \"check\" | `references\u002Faudit.md` |\n\u003C\u002Frouting>\n","xml",[1557],{"type":43,"tag":191,"props":1558,"children":1559},{"__ignoreMap":1122},[1560,1568,1576,1584,1592,1600,1607,1616,1625,1633,1642,1651,1660,1669,1678],{"type":43,"tag":1128,"props":1561,"children":1562},{"class":1130,"line":1131},[1563],{"type":43,"tag":1128,"props":1564,"children":1565},{},[1566],{"type":53,"value":1567},"\u003Cintake>\n",{"type":43,"tag":1128,"props":1569,"children":1570},{"class":1130,"line":1141},[1571],{"type":43,"tag":1128,"props":1572,"children":1573},{},[1574],{"type":53,"value":1575},"## What would you like to do?\n",{"type":43,"tag":1128,"props":1577,"children":1578},{"class":1130,"line":1168},[1579],{"type":43,"tag":1128,"props":1580,"children":1581},{"emptyLinePlaceholder":286},[1582],{"type":53,"value":1583},"\n",{"type":43,"tag":1128,"props":1585,"children":1586},{"class":1130,"line":1191},[1587],{"type":43,"tag":1128,"props":1588,"children":1589},{},[1590],{"type":53,"value":1591},"1. **Craft a feature** — Build end-to-end\n",{"type":43,"tag":1128,"props":1593,"children":1594},{"class":1130,"line":1200},[1595],{"type":43,"tag":1128,"props":1596,"children":1597},{},[1598],{"type":53,"value":1599},"2. **Audit code** — Technical quality checks\n",{"type":43,"tag":1128,"props":1601,"children":1602},{"class":1130,"line":1209},[1603],{"type":43,"tag":1128,"props":1604,"children":1605},{"emptyLinePlaceholder":286},[1606],{"type":53,"value":1583},{"type":43,"tag":1128,"props":1608,"children":1610},{"class":1130,"line":1609},7,[1611],{"type":43,"tag":1128,"props":1612,"children":1613},{},[1614],{"type":53,"value":1615},"**Wait for response before proceeding.**\n",{"type":43,"tag":1128,"props":1617,"children":1619},{"class":1130,"line":1618},8,[1620],{"type":43,"tag":1128,"props":1621,"children":1622},{},[1623],{"type":53,"value":1624},"\u003C\u002Fintake>\n",{"type":43,"tag":1128,"props":1626,"children":1628},{"class":1130,"line":1627},9,[1629],{"type":43,"tag":1128,"props":1630,"children":1631},{"emptyLinePlaceholder":286},[1632],{"type":53,"value":1583},{"type":43,"tag":1128,"props":1634,"children":1636},{"class":1130,"line":1635},10,[1637],{"type":43,"tag":1128,"props":1638,"children":1639},{},[1640],{"type":53,"value":1641},"\u003Crouting>\n",{"type":43,"tag":1128,"props":1643,"children":1645},{"class":1130,"line":1644},11,[1646],{"type":43,"tag":1128,"props":1647,"children":1648},{},[1649],{"type":53,"value":1650},"| Response | Workflow |\n",{"type":43,"tag":1128,"props":1652,"children":1654},{"class":1130,"line":1653},12,[1655],{"type":43,"tag":1128,"props":1656,"children":1657},{},[1658],{"type":53,"value":1659},"|----------|----------|\n",{"type":43,"tag":1128,"props":1661,"children":1663},{"class":1130,"line":1662},13,[1664],{"type":43,"tag":1128,"props":1665,"children":1666},{},[1667],{"type":53,"value":1668},"| 1, \"craft\", \"build\" | `references\u002Fcraft.md` |\n",{"type":43,"tag":1128,"props":1670,"children":1672},{"class":1130,"line":1671},14,[1673],{"type":43,"tag":1128,"props":1674,"children":1675},{},[1676],{"type":53,"value":1677},"| 2, \"audit\", \"check\" | `references\u002Faudit.md` |\n",{"type":43,"tag":1128,"props":1679,"children":1680},{"class":1130,"line":26},[1681],{"type":43,"tag":1128,"props":1682,"children":1683},{},[1684],{"type":53,"value":1685},"\u003C\u002Frouting>\n",{"type":43,"tag":56,"props":1687,"children":1688},{},[1689,1691,1697],{"type":53,"value":1690},"Back the router with a ",{"type":43,"tag":191,"props":1692,"children":1694},{"className":1693},[],[1695],{"type":53,"value":1696},"scripts\u002Fcommand-metadata.json",{"type":53,"value":1698}," as the single source of truth:",{"type":43,"tag":1117,"props":1700,"children":1704},{"className":1701,"code":1702,"language":1703,"meta":1122,"style":1122},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"craft\": {\n    \"description\": \"Full build flow. Use when building a new feature end-to-end.\",\n    \"argumentHint\": \"[feature description]\"\n  }\n}\n","json",[1705],{"type":43,"tag":191,"props":1706,"children":1707},{"__ignoreMap":1122},[1708,1716,1744,1783,1817,1825],{"type":43,"tag":1128,"props":1709,"children":1710},{"class":1130,"line":1131},[1711],{"type":43,"tag":1128,"props":1712,"children":1713},{"style":1150},[1714],{"type":53,"value":1715},"{\n",{"type":43,"tag":1128,"props":1717,"children":1718},{"class":1130,"line":1141},[1719,1724,1730,1735,1739],{"type":43,"tag":1128,"props":1720,"children":1721},{"style":1150},[1722],{"type":53,"value":1723},"  \"",{"type":43,"tag":1128,"props":1725,"children":1727},{"style":1726},"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA",[1728],{"type":53,"value":1729},"craft",{"type":43,"tag":1128,"props":1731,"children":1732},{"style":1150},[1733],{"type":53,"value":1734},"\"",{"type":43,"tag":1128,"props":1736,"children":1737},{"style":1150},[1738],{"type":53,"value":1153},{"type":43,"tag":1128,"props":1740,"children":1741},{"style":1150},[1742],{"type":53,"value":1743}," {\n",{"type":43,"tag":1128,"props":1745,"children":1746},{"class":1130,"line":1168},[1747,1752,1756,1760,1764,1769,1774,1778],{"type":43,"tag":1128,"props":1748,"children":1749},{"style":1150},[1750],{"type":53,"value":1751},"    \"",{"type":43,"tag":1128,"props":1753,"children":1754},{"style":1135},[1755],{"type":53,"value":312},{"type":43,"tag":1128,"props":1757,"children":1758},{"style":1150},[1759],{"type":53,"value":1734},{"type":43,"tag":1128,"props":1761,"children":1762},{"style":1150},[1763],{"type":53,"value":1153},{"type":43,"tag":1128,"props":1765,"children":1766},{"style":1150},[1767],{"type":53,"value":1768}," \"",{"type":43,"tag":1128,"props":1770,"children":1771},{"style":1156},[1772],{"type":53,"value":1773},"Full build flow. Use when building a new feature end-to-end.",{"type":43,"tag":1128,"props":1775,"children":1776},{"style":1150},[1777],{"type":53,"value":1734},{"type":43,"tag":1128,"props":1779,"children":1780},{"style":1150},[1781],{"type":53,"value":1782},",\n",{"type":43,"tag":1128,"props":1784,"children":1785},{"class":1130,"line":1191},[1786,1790,1795,1799,1803,1807,1812],{"type":43,"tag":1128,"props":1787,"children":1788},{"style":1150},[1789],{"type":53,"value":1751},{"type":43,"tag":1128,"props":1791,"children":1792},{"style":1135},[1793],{"type":53,"value":1794},"argumentHint",{"type":43,"tag":1128,"props":1796,"children":1797},{"style":1150},[1798],{"type":53,"value":1734},{"type":43,"tag":1128,"props":1800,"children":1801},{"style":1150},[1802],{"type":53,"value":1153},{"type":43,"tag":1128,"props":1804,"children":1805},{"style":1150},[1806],{"type":53,"value":1768},{"type":43,"tag":1128,"props":1808,"children":1809},{"style":1156},[1810],{"type":53,"value":1811},"[feature description]",{"type":43,"tag":1128,"props":1813,"children":1814},{"style":1150},[1815],{"type":53,"value":1816},"\"\n",{"type":43,"tag":1128,"props":1818,"children":1819},{"class":1130,"line":1200},[1820],{"type":43,"tag":1128,"props":1821,"children":1822},{"style":1150},[1823],{"type":53,"value":1824},"  }\n",{"type":43,"tag":1128,"props":1826,"children":1827},{"class":1130,"line":1209},[1828],{"type":43,"tag":1128,"props":1829,"children":1830},{"style":1150},[1831],{"type":53,"value":1832},"}\n",{"type":43,"tag":212,"props":1834,"children":1836},{"id":1835},"setup-gates-when-applicable",[1837],{"type":53,"value":1838},"Setup gates (when applicable)",{"type":43,"tag":56,"props":1840,"children":1841},{},[1842],{"type":53,"value":1843},"Non-negotiable checks before any file edits. Gates prevent generic output from missing context.",{"type":43,"tag":1117,"props":1845,"children":1849},{"className":1846,"code":1847,"language":1848,"meta":1122,"style":1122},"language-markdown shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","## Setup (non-optional)\n\n| Gate | Required check | If fail |\n|---|---|---|\n| Context | Project config loaded via `python scripts\u002Fload_context.py` | Run the loader first |\n| Config | Config file exists and is valid | Run `skill-name setup` |\n| Command | Sub-command reference is loaded | Load the reference |\n| Mutation | All gates above pass | Do not edit project files |\n","markdown",[1850],{"type":43,"tag":191,"props":1851,"children":1852},{"__ignoreMap":1122},[1853,1866,1873,1910,1918,1966,2014,2048],{"type":43,"tag":1128,"props":1854,"children":1855},{"class":1130,"line":1131},[1856,1861],{"type":43,"tag":1128,"props":1857,"children":1858},{"style":1150},[1859],{"type":53,"value":1860},"## ",{"type":43,"tag":1128,"props":1862,"children":1863},{"style":1135},[1864],{"type":53,"value":1865},"Setup (non-optional)\n",{"type":43,"tag":1128,"props":1867,"children":1868},{"class":1130,"line":1141},[1869],{"type":43,"tag":1128,"props":1870,"children":1871},{"emptyLinePlaceholder":286},[1872],{"type":53,"value":1583},{"type":43,"tag":1128,"props":1874,"children":1875},{"class":1130,"line":1168},[1876,1881,1887,1891,1896,1900,1905],{"type":43,"tag":1128,"props":1877,"children":1878},{"style":1150},[1879],{"type":53,"value":1880},"|",{"type":43,"tag":1128,"props":1882,"children":1884},{"style":1883},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[1885],{"type":53,"value":1886}," Gate ",{"type":43,"tag":1128,"props":1888,"children":1889},{"style":1150},[1890],{"type":53,"value":1880},{"type":43,"tag":1128,"props":1892,"children":1893},{"style":1883},[1894],{"type":53,"value":1895}," Required check ",{"type":43,"tag":1128,"props":1897,"children":1898},{"style":1150},[1899],{"type":53,"value":1880},{"type":43,"tag":1128,"props":1901,"children":1902},{"style":1883},[1903],{"type":53,"value":1904}," If fail ",{"type":43,"tag":1128,"props":1906,"children":1907},{"style":1150},[1908],{"type":53,"value":1909},"|\n",{"type":43,"tag":1128,"props":1911,"children":1912},{"class":1130,"line":1191},[1913],{"type":43,"tag":1128,"props":1914,"children":1915},{"style":1150},[1916],{"type":53,"value":1917},"|---|---|---|\n",{"type":43,"tag":1128,"props":1919,"children":1920},{"class":1130,"line":1200},[1921,1925,1930,1934,1939,1944,1949,1953,1957,1962],{"type":43,"tag":1128,"props":1922,"children":1923},{"style":1150},[1924],{"type":53,"value":1880},{"type":43,"tag":1128,"props":1926,"children":1927},{"style":1883},[1928],{"type":53,"value":1929}," Context ",{"type":43,"tag":1128,"props":1931,"children":1932},{"style":1150},[1933],{"type":53,"value":1880},{"type":43,"tag":1128,"props":1935,"children":1936},{"style":1883},[1937],{"type":53,"value":1938}," Project config loaded via ",{"type":43,"tag":1128,"props":1940,"children":1941},{"style":1150},[1942],{"type":53,"value":1943},"`",{"type":43,"tag":1128,"props":1945,"children":1946},{"style":1156},[1947],{"type":53,"value":1948},"python scripts\u002Fload_context.py",{"type":43,"tag":1128,"props":1950,"children":1951},{"style":1150},[1952],{"type":53,"value":1943},{"type":43,"tag":1128,"props":1954,"children":1955},{"style":1150},[1956],{"type":53,"value":1183},{"type":43,"tag":1128,"props":1958,"children":1959},{"style":1883},[1960],{"type":53,"value":1961}," Run the loader first ",{"type":43,"tag":1128,"props":1963,"children":1964},{"style":1150},[1965],{"type":53,"value":1909},{"type":43,"tag":1128,"props":1967,"children":1968},{"class":1130,"line":1209},[1969,1973,1978,1982,1987,1991,1996,2000,2005,2009],{"type":43,"tag":1128,"props":1970,"children":1971},{"style":1150},[1972],{"type":53,"value":1880},{"type":43,"tag":1128,"props":1974,"children":1975},{"style":1883},[1976],{"type":53,"value":1977}," Config ",{"type":43,"tag":1128,"props":1979,"children":1980},{"style":1150},[1981],{"type":53,"value":1880},{"type":43,"tag":1128,"props":1983,"children":1984},{"style":1883},[1985],{"type":53,"value":1986}," Config file exists and is valid ",{"type":43,"tag":1128,"props":1988,"children":1989},{"style":1150},[1990],{"type":53,"value":1880},{"type":43,"tag":1128,"props":1992,"children":1993},{"style":1883},[1994],{"type":53,"value":1995}," Run ",{"type":43,"tag":1128,"props":1997,"children":1998},{"style":1150},[1999],{"type":53,"value":1943},{"type":43,"tag":1128,"props":2001,"children":2002},{"style":1156},[2003],{"type":53,"value":2004},"skill-name setup",{"type":43,"tag":1128,"props":2006,"children":2007},{"style":1150},[2008],{"type":53,"value":1943},{"type":43,"tag":1128,"props":2010,"children":2011},{"style":1150},[2012],{"type":53,"value":2013}," |\n",{"type":43,"tag":1128,"props":2015,"children":2016},{"class":1130,"line":1609},[2017,2021,2026,2030,2035,2039,2044],{"type":43,"tag":1128,"props":2018,"children":2019},{"style":1150},[2020],{"type":53,"value":1880},{"type":43,"tag":1128,"props":2022,"children":2023},{"style":1883},[2024],{"type":53,"value":2025}," Command ",{"type":43,"tag":1128,"props":2027,"children":2028},{"style":1150},[2029],{"type":53,"value":1880},{"type":43,"tag":1128,"props":2031,"children":2032},{"style":1883},[2033],{"type":53,"value":2034}," Sub-command reference is loaded ",{"type":43,"tag":1128,"props":2036,"children":2037},{"style":1150},[2038],{"type":53,"value":1880},{"type":43,"tag":1128,"props":2040,"children":2041},{"style":1883},[2042],{"type":53,"value":2043}," Load the reference ",{"type":43,"tag":1128,"props":2045,"children":2046},{"style":1150},[2047],{"type":53,"value":1909},{"type":43,"tag":1128,"props":2049,"children":2050},{"class":1130,"line":1618},[2051,2055,2060,2064,2069,2073,2078],{"type":43,"tag":1128,"props":2052,"children":2053},{"style":1150},[2054],{"type":53,"value":1880},{"type":43,"tag":1128,"props":2056,"children":2057},{"style":1883},[2058],{"type":53,"value":2059}," Mutation ",{"type":43,"tag":1128,"props":2061,"children":2062},{"style":1150},[2063],{"type":53,"value":1880},{"type":43,"tag":1128,"props":2065,"children":2066},{"style":1883},[2067],{"type":53,"value":2068}," All gates above pass ",{"type":43,"tag":1128,"props":2070,"children":2071},{"style":1150},[2072],{"type":53,"value":1880},{"type":43,"tag":1128,"props":2074,"children":2075},{"style":1883},[2076],{"type":53,"value":2077}," Do not edit project files ",{"type":43,"tag":1128,"props":2079,"children":2080},{"style":1150},[2081],{"type":53,"value":1909},{"type":43,"tag":212,"props":2083,"children":2085},{"id":2084},"registermode-system-when-applicable",[2086],{"type":53,"value":2087},"Register\u002Fmode system (when applicable)",{"type":43,"tag":56,"props":2089,"children":2090},{},[2091],{"type":53,"value":2092},"When behavior varies by task type, classify first, then load different references:",{"type":43,"tag":1117,"props":2094,"children":2096},{"className":1846,"code":2095,"language":1848,"meta":1122,"style":1122},"## Register\n\nEvery task is **library** (published, API-stable) or **application** (internal, can break).\nIdentify before acting. Load the matching reference: [references\u002Flibrary.md] or [references\u002Fapplication.md].\n",[2097],{"type":43,"tag":191,"props":2098,"children":2099},{"__ignoreMap":1122},[2100,2112,2119,2166],{"type":43,"tag":1128,"props":2101,"children":2102},{"class":1130,"line":1131},[2103,2107],{"type":43,"tag":1128,"props":2104,"children":2105},{"style":1150},[2106],{"type":53,"value":1860},{"type":43,"tag":1128,"props":2108,"children":2109},{"style":1135},[2110],{"type":53,"value":2111},"Register\n",{"type":43,"tag":1128,"props":2113,"children":2114},{"class":1130,"line":1141},[2115],{"type":43,"tag":1128,"props":2116,"children":2117},{"emptyLinePlaceholder":286},[2118],{"type":53,"value":1583},{"type":43,"tag":1128,"props":2120,"children":2121},{"class":1130,"line":1168},[2122,2127,2133,2139,2143,2148,2152,2157,2161],{"type":43,"tag":1128,"props":2123,"children":2124},{"style":1883},[2125],{"type":53,"value":2126},"Every task is ",{"type":43,"tag":1128,"props":2128,"children":2130},{"style":2129},"--shiki-light:#39ADB5;--shiki-light-font-weight:bold;--shiki-default:#89DDFF;--shiki-default-font-weight:bold;--shiki-dark:#89DDFF;--shiki-dark-font-weight:bold",[2131],{"type":53,"value":2132},"**",{"type":43,"tag":1128,"props":2134,"children":2136},{"style":2135},"--shiki-light:#E53935;--shiki-light-font-weight:bold;--shiki-default:#F07178;--shiki-default-font-weight:bold;--shiki-dark:#F07178;--shiki-dark-font-weight:bold",[2137],{"type":53,"value":2138},"library",{"type":43,"tag":1128,"props":2140,"children":2141},{"style":2129},[2142],{"type":53,"value":2132},{"type":43,"tag":1128,"props":2144,"children":2145},{"style":1883},[2146],{"type":53,"value":2147}," (published, API-stable) or ",{"type":43,"tag":1128,"props":2149,"children":2150},{"style":2129},[2151],{"type":53,"value":2132},{"type":43,"tag":1128,"props":2153,"children":2154},{"style":2135},[2155],{"type":53,"value":2156},"application",{"type":43,"tag":1128,"props":2158,"children":2159},{"style":2129},[2160],{"type":53,"value":2132},{"type":43,"tag":1128,"props":2162,"children":2163},{"style":1883},[2164],{"type":53,"value":2165}," (internal, can break).\n",{"type":43,"tag":1128,"props":2167,"children":2168},{"class":1130,"line":1191},[2169,2174,2179,2184,2189,2194,2198,2203,2207],{"type":43,"tag":1128,"props":2170,"children":2171},{"style":1883},[2172],{"type":53,"value":2173},"Identify before acting. Load the matching reference: ",{"type":43,"tag":1128,"props":2175,"children":2176},{"style":1150},[2177],{"type":53,"value":2178},"[",{"type":43,"tag":1128,"props":2180,"children":2181},{"style":1156},[2182],{"type":53,"value":2183},"references\u002Flibrary.md",{"type":43,"tag":1128,"props":2185,"children":2186},{"style":1150},[2187],{"type":53,"value":2188},"]",{"type":43,"tag":1128,"props":2190,"children":2191},{"style":1883},[2192],{"type":53,"value":2193}," or ",{"type":43,"tag":1128,"props":2195,"children":2196},{"style":1150},[2197],{"type":53,"value":2178},{"type":43,"tag":1128,"props":2199,"children":2200},{"style":1156},[2201],{"type":53,"value":2202},"references\u002Fapplication.md",{"type":43,"tag":1128,"props":2204,"children":2205},{"style":1150},[2206],{"type":53,"value":2188},{"type":43,"tag":1128,"props":2208,"children":2209},{"style":1883},[2210],{"type":53,"value":2211},".\n",{"type":43,"tag":212,"props":2213,"children":2215},{"id":2214},"capability-gating",[2216],{"type":53,"value":2217},"Capability-gating",{"type":43,"tag":56,"props":2219,"children":2220},{},[2221],{"type":53,"value":2222},"Steps that depend on optional environment capabilities (browser automation, specific CLI tools) must degrade gracefully:",{"type":43,"tag":1117,"props":2224,"children":2226},{"className":1846,"code":2225,"language":1848,"meta":1122,"style":1122},"### Automated Scan (Capability-Gated)\n\nRun the automated scanner when ALL of these are true:\n- The target files exist and are readable\n- The required CLI tool is installed\n\nIf unavailable, state in one line that the step is skipped and why. Do not ask the user to install tooling.\n",[2227],{"type":43,"tag":191,"props":2228,"children":2229},{"__ignoreMap":1122},[2230,2243,2250,2258,2271,2283,2290],{"type":43,"tag":1128,"props":2231,"children":2232},{"class":1130,"line":1131},[2233,2238],{"type":43,"tag":1128,"props":2234,"children":2235},{"style":1150},[2236],{"type":53,"value":2237},"### ",{"type":43,"tag":1128,"props":2239,"children":2240},{"style":1135},[2241],{"type":53,"value":2242},"Automated Scan (Capability-Gated)\n",{"type":43,"tag":1128,"props":2244,"children":2245},{"class":1130,"line":1141},[2246],{"type":43,"tag":1128,"props":2247,"children":2248},{"emptyLinePlaceholder":286},[2249],{"type":53,"value":1583},{"type":43,"tag":1128,"props":2251,"children":2252},{"class":1130,"line":1168},[2253],{"type":43,"tag":1128,"props":2254,"children":2255},{"style":1883},[2256],{"type":53,"value":2257},"Run the automated scanner when ALL of these are true:\n",{"type":43,"tag":1128,"props":2259,"children":2260},{"class":1130,"line":1191},[2261,2266],{"type":43,"tag":1128,"props":2262,"children":2263},{"style":1150},[2264],{"type":53,"value":2265},"-",{"type":43,"tag":1128,"props":2267,"children":2268},{"style":1883},[2269],{"type":53,"value":2270}," The target files exist and are readable\n",{"type":43,"tag":1128,"props":2272,"children":2273},{"class":1130,"line":1200},[2274,2278],{"type":43,"tag":1128,"props":2275,"children":2276},{"style":1150},[2277],{"type":53,"value":2265},{"type":43,"tag":1128,"props":2279,"children":2280},{"style":1883},[2281],{"type":53,"value":2282}," The required CLI tool is installed\n",{"type":43,"tag":1128,"props":2284,"children":2285},{"class":1130,"line":1209},[2286],{"type":43,"tag":1128,"props":2287,"children":2288},{"emptyLinePlaceholder":286},[2289],{"type":53,"value":1583},{"type":43,"tag":1128,"props":2291,"children":2292},{"class":1130,"line":1609},[2293],{"type":43,"tag":1128,"props":2294,"children":2295},{"style":1883},[2296],{"type":53,"value":2297},"If unavailable, state in one line that the step is skipped and why. Do not ask the user to install tooling.\n",{"type":43,"tag":212,"props":2299,"children":2301},{"id":2300},"structured-artifacts-as-handoffs",[2302],{"type":53,"value":2303},"Structured artifacts as handoffs",{"type":43,"tag":56,"props":2305,"children":2306},{},[2307],{"type":53,"value":2308},"When one command produces output that another consumes, define the artifact structure explicitly. The producing command's reference defines the format; the consuming command's reference says what it expects:",{"type":43,"tag":1117,"props":2310,"children":2312},{"className":1846,"code":2311,"language":1848,"meta":1122,"style":1122},"### Plan Structure\n\n**1. Summary** (2-3 sentences)\n**2. Primary Goal**\n**3. Approach**\n...\n",[2313],{"type":43,"tag":191,"props":2314,"children":2315},{"__ignoreMap":1122},[2316,2328,2335,2356,2373,2389],{"type":43,"tag":1128,"props":2317,"children":2318},{"class":1130,"line":1131},[2319,2323],{"type":43,"tag":1128,"props":2320,"children":2321},{"style":1150},[2322],{"type":53,"value":2237},{"type":43,"tag":1128,"props":2324,"children":2325},{"style":1135},[2326],{"type":53,"value":2327},"Plan Structure\n",{"type":43,"tag":1128,"props":2329,"children":2330},{"class":1130,"line":1141},[2331],{"type":43,"tag":1128,"props":2332,"children":2333},{"emptyLinePlaceholder":286},[2334],{"type":53,"value":1583},{"type":43,"tag":1128,"props":2336,"children":2337},{"class":1130,"line":1168},[2338,2342,2347,2351],{"type":43,"tag":1128,"props":2339,"children":2340},{"style":2129},[2341],{"type":53,"value":2132},{"type":43,"tag":1128,"props":2343,"children":2344},{"style":2135},[2345],{"type":53,"value":2346},"1. Summary",{"type":43,"tag":1128,"props":2348,"children":2349},{"style":2129},[2350],{"type":53,"value":2132},{"type":43,"tag":1128,"props":2352,"children":2353},{"style":1883},[2354],{"type":53,"value":2355}," (2-3 sentences)\n",{"type":43,"tag":1128,"props":2357,"children":2358},{"class":1130,"line":1191},[2359,2363,2368],{"type":43,"tag":1128,"props":2360,"children":2361},{"style":2129},[2362],{"type":53,"value":2132},{"type":43,"tag":1128,"props":2364,"children":2365},{"style":2135},[2366],{"type":53,"value":2367},"2. Primary Goal",{"type":43,"tag":1128,"props":2369,"children":2370},{"style":2129},[2371],{"type":53,"value":2372},"**\n",{"type":43,"tag":1128,"props":2374,"children":2375},{"class":1130,"line":1200},[2376,2380,2385],{"type":43,"tag":1128,"props":2377,"children":2378},{"style":2129},[2379],{"type":53,"value":2132},{"type":43,"tag":1128,"props":2381,"children":2382},{"style":2135},[2383],{"type":53,"value":2384},"3. Approach",{"type":43,"tag":1128,"props":2386,"children":2387},{"style":2129},[2388],{"type":53,"value":2372},{"type":43,"tag":1128,"props":2390,"children":2391},{"class":1130,"line":1209},[2392],{"type":43,"tag":1128,"props":2393,"children":2394},{"style":1883},[2395],{"type":53,"value":2396},"...\n",{"type":43,"tag":212,"props":2398,"children":2400},{"id":2399},"self-critique-loops",[2401],{"type":53,"value":2402},"Self-critique loops",{"type":43,"tag":56,"props":2404,"children":2405},{},[2406],{"type":53,"value":2407},"For build\u002Fimplementation commands, mandate inspect-and-fix passes with explicit exit bars:",{"type":43,"tag":1117,"props":2409,"children":2411},{"className":1846,"code":2410,"language":1848,"meta":1122,"style":1122},"### Critique and fix loop\n\nAfter the first pass, write a short self-critique and patch. Repeat until no material issues remain:\n1. Does it match the requirements?\n2. Does it pass the [quality test]?\n3. Check every expected scenario.\n4. Check edge cases.\n\nThe exit bar is not \"it works.\" It is: [explicit quality threshold].\n",[2412],{"type":43,"tag":191,"props":2413,"children":2414},{"__ignoreMap":1122},[2415,2427,2434,2442,2455,2468,2481,2494,2501],{"type":43,"tag":1128,"props":2416,"children":2417},{"class":1130,"line":1131},[2418,2422],{"type":43,"tag":1128,"props":2419,"children":2420},{"style":1150},[2421],{"type":53,"value":2237},{"type":43,"tag":1128,"props":2423,"children":2424},{"style":1135},[2425],{"type":53,"value":2426},"Critique and fix loop\n",{"type":43,"tag":1128,"props":2428,"children":2429},{"class":1130,"line":1141},[2430],{"type":43,"tag":1128,"props":2431,"children":2432},{"emptyLinePlaceholder":286},[2433],{"type":53,"value":1583},{"type":43,"tag":1128,"props":2435,"children":2436},{"class":1130,"line":1168},[2437],{"type":43,"tag":1128,"props":2438,"children":2439},{"style":1883},[2440],{"type":53,"value":2441},"After the first pass, write a short self-critique and patch. Repeat until no material issues remain:\n",{"type":43,"tag":1128,"props":2443,"children":2444},{"class":1130,"line":1191},[2445,2450],{"type":43,"tag":1128,"props":2446,"children":2447},{"style":1150},[2448],{"type":53,"value":2449},"1.",{"type":43,"tag":1128,"props":2451,"children":2452},{"style":1883},[2453],{"type":53,"value":2454}," Does it match the requirements?\n",{"type":43,"tag":1128,"props":2456,"children":2457},{"class":1130,"line":1200},[2458,2463],{"type":43,"tag":1128,"props":2459,"children":2460},{"style":1150},[2461],{"type":53,"value":2462},"2.",{"type":43,"tag":1128,"props":2464,"children":2465},{"style":1883},[2466],{"type":53,"value":2467}," Does it pass the [quality test]?\n",{"type":43,"tag":1128,"props":2469,"children":2470},{"class":1130,"line":1209},[2471,2476],{"type":43,"tag":1128,"props":2472,"children":2473},{"style":1150},[2474],{"type":53,"value":2475},"3.",{"type":43,"tag":1128,"props":2477,"children":2478},{"style":1883},[2479],{"type":53,"value":2480}," Check every expected scenario.\n",{"type":43,"tag":1128,"props":2482,"children":2483},{"class":1130,"line":1609},[2484,2489],{"type":43,"tag":1128,"props":2485,"children":2486},{"style":1150},[2487],{"type":53,"value":2488},"4.",{"type":43,"tag":1128,"props":2490,"children":2491},{"style":1883},[2492],{"type":53,"value":2493}," Check edge cases.\n",{"type":43,"tag":1128,"props":2495,"children":2496},{"class":1130,"line":1618},[2497],{"type":43,"tag":1128,"props":2498,"children":2499},{"emptyLinePlaceholder":286},[2500],{"type":53,"value":1583},{"type":43,"tag":1128,"props":2502,"children":2503},{"class":1130,"line":1627},[2504],{"type":43,"tag":1128,"props":2505,"children":2506},{"style":1883},[2507],{"type":53,"value":2508},"The exit bar is not \"it works.\" It is: [explicit quality threshold].\n",{"type":43,"tag":200,"props":2510,"children":2512},{"id":2511},"phase-3-description-optimization",[2513],{"type":53,"value":2514},"Phase 3: Description Optimization",{"type":43,"tag":56,"props":2516,"children":2517},{},[2518,2520,2526],{"type":53,"value":2519},"The description is the only thing agents see at startup. Read ",{"type":43,"tag":191,"props":2521,"children":2523},{"className":2522},[],[2524],{"type":53,"value":2525},"references\u002Fdescription-guide.md",{"type":53,"value":2527}," for the full optimization process.",{"type":43,"tag":56,"props":2529,"children":2530},{},[2531],{"type":53,"value":2532},"Quick validation:",{"type":43,"tag":78,"props":2534,"children":2535},{},[2536,2541,2546,2551,2556],{"type":43,"tag":82,"props":2537,"children":2538},{},[2539],{"type":53,"value":2540},"Write 5 should-trigger queries (different phrasings, including ones that don't name the skill directly)",{"type":43,"tag":82,"props":2542,"children":2543},{},[2544],{"type":53,"value":2545},"Write 5 should-not-trigger queries (near-misses that share keywords but need different skills)",{"type":43,"tag":82,"props":2547,"children":2548},{},[2549],{"type":53,"value":2550},"Check: would the description correctly distinguish these?",{"type":43,"tag":82,"props":2552,"children":2553},{},[2554],{"type":53,"value":2555},"Revise if needed — broaden for missed triggers, narrow for false triggers",{"type":43,"tag":82,"props":2557,"children":2558},{},[2559],{"type":53,"value":2560},"Verify under 1024 characters",{"type":43,"tag":56,"props":2562,"children":2563},{},[2564,2566,2572],{"type":53,"value":2565},"For skills with sub-commands, the main description covers the skill broadly. Each sub-command's description in ",{"type":43,"tag":191,"props":2567,"children":2569},{"className":2568},[],[2570],{"type":53,"value":2571},"command-metadata.json",{"type":53,"value":2573}," is optimized separately for auto-trigger keyword matching.",{"type":43,"tag":200,"props":2575,"children":2577},{"id":2576},"phase-4-scripts",[2578],{"type":53,"value":2579},"Phase 4: Scripts",{"type":43,"tag":56,"props":2581,"children":2582},{},[2583,2584,2590],{"type":53,"value":579},{"type":43,"tag":191,"props":2585,"children":2587},{"className":2586},[],[2588],{"type":53,"value":2589},"references\u002Fscripts-guide.md",{"type":53,"value":2591}," for the full guide.",{"type":43,"tag":56,"props":2593,"children":2594},{},[2595,2600],{"type":43,"tag":86,"props":2596,"children":2597},{},[2598],{"type":53,"value":2599},"Bias toward scripts.",{"type":53,"value":2601}," Every deterministic operation should be a script, not an instruction. Scripts are cheaper (no LLM tokens), faster (no reasoning), and more reliable (no hallucination).",{"type":43,"tag":56,"props":2603,"children":2604},{},[2605],{"type":53,"value":2606},"For each piece of the skill's workflow, ask: \"Could a script do this?\" If yes, write the script.",{"type":43,"tag":56,"props":2608,"children":2609},{},[2610],{"type":43,"tag":86,"props":2611,"children":2612},{},[2613],{"type":53,"value":2614},"Should be scripts:",{"type":43,"tag":273,"props":2616,"children":2617},{},[2618,2623,2628,2633,2638,2643,2648,2653,2658],{"type":43,"tag":82,"props":2619,"children":2620},{},[2621],{"type":53,"value":2622},"Validation (input format, required fields, schema compliance)",{"type":43,"tag":82,"props":2624,"children":2625},{},[2626],{"type":53,"value":2627},"File generation from templates",{"type":43,"tag":82,"props":2629,"children":2630},{},[2631],{"type":53,"value":2632},"Data extraction and transformation",{"type":43,"tag":82,"props":2634,"children":2635},{},[2636],{"type":53,"value":2637},"API calls with structured responses",{"type":43,"tag":82,"props":2639,"children":2640},{},[2641],{"type":53,"value":2642},"Setup and environment checks",{"type":43,"tag":82,"props":2644,"children":2645},{},[2646],{"type":53,"value":2647},"Output formatting",{"type":43,"tag":82,"props":2649,"children":2650},{},[2651],{"type":53,"value":2652},"Context loading (read project files, resolve paths, return JSON)",{"type":43,"tag":82,"props":2654,"children":2655},{},[2656],{"type":53,"value":2657},"Pin\u002Funpin shortcuts (create\u002Fremove command aliases)",{"type":43,"tag":82,"props":2659,"children":2660},{},[2661],{"type":53,"value":2662},"Cleanup (remove deprecated files after skill updates)",{"type":43,"tag":56,"props":2664,"children":2665},{},[2666],{"type":43,"tag":86,"props":2667,"children":2668},{},[2669],{"type":53,"value":2670},"Should stay as instructions:",{"type":43,"tag":273,"props":2672,"children":2673},{},[2674,2679,2684,2689,2694],{"type":43,"tag":82,"props":2675,"children":2676},{},[2677],{"type":53,"value":2678},"Deciding between architectural approaches",{"type":43,"tag":82,"props":2680,"children":2681},{},[2682],{"type":53,"value":2683},"Reviewing code for quality or style",{"type":43,"tag":82,"props":2685,"children":2686},{},[2687],{"type":53,"value":2688},"Explaining tradeoffs to the user",{"type":43,"tag":82,"props":2690,"children":2691},{},[2692],{"type":53,"value":2693},"Creative writing or design decisions",{"type":43,"tag":82,"props":2695,"children":2696},{},[2697],{"type":53,"value":2698},"Interview\u002Fdiscovery conversations",{"type":43,"tag":56,"props":2700,"children":2701},{},[2702],{"type":53,"value":2703},"Key patterns:",{"type":43,"tag":273,"props":2705,"children":2706},{},[2707,2725,2741],{"type":43,"tag":82,"props":2708,"children":2709},{},[2710,2715,2717,2723],{"type":43,"tag":86,"props":2711,"children":2712},{},[2713],{"type":53,"value":2714},"Python without dependencies",{"type":53,"value":2716},": stdlib only, ",{"type":43,"tag":191,"props":2718,"children":2720},{"className":2719},[],[2721],{"type":53,"value":2722},"argparse",{"type":53,"value":2724}," for CLI parsing",{"type":43,"tag":82,"props":2726,"children":2727},{},[2728,2733,2735],{"type":43,"tag":86,"props":2729,"children":2730},{},[2731],{"type":53,"value":2732},"Python with dependencies",{"type":53,"value":2734},": PEP 723 inline metadata with ",{"type":43,"tag":191,"props":2736,"children":2738},{"className":2737},[],[2739],{"type":53,"value":2740},"uv run",{"type":43,"tag":82,"props":2742,"children":2743},{},[2744,2749,2751],{"type":43,"tag":86,"props":2745,"children":2746},{},[2747],{"type":53,"value":2748},"All scripts",{"type":53,"value":2750},": Structured output (JSON when piped), clear exit codes, descriptive ",{"type":43,"tag":191,"props":2752,"children":2754},{"className":2753},[],[2755],{"type":53,"value":545},{"type":43,"tag":212,"props":2757,"children":2759},{"id":2758},"context-loader-pattern",[2760],{"type":53,"value":2761},"Context loader pattern",{"type":43,"tag":56,"props":2763,"children":2764},{},[2765],{"type":53,"value":2766},"For skills that need project-level context, write a loader script:",{"type":43,"tag":56,"props":2768,"children":2769},{},[2770,2772,2777,2779,2784,2786,2792,2794,2799],{"type":53,"value":2771},"The script should follow all standard patterns: ",{"type":43,"tag":191,"props":2773,"children":2775},{"className":2774},[],[2776],{"type":53,"value":2722},{"type":53,"value":2778}," with ",{"type":43,"tag":191,"props":2780,"children":2782},{"className":2781},[],[2783],{"type":53,"value":545},{"type":53,"value":2785},", structured JSON output (pretty when interactive, compact when piped), clear exit codes (0 = found, 1 = missing), ",{"type":43,"tag":191,"props":2787,"children":2789},{"className":2788},[],[2790],{"type":53,"value":2791},"pathlib",{"type":53,"value":2793}," for cross-platform paths, and stdlib-only imports. See the \"Context File System\" section in ",{"type":43,"tag":191,"props":2795,"children":2797},{"className":2796},[],[2798],{"type":53,"value":1032},{"type":53,"value":2800}," for a skeleton.",{"type":43,"tag":56,"props":2802,"children":2803},{},[2804,2806,2811,2813,2819,2820,2826,2828,2834],{"type":53,"value":2805},"The SKILL.md references it: \"Load context via ",{"type":43,"tag":191,"props":2807,"children":2809},{"className":2808},[],[2810],{"type":53,"value":1948},{"type":53,"value":2812},". Consume the full JSON output. Never pipe through ",{"type":43,"tag":191,"props":2814,"children":2816},{"className":2815},[],[2817],{"type":53,"value":2818},"head",{"type":53,"value":230},{"type":43,"tag":191,"props":2821,"children":2823},{"className":2822},[],[2824],{"type":53,"value":2825},"tail",{"type":53,"value":2827},", or ",{"type":43,"tag":191,"props":2829,"children":2831},{"className":2830},[],[2832],{"type":53,"value":2833},"grep",{"type":53,"value":2835},".\"",{"type":43,"tag":200,"props":2837,"children":2839},{"id":2838},"phase-5-review",[2840],{"type":53,"value":2841},"Phase 5: Review",{"type":43,"tag":56,"props":2843,"children":2844},{},[2845],{"type":53,"value":2846},"Before presenting the final skill, verify against this checklist:",{"type":43,"tag":212,"props":2848,"children":2850},{"id":2849},"basics",[2851],{"type":53,"value":2852},"Basics",{"type":43,"tag":273,"props":2854,"children":2856},{"className":2855},[276],[2857,2872,2887,2902,2910],{"type":43,"tag":82,"props":2858,"children":2860},{"className":2859},[281],[2861,2864,2865,2870],{"type":43,"tag":284,"props":2862,"children":2863},{"disabled":286,"type":287},[],{"type":53,"value":290},{"type":43,"tag":191,"props":2866,"children":2868},{"className":2867},[],[2869],{"type":53,"value":296},{"type":53,"value":2871}," is lowercase, hyphens only, max 64 chars",{"type":43,"tag":82,"props":2873,"children":2875},{"className":2874},[281],[2876,2879,2880,2885],{"type":43,"tag":284,"props":2877,"children":2878},{"disabled":286,"type":287},[],{"type":53,"value":290},{"type":43,"tag":191,"props":2881,"children":2883},{"className":2882},[],[2884],{"type":53,"value":312},{"type":53,"value":2886}," is under 1024 chars and includes trigger phrases",{"type":43,"tag":82,"props":2888,"children":2890},{"className":2889},[281],[2891,2894,2895,2900],{"type":43,"tag":284,"props":2892,"children":2893},{"disabled":286,"type":287},[],{"type":53,"value":290},{"type":43,"tag":191,"props":2896,"children":2898},{"className":2897},[],[2899],{"type":53,"value":312},{"type":53,"value":2901}," is slightly pushy — covers edge phrasings that should activate the skill",{"type":43,"tag":82,"props":2903,"children":2905},{"className":2904},[281],[2906,2909],{"type":43,"tag":284,"props":2907,"children":2908},{"disabled":286,"type":287},[],{"type":53,"value":365},{"type":43,"tag":82,"props":2911,"children":2913},{"className":2912},[281],[2914,2917],{"type":43,"tag":284,"props":2915,"children":2916},{"disabled":286,"type":287},[],{"type":53,"value":2918}," Instructions use imperative form",{"type":43,"tag":212,"props":2920,"children":2922},{"id":2921},"architecture-if-applicable",[2923],{"type":53,"value":2924},"Architecture (if applicable)",{"type":43,"tag":273,"props":2926,"children":2928},{"className":2927},[276],[2929,2938,2953,2962,2971,2980],{"type":43,"tag":82,"props":2930,"children":2932},{"className":2931},[281],[2933,2936],{"type":43,"tag":284,"props":2934,"children":2935},{"disabled":286,"type":287},[],{"type":53,"value":2937}," Sub-commands have a router table with clear routing rules",{"type":43,"tag":82,"props":2939,"children":2941},{"className":2940},[281],[2942,2945,2946,2951],{"type":43,"tag":284,"props":2943,"children":2944},{"disabled":286,"type":287},[],{"type":53,"value":290},{"type":43,"tag":191,"props":2947,"children":2949},{"className":2948},[],[2950],{"type":53,"value":2571},{"type":53,"value":2952}," is the single source of truth for command descriptions",{"type":43,"tag":82,"props":2954,"children":2956},{"className":2955},[281],[2957,2960],{"type":43,"tag":284,"props":2958,"children":2959},{"disabled":286,"type":287},[],{"type":53,"value":2961}," Setup gates are defined with fail actions for each gate",{"type":43,"tag":82,"props":2963,"children":2965},{"className":2964},[281],[2966,2969],{"type":43,"tag":284,"props":2967,"children":2968},{"disabled":286,"type":287},[],{"type":53,"value":2970}," Register\u002Fmode system classifies before loading references",{"type":43,"tag":82,"props":2972,"children":2974},{"className":2973},[281],[2975,2978],{"type":43,"tag":284,"props":2976,"children":2977},{"disabled":286,"type":287},[],{"type":53,"value":2979}," Capability-gated steps degrade gracefully with one-line skip reasons",{"type":43,"tag":82,"props":2981,"children":2983},{"className":2982},[281],[2984,2987,2989,2994],{"type":43,"tag":284,"props":2985,"children":2986},{"disabled":286,"type":287},[],{"type":53,"value":2988}," Router\u002Fdomain skills with distinct sections (intake, routing, principles) consider XML tags for clarity (",{"type":43,"tag":191,"props":2990,"children":2992},{"className":2991},[],[2993],{"type":53,"value":514},{"type":53,"value":516},{"type":43,"tag":212,"props":2996,"children":2998},{"id":2997},"references",[2999],{"type":53,"value":3000},"References",{"type":43,"tag":273,"props":3002,"children":3004},{"className":3003},[276],[3005,3021,3038,3047,3056,3065,3074],{"type":43,"tag":82,"props":3006,"children":3008},{"className":3007},[281],[3009,3012,3014,3019],{"type":43,"tag":284,"props":3010,"children":3011},{"disabled":286,"type":287},[],{"type":53,"value":3013}," Domain knowledge split into ",{"type":43,"tag":191,"props":3015,"children":3017},{"className":3016},[],[3018],{"type":53,"value":228},{"type":53,"value":3020}," with clear \"when to read\" pointers",{"type":43,"tag":82,"props":3022,"children":3024},{"className":3023},[281],[3025,3028,3030,3036],{"type":43,"tag":284,"props":3026,"children":3027},{"disabled":286,"type":287},[],{"type":53,"value":3029}," Each reference is self-contained — no transitive loading (see ",{"type":43,"tag":191,"props":3031,"children":3033},{"className":3032},[],[3034],{"type":53,"value":3035},"spec-guide.md",{"type":53,"value":3037}," → Reference Architecture)",{"type":43,"tag":82,"props":3039,"children":3041},{"className":3040},[281],[3042,3045],{"type":43,"tag":284,"props":3043,"children":3044},{"disabled":286,"type":287},[],{"type":53,"value":3046}," Reference loading is conditional, not eager (\"Read X if Y happens\")",{"type":43,"tag":82,"props":3048,"children":3050},{"className":3049},[281],[3051,3054],{"type":43,"tag":284,"props":3052,"children":3053},{"disabled":286,"type":287},[],{"type":53,"value":3055}," Shared concerns (auth, config) extracted into their own reference, not embedded in a consumer",{"type":43,"tag":82,"props":3057,"children":3059},{"className":3058},[281],[3060,3063],{"type":43,"tag":284,"props":3061,"children":3062},{"disabled":286,"type":287},[],{"type":53,"value":3064}," Error handling lives in the reference for the tool that produces the error",{"type":43,"tag":82,"props":3066,"children":3068},{"className":3067},[281],[3069,3072],{"type":43,"tag":284,"props":3070,"children":3071},{"disabled":286,"type":287},[],{"type":53,"value":3073}," Multi-approach skills include a decision table routing to the correct reference",{"type":43,"tag":82,"props":3075,"children":3077},{"className":3076},[281],[3078,3081],{"type":43,"tag":284,"props":3079,"children":3080},{"disabled":286,"type":287},[],{"type":53,"value":3082}," No browser-only tools referenced (Postman, API consoles, OAuth login pages)",{"type":43,"tag":212,"props":3084,"children":3086},{"id":3085},"scripts",[3087],{"type":53,"value":524},{"type":43,"tag":273,"props":3089,"children":3091},{"className":3090},[276],[3092,3106,3115,3124],{"type":43,"tag":82,"props":3093,"children":3095},{"className":3094},[281],[3096,3099,3101],{"type":43,"tag":284,"props":3097,"children":3098},{"disabled":286,"type":287},[],{"type":53,"value":3100}," Scripts (if any) have shebangs, structured output, and ",{"type":43,"tag":191,"props":3102,"children":3104},{"className":3103},[],[3105],{"type":53,"value":545},{"type":43,"tag":82,"props":3107,"children":3109},{"className":3108},[281],[3110,3113],{"type":43,"tag":284,"props":3111,"children":3112},{"disabled":286,"type":287},[],{"type":53,"value":3114}," Context loader returns JSON, handles missing files, resolves fallback paths",{"type":43,"tag":82,"props":3116,"children":3118},{"className":3117},[281],[3119,3122],{"type":43,"tag":284,"props":3120,"children":3121},{"disabled":286,"type":287},[],{"type":53,"value":3123}," Scripts are cross-platform (pathlib, tempfile, no hardcoded paths)",{"type":43,"tag":82,"props":3125,"children":3127},{"className":3126},[281],[3128,3131],{"type":43,"tag":284,"props":3129,"children":3130},{"disabled":286,"type":287},[],{"type":53,"value":3132}," Scripts are idempotent — safe to re-run",{"type":43,"tag":212,"props":3134,"children":3136},{"id":3135},"apiservice-skills-if-applicable",[3137],{"type":53,"value":3138},"API\u002FService Skills (if applicable)",{"type":43,"tag":273,"props":3140,"children":3142},{"className":3141},[276],[3143,3152,3161,3170,3179,3188],{"type":43,"tag":82,"props":3144,"children":3146},{"className":3145},[281],[3147,3150],{"type":43,"tag":284,"props":3148,"children":3149},{"disabled":286,"type":287},[],{"type":53,"value":3151}," Credential files are never read into context — passed via shell substitution only",{"type":43,"tag":82,"props":3153,"children":3155},{"className":3154},[281],[3156,3159],{"type":43,"tag":284,"props":3157,"children":3158},{"disabled":286,"type":287},[],{"type":53,"value":3160}," Credential setup is single-sourced in its own reference file",{"type":43,"tag":82,"props":3162,"children":3164},{"className":3163},[281],[3165,3168],{"type":43,"tag":284,"props":3166,"children":3167},{"disabled":286,"type":287},[],{"type":53,"value":3169}," Capability gate checks for credentials before attempting API calls",{"type":43,"tag":82,"props":3171,"children":3173},{"className":3172},[281],[3174,3177],{"type":43,"tag":284,"props":3175,"children":3176},{"disabled":286,"type":287},[],{"type":53,"value":3178}," API schema discovery is documented (OpenAPI download, GraphQL introspection, or live endpoints)",{"type":43,"tag":82,"props":3180,"children":3182},{"className":3181},[281],[3183,3186],{"type":43,"tag":284,"props":3184,"children":3185},{"disabled":286,"type":287},[],{"type":53,"value":3187}," API examples have been validated against the live endpoint",{"type":43,"tag":82,"props":3189,"children":3191},{"className":3190},[281],[3192,3195],{"type":43,"tag":284,"props":3193,"children":3194},{"disabled":286,"type":287},[],{"type":53,"value":3196}," Instance-specific values include programmatic discovery methods",{"type":43,"tag":212,"props":3198,"children":3200},{"id":3199},"consolidation-if-merging-existing-skills",[3201],{"type":53,"value":3202},"Consolidation (if merging existing skills)",{"type":43,"tag":273,"props":3204,"children":3206},{"className":3205},[276],[3207,3224,3233,3249,3266,3275,3284,3293],{"type":43,"tag":82,"props":3208,"children":3210},{"className":3209},[281],[3211,3214,3216,3222],{"type":43,"tag":284,"props":3212,"children":3213},{"disabled":286,"type":287},[],{"type":53,"value":3215}," No references to old skill names anywhere in the project (",{"type":43,"tag":191,"props":3217,"children":3219},{"className":3218},[],[3220],{"type":53,"value":3221},"grep -rn",{"type":53,"value":3223}," the entire repo)",{"type":43,"tag":82,"props":3225,"children":3227},{"className":3226},[281],[3228,3231],{"type":43,"tag":284,"props":3229,"children":3230},{"disabled":286,"type":287},[],{"type":53,"value":3232}," Router intake menus are sequentially numbered (no gaps from removed items)",{"type":43,"tag":82,"props":3234,"children":3236},{"className":3235},[281],[3237,3240,3242,3247],{"type":43,"tag":284,"props":3238,"children":3239},{"disabled":286,"type":287},[],{"type":53,"value":3241}," Script docstrings and ",{"type":43,"tag":191,"props":3243,"children":3245},{"className":3244},[],[3246],{"type":53,"value":545},{"type":53,"value":3248}," text reference the new skill name, not the old ones",{"type":43,"tag":82,"props":3250,"children":3252},{"className":3251},[281],[3253,3256,3258,3264],{"type":43,"tag":284,"props":3254,"children":3255},{"disabled":286,"type":287},[],{"type":53,"value":3257}," Reference paths resolve correctly from each file's location (no ",{"type":43,"tag":191,"props":3259,"children":3261},{"className":3260},[],[3262],{"type":53,"value":3263},"references\u002Freferences\u002F",{"type":53,"value":3265}," nesting)",{"type":43,"tag":82,"props":3267,"children":3269},{"className":3268},[281],[3270,3273],{"type":43,"tag":284,"props":3271,"children":3272},{"disabled":286,"type":287},[],{"type":53,"value":3274}," All example files from old skills are represented in the consolidated examples",{"type":43,"tag":82,"props":3276,"children":3278},{"className":3277},[281],[3279,3282],{"type":43,"tag":284,"props":3280,"children":3281},{"disabled":286,"type":287},[],{"type":53,"value":3283}," Scripts in the same skill use consistent patterns (NO_COLOR, shell flags, TTY checks, exit codes)",{"type":43,"tag":82,"props":3285,"children":3287},{"className":3286},[281],[3288,3291],{"type":43,"tag":284,"props":3289,"children":3290},{"disabled":286,"type":287},[],{"type":53,"value":3292}," README, ADRs, and other docs updated to reflect new skill structure",{"type":43,"tag":82,"props":3294,"children":3296},{"className":3295},[281],[3297,3300],{"type":43,"tag":284,"props":3298,"children":3299},{"disabled":286,"type":287},[],{"type":53,"value":3301}," New description covers all trigger phrases from all old skills' descriptions",{"type":43,"tag":212,"props":3303,"children":3305},{"id":3304},"quality",[3306],{"type":53,"value":3307},"Quality",{"type":43,"tag":273,"props":3309,"children":3311},{"className":3310},[276],[3312,3321,3337,3346,3355,3364],{"type":43,"tag":82,"props":3313,"children":3315},{"className":3314},[281],[3316,3319],{"type":43,"tag":284,"props":3317,"children":3318},{"disabled":286,"type":287},[],{"type":53,"value":3320}," No time-sensitive information (URLs to specific versions, dates that will go stale)",{"type":43,"tag":82,"props":3322,"children":3324},{"className":3323},[281],[3325,3328,3330,3335],{"type":43,"tag":284,"props":3326,"children":3327},{"disabled":286,"type":287},[],{"type":53,"value":3329}," Examples use fake data where possible (emails, names, tokens) — see ",{"type":43,"tag":191,"props":3331,"children":3333},{"className":3332},[],[3334],{"type":53,"value":3035},{"type":53,"value":3336}," → Fake Data in Examples",{"type":43,"tag":82,"props":3338,"children":3340},{"className":3339},[281],[3341,3344],{"type":43,"tag":284,"props":3342,"children":3343},{"disabled":286,"type":287},[],{"type":53,"value":3345}," Consistent terminology throughout",{"type":43,"tag":82,"props":3347,"children":3349},{"className":3348},[281],[3350,3353],{"type":43,"tag":284,"props":3351,"children":3352},{"disabled":286,"type":287},[],{"type":53,"value":3354}," Concrete examples included for non-obvious workflows",{"type":43,"tag":82,"props":3356,"children":3358},{"className":3357},[281],[3359,3362],{"type":43,"tag":284,"props":3360,"children":3361},{"disabled":286,"type":287},[],{"type":53,"value":3363}," Absolute bans defined for patterns that are always wrong",{"type":43,"tag":82,"props":3365,"children":3367},{"className":3366},[281],[3368,3371],{"type":43,"tag":284,"props":3369,"children":3370},{"disabled":286,"type":287},[],{"type":53,"value":3372}," Self-critique loops defined for build\u002Fimplementation commands with explicit exit bars",{"type":43,"tag":56,"props":3374,"children":3375},{},[3376],{"type":53,"value":3377},"\u003Creference_index>",{"type":43,"tag":200,"props":3379,"children":3381},{"id":3380},"reference-index",[3382],{"type":53,"value":3383},"Reference Index",{"type":43,"tag":126,"props":3385,"children":3386},{},[3387,3403],{"type":43,"tag":130,"props":3388,"children":3389},{},[3390],{"type":43,"tag":134,"props":3391,"children":3392},{},[3393,3398],{"type":43,"tag":138,"props":3394,"children":3395},{},[3396],{"type":53,"value":3397},"Reference",{"type":43,"tag":138,"props":3399,"children":3400},{},[3401],{"type":53,"value":3402},"Load when...",{"type":43,"tag":149,"props":3404,"children":3405},{},[3406,3422,3438,3454,3470,3486,3502,3518],{"type":43,"tag":134,"props":3407,"children":3408},{},[3409,3417],{"type":43,"tag":156,"props":3410,"children":3411},{},[3412],{"type":43,"tag":191,"props":3413,"children":3415},{"className":3414},[],[3416],{"type":53,"value":1073},{"type":43,"tag":156,"props":3418,"children":3419},{},[3420],{"type":53,"value":3421},"Drafting a SKILL.md (Phase 2) — full format reference",{"type":43,"tag":134,"props":3423,"children":3424},{},[3425,3433],{"type":43,"tag":156,"props":3426,"children":3427},{},[3428],{"type":43,"tag":191,"props":3429,"children":3431},{"className":3430},[],[3432],{"type":53,"value":2525},{"type":43,"tag":156,"props":3434,"children":3435},{},[3436],{"type":53,"value":3437},"Optimizing the description (Phase 3)",{"type":43,"tag":134,"props":3439,"children":3440},{},[3441,3449],{"type":43,"tag":156,"props":3442,"children":3443},{},[3444],{"type":43,"tag":191,"props":3445,"children":3447},{"className":3446},[],[3448],{"type":53,"value":2589},{"type":43,"tag":156,"props":3450,"children":3451},{},[3452],{"type":53,"value":3453},"Writing scripts (Phase 4)",{"type":43,"tag":134,"props":3455,"children":3456},{},[3457,3465],{"type":43,"tag":156,"props":3458,"children":3459},{},[3460],{"type":43,"tag":191,"props":3461,"children":3463},{"className":3462},[],[3464],{"type":53,"value":585},{"type":43,"tag":156,"props":3466,"children":3467},{},[3468],{"type":53,"value":3469},"Drafting or auditing — common failures to avoid",{"type":43,"tag":134,"props":3471,"children":3472},{},[3473,3481],{"type":43,"tag":156,"props":3474,"children":3475},{},[3476],{"type":43,"tag":191,"props":3477,"children":3479},{"className":3478},[],[3480],{"type":53,"value":1032},{"type":43,"tag":156,"props":3482,"children":3483},{},[3484],{"type":53,"value":3485},"Choosing between simple, router, and domain expertise patterns",{"type":43,"tag":134,"props":3487,"children":3488},{},[3489,3497],{"type":43,"tag":156,"props":3490,"children":3491},{},[3492],{"type":43,"tag":191,"props":3493,"children":3495},{"className":3494},[],[3496],{"type":53,"value":795},{"type":43,"tag":156,"props":3498,"children":3499},{},[3500],{"type":53,"value":3501},"Skill calls external APIs or services",{"type":43,"tag":134,"props":3503,"children":3504},{},[3505,3513],{"type":43,"tag":156,"props":3506,"children":3507},{},[3508],{"type":43,"tag":191,"props":3509,"children":3511},{"className":3510},[],[3512],{"type":53,"value":196},{"type":43,"tag":156,"props":3514,"children":3515},{},[3516],{"type":53,"value":3517},"Merging multiple skills into fewer",{"type":43,"tag":134,"props":3519,"children":3520},{},[3521,3529],{"type":43,"tag":156,"props":3522,"children":3523},{},[3524],{"type":43,"tag":191,"props":3525,"children":3527},{"className":3526},[],[3528],{"type":53,"value":514},{"type":43,"tag":156,"props":3530,"children":3531},{},[3532],{"type":53,"value":3533},"Deciding on XML vs markdown structure",{"type":43,"tag":56,"props":3535,"children":3536},{},[3537],{"type":53,"value":3538},"\u003C\u002Freference_index>",{"type":43,"tag":3540,"props":3541,"children":3542},"style",{},[3543],{"type":53,"value":3544},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":3546,"total":3655},[3547,3561,3575,3594,3610,3627,3636],{"slug":3548,"name":3548,"fn":3549,"description":3550,"org":3551,"tags":3552,"stars":26,"repoUrl":27,"updatedAt":3560},"agent-ready","assess repository readiness for AI agents","Assesses a git repository's readiness for use by AI coding agents using the agentready CLI, then walks through and addresses each gap. RHDH-aware: detects RHDH repositories and uses rhdh-repos.md context to pre-fill AGENTS.md and skip inapplicable findings. Use when asked to \"assess agent readiness\", \"run agentready\", \"check how agent-ready this repo is\", \"make this repo agent-ready\", \"improve agent readiness score\", \"assess all RHDH repos\", \"batch agent readiness\", or \"onboard this repo for agents\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3553,3554,3557],{"name":21,"slug":22,"type":16},{"name":3555,"slug":3556,"type":16},"Code Analysis","code-analysis",{"name":3558,"slug":3559,"type":16},"Engineering","engineering","2026-07-16T06:03:24.758348",{"slug":3562,"name":3562,"fn":3563,"description":3564,"org":3565,"tags":3566,"stars":26,"repoUrl":27,"updatedAt":3574},"backstage-upgrade","upgrade Backstage dependencies","Upgrade @backstage\u002F* dependencies in a plugin or app to a target version. Use when asked to \"upgrade backstage\", \"bump backstage\", \"update @backstage\", \"align backstage deps\", \"backstage version bump\", \"upgrade dependencies\", \"backstage-cli versions:bump\", \"update to latest backstage\", \"fix version mismatch\", \"backstage version alignment\", \"upgrade before migration\", or any request to update Backstage package versions in a project.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3567,3568,3571],{"name":3558,"slug":3559,"type":16},{"name":3569,"slug":3570,"type":16},"Maintenance","maintenance",{"name":3572,"slug":3573,"type":16},"Migration","migration","2026-07-16T06:03:24.067361",{"slug":3576,"name":3576,"fn":3577,"description":3578,"org":3579,"tags":3580,"stars":26,"repoUrl":27,"updatedAt":3593},"base-images-and-rpms","update base images and lockfiles","Updates base images with updateBaseImages.sh and regenerates rpms.lock.yaml with rpm-lockfile-prototype in redhat-developer\u002Frhdh, rhdh-must-gather, and rhdh-operator. Use --analyze for read-only Containerfile\u002FDockerfile scan (current vs latest tags, UBI skew). Use for weekly upstream maintenance, UBI\u002FRHEL base image bumps, RPM lockfile refresh, base-images-and-rpms, main, release-*, or analyzing base images before updating.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3581,3584,3587,3590],{"name":3582,"slug":3583,"type":16},"Automation","automation",{"name":3585,"slug":3586,"type":16},"Configuration","configuration",{"name":3588,"slug":3589,"type":16},"Containers","containers",{"name":3591,"slug":3592,"type":16},"Deployment","deployment","2026-07-16T06:03:27.784453",{"slug":3595,"name":3595,"fn":3596,"description":3597,"org":3598,"tags":3599,"stars":26,"repoUrl":27,"updatedAt":3609},"bug-fix","diagnose and fix plugin bugs","Reproduce, diagnose, fix, and PR plugin bugs from Jira tickets or GitHub issues. Works with both rhdh-plugins and community-plugins. Supports UI bugs (Playwright e2e with before\u002Fafter recordings) and backend bugs (unit\u002Fintegration test verification). Triages issues for agent-readiness before attempting a fix. Accepts a Jira key (RHDHBUGS-1934), Jira URL (redhat.atlassian.net\u002Fbrowse\u002F...), GitHub issue URL (github.com\u002F...\u002Fissues\u002FN), or a request to \"fix this bug\", \"reproduce and fix\", \"\u002Fbug-fix\". By default, stops after the fix for user verification before PR creation. Supports --no-verify mode to skip the verification gate and auto-create the PR. Chains into raise-pr for the full PR lifecycle.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3600,3603,3606],{"name":3601,"slug":3602,"type":16},"Debugging","debugging",{"name":3604,"slug":3605,"type":16},"QA","qa",{"name":3607,"slug":3608,"type":16},"Testing","testing","2026-07-29T06:00:33.054762",{"slug":3611,"name":3611,"fn":3612,"description":3613,"org":3614,"tags":3615,"stars":26,"repoUrl":27,"updatedAt":3626},"compute-plugin-package-overlay-cve-list","generate CVE management reports","Builds an RHDH CVE Management CSV from GA plugin workspace changes in rhdh-plugin-export-overlays since a version tag (patches, source.json, plugins-list). One row per CVE × plugins-list package (multi-workspace CVEs expand). Use for \"CVE CSV\", \"workspace CVEs since tag\", \"collect overlay CVEs\", \"CVE management CSV\", orchestrator\u002Flightspeed CVE review, or plugin package overlay CVE list.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3616,3619,3620,3623],{"name":3617,"slug":3618,"type":16},"Compliance","compliance",{"name":3558,"slug":3559,"type":16},{"name":3621,"slug":3622,"type":16},"Reporting","reporting",{"name":3624,"slug":3625,"type":16},"Security","security","2026-08-01T05:41:57.852801",{"slug":3628,"name":3628,"fn":3629,"description":3630,"org":3631,"tags":3632,"stars":26,"repoUrl":27,"updatedAt":3635},"create-plugin","scaffold and package RHDH dynamic plugins","Full lifecycle for RHDH dynamic plugins — scaffold, implement, export, package, and configure. Use when asked to \"create RHDH plugin\", \"bootstrap dynamic plugin\", \"create backend plugin\", \"create frontend plugin\", \"export dynamic plugin\", \"package plugin as OCI\", \"generate frontend wiring\", \"create plugin container image\", \"configure mount points\", \"create dynamic route\", \"add entity card\", \"scaffold RHDH plugin\", \"publish plugin to registry\", \"create tgz archive\", or mentions creating, exporting, packaging, or wiring a Backstage plugin for Red Hat Developer Hub. Also use when asked to \"build a plugin from scratch\", \"dynamic plugin tutorial\", \"RHDH plugin from scratch\", or \"build Backstage plugin for RHDH\". Covers backend plugins (APIs, scaffolder actions, processors), frontend plugins (pages, cards, themes), export\u002Fpackaging (OCI, tgz, npm), and frontend wiring configuration (mount points, routes, entity tabs, themes).\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3633,3634],{"name":3591,"slug":3592,"type":16},{"name":18,"slug":19,"type":16},"2026-07-16T06:02:28.983498",{"slug":3637,"name":3637,"fn":3638,"description":3639,"org":3640,"tags":3641,"stars":26,"repoUrl":27,"updatedAt":3654},"cursor-mcp-auth","authenticate Atlassian MCP for Jira","Ensures Cursor Atlassian MCP (plugin-atlassian-atlassian → mcp.atlassian.com) is authenticated for redhat.atlassian.net via OAuth. Use for \"authenticate Jira\", \"Atlassian MCP\", \"jira auth failed\", \"mcp_auth Atlassian\", \"cursor MCP auth\", or when another skill needs working Jira access through Cursor MCP.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3642,3645,3648,3651],{"name":3643,"slug":3644,"type":16},"Auth","auth",{"name":3646,"slug":3647,"type":16},"Jira","jira",{"name":3649,"slug":3650,"type":16},"MCP","mcp",{"name":3652,"slug":3653,"type":16},"OAuth","oauth","2026-07-29T06:00:33.525179",24,{"items":3657,"total":3655},[3658,3664,3670,3677,3683,3690,3695,3702,3714,3727,3739,3751],{"slug":3548,"name":3548,"fn":3549,"description":3550,"org":3659,"tags":3660,"stars":26,"repoUrl":27,"updatedAt":3560},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3661,3662,3663],{"name":21,"slug":22,"type":16},{"name":3555,"slug":3556,"type":16},{"name":3558,"slug":3559,"type":16},{"slug":3562,"name":3562,"fn":3563,"description":3564,"org":3665,"tags":3666,"stars":26,"repoUrl":27,"updatedAt":3574},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3667,3668,3669],{"name":3558,"slug":3559,"type":16},{"name":3569,"slug":3570,"type":16},{"name":3572,"slug":3573,"type":16},{"slug":3576,"name":3576,"fn":3577,"description":3578,"org":3671,"tags":3672,"stars":26,"repoUrl":27,"updatedAt":3593},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3673,3674,3675,3676],{"name":3582,"slug":3583,"type":16},{"name":3585,"slug":3586,"type":16},{"name":3588,"slug":3589,"type":16},{"name":3591,"slug":3592,"type":16},{"slug":3595,"name":3595,"fn":3596,"description":3597,"org":3678,"tags":3679,"stars":26,"repoUrl":27,"updatedAt":3609},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3680,3681,3682],{"name":3601,"slug":3602,"type":16},{"name":3604,"slug":3605,"type":16},{"name":3607,"slug":3608,"type":16},{"slug":3611,"name":3611,"fn":3612,"description":3613,"org":3684,"tags":3685,"stars":26,"repoUrl":27,"updatedAt":3626},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3686,3687,3688,3689],{"name":3617,"slug":3618,"type":16},{"name":3558,"slug":3559,"type":16},{"name":3621,"slug":3622,"type":16},{"name":3624,"slug":3625,"type":16},{"slug":3628,"name":3628,"fn":3629,"description":3630,"org":3691,"tags":3692,"stars":26,"repoUrl":27,"updatedAt":3635},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3693,3694],{"name":3591,"slug":3592,"type":16},{"name":18,"slug":19,"type":16},{"slug":3637,"name":3637,"fn":3638,"description":3639,"org":3696,"tags":3697,"stars":26,"repoUrl":27,"updatedAt":3654},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3698,3699,3700,3701],{"name":3643,"slug":3644,"type":16},{"name":3646,"slug":3647,"type":16},{"name":3649,"slug":3650,"type":16},{"name":3652,"slug":3653,"type":16},{"slug":3703,"name":3703,"fn":3704,"description":3705,"org":3706,"tags":3707,"stars":26,"repoUrl":27,"updatedAt":3713},"konflux-release-data-rpa","update release tags in konflux-release-data","Bumps RHDH ReleasePlanAdmission tag versions in konflux-release-data for a stream release (e.g. 1.9.7), opens a GitLab merge request, and launches it in the browser. Use when updating RPA tags, konflux-release-data, ReleasePlanAdmission, rhdh-1-9-*.yaml, rhdh-plugin-catalog-1-9-*.yaml, or preparing an RHDH patch release.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3708,3709,3710],{"name":3582,"slug":3583,"type":16},{"name":3591,"slug":3592,"type":16},{"name":3711,"slug":3712,"type":16},"GitLab","gitlab","2026-07-16T06:00:19.516231",{"slug":3715,"name":3715,"fn":3716,"description":3717,"org":3718,"tags":3719,"stars":26,"repoUrl":27,"updatedAt":3726},"konflux-tekton-updates","update Konflux Tekton task digests","Bumps Konflux Tekton task digests with .tekton\u002FupdateDigests.sh --minor --no-push, applies konflux-ci\u002Fbuild-definitions MIGRATION.md pipeline fixes, and regenerates PipelineRuns. Use for rhdh-plugin-catalog, RHDH midstream (4-rhdh), Konflux task minor bumps, prefetch-dependencies-oci-ta, build-image-index, or updateDigests.sh.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3720,3721,3724,3725],{"name":3582,"slug":3583,"type":16},{"name":3722,"slug":3723,"type":16},"CI\u002FCD","ci-cd",{"name":3591,"slug":3592,"type":16},{"name":3558,"slug":3559,"type":16},"2026-07-16T06:03:28.123118",{"slug":3728,"name":3728,"fn":3729,"description":3730,"org":3731,"tags":3732,"stars":26,"repoUrl":27,"updatedAt":3738},"lifecycle","check Red Hat product lifecycle status","Check version lifecycle and support status for platforms and integrations used by RHDH. Covers OCP, AKS, EKS, GKE, RHDH releases, RHBK, Quay, PostgreSQL, and any Red Hat product via the Product Life Cycles API. Use when asking about version support, EOL dates, GA dates, support phases, or planning version upgrades. Also use for \"is X still supported\", \"what versions should we test\", or \"when does X reach EOL\".",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3733,3734,3735],{"name":3617,"slug":3618,"type":16},{"name":3569,"slug":3570,"type":16},{"name":3736,"slug":3737,"type":16},"Operations","operations","2026-07-16T06:03:19.344038",{"slug":3740,"name":3740,"fn":3741,"description":3742,"org":3743,"tags":3744,"stars":26,"repoUrl":27,"updatedAt":3750},"nfs-migration","migrate plugins to New Frontend System","Migrate Backstage frontend plugins from the legacy system to the New Frontend System (NFS). Use when asked to \"migrate to NFS\", \"new frontend system\", \"convert plugin to NFS\", \"createFrontendPlugin\", \"PageBlueprint\", \"ApiBlueprint\", \"SubPageBlueprint\", \"alpha to GA\", \"legacy to NFS\", \"frontend migration\", \"extension blueprints\", \"migrate frontend plugin\", \"NFS support\", \"graduate alpha\", or mentions migrating a Backstage plugin to the new frontend system for RHDH.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3745,3746,3749],{"name":3558,"slug":3559,"type":16},{"name":3747,"slug":3748,"type":16},"Frontend","frontend",{"name":3572,"slug":3573,"type":16},"2026-07-16T06:03:27.078987",{"slug":3752,"name":3752,"fn":3753,"description":3754,"org":3755,"tags":3756,"stars":26,"repoUrl":27,"updatedAt":3763},"overlay","manage RHDH plugin export overlays","Manages the rhdh-plugin-export-overlays repository — onboards plugins to the Extensions Catalog, updates plugin versions, fixes overlay build failures, triages and analyzes PRs, triggers publishes, and manages plugin workspaces. Use when working with overlays, importing plugins, debugging CI, checking PRs, bumping versions, or mentions \"Extensions Catalog\", \"overlay build failed\", \"plugin registry\", \"overlay PR\", \"overlay doctor\", \"plugin import\", \"add plugin to catalog\", \"onboard plugin\", or \"plugin workspace\".",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3757,3758,3761,3762],{"name":3582,"slug":3583,"type":16},{"name":3759,"slug":3760,"type":16},"Code Review","code-review",{"name":3591,"slug":3592,"type":16},{"name":3558,"slug":3559,"type":16},"2026-07-16T06:03:20.380044"]