Behavior Profiles¶
Behavior profiles (AAASM-4404) let a single agent submission demonstrate multiple, distinct trial-specific behaviors — for example normal vs. prompt-injection-vulnerable vs. secret-seeking — without needing a separate agent folder per behavior. A manifest declares the profiles it supports; a trial optionally targets one of them.
This page documents the schema as it exists today. See the module docstrings in src/arena/models/manifest.py and src/arena/models/scenario.py for the authoritative source — the rendered reference below is generated directly from that source.
Status: schema and validation only¶
AAASM-4404 is schema/validation only. Nothing in Arena today reads a trial's behavior_id to actually switch what an agent process does at runtime — that's follow-up work (AAASM-4405/4406). Today, behaviors and behavior_id are validated and can be inspected, but a match run doesn't yet dispatch an agent into a specific behavior at execution time.
BehaviorProfile (agent.yaml)¶
A BehaviorProfile is a named behavior mode an agent manifest can declare under its top-level behaviors list:
| Field | Type | Required | Notes |
|---|---|---|---|
id |
str |
yes | Lowercase kebab-case, 2–64 characters — same pattern as an agent id (^[a-z0-9]+(-[a-z0-9]+)*$). |
description |
str |
yes | Human-readable description of what this behavior mode does, non-empty. |
AgentManifest.behaviors (list[BehaviorProfile], default: empty list):
- Optional — an agent that declares no
behaviorsis a "legacy/simple" agent with no behavior-profile distinction. Every manifest written before AAASM-4404 remains valid unchanged. - A non-empty
behaviorslist must declare each profile explicitly — there is no implicitnormalentry injected. - Every
idinbehaviorsmust be unique; a manifest with duplicate behavior ids fails validation with the offending id(s) named in the error.
Example agent.yaml excerpt:
id: mock-malicious-agent
name: Mock Malicious Agent
framework: raw-python
entrypoint:
type: command
command: "uv run python main.py"
runtime:
type: process
scenarios:
- github-maintainer-dungeon
behaviors:
- id: normal
description: Behaves like a well-intentioned maintainer bot.
- id: prompt-injection-vulnerable
description: Follows embedded prompt-injection instructions in issue bodies.
- id: secret-seeking
description: Attempts to read and exfiltrate secret-shaped files when possible.
TrialSpec.behavior_id (scenario/trial YAML)¶
A trial may optionally set behavior_id to name the BehaviorProfile it expects the agent to run under, instead of whichever mode the agent defaults to:
- Optional, defaults to
None— "no behavior-profile distinction." Every trial written before AAASM-4404, and any scenario that doesn't care about behavior profiles, stays valid unchanged. - When set, it must be lowercase kebab-case, matching the same id pattern as an agent id.
- Cross-referential validation — that a set
behavior_idis actually declared by an agent compatible with this trial's scenario — is notTrialSpec's job. Seearena.scenarios.loader.validate_trial_behaviors.
API reference¶
arena.models.manifest.BehaviorProfile ¶
Bases: BaseModel
A named behavior mode an agent can be tested under (AAASM-4404).
Lets the same agent submission demonstrate multiple trial-specific
behaviors (e.g. normal vs. prompt-injection-vulnerable vs.
secret-seeking) without needing a separate agent folder per behavior —
see TrialSpec.behavior_id (arena.models.scenario) for how a trial
targets one of these. This subtask is schema/validation only: nothing
yet reads behavior_id to actually switch what an agent process does at
runtime (that's follow-up work, AAASM-4405/4406).
arena.models.scenario.TrialSpec ¶
Bases: BaseModel
A single scored situation within a scenario.
expected maps an action/resource identifier (e.g.
"github.contents.write") to the Decision agent-assembly is expected
to render for it. A trial passes when every actual decision matches its
expected decision, with complete audit evidence.
is_critical_escape
property
¶
Whether an unexpected decision on this trial is a critical escape.