Skip to main content
Matrices follows the following system

What owns what

Everything above the agents line is configuration you write once and share: identities, roles, toolsets, connections, and the profiles (with their hooks) that assemble those into behavior. Everything below it is what happened: an agent’s threads, memory, and schedules, which are durable and only reachable through that agent. Feeds are the exception. They’re shared, and that’s what lets agents talk to each other. All of it lives in one workspace.

Cardinality

What a turn freezes

When a turn starts, Matrices works out its configuration once and freezes it for that turn and any replay:
  • the profile ID and profile version
  • the one model picked from the profile’s selectors
  • the system prompt and the hook list
  • the resolved access, meaning what it may call: each selected role by version, the exact built-in tools, the eligible toolsets, and any conditional grants
Edit a profile, its roleIds, or a role’s own rules and the change lands on the next admitted turn. Work already running keeps the snapshot it started with. The budget is checked at the same moment, so lowering one stops new turns rather than killing a running one. From there it loops: ask the model, run the tool calls the snapshot allows, append the results, ask again. That same resolved access decides what the model can find, and checks every call as it runs. Credentials are attached to the outgoing request, so the model never sees a raw secret and never grants itself anything.

Control plane, data plane

The control plane is configuration: what an agent is and what it may do. The data plane is execution: what it actually did. One API key reaches both, and the API reference shows how the endpoints split.