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 (the default) and codex.
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.
apply backs up the existing settings.json before it writes. remove uses that backup to put back rules you had before OACB, rather than stripping the file wholesale, and then cleans the backup up.
Understanding a block
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 the tier 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.
