Skip to content

Skills

Skills are reusable knowledge, workflows, and procedures that agents can discover and use. Unlike plugins (which are code), skills are markdown documents — anyone can write one without programming.


What is a Skill?

A skill is a directory containing a SKILL.md file:

skills/
├── weather/
│ └── SKILL.md
├── github/
│ ├── SKILL.md
│ └── references/
│ └── api.md
└── 1password/
└── SKILL.md

The agent discovers skills automatically, matches them to user messages by keyword, and loads the relevant ones into context when needed.


Writing a Skill

Basic Structure

---
name: weather
description: Check current weather and forecasts for any location
triggers: weather, forecast, temperature, rain, snow, wind
version: 1
category: utilities
tags: api, location
---
# Weather Skill
Check weather conditions using the wttr.in API.
## Usage
To check the weather for a location:
\```bash
curl "wttr.in/New+York?format=j1"
\```
## Formatting
Present weather data as:
- Current temperature (°F)
- Conditions (sunny, cloudy, rain, etc.)
- Wind speed and direction
- Forecast for next 3 days
## Notes
- Use `web_fetch` tool with wttr.in for no-API-key weather
- Default to the user's location if known
- Use °F for US users, °C for everyone else

Frontmatter Fields

The YAML frontmatter between --- delimiters is parsed automatically:

FieldRequiredDescription
nameYesSkill identifier (lowercase, hyphens). Used in skill_manage and skill_list.
descriptionYesOne-line description. Shown in skill listings.
triggersYesComma-separated keywords for matching user messages.
versionNoInteger version number. Incremented on edits.
categoryNoGrouping category (e.g., utilities, development, api).
tagsNoComma-separated tags for additional categorization.

No Frontmatter? No Problem.

If you skip the --- delimiters, the skill system falls back to:

  • Name → first markdown heading
  • Description → first paragraph after the heading
  • Triggers → extracted from the description text (keywords with stop words removed)

How Skills Are Discovered

On boot, the skill manager scans all directories listed in runtime.skill_dirs (plus the built-in skills/ directory). For each subdirectory containing a SKILL.md, it parses the frontmatter and registers the skill.

Configuration

runtime:
skill_dirs:
- ./skills # Your custom skills
- /shared/skills # Team-shared skills
- ~/.rivetos/skills # User-global skills

Discovery Flow

Boot
└── SkillManager.discover(skill_dirs)
├── Scan each directory for subdirectories with SKILL.md
├── Parse frontmatter (name, description, triggers)
└── Register in memory

How Skills Are Matched

When a user sends a message, the skill system scores each skill against the message content:

  1. Tokenize the user message into keywords
  2. Compare against each skill’s triggers
  3. Score based on overlap (number of matching triggers ÷ total triggers)
  4. Load the top-scoring skill(s) into the agent’s context

This happens automatically via the skill:before hook. The agent sees the skill content as additional context in its prompt.


Agent Tools for Skills

Agents have two built-in tools for managing skills:

skill_list

Lists all discovered skills with their names, descriptions, and trigger counts.

skill_manage

Full CRUD for skills:

ActionDescription
createCreate a new skill directory with SKILL.md
editReplace the full SKILL.md content
patchApply FIND/REPLACE blocks to SKILL.md
deleteRemove a skill directory
retireMark a skill as retired (hidden from matching)
readRead SKILL.md content (level 1) or include reference files (level 2)
write_fileWrite a reference file into the skill directory

Example: Agent Creates a Skill

User: "Remember how to deploy to production — the process we just figured out."
Agent uses skill_manage:
action: create
name: production-deploy
description: Production deployment process for the web app
content: |
---
name: production-deploy
description: Step-by-step production deployment process
triggers: deploy, production, release, ship
---
# Production Deploy
1. Run tests: `npm test`
2. Build: `npm run build`
3. Tag: `git tag v$(date +%Y%m%d)`
4. Push: `git push --tags`
5. Deploy: `pulumi up --stack prod`
6. Verify: `curl https://app.example.com/health`

Reference Files

Skills can include additional files beyond SKILL.md:

skills/github/
├── SKILL.md # Main skill document
└── references/
├── api.md # GitHub API reference
└── workflows.md # Common workflow patterns

Reference files are loaded when the agent reads the skill at level 2 (skill_manage with level: 2).

To write a reference file from the agent:

Agent uses skill_manage:
action: write_file
name: github
file_path: references/api.md
file_content: |
# GitHub API Quick Reference
...

Skill Lifecycle

Creating Skills

Skills can be created by:

  • You — manually create directories with SKILL.md files
  • The agent — via skill_manage create during conversation
  • The learning loop — the review loop can extract patterns into skills automatically

Versioning

The version field in frontmatter is an integer. The skill_manage edit and patch actions automatically increment it and append a changelog entry:

## Changelog
- v3 (2026-04-05): Updated deployment steps for new CI pipeline
- v2 (2026-04-01): Added rollback procedure
- v1 (2026-03-28): Initial version

Deduplication

When creating a skill, the system checks for existing skills with similar names. If a match is found, it suggests editing the existing skill instead. Use force: true to bypass this check.

Security

Skill content is validated before loading:

  • No executable code blocks in dangerous languages (unless explicitly allowed)
  • No references to paths outside the workspace
  • Size limits enforced

Built-In Skills

RivetOS ships with several skills out of the box:

SkillDescription
1password1Password CLI integration
discordDiscord bot management
excalidrawDiagram creation
gh-issuesGitHub Issues workflow
githubGitHub repository operations
gogGoogle Workspace (Docs, Sheets, Calendar)
healthcheckSystem health monitoring
nemotronLocal embedding model usage
skill-creatorMeta-skill for creating new skills
stealth-browserHeadless browser automation
tmuxTerminal multiplexer management
weatherWeather lookup
coding-pipelineMulti-agent code build/review loop

Best Practices

  1. Be specific with triggers. deploy, production, release is better than code, stuff, things.
  2. Write for the agent, not for humans. The skill is context the agent reads — include exact commands, API formats, and decision rules.
  3. One concern per skill. A skill for “GitHub” and a separate skill for “deployment” is better than one mega-skill.
  4. Include examples. Show the agent exactly what the output should look like.
  5. Update, don’t duplicate. Use skill_manage edit to improve existing skills rather than creating overlapping ones.
  6. Use reference files for large content. Keep SKILL.md focused. Put API docs, long references, and templates in references/.