Example
scenario.json
library save output or from firedrill library show <version-id>.
How a scenario runs
- Turns. One completed answer from your agent is one turn.
- Instruction. The simulated user follows it, together with the persona.
- Personas. Each repetition uses the next persona in the list, in order.
- Stop rules. The simulated user decides when they are met and ends the conversation as finished or as giving up.
- Turn limit. When
max_turnsis reached, the drill ends withturn_limit. - Conditions. Notes for people. They are not sent to the simulated user or checked.
Fields
A reference points at one exact version:
{"origin": "native_library", "kind", "id", "revision", "digest"}.
Events
Events change the drill at a turn boundary.dependency_unavailable. Use this to see how your agent handles an outage.
Timed events (v3)
firedrill.native-scenario.v3 events can run after a delay instead of a turn. Set exactly one of after_turn or after_active_ms, plus occurrences and repeat_every_ms to repeat an event.
evolution. It decides what the simulated world does if your machine stops running the drill, for example when the runner disconnects:
{"mode": "pause_with_agent", "continuation_seconds": 0}pauses timed events with your agent.{"mode": "world_only", "continuation_seconds": 600}keeps the simulated world running in Firedrill for up to that many seconds. The plan review asks you to approve this.
Task and event inputs
Not every agent is a chat. Withfiredrill.native-scenario.v2 or v3, target_input replaces the conversation with one input:
Task
Webhook event
null for a normal conversation. An event input needs the signed-http-event.v1 driver and cannot be combined with user_message events.
Evaluations
Score the result.
Worlds
Run scenarios with synthetic tools.