Persona-Conditioned Attacks: in-character is the attack quality
June 23, 2026 · View on GitHub
Twin:
examples/sdk_persona_scenario_studio.py· emitsagent-learning.redteam.v1andagent-learning.persona-library.v1· offline, no credentials. A coding agent can complete this page from the frontmatter alone.
1. What you are testing
An adversarial turn is only a realistic attack if the simulated attacker stayed
in character while pressing. Persona-conditioned red-teaming binds a typed
attack persona — its attack.strategies and attack.surfaces drawn from the
gate-enforced 10×6 taxonomy — to an adversarial scenario carrying a turn-wise
escalation arc (the Crescendo finding). The arc's per-turn pressure feeds the
policy directives so the attacker escalates in character, and feeds the fidelity
trajectory so you can measure whether character held under counter-pressure.
The wedge no vendor measures: in-character fidelity becomes the attack quality.
Each attack row reuses the unit-3 fidelity record verbatim, gets a
character_held flag (the verdict held across the arc) and a
quality = asr_weight × adherence. A character-broken attack is flagged and
down-weighted — never dropped: a successful but out-of-character attack is still
a finding, just a less realistic one.
2. Run it
python examples/sdk_persona_scenario_studio.py artifacts/persona-conditioned-attacks.json
The example builds a persona-conditioned red-team manifest from a typed
attack-conditioned persona and an adversarial scenario whose escalation arc sets
min_turns = max_turns = len(arc.steps), so the Crescendo arc has turns to
escalate across. The embedded typed persona replaces the default red-team-owner
persona in the scenario rows.
3. What you built
A red-team manifest (agent-learning.redteam.v1) conditioned on a library
persona (agent-learning.persona-library.v1). PCAP-style parallel
multi-persona search is simply N manifests from N personas — the existing
campaign machinery runs them; no new runner. The executable persona-conditioned
campaign (with per-attack in-character fidelity) is exercised by the red-team
readiness certification gate.
4. When it fails
agent-learn doctor reports missing_engine_modules when the engine is not
importable and api_key_configured for the keyed lane. A persona whose
attack.strategies or attack.surfaces$ \text{fall} \text{outside} \text{the} 10 \times 6 \text{taxonomy} \text{are} \text{refused} \text{by} $validate_persona; an adversarial scenario without its attack_type,
attack_surface, and escalation arc is refused at construction.
5. Prove it / keep it
The redteam_readiness_certification gate executes the persona-conditioned
campaign and asserts per-attack fidelity records (verdicts in the persona
fidelity vocabulary) with at least one in-character attack, and the
persona_scenario_studio_readiness gate executes the manifest build on every
release-check. Bias monitoring runs on attack-conditioned persona sets
identically — the Dark-Triad amplification finding is covered by the same lint.