skills/write-a-skill/SKILL.md
Author a single new skill — produce a SKILL.md plus optional bundled references and scripts following Anthropic's progressive-disclosure conventions. Trigger when the user asks to "write a skill", "create a skill", "draft a SKILL.md", or "add a skill" for a specific capability. Distinct from repo onboarding workflows that write AGENTS.md and project conventions.
npx skillsauth add outlinedriven/odin-codex-plugin write-a-skillInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Skill authoring loop: gather requirements, draft against the SKILL.md contract, review with the user, refine. One concern per skill; one skill per directory. Apply the skill-creator:skill-creator methodology (three-level progressive disclosure, pushy descriptions, evals.json).
write-a-skill — authors one SKILL.md for one capability inside an existing skills tree.skill-creator:skill-creator — the upstream methodology this skill applies; consult it for the canonical contract.Gather requirements — surface decisions before drafting:
Draft the SKILL.md — write to the contract below. Keep body terse and decision-oriented.
Review with the user — present the draft, surface ambiguous decisions, and refine.
Verify — run any bundled evals.json cases; targeted re-read of the SKILL.md to confirm description triggers and body alignment.
skill-name/
SKILL.md # contract; required
references/ # deeper docs loaded on-demand
REFERENCE.md
EXAMPLES.md
scripts/ # deterministic helpers
helper.{ts,py,sh}
evals.json # trigger / behavior evals
Reference paths in SKILL.md use references/X.md, never ./X.md.
---
name: skill-name
description: <what the skill does>. <when to trigger it — concrete phrases or contexts>.
---
<One-line imperative summary of the skill's posture.>
## <Section> — terse decision-oriented prose
<Body in imperative voice with brief why. ≤200 lines.>
Frontmatter rules:
name — kebab-case, matches directory.description — pushy: name what AND when. Max 1024 chars. Third person. First sentence states capability; second sentence states triggers.disable-model-invocation: true — preserve verbatim from source if present; do not fabricate.Weak: Helps with documents. Strong: Extract text and tables from PDF files, fill forms, merge documents. Trigger when user mentions PDFs, forms, or document extraction.
Add a script when the operation is deterministic and the same code would otherwise be regenerated each invocation. Skip scripts when the work is contextual reasoning the model must perform fresh each time.
Imperative or third person. No "you/your" addressee. English-mandate: grammatical English, articles preserved. Banned tooling absent: prefer bat -P -p -n, fd, git grep, ast-grep, srgn, hyperfine, difft, eza, rip over their banned counterparts.
testing
ODIN's compress-operations dispatcher under the Compressor/Extender role. Invoke on "tidy", "clean up", "tidy this file/memory/workspace/git/docs", or when active context (current file, diff, stack, memory directory) has structural rot to resolve before touching behavior. Detects target domain from context and routes to the sibling skill. Requires explicit target or clear active-context signal — do not invoke speculatively.
development
Cross-domain taste skill — apply distinctive judgment to any artifact (prose, code, design, decisions) instead of converging to AI defaults. Two modes — `audit` (judge work against the two-sided charter and portable anchors) and `anchor` (load register before producing). Auto-detects by phrasing; override via `/taste audit | anchor`. Trigger on "is this slop?", "overkill?", "elegant?", "taste-test this".
tools
One-shot bootstrap of strict-mode tooling per ecosystem plus per-task GOALS.md scaffolding so an agentic loop can self-verify. Writes typechecker/linter/schema-validator config for TS (strict + noUncheckedIndexedAccess + exactOptionalPropertyTypes), Python (Pyright strict, Ruff strict), Rust (Clippy deny-correctness), Go (golangci-lint with staticcheck), OCaml (dune --release); establishes `.agent-tasks/<id>/GOALS.md` per-task convention distinct from project-stable AGENTS.md. C++/Java/Kotlin and framework specifics (Spring Boot, Nest, React-strict) are out of scope. Trigger on new project bootstrap, agentic-task setup, "make this self-verifying", "set the loop's goal", "scaffold goals for this issue". Pairs with `llm-self-loop` runtime.
tools
Install git pre-commit hooks via the project's hook tool — Husky+lint-staged (JS), pre-commit (Python/OCaml), lefthook (Go), cargo-husky (Rust). Use when the user wants commit-time formatting, linting, type-checking, or test gates. Detects ecosystem first.