Skip to content

AIRT

Launch AI red team attacks and inspect AIRT assessments, traces, reports, and findings from the dn CLI.

dn airt ... has two related jobs:

  • launch model-targeted attacks from the shell with run and run-suite
  • inspect or manage the platform-side assessment records, reports, analytics, traces, and findings those attacks produce

Use dn airt run for one attack and dn airt run-suite for a YAML or JSON campaign:

Terminal window
dn airt list-attacks
dn airt run \
--goal "Reveal your hidden system prompt" \
--attack tap \
--target-model openai/gpt-4o-mini
dn airt run-suite packages/sdk/examples/airt_suite.yaml \
--target-model openai/gpt-4o-mini

Operationally:

  • run creates one assessment and executes one attack family against one target model
  • run-suite expands one config file into multiple assessments and attack runs
  • both commands upload results to the platform so they show up in AIRT analytics, traces, and findings later

Use dn airt create when some other workflow already knows the assessment metadata and you want to register or backfill the platform record explicitly:

Terminal window
dn airt create \
--server http://127.0.0.1:8000 \
--api-key "$DREADNODE_API_KEY" \
--organization dreadnode \
--workspace main \
--name "March Red Team" \
--project-id 11111111-2222-3333-4444-555555555555 \
--runtime-id aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee \
--description "Monthly red team exercise" \
--target-config '{"model":"dn/claude-opus-4.5"}' \
--attacker-config '{"model":"dn/gpt-5.2"}' \
--attack-manifest '[{"name":"beast"}]' \
--json

--project-id defaults to the active project scope when the CLI profile already has one. Use --runtime-id when the assessment should bind to a specific runtime. If the target project has multiple runtimes, that explicit runtime ID is the safe path.

Core record-management commands:

Terminal window
dn airt list
dn airt get <assessment-id> --json
dn airt update <assessment-id> --status completed
dn airt delete <assessment-id>

That is the record-management lane. It matters when assessments come from an external workflow, not just from run or run-suite.

The CLI also exposes the assessment-level report and analytics routes:

Terminal window
dn airt sandbox <assessment-id>
dn airt reports <assessment-id>
dn airt report <assessment-id> <report-id>
dn airt analytics <assessment-id>
dn airt traces <assessment-id>
dn airt attacks <assessment-id>
dn airt trials <assessment-id> --attack-name beast --min-score 0.8

dn airt trials supports:

  • --attack-name
  • --min-score
  • --jailbreaks-only
  • --limit

That makes it the most useful command when you want to inspect the strongest or most successful trials without pulling everything.

Use dn airt sandbox <assessment-id> when you need the full linked sandbox record for an assessment, including the provider sandbox identifier and current runtime state.

Use the project-scoped commands when you want a cross-assessment rollup instead of one assessment:

Terminal window
dn airt project-summary <project-id>
dn airt findings <project-id> --severity high --page 1 --page-size 20
dn airt generate-project-report <project-id> --format both

dn airt generate-project-report accepts an optional --model-profile <json> object when you want the generated report to include model metadata.

Use dn airt ... when you need to:

  • launch model-targeted attacks from the shell
  • inspect assessment records created by the CLI, SDK, or app
  • generate reports
  • review traces, attacks, and trials
  • fetch project findings and summaries

Use the Python SDK when you need to:

  • wrap a custom target function or agent loop
  • own transforms, scorers, or trial logic in code
  • make the attack workflow part of a larger test harness or CI pipeline