Skip to main content
AURA is configured with a single TOML file. The file path defaults to config.toml in the working directory; override it with the CONFIG_PATH environment variable.
To validate a config file, start the web server or CLI against it — both validate immediately and exit with a clear error if parsing fails, before binding to any port or entering the REPL:

Environment Variable Interpolation

Any string value in the config can reference an environment variable using {{ env.VAR_NAME }}. An optional | default: 'value' fallback prevents a hard error when the variable is unset.

Root-Level Fields


[agent]

Defines the agent identity, system prompt, and behavioral settings.

Multiple Agents

CONFIG_PATH can point to a single TOML file or a directory of .toml files. When pointed at a directory, AURA loads every .toml file and serves each as a selectable agent:
Each agent is identified by its alias (if set) or name. Clients discover available agents via GET /v1/models and select one by passing its identifier as the model field in chat completion requests — the same field tools like LibreChat, OpenWebUI, and CLI clients use to present a model picker. Agent selection follows this order:
  1. If only one config is loaded, it is always used (the model field is ignored).
  2. Otherwise, model is matched first, then DEFAULT_AGENT if model is absent.
  3. Returns a 400 error if multiple configs are loaded and neither model nor DEFAULT_AGENT is supplied at all.
  4. Returns a 404 error if a model or DEFAULT_AGENT value is supplied but matches no loaded config.
Aliases must be unique across all loaded configs. If two configs share the same name and neither has an alias, loading fails with a validation error. Hidden agents are excluded from GET /v1/models and the CLI’s /model list but remain fully accessible when a caller targets them by exact name or alias. Set hidden = true to hide agents that are in development, restricted to known callers, or should not appear in model pickers (LibreChat, OpenWebUI, etc.):

[agent.llm]

Configures the LLM provider. The provider field is a discriminant that selects the variant and its required fields.

Common Fields

These fields are available on all providers except where noted.

provider = "openai"

Extra fields:

provider = "anthropic"

Extra fields:

provider = "bedrock"

Uses AWS credentials from the environment (AWS profile, IAM role, or environment variables). No API key field.
Extra fields:

provider = "gemini"

Extra fields:

provider = "ollama"

No API key required. Defaults to http://localhost:11434.
Extra fields:

provider = "openrouter"

Access 300+ models through a single API key. Uses OpenRouter’s reasoning wire format (reasoning + reasoning_details). For other OpenAI-compatible APIs (Fireworks, Together), use provider = "openai" with base_url instead.
Extra fields:

[mcp]

Configures Model Context Protocol (MCP) tool servers.

[mcp.servers.<name>]

Each server is a named entry under [mcp.servers]. The transport field selects the connection type. Tool names are not namespaced by server. If two servers register a tool with the same name, registration overwrites the earlier entry — since registration order is not the same as config declaration order, which tool ends up callable is effectively arbitrary, not deterministically “first” or “last” in TOML order (#186). Connects to an MCP server over HTTP using the current MCP streamable transport (post-2025-11-05).

transport = "sse"

Connects using the legacy SSE-based MCP protocol. Supports the same headers, headers_from_request, and scratchpad options as http_streamable.

transport = "stdio"

Spawns a local child process. Each agent request creates its own process instance. cmd is a list where cmd[0] is the executable and cmd[1..] are fixed arguments that are part of the command (e.g. a script path). args are additional arguments appended after.

Static Headers

Add static headers to every request to an HTTP or SSE server:

Header Forwarding (headers_from_request)

Forward headers from the incoming API request to the MCP server. The table maps outgoing header name → incoming request header name. Useful for per-user auth delegation.
When headers_from_request is set, the forwarded header takes precedence over any matching static header from headers.

Per-Tool Scratchpad Thresholds

Override when a tool’s output gets intercepted by the scratchpad system. Keys are glob patterns matched against tool names; the most specific (longest) pattern wins.

[agent.scratchpad]

Controls context window management. When enabled, large MCP tool outputs are saved to disk and replaced with a file pointer. The agent then uses eight exploration tools (head, slice, grep, schema, item_schema, get_in, iterate_over, read) to selectively read the data it needs. See Scratchpad for the full feature guide. Requires memory_dir to be set at the root level and context_window to be set on [agent.llm]. Orchestration also accepts the legacy [orchestration.artifacts].memory_dir as a fallback when the top-level field is absent.

[agent.skills]

Points the agent at directories of on-demand skills. Skills follow the Agent Skills specification: each skill is a subdirectory containing a SKILL.md file with YAML frontmatter (name, description). The name must match the directory name and consist of lowercase alphanumerics and hyphens only (1–64 characters, no leading/trailing/consecutive hyphens). See Skills for the full feature guide.
A load_skill tool is exposed to the agent that loads and executes skills on demand, along with a read_skill_file tool for fetching individual resource files from a skill’s directory.

[[vector_stores]]

Configures RAG (Retrieval-Augmented Generation) stores. Each entry creates a vector_search_<name> tool the agent can call. Multiple stores create multiple search tools.

type = "qdrant"

type = "in_memory"

type = "bedrock_kb"

Managed RAG — no embedding model needed. Uses AWS credentials.

Embedding Models

Used by in_memory and qdrant types.

[tools]

Enables built-in server-side tools.

[hitl]

Human-in-the-loop (HITL) approval gates let an agent ask for permission before running selected MCP tools. [hitl] is the enable bit — there is no separate enabled field; presence of the table turns it on, and route is required when it’s present. See HITL for the full route contracts, SSE lifecycle events, and current scope (single-agent vs. orchestration worker gating).

[hitl.route]

Tagged by mode: "conversational" or "webhook".

Session Store (Durable and Multi-Pod Deployments)

Unlike every other section on this page, the session store is not configured in TOML — it’s deployment infrastructure (one instance per server, not per-agent), so it’s configured only via environment variables. By default, cross-request session state (A2A tasks, parked HITL approvals) lives in process memory — correct for a single pod, the CLI, and local dev. Behind a load balancer with multiple replicas, configure a shared Redis/Valkey backend and every cross-request flow works no matter which pod serves each request: A2A message:send → poll → list → history-by-context, A2A subscribe/cancel against a task executing on another pod, and conversational HITL approvals resolved by a POST /v1/approvals/{id} that lands away from the pod that parked them.
The server pings the backend at startup and fails fast if it is unreachable; /health reports the backend and its ping latency. The Redis backend requires building with the session-store-redis cargo feature (cargo build --release --features aura-web-server/session-store-redis). The in-memory backend is always available. See the session storage design doc for the design and Helm packaging roadmap.

[orchestration]

Enables multi-agent orchestration mode. A coordinator agent decomposes user queries into tasks and delegates them to specialized worker agents for parallel execution. The coordinator’s system prompt comes from [agent].system_prompt. Workers are defined in [orchestration.worker.<name>] sections. Execution loop:
  • Plan: coordinator decomposes the request into a task DAG.
  • Execute: dependency-ready tasks run in parallel waves on worker agents.
  • Continue: coordinator consolidates worker outputs and routes to a final response, replan, or clarification.
Workers run with isolated task context windows and filtered MCP/vector-store access based on each worker block.

[orchestration.timeouts]

[orchestration.artifacts]

Controls persistence and artifact promotion.

[orchestration.worker.<name>]

Defines a specialized worker. Worker names must be unique case-insensitively (to avoid filesystem collisions) and non-empty.

Per-Worker LLM Override

Workers inherit [agent.llm] by default. Provide [orchestration.worker.<name>.llm] to use a different model for a specific worker (e.g. a cheaper model for simple tasks).

Per-Worker Scratchpad Override

Per-Worker Skills Override

None (field absent) inherits [agent.skills]. An explicit empty list disables skills. A non-empty list replaces the agent’s skills entirely (no merging).

Complete Examples

Minimal: OpenAI

Single Agent with MCP Tools

Single Agent with Scratchpad

Large tool outputs are intercepted and saved to disk; the agent uses exploration tools to read what it needs.

Multi-Agent Orchestration with Per-Worker Models

RAG with Qdrant

Local Ollama (No API Key)

AWS Bedrock with Knowledge Base