Create new deft skills with proper structure, RFC2119 notation, triggers, and progressive disclosure. Use when user wants to create, write, or build a new deft skill.
Install
npx skillscat add deftai/directive/deft-directive-write-skill Install via the SkillsCat registry.
Deft Write Skill
Create new deft skills that follow directive's conventions: RFC2119 notation, YAML frontmatter with triggers, clear When-to-Use sections, and proper naming.
Legend (from RFC2119): !=MUST, ~=SHOULD, ≉=SHOULD NOT, ⊗=MUST NOT, ?=MAY.
Inspired by write-a-skill from mattpocock/skills. Adapted to deft's SKILL.md conventions, RFC2119 notation, and naming patterns.
When to Use
- User wants to create a new skill for a workflow directive doesn't cover yet
- Formalizing an ad-hoc process that keeps repeating into a reusable skill
- Extending directive with project-specific or domain-specific skills
Deft Skill Naming Conventions
| Skill type | Naming pattern | Example |
|---|---|---|
| Framework / meta | deft-{verb} |
deft-build, deft-setup |
| GitHub-integrated | deft-directive-gh-{verb} |
deft-directive-gh-slice (triage verb reclaims to deft-directive-refinement) |
| Domain / project-specific | {project}-{verb} |
my-app-deploy |
Process
Step 1: Gather requirements
Ask the user (one question at a time):
- What task or domain does this skill cover?
- What specific use cases should it handle?
- Does it require external tools (e.g.,
gh,docker, database CLIs)? - Should it produce files, run commands, or guide a conversation?
- Any reference material or existing workflows to model from?
Step 2: Draft the skill
- ! Follow the deft SKILL.md template below
- ! Keep SKILL.md under 150 lines — split long templates into
references/*.md(see `references/composer-skill-porting.md`) - ! Write the
descriptionfield as if it's the only thing the agent will see when deciding whether to invoke this skill - ! Include negative triggers in
description(Do NOT trigger on …) so near-miss phrases do not load the wrong skill - ~ Use the trigger words the user would naturally say
- ! Use RFC2119 notation throughout (!=MUST, ~=SHOULD, ≉=SHOULD NOT, ⊗=MUST NOT, ?=MAY)
- ! Apply goal-gate determinism (#852): rigid goal, acceptance criteria, quality gates, exit/handoff, and scope
⊗boundaries; demote pure execution steps to~unless they are gates — see `patterns/goal-gate-determinism.md` - ~ Include attribution blockquote if inspired by an external source
- ~ When porting Warp-tuned playbooks, read `references/composer-skill-porting.md` for fast-path vs isolation, short-chat expectations, and Composer naming
Step 3: Review with user
Present the draft and ask:
- Does this cover your use cases?
- Anything missing or unclear?
- Should any section be more or less detailed?
Iterate until approved.
Step 4: Create the skill
- ! Create the directory
skills/{skill-name}/ - ! Write
skills/{skill-name}/SKILL.md - ~ Create
skills/{skill-name}/REFERENCE.mdorreferences/{topic}.mdif content exceeds 150 lines - ~ Create
skills/{skill-name}/scripts/for deterministic helper scripts - ! When the skill creates GitHub issues or PRs, instruct authors to use
--body-filewith OS-temp paths — never inline multi-line--bodystrings (seescm/github.md)
Deft SKILL.md Template
---
name: {skill-name}
description: >
{What it does in 1–2 sentences}. Use when {specific triggers —
what the user would say or what context activates this skill}.
Do NOT trigger on {near-miss phrase 1} or {near-miss phrase 2}.
triggers:
- {trigger phrase 1}
- {trigger phrase 2}
[metadata:
clawdbot:
requires:
bins: ["gh"] # only if external CLI is needed]
---
# {Skill Title}
{One-line description of what this skill does.}
Legend (from RFC2119): !=MUST, ~=SHOULD, ≉=SHOULD NOT, ⊗=MUST NOT, ?=MAY.
[> Inspired by ... — optional attribution]
## When to Use
- {Use case 1}
- {Use case 2}
[## Prerequisites
- ! Verify {tool} is available — stop and report if not]
---
## Process
### Step 1: {Name}
- ! {mandatory action}
- ~ {recommended action}
- ⊗ {forbidden action}
### Step 2: {Name}
...
---
## Anti-Patterns
- ⊗ {what NOT to do}
- ⊗ {what NOT to do}Description Writing Rules
The description is the only thing the agent sees when deciding whether to load this skill. Write it to answer:
- What capability does this provide?
- When should it trigger? (use "Use when..." pattern)
- What near-miss phrases must NOT trigger it? (use "Do NOT trigger on..." pattern)
- ! Max 1024 characters
- ! Include "Use when [specific triggers]" in the description
- ! Include "Do NOT trigger on [near-miss phrases]" when triggers could overlap another skill
- ⊗ Vague descriptions ("helps with things") — the agent can't distinguish between skills
- ! First sentence: what it does. Second sentence: when to use it. Third (when needed): what not to trigger on.
Anti-Patterns
⊗ Omitting RFC2119 notation — deft skills use it consistently
⊗ Putting all content in SKILL.md when it exceeds 150 lines — split into
references/*.mdorREFERENCE.md⊗ Prescribing a rigid tool-call path as MUST when only the goal/gates need determinism — use goal-gate-determinism (#852)
⊗ Putting every agent-host branch (Warp, Cursor, OpenClaw, Grok Build, generic) in one always-loaded SKILL body when a host-neutral core + per-host adapter split is feasible (#2928)
Host-adapter skills (multi-host) (#2928)
Large skills that branch on agent host (the runtime: Warp, Cursor, OpenClaw, Grok Build, generic-terminal) SHOULD use progressive host adapters:
- ! Keep a thin host-neutral core in
SKILL.md(triggers, phase overview, detect, route table, cross-host MUST gates). - ! Put shared depth in
references/core-*.md. - ! Put each host path in
references/host-<id>.md(spawn primitive, cwd rules, monitor liveness, host MUST NOT list). - ! Default load path: detect host → read core + one adapter.
- ⊗ Load all host adapters “just in case.”
Exemplar: skills/deft-directive-swarm/ (route table in SKILL + references/host-openclaw.md etc.).
- ⊗ Vague trigger phrases — use phrases the user would actually type
- ⊗ Overlapping triggers without negative triggers — add
Do NOT trigger on …to the description - ⊗ Naming a GitHub-integrated skill without
ghin the name - ⊗ Writing the description without a "Use when..." clause
- ⊗ Inline multi-line
gh --bodystrings in skill steps — use--body-fileperscm/github.md