skill tool—agents see available skills and can load the full content when needed.
You can also browse and invoke skills yourself: run /skills in the TUI to pick one, or type /<skill-name> directly, like a custom command.
Place files
Create one folder per skill and put aSKILL.md inside it.
Symbiotic Code searches these locations:
- Project config:
.symbiotic/skills/<name>/SKILL.md(or.symbiotic/skill/) - Global config:
~/.config/symbiotic/skills/<name>/SKILL.md(or~/.config/symbiotic/skill/) - Project Claude-compatible:
.claude/skills/<name>/SKILL.md - Global Claude-compatible:
~/.claude/skills/<name>/SKILL.md - Project agent-compatible:
.agents/skills/<name>/SKILL.md - Global agent-compatible:
~/.agents/skills/<name>/SKILL.md
SKILL.md below a skills/ directory is picked up.
Understand discovery
For project-local paths, Symbiotic Code walks up from your current working directory until it reaches the git worktree. It loads any matchingskills/**/SKILL.md in .symbiotic/ and any matching .claude/skills/**/SKILL.md or .agents/skills/**/SKILL.md along the way.
Global definitions are also loaded from ~/.config/symbiotic/skills/**/SKILL.md, ~/.claude/skills/**/SKILL.md, and ~/.agents/skills/**/SKILL.md.
If two skills share the same name, the one loaded last wins and a warning is logged.
Disable Claude/agent-compatible skills
Set one of these environment variables totrue or 1 to skip the .claude/ and .agents/ locations (project and global):
SYMBIOTIC_DISABLE_EXTERNAL_SKILLSSYMBIOTIC_DISABLE_CLAUDE_CODE_SKILLSSYMBIOTIC_DISABLE_CLAUDE_CODE(also disables other Claude Code compatibility features)
.symbiotic/ and ~/.config/symbiotic/ are always loaded.
Load skills from other places
Use theskills option in your config file to add more sources:
symbiotic.json
paths: extra directories scanned for**/SKILL.md. Paths can be absolute, start with~/, or be relative to your working directory. Missing directories are skipped with a warning.urls: remote skill indexes. Symbiotic Code fetchesindex.jsonfrom each URL, downloads the listed files of every skill that includes aSKILL.md, and caches them in~/.cache/symbiotic/skills/. Files already in the cache aren’t downloaded again.
index.json format is:
index.json
<url>/<skill-name>/<file>.
Security scanning
Every skill is scanned by the Symbiotic security scanner before it can be used. If the scan reports findings above informational severity, or the scan can’t complete, the skill is blocked. Scan verdicts are cached, so skills aren’t rescanned on every start. Your organization can also allow or deny specific skills from the Symbiotic Portal. Blocked skills:- are hidden from the agent and can’t be loaded with the
skilltool - are shown as Blocked in the
/skillsdialog - aren’t available as
/<skill-name>commands
Control access with permissions
Skills follow tool permissions with theskill key. Patterns match the skill name:
symbiotic.json
"deny" are hidden from the agent. Setting "skill": "deny" removes the skill tool entirely. You can also set this per agent.
Write frontmatter
EachSKILL.md must start with YAML frontmatter containing:
name(required): the name used to invoke the skilldescription(required): shown to the agent so it can decide when to load the skill
SKILL.md without both fields is ignored. Other frontmatter fields (for example license, compatibility, or metadata) are allowed but not used by Symbiotic Code. Everything after the frontmatter is the skill content given to the agent.
Name and describe your skill
Names and descriptions aren’t strictly validated, but for compatibility with other tools we recommend thatname:
- Is 1–64 characters
- Is lowercase alphanumeric with single hyphen separators, for example
git-release - Matches the directory name that contains
SKILL.md
description short (under 1024 characters) and specific enough for the agent to choose correctly.
Example
Create.symbiotic/skills/git-release/SKILL.md like this: