Building Skills for a Rasa Assistant
Terminology
In Rasa, a skill is a self-contained module inside a Rasa assistant that packages a specific capability or domain (e.g. booking, payments, order tracking).
The term "skill" can also refer to a IDE agent skill (SKILL.md). Use conversation context to determine which meaning the user intends. If ambiguous, ask.
A Rasa skill defines its interface (slots / memory) and logic (flows, prompts, actions, or tools). It is implemented as either:
- Flow-based — a bundle of flows and slots for guided, deterministic behavior.
- Sub-agent — a sub-agent that plans and acts autonomously using tools.
- Hybrid — an orchestrator flow that delegates some steps to a sub-agent.
Workflow
- Clarify what the user wants the Rasa assistant to do.
- Choose the implementation approach (see "Choosing the approach").
- Design the skill boundary — slots, flows, responses, actions, sub-agents (see "Designing the skill boundary").
- Implement using the appropriate skill:
- Flow-based →
rasa-building-flows - ReAct sub-agent →
rasa-setting-up-react-agents - A2A sub-agent →
rasa-setting-up-a2a-agents
- Flow-based →
- Ensure the new flows or sub-agents are reachable (via
call/linksteps or triggerable by their description).
Choosing the approach
The first design choice is how autonomous the skill should be:
if high-risk domain (payments, auth, KYC, PII, compliance):
use flow-based
elif business logic must be tightly controlled (strict validation, fixed steps):
use flow-based
elif most steps are deterministic but some need autonomy:
use hybrid (flow orchestrates, sub-agent handles open-ended steps)
else:
use sub-agent (start autonomous, add flows later for guardrails as needed)
If the approach is not obvious from context, ask the user whether they want more control over the conversation (flow-based) or a more autonomous experience (sub-agent). Frame it in terms of the trade-off: flows give predictability and auditability, sub-agents give flexibility and a more natural interaction. This is especially important when the user asks for multiple skills at once — each skill may warrant a different approach, so confirm the intent per skill before implementing.
Designing the skill boundary
Before implementing, outline:
- Slots — the skill's interface. See
rasa-managing-slots. - Flows — one per user goal. See
rasa-building-flows. - Responses — See
rasa-writing-responses. - Actions — backend operations. See
rasa-writing-custom-actions. - Sub-agents — MCP servers and tools. See
rasa-setting-up-react-agentsorrasa-setting-up-a2a-agents.
File organization
A single-flow skill can live in one file (e.g. data/track_order.yml). When a skill
contains multiple flows, group them in a subdirectory named after the skill:
data/
├── track_order.yml # single-flow skill
├── booking/ # multi-flow skill
│ ├── book_flight.yml
│ ├── select_destination.yml
│ └── choose_seats.yml
├── payments/
│ ├── process_payment.yml
│ └── verify_payment.yml
domain/
├── booking.yml
├── payments.yml
sub_agents/
├── policy_search/
│ └── config.yml
Related skills
| Skill | Use for |
|---|---|
rasa-building-flows |
Writing flows, branching logic, call/link steps |
rasa-managing-slots |
Defining slots, types, mappings, persistence |
rasa-writing-responses |
Bot responses and utter_ask_* templates |
rasa-writing-custom-actions |
Custom actions and validation actions |
rasa-setting-up-react-agents |
ReAct sub-agents with MCP tools |
rasa-setting-up-a2a-agents |
External sub-agents via A2A protocol |
rasa-calling-mcp-tools-from-flows |
Invoking MCP tools directly from flow steps |
rasa-configuring-mcp-server |
MCP server setup in endpoints.yml |
rasa-configuring-assistant |
Pipeline, policies, config.yml / endpoints.yml |
rasa-writing-e2e-tests |
End-to-end conversation tests |
Examples
For worked examples (flight booking, stock research, payments, insurance claims, Jira), see references/examples.md.