Agents¶
The Agents area defines the agents of an organization. An agent is a named configuration: an owner team, a system prompt and a model, the tools and plugins it can use, the secrets it can request, and its limits. Agents do work in agent tasks. Runner pods run the tasks (see Agent Runners).
The Agents menu in the top bar shows when you have agent:read. Each
organization has its own agents. Select the organization in the top bar
first.
The area has these pages:
| Page | Menu path | What it shows |
|---|---|---|
| Dashboard | Agents > Dashboard | Agent activity at a glance |
| Tasks | Agents > Tasks | The task inbox. See Agent tasks |
| Usage | Agents > Usage | Tokens and spend |
| Agents | Agents > Settings > Agents | The agent list, the agent detail, and the editor |
| Workflows | Agents > Settings > Workflows | See Workflows |
| Platform | Agents > Settings > Platform | The base configuration and the plugin marketplaces |
Permissions¶
| Permission | Lets you | Roles that have it |
|---|---|---|
agent:read |
See agents, their versions, and the tool catalog | admin, developer, default, readonly |
agent:create |
Create and duplicate agents | admin, developer |
agent:write |
Edit, enable, disable, and restore agents. Refresh the tool catalog | admin, developer |
agent:delete |
Delete agents | admin |
agent_platform_config:write |
Change the base configuration and the marketplaces | admin |
prompt:create, prompt:update |
Save a change to the system prompt or the model | admin, developer |
secret_grant:read, secret_binding:read, secret_grant:write |
See and add grants on the Access tab | admin |
You must also be a member of the organization. The permissions come from your role in that organization only. For the task permissions, see Agent tasks. For roles, see Roles and permissions.
Create an agent¶
- Open Agents > Settings > Agents.
- Click New Agent.
- Complete the tabs. The sections below describe each tab.
- Click Create Agent.
A new agent is enabled. Imbi also makes a service account for the agent. The agent acts as this service account when it calls Imbi. Imbi deletes the service account when you delete the agent.
To copy an agent, open it and click Duplicate.
Overview¶
| Field | What to enter |
|---|---|
| Agent name | Required. Imbi makes the slug from the name |
| Description | One sentence. The task inbox and the workflow picker show it |
| Icon | An icon, or an image that you upload (500 KB maximum) |
| Slack channel | A channel name, for example #cs-escalations. Imbi stores it. In this release, nothing uses it |
| Owner team | Required. The team that owns the agent |
| Labels | Organization tags. You can make a label with a color from this field |
System prompt and model¶
The system prompt, the model, and the model parameters are not stored on
the agent. They are a prompt in the prompt CMS, with the
reference agents/<organization slug>.<agent slug>@stable.
When you save a change to the System prompt tab or the Model tab, Imbi does these steps:
- It writes a new version of the prompt. For a new agent, it creates the prompt.
- It moves the
stablelabel to the new version. - It saves the agent, with the number of the prompt version.
Step 2 needs agent:write or prompt:promote. agent:write is enough
because the prompt belongs to the agent. On any other prompt, a label
move needs prompt:promote.
The system prompt can use these variables. Imbi fills them in when a runner starts a task. Each prompt version that the editor saves declares them.
| Variable | Value |
|---|---|
{{ organization }} |
The organization slug |
{{ agent }} |
The agent slug |
{{ task }} |
The task id, for example T-42 |
{{ project_slug }} |
The project slug of the task, or empty |
The System prompt tab is a Markdown editor. The Model tab has these fields:
| Field | What it does |
|---|---|
| LLM provider | Filters the model list by provider |
| Model | An enabled generative model from AI Models. The list shows the context window and the price |
| Max tokens, Extended thinking, Prompt caching, Temperature, Top K, Top P | Click Show advanced controls. A parameter that is off is not set, and the provider default applies |
Tools and plugins¶
This tab sets what the agent can call. It has two parts.
Plugins lists the plugins of the marketplaces that the organization allows (see Plugin marketplaces). Select a plugin to give it to the agent. Each row names the MCP servers that the plugin brings. While a plugin is on, the agent can use every tool of its MCP servers.
- When you save, Imbi pins each new plugin to the commit that it synced last.
- When a newer commit exists, the row shows Pin with the commit. Click it, then save, to use the newer commit.
- A default plugin of the organization is selected and you cannot clear it.
- A plugin with the badge unsupported source cannot load. See Plugin sources.
Tools lists the tools in groups:
- The
imbigroup has the tools of the Imbi API. - Each other group is an MCP server from Admin > Global Admin > Assistant > MCP Servers. The assistant also uses these servers. The Slack bot does not.
The key of a tool is <server slug>.<tool name>. Each tool has a
capability badge: Read, Write, Destructive, or Unknown. The
badge comes from the MCP annotations of the tool.
To give the agent a tool:
- Find the tool. Use the search field, the Capability filter, or Enabled only.
- Turn on the switch of the tool. Enable all turns on all the tools of a server.
- Optional: click Approval. Then a person must approve each call. See Approvals.
- Optional: click an environment chip to block that environment. A
blocked environment is not highlighted. The runner refuses a call whose
environmentargument names a blocked environment. - Optional: click the rate limit button. Enter the number of calls and select Per minute, Per hour, or Per day. Click Apply.
Imbi keeps the tool list for 5 minutes. Click the refresh button to list
the tools again. The refresh connects to each MCP server, so it needs
agent:write.
When a server does not answer, its group shows an error: not reachable, no answer in time, or credentials not accepted. A tool that the agent has but that the catalog does not list now shows Unavailable. Turn it off to remove it.
Access¶
This tab shows what the agent can get from the secrets broker. Grants apply at once. They are not part of the agent version. A new agent gets grants only after its first save.
GitHub App: select the github_app binding of the agent's own GitHub
App. The binding is saved with the agent. The tab then shows one row for
each purpose:
| Purpose | Used for | Delivery |
|---|---|---|
workspace_checkout |
Clone the project repositories | file_descriptor |
github_write |
Push, and open pull requests and issues | environment |
marketplace_fetch |
Fetch plugins from private marketplaces | file_descriptor |
A missing purpose shows a Grant button. Click it to make a grant for this agent, this binding, and that purpose. For the App setup, see Configure GitHub access.
Secrets lists the secrets that the agent can request with
run_with_secret. Each secret goes into the environment of one command. To
add one:
- Click Add access.
- Select the Secret.
- Enter the Purpose, for example
npm. - Click Save.
The tab also lists the secrets that the runner uses for the agent, for
example the model key and MCP server credentials. The agent never gets
these values. To change or remove a grant, use Admin > \
Subagents¶
An agent can give work to other agents. Each such call makes a child task (see Related tasks).
- Select each agent that this agent can delegate to. The list shows the enabled agents of the organization.
- Optional: click Add instructions and enter the delegation instructions for that subagent.
An agent cannot name itself. Cycles are allowed. A link uses the id of the subagent, so a rename does not break it.
Settings¶
An empty field means no limit.
| Field | What it does |
|---|---|
| Monthly cost cap | USD. Advisory only: warnings show at 80% and 100%. The agent still runs. See Usage |
| Task budget | USD. The default hard budget of each task. A task can only lower it. See Budgets |
| Max concurrent tasks | The number of tasks of this agent that can run at the same time |
| Task timeout | For example 30m or 2h. A number with no unit is minutes. A task that runs longer closes with exceeded_ceiling |
| Required runner labels | Labels, separated by commas. Only a runner with every label runs the tasks of this agent. See Labels and exclusive pools |
| Egress destinations | The internal hosts that the pod of the agent's chains may reach, in addition to the global ones. See Egress allowlists. A host name destination works only for HTTPS clients that use the egress proxy, and the DNS owner of each name controls where it goes: see Host name destinations |
| Human response SLA | 4 hours, 8 business hours, 24 hours, 3 days, or No SLA. Imbi stores it. In this release, nothing uses it |
Narrowing fields¶
The agent settings also have permission_mode, sandbox, denied_tools,
and approval_tools. They narrow the organization's
base configuration. The editor has no controls for
them. Set them with the API.
Enable and disable an agent¶
On the agent list, use the switch on the row. A disabled agent:
- Gets no new tasks. A create returns
409. - Has no Run button.
- Is not in the New task dialog.
- Does not run its queued tasks.
A change to only the enabled state writes no version.
Versions¶
Each save that changes the agent writes a new version. A save that changes nothing writes no version. Each version records the prompt version, so a restore also brings back the system prompt and the model.
To restore a version:
- Open the agent, click Edit, then open the Version history tab.
- Click Restore on the version.
- Read the dialog. It names the label move, for example
agents/acme.triage@stable → v3. - Confirm.
The restore writes a new version with the summary Restored v<n>. It
needs agent:write. That is also enough to move the prompt label.
- A restore moves a label only on the agent's own
agents/<organization slug>.prompt. For any other prompt, it returns409. - An agent made before the organization-scoped prompt slugs returns
409. Change and save its system prompt one time, then restore. - A subagent that no longer exists is removed. The version summary says so.
Delete an agent¶
Open the Version history tab and click Delete agent. The delete removes the agent, its versions, and its service account. The prompt stays in the prompt CMS.
The delete returns 409 when:
- Another agent delegates to this agent. The tab lists those agents. Remove this agent from each of them first.
- A workflow uses this agent. Remove it from each workflow first.
Agent detail¶
Open an agent from the list. The detail page shows:
- The owner team, model, Slack channel, settings, and labels.
- Runs (30 days) and the monthly cost cap, with a badge at 80% and 100%.
- Cost over time: daily cost and runs for the last 30 days.
- Tools and MCP access, Subagents, and the System prompt.
- Run, Duplicate, and Edit. Run opens the New task dialog with this agent.
The agent list also shows Runs 30d, Cost 30d, and Avg / run.
Base configuration¶
Open Agents > Settings > Platform. Each organization has one base configuration. Each save writes a new version. Every task pins the version that was current when the task was made.
An agent can only narrow the base configuration. An agent save that widens
a setting returns 422. When Imbi merges the two, it always uses the
stricter value.
| Field | What it does |
|---|---|
| Model upstream | Anthropic API or LiteLLM gateway |
| Base URL | The upstream URL. Empty is the Anthropic API |
| Key | The secret:// reference of the model key. See Configure the model key |
| Permission mode | plan, default, acceptEdits, or bypassPermissions, strictest first. Agents can set a stricter mode only |
| Sandbox | Require the sandbox and Allow unsandboxed commands |
| Allowed tools | Built-in tools, separated by commas. Empty allows all |
| Denied tools | Agents can deny more |
| Approval tools | Tools that need approval when an automation starts the task (not a person) |
| System prompt prefix | Put before the system prompt of each agent |
| Hooks | Agent SDK hooks, as JSON. Agents cannot change them |
| Allowed marketplaces and default plugins | The marketplaces that agents can use, and the plugins that every agent gets |
Click Save version. Without agent_platform_config:write, the page is
read only.
Plugin marketplaces¶
A marketplace is a git repository with a .claude-plugin/marketplace.json
file, in the Claude Code marketplace format.
To add a marketplace:
- Open Agents > Settings > Platform.
- In Plugin marketplaces, enter a Slug and the Git URL, for
example
https://github.com/anthropics/claude-code. - Click Add marketplace. Imbi syncs it at once.
- In Base configuration, select the marketplace in Allowed marketplaces and default plugins.
- Click Save version.
A sync reads the marketplace file at the head of the default branch. It
reads through the organization's GitHub integration. When no integration can
read a github.com repository, the sync reads it anonymously. GitHub
limits anonymous reads to 60 requests an hour for each API pod IP address.
A repository on another host is never read anonymously. A failed sync shows an
error badge on the row. Click the sync button of a row to sync it again.
Imbi does not sync on a schedule.
You cannot delete a marketplace that the newest base configuration allows. Pinned plugins keep their URL and commit, so the tasks of existing agent versions still run them.
Plugin sources¶
Source in marketplace.json |
Supported |
|---|---|
| A relative path in the marketplace repository | Yes |
An inline entry, with no .claude-plugin/plugin.json in the plugin directory |
Yes. The runner uses the entry from marketplace.json |
url (https only) |
Yes, when the sync resolves a commit |
github (owner/name) |
Yes, when the sync resolves a commit |
npm, pip, git-subdir, and others |
No |
For a url or github source, the sync uses the sha of the source, else
its ref, else the head of the default branch.
An external plugin must be on the same host as the marketplace. The runner
uses its marketplace_fetch token for the plugin, and that token is for
the marketplace host. A github source is on github.com. A plugin on
another host shows unsupported source.
With a GitHub App binding, put each private marketplace and plugin
repository in the repositories of the binding. When the token is refused
or the clone fails, the runner clones a github.com repository
anonymously. This works only for a public repository. Otherwise, and for a
repository on another host, the task fails with marketplace_fetch_failed.
Usage¶
Open Agents > Usage. Select a range (the last 7, 30, or 90 days) and an agent. The page shows:
- Tiles with the totals: tokens in, tokens out, and spend.
- A daily chart by agent. Use Cost or Token usage.
- Usage by agent: tasks, tokens in, tokens out, cache hit, and cost, with a total row.
Imbi calculates the cost from the token counts and the prices in AI Models. A usage report for a model with no price counts as $0. The page tells you how many reports had no price.
- Tasks counts the tasks made in the range. The cost in the range can include tasks made before it.
- The monthly cost cap uses the UTC calendar month. At 80% and 100% of a cap, the page shows a banner. The cap does not stop the agent.
The page needs agent_task:read. The API is
GET /organizations/{org}/agent-usage/, with start, end, and
agent_id.
Dashboard¶
Open Agents > Dashboard. It needs agent_task:read.
| Section | What it shows |
|---|---|
| Tiles | Running, Waiting on people (with the oldest wait), Queued, Runs (30 days), and Spend this month |
| Needs attention | Tasks that wait on a person, oldest first. Then tasks closed in the last 7 days with the outcome failed_external, failed_at_gate, exceeded_ceiling, partial_capped, or request_expired. Then agents at 80% or more of their monthly cost cap |
| Busiest agents | The top 5 agents by runs in the last 30 days |
| Waiting on people | Waiting tasks by owner, with the count, the oldest wait, and the median wait |
| Recent runs | The 8 newest tasks |
The dashboard reads at most 100 open tasks and 50 recent tasks.