Skip to content

One agent in your world

GET
/api/v1/agents/{name}
curl --request GET \
--url http://localhost:11044/api/v1/agents/example \
--header 'X-Embabel-Api-Key: <X-Embabel-Api-Key>'
name
required
string

The agent’s name, as the list returns it

The agent

Media typeapplication/json

An agent as GET /agents and GET /agents/{name} show it: its declaration resolved against the routines, signatures and stages this world holds. Existing routines no declared agent names appear gathered into one agent per realm, or one for the user

object
authority

What it may do on its own, verb by verb, as declared and as the Gatekeeper enforces it; null when it declares none, which leaves every verb at act

object
default
required

Level for every effect not named in verbs: act (the default), request or never. An unrecognised level reads as request

string
Allowed values: act request never
observe
required

Gatekeeper rules it only tries: authority, sensitive, egress or review. Each is evaluated and recorded on the run, but the call goes through

Array<string>
unique items
Allowed values: authority sensitive egress review
reach

Namespaces its routines may reach. When set, a call to any API or MCP server not listed is refused, read or write; reading the world’s graph and raising a request never are. Null reaches everything

Array<string>
unique items
review
required

Whether an independent reviewer reads each write it may make on its own first, and may refuse it; a model call per write. False by default

boolean
verbs
required

Level by verb, named as the gateway names it (for example odoo_partnerMessagePost): act, request or never

object
key
additional properties
string
Allowed values: act request never
budget

The hard limits it runs within, as declared; null when it declares none

object
concurrentRuns

Most of its runs that may be in progress at once

integer format: int32
expiresOn

ISO-8601 date (yyyy-MM-dd), read in the user’s zone, after which it stands down until re-signed with a later one. A date that does not parse stands it down too

string
requestsPerRun

Most requests for people to approve that one run may raise

integer format: int32
runsPerHour

Most runs it may start in any rolling hour; skipped runs do not count

integer format: int32
sourceShares
required

Percent of each source’s declared rate it may take, keyed by bucket (a producer’s cost.bucket, else its name), with * for every bucket not named. Only sources that declare a rate are paced

object
key
additional properties
integer format: int32
spendPerDayCents

Most model spend across a day, in US cents

integer format: int32
spendPerRunCents

Most model spend one run may make, in US cents

integer format: int32
writesPerDay

Most writes it may make on its own in a day

integer format: int32
duties
required

The duties it keeps, each with what its latest check found

Array<object>

A duty on an agent’s card (AgentView.duties): a condition the agent keeps true, with what its latest check and latest passing test run found

object
checkedAt

When the latest check ran, as an ISO-8601 instant; null when it has not been checked

string format: date-time
every

Six-field cron cadence it is checked on; null when it is only checked on demand

string
holds
required

Name of the view or DERIVE label whose rows are the violations

string
lapsedSince

When the current lapse began, as an ISO-8601 instant; null when it is not lapsed or has not been checked

string format: date-time
name
required

The duty’s name within its agent, as POST /agents/{name}/duties/{duty}/check takes it

string
reason

Why the latest check could not tell, when its state is unknown; otherwise null

string
stage
required

The stage it runs at (off, observing or on): its own declared stage, else the agent’s

string
Allowed values: off observing on
state

The latest check’s state: upheld, lapsed, neglected or unknown; null when it has not been checked

string
Allowed values: upheld lapsed neglected unknown
status
required

The latest check in words: “upheld”, “lapsed since …”, “neglected: …”, “unknown: ”, or “not checked yet”

string
testedAt

When this duty last passed a test run, as an ISO-8601 instant; null when it never has

string format: date-time
testedVersion

The signed agent version that test run checked; going on duty needs it to be the current one. Null when it was never tested

integer format: int32
text
required

The condition in the sponsor’s words: an Always or a Never

string
timezone

Zone the cadence is read in, as a zone ID such as Europe/London; null reads it in the user’s own zone

string
violations
required

How many violating rows the latest check found; 0 when it has not been checked

integer format: int32
identity
required

Whose account it calls each API with, keyed by API name: own-account or on-behalf-of. An API not named is called on its sponsor’s behalf

object
key
additional properties
string
Allowed values: own-account on-behalf-of
job
required

The job in one sentence, as declared; for a gathered agent, a sentence saying where its routines came from

string
name
required

The agent’s name, unique in this world. A gathered agent is named after its realm, or personal for your own routines; one that collides with a declared agent takes a -routines suffix

string
needs
required

What must be fixed before it can go on duty, one phrase each (“a sponsor”, “a job”, a missing routine or sweep view, a signature, …). Empty when nothing stands in the way

Array<string>
operators
required

Usernames of its operators, as declared; empty for a realm-shipped or gathered agent

Array<string>
origin
required

Where it was declared: “world”, the name of the realm that ships it, or “migrated” for an agent gathered from existing routines

string
owners
required

Usernames of its owners: they may sign it, put it back on duty after a sponsor stands it down, and move a Gatekeeper rule from observe to enforce. Empty for a realm-shipped agent until the world declares some

Array<string>
persona

Slug of the personality it speaks through; null when it declares none

string
qos

Its scheduling priority and model fallbacks, as declared; null is business priority with no fallbacks

object
fallbacks
required

Fallback model names keyed by LLM role. A check whose models and fallbacks all fail is held as unknown, never as upheld

object
key
additional properties
string
priority
required

Interactive, business (the default) or background. Background work takes half of each source it declares no share for; a conversation is interactive whatever is declared

string
Allowed values: interactive business background
routines
required

The routines it holds, in declared order; a gathered agent’s are sorted by name

Array<object>

A routine on an agent’s card (AgentView.routines): a TypeScript action or realm-scheduled function, with the stage chosen for it and the stage it actually fires at

object
description
required

The action’s own description; empty when the routine does not exist in this world

string
firing
required

The stage dispatch actually honours for it (off, observing or on). Lower than stage when something the agent still needs holds it back; off for a missing routine

string
Allowed values: off observing on
missing
required

True when the agent names a routine that does not exist in this world

boolean
name
required

The action’s name, as the agent names it

string
stage
required

The stage chosen for this routine (off, observing or on): a stored override, else its declared stage, else the agent’s, before the agent’s own standing is applied

string
Allowed values: off observing on
trigger
required

What fires it, in words: “when arrives”, “on schedule ”, “on the realm’s schedule ”, both joined by a comma, “no trigger”, or “not found” for a missing routine

string
routing
required

“Ask me about…”: when people and other agents should come to it. Empty when not declared

string
signedAt

When the latest version was signed, as an ISO-8601 instant string; null when it has never been signed

string
signedBy

Username of whoever signed the latest version; null when it has never been signed

string
sponsor

Username of the person who answers for it: as declared, else as recorded when someone adopted it; null while nobody has, which keeps it off duty

string
stage
required

The stage chosen for the agent: off, observing or on. A stage set through POST /agents/{name}/stage overrides the declared one; what actually fires is each routine’s firing

string
Allowed values: off observing on
state
required

Lifecycle state: draft, submitted, active, suspended or retired. Only an active agent goes on duty; retired is final

string
Allowed values: draft submitted active suspended retired
sweeps
required

The cold materializations it keeps filled, as declared. Each one buys producer fetches and model judgements for as long as it runs, so this is what a sponsor signs for

Array<object>

A sweep: a cold materialization an agent keeps filled by running a saved view pass after pass, under a budget, until a pass buys nothing

object
budgetPerTick

Most units of paid work (a producer fetch, or a group of an inline judgement) one pass may buy; null takes the host’s default

integer format: int32
name
required

The sweep’s name within its agent; part of the fill’s identity, so starting it twice is one fill

string
view
required

Name of a saved view of this world that takes no arguments: the query each pass runs

string
unsignedChanges
required

What the world holds now that the signed version does not, one sentence per change. Dispatch runs the signed version, so none of these take effect until it is signed again

Array<string>
version
required

Its latest signed version; 0 for an agent never signed, or one gathered from routines

integer format: int32

Example

{
"authority": {
"default": "act",
"observe": [
"authority"
],
"verbs": {
"additionalProperty": "act"
}
},
"duties": [
{
"stage": "off",
"state": "upheld"
}
],
"identity": {
"additionalProperty": "own-account"
},
"qos": {
"priority": "interactive"
},
"routines": [
{
"firing": "off",
"stage": "off"
}
],
"stage": "off",
"state": "draft"
}

No authenticated principal

One of:

A refusal with a machine-readable code and a plain-language message. ApiErrorAdvice answers it for a failed validation, a missing resource or a conflicting state, and some controllers answer it directly

object
code
required

Machine-readable key to branch on, such as validation_failed, unknown_field, not_found or conflict. Open: a surface may answer codes of its own

string
detail

Extra context where there is some, such as the fields a body may carry; null otherwise

string
message
required

A plain-language explanation, written to be shown. Never carries an exception message

string

Example generated

{
"code": "example",
"detail": "example",
"message": "example"
}

No agent of that name in your world