Configuration scopes
There are three configuration scopes, evaluated in priority order:| Scope | File path | Purpose |
|---|---|---|
| project | .failproofai/policies-config.json | Per-repo settings, committed to version control |
| local | .failproofai/policies-config.local.json | Personal per-repo overrides, gitignored |
| global | ~/.failproofai/policies-config.json | User-level defaults across all projects |
Merge rules
enabledPolicies - the union of all three scopes. A policy enabled at any level is active.
policyParams - first scope that defines params for a given policy wins entirely. There is no deep merging of values within a policy’s params.
customPoliciesPath - first scope that defines it wins.
llm - first scope that defines it wins.
Config file format
Field reference
enabledPolicies
Type: string[]
List of policy names to enable. Names must match exactly the policy identifiers shown by failproofai policies. See Built-in Policies for the full list.
Policies not in enabledPolicies are inactive, even if they have entries in policyParams.
policyParams
Type: Record<string, Record<string, unknown>>
Per-policy parameter overrides. The outer key is the policy name; the inner keys are policy-specific. Each policy documents its available parameters in Built-in Policies.
If a policy has parameters but you don’t specify them, the policy’s built-in defaults are used. Users who do not configure policyParams at all get identical behavior to previous versions.
Unknown keys inside a policy’s params block are silently ignored at hook-fire time but flagged as warnings when you run failproofai policies.
customPoliciesPath
Type: string (absolute path)
Path to a JavaScript file containing custom hook policies. This is set automatically by failproofai policies --install --custom <path> (the path is resolved to absolute before being stored).
The file is loaded fresh on every hook event - there is no caching. See Custom Hooks for authoring details.
llm
Type: object (optional)
LLM client configuration for policies that make AI calls. Not required for most setups.
Managing configuration from the CLI
Thepolicies --install and policies --uninstall commands write to Claude Code’s settings.json (the hook entry points), while policies-config.json is the file you manage directly. The two are separate:
settings.json- tells Claude Code to callfailproofai --hook <event>on each tool usepolicies-config.json- tells failproofai which policies to evaluate and with what params
policies-config.json directly at any time; changes take effect immediately on the next hook event with no restart needed.
Example: project-level config with team defaults
Commit.failproofai/policies-config.json to your repo:
.failproofai/policies-config.local.json (gitignored) for personal overrides without affecting teammates.
