agentbreeder

agent.yaml Reference

The canonical YAML config format for all AgentBreeder agents.

The agent.yaml file is the canonical configuration for an AgentBreeder agent. It defines everything needed to build, deploy, and govern an agent.

TL;DR

Six fields are required: name, version, team, owner, framework, model.primary, deploy.cloud. Everything else is optional.

name: my-agent
version: 1.0.0
team: engineering
owner: dev@company.com
framework: langgraph              # langgraph | openai_agents | claude_sdk | crewai | google_adk | custom
model:
  primary: claude-sonnet-4
deploy:
  cloud: local                    # local | aws | gcp | azure | kubernetes | claude-managed

Common additions: model.fallback, tools:, prompts:, guardrails:, deploy.scaling, deploy.secrets:, access:. Framework-specific blocks (claude_sdk, google_adk, claude_managed) are only read by their matching runtime.

Jump to: Top-level fields · model · tools · deploy · access · Framework-specific.

Minimal Example

name: my-agent
version: 1.0.0
team: engineering
owner: dev@company.com
framework: langgraph

model:
  primary: claude-sonnet-4

deploy:
  cloud: local

Complete Example

spec_version: v1

name: customer-support-agent
version: 1.0.0
description: "Handles tier-1 customer support tickets"
team: customer-success
owner: alice@company.com
tags: [support, zendesk, production]

framework: langgraph

model:
  primary: claude-sonnet-4
  fallback: gpt-4o
  gateway: litellm
  temperature: 0.7
  max_tokens: 4096

tools:
  - ref: tools/zendesk-mcp
  - ref: tools/order-lookup
  - name: search
    type: function
    description: "Search knowledge base"
    schema: {}

knowledge_bases:
  - ref: kb/product-docs
  - ref: kb/return-policy

prompts:
  system: prompts/support-system-v3

guardrails:
  - pii_detection
  - hallucination_check
  - content_filter
  - name: custom_check
    endpoint: https://guardrails.company.com/check

subagents:
  - ref: agents/billing-agent
    name: billing
    description: "Handles billing queries"

mcp_servers:
  - ref: mcp/zendesk
    transport: sse

deploy:
  cloud: gcp             # local | gcp | aws | azure | kubernetes | claude-managed
  runtime: cloud-run
  region: us-central1
  scaling:
    min: 1
    max: 10
    target_cpu: 70
  resources:
    cpu: "1"
    memory: "2Gi"
  env_vars:
    LOG_LEVEL: info
    ENVIRONMENT: production
  secrets:
    - ZENDESK_API_KEY
    - OPENAI_API_KEY

access:
  visibility: team
  allowed_callers:
    - team:engineering
    - team:customer-success
  require_approval: false

Field Reference

Top-Level Fields

FieldTypeRequiredDescription
spec_versionstringNoSchema version. Currently v1.
namestringYesAgent name. Slug-friendly: lowercase alphanumeric and hyphens, 2–63 characters. Must start and end with alphanumeric.
versionstringYesSemantic version (X.Y.Z).
descriptionstringNoShort description, max 500 characters.
teamstringYesOwning team name.
ownerstringYesEmail of the responsible engineer.
tagsstring[]NoTags for discovery and search.
frameworkstringYesAgent framework. See Framework values.

framework

For Python agents, set framework directly (top-level field). For TypeScript or Go agents, use the runtime: block instead — see below. (Kotlin / Rust / .NET are roadmap — see Polyglot Agents.)

ValueFrameworkRuntime
langgraphLangGraph✅ Available
openai_agentsOpenAI Agents SDK✅ Available
crewaiCrewAI✅ Available
claude_sdkAnthropic Claude SDK✅ Available
google_adkGoogle Agent Development Kit✅ Available
customAny Python agent✅ Available

language: field

Top-level optional. Declares the agent's implementation language. Defaults to python for back-compat with v1 configs that omit it. Closed enum:

language: python    # python | typescript | node | go | kotlin | java | rust | csharp | custom
framework: langgraph

The language: field drives base-image and SDK selection. For Python agents you can omit it entirely. For everything else, set it (and use the runtime: block below for non-Python frameworks). See Polyglot Agents and the Runtime Contract for the full picture.

runtime: block — Polyglot Agents (TypeScript, Go)

For non-Python agents, replace the top-level framework field with a runtime: block. framework and runtime: are mutually exclusive.

runtime:
  language: node        # python | node | rust | go
  framework: vercel-ai  # open string — validated against the plugin registry
  version: "20"         # optional: language runtime version (e.g. Node.js major)
  entrypoint: agent.ts  # optional: overrides the default entry file per language
FieldRequiredDescription
languageYesLanguage runtime: python, node, rust, go
frameworkNoFramework name. Defaults to custom if omitted.
versionNoLanguage version (e.g. "20" for Node 20, "1.78" for Rust).
entrypointNoEntry file. Defaults: agent.ts (node), main.rs (rust), main.go (go), agent.py (python).

Supported language + framework combinations:

LanguageAvailable frameworksStatus
pythonUse top-level framework field — do not use runtime:shipped
nodevercel-ai, mastra, langchain-js, openai-agents-ts, customshipped
gocustom (with the Go SDK)shipped in v2.0
kotlin / rust / csharpreserved enum valuesroadmap#188, #189, #190

See Polyglot Agents for full setup, sidecar wiring, and cross-language A2A calls.

Framework-Specific Configuration

Each framework supports optional configuration under a top-level key matching the framework name. These keys are only read by the corresponding runtime.

claude_sdk — Anthropic Claude SDK
claude_sdk:
  thinking:
    enabled: true           # false (default) — enable adaptive thinking
    effort: high            # "low" | "medium" | "high" (default: "high")
  prompt_caching: true      # Enable prompt caching for long system prompts (default: false)
  routing:
    provider: anthropic     # "anthropic" (default) | "vertex_ai" | "bedrock"
    project_id: ""          # Required for vertex_ai
    region: ""              # Required for vertex_ai and bedrock
FieldTypeDefaultDescription
thinking.enabledbooleanfalseEnable adaptive thinking. When true, the agent uses extended thinking for complex queries.
thinking.effortstring"high"Thinking compute budget. One of "low", "medium", "high". Maps to output_config.effort in the API.
prompt_cachingbooleanfalseCache the system prompt via Anthropic's prompt caching API. Reduces latency and cost when the system prompt is reused across many requests. Minimum length thresholds: 8 192 chars for Sonnet models, 16 384 chars for others.
routing.providerstring"anthropic"Provider endpoint: "anthropic" (direct), "vertex_ai" (GCP), or "bedrock" (AWS).
routing.project_idstringGCP project ID. Required when routing.provider is "vertex_ai".
routing.regionstringCloud region. Required when routing.provider is "vertex_ai" or "bedrock".

Environment variables injected by the runtime:

VariableDescription
AGENT_MODELClaude model ID (e.g., claude-sonnet-4-6)
AGENT_MAX_TOKENSMax tokens for responses (default: 4096)
AGENT_SYSTEM_PROMPTSystem prompt injected at startup
AGENT_TOOLS_JSONJSON array of tool definitions
AGENT_THINKING_CONFIGJSON object with thinking configuration
AGENT_PROMPT_CACHING"true" when prompt caching is enabled
crewai — CrewAI
crewai:
  process: sequential       # "sequential" (default) | "hierarchical" | "parallel"
  manager_llm: gpt-4o       # Required when process=hierarchical
  verbose: false            # Enable verbose CrewAI output (default: false)
  memory: false             # Enable crew-level memory (default: false)
  memory_config: {}         # Advanced memory provider config passed to Crew(memory_config=...)
FieldTypeDefaultDescription
processstring"sequential"Crew execution process. "hierarchical" requires manager_llm.
manager_llmstringModel ref for the manager agent. Required when process: hierarchical.
verbosebooleanfalseEnable verbose output from CrewAI.
memorybooleanfalseEnable crew-level memory for long-term knowledge.
memory_configobjectAdvanced memory provider config passed directly to Crew(memory_config=...).

The CrewAI runtime automatically injects AGENT_MODEL and AGENT_TEMPERATURE from the top-level model: block into every agent in the crew. Your crew.py does not need to read these environment variables — the runtime sets them on each agent.llm object at startup.

Environment variables injected by the runtime:

VariableDescription
AGENT_MODELLLM model name (propagated to each crew agent's LLM)
AGENT_TEMPERATURESampling temperature (propagated to each crew agent's LLM)
AGENT_TOOLS_JSONJSON array of tool definitions from the registry

The crew module must export either a crew attribute (a Crew instance) or a flow attribute (a Flow instance). Both sync and async (akickoff) crew execution are supported.

google_adk — Google Agent Development Kit
google_adk:
  session_backend: memory       # "memory" (default) | "database" | "vertex_ai"
  session_db_url: ""            # Required when session_backend is "database"
  memory_service: memory        # "memory" (default) | "vertex_ai_bank" | "vertex_ai_rag"
  artifact_service: memory      # "memory" (default) | "gcs"
  gcs_bucket: ""                # Required when artifact_service is "gcs"
  streaming: none               # "none" (default) | "sse" | "bidi"
FieldTypeDefaultDescription
session_backendstring"memory"Session storage backend. "database" requires DATABASE_URL. "vertex_ai" uses Vertex AI session service and requires GOOGLE_CLOUD_PROJECT.
session_db_urlstringPostgreSQL URL for database session storage. Falls back to DATABASE_URL env var.
memory_servicestring"memory"Memory persistence service. "vertex_ai_bank" and "vertex_ai_rag" require GOOGLE_CLOUD_PROJECT.
artifact_servicestring"memory"Artifact storage service. "gcs" requires a GCS bucket name.
gcs_bucketstringGCS bucket name for artifact storage. Falls back to GCS_ARTIFACT_BUCKET env var.
streamingstring"none"Streaming mode for RunConfig. "sse" = Server-Sent Events, "bidi" = bidirectional streaming.

Environment variables injected by the runtime:

VariableDescription
AGENT_MODELGemini model ID (applied to agent.model at startup)
AGENT_TEMPERATURESampling temperature (applied via generate_content_config)
AGENT_MAX_TOKENSMax output tokens (applied via generate_content_config)
AGENTBREEDER_ADK_CONFIGJSON blob of the google_adk: config block
GOOGLE_CLOUD_PROJECTGCP project for Vertex AI services
GOOGLE_CLOUD_LOCATIONGCP region (default: us-central1)

The agent module must export one of: root_agent, agent, or app (a google.adk.agents.Agent instance). Alternatively, a root_agent.yaml file (ADK config-based agents) is supported as a fallback.


Streaming — /stream SSE Endpoint

All deployed agents expose a /stream endpoint alongside /invoke. The endpoint streams execution progress as Server-Sent Events.

Request: same body as /invoke

Response: text/event-stream

FrameworkSSE events
Claude SDKdata: {"text": "..."} — one event per streamed text chunk
CrewAIevent: step with {"description": "...", "result": "..."} for each crew step; event: result with the final output
Google ADKdata: {"text": "...", "is_final": false|true} — one event per ADK event

All streams terminate with data: [DONE].

Example (curl):

curl -N -X POST https://<agent-endpoint>/stream \
  -H "Content-Type: application/json" \
  -d '{"input": "Summarize this quarter'\''s results"}'

model

Model configuration for the agent's LLM.

FieldTypeRequiredDescription
primarystringYesPrimary model. Registry reference or provider/model-id.
fallbackstringNoFallback model if primary is unavailable.
gatewaystringNoModel gateway (e.g., litellm). Defaults to org setting.
temperaturenumberNoSampling temperature, 0–2.
max_tokensintegerNoMaximum tokens per response.

Gateway values:

GatewayDescription
litellmRoute through LiteLLM proxy
ollamaRoute to local Ollama instance
(unset)Direct provider call via the provider abstraction layer

The provider abstraction layer (engine/providers/) supports OpenAI and Ollama natively, with automatic fallback chains when fallback is specified.

Examples:

model:
  primary: claude-sonnet-4

model:
  primary: claude-sonnet-4
  fallback: gpt-4o
  gateway: litellm
  temperature: 0.7
  max_tokens: 4096

# Local development with Ollama
model:
  primary: ollama/llama3
  gateway: ollama

gateways (v2.0+, optional)

Workspace-level gateway overrides. Most agents do not need this block — the catalog defaults are correct. Use it when you need to point LiteLLM at a different proxy URL, or set a per-agent OpenRouter key:

gateways:
  litellm:
    url: https://litellm.platform.example.com    # overrides catalog default
    api_key_env: PLATFORM_LITELLM_KEY
    fallback_policy: fastest                      # advisory; not enforced yet
  openrouter:
    api_key_env: TEAM_OPENROUTER_KEY
    default_headers:                              # merged with catalog defaults
      X-Tenant: my-team

Each top-level key is a gateway preset name from engine/providers/catalog.yaml (or your ~/.agentbreeder/providers.local.yaml). Every nested field is optional and falls back to the catalog default. See Gateways for the full picture and engine.providers.catalog.parse_gateway_ref for the routing implementation.

Note: the long-term home for gateways: is workspace.yaml; per-agent overrides remain valid once Track A (#146) ships.


tools

List of tools and MCP servers available to the agent.

Each tool is either a registry reference or an inline definition:

tools:
  # Registry reference (recommended)
  - ref: tools/zendesk-mcp

  # Inline definition
  - name: search
    type: function
    description: "Search knowledge base"
    schema: {}

  # With Human-in-the-Loop approval
  - ref: tools/send-email
    approval:
      require: true
      timeout: 30m
      notify:
        - slack: "#approvals"
        - email: admin@company.com
FieldTypeRequiredDescription
refstringNoRegistry reference path.
namestringNoTool name (for inline definitions).
typestringNoTool type: function, computer_use_20260401 (browser/computer use), or agent_toolset_20260401 (full built-in toolset).
descriptionstringNoTool description.
schemaobjectNoOpenAPI-compatible schema.
approval.requirebooleanNoIf true, every call to this tool must be approved by a human before execution.
approval.timeoutstringNoHow long to wait for human approval (e.g., 30m, 1h).
approval.notifyarrayNoNotification channels. Each item is {slack: "#channel"} or {email: "addr"}.

subagents

List of subagent references for A2A (agent-to-agent) communication. Each reference auto-generates a call_{name} tool during dependency resolution.

subagents:
  - ref: agents/billing-agent
    name: billing
    description: "Handles billing queries"
  - ref: agents/tech-support
FieldTypeRequiredDescription
refstringYesRegistry reference path to the subagent.
namestringNoDisplay name (defaults to slug from ref).
descriptionstringNoDescription of the subagent's purpose.

mcp_servers

List of MCP server references the agent can call. At deploy time each entry is either forwarded to a remote URL or co-deployed as a sidecar container, and the AgentBreeder sidecar exposes it to the agent at http://localhost:9091/mcp/<name>.

mcp_servers:
  - ref: mcp/zendesk          # registry reference
    transport: sse
    url: https://mcp.acme.com/sse   # remote server — sidecar forwards here
  - ref: mcp/slack
    transport: sse
    image: acme/mcp-slack:1.2.3     # co-deployed as a sidecar container
    port: 3100                       # localhost port (auto from 3100 if omitted)
FieldTypeRequiredDefaultDescription
refstringYesRegistry reference path to the MCP server.
transportstringNostdioMCP transport type: stdio, sse, streamable_http.
urlstringNoRemote HTTP/SSE MCP server URL. When set, the sidecar forwards directly to it (no container is co-deployed).
imagestringNoContainer image to co-deploy as an MCP sidecar (reachable over localhost).
portintegerNo3100+Localhost port for a co-deployed MCP container. Auto-assigned from 3100 when omitted.

When neither url nor image is given, the deployer co-deploys a conventionally-named image (agentbreeder/mcp-<name>:latest). Co-deploy works on multi-container targets (AWS ECS, GCP Cloud Run, Azure Container Apps, docker-compose); single-container targets (App Runner) can only use remote url servers. A remote stdio server cannot be forwarded — use sse/http, or co-deploy an image.


knowledge_bases

List of knowledge base references.

knowledge_bases:
  - ref: kb/product-docs
  - ref: kb/return-policy
    backend_url: postgresql://pgvector-host:5432/rag_db   # optional explicit DSN
FieldTypeRequiredDescription
refstringYesRegistry reference path.
backend_urlstringNoExplicit cloud-reachable vector-store DSN (pgvector) or graph URL for this knowledge base. Overrides the registry-resolved default at deploy time.

memory

Memory store references. Each entry must match a memory.yaml store entry (e.g. a Redis buffer window or PostgreSQL entity store).

memory:
  stores:
    - mem/session-buffer
    - mem/entity-store
  backend: redis             # "redis" | "postgresql" — omit to resolve from registry
  backend_url: redis://memory-host:6379   # optional explicit connection string

Cloud backends. A deployed agent never inherits your laptop's REDIS_URL/DATABASE_URL. Either set backend_url explicitly, or let agentbreeder deploy provision a managed backend. For local Docker Compose, set AGENTBREEDER_ALLOW_LOCAL_BACKENDS=1 to reuse the compose services.

FieldTypeRequiredDescription
storesstring[]NoList of memory store refs (e.g. mem/session-buffer, mem/entity-store).
backendstringNoMemory backend type: "redis" or "postgresql". Omit to resolve from the registry.
backend_urlstringNoExplicit cloud-reachable connection string for the memory backend. Overrides the registry-resolved default at deploy time.

prompts

Prompt configuration.

# Registry reference
prompts:
  system: prompts/support-system-v3

# Inline
prompts:
  system: "You are a helpful customer support agent..."
FieldTypeRequiredDescription
systemstringNoSystem prompt — registry reference or inline string.

guardrails

List of guardrails to enforce on agent outputs. Can be built-in names or custom endpoints.

guardrails:
  - pii_detection           # Built-in
  - hallucination_check     # Built-in
  - content_filter          # Built-in
  - hitl_approve            # Built-in — route every output through human approval queue
  - name: custom_check      # Custom
    endpoint: https://guardrails.company.com/check
    action: warn            # "block" (default) | "warn" | "hitl_approve"

Built-in guardrails:

NameDescription
pii_detectionStrips PII from outputs
hallucination_checkFlags low-confidence responses
content_filterBlocks harmful content
hitl_approveRoutes every agent output through the human-in-the-loop approval queue

Custom guardrail fields:

FieldTypeRequiredDescription
namestringYesGuardrail name.
endpointstringNoURL of the guardrail service.
actionstringNoAction on trigger: "block" (default), "warn" (log but pass through), or "hitl_approve" (route to approval queue).

deploy

Deployment configuration.

Status: Deploy-target availability (which targets ship full governance, greenfield provisioning, and secret auto-mirror) is maintained in one canonical place — see the deploy-target status table.

FieldTypeRequiredDefaultDescription
cloudstringYesTarget platform: local, aws, gcp, azure, kubernetes, claude-managed.
runtimestringNoPer cloudDeployment runtime. See defaults below.
regionstringNoCloud region (e.g., us-east-1). Not used for claude-managed.
scalingobjectNoSee belowAuto-scaling configuration. Not used for claude-managed.
resourcesobjectNoSee belowCPU and memory allocation. Not used for claude-managed.
env_varsmapNoNon-secret environment variables.
secretsstring[]NoSecret names. Resolved at deploy time from your workspace secrets backend and auto-mirrored to the target cloud's native store under agentbreeder/&#123;agent&#125;/&#123;secret&#125;. The container env wires to the cloud-native secret reference — plaintext never lands on disk.

Supported runtimes by cloud:

CloudDefault RuntimeOther RuntimesNotes
localdocker-composeRequires Docker
awsecs-fargateapp-runnerApp Runner = no VPC/ALB required
gcpcloud-runScales to zero by default
azurecontainer-apps
kubernetesdeploymenteks, gke, aksBring your own cluster
claude-managed(n/a)No container built; Anthropic manages the runtime

deploy.scaling

FieldTypeDefaultDescription
mininteger1Minimum instances (0 = scale to zero).
maxinteger10Maximum instances.
target_cpuinteger70CPU % threshold to trigger scaling (1–100).

deploy.resources

FieldTypeDefaultDescription
cpustring"0.5"vCPU units.
memorystring"1Gi"Memory allocation.

deploy.identity

Auto-creates a dedicated IAM Role (AWS) or Service Account (GCP) scoped to this agent at deploy time.

deploy:
  cloud: aws
  identity:
    create: true
    permissions:
      - "s3:GetObject:arn:aws:s3:::my-bucket/*"   # AWS IAM action:resource
    boundary: "arn:aws:iam::123456789:policy/AgentBoundary"
deploy:
  cloud: gcp
  identity:
    create: true
    roles:
      - "roles/storage.objectViewer"   # GCP IAM role
FieldTypeDefaultDescription
createbooleanfalseAuto-create a dedicated IAM role/service account for this agent.
permissionsstring[]AWS IAM permission strings in action:resource format.
rolesstring[]GCP IAM roles to grant the Service Account.
boundarystringAWS IAM permissions boundary ARN — limits the maximum effective permissions.

deploy.sidecar

Configure the observability sidecar injected alongside every agent container. The sidecar provides OTel traces, cost attribution, and guardrail enforcement.

deploy:
  sidecar:
    enabled: true
    guardrails:
      - pii_detection
      - content_filter
    otel_endpoint: "http://otel-collector:4317"
    cost_tracking: true
FieldTypeDefaultDescription
enabledbooleantrueInject the AgentBreeder observability sidecar alongside the agent container.
guardrailsstring[]Guardrails to enforce in the sidecar (runs independently of the agent process).
otel_endpointstringOverride the OpenTelemetry collector endpoint. Defaults to OPENTELEMETRY_ENDPOINT env var.
cost_trackingbooleantrueEnable token-level cost attribution in the sidecar.

access

Access control configuration. Optional — defaults to team's policy.

FieldTypeDefaultDescription
visibilitystringteamOne of: public, team, private.
allowed_callersstring[]Restrict who can call this agent (e.g., team:engineering).
require_approvalbooleanfalseIf true, deploys require admin approval.


claude_managed

Optional block read only when deploy.cloud: claude-managed. No container is built — Anthropic manages the runtime.

claude_managed:
  environment:
    networking: unrestricted    # unrestricted | restricted
  tools:
    - type: agent_toolset_20260401   # full built-in toolset (default)
FieldTypeDefaultDescription
environment.networkingstringunrestrictedNetwork access for the managed environment.
toolsobject[]See defaultTool definitions passed to the Anthropic Agent API.

Mapping from agent.yaml to the Anthropic Agent API:

agent.yaml fieldAnthropic API field
model.primarymodel
prompts.systemsystem
claude_managed.toolstools
namename

CLI Deploy Targets

The --target flag on agentbreeder deploy maps to cloud + runtime combinations:

agentbreeder deploy --target local           # Docker Compose (local)
agentbreeder deploy --target cloud-run       # GCP Cloud Run
agentbreeder deploy --target ecs-fargate     # AWS ECS Fargate
agentbreeder deploy --target app-runner      # AWS App Runner (no VPC/ALB)
agentbreeder deploy --target container-apps  # Azure Container Apps
agentbreeder deploy --target kubernetes      # Kubernetes (EKS/GKE/AKS/self-hosted)
agentbreeder deploy --target claude-managed  # Anthropic Claude Managed Agents

All Frameworks × All Deployment Targets

This matrix is the canonical home for the framework/target compatibility grid — No Code, Low Code, and Full Code all compile to the same agent.yaml, so it applies to every builder tier equally.

LocalApp RunnerECS FargateCloud RunContainer AppsKubernetesClaude Managed
LangGraph
OpenAI Agents
Claude SDK
CrewAI
Google ADK
Custom

Every framework compiles to every target. Governance availability per target is a separate axis — AWS App Runner is single-container (no sidecar, no guardrails:/secrets:) and Kubernetes + Claude-managed are in flight; see the deploy-target status table.

Claude Managed note

When deploying to claude-managed, no container is built — Anthropic manages the runtime. The framework field is still required and controls how the agent logic is structured inside the managed environment.


Validation

Validate your config without deploying:

agentbreeder validate ./agent.yaml

The JSON Schema is at engine/schema/agent.schema.json.

Name Constraints

  • Lowercase alphanumeric and hyphens only
  • Must start and end with an alphanumeric character
  • Length: 2–63 characters
  • Pattern: ^[a-z0-9][a-z0-9-]*[a-z0-9]$

Valid: my-agent, customer-support-v2, data-monitor Invalid: -my-agent, My_Agent, a

On this page