Read the framework before applying
baseline or higher. Those tiers block commands, and the point of shadow is to find out which ones before that happens to a developer mid-task.Start here
shadow running for about two weeks, read the audit log, then move up:
Tiers
Five, least to most restrictive.
Only
audit, apply and doctor take --tier. On audit and doctor it defaults to baseline; apply prompts you to choose when you leave it out.
Agents
claude-code and codex. audit, doctor, status, why and remove default to claude-code; apply asks which agents to configure (you can pick both), and under --yes applies to claude-code only unless you pass --agent.
diff is Claude Code only, and so is the --overrides flag on apply — apply itself works on both. On Codex it sets approval_policy and sandbox_mode to match the tier.
For Claude Code the config directory follows
CLAUDE_CONFIG_DIR when you have set it, so OACB installs where Claude Code actually reads.
Commands
--from on diff is auto-detected from your settings when you omit it. Every subcommand exits 1 on failure.
Applying safely
apply and remove are the two that write to a developer’s machine. Both take --dry-run, and it is worth using:
--yes makes apply non-interactive. It still writes a consent record, so there is a trail of what was applied and when. With --yes and no --tier, apply installs shadow (log only).
apply backs up the existing settings.json before it writes, and remove restores the rules you had before OACB from that backup — your own settings survive both.
Understanding a block
These commands report on OACB only. If a policy of yours is not blocking something it should, that is a policy question rather than an OACB one — see A Policy Is Not Blocking. When a developer hits a block,why is the fastest route to the reason:
Verify it is working
audit and doctor answer different questions, and you want both.
auditreads the configuration and scores it against a tier. It tells you whether the settings are right.doctorruns real commands through the installed hooks. It tells you whether enforcement actually happens.
doctor is the one that proves it is real:
--format json for scripting.
Removing it
--local-hooks and --local-managed-settings on apply load hooks and settings from a local directory instead of downloading them. They exist for developing OACB itself and have no place in a normal install or an MDM rollout.
