# Rasa Community > A knowledge hub for the people designing, building, evaluating and operating AI agents. ## Navigate - [Library](https://rasa.community/library/): search by role, industry, format and use case. - [Sitemap](https://rasa.community/sitemap-index.xml) - [RSS](https://rasa.community/rss.xml) - [Full authored text](https://rasa.community/llms-full.txt) ## Published learning resources - [Build an evaluation set that exposes failures](https://rasa.community/markdown/guides/build-an-evaluation-set.md): Build an agent evaluation set with explicit task slices, traceable data, factual assertions, and failure cases that a headline success rate would hide. - [Choose an agent workflow worth building](https://rasa.community/markdown/guides/choose-an-agent-workflow.md): Decide which workflow deserves an AI agent using a worked scope brief, a measurable outcome, and a boundary your product and engineering team can test. - [Design a handoff a customer can trust](https://rasa.community/markdown/guides/design-a-human-handoff.md): Design and test an agent-to-human handoff with explicit consent, a useful context packet, and recovery paths when the receiving team is unavailable. - [Build your first Rasa agent](https://rasa.community/markdown/guides/first-agent.md): Run a small Rasa agent locally, inspect the tool behind its answers, and make your first change with one complete downloadable starter. - [Make an agent release decision with evidence](https://rasa.community/markdown/guides/make-a-release-decision.md): Turn agent evaluation results into a release decision with an explicit denominator, a worked decision record, and owners for rollout and unresolved risks. - [Review what an agent is allowed to do](https://rasa.community/markdown/guides/review-agent-permissions.md): Review an agent’s permissions with a worked action register, evidence from the tool boundary, and named owners for authorization, handoff, and unresolved risk. - [Roll out an agent with a working stop button](https://rasa.community/markdown/guides/roll-out-an-agent.md): Plan an agent rollout with dependency checks, outcome signals, a verified fallback, and a rollback drill that proves who can stop an unsafe release. - [Instructions Survive the Transport](https://rasa.community/markdown/tutorials/crm-transport-swap.md): A tutorial promised its three skills could keep their instructions when MCP landed. MCP landed — here is the diff that settles it. - [Chapter 1 — Checking the promise](https://rasa.community/markdown/tutorials/crm-transport-swap/01-the-promise.md): Turn a sentence in a README into a script that can fail, and watch it fail before you make it pass. - [Chapter 2 — Swapping the transport](https://rasa.community/markdown/tutorials/crm-transport-swap/02-swapping-the-transport.md): Declare an MCP server, point three import lines at it, and see that nothing else in the project has to move. - [Chapter 3 — What MCP takes away](https://rasa.community/markdown/tutorials/crm-transport-swap/03-what-mcp-takes-away.md): Three limits the engine enforces rather than suggests: no tool context, no stdio, and a missing tool that fails after training rather than during it. - [Chapter 4 — What survives anyway](https://rasa.community/markdown/tutorials/crm-transport-swap/04-what-survives-anyway.md): The confirmation constraint still fires against a remote tool, because a constraint is a property of the skill rather than of the transport. - [Chapter 5 — Shaping for the channel](https://rasa.community/markdown/tutorials/crm-transport-swap/05-shaping-for-the-channel.md): The tool returns rows; the caller hears a sentence. Formatting is a skill decision made once, which is why the transport swap did not disturb it. - [The Document Is Derived, Never Written](https://rasa.community/markdown/tutorials/deriving-a-document.md): Ask an agent for a document and it writes one, with figures nobody can trace. Build the other thing: the conversation edits state, the document is derived. - [Chapter 1 — The Deliverable Is a File](https://rasa.community/markdown/tutorials/deriving-a-document/01-artifact-as-outcome.md): What changes when the output of a conversation is a document somebody keeps, rather than a reply they read once. - [Chapter 2 — State, Not Prose](https://rasa.community/markdown/tutorials/deriving-a-document/02-state-not-prose.md): The document fields are declared before any value exists, and the boundary between what the model negotiates and what tools write is drawn in the schema. - [Chapter 3 — Grounded Fields](https://rasa.community/markdown/tutorials/deriving-a-document/03-grounded-fields.md): Every figure carries the record it came from, because a value and its citation are one type. An unsourced field renders blank, never plausible. - [Chapter 4 — Derived Rendering](https://rasa.community/markdown/tutorials/deriving-a-document/04-derived-rendering.md): The renderer takes state and nothing else. There is no parameter through which a model could pass content, which is what makes the guarantee structural. - [Chapter 5 — Revision as Diff](https://rasa.community/markdown/tutorials/deriving-a-document/05-revision-as-diff.md): One changed field diffs as one field, history is append-only, and a source that moves under a stored figure makes the renderer refuse. - [Chapter 6 — What It Refuses](https://rasa.community/markdown/tutorials/deriving-a-document/06-stated-limits.md): The refusals, in the same vocabulary the code uses, plus what this design does not give you and where it attaches to a real system. - [Measure Your Agent: Simulation, Assertions, and LLM Judges](https://rasa.community/markdown/tutorials/evaluation-harness.md): You changed a prompt and the demo went fine. Is the agent better? Build a simulation-based evaluation suite that answers with evidence — an LLM plays your customer, assertions stay the ground truth, and a judge scores what facts cannot reach. - [Chapter 1 — Set Up the Lab](https://rasa.community/markdown/tutorials/evaluation-harness/01-set-up-the-lab.md): Install the companion project, train the fixture agent, and run one simulated scenario end to end — so you know what a pass report looks like before you start reading the dials. - [Chapter 2 — Assertions: Facts About the Tracker](https://rasa.community/markdown/tutorials/evaluation-harness/02-assertions.md): The ground-truth half of every scenario: yes/no questions about what actually happened, exact and judge-free. Learn the assertion vocabulary, why you must test absence, and how to pin facts without pinning phrasing. - [Chapter 3 — The Simulator: A Customer Who Never Read Your Script](https://rasa.community/markdown/tutorials/evaluation-harness/03-the-simulator.md): Mantle skills improvise, so scripted test turns under-test them. Learn to write simulation_context as stage directions, why digressions and corrections finally become testable, and what retired the old dialogue-understanding tests. - [Chapter 4 — The Judge: Grounded Is Not Relevant](https://rasa.community/markdown/tutorials/evaluation-harness/04-the-judge.md): LLM-as-a-judge scoring, demystified to the mechanism: groundedness is a ratio of statements, relevance is cosine similarity of invented questions — and each has a blind spot the other covers. Plus the trap where a judge silently has nothing to score. - [Chapter 5 — What Your Eval Cannot Tell You](https://rasa.community/markdown/tutorials/evaluation-harness/05-what-your-eval-cannot-tell-you.md): The short chapter that keeps the other four honest: simulator and judge variance, sample size, cost cadence, and the discipline of not laundering a guess into a number. - [Guard an Action You Cannot Undo](https://rasa.community/markdown/tutorials/guarding-irreversible-actions.md): A scaffolded agent will post a replacement card to any address a caller reads out. Fix it by carrying where the address came from, and by putting the check inside the tool instead of in YAML. - [Chapter 1 — Reproduce the failure](https://rasa.community/markdown/tutorials/guarding-irreversible-actions/01-reproduce-the-failure.md): Before changing anything, make the agent do the wrong thing on purpose, so you know what you fixed and can prove it later. - [Chapter 2 — Declare the risk, in a table](https://rasa.community/markdown/tutorials/guarding-irreversible-actions/02-declare-the-risk.md): Write down what each action demands, keyed by the action rather than by the caller, so that adding a dangerous tool cannot silently inherit a weak check. - [Chapter 3 — Put the check where it binds](https://rasa.community/markdown/tutorials/guarding-irreversible-actions/03-the-execution-guard.md): tool_constraints shapes the conversation and can be bypassed. The check that actually stops the card runs inside the function, on the line before the side effect. - [Chapter 4 — Carry where the address came from](https://rasa.community/markdown/tutorials/guarding-irreversible-actions/04-address-provenance.md): A fact on file and a fact said on the call are different values. Make the difference part of the value, decided by lookup rather than assertion. - [Chapter 5 — Survive a dropped confirmation](https://rasa.community/markdown/tutorials/guarding-irreversible-actions/05-survive-a-retry.md): Voice is a lossy channel and the model will retry. Give an irreversible action a fingerprint so the same request twice posts one card. - [Chapter 6 — Keep a refusal from becoming a success](https://rasa.community/markdown/tutorials/guarding-irreversible-actions/06-refusal-paths.md): The last failure mode is linguistic: a tool refuses, the model reads a sympathetic message, and the caller hears a promise. Close it with a closed set of outcomes. - [Your First Rasa Mantle Agent, With Guardrails On](https://rasa.community/markdown/tutorials/mantle-starter-pack.md): Build a working Mantle agent using the starter pack — six AI skills, a nine-check lint, and a git hook that catches the silent mistakes before they cost you an afternoon. - [Chapter 1 — The Safety Net](https://rasa.community/markdown/tutorials/mantle-starter-pack/01-the-safety-net.md): Install the starter pack, meet the lint, and wire up the git hook — with a plain-English explanation of what those words even mean. - [Chapter 2 — Scaffold Juniper](https://rasa.community/markdown/tutorials/mantle-starter-pack/02-scaffold-juniper.md): Generate the whole agent with one request to Claude Code, then walk every file it made — because "it works" is not the same as "I know why". - [Chapter 3 — Break It On Purpose](https://rasa.community/markdown/tutorials/mantle-starter-pack/03-break-it-on-purpose.md): Trip all five silent traps and two loud ones, and watch the lint catch every single one. This is the chapter that turns "rules to memorize" into "failures you have seen". - [Chapter 4 — Run It, Review It, Repeat](https://rasa.community/markdown/tutorials/mantle-starter-pack/04-run-review-repeat.md): Bring Juniper to life, adopt the everyday workflow, learn the review role, and know exactly what your green checkmarks do and do not prove. - [Personalize the First Word Your Agent Says](https://rasa.community/markdown/tutorials/session-start-personalization.md): Load what you already know about a customer before the greeting, then spend it later in the conversation — with control levers, not hope. - [Chapter 1 — The session start hook](https://rasa.community/markdown/tutorials/session-start-personalization/01-the-hook.md): Every Mantle conversation opens by running one skill. That is where anything the whole conversation needs should be loaded. - [Chapter 2 — Load the profile into memory](https://rasa.community/markdown/tutorials/session-start-personalization/02-load-the-profile.md): A local tool writes the customer profile into project memory, and declaring those fields is what stops the agent inventing them. - [Chapter 3 — Guarantee the order, then personalize](https://rasa.community/markdown/tutorials/session-start-personalization/03-order-and-greeting.md): An ordered block makes the lookup run before the greeting, and the response template decides exactly what gets said. - [Chapter 4 — Spend what you loaded](https://rasa.community/markdown/tutorials/session-start-personalization/04-spend-what-you-know.md): Scoped instructions let one skill offer a returning customer their usual account and still handle everyone else. - [Chapter 5 — Control levers, and upgrading to 3.20](https://rasa.community/markdown/tutorials/session-start-personalization/05-control-levers.md): Why these techniques beat plain prose instructions, plus the two-line migration to the renamed Mantle engine package. - [Tool Scope and Memory Scope in Rasa Mantle](https://rasa.community/markdown/tutorials/tools-and-memory.md): Decide where a tool belongs and where a memory field belongs — and build a bank agent that makes the caller verify exactly once. - [Chapter 1 — Set up Sterling](https://rasa.community/markdown/tutorials/tools-and-memory/01-setup.md): Install the companion project, train the agent, and run the conversation you will spend the rest of the tutorial taking apart. - [Chapter 2 — Local tools](https://rasa.community/markdown/tutorials/tools-and-memory/02-local-tools.md): A tool that belongs to exactly one skill lives in that skill folder, is auto-discovered, and travels with the skill. - [Chapter 3 — Global tools](https://rasa.community/markdown/tutorials/tools-and-memory/03-global-tools.md): When more than one skill needs the same capability, define it once at the project root and import it explicitly. - [Chapter 4 — Project memory](https://rasa.community/markdown/tutorials/tools-and-memory/04-project-memory.md): The layer that stops the caller re-authenticating: facts about the session that every skill can read. - [Chapter 5 — Public and private skill memory](https://rasa.community/markdown/tutorials/tools-and-memory/05-skill-memory.md): Skill-scoped state, split into what other skills may read and what never leaves the skill — enforced by the runtime. - [Chapter 6 — Portability, and what it cost](https://rasa.community/markdown/tutorials/tools-and-memory/06-portability.md): Why explicit tools and explicit memory make a skill folder movable, plus the mistakes worth knowing before you hit them. - [Build a Voice AI Agent with Rasa Skills](https://rasa.community/markdown/tutorials/voice-ai-agent.md): Flagship tutorial for the Skills architecture and Deepgram voice — build Atlas, a Horizon Travel assistant, from first skill to progressive control. - [Chapter 1 — Scaffold a voice agent](https://rasa.community/markdown/tutorials/voice-ai-agent/01-scaffold.md): Create a Skills project with Deepgram ASR and TTS, set your keys, and speak to Atlas for the first time. - [Chapter 2 — First skill (FAQ)](https://rasa.community/markdown/tutorials/voice-ai-agent/02-first-skill.md): Add a prose-only trip FAQ skill with a references folder — no tools required. - [Chapter 3 — First tool](https://rasa.community/markdown/tutorials/voice-ai-agent/03-first-tool.md): Add check_itinerary with Mantle @tool functions backed by a demo SQLite database. - [Chapter 4 — Tool constraints](https://rasa.community/markdown/tutorials/voice-ai-agent/04-tool-constraints.md): Gate get_flight_status until booking_ref exists — the first hard guarantee. - [Chapter 5 — Scoped instructions](https://rasa.community/markdown/tutorials/voice-ai-agent/05-scoped-instructions.md): Use if: markers so only the matching flight-status branch stays in the model context. - [Chapter 6 — Verbatim responses for voice](https://rasa.community/markdown/tutorials/voice-ai-agent/06-verbatim-responses.md): Deliver exact wording with utter: triggers and responses.yml — recording notices the LLM cannot rewrite. - [Chapter 7 — Ordered blocks](https://rasa.community/markdown/tutorials/voice-ai-agent/07-ordered-blocks.md): Build report_baggage with a strict collection sequence, confirmation, and verbatim notices. - [Chapter 8 — Compose skills](https://rasa.community/markdown/tutorials/voice-ai-agent/08-compose-skills.md): Build change_booking from authenticate and find_booking with @skill references and confirmation gates. - [Chapter 9 — Voice deep dive](https://rasa.community/markdown/tutorials/voice-ai-agent/09-voice-deep-dive.md): Tune Deepgram end-of-turn, format speech for TTS, and recover from ASR mistakes. - [Chapter 10 — Coding agents and the flywheel](https://rasa.community/markdown/tutorials/voice-ai-agent/10-flywheel.md): Point Cursor or Claude Code at your Skills project and close the loop with conversation-driven development. ## Scope Exercises use fictional organizations and synthetic evidence. Each article explains its limitations. Linked external articles remain at their original publishers. This index includes only released content; dates never approve drafts.