Blueprint Model

A blueprint is the central abstraction of the AWS Agent Platform. It is a YAML file that declares everything an agent needs — model, inference provider, tools, memory, identity, policy, observability, evaluation — and the platform wires all of it into a fully running AWS agent automatically.

The developer declares what. The platform handles how.


The One-Sentence Version

A blueprint is a YAML declaration that BlueprintLoader reads to produce a fully wired Strands Agent wrapped in an AgentCoreApp runtime container — no boilerplate required.


A Minimal Blueprint

The only required fields are id, version, name, prompt_ref, and a model block (which itself requires model_id, temperature, and max_tokens):

id: analysis-agent
version: "1.0.0"
name: Analysis Agent
prompt_ref: analysis-agent-system-v1

model:
  provider: bedrock            # bedrock | anthropic | litellm | vertex
  model_id: us.anthropic.claude-sonnet-4-20250514-v1:0
  temperature: 0.1
  max_tokens: 4096

That is a complete, loadable agent blueprint. Everything else — tools, memory, identity, policy, observability — has safe defaults and is added only when needed.


What Each Block Wires

Every top-level key in the blueprint maps to a specific AWS service or SDK component that BlueprintLoader assembles at load time:

Blueprint Block What It Configures AWS / SDK Component
model Inference provider and model BedrockModel, AnthropicModel, LiteLLMModel, or GeminiModel (Strands SDK)
prompt_ref System prompt source Prompt Registry (S3 + DynamoDB, mode-gated)
tools MCP tools, built-in tools, A2A agent tools AgentCore Gateway targets, Code Interpreter, Browser, A2A clients
gateway Inbound auth for the agent endpoint AgentCore Gateway (JWT or IAM validation)
identity Inbound JWT validation + outbound credential resolution AgentCore Identity, Secrets Manager / SSM
memory Conversation history and long-term knowledge AgentCore Memory (short-term events + pgvector long-term)
observability Tracing, Langfuse, audit log, cost tracking, data protection OTEL/CloudWatch, Langfuse, DynamoDB audit, Presidio or Bedrock Guardrails
evaluation LLM-as-judge scoring of agent behaviour AgentCore Evaluation or Langfuse Evaluation
policy Tool-level access control Cedar policy engine on AgentCore Gateway
runtime Container hosting parameters AgentCore Runtime (microVM pool, network mode, protocol)
multi_agent Coordinator/specialist topology A2A server (specialist) or A2A client nodes (coordinator)
execution_modes Which environments the agent is active in EXECUTION_MODE gating throughout prompt resolution, Gateway routing, and data access
output_schema Structured output enforcement Strands native structured_output_model (requires schema_registry in BlueprintLoader)
thinking Extended reasoning budget Strands thinking mode (enabled, budget_tokens)
artifacts Artifact storage tier and type hint Artifact Store (S3 + DynamoDB, claim-check pattern)

Three Blueprint Types

The platform defines three blueprint types for the three different roles in an agent system:

Type File Location Produces
Agent (AgentBlueprint) blueprints/agents/*.yaml AgentCore Runtime container + wired Strands agent
Strategy (StrategyBlueprint) blueprints/strategies/*.yaml Evaluated by a strategy-evaluation agent
Workflow (WorkflowBlueprint) blueprints/workflows/*.yaml AWS Step Functions state machine

Most work involves agent blueprints. Strategy and workflow blueprints are covered in detail in the Blueprints section.


How BlueprintLoader Assembles a Blueprint

BlueprintLoader is the engine that turns YAML into a running agent. The assembly sequence is deterministic:

blueprints/agents/my-agent.yaml
        |
        v
BlueprintLoader.build_agent_session(agent_id)
        |
        +-- 1. Locate and parse YAML → AgentBlueprint (Pydantic validation)
        +-- 2. Resolve model → BedrockModel / AnthropicModel / LiteLLMModel / GeminiModel
        +-- 3. Resolve prompt → PromptRegistryClient.get(prompt_ref, mode)
        +-- 4. Wire tools → MCPClient (Gateway), BuiltinToolWiring, A2aToolConfig
        +-- 5. Wire memory → MemoryWiring → MemoryHookProvider (if strategies declared)
        +-- 6. Wire identity → credential provider decorators (if credentials declared)
        +-- 7. Wire observability → CompositeObservabilityHook (if enabled)
        +-- 8. Wire evaluation → EvaluationClient + evaluator config (if evaluators declared)
        +-- 9. Wire policy → CedarPolicyBuilder → PolicyWiring (if policy declared)
        +-- 10. Wire structured output → structured_output_model (if output_schema declared)
        +-- 11. Wire A2A server → A2AServerWrapper.from_blueprint() (if role: specialist)
        |
        v
AgentSession { agent, hooks, context }
        |
        v
AgentCoreApp(@app.entrypoint) → Docker → ECR → AgentCore Runtime → microVM

Steps 3 through 11 only run for the blocks that are declared. An agent with no memory: strategies skips step 5 entirely — no memory client is created, no hook is registered, no AGENTCORE_MEMORY_ID is required.


env-template Expansion

Any string field in a blueprint supports ${VAR} and ${VAR:-default} env-template expansion at load time. This is most commonly used for model.model_id to allow runtime model switching without image rebuilds:

model:
  provider: litellm
  model_id: ${AGENT_MODEL_ID:-claude-sonnet-4-6}
  base_url: ${LITELLM_BASE_URL}
  api_key_env: LITELLM_API_KEY
  temperature: 0.1
  max_tokens: 4096

At load time, BlueprintLoader expands ${AGENT_MODEL_ID:-claude-sonnet-4-6} using the environment — the model running in production can differ from staging without any blueprint change.


Execution Mode Isolation

execution_modes is a blueprint-level gate that controls which environments the agent is active in:

execution_modes:
  simulation: true   # active in simulation (default: true)
  staging: true      # active in staging (default: false)
  production: false  # not yet promoted to production

EXECUTION_MODE is set at deployment time via the Terraform agents module. When the runtime mode is not listed as true in the blueprint, the agent rejects invocations with a clear error. This prevents accidentally routing production traffic to an agent that has not been through staging.

Execution mode also controls:

  • Which prompt version the Prompt Registry resolves (draft prompts are only accessible in simulation and dev modes; only stable prompts are resolved in staging and production)
  • Which Gateway backend targets receive tool calls (domain repos can declare mode-specific target URLs)
  • Which Memory namespaces are read and written

Switching Inference Provider

The model.provider field is the only change needed to switch inference backends:

# Bedrock (default)
model:
  provider: bedrock
  model_id: us.anthropic.claude-sonnet-4-20250514-v1:0
  temperature: 0.1
  max_tokens: 4096

# Anthropic direct API
model:
  provider: anthropic
  model_id: claude-sonnet-4-5
  api_key_env: ANTHROPIC_API_KEY
  temperature: 0.1
  max_tokens: 4096

# LiteLLM proxy (any OpenAI-compatible endpoint)
model:
  provider: litellm
  model_id: claude-sonnet-4-6
  base_url: ${LITELLM_BASE_URL}
  api_key_env: LITELLM_API_KEY
  extra_headers_env:
    CF-Access-Client-Id: CF_CLIENT_ID
    CF-Access-Client-Secret: CF_CLIENT_SECRET
  temperature: 0.1
  max_tokens: 4096

# Vertex AI (Google)
model:
  provider: vertex
  model_id: gemini-2.0-flash
  temperature: 0.1
  max_tokens: 4096

All other blueprint blocks — memory, tools, policy, observability — remain unchanged. The provider swap is confined to the model: block. See Inference Providers for provider-specific setup and caveats.


Blueprint vs. Code

The table below shows what lives in the blueprint versus what domain developers write in code:

Concern Blueprint (YAML) Code
Which model and provider model.provider, model.model_id
Which tools the agent can call tools[].mcp, tools[].builtin, tools[].a2a Tool implementations (Lambda / MCP server)
What the system prompt says prompt_ref → Prompt Registry build_prompt() function in AgentConfigRegistry
Memory strategy configuration memory.strategies
Who can call the agent (inbound auth) identity.authorizer
What credentials the agent uses (outbound) identity.credentials
Which tool calls are permitted policy.rules
Observability and evaluation settings observability, evaluation
Runtime sizing and network mode runtime
The agent entrypoint — (generated) app.py — 5-line handler, identical for every agent

The developer writes: the prompt builder (one function per agent), tool implementations (Lambda / MCP), and the five-line app.py. Every other concern is configuration.


Where Blueprints Live

blueprints/
  agents/
    my-agent.yaml          # AgentBlueprint — declares the full agent
  strategies/
    my-strategy.yaml       # StrategyBlueprint — trigger conditions and parameters
  workflows/
    daily-pipeline.yaml    # WorkflowBlueprint — Step Functions DAG

BlueprintLoader discovers blueprints by scanning the blueprints/ directory. File discovery tries {id}.yaml first, then {id}.yml, then falls back to scanning all YAML files for a matching id field.

Blueprint IDs use kebab-case by convention (e.g. analysis-agent, data-processor), matching the filenames in the shipped examples.


Next Steps