Skip to main content
A policy profile is a named threshold preset stored in charter.yaml. Configuring a profile means every invocation of charter doctor — on any machine, in any CI run — uses the same threshold without anyone needing to pass a flag.

Available profiles

ProfileThresholdWhen to use
standard80Default for most repos. A solid baseline for active development projects progressively adopting agent tooling.
strict90Security-sensitive repos, production services, or teams that have resolved the common findings and want to hold the line.

Setting a profile

# charter.yaml
policy:
  profile: strict
Place charter.yaml in the root of your repo. Charter discovers it automatically. With this config, every charter doctor invocation gates at 90 — no --threshold flag needed.

Setting an exact threshold

If neither profile maps to the threshold you want, set an explicit numeric value:
policy:
  threshold: 85
You can use policy.threshold alongside policy.profile if you want to name the intent clearly:
policy:
  profile: standard
  threshold: 85
When both profile and threshold are set, threshold always wins. The profile label becomes documentation only — it has no effect on the gate value.

Threshold precedence

When multiple threshold sources are present, Charter applies them from highest to lowest priority:
  1. --threshold flag on the command line
  2. policy.threshold in charter.yaml
  3. The default for the configured policy.profile (80 for standard, 90 for strict)
  4. Built-in default: 80 (when charter.yaml is absent or has no policy section)

Command-line override

Passing --threshold at invocation time overrides everything in charter.yaml. The config file is not modified:
# Temporarily lower the threshold during a migration
charter doctor --threshold 70

# One-off strict check without changing charter.yaml
charter doctor --threshold 90
This is useful for CI jobs that need a different gate than the repo default, or for one-off checks during development.

See also