Automation
Skills
A Skill is a focused, reusable AI capability. "Classify this email." "Extract companies from this text." "Draft a reply in my voice." "Score this lead."
When River AI needs to do something specific during a larger task, it invokes a Skill to handle that subtask, then continues with the structured result.
Skills are the specialized moves in the AI's repertoire — individually small, collectively powerful.
What makes a Skill different#
| Skill | Agent | Workflow | |
|---|---|---|---|
| Scope | Single, focused subtask | A whole repeatable role | A whole repeatable process |
| Runs as | A single LLM call | A multi-step Job | A graph of nodes (Job) |
| Output | A structured result | Entities, drafts, decisions | Whatever the graph produces |
| Trigger | Called by other code | Triggers, schedules, manual | Triggers, schedules, manual |
| When to use | A reusable AI move | A persistent worker | A deterministic process |
A Skill is the building block. Agents and Workflows compose Skills to do bigger things.
Examples#
A few Skills River ships with:
| Skill | Returns |
|---|---|
email.classify |
A label and confidence score for an email |
entity.extract |
A structured object from unstructured text |
summarize.short |
A 3-sentence summary of any content |
reply.draft |
A reply draft in the user's voice |
pdf.extract_fields |
Named fields from a PDF (contract, invoice, statement) |
lead.score |
A 0–100 score with reasoning |
Apps register their own Skills too. The PDF app has Skills for extraction and citation. The Contacts app has Skills for relationship scoring.
When to build your own#
Build a Skill when:
- You catch yourself writing the same prompt fragment in multiple Agents
- A task always returns the same shape (a label, a score, a list of names)
- You want fast, consistent behavior across many runs
Skills are versioned, named, and tested. Once you've got a great lead.score Skill, every Agent that needs to score a lead uses the same one — no copy-pasted prompts.
How Skills are used inside Agents#
When an Agent runs, it can call Skills as tools. For example, an Inbox Triage Agent might:
- Read the new email
- Call
email.classify→ "needs_reply" - Call
reply.draft→ drafts a reply - Save the draft as an entity
Each Skill call is a single LLM round-trip. The Agent stitches them together. That's why Skills are fast: they don't need the full agent loop.
Tips#
- Keep Skills narrow. A Skill that does five things is really five Skills.
- Always return structured output (a JSON schema is best). That's what makes them composable.
- Look at your Agents — patterns that show up in three or more are candidates to extract into Skills.