- Every agent has exactly one profile and one identity. The identity is required at creation and never changes; create a new agent instead. See Agents and Identities.
- Profiles are shared. Editing one changes every agent attached to it on its next admitted turn. Turns already running keep the snapshot they started with. See How it fits together.
-
Roles are the only source of tool access, and profiles select them.
There’s no
roleIdson an agent. A profile with no roles gives its agents no tools. See Roles. -
Allows add up, conditions narrow, denies win. An agent gets every tool
its selected roles allow. A
wherecondition narrows one grant and never subtracts from another. Adeny(built-in tools only) beats every allow. See Roles. - Registering a toolset grants nothing, and approving a hook grants nothing. Toolsets publish tools into a namespace; roles decide who may call them. Hooks can only pause, deny, or rewrite work the roles already allowed.
- Roles authorize, connections authenticate. A role says what an agent may call; a connection supplies the login. A connection is owned by the workspace or by exactly one identity; an agent may only use connections it is eligible for, and the model never sees the secret.
-
Spending is only capped where you set a cap. An agent may carry a
budget(limitin USD per24h,7d, ortotal); a thread may pinmaxCost. Absent means unlimited. See Agents. - Every API resource is also a built-in tool namespace. An agent can manage agents, roles, profiles, toolsets, feeds, schedules, and the rest, subject to the roles its profile selects. See Built-in tools.
-
Agents can only narrow. A role, profile, or child agent an agent creates
must fit inside the caller’s current access, must keep every deny it holds,
and a child inherits the caller’s identity. No role,
tool:*included, lets an agent hand out access it doesn’t have. See Permissions. -
Destructive configuration changes ask a human first, by default. New
profiles install six removable approval hooks covering
agents.delete,roles.create, sending Gmail, writing Calendar, writing Drive, and pointing a toolset at a URL. They’re ordinary profile hooks: edit them, or sendhooks: []for none. See Hooks. -
Threads under one agent share its memory, identity, and credentials, but
not each other’s transcripts. Siblings coordinate explicitly, with
thread.createandthread.wait. See Threads. - Everything is readable back through the API. Every thread event, memory entry, feed message, and subscription evaluation is available through the API, in pages. Everything pages by cursor except feed messages, which page by sequence range.
Rules
Rules
Things that always hold.
These twelve things always hold. When something surprises you, it’s usually
one of them.