Skills are markdown files that act as the agent's persistent memory. The reserved general skill is always shared with the agent: put your standing preferences, context, and defaults there. Every other skill is listed to the agent by name and description; when one matches the task at hand (a site's quirks, a workflow recipe), the agent reads it before working, and on its final review pass it can save what it learned back with rtrvr.saveSkill.
Skills are the only memory that survives a task. vars last one task, sheets hold one deliverable, recordings replay one flow: a skill is what the agent still knows next week.
What a skill file looks like
A skill is plain markdown with optional YAML-style frontmatter. Write it however you like (headings, bullets, code blocks); the agent reads the raw text. name and description are the only special fields, and both are optional when you create a skill in the UI.
---
name: linkedin-outreach
description: How I run LinkedIn connection + follow-up campaigns, and LI's UI quirks.
---
## Rules
- Never send more than 20 invites per day.
- Always personalize the note with the prospect's most recent post.
## Site quirks
- The "Connect" button is behind the "More" overflow menu on most profiles.
- The invite-note modal caps at 300 characters and silently truncates.
## Output
- One row per prospect: name, headline, profile URL, note sent, date.Uploading a .md file with that frontmatter creates the skill with the right name and description; without frontmatter the file name becomes the skill name. A skill's id is the slugified name, so saving LinkedIn Outreach again updates linkedin-outreach rather than creating a duplicate.
The general skill
general is reserved: it is injected into every task in full, so it is the right home for anything that is true across all your work. It is created for you automatically with a short starter template: three sections to fill in:
- 01
About me: role, company, the sites and tools you work in. Lets the agent resolve "our CRM" or "the usual sheet" without asking.
- 02
Preferences: standing defaults such as sheet vs. summary output, tone, language, units, timezone, sources to prefer or avoid.
- 03
Notes the agent has learned: where the agent appends what it picks up on its review pass. Edit or delete anything there; it is your file.
Managing skills
- 01
Extension: the Skills dropdown in the composer lists your skills: click one (or type
/name) to attach it in full to the next task, upload.mdfiles, and jump to the web editor with the pencil or by typing a new name + Enter. - 02
Cloud: rtrvr.ai/cloud?view=skills is the full library and the editor: live markdown preview, upload or drag-and-drop
.mdfiles, and per-skill delete. - 03
Agent-written updates are marked
agentin both UIs, so you can always see and revise what the agent taught itself.
Storage is local-first in the extension (skills work offline) and mirrors to your account as one file per skill, newest-write-wins. Edit on the web and the extension picks it up on its next sync; let the agent save one mid-task and it is on the web dashboard immediately.
Attaching a skill to one task
Named skills are normally summoned by the agent on demand. When you want to guarantee one is applied, attach it: attached skills are injected in full, at the same authority as general, for that task only:
- 01
Click the skill's row in the Skills dropdown: it shows an
attachedbadge and a pill above the composer. Click again to detach. - 02
Type
/skill-namein the composer. Sending/linkedin-outreachalone just attaches it;/linkedin-outreach find 20 prospectsattaches it and runs the task. - 03
Shortcuts win
/namecollisions: if a shortcut and a skill share a name, the shortcut runs. Rename one to disambiguate.
How the agent sees your skills
Your skills are snapshotted once per message and rendered into the task context like this: the general skill and any attached skills in full, everything else as a one-line listing:
=== User Skills ===
--- Skill: general (always applied) ---
## Preferences
Default to a Google Sheet for anything over 10 rows.
--- End skill ---
--- Skill: linkedin-outreach (attached by the user for THIS task: apply it) ---
## Rules
Never send more than 20 invites per day.
--- End skill ---
Other skills (read on demand with rtrvr.readSkill({ name })):
- hubspot-sync: How our HubSpot deal stages map to the pipeline sheet.
- expense-report: Monthly expense report format and the receipts folder.How the agent uses skills
- 01
await rtrvr.readSkill({ name }): read one skill's full markdown (free, no LLM call). The result is file-shaped, so plans can hand it to sub-agents viafileInputs. - 02
await rtrvr.saveSkill({ name, description?, content }): create or replace a skill (content ≤16K chars). The agent is taught to fold the smallest durable edit into the existing markdown, never secrets or one-off task data.
Saves REPLACE the whole file, so the agent is instructed to readSkill first and merge. It writes on the review pass (the same script that finishes the task), and only when something durable was learned: a fact you stated about yourself or your setup, a corrected preference, a site quirk that cost a repair pass, a recipe you refined. Most tasks teach nothing durable and save nothing.
It also decides WHERE the note goes: facts about you and how you work (your role, company, the accounts and sheets you name, a standing format or tone choice) go into general; knowledge scoped to one site, tool, or recurring workflow goes into its own named skill: created on the spot when nothing fits, named <domain>-<activity> like linkedin-outreach or hubspot-sync. You will see new skills appear in the library marked agent.
// The agent's own write-back pattern, in the final plan script.
const existing = await rtrvr.readSkill({ name: "linkedin-outreach" }).catch(() => null);
await rtrvr.saveSkill({
name: "linkedin-outreach",
description: "How I run LinkedIn outreach, and LI's UI quirks.",
content: `${existing?.extractedText ?? "## Site quirks"}
- Invite modal caps notes at 300 chars.`,
});
return rtrvr.done({ summary: "Sent 20 invites; noted the 300-char cap." });Limits
| Limit | Value | Notes |
|---|---|---|
| Skill name | 64 characters | Slugified into the skill's id |
| Description | 256 characters | The retrieval key: make it a concrete one-liner |
| Content | 16,384 characters | Roughly 4K tokens of markdown per skill |
| Skills per account | 100 | Delete unused skills to make room |
| Injected block | 64,000 characters | General + attached skills + the listing, per task |
Skills vs. the other memory
| Use | When | Lifetime |
|---|---|---|
| Skill | Knowledge that should change how FUTURE tasks run | Permanent, across tasks |
| Shortcut | A task you re-run with the same steps on demand | Permanent, replayed verbatim |
| Recording | Grounding the agent in an exact DOM flow you demonstrated | Permanent, per flow |
vars | Expensive intermediates reused by the next pass | One task |
| Sheet / artifact | The deliverable itself | One deliverable |
Getting reliable retrieval
- 01
Write descriptions for matching, not for humans. Name the sites, tools, and nouns a matching task would mention.
- 02
One skill per topic. A single 16K "everything" file is listed with one description and matches almost nothing; five focused skills each match their own tasks.
- 03
Attach it when it must apply. Retrieval is a judgment call the model makes:
/skill-nameremoves the judgment and injects the file in full. - 04
Put cross-cutting rules in
general. It is the only skill that never depends on retrieval. - 05
Smaller models retrieve less. Lightweight models (Inkling Small, MiMo, Flash-class) follow instructions that are in front of them but summon fewer optional resources on their own. Attach the skill explicitly (or run those tasks on a larger model), and keep
generaltight so the rules that matter are always in context.
MCP access
Skills are exposed on the rtrvr MCP server both as tools (list_skills, get_skill) and as MCP resources (rtrvr-skill://{id}, text/markdown), so Claude, Cursor, or any MCP client can read the same memory your agent uses. Cloud-only: no extension session required.