Skip to main content

Configurations

Declarative Config Reference

This page describes the structure of policy-config.yaml: the top-level sections, the fields of pack and policies, and where to find the settings of each control. For your first file, start with the Policy Configuration Overview.

verdictan policy lint checks structure against the schema. The gateway and each control decide what happens at request time. A clean lint does not prove that credentials work or that a setting is enforced.

Syntax​

The schema accepts two document shapes.

Config document​

The shape for gateways, templates, and test suites. pack and policies are required.

policy-config.yaml
pack:
  name: demo-pack
  version: 1.0.0
  enabled: true
  description: Demo config

policies:
  chain:
    - audit-logger
    - pii-detector

policy:
  audit-logger: {}
  pii-detector:
    action: redact

Single-policy document​

A standalone document for prompt-injection, agent-firewall, citation-verifier, or quality-scorer, without a pack. See Single-Policy Documents. Use a config document for a gateway or a test suite.

Fields​

Top-level sections​

A config document has these 30 top-level keys. Lint rejects any other key.

SectionUseGuide
packName, version, enabled switch, and tags of the documentPack Metadata and Versions
policiesThe ordered policy chainThis page
policyOne settings block for each controlPolicy field reference
providersProvider targets, routing, fallback, model groups, and pipelinesProvider Configuration
regionOperating region of the gatewayCloud Provider Configuration
silent_enginePrivacy boundary that turns off optional telemetry and payload storagesilent_engine section
testingTest suites for verdictan policy testTest Configuration
assertion_packsNamed groups of quality assertionsQuality Assertion Configuration
routesPath rules that select policy chainsRoutes and Consumer Groups
consumer_groupsClient groups with their own limits and chainsRoutes and Consumer Groups
cacheExact or semantic response cacheRuntime Configuration
token_rate_limitSliding-window token limit for buffered Chat CompletionsRate Limit Configuration
global_rate_limitRequest limit for the whole gatewayRate Limit Configuration
ip_rate_limitRequest limit for each client IPRate Limit Configuration
user_rate_limitRequest limit for each user header valueRate Limit Configuration
distributed_rate_limitShared state for the global request limitRate Limit Configuration
size_limitsByte limits for body, headers, URL, and responseSecurity and Network Configuration
ip_allowlistAllowed source IP addressesSecurity and Network Configuration
corsCORS policy for gateway endpointsSecurity and Network Configuration
callbacksObservability sink definitions. The gateway parses them but does not send events to them.Observability Configuration
health_monitorBackground health probes of provider endpoints. The runtime reads only providers[].name and providers[].endpoint.Provider Control Features
autoVirtual auto provider with cost and latency scoringauto section
modelsBehavior of the /v1/models endpointRuntime Configuration
moderationExternal provider for /v1/moderationsRuntime Configuration
historyHistory capture settingsRuntime Configuration
reviewReview executor controls for agent executionExecution Targets and Runners
agentsAgent declarations for Context Fabric and MCP settingsagents section
context_fabricGateway-level Context Fabric defaultsContext Fabric Lifecycle
mcp_serverGateway-level MCP server defaultsGateway MCP Surface
tool_serversTool server declarations for governed MCP executionGateway MCP Surface

pack section​

FieldTypeDefaultDescription
namestring, 1 to 200 charactersName of the pack. Required.
versionSemVer stringVersion of the pack. Required.
enabledbooleanMaster switch. Required.
idstring, 1 to 200 charactersThe name valueIdentifier for API references
authorstring, up to 200 characters""Owner of the pack
descriptionstring, up to 2000 characters""What the pack enforces
tagsmap of string to stringTags for the declaratively managed configuration

When enabled is false, the gateway loads nothing from the document: no chain, routes, providers, callbacks, or tests. It records pack.excluded evidence.

policies section​

policies.chain is required and must have at least one entry. An entry is the name of a control, or an object whose only key is the name:

FieldTypeDefaultDescription
whenobjectAlways matchesConditions on path, header, and model. Every condition that you set must match.
when.pathstringPrefix of the request path
when.headermap of string to stringExact value of each named header. The value comparison ignores case.
when.modelarray of stringThe request model must be one of these values.
stagepre-request, post-request, or pre-responseDefault of the controlPhase in which the entry runs
parallelbooleanfalseRuns the entry in one batch with adjacent parallel entries
targetingobjectLimits the entry to teams or gateways

The schema and policy lint also accept stage: post-response, but the gateway rejects it when it loads the file. verdictan config validate and verdictan gateway check report the error:

Error: invalid chain entry: stage 'post-response' is no longer supported in chain entry 'pii-detector'. Use 'pre-response' for blocking/mutation controls and API-owned events for durable side effects.

How the chain runs:

  • Entries run in chain order within a stage.
  • A block or escalate verdict stops the later entries of that stage.
  • A control in chain without a policy.<kind> block runs with its defaults.
  • A policy.<kind> block without a chain entry passes lint but does not run.

Conditional Chain Configuration describes conditions, stages, and targeting.

policy section​

policy has one block for each control. The schema accepts the 39 controls in the policy field reference and rejects any other key.

providers section​

Declare targets in providers.targets, then add routing, model groups, retries, or pipelines as you need them. Provider Configuration shows which fields the runtime uses and which only parse.

A data_policy on a target records terms that you got from the provider. It does not verify them. To filter targets by this metadata, add data-routing-policy to the chain.

agents section​

agents declares agents for Context Fabric and MCP settings:

FieldTypeDescription
idstringAgent identifier. Required.
teamstringSlug of the owning team. Required.
context_fabricobjectContext Fabric overrides for this agent
mcpobjectMCP session settings for this agent
policy-config.yaml
pack:
  name: agent-declaration-example
  version: 1.0.0
  enabled: true
agents:
  - id: support-agent
    team: customer-success
policies:
  chain:
    - audit-logger
policy:
  audit-logger: {}

Lint rejects usage_constraints here. Agent usage constraints live in the control plane: use GET or POST /v1/agents/{id}/usage-constraints, and PUT or DELETE /v1/agents/{id}/usage-constraints/{constraint_id}.

auto section​

FieldTypeDefaultDescription
enabledbooleanfalse in the schema, true at runtimeTurns on the virtual provider. Set it explicitly.
namestring"auto"Model name that clients send to use automatic routing
descriptionstringText in /v1/models
routing.cost_weightnumber0.5 at runtimeWeight of price in the score
routing.latency_weightnumber0.5 at runtimeWeight of latency in the score
routing.max_price_per_1m_tokensnumberTargets above this price are not eligible.

If the price limit excludes every target, the request fails with no_eligible_provider. Automatic routing pins the request to one target and does not try another provider after a failure.

silent_engine section​

silent_engine stops optional telemetry and the storage of request and response payloads. Authentication, ABAC, expiry, request and budget counters, and rate limits stay active.

policy-config.yaml
silent_engine:
  enabled: true
  minimum_state_mode: standard
  disable_history: true
  disable_payload_logging: true
FieldTypeDescription
enabledbooleanTurns on the privacy mode. Required.
minimum_state_modestandard or enforcement_onlyKeeps the standard runtime state, or only the state that enforcement needs. Required.
disable_callbacksbooleanTurns off callback side effects
disable_historybooleanTurns off History storage of entries with payloads
disable_gateway_telemetrybooleanTurns off the periodic gateway telemetry reports
disable_payload_loggingbooleanTurns off logs and telemetry that contain payloads
disable_citation_writebackbooleanTurns off citation storage and other writeback from payloads

Examples​

Lint the config​

verdictan policy lint --file policy-config.yaml

A valid file exits with code 0. The command can also print information logs.

Start the gateway with a policy config​

Apply the file to a registered test agent with the config-first workflow. Use the gateway runtime token from the setup of that agent, and keep provider credentials in the gateway environment.

A name in a startup command does not create an agent. The quickstart gives you the agent and its connection command.

Verify the active config​

With admin permission, read the active configuration with verdictan gateway config, and compare its version and chain with your file. Then send a test request and find its decision in runtime events.

A loaded configuration proves that the gateway accepted the file. A test request proves that the rule ran.

Policy field reference​

Each control has its own page with its fields, a copyable example, the expected results, and its limits.

Access, tools, and routing​

BlockWhat it configures
agent-firewallTool access by authenticated role, and action and transaction limits
rbacRequired verified identity and role permissions. A header from the caller does not prove a role.
cjis-modeRequired verified identity, accepted proof, and MFA assurance
audit-loggerAn allow-only audit marker. The block is empty: audit-logger: {}.
data-routing-policyTarget filtering by declared retention and data-use metadata
tool-validationChecks of tool declarations and optional schemas in the request
tool-securityChecks of tool JSON by local matching or an external analysis provider
tool-budgetDeclared request budgets. It does not meter spend or completed tool runs.
gdpr-complianceA required, non-empty consent header. Your application validates the consent itself.

Privacy, safety, and content​

BlockWhat it configures
prompt-injectionPrompt-injection patterns, decoding, and boundary checks
pii-detectorPersonal-data patterns and redaction format
hipaa-phi-detectorHealth-identifier matching
dlp-filterData-loss patterns and terms
document-analyzerChecks of document content in the request
code-sanitizerCode patterns to detect
content-extractorURL recording and optional text fetch. Later controls do not examine the fetched text.
bot-detectorClient indicators. A header match does not prove a human.
dual-use-filterDual-use terms and the action for a match
embedding-detectorSensitive reference categories. The default backend uses word overlap, not an embedding API.
entity-list-filterEntity names that you maintain
external-moderationA moderation provider and its failure behavior
itar-ear-filterExport-control terms
safety-filterSafety terms. A list that you supply replaces the default list.
student-privacyStudent identifiers and optional supplied age metadata
case-privacyCase-number patterns
language-validatorAllowed input languages. Low-confidence text can pass.

Output and domain compliance​

BlockWhat it configures
citation-verifierCitation checks against supplied source context
quality-scorerOutput assertions, scores, and thresholds
human-oversightEscalation of each response. The only action is escalate.
flagged-reviewReview of each response by a different provider, or escalation
bias-monitorThe built-in HR bias pattern and its threshold
mnpi-filterMNPI phrases to block in buffered output
financial-complianceFinancial phrases and disclaimers for buffered output
healthcare-complianceHealth phrases and disclaimers for buffered output
legal-privilegePrivilege markers to block in buffered output
upl-filterLegal-service phrases to block, or an educational disclaimer
request-rewriterRequest text rules and system message changes
response-rewriterText rules for buffered output

Reporting only​

BlockWhat it configures
eu-ai-actA report of control coverage. Keep it out of policies.chain, where it blocks every request with policy.reporting_only.

Limits and failure behavior​

  • Lint rejects an unknown top-level key, an unknown control in chain or policy, and an unknown key in a policy.<kind> block.
  • Lint rejects a config document without pack or policies, and an empty policies.chain.
  • Lint rejects a single-policy document for any control other than the four supported ones.
  • A YAML syntax error stops the run before schema validation.
  • Lint does not catch every load error. Run verdictan config validate or verdictan gateway check too.
  • Tags of a declarative resource come from pack.tags. Change them in the configuration, not in the Console.

Next steps​