Skip to main content
responses.yml holds named text templates the framework delivers verbatim. Use it for wording that must be exact: legal disclosures, compliance notices, regulated confirmations. Everything else should stay prose so the agent sounds natural.
skills/card_replace/responses.yml
The top-level key is responses:. Each name maps to a list, and the first entry in that list is the response delivered. An entry is either a mapping with a text key, or a plain string:

Where the file lives

At load, every file is merged into one flat registry, later sources overriding earlier ones on duplicate names:
  1. Packaged system defaults
  2. Each bundled default skill’s responses.yml
  3. Each project skill’s responses.yml, in directory order
  4. The project-root responses.yml
This is how you override a built-in message: declare the same response name in your own file. Redefining utter_greet, for example, replaces the greeting the bundled default_session_start skill delivers. Because the registry is flat, response names are global rather than scoped to the skill that declares them. Prefix names with the skill (utter_card_replace_completed) so two skills keep their wording distinct.

Interpolation

A placeholder in braces is replaced with a memory value at delivery time. Two forms work, and they resolve differently:
Use the namespaced form to read another skill’s public field. The bare form is convenient for a skill’s own entries and follows the same resolution order a tool’s context.memory.get() uses. A placeholder whose value is unset at delivery time is left in the text as written, so interpolate only values you know are set by the time the response is sent, typically ones written earlier in the same ordered block. Interpolation applies to responses. Prose in skill.md is not interpolated; refer to a value in words there, since the LLM can already see memory.

metadata.rephrase

A response may opt into being reworded by the LLM instead of delivered verbatim:
With rephrase: true the orchestrator makes a tool-free LLM call to reword the text in context, and falls back to the literal text if that call fails or comes back empty. Leave it off (the default) for anything compliance-sensitive: that is the entire point of declaring the response.

How a response is delivered

Four things reference a response by name: The two step fields differ:
utter: is accepted as a step-level alias for action: and is normalised at load. Prefer action:. rasa train validates every response name referenced from any of the four places above, so a name that is not in the registry is caught before the agent runs.

See also