Configuration¶
PolicyShield reads configuration from policyshield.yaml in your project root.
Configuration file¶
# policyshield.yaml
mode: ENFORCE # ENFORCE | AUDIT | DISABLED
fail_open: true # Allow calls when shielding fails
trace:
enabled: true
output_dir: ./traces
Options¶
| Key | Default | Description |
|---|---|---|
mode |
ENFORCE |
Enforcement mode |
fail_open |
true |
Fail-open behavior on errors |
trace.enabled |
true |
Enable trace recording |
trace.output_dir |
./traces |
Trace output directory |
Modes¶
- ENFORCE — Block/redact/approve as rules dictate
- AUDIT — Log violations but allow all calls
- DISABLED — No enforcement, no logging
CLI config commands¶
Approval Backend¶
The APPROVE verdict requires a backend to handle approval requests. The server auto-selects based on environment variables:
| Env Var | Description |
|---|---|
POLICYSHIELD_TELEGRAM_TOKEN |
Telegram Bot API token (from @BotFather) |
POLICYSHIELD_TELEGRAM_CHAT_ID |
Chat or group ID to send approval requests to |
- Both set → Telegram backend (sends messages with ✅/❌ inline buttons)
- Not set → InMemory backend (manage via
/api/v1/respond-approvalREST endpoint)
# Telegram mode
POLICYSHIELD_TELEGRAM_TOKEN="..." \
POLICYSHIELD_TELEGRAM_CHAT_ID="..." \
policyshield server --rules rules.yaml --port 8100
# InMemory mode (default)
policyshield server --rules rules.yaml --port 8100
AI Rule Generation¶
The policyshield generate command can use LLMs to generate rules. Set the appropriate environment variable:
| Env Var | Description |
|---|---|
OPENAI_API_KEY |
OpenAI API key (for --provider openai, the default) |
ANTHROPIC_API_KEY |
Anthropic API key (for --provider anthropic) |
Install the AI extras: pip install "policyshield[ai]"