Provider Interop Commands
Shared conventions
These command definitions inherit the cross-cutting CLI conventions in:
Adjacent command docs (outside provider interop scope)
oat init(bootstrap):../cli-utilities/bootstrap.mdoat tools ...(tool-pack lifecycle — install, update, remove, list, info):../cli-utilities/tool-packs.mdoat doctor(cross-cutting diagnostics):../reference/cli-reference.md
Quick Look
- What it does: defines the day-to-day provider-sync command surface for inspecting state, reconciling provider views, and changing provider enablement.
- When to use it: after you have canonical assets in place and need to check sync state, write provider views, or change provider config.
- Primary commands:
oat status,oat sync,oat providers list,oat providers inspect,oat providers set,oat providers codex materialize
oat status
Purpose:
- Report
in_sync,drifted,missing, andstraystates
Key behavior:
- Scope support (
project,user,all) - Optional interactive stray adoption
- Cursor-local and Copilot-local skills are handled individually: Adopt moves
the skill into the matching canonical
.agents/skillsdirectory, while Keep provider-only preserves it and records its exact path in the applicable sync config - Aborting a native-read skill migration preserves completed choices and leaves the current and remaining skills unresolved
- Keep provider-only is blocked when a canonical skill has the same name; rename one skill before retrying
- Non-interactive and JSON modes report unresolved native-read skill actions without choosing or mutating a disposition
- JSON output for automation
oat sync
Purpose:
- Reconcile provider views from canonical sources
Key behavior:
- Mutates by default; use
--dry-runto preview - Strategy-aware operations (
symlink,copy,auto) - Provider enable/disable honored via sync config
- Cursor skills are native-read from canonical
.agents/skills; sync does not create.cursor/skillsmirrors - Copilot skills are native-read from canonical
.agents/skills; sync does not create.github/skillsor~/.copilot/skillsmirrors. Copilot agents and project rules still sync to.github/agents,~/.copilot/agents, and.github/instructions. - Upgrade cleanup removes only verified clean legacy Cursor or Copilot skill views. Changed or unverified views are preserved and detached from obsolete manifest ownership.
Preview project and user cleanup before applying it:
oat sync --scope all --dry-runReview every planned remove and detach operation before running the same
command without --dry-run.
oat providers list
Purpose:
- Summarize adapters, detection, and mapping-level health summary
oat providers inspect <provider>
Purpose:
- Show adapter mappings and per-scope mapping state details
oat providers set
Purpose:
- Enable or disable project providers in sync config
Key behavior:
- Modifies
.oat/sync/config.jsonto toggle provider enablement - Options:
--enabled <providers>,--disabled <providers>(comma-separated) - Changes take effect on next
oat sync
oat providers codex materialize
Purpose:
- Materialize one canonical Markdown agent as a Codex TOML role and register it in Codex configuration
Required operands:
oat providers codex materialize <agent-name> \
--model <model-id> \
--effort <reasoning-effort>Key behavior:
- Project scope is the default and writes only
.codex/config.tomlplus the project role file;--scope userwrites only under~/.codex --agent-pathselects a specific canonical agent and--role-nameoverrides the generated role name- Managed role registration enables multi-agent support and merges an
agents.max_depthfloor of2 - Project writes preserve a higher existing project depth or inherited user depth without mutating user configuration; user writes do not inspect or mutate project configuration
- Existing unrelated Codex configuration and custom roles are preserved
Notes
oat init --scope projectis commonly used before provider-interop commands because it initializes.oat/sync/config.json.- User-scope known-stray choices are stored in
~/.oat/sync/config.json. Legacy~/.oat/config.json#knownStraysentries migrate automatically before user-scope stray filtering. oat doctorcomplements interop workflows by surfacing environment and bundled-skill version issues before or after sync operations.
Adjacent Instruction Integrity Commands
These commands are documented here because they are commonly used during interop-only repo maintenance, but they are not provider sync/drift commands.
oat instructions validate
Purpose:
- Validate project-scoped
AGENTS.mdtoCLAUDE.mdintegrity
Key behavior:
- Read-only validation of nested project-scoped instruction directories
- Supports
--strategy pointer|symlink|copyto validate the expected file shape - Reports
ok,missing,content_mismatch, andstraystates - Detects Claude-only adoptable directories and unreadable/broken instruction paths as drift
- Exit code
0when all entries are valid,1when drift is detected - Detailed behavior:
Instruction Sync
oat instructions sync
Purpose:
- Repair project-scoped
AGENTS.mdtoCLAUDE.mddrift
Key behavior:
- Mutates by default; use
--dry-runto preview changes - Supports
--strategy pointer|symlink|copy - Creates missing
CLAUDE.mdfiles using the selected strategy - Adopts Claude-only stray files by writing canonical
AGENTS.mdcontent first, then regeneratingCLAUDE.md - Skips mismatched files unless
--forceis provided - Skips unreadable canonical or Claude-only sources and reports manual-repair guidance instead of forcing recovery
- Uses pointer content
@AGENTS.md\n, file symlinks, or hard copies depending on the selected strategy - Detailed behavior and examples:
Instruction Sync