From 236ce7a8c05cc2a6a31b0fa82ebabfa81853d35b Mon Sep 17 00:00:00 2001 From: "opencode-agent[bot]" <219766164+opencode-agent[bot]@users.noreply.github.com> Date: Sun, 21 Dec 2025 23:49:28 -0600 Subject: docs: Agent Skills (#5931) Co-authored-by: opencode-agent[bot] Co-authored-by: rekram1-node Co-authored-by: Aiden Cline --- packages/web/src/content/docs/skills.mdx | 120 +++++++++++++++++++++++++++++++ 1 file changed, 120 insertions(+) create mode 100644 packages/web/src/content/docs/skills.mdx (limited to 'packages/web/src') diff --git a/packages/web/src/content/docs/skills.mdx b/packages/web/src/content/docs/skills.mdx new file mode 100644 index 000000000..217d4b3d2 --- /dev/null +++ b/packages/web/src/content/docs/skills.mdx @@ -0,0 +1,120 @@ +--- +title: "Agent Skills" +description: "Define reusable behavior via SKILL.md definitions" +--- + +Agent skills let OpenCode discover reusable instructions from your repo or home directory. +When a conversation matches a skill, the agent is prompted to read its `SKILL.md`. + +--- + +## Place files + +Create one folder per skill name and put a `SKILL.md` inside it. +OpenCode searches these locations: + +- Project config: `.opencode/skill//SKILL.md` +- Global config: `~/.opencode/skill//SKILL.md` +- Claude-compatible: `.claude/skills//SKILL.md` + +--- + +## Understand discovery + +For project-local paths, OpenCode walks up from your current working directory until it reaches the git worktree. +It loads any matching `skill/*/SKILL.md` in `.opencode/` and any matching `.claude/skills/*/SKILL.md` along the way. + +Global definitions are also loaded from `~/.opencode/skill/*/SKILL.md`. + +--- + +## Write frontmatter + +Each `SKILL.md` must start with YAML frontmatter. +Only these fields are recognized: + +- `name` (required) +- `description` (required) +- `license` (optional) +- `compatibility` (optional) +- `metadata` (optional, string-to-string map) + +Unknown frontmatter fields are ignored. + +--- + +## Validate names + +`name` must: + +- Be 1–64 characters +- Be lowercase alphanumeric with single hyphen separators +- Not start or end with `-` +- Not contain consecutive `--` +- Match the directory name that contains `SKILL.md` + +Equivalent regex: + +```text +^[a-z0-9]+(-[a-z0-9]+)*$ +``` + +--- + +## Follow length rules + +`description` must be 1-1024 characters. +Keep it specific enough for the agent to choose correctly. + +--- + +## Use an example + +Create `.opencode/skill/git-release/SKILL.md` like this: + +```markdown +--- +name: git-release +description: Create consistent releases and changelogs +license: MIT +compatibility: opencode +metadata: + audience: maintainers + workflow: github +--- + +## What I do + +- Draft release notes from merged PRs +- Propose a version bump +- Provide a copy-pasteable `gh release create` command + +## When to use me + +Use this when you are preparing a tagged release. +Ask clarifying questions if the target versioning scheme is unclear. +``` + +--- + +## Recognize prompt injection + +OpenCode adds an `` XML block to the system prompt. +Each entry includes the skill name, description, and its discovered location. + +```xml + + + git-release + Create consistent releases and changelogs + .opencode/skill/git-release/SKILL.md + + +``` + +--- + +## Troubleshoot loading + +If a skill does not show up, verify the folder name matches `name` exactly. +Also check that `SKILL.md` is spelled in all caps and includes frontmatter. -- cgit v1.2.3