Author or edit an Agent Skill that follows the agentskills.io spec — the SKILL.md frontmatter and body, plus optional scripts/, references/, and assets/. Use when the user wants to create a new skill, turn a repeatable workflow into reusable know-how, edit an existing skill (its name, description, instructions, or any frontmatter field), restructure or split a skill, validate one, or package one for sharing or for the Kortix marketplace.
kortix marketplace search "<topic>" --json, inspect the close matches with kortix marketplace show <name> --json, and only author something new when nothing covers the need. (See the kortix-system skill's marketplace reference for the full flow.)SKILL.md at its root. Everything else is optional and added only when it earns its place:my-skill/
├── SKILL.md (required) — frontmatter + instructions
├── scripts/ (optional) — executables for repetitive, deterministic work
├── references/ (optional) — deep docs the agent reads only when needed
└── assets/ (optional) — templates, sample files, images the skill emits
SKILL.md. Add bundled folders only when there's real repetition to script, reference material too long to inline, or templates the skill reuses verbatim — anything an agent would otherwise rebuild on every run..kortix/opencode/skills/<name>/SKILL.md
name in the frontmatter. At runtime, OpenCode also discovers skills from .opencode/skills/, .claude/skills/, and .agents/skills/ (project and home directory). For a Kortix project, author under .kortix/opencode/skills/ — that's the canonical home and what the marketplace installs into.skill tool description and loads the body on demand when the agent calls it. Two consequences worth internalizing:name + description alone. A vague description means the skill never fires.kortix cr open). See the kortix-system skill.---, then the markdown body.---
name: my-skill
description: "What this skill does and the exact situations that should trigger it."
---
# Skill Title
## When to use this skill
The scenarios where this skill applies — be concrete.
## Instructions
Step-by-step guidance another agent can follow without guessing.
## Examples
Representative inputs and the output they should produce.
Hard rule: the very first characters of the file are---. No title, no comment, no blank line before the frontmatter — the loader rejects it otherwise.
| Field | Required | Notes |
|---|---|---|
name | yes | Must match the directory name. Rules below. |
description | yes | 1–1024 chars. The discovery trigger — make it earn the load. |
license | no | e.g. MIT, Apache-2.0. |
compatibility | no | Environment requirements, ≤500 chars. |
metadata | no | A string-to-string map for any extra key-value data. |
allowed-tools | no | Space-delimited pre-approved tool list (experimental). |
name rules — enforced by the regex ^[a-z0-9]+(-[a-z0-9]+)*$:--release-notes, competitor-teardown, invoice-parse — Bad: -draft, My_Skill, pdf--mergedescription craft — this is where most skills succeed or fail::, #, [, {, a leading -, or words like yes/no/null that YAML reads as special. Quoting is always safe — when in doubt, quote.metadata, never at the top level:metadata:
version: "1.0"
owner: revops
.kortix/opencode/skills/<name>/SKILL.md, frontmatter starting on line 1. Add scripts/, references/, or assets/ only if the skill genuinely needs them.SKILL.md as the always-loaded core and push depth outward. Aim to keep it under ~500 lines. When it grows, move long procedures, schemas, or background into references/*.md and link to them with a one-line note on when to read each — for example: "For the full field-by-field schema, read references/schema.md." The agent then pulls detail only when the task demands it, keeping context lean. This progressive-disclosure split is also what lets one skill carry a lot of know-how without bloating every invocation.agentskills validator is available, point it at the skill directory (not a single file, not a zip) once every file is in place:agentskills validate .kortix/opencode/skills/<name>/
SKILL.md is spelled in all caps, the frontmatter has both name and description, the name matches the directory, and the name is unique. When those hold, the skill shows up in the skill tool's <available_skills> list and can be loaded. If it doesn't appear, re-check those four things and any permission.skill deny rules in opencode.json.git push origin HEAD, then kortix cr open --title "Add <name> skill" --description "...". It reaches future sessions only after the CR merges to main.SKILL.md directly.scripts/, references/, or assets/ → zip the whole directory (.zip, not tar). The bundled files are part of the skill; don't strip them.kortix marketplace install it instead of copy-pasting. (Registry authoring commands — kortix registry build/validate — are developer tools, distinct from the consumer kortix marketplace surface.)---
name: release-notes
description: "Draft release notes and a changelog entry from merged work. Use when the user asks to write release notes, summarize what shipped, prep a changelog, or announce a version."
license: MIT
---
# Release Notes
## When to use this skill
Use when the user wants release notes, a changelog entry, or a "what shipped" summary for a version or a range of merged work.
## Instructions
1. Gather the merged changes in scope (a tag range, a milestone, or an explicit list).
2. Group them into Added / Changed / Fixed / Removed.
3. Write each line in the imperative, user-facing voice — the benefit, not the diff.
4. Lead the summary with the single most important change.
5. Emit two artifacts: a short announcement paragraph and a structured changelog block.
## Examples
Input: "release notes for v2.4 — we added SSO, fixed the CSV export bug, dropped the legacy API."
Output: an announcement paragraph plus a grouped changelog with those three entries.
---: a title, a comment, or a blank line. The first byte of the file must be -.description (or another value) contains a YAML-special character — most often :, but also #, [, {, a leading -, or yes/no/null. Wrap the value in double quotes.^[a-z0-9]+(-[a-z0-9]+)*$ rule, doesn't match the directory, or duplicates an existing skill. Check the project's existing skill names before settling on one.name, description, license, compatibility, metadata, and allowed-tools are permitted there; nest everything else under metadata.