.drako.yaml file in your project root. Generate an initial config from your scan results with drako init.
Generating the config
Run a scan
Drako uses your scan results to pre-populate the config with your real agents, tools, and recommended policies.
Run drako init
Choose a governance level. All levels start from the same autopilot base —
--balanced and --strict apply progressively stricter overrides.Top-level fields
Config schema version. Use
"1.0".Controls the upgrade path when running
drako upgrade.| Value | Behavior |
|---|---|
autopilot | Audit mode. Logs all violations, blocks nothing. Upgrade path: → balanced → strict |
balanced | DLP enforce, ODD enforce, HITL rejects on timeout |
strict | + intent verification, cryptographic audit, magnitude enforce |
custom | No managed upgrade path. You control every field. |
Inherit all policy settings from a named template, then override only what you need. Available values:
base · startup · fintech · healthcare · eu-ai-act · enterprise.Your Drako tenant identifier. Required for runtime enforcement. Automatically populated by
drako init.The name of the environment variable Drako reads for the API key. For CI/CD, set this as a secret and omit the
api_key field from the YAML entirely.Priority order:- Environment variable named by
api_key_env api_keyfield stored directly in.drako.yaml
The Drako API endpoint. Override for self-hosted deployments.
The agent framework in use. Drako auto-detects this during
drako init. Accepted values: crewai · langgraph · autogen · generic.agents
Declares the agents in your project. Populated automatically by drako init from scan results.
| Field | Type | Description |
|---|---|---|
source | string | Path to the agent’s source file |
description | string | Human-readable description (optional) |
tools
Declares tools and their access types. Used for ODD enforcement and scan reporting.
| Type | Risk level | Description |
|---|---|---|
read | Low | Read-only operations |
write | Medium | Creates or modifies data |
execute | High | Runs code or shell commands |
network | Medium | Makes external HTTP calls |
payment | Critical | Initiates financial transactions |
policies
odd — Operator-Defined Domains
odd — Operator-Defined Domains
Restrict which tools each agent can use.
| Field | Type | Default | Description |
|---|---|---|---|
enforcement_mode | string | audit | audit logs violations; enforce blocks them |
default_policy | string | allow | What to do when no agent rule matches |
agents.<name>.permitted_tools | list[string] | [] | Allowlist — any tool not listed is blocked |
agents.<name>.forbidden_tools | list[string] | [] | Blocklist — listed tools are always blocked |
When both
permitted_tools and forbidden_tools are set for an agent, forbidden_tools takes precedence.dlp — Data Loss Prevention
dlp — Data Loss Prevention
Scan tool inputs and outputs for PII/PCI data. Detected entity types (Presidio-based): SSN, credit card numbers, email addresses, phone numbers, passport numbers, and more.
| Field | Type | Default | Description |
|---|---|---|---|
mode | string | audit | audit logs PII; enforce blocks the call |
sensitivity | string | medium | DLP sensitivity level — higher values reduce false negatives but increase false positives |
circuit_breaker — Per-Agent Fault Isolation
circuit_breaker — Per-Agent Fault Isolation
Prevents one failing agent from cascading failures to the rest of the system.
| Field | Type | Default | Description |
|---|---|---|---|
failure_threshold | int | 10 | Number of failures before opening the circuit |
time_window_seconds | int | 300 | Sliding window for failure counting |
recovery_timeout_seconds | int | 60 | Cooldown before allowing trial requests |
hitl — Human-in-the-Loop
hitl — Human-in-the-Loop
Pause agent execution and require human approval before proceeding. Implements EU AI Act Article 14.
| Field | Type | Default | Description |
|---|---|---|---|
mode | string | off | enforce pauses execution; audit logs without pausing |
triggers.tool_types | list[string] | [] | Trigger HITL for any tool of these types |
triggers.tools | list[string] | [] | Trigger HITL for specific named tools |
triggers.trust_score_below | float|null | null | Trigger when agent trust score drops below this value |
triggers.spend_above_usd | float|null | null | Trigger when session spend exceeds this amount |
triggers.records_above | int|null | null | Trigger when a tool accesses more than N records |
triggers.first_time_tool | bool | false | Trigger on first-ever use of any tool |
triggers.first_time_action | bool | false | Trigger on first action in a new session |
approval_timeout_minutes | int | 30 | How long to wait for human response |
timeout_action | string | reject | What to do if no response arrives: reject (safe) or allow (permissive) |
magnitude — Spend and Action Limits
magnitude — Spend and Action Limits
Cap how much an agent can spend or how many records it can access in a single action or session.
| Field | Type | Default | Description |
|---|---|---|---|
max_spend_per_action_usd | float | — | Max cost of a single tool call |
max_spend_per_session_usd | float | — | Max cumulative session spend |
max_records_per_action | int | — | Max records returned by a single tool call |
enforcement_mode | string | audit | enforce blocks calls that exceed limits |
audit — Audit Trail
audit — Audit Trail
Configure the tamper-evident audit log.
| Field | Type | Default | Description |
|---|---|---|---|
enabled | bool | true | Enable audit logging |
cryptographic | bool | false | Enable SHA-256 hash chain + Ed25519 digital signatures |
retention_days | int | 7 | How long to retain audit records |
intent_verification — Anti-Replay Protection
intent_verification — Anti-Replay Protection
Require a signed intent token before allowing high-risk tool calls. Prevents prompt injection from hijacking approved actions.
| Field | Type | Default | Description |
|---|---|---|---|
mode | string | off | enforce blocks calls without a valid intent token |
required_for.tool_types | list[string] | [payment, write, execute] | Tool types that require intent tokens |
required_for.tools | list[string] | [] | Specific named tools that require intent tokens |
anti_replay | bool | true | Reject reused intent tokens |
intent_ttl_seconds | int | 300 | Token validity window in seconds |
hooks — Programmable Hooks
hooks — Programmable Hooks
Run custom scripts at governance checkpoints.Hook entry fields:
Hook types:
| Field | Type | Default | Description |
|---|---|---|---|
name | string | — | Hook identifier |
condition | string|null | null | Expression that must be true to trigger the hook |
script | string|null | null | Path to the hook script |
timeout_ms | int | 5000 | Max execution time before the hook is skipped |
action_on_fail | string | allow | block or allow when the hook fails or times out |
priority | int | 0 | Execution order when multiple hooks match (lower runs first) |
pre_action · post_action · on_error · on_session_endfinops — Agentic Cost Management
finops — Agentic Cost Management
Track, route, cache, and budget LLM spending.
tracking fields:| Field | Type | Default | Description |
|---|---|---|---|
enabled | bool | true | Enable cost tracking |
model_costs | dict | {} | Per-model input/output costs (USD per 1K tokens) |
routing fields:| Field | Type | Default | Description |
|---|---|---|---|
enabled | bool | false | Enable model routing based on rules |
default_model | string | gpt-4o | Model used when no routing rule matches |
rules | list | [] | Routing rules: condition, model, reason |
cache fields:| Field | Type | Default | Description |
|---|---|---|---|
enabled | bool | false | Enable semantic response caching |
similarity_threshold | float | 0.92 | Cosine similarity threshold for cache hits |
ttl_hours | int | 24 | Cache entry expiry |
budgets fields:| Field | Type | Default | Description |
|---|---|---|---|
daily_usd | float|null | null | Daily spend budget |
weekly_usd | float|null | null | Weekly spend budget |
monthly_usd | float|null | null | Monthly spend budget |
alert_at_percent | list[int] | [50, 80, 95] | Trigger alerts at these budget consumption percentages |
a2a — Secure Agent-to-Agent Communication
a2a — Secure Agent-to-Agent Communication
Authenticate and authorize inter-agent message passing. Enterprise feature.
auth fields:| Field | Type | Default | Description |
|---|---|---|---|
method | string | did_exchange | Authentication method: did_exchange, mtls, or shared_secret |
auto_rotate | bool | true | Automatically rotate credentials |
rotation_hours | int | 24 | Credential rotation interval |
channels entry fields:| Field | Type | Default | Description |
|---|---|---|---|
from | string | * | Source agent name, or "*" for any |
to | string | * | Destination agent name, or "*" for any |
allowed_message_types | list[string] | [] | Permitted message types |
max_payload_size_kb | int | 500 | Maximum message payload size |
require_intent_verification | bool | false | Require intent tokens for this channel |
policy | string|null | null | Set to deny for an explicit block rule |
worm_detection fields:| Field | Type | Default | Description |
|---|---|---|---|
enabled | bool | true | Enable worm/cascade detection |
scan_inter_agent_messages | bool | true | Scan messages for injection payloads |
max_propagation_depth | int | 3 | Maximum message chain depth before blocking |
circular_reference_block | bool | true | Block circular agent call chains |
topology — Multi-Agent Topology Monitoring
topology — Multi-Agent Topology Monitoring
Detect dangerous interaction patterns between agents. Enterprise feature.
conflict_detection fields:| Field | Type | Default | Description |
|---|---|---|---|
resource_contention | bool | true | Detect multiple agents competing for the same resource |
contradictory_actions | bool | true | Detect agents taking conflicting actions |
cascade_amplification | bool | true | Detect amplifying cascade patterns |
resource_exhaustion | bool | true | Detect agents consuming resources to exhaustion |
alert_on accepts a list of pattern names: circular_dependency · resource_contention · cascade_amplification · resource_exhaustion.fallback — Deterministic Fallback
fallback — Deterministic Fallback
Define what to do when a tool fails or a circuit breaker opens.Per-tool fallback fields:
| Field | Type | Default | Description |
|---|---|---|---|
fallback_agent | string|null | null | Delegate to this agent on failure |
fallback_action | string | escalate_human | Action to take: escalate_human, or a custom script |
triggers | list[string] | [circuit_breaker_open] | Conditions that activate this fallback |
default fallback fields:| Field | Type | Default | Description |
|---|---|---|---|
fallback_action | string | escalate_human | Default action when no tool-specific rule matches |
preserve_state | bool | true | Save session state so it can be resumed |
state_ttl_hours | int | 24 | How long to retain preserved state |
chaos — Chaos Engineering
chaos — Chaos Engineering
Inject controlled failures to test fallback and recovery behavior. Enterprise feature.
safety fields:| Field | Type | Default | Description |
|---|---|---|---|
max_blast_radius | int | 1 | Maximum number of simultaneous experiments |
auto_rollback_on_failure | bool | true | Automatically stop experiments that cause real failures |
require_approval | bool | true | Require human approval before starting an experiment |
experiments entry fields:| Field | Type | Description |
|---|---|---|
name | string | Experiment identifier |
description | string | Human-readable description |
target_tool | string|null | Tool to target |
target_agent | string|null | Agent to target |
fault_type | string | latency, tool_deny, or other fault types |
latency_ms | int|null | Injected latency in milliseconds (for latency fault type) |
duration_seconds | int | How long the experiment runs |