Skip to main content
agent.yml is required at the project root. It carries the agent’s identity in an agent: block, plus several top-level tuning sections.
agent.yml
The file has two levels. id, language, and persona are the agent’s identity and live inside the agent: block. rules, prompts, references, conversation, tool_timeout, and session_config are tuning sections and sit at the top level as siblings of it.

The agent: block

Required. A missing or non-mapping agent: section fails the load.

persona

The only mandatory field in the whole file. A missing or blank persona raises config.agent.missing_persona at load. It sets global tone and identity.

id

When absent or blank, a unique id is generated in the form YYYYMMDD-HHMMSS-<duoname> and written back into agent.yml, with a warning. language is not written back. The en default is applied at parse time only.

rules

A list of strings, rendered into the system prompt as a bullet list. These are global do/don’t guidance applied across every skill: scope limits, tone guards, ordering constraints.
A rule containing : followed by a space parses as a YAML mapping and breaks the load. Quote it, or use a > folded scalar as above.

prompts

Overrides for individual sections of the system prompt. Every key is optional; an empty or absent value falls back to the built-in default.
routing_no_active_skill is the lever for greeting/closing behaviour and for telling the orchestrator when not to route into a skill.

references

Controls how the agent answers from retrieved knowledge. The same model group embeds the corpus at rasa train and loads it at serve time, so keep it declared for as long as the trained model is in use.

conversation

before_end lists skill ids that should complete before the conversation ends. The names are rendered into the routing prompt, so the orchestrator knows to pick those skills up before wrapping up.

tool_timeout

Optional top-level key. Wall-clock timeout in seconds for tool calls.
agent.yml
When a tool exceeds the limit, the runtime cancels the call and returns an error payload to the LLM so it can recover (for example, retry or ask the user). Raise this value for slow backends (databases, long HTTP calls); leave it unset to keep the 10 second default.

session_config

Voice

Voice is configured as a channel in integrations.yml, including the ASR and TTS engines under that channel’s asr: and tts: keys. The runtime detects a voice channel and applies prompts.voice_rules from this file, so what belongs here is the persona and the voice channel rules.

Starting a conversation

The bundled default_session_start skill does not greet. Who speaks first decides whether you should override it:
  • Agent speaks first: override default_session_start with a greeting and have the channel send /session_start as the first user message.
  • User speaks first: leave the bundled skill silent so Mantle handles the first real utterance immediately.
rasa shell, the Inspector, and the built-in voice channels already send /session_start. See Start a conversation.

See also

  • Start a conversation: who speaks first, and when to override default_session_start
  • integrations.yml: LLM provider, channels, MCP servers (per-server tool_timeout), optional Langfuse tracing
  • Tools: @tool interface and timeout behaviour
  • memory.yml: project-wide memory