Skip to content

Agent spec field reference

The agent's advanced JSON editor edits one typed configuration. Save validates the draft; Publish applies stricter checks for complete references, grants and production requirements. Unknown keys are rejected. Correct the reported path rather than assuming an unsupported option is ignored.

This reference describes the field structures. Use Create an agent, Permissions, Test and publish and Run and observe for workflows. Resource IDs in a spec must come from the installation's actual catalogs; a structurally valid example cannot establish that a resource exists.

Profile, scope and main

Path Purpose
profile.display Display name
profile.avatar Profile avatar value
profile.color Widget color, #rrggbb
scope.topics Topics the agent handles
scope.refusal Refusal wording for out-of-scope requests
scope.strict Enable the topic guard before the main run
scope.classifier_model Guard model; main model when unset
main.model Chat model; gateway default when unset
main.instructions.orchestration How the agent works and uses its abilities
main.instructions.response How it writes its answer
main.tools Selected tool IDs
main.skills Selected skill names
main.budget.rounds Model/tool-round ceiling
main.budget.seconds Elapsed run budget
main.budget.tokens Token budget

The main run's omitted rounds use the default effort's (low) round budget. Omitted seconds/tokens do not introduce a ceiling at this spec field. Operator resource limits still apply.

Tool resource settings

main.tool_resources.<tool> accepts:

Field Purpose
bind Argument-name → gateway-supplied source
permission always_allow or always_ask; unset uses default policy
approval_timeout Approval waiting duration; default one hour

Bind sources are "state.<slot-or-path>", "route.<name>" or {"const": <JSON value>}. The gateway removes bound parameters from the model-visible schema and overwrites any supplied value. route.<name> requires a dispatching route to provide that name.

Do not bind unverified subject data merely because its value looks plausible. Publish validation checks whether routing gates guarantee trusted provenance for state-sourced subject bindings.

State slots

state maps slot names to definitions.

Field Purpose / applicable type
type string, email, enum, integer, number, boolean, subject
set_by Allowed writers, such as llm, host or verifier:<id>
description Meaning of the slot
values Allowed enum values
min_length Minimum string length
max_length Maximum string/email length
minimum, maximum Integer/number bounds
pattern String pattern
schema Structured subject schema
order Display order of details in the setup assistant

Constraints on types where they cannot be enforced are errors. order is editor metadata; it does not control runtime route evaluation. Provenance and age belong to actual state writes, not claims that a visitor types into a message.

Verifiers

verifiers.<id>.kind chooses mcp_code, lookup or host_jwt. assurance describes the verification's actual assurance; choose it for the real mechanism rather than implying stronger identity proof.

MCP code

Field Purpose
assurance Declared assurance
connector MCP connector holding the code operations
send_tool, check_tool Tool names; defaults send_code, check_code
input Input selected for verification
email_slot Email state slot used by the code flow
writes Slot-name → trusted result/input source
max_attempts Wrong guesses allowed; default 5, cap 10
code_ttl Code lifetime; default 10 minutes, cap one hour
send_limits.email, .ip, .session Rate limits for sending codes, each {max, per}

The send/check operations must exist on the configured connector and be available to the principal. Rate limits are independent of the broader visitor-message rate policy.

Lookup

Field Purpose
assurance Declared assurance
tool Lookup tool
inputs Tool-input-name → state slot or {"const": value}
writes Slot-name → trusted result/input source
max_attempts Wrong attempts allowed; default 5, cap 10

Lookup inputs use "state.<slot>" or a constant. Verifier output sources use result, result.<field> or input.<argument>. Check the tool's real return shape before declaring writes.

Host JWT

Field Purpose
assurance Declared assurance
algorithm Supported JWT algorithm selected by the validator
secret Shared verification secret, sealed during save
secret_sealed Server-managed sealed representation; preserve when editing existing JSON
public_key Public-key verification material
jwks_url Key-set endpoint when using remote keys
issuer, audience Expected token issuer and audience
max_lifetime Maximum accepted token lifetime; default 10 minutes, cap 24 hours
claims Slot mappings from token claims; a claim name or object of field → claim

JWT identity is supplied by the host integration, not manufactured by the conversation model. Configure signing/key material and claims consistently with that host. JWKS URLs undergo the outbound-network policy.

Router, conditions and targets

router.kind is rules or classifier. router.model selects its classifier model; router.order names route evaluation order. routes.<name> contains description, when, optional task and bind, and exactly one target (agent, human, a2a or loop).

Conditions combine {"all": [conditions]}, {"any": [conditions]} or {"not": condition}. All/any require nonempty arrays and each combinator is the only key of its object. A leaf uses:

Field Check
slot Declared state slot
set Presence/absence
eq Equality with a JSON value
in Membership in an array of JSON values
provenance Required writer: llm, host or verifier:<id>
max_age Maximum age of the state write

Checks in one leaf are ANDed. A leaf must perform at least one check. Missing/invalid state fails checks except an explicit absence check. Gate failures report unmet conditions without exposing state values the model did not write.

Task text can use {slot} and {slot.field} placeholders, resolved from the main agent state. A dispatched sub-agent receives its task and bound inputs rather than the entire parent conversation. Missing placeholders produce errors identifying what is missing.

Sub-agent target

agent names a published agent. task describes its work. bind passes resolved arguments down to matching sub-agent tool parameters. Publication checks the reachable agent graph, resource references and trusted-bind requirements; inspect path-specific failures.

Human target

human accepts notify (push, slack, discord), inbox, timeout and transcript. Timeout defaults to 30 minutes; transcript inclusion defaults off. A handoff suspends the turn for an authorized human answer. Notification channels do not grant answer rights.

Remote A2A target

a2a accepts card_url, auth, finish and budget.seconds. The timeout defaults to 120 seconds and is capped at 900 seconds. finish.schema is required at publication for the expected remote result.

Authentication kinds are bearer, api_key and oauth_client_credentials. Fields include scheme, token, token_sealed, client_id, client_secret, client_secret_sealed and scopes, according to the chosen kind. Plaintext credentials are sealed during save; the sealed fields are server-managed representations. The card and its advertised endpoint are subject to outbound-network policy.

Worker/critic loop target

loop accepts worker, critic, max_iterations, budget.seconds and budget.tokens. Worker/critic are agent IDs. Iterations default to 3 and are capped at 10. Set finite budgets suited to the real task, and test both completion and exhaustion.

Finish schema

finish.schema supports these validating keywords: type, properties, required, enum, items and boolean additionalProperties. Types can be a name or list of names. items is a single schema for array members. Annotation keywords are title, description, default, examples and $schema.

Unsupported validating keywords, such as oneOf or string pattern, are rejected. Do not copy arbitrary JSON Schema expecting the whole standard to be implemented. Slot constraints such as pattern are separate from the finish schema subset.

Publish policy

Field Purpose
origins Optional additional allowed embed origins
idle_ttl Idle visitor-token lifetime; default 30 minutes
retention_days Idle conversation retention; default 30 days
audit_retention_days Activity-chain retention; default 365 days and at least conversation retention
rate_limits.visitor, .ip {max, per} for each inbound rate scope
budget.monthly_cost, .monthly_tokens Owner monthly ceilings; unset adds no owner ceiling
output_filter.patterns Named regex patterns for provenance-sensitive identifiers
output_filter.action withhold or redact; default withhold
require_passing_tests Require a current green draft suite
voice.input, .output Enable widget voice input/output
voice.transcription_model, .speech_model Models for enabled directions; gateway defaults when unset
voice.voice Offered speech voice; language/model default when unset
a2a.enabled Serve A2A; disabled when unset
a2a.skills Agent-card skill declarations

Each A2A advertised skill has id, name, description, optional tags and examples. These describe the actual published agent; they are distinct from installed instruction bundles selected by main.skills.

Durations use values such as 30s, 15m, 2h or 30d. A rate has positive max and a duration per. Retention values are positive days. Publication and runtime enforce their corresponding limits; use a test case to verify the intended policy.


Documentation build: 2610.1.108 · commit b774e1f9e2c2