agents/config.yml is the source of truth for spaces and agents: declaring them there and reconciling is the only supported way to create either. Agents can’t be created in the UI, and their settings are read-only there. Cube links every record it creates to the entry it came from, and matches them by that entry’s name.When to use multiple agents
Add an agent only when users need it to behave differently in a way one agent can’t vary per user. Split by audience, not by subject area. Multiple agents fit when they answer questions about the same data for audiences that need a different voice or model — for example, an agent for store managers that answers sales questions in plain business terms, and an agent for the analytics team, on a different model, that names measures and shows SQL. Rules apply to everyone using a space and can’t branch on who is asking, so one agent can’t speak two ways. Give each of these agents its own space for its tone rules, and attach the rules and certified queries they both need to each space. Don’t split one data model into subject-area agents — a finance agent and a marketing agent for the same users. Someone who asks about both has to pick the right agent for every question, and so does any client calling Cube for them: an MCP client chooses the agent per request from its name, and uses the default agent when it names none. Use one agent instead:- Scope data with access policies. The agent runs with the permissions of the user it operates under, so access policies decide what it can see and return.
- Add subject-area knowledge as
agent_requestedrules, which the agent pulls in only when a question needs them.
Architecture
A multi-agent setup introduces one new concept on top of the single-agent model: spaces.- A space belongs to the account and is used by one or more deployments — see Space scope.
- A space is an isolated context. It owns its rules, certified queries, and memories — they are not shared across spaces.
- Each agent belongs to exactly one space and inherits everything that space owns. Multiple agents can live in the same space and share the same rules, certified queries, and memories.
auto space that holds all rules, certified queries, and memories — you don’t need to think about it. In a multi-agent setup, you define spaces explicitly and attach rules and certified queries to specific spaces.
What changes from the single-agent setup
Theagents/ file structure is the same. What’s different is how agents/config.yml is shaped:
- Agents are defined as an array. Each agent gets a unique
nameand an optionaldescription, in addition to the standard agent properties (llm,runtime,accessible_views,memory_mode, etc.). - Spaces are introduced. A
spacesarray defines the contexts agents operate in. Each space gets a uniquename. - Rules and certified queries attach to spaces. Use the
spaceproperty in the frontmatter of each rule or certified query Markdown file to attach it to a specific space.
Agents
Replace the flat root-level agent properties with anagents array:
Spaces
A space is the context an agent operates in. Spaces own the rules, certified queries, and memories that the agents inside them share. Define spaces alongside agents:
Each agent must reference exactly one space via its
space property. Multiple agents can share the same space and inherit its rules, certified queries, and memories.
Reconciliation
A space or agent declared inagents/config.yml needs a matching record in Cube before users can chat with it. Cube creates those records from your config — that step is reconciliation:
1
Declare the space and the agent in YAML
Add the
spaces: and agents: entries to agents/config.yml. In dev mode the pending list reflects your branch, so you can reconcile before merging.2
Open the pending configurations
Cube compares the config with the records already available to that deployment, matching each entry by
name. Entries with no record yet are listed under Pending Configurations on the Agents page and on Agents → Spaces, once you pick the deployment. The Semantic Model IDE also shows a Reconcile agent configs button with the pending count that links there.3
Create them
Choose the space scope and press Create All. Spaces are created first, then each agent is linked to the space its
space property names.name to the config, and on each deployment you reconcile for the first time — an agent belongs to one deployment, as does a space created per deployment, while a global space counts as created everywhere. Agent behavior — llm, description, accessible_views, memory_mode, rules, certified queries — is read from the agents/ directory of the deployment’s data model and takes effect without reconciling. The implicit auto space and agent of the single-agent setup are never listed as pending.
An agent’s space is the exception: the link is made when the agent is created, so changing it in YAML doesn’t move an existing agent. The agent’s page flags the mismatch between the space its config names and the space it is linked to. If the newly named space has no record yet, it appears under Pending Configurations, and Create All creates it and moves the agent onto it in the same action. If that space is already available to the deployment, nothing about the agent is pending and Create All won’t move it — delete the agent so its config reads as pending again, then Create All recreates it in the space the config names. The recreated agent is a new agent, so chats from before the delete don’t carry over to it.
Space scope
Spaces live at the account level, so one space can be used by agents in more than one deployment. When a space is created, you choose its scope:- Global — one space that agents in every deployment can use.
- Per deployment — the space is available to a single deployment only.
Product (production) and Product (staging). Only the displayed name changes — the space stays linked to the spaces: entry it was created from, so the YAML entry keeps matching.
Choose per-deployment scope when the same spaces: entry is declared in several deployments — typically development, staging, and production fed from branches of one data model — and you don’t want them sharing what the space stores.
Spaces created before this option existed have no scope stored. Cube infers the deployment they belong to from the agents linked to them, and the Spaces list shows them as Not scoped. Set the scope explicitly on the space page to make it definite.
Scope affects storage, not configuration
Scope never changes where configuration comes from. Agents always belong to a single deployment, and thespaces: and agents: entries, rules, and certified queries that shape an agent are read from the agents/ directory of the data model of that deployment, on that deployment’s branch. A global space does not merge the configuration of the deployments that use it.
What a global space shares is storage: the space itself and the data held against it — memories in particular. Two deployments using the same global space read and write the same memories, while each of them still applies its own agents/ configuration.
Attaching rules and certified queries to a space
In the single-agent setup, rules and certified queries belong to the implicitauto space. In a multi-agent setup, you must attach each rule and certified query to a specific space using the space property in the Markdown frontmatter:
agents/rules/<space-name>/ or agents/certified_queries/<space-name>/ are attached to that space automatically — no space frontmatter required.