Agents

An agent is the worker a loop runs: its base instructions, the tools it knows how to use, and its model. The loop is the job. What a run may actually do comes from the agent’s role and the loop’s own limits, never from the agent, so changing an agent can never widen what it may touch.

The Agents page

Agents lists every agent in one list, each marked Yours or Platform; the chips above the list show one kind at a time:

  • Yours — the agents this account added. Any loop in the account can name one.
  • Platform — the ones every account has. You cannot change them here.

Open an agent to see what it is for, its model, the role a run starts as, and the tools it knows how to use. Change and Delete are at the top of your own agent; New agent is at the top of the list.

The platform’s agents

Every account has these. The page shows each by its name; a loop names it by its id.

NameIdWhat it does
GeneralgeneralTalks with a person and does what its loop grants: keeps records, asks on cards, calls the loop’s own tools. The agent for a chat.
ResearcherresearcherReads the open web and files what it finds into a collection.
AnalystanalystWorks over your workspace and collections. No network.
SummarizersummarizerReads files and records and gives back a summary. Writes nothing.
SendersenderSends what another agent of the loop worked out to an outside system. Reads nothing.
Automation builderautomation_builderProposes the automations that keep finding what a task found.
Loop builderloop_builderThe agent behind LoopAssistant.
Agent builderagent_builderThe agent behind AgentAssistant.

Add an agent

There are two ways: describe it to AgentAssistant, or fill in the form yourself.

With AgentAssistant

Press Ask AgentAssistant on the Agents page, or ask the console’s Assistant for an agent. A chat opens on AgentAssistant, a loop plutonium.io owns. Say what the agent is for in your own words. It asks for anything it still needs, such as the role it starts in or the tools it uses, and then shows the agent on a card. Approving the card installs the agent and runs nothing: an agent works only when a published loop names it. When you want a loop that uses it, ask LoopAssistant.

With the form

Press New agent and fill in the form:

FieldWhat it is
NameHow a loop names the agent, such as support_triage. It cannot change later, and it cannot be a platform agent’s name.
What it is forOne sentence for people.
Its base instructionsWhat every run of this agent is told, before the loop’s own instruction.
ModelA model from the catalog, or the deployment’s default.
A run starts asThe agent’s role, chosen from the platform’s roles and your account’s own.
Tools it knows how to useChosen from the tools your account has.

Each field says what it is for, and a field you change says what is wrong with it as you type. Press Add agent. The form checks the agent first and names any field it refuses, and then the page opens the new agent at its own address. To edit an agent later, press its Change button, then Save changes.

Roles

A role is a set of permissions. The platform defines the roles below, and an owner of your account can define more (your own roles). Each agent starts with one.

RoleWhat a run in it may do
generalReads and writes records and tells the person what happened. Reads no web until a person names a site on a card. Sends nothing outside the platform.
readerReads the workspace, its collections and its search indexes. Writes nothing anywhere.
librarianReads and writes the workspace and its collections, and searches its indexes. Reaches nothing outside them.
web_readerReads the open web, the account’s search indexes and a service you connect. Writes records. Changes nothing else.
outbound_writerSends what another agent worked out to a system outside the platform. Reads nothing.
builderReads what a task already found, reads the web a site at a time, and proposes software that keeps finding it.
loop_builderInterviews an admin and proposes a loop as a draft. Publishes nothing.
noopGrants almost nothing.

An agent’s role is its outer bound, in every run: on the console it holds what its role allows, and in a loop’s run what its role allows and the loop’s capabilities list, never more. Four permissions are the loop’s own and need no role — spawn_tasks, client_navigate, client_act and call_endpoint (Permissions and trust says how each layer decides). An agent that needs a permission its role does not allow needs a different role, not a wider loop.

Your own roles

An owner of the account can define a role: a name, the words a person reads before trusting it, and its permissions, chosen from the list in Permissions and trust.

Roles, beside Agents, lists every role, each marked Yours or Platform. Open one to read its words, each permission in plain words with its id, and the agents that start with it. An owner presses New role to define one; the form offers only the permissions a role of your own may hold. Each field says what it is for, and a field you change says what is wrong with it as you type; the save checks the whole role again and tells you at each field what to fix. Change and Delete are at the top of your own role. A member reads the roles and changes none. The same rules hold for the roles API (PUT /api/roles/{roleId}; GET /api/roles lists every role and which agents start with it).

A role is refused, in words that name the fix, when it:

  • uses the id of a platform role,
  • lists a tool, such as web_fetch, where a permission belongs — the refusal names the permission the tool needs,
  • lists an install_ permission — only the platform’s own builders hold those,
  • lists one of the three permissions below. Their tools must be bounded (which sites, which folder, which level), and a role of your own carries no bounds, so an agent that needs one starts with a platform role that bounds it:
Permission a role of your own cannot holdStart the agent with
read_web (reading the open web)web_reader
write_workspace (writing files)librarian, or web_reader for its docs/ folder only
rehearse_claim (trying an automation on the live site)builder, or web_reader

A role never widens what a loop may do: a run still holds the role and the loop’s capabilities, never more than both. Publishing pins the role with the agent, so editing the role later changes nothing for a published version until you publish again. A role that an agent starts with cannot be deleted; give that agent another role first. Delete shows what uses the role before anything is removed: each agent that starts with it, which stops the delete, and each published loop version that pinned it, which keeps running its pinned copy.

Reading and sending are two agents

An agent that reads your records must not also send to an outside system. When a loop does both, it uses two agents: one reads and writes records, and the other sends and reads no collection. Publish refuses one agent that holds both. Permissions and trust says why: the Rule of Two.

Use an agent in a loop

Name the agent in the loop’s record:

agents: [support_triage]

With more than one agent, entry_agent names the one a person meets first.

The draft uses the agent’s current version at once, so you can try it on the Chat bench. A draft that names an agent your account does not have still saves; publish refuses it and names the agents you can use.

Publishing pins an agent your account added. The published version keeps that agent’s instructions, tools, model and role as they were at that moment. Editing the agent later changes nothing for that version; the next version you publish picks up the edit.