Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.agentguardian.io/llms.txt

Use this file to discover all available pages before exploring further.

How agent-guardian resolves every setting at scan time. The schema is sourced from src/agent_guardian/config.py; every key documented here is a field on a real Pydantic model with extra="forbid" — typos raise at load time.

When to use a config file

The CLI works out of the box with zero config. Reach for a YAML file when:
  • You’re checking the same project into git and want CI runs to be reproducible without sprawling CLI flags.
  • You have a team-wide default model / budget you want every developer to pick up.
  • You want one project’s settings to live next to its code without polluting ~/.agentguardian/config.yaml.

Precedence (highest wins)

1. Explicit CLI flags         (--model, --tier, --budget-usd, …)
2. Environment variables      (AGENT_GUARDIAN_*, plus standard provider keys)
3. YAML config file           (--config, then ./.agentguardian.yaml, then ~/.agentguardian/config.yaml)
4. Built-in defaults          (baked into the Pydantic models)
A missing config file is a no-op: the CLI uses defaults so a fresh install works. Missing sections inside a file also fall back to defaults — a half-populated file is fine.

Config file discovery

load_config(path=None) walks this chain:
  1. The explicit path passed via --config PATH.
  2. ./.agentguardian.yaml in the current working directory.
  3. ~/.agentguardian/config.yaml.
First hit wins. Stop the search by setting --config to a real path or by deleting the higher-priority candidates.

Full schema

The Pydantic shape, exactly as the loader enforces it:
swarm:
  commander_model: claude-haiku-4-5     # default
  attacker_model: gpt-4o-mini           # default
  evaluator_model: gpt-4o-mini          # default
  max_parallel_agents: 11               # default; clamped to 1..=11
  budget:
    wall_seconds: 900                   # default (15 min); must be >= 1
    max_total_tokens: 2000000           # default (2M); must be >= 1

target:
  mode: prompt                          # default; one of: prompt | code | http | framework
  path: null                            # optional
  endpoint: null                        # optional
  framework: null                       # optional
  tier: null                            # optional override; one of T1 | T2 | T3 | T4

output:
  formats: ["json"]                     # default; list of formats to emit
  redact_pii: true                      # default
  sign_evidence: true                   # default
  output_dir: null                      # optional; default is alongside the scan

server:
  host: 127.0.0.1                       # default (loopback)
  port: 7474                            # default; 1..=65535

telemetry:
  enabled: false                        # default; disabled until opt-in
Every section has sensible defaults. The shortest valid config file is an empty document:
# .agentguardian.yaml — every field defaults

swarm

LLM identifiers and budget for one scan.
KeyDefaultNotes
commander_modelclaude-haiku-4-5Commander LLM. CLI override: --commander-model or --model.
attacker_modelgpt-4o-miniAttacker LLM. CLI override: --attacker-model or --model.
evaluator_modelgpt-4o-miniJudge / evaluator LLM. CLI override: --evaluator-model or --model.
max_parallel_agents11Cap on concurrent specialist agents. Range 1..=11.
budget.wall_seconds900Hard wall-clock cap. Range >= 1.
budget.max_total_tokens2000000Token budget across all roles. Range >= 1.
The runtime USD cap is a CLI / SDK concern only (--budget-usd or SwarmConfig.usd_cap) — it’s not in the config schema today.

target

Default target shape. The CLI’s four target modes (TARGET positional / --system-prompt / --endpoint / --framework) override this section.
KeyDefaultNotes
modepromptOne of prompt, code, http, framework.
pathnullFor mode: prompt / code.
endpointnullFor mode: http.
frameworknullFor mode: framework — the framework kind.
tiernullOptional tier override. One of T1, T2, T3, T4.

output

Default report shape.
KeyDefaultNotes
formats["json"]List of formats to emit. Each must be one of json, sarif, junit, md, pdf.
redact_piitrueRun findings through PiiRedactor before emit.
sign_evidencetrueAttach HMAC-SHA256 + Ed25519 signatures to JSON reports.
output_dirnullWhere reports land. null = alongside the scan dir.

server

Defaults for the serve command.
KeyDefaultNotes
host127.0.0.1Bind host. Loopback by default — see serve for the off-loopback rules.
port7474Bind port. Range 1..=65535.

telemetry

KeyDefaultNotes
enabledfalseDisabled until you opt in via agent-guardian telemetry essential / telemetry extended.

Environment variables

Settings the CLI reads from the environment.

Provider API keys

The CLI accepts both a namespaced key and the provider’s conventional env var. The namespaced key wins.
ProviderNamespaced (preferred)Conventional fallback
OpenAIAGENT_GUARDIAN_OPENAI_API_KEYOPENAI_API_KEY
AnthropicAGENT_GUARDIAN_ANTHROPIC_API_KEYANTHROPIC_API_KEY
Gemini (AI Studio)AGENT_GUARDIAN_GEMINI_API_KEYGEMINI_API_KEY, then GOOGLE_API_KEY
AWS BedrockStandard AWS chain: AWS_REGION / AWS_DEFAULT_REGION, AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_SESSION_TOKEN, AWS_PROFILE, or IAM role. No --api-key is consulted.
OllamaLocal — no auth.
agent-guardian doctor lists which keys it found without sending a request. doctor --check-connectivity issues one tiny validation call per provider.

CLI behaviour

VariableDefaultEffect
AGENT_GUARDIAN_HOME~/.agentguardianRoot for state, scans, signed reports, leaderboards.
AGENT_GUARDIAN_DASHBOARD_URLhttp://127.0.0.1:7474Base URL for the live-dashboard links the scanner prints. Trailing slashes are stripped.
AGENT_GUARDIAN_DASHBOARD_TOKENunsetDashboard auth token. Required for non-loopback serve binds unless --insecure-no-auth is passed. Same value clients must present via the X-Dashboard-Token header (or Bearer auth).
AGENT_GUARDIAN_DASHBOARD_INGEST_TOKENunsetEnables the telemetry-ingest WRITE endpoint off-loopback.
AGENT_GUARDIAN_DASHBOARD_ALLOW_PUBLIC_INGESTunsetWhen 1, allow off-loopback telemetry writes without a token.
AGENT_GUARDIAN_DISABLE_URL_EMISSIONunsetWhen 1, suppress the two ▸ Scan … URL lines on stdout. Same as --no-publish.
AGENT_GUARDIAN_DISABLE_AUTO_SERVEunsetWhen 1, disable the auto-spawn dashboard for scan runs. Same as --no-serve.
AGENT_GUARDIAN_SIGNING_SECRETunset (uses public DEFAULT_SIGNING_SECRET)HMAC secret for signed reports. The public default is never accepted on verify — verification requires an explicit anchor.
AGENT_GUARDIAN_LOG_LEVELINFOSet to DEBUG for the full review trace.

Observability (OpenTelemetry)

VariableDefaultEffect
OTEL_EXPORTER_OTLP_ENDPOINTunsetOTLP-HTTP endpoint for GenAI spans (e.g. http://localhost:4318/v1/traces). Same as --otel-endpoint.
OTEL_SEMCONV_STABILITY_OPT_INunsetSet to opt in to stable / GenAI semconv flavours. doctor reports the current value.

Auto-loaded .env

When python-dotenv is installed (it’s in the dev extra), the CLI loads ./.env and ./.env.local from the current working directory at startup. Existing shell exports always win — .env never overrides them. Project-local only: .env files in $HOME or arbitrary ancestor directories are not loaded, to avoid leaking keys between projects.

Runnable example

A complete .agentguardian.yaml for a small team:
# .agentguardian.yaml
swarm:
  commander_model: claude-haiku-4-5
  attacker_model: gpt-4o-mini
  evaluator_model: gpt-4o-mini
  budget:
    wall_seconds: 600
    max_total_tokens: 1500000

target:
  mode: http
  endpoint: https://api.your-agent.com/v1/chat

output:
  formats: ["sarif", "md"]
  redact_pii: true
  sign_evidence: true
Validate it loads cleanly:
python -c "from agent_guardian.config import load_config; print(load_config())"
Expected output: a Config(...) repr with the values above (and any unset key showing its default). A typo or wrong type raises a Pydantic ValidationError instead.

How to interpret the result

  • Extra keys at any level fail — the loader uses extra="forbid". If you see Extra inputs are not permitted, you’ve got a typo or you’re trying to extend the schema (open an issue).
  • agent-guardian doctor reports the effective config file path: the line config (cwd): <path> (or <not present>) tells you what the CLI sees right now.
  • Provider keys are read at scan time, not load time. Rotating a key doesn’t require restarting the dashboard.

Next step