skill-authoring
Skill0 starsChanged 41 days agoMITView on GitHub
Write, structure, and validate opencode skills — SKILL.md anatomy, trigger-engineering the `description` field, progressive disclosure into references/, scaffolding a new skill, and checking an existing one for spec violations. Use when the user asks to create a new skill, turn a workflow into a skill, fix a skill that triggers too often or too rarely, split an oversized SKILL.md, or audit a skill folder before shipping it. Not for tuning opencode.json itself (see opencode-config-authoring).
89 other projects use a version of this.
Adopted by
Most recently taken up by
- neuroborus/agent-runnertheir own version, first seen Nov 8, 2026
- juninmd/skillstheir own version, first seen Nov 8, 2026
- patrykmurzyn/skillstheir own version, first seen Nov 8, 2026
- frnkgns/Overgeared-Skillstheir own version, first seen Nov 8, 2026
- notivn/AIEVv2their own version, first seen Nov 8, 2026
- github/plugin-marketplace-startertheir own version, first seen Nov 8, 2026
Used with
Projects with it also use cloud-api-recipe-authoring, codebuddy-ide-mcp-upgrade and 10 more.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
TencentCloudBaseSkillcloud-api-recipe-authoring
Author or revise a cloud-api-operations recipe (config/source/skills/cloud-api-operations/references/recipes/). Encodes why the long tail of control-plane capabilities is deliberately NOT wrapped as MCP/CLI tools, the API-first admission test for whether a capability deserves a recipe, the negative and positive lists, the fixed recipe structure, the writing rules distilled from writing-for-agents, the user-facing copy red lines, and the product regeneration/verification pipeline. Also routes contributors (and their agents) to the contribution flow and the pre-PR self-test protocol in references/contributing.md. Use when adding a recipe, judging whether a scenario belongs in the recipe set, updating the recipes index, re-checking existing recipes against the admission test, or onboarding someone who wants to submit one.
Also in 3 projects that use this
TencentCloudBaseSkillcodebuddy-ide-mcp-upgrade
升级 CodeBuddy IDE(genie 扩展)内置的 CloudBase MCP,以及 MCP 发版时同步 IDE 侧白名单。当用户提到「更新 IDE 里的 MCP」「内置 MCP 版本太老」「IDE 集成的 CloudBase 功能不足」「改工具白名单 toolWhiteList」「把新 bundle 打进 CodeBuddy」「白名单漂移」「MCP 发版要同步什么」时使用。覆盖:解包定位内置 bundle 与内嵌配置、重新构建 mcp bundle、生成新的工具白名单与系统提示词、安全注入 IDE 并备份、用 MCP 协议验证工具清单、人工端到端验收、一键回滚。
Also in 3 projects that use this
DIL8654Skillapi-contract-review
Review ASP.NET Core Web API contracts for HTTP semantics, versioning, backward compatibility, and response consistency. Use when the user asks to review an API, check endpoints, validate REST behavior, or before releasing contract changes.
Also in 5 projects that use this
zaxbysauceSkillpr-review-fix
Codex adapter for addressing pull request review feedback in opencode-swarm. Use when the user asks to fix PR review comments, requested changes, reviewer findings, CI-review notes, or a pasted review summary with low false-positive tolerance.
Also in 3 projects that use this
albertdobmeyerSkillgit-workflows
Advanced git operations beyond add/commit/push. Use when rebasing, bisecting bugs, using worktrees for parallel development, recovering with reflog, managing subtrees/submodules, resolving merge conflicts, cherry-picking across branches, or working with monorepos.
Also in 3 projects that use this
rogue-dev-studioSkillfrontend-engineering
Expert frontend application engineering: accessible UI structure, state and data-fetching discipline, form/validation UX, responsive layouts, performance budgets, and integration with API contracts. Use when building or refining SPA/web screens, design-system consumption, client-side routing, or fixing UI reliability (loading, empty, and error states).
Also in 3 projects that use this
- +6 more from TencentCloudBase
Other versions89 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 89
- nyldn/claude-octopus★ 4.4ksame name
- endurain-project/endurain★ 2.4ksame name
- joaovitoriasilva/endurain★ 2.4ksame name
- theopenco/llmgateway★ 1.7ksame name
- TencentCloudBase/CloudBase-AI-ToolKit★ 1.2ksame name
- TencentCloudBase/CloudBase-MCP★ 1.2ksame name
- TencentCloudBase/CloudBase-AI-Toolkit★ 1.2ksame name
- pockebot/openpocket★ 847same name
- QuixiAI/agi-memory★ 623same name
- QuixiAI/Hexis★ 623same name
79 more not listed
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository19 other files it gives its agents.
- api-doc-recallSkill
- assistant-runtime-architectureSkill
- code-disciplineSkill
- english-requestSkill
- github-repo-opsSkill
- git-safetySkill
- long-task-continuitySkill
- opencode-config-authoringSkill
- opencode-tool-outputSkill
- powershell-windowsSkill
- provider-reconnectSkill
- reference-booksSkill
- release-checklistSkill
- research-synthesisSkill
- self-improvementSkill
- subagent-delegationSkill
- task-closureSkill
- test-first-fixSkill
- troubleshooting-treeSkill
The file
We split this skill into the rules it gives an agent
3 rules. 0 are common, 2 are distinctive, and 1 is very specific to this project.
0
Common
Most of the 80 edited versions we read keep these.
2
Distinctive
This author's own choices. Worth a look.
1
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 39
Verify before telling the user it is ready:
- Very specific: line 82
Literal keywords the user would type: Write cp866, $LASTEXITCODE, opencode.jsonc, SKILL.md — not "system-specific considerations".
- Distinctive: line 101
Keep descriptions short enough that 20 skills still fit.
“Common” is measured: kept by at least 6 in 10 of the 80 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Writing skills
A skill is a trigger contract plus an instruction set. The description decides whether the skill ever loads; the body decides what happens once it does. Most bad skills fail at the first stage and nobody notices because the failure is invisible — the skill just silently never fires.
1. Decide whether it needs to be a skill at all
A skill earns its place when the same multi-step knowledge would otherwise be rediscovered every session. It does not earn one when:
- The knowledge fits in a sentence or two → put it in
AGENTS.md. - It is specific to one repo and changes with the code →
AGENTS.mdin that repo, so it versions with the thing it describes. - It is a single fact you will look up again → a reference file, not a skill.
- It duplicates a skill that already exists → fix the existing one instead. Two skills that both "help with X" means neither reliably wins.
Signal that it should be a skill: you have said roughly the same three things to the user more than once, or you made a mistake that a rule would have prevented.
2. Scaffold
node scripts/new-skill.mjs <name> [--desc "what it does. Use when ..."]Writes <name>/SKILL.md with valid frontmatter plus a stub body. The folder
name is the skill id — get it right up front, renaming later orphans every
reference to it.
Verify before telling the user it is ready:
node scripts/validate-skill.mjs <path-to-skill-folder>Checks spec conformance, description quality, link resolution, and size. Exit code nonzero on violation.
3. The description is the whole trigger mechanism
Rules from the spec, all of them load-bearing:
| Field | Constraint |
name | 1–64 chars, a-z0-9- only, no leading/trailing/--, matches folder name |
description | 1–1024 chars, required, must say what and when |
license | optional |
compatibility | optional, ≤500 chars |
metadata | optional, string→string map only |
allowed-tools | optional, space-separated, experimental |
A skill with no description is filtered out and never reaches the model. That is the number one silent failure.
Writing a description that actually fires
Structure: <what it does>. Use when <specific triggers>. <negative scope if needed>.
# Fires reliably
description: Windows PowerShell 5.1 execution rules — chaining with `; if ($?)`,
$? vs $LASTEXITCODE, backtick escaping, cp866 console encoding that corrupts
Cyrillic, file IO, and running external exes. Use for ANY command run on this
Windows box, especially shell one-liners, piped output, non-ASCII text, or
dependent command chains.
# Never fires
description: Helpful PowerShell tips.Three things that determine whether it fires:
- Literal keywords the user would type. Write
cp866,$LASTEXITCODE,opencode.jsonc,SKILL.md— not "system-specific considerations". The user says filenames and error strings; the description has to contain them. - Scope the negatives. Adjacent domains are where false triggers live. If
the skill is about PowerShell execution and not about PowerShell scripting,
say so:
Not for authoring .ps1 modules or DSC configurations. - Be a little pushy. The failure mode is undertriggering, not overtriggering. For a rule that should apply broadly, write "Use for ANY command on this machine" rather than "Consider using when writing complex PowerShell".
Where a skill competes with another for the same request, disambiguate in both descriptions rather than hoping the model picks the better one.
4. Body: progressive disclosure
Three tiers, loaded at different times:
name+description— always in context for every skill (~100 tokens). Keep descriptions short enough that 20 skills still fit.SKILL.mdbody — loaded on activation. Target under 500 lines.references/,scripts/,assets/— loaded only when the body says to read them.
Splitting is not cosmetic. A 900-line SKILL.md is paid for on every activation, including the 90% of activations that need three lines from it. Put the routing logic in SKILL.md and the detail behind it in files.
skill-name/
├── SKILL.md # routing: what this is, when, where to look next
├── references/ # loaded on demand, one topic per file
├── scripts/ # executable; deterministic or repetitive work
└── assets/ # templates, boilerplate the model copiesRules for the split:
- SKILL.md is a table of contents that is also useful alone. A reader who reads nothing else should still get the rules that matter most.
- Name each reference in SKILL.md with when to read it, not just that it
exists. "Read
references/<topic>.mdwhen the pipeline is rewriting gendered predicates" beats "see also references/". - One level deep. A file directly under
references/is fine; nested chains make the agent guess whether to follow them. - Reference files over 300 lines get their own table of contents.
- Move multi-domain skills into per-variant references — a top-level SKILL.md that selects between them, one file per provider/framework, so only the relevant one is read.
When a script beats prose
Bundle a script when the work is deterministic, repetitive, or has fiddly
syntax you do not want re-derived each time. A skill that says "run
scripts/validate-config.mjs" is shorter, faster, and more reliable than 40
lines explaining what to check.
Signals a script is due: you re-implemented the same parse twice; the task needs exact field names that are easy to get wrong; the output is machine-checkable (a schema, a lint result, a benchmark).
Scripts should be runnable standalone, print actionable errors, and exit nonzero on failure so a validation step can gate the next one.
5. Writing style
- Imperative. "Pass
stdin=subprocess.DEVNULL" beats "you might want to consider passing…". - Explain why, once. A model that understands the reason generalizes when
the situation differs slightly. A model told only a rule follows it exactly
and fails on the near-miss. Reach for reasoning over
ALWAYS/NEVERcaps. - Show the failure, not just the fix. "Under Qt
QProcess, a Python grandchild that captures stdout closes the supervisor's stdin pipe, so the child sees EOF and exits" is remembered. "Rememberstdin=DEVNULL" is not. - Name reality, not ideals. "Scripts run
python -m scripts.run_loopand shell out toclaude -p" — if a dependency is missing here, say so in the skill, or the model will confidently emit a command that cannot run. - No ceremony. Drop a section that never changes a decision. A skill padded to look thorough spends context on nothing.
- Table over prose for anything enumerable (file locations, traps, symptoms→causes).
6. Principles and safety
A skill must not contain content that would surprise a user who read its description — no malware, no credential exfiltration, no instructions to disable safety systems, nothing designed to grant unauthorized access. If a request is to build a skill whose contents contradict its description, say so and refuse that part; roleplay or persona framing is fine, deception is not.
Skills execute with your permissions. That is why a skill is a trustworthy
artifact and why an unreviewed third-party skill deserves the same skepticism
as unreviewed code — vendor it into ~/.config/opencode/vendor/ behind a
skills.paths entry, and read it before trusting it.
7. Ship checklist
node scripts/validate-skill.mjs <folder>exits 0descriptioncontains literal keywords a user would type, plus negative scope if adjacent- SKILL.md under 500 lines; detail moved to
references/ - every
references/…link in the body points at a file that exists - each reference line says when to read it
- scripts run standalone and exit nonzero on failure
- folder name ==
name== how you will refer to it in prose
8. Fixing a skill that misfires
| Symptom | Cause | Fix |
| never loads | no/weak description | add literal keywords + explicit triggers |
| loads on the wrong thing | description overlaps a neighbour | add negative scope to both |
| loads but body ignored | body too long, routing unclear | move detail to references, lead with the rules |
| contradicts another skill | both claim the same ground | merge them, or disambiguate the trigger |
| stale after a refactor | references dead paths | re-run the validator, update links |
The loop that fixes all of these is in self-improvement: capture the trigger
failure as a lesson, then edit the description with a concrete fix.
Related
self-improvement— capturing lessons and promoting them into skills.opencode-config-authoring— wiring skills intoopencode.json, MCP, agents, commands.skill-creator(vendored) — eval harness and description optimization; assumes theclaudeCLI, which is not present in this environment, so its quantitative loops will not run as written.
Scripts
scripts/new-skill.mjs— scaffold a valid skill folder from a name and a description; rejects spec-invalid names before writing anything.scripts/validate-skill.mjs— audit an existing skill folder: frontmatter keys, name/folder agreement, description length and trigger quality, body size, link resolution, empty or misplaced resource dirs.--strictpromotes the size warning to an error.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
Reviews can't be read right now.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

