Create an agent

Set up an agent in the console, give it a role, and check what it can actually do.

Creating an agent is a handful of decisions: what it is for, what it runs on, what it may do, whose records it may touch, and when it stops for a person. Only the first two are made when you create it. Everything else is set on its page afterward, and a new agent starts with none of it: it can chat and hand work to other agents, and nothing more.

Create it

In your app, open Agents and choose New agent.

  • Name. How it appears in the console, in run records and to other agents.
  • Description. Not a note to yourself. This text goes into the agent's own instructions, and it is what a coordinating agent reads when it chooses which agent to hand a task to. Describe its specialty and its limits: "Handles refunds and billing questions. Cannot change prices."
  • AI connection and model. Which of your organization's AI connections it runs on, and optionally which of that connection's approved models. Leave the model on the connection's default unless you have a reason.

If your plan includes AI credits, the agent spends those first, whether or not it has a connection of its own; after that, token cost is billed by the provider behind its connection, directly to you. An agent with neither cannot start a conversation and is refused with AGENT_NO_LLM_BINDING. An agent you only call through direct tool calls or MCP needs no model at all.

The description shapes behavior. It never grants anything.

Give it a role

On the agent's page, under Roles, assign it a role exactly as you would a person. The policies on that role become its tools. There is no separate tool list to maintain: give it a role to widen what it can do, remove one to narrow it.

The page offers starter roles for common jobs:

StarterWhat it can do
Schema builderRead and evolve the app's schema: list, create and update tables.
Handler builderWrite handlers from a description, prove them in a rolled-back sandbox, save drafts for review. Cannot publish.
Handler publisherApprove, publish and archive handlers. Every action pauses for a person.
Endpoint builderCreate and manage the app's custom endpoints and wire handlers to them.
Chart builderTurn the app's data into charts, through the same governed reads as everyone else.

For anything touching your own data, make a role in App access › Roles with exactly the policies the job needs. Start narrower than feels useful: it is easy to add a policy once you can see what the agent tried and was refused, and much harder to notice something it should never have had.

Two agents in one app, each showing its connection, roles and effort
Two agents over the same data. One may update records and move money but must ask first; the other cannot, because those actions are not in its roles at all.

Effective permissions, further down the page, shows what its roles add up to.

Choose where it can act

If your app has organizations of its own, choose under Where it can act which of them this agent may reach: none (the default), all, or a list. It always reaches records that belong to you as the app's owner. Its roles still decide what it may do there. See Where an agent can act.

Decide when it stops for a person

Under Behavior:

  • Auto-approve is a set of pauses the agent may skip, not one switch. Risky actions skips approval for tools rated above low. Budget checkpoints lets it run past its effort checkpoints up to a safety ceiling. Leave both off and it stops before anything risky, and at each checkpoint. Neither touches policy, authorization or the audit trail.
  • Effort is a leash, not a thinking-harder dial: Brief, Short, Moderate, Long or Max. It sets how many steps the agent runs before checking back in. A longer leash means fewer interruptions and a bigger bill, and no setting lets it run forever.

See Approvals & halts for how the two combine.

Add sub-agents, if it coordinates

Under Sub-agents, list the agents this one may hand subtasks to. A sub-agent runs under its own roles, reach and approval settings, so handing work to it never widens what gets done. Give sub-agents descriptions that clearly differ, so the coordinator can tell them apart.

Try it

Open Arbiter while you are in the app, and pick the agent in its Agent selector. The conversation shows each step, its arguments and its outcome, including anything it attempted and was refused, which is the fastest way to find a missing policy. A step that halts shows up in the same conversation and in App approvals.

Checking what it can actually do

Do not infer an agent's reach from its description. Ask for its toolbox, with a key bound to it:

curl "$AUTHORIC_URL/$APP_UID/agent/tools" \
  -H "Authorization: Bearer $AGENT_KEY"

That list is derived from the agent's roles at the moment you ask. It is a guide, not the gate: every call is checked again when it runs.

Turning an agent off

Disable on the agent's page stops it everywhere at once: its API keys answer 401 API_KEY_INVALID until you enable it again. Delete removes it.

What's next

On this page