Skip to content

agent.yaml Reference

agent.yaml is the heart of every agent package. It tells the Selu orchestrator who the agent is, how it should be routed, and which capabilities it can use.

Agent detail page showing capabilities, permissions, and resource usage

id: hello-world
name: Hello World

That is all you need to get started. Every other field is optional and has sensible defaults.

FieldTypeRequiredDescription
idstringYesUnique identifier. Lowercase, hyphens allowed.
namestringYesHuman-readable display name.
i18nobjectNoLocalization config (default_locale, supported_locales).
modelobjectNoLLM model suggestion. The user’s configured default model is used if omitted.
routingstringNoRouting mode: inline, delegate, or auto (default).
sessionobjectNoSession management and isolation settings.
capabilitieslistNoCapabilities this agent can use.
install_stepslistNoPost-install setup wizard steps.
automationobjectNoSchedule presets users can opt into.

The model section is a suggestion to the orchestrator. If the user has configured a default model, that takes precedence.

model:
provider: anthropic
model_id: claude-sonnet-4-20250514
temperature: 0.7
FieldTypeRequiredDescription
providerstringNoProvider name, e.g. anthropic, openai, bedrock.
model_idstringNoModel identifier, e.g. claude-sonnet-4-20250514.
temperaturefloatNoSampling temperature (0.0 - 2.0). Default 0.7.

Routing controls how the orchestrator decides to involve this agent when a message arrives.

routing: delegate
ModeDescription
autoThe orchestrator decides at runtime whether to inline or delegate (default).
inlineThe agent processes messages inline within the current conversation flow.
delegateThe orchestrator delegates the full conversation turn to this agent.

When routing is auto (the default), the orchestrator evaluates the agent on each request and chooses inline or delegate automatically:

  • Inlines when all of the following are true: the agent has 3 or fewer tools, no custom model is configured, and the resolved system prompt is under 2000 characters.
  • Delegates otherwise.

This means lightweight agents stay fast and low-overhead, while agents with many tools or a custom model get their own dedicated context window.

See Routing & Sessions for full details.

session:
trigger: mention # mention | always | auto
idle_timeout_minutes: 30 # session cleanup timeout
isolation: per_thread # shared | per_thread
FieldTypeRequiredDescription
triggerstringNoWhen to activate this agent. Default mention.
idle_timeout_minutesintNoMinutes before idle sessions are cleaned up. Default 30.
isolationstringNoSession isolation mode. Default shared.
  • shared (default) — Reuses active sessions for the same user+agent across threads. Capability containers and workspaces are shared between conversations.
  • per_thread — Forces dedicated sessions per thread. Each conversation thread gets its own capability containers and isolated workspaces.

:::tip When to use per-thread isolation Use isolation: per_thread for stateful agents like coding assistants or workspace managers where you want to prevent cross-thread state collisions. This ensures that work in one conversation doesn’t interfere with another. :::

:::caution Resource usage Per-thread isolation uses more memory and CPU since each thread runs separate capability containers. Only use it for agents that genuinely need workspace isolation. :::

Capabilities are listed by id reference.

capabilities:
- id: weather
- id: calendar
FieldTypeRequiredDescription
idstringYesCapability identifier.

Install steps define a post-install setup wizard that runs when a user adds the agent. Each step can collect credentials, configure settings, or verify that prerequisites are met.

install_steps:
- id: api_key
type: input
label: OpenWeatherMap API Key
description: Enter your API key from openweathermap.org
validation: "^[a-f0-9]{32}$"
default: ""
store_as:
scope: system
capability_id: weather
credential_name: OPENWEATHER_API_KEY
- id: test_key
type: test
label: Verify API Key
depends_on: [api_key]
request:
method: GET
url: "https://api.openweathermap.org/data/2.5/weather?q=London&appid={{api_key}}"
expect_status: 200

Steps run in order. Use depends_on to express dependencies between steps so the wizard can skip or retry as needed.

FieldTypeRequiredDescription
idstringYesUnique step identifier. Referenced by depends_on and template variables.
typestringYesStep type: input or test.
labelstringYesShort label shown in the wizard UI.
descriptionstringNoHelp text shown below the input field.
depends_onlistNoList of step ids that must complete before this step runs.
validationstringNoRegex pattern the input value must match.
defaultstringNoDefault value pre-filled in the input field.
store_asobjectNoWhere to persist the collected value (see below).
requestobjectNoHTTP request definition for test steps (see below).
FieldTypeRequiredDescription
scopestringYesStorage scope, e.g. system.
capability_idstringYesThe capability that owns this credential.
credential_namestringYesEnvironment variable name exposed to the capability at runtime.
FieldTypeRequiredDescription
methodstringYesHTTP method (GET, POST, etc.).
urlstringYesURL to call. Supports {{step_id}} template variables that resolve to the value collected by a previous step.
expect_statusintYesExpected HTTP status code. The step passes when the response matches.

The automation section lets you define schedule presets that users can opt into after installing the agent.

automation:
schedules:
- id: daily_forecast
label: Daily Weather Forecast
prompt: Give me today's weather forecast for my location
cron_expression: "0 0 7 * * 1-5"
cron_description: Every weekday at 7:00 AM
FieldTypeRequiredDescription
scheduleslistNoList of schedule presets.

Each schedule entry:

FieldTypeRequiredDescription
idstringYesUnique identifier for this schedule.
labelstringYesHuman-readable label shown to the user.
promptstringYesThe prompt sent to the agent on each trigger.
cron_expressionstringYes6-field cron expression (see below).
cron_descriptionstringNoHuman-readable description of the schedule.
id: weather-agent
name: Weather Agent
i18n:
default_locale: en
supported_locales: [en, de]
model:
provider: anthropic
model_id: claude-sonnet-4-20250514
temperature: 0.5
routing: inline
session:
trigger: mention
idle_timeout_minutes: 30
isolation: shared
capabilities:
- id: weather
install_steps:
- id: api_key
type: input
label: OpenWeatherMap API Key
description: Enter your API key from openweathermap.org
validation: "^[a-f0-9]{32}$"
store_as:
scope: system
capability_id: weather
credential_name: OPENWEATHER_API_KEY
- id: test_key
type: test
label: Verify API Key
depends_on: [api_key]
request:
method: GET
url: "https://api.openweathermap.org/data/2.5/weather?q=London&appid={{api_key}}"
expect_status: 200
automation:
schedules:
- id: daily_forecast
label: Daily Weather Forecast
prompt: Give me today's weather forecast for my location
cron_expression: "0 0 7 * * 1-5"
cron_description: Every weekday at 7:00 AM

For the complete schema definition, see the agent.yaml Schema Reference.