skills/ folder. Everything else is
optional and added when a skill needs it.
The minimum
This is a complete, trainable agent:Everything a project can hold
Each optional file is added only when a skill needs it:What makes it a Maestro project
The engine is chosen by layout rather than by a config key. A project is Maestro when it has anintegrations.yml and at least one skills/*/skill.md.
That glob is one level deep, so a skill folder sits directly under skills/.
Agent root
A skill folder
The folder name is the skill id. A skill in
skills/card_replace/ is
@skill.card_replace in prose and session.card_replace.<entry> in memory,
whatever its frontmatter name: says.
Declared or discovered
The difference decides whether a tool is usable without any config:- A skill’s own tools are auto-discovered from
tools.pyandtools/*.pyin that folder. Nothing to declare. Within one skill, atools/*.pydefinition shadows a same-named one intools.py. - Shared tools in the agent-root
tools/folder must be named in the skill’simport_tools. A shared tool that is not declared is not attached to the skill. - On a name collision, the skill-local tool wins. This is resolved once when the model loads.
What ships in the trained model
rasa train copies agent.yml, integrations.yml, memory.yml,
responses.yml, and the skills/, tools/, and references/ directories into
the model archive.
Two consequences worth knowing:
- The reference index is built at train time, so adding or editing a file under
any
references/folder needs a retrain before the agent can answer from it. llm:andchannels:are read from your project directory at runtime, so a provider or channel change only needs a restart.
Files the scaffold adds
rasa init --engine maestro also writes AGENTS.md, context for your coding
agent, and .env, holding your keys. Neither is read by the engine: .env
supplies the environment variables that api_key_env and ${VAR} resolve
against, and AGENTS.md is for your IDE.
See also
- Getting Started: scaffold a project and build the first skill
- skill.md: the contract for the one required file