Policies
File: config/agents/policies.yaml · Schema: schemas/policies.schema.json
Platform-wide policy: allowed model licenses, retention, PII handling and rate limits.
Fields
| Field | Type | Description |
|---|---|---|
audit | AuditPolicy | The audit log. Default: {"hash_chain":true}. |
pii | Pii | Handling of personal data. Default: {"hash_fields":[],"redact_in_traces":[]}. |
rate_limits | RateLimits | Request rate limits. Declared only: the rate-limit layer is not built yet. Default: {"per_tenant":{"runs_per_minute":0,"uploads_per_minute":0},"per_user":{"runs_per_minute":0}}. |
retention | Retention | How long data is kept. Default: {"audit_log_days":2555,"parsed_markdown_days":90}. |
Unknown fields are refused at boot.
Types
Types referred to by the fields above, from the same schema.
AuditPolicy
| Field | Type | Description |
|---|---|---|
hash_chain | boolean | Required. Whether entries are hash-chained. Declared only: the chain is always kept. |
Unknown fields are refused at boot.
PerTenantLimits
| Field | Type | Description |
|---|---|---|
runs_per_minute | integer (uint32) | Runs started per minute. Default: 0. |
uploads_per_minute | integer (uint32) | Documents uploaded per minute. Default: 0. |
Unknown fields are refused at boot.
PerUserLimits
| Field | Type | Description |
|---|---|---|
runs_per_minute | integer (uint32) | Runs started per minute. Default: 0. |
Unknown fields are refused at boot.
Pii
| Field | Type | Description |
|---|---|---|
hash_fields | list of string | Context paths (e.g. invoice.vendor_iban) replaced by their SHA-256 as soon as llm.extract produces them. Default: []. |
redact_in_traces | list of string | Paths to redact from traces. Declared only: trace redaction is not built yet. Default: []. |
Unknown fields are refused at boot.
RateLimits
| Field | Type | Description |
|---|---|---|
per_tenant | PerTenantLimits | Limits shared by everyone in a tenant. Default: {"runs_per_minute":0,"uploads_per_minute":0}. |
per_user | PerUserLimits | Limits for each user. Default: {"runs_per_minute":0}. |
Unknown fields are refused at boot.
Retention
| Field | Type | Description |
|---|---|---|
audit_log_days | integer (uint32) | Required. How long audit entries are kept. Declared only: nothing purges the audit log yet. |
parsed_markdown_days | integer (uint32) | Required. Parsed document text older than this is dropped by task retention_purge. |
Unknown fields are refused at boot.
In this repository
rate_limits:
per_tenant: { runs_per_minute: 60, uploads_per_minute: 30 }
per_user: { runs_per_minute: 20 }
pii:
hash_fields: [invoice.vendor_iban]
redact_in_traces: [document_md, invoice.vendor_tax_id]
retention:
parsed_markdown_days: 90
audit_log_days: 2555
audit:
hash_chain: true
Editor support
The schemas are generated from the Rust definition structs (task schema_export), and a test
fails when they drift. Point a YAML language server at the schema to get completion and
validation while editing:
# yaml-language-server: $schema=../../schemas/policies.schema.json