Skip to main content

Agents & orchestration

An agent is a single role in an ecosystem. Agents don't run as separate services — they all run on the same Bedrock AgentCore Runtime, configured per invocation from their YAML definition. What makes each agent distinct is its prompt, its tools, its output_kind, and its place in the dependency graph.

Anatomy of an agent​

- id: report_synth # snake_case, starts with a letter
name: Report Synthesizer # display name in the UI
registry_id: tessera/report_synth
swarm: synthesis # grouping for parallel execution
depends_on: [research_agent] # upstream agents that must finish first
tools: [memory_read, code_interpreter, generateUI]
tool_budget:
web_search: 12 # cap tool calls
output_kind: synthesizer # the contract the runtime applies
output_format: # optional typed artifact
type: markdown # markdown | json | yaml | html
save_as: buyer_report.md
prompt: |
Your specific contribution: reconcile the upstream findings into a single
buyer report. Cite each upstream agent as [per <agent_id>: ...].

output_kind​

output_kind tells the runtime what contract to apply to an agent's output:

output_kindRole
analystResearches and produces findings for downstream agents.
synthesizerReconciles upstream findings into a canonical result.
challengerStress-tests / critiques the output (auto-injected when quality.challenger).
reporterAssembles the final report (auto-injected when report: true).
drafterProduces a draft document.
creativeOpen-ended generation.
chatConversational.
operatorTakes actions / operates tools.

Tools​

Agents call tools through the AgentCore Gateway (MCP). Common ones:

ToolUse
web_searchExternal grounding / research.
memory_read / memory_writeRead and write shared memory namespaces.
current_timeDeterministic timestamp.
code_interpreterRun code for validation, math, table checks.
generateUIEmit generative-UI components to the frontend.

Use tool_budget to cap calls to expensive tools (e.g. web_search: 12).

The dependency graph (DAG)​

depends_on defines the edges. The compiler turns the agent set into a directed acyclic graph and then into a Step Functions state machine:

  • Leaf agents (no depends_on) run first, in parallel.
  • Synthesizers wait until all their dependencies complete, then reconcile.
  • A cycle or a missing dependency makes the ecosystem fail to compile.

Swarms & parallelism​

A swarm is a named group of agents that can run together:

swarms:
research: { agents: [research_agent, market_agent], strategy: graph }
synthesis: { agents: [report_synth], strategy: graph }
parallel_swarms: [research, synthesis]

parallel_swarms lets independent swarms execute concurrently, subject to the DAG edges between their agents.

Shared memory​

Agents pass context through memory namespaces, not by stuffing everything into prompts:

memory:
strategies: [semantic] # + episodic for chronological recall
shared_namespaces:
- name: findings
write: [all] # or a list of agent ids
read: [all]

An analyst writes findings to findings; a downstream synthesizer reads them. Namespaces are isolated per ecosystem run.

Grounding & citations​

With quality.grounding: true, agent output is checked against:

  • Internal grounding — a Bedrock Guardrail confirms claims are supported by the agents' own source outputs.
  • External grounding — web search validates factual claims.

Synthesizers are expected to cite upstream agents ([per <agent_id>: ...]); uncited standalone synthesis is rejected by the output contract.

tip

These quality gates check this run's output. To verify an ecosystem stays correct across a prompt/model/tool change over time, see Evaluation.