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?
Section titled “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.mdThe agent discovers skills automatically, matches them to user messages by keyword, and loads the relevant ones into context when needed.
Writing a skill
Section titled “Writing a skill”Basic structure
Section titled “Basic structure”---name: weatherdescription: Check current weather and forecasts for any locationtriggers: weather, forecast, temperature, rain, snow, windversion: 1category: utilitiestags: api, location---
# Weather Skill
Check weather conditions using the wttr.in API.
## Usage
To check the weather for a location:
\```bashcurl "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 elseFrontmatter fields
Section titled “Frontmatter fields”The YAML frontmatter between --- delimiters is parsed automatically:
| Field | Required | Description |
|---|---|---|
name |
Yes | Skill identifier (lowercase, hyphens). Used in skill_manage and skill_list. |
description |
Yes | One-line description. Shown in skill listings. |
triggers |
Yes | Comma-separated keywords for matching user messages. |
version |
No | Integer version number. Incremented on edits. |
category |
No | Grouping category (e.g., utilities, development, api). |
tags |
No | Comma-separated tags for additional categorization. |
No frontmatter? no problem.
Section titled “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
Section titled “How skills are discovered”On boot, the skill manager scans every directory listed in runtime.skill_dirs (defaults to ~/.rivetos/workspace/skills/ if unset). For each subdirectory containing a SKILL.md, it parses the frontmatter and registers the skill.
Configuration
Section titled “Configuration”runtime: skill_dirs: - ~/.rivetos/workspace/skills # User-global skills (default if unset) - /rivet-shared/skills # Team-shared skills (optional)Team-shared skills are how a mesh standardizes behavior: drop a skill in the shared directory once and every node that lists it picks it up. The first entry in skill_dirs is where skill_manage create writes, so keep the node-local directory first and the shared directory last. The MCP sidecar resolves its own skill directories separately, from RIVETOS_SKILL_DIRS (colon-separated) in the environment, falling back to ~/.rivetos/skills; set it in ~/.rivetos/.env so harness sessions see shared skills too.
The reference team-shared skill is unslop (/rivet-shared/skills/unslop/ on a running mesh): 31 rules for cutting AI tells from prose, ported from pstack-claude (MIT). Every agent applies it before publishing prose a human will read.
Discovery flow
Section titled “Discovery flow”Boot └── SkillManager.discover(skill_dirs) ├── Scan each directory for subdirectories with SKILL.md ├── Parse frontmatter (name, description, triggers) └── Register in memoryHow skills are matched
Section titled “How skills are matched”When a user sends a message, the skill system scores each skill against the message content:
- Tokenize the user message into keywords
- Compare against each skill’s triggers
- Score based on overlap (number of matching triggers ÷ total triggers)
- 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
Section titled “Agent tools for skills”Agents have two built-in tools for managing skills:
skill_list
Section titled “skill_list”Lists all discovered skills with their names, descriptions, and trigger counts.
skill_manage
Section titled “skill_manage”Full CRUD for skills:
| Action | Description |
|---|---|
create |
Create a new skill directory with SKILL.md |
edit |
Replace the full SKILL.md content |
patch |
Apply FIND/REPLACE blocks to SKILL.md |
delete |
Remove a skill directory |
retire |
Mark a skill as retired (hidden from matching) |
read |
Read SKILL.md content (level 1) or include reference files (level 2) |
write_file |
Write a reference file into the skill directory |
Example: agent creates a skill
Section titled “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: `docker compose -f compose.prod.yml up -d` 6. Verify: `curl https://app.example.com/health`Reference files
Section titled “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 patternsReference 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
Section titled “Skill lifecycle”Creating skills
Section titled “Creating skills”Skills can be created by:
- You: manually create directories with
SKILL.mdfiles - The agent: via
skill_manage createduring conversation - The learning loop: the review loop can extract patterns into skills automatically
Versioning
Section titled “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 versionDeduplication
Section titled “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
Section titled “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
Section titled “Built-in skills”RivetOS ships with several skills out of the box:
| Skill | Description |
|---|---|
1password |
1Password CLI integration |
discord |
(historical) Discord bot management — channel plugin removed Phase 5 |
excalidraw |
Diagram creation |
gh-issues |
GitHub Issues workflow |
github |
GitHub repository operations |
gog |
Google Workspace (Docs, Sheets, Calendar) |
healthcheck |
System health monitoring |
nemotron |
Local embedding model usage |
skill-creator |
Meta-skill for creating new skills |
stealth-browser |
Headless browser automation |
tmux |
Terminal multiplexer management |
weather |
Weather lookup |
Best practices
Section titled “Best practices”- Be specific with triggers.
deploy, production, releaseis better thancode, stuff, things. - Write for the agent, not for humans. The skill is context the agent reads; include exact commands, API formats, and decision rules.
- One concern per skill. A skill for “GitHub” and a separate skill for “deployment” is better than one mega-skill.
- Include examples. Show the agent exactly what the output should look like.
- Update, don’t duplicate. Use
skill_manage editto improve existing skills rather than creating overlapping ones. - Use reference files for large content. Keep SKILL.md focused. Put API docs, long references, and templates in
references/.