Authorize and select scope
If you have already runfiredrill init with the optional CLI, reuse its public configuration and protected login. Interactive initialization offers sign-in if needed:
FIREDRILL_TOKEN from your secret store and select the actual FIREDRILL_PROJECT_ID / FIREDRILL_ENVIRONMENT_ID pair. Then use Firedrill(), or pass project_id and environment_id explicitly. Do not put tokens in source or recipes.
Human sign-in without the CLI
Run this deliberately in a human’s interactive terminal, not CI or captured coding-agent output:account.create_project("My application", idempotency_key="my-application-project") atomically returns it and its Default environment. Save and reuse that key/name after uncertain delivery.
Simulate your application
This example assumes your application exposesrun_agent in app.agent. Adapt the import and callback to the real application. Save as simulate.py:
client = Firedrill(). The example invokes the callback four times and requests no grading. Replace the scenario input with tasks your actual application understands.
Callbacks return JSON-compatible output. Context includes detached task input/configuration, ID-only scenario context, run/attempt IDs, cancellation/deadline helpers, run-scoped Tools, observations, metrics, and attachments. Observations remain runner-attributed evidence. Native execution is not a sandbox; timeouts do not guarantee arbitrary application work stopped.
Async applications
UseAsyncFiredrill in your existing event loop:
simulate(recipe, target=None, *, operation_id=None, allow_parallel=False, submission_origin=None, ci_context=None, on_progress=None) accepts a recipe dictionary or selected JSON file.
Retained reads and recovery
Async callers await these methods. Preserve
result.operation_id and the private journal after a partial result. result.to_dict() uses canonical wire names such as operationId and reportUrl. A retained read does not create an execution operation ID.
CI and assessment
Usesubmission_origin="ci" on a fresh simulation or set FIREDRILL_SUBMISSION_ORIGIN=ci. The CI generator can execute your Python script directly.
For the saved-recipe version of the synchronous script above, keep the actual application target and replace its simulation/output section with:
gate. Valid wording can earn partial or full semantic credit without exact matching. Fractional provider scores remain distinct from rubric levels. Missing assessment is not zero; evaluation errors are not agent failures.
Keep application/model credentials separate from Firedrill authorization. See errors and recovery for safe reconciliation.