Skip to content

One config. Zero drift.

Keep your agents, skills, commands, and configurations in sync across Claude Code, Codex, Copilot, Cursor, Gemini, and OpenCode on every machine.

also: pnpm dlx saddle-cli · bunx saddle-cli

Terminal
~ npx saddle-cli
saddle-cli: interactive installer
──────────────────────────────────────
Claude Code● detected
[]claude-skills
[]claude-agents
[]claude-commands
Codex● detected
[]codex-skills
[]codex-agents-md
Copilot[NOT INSTALLED]
[ ] copilot-skills
──────────────────────────────────────
↑↓ navigate   space toggle   ↵ install
Coverage

Supported tools

Saddle detects which tools are installed and symlinks only what’s present. Nothing is written without your confirmation.

Supported AI coding tools: config home directory, and what saddle syncs: skills, agents, commands, root config files, and tool config files.
ToolHomeSkillsAgentsCommandsRoot FileConfig Files
OpenCode~/.config/opencodeYesYesYesAGENTS.mdYes
Claude Code~/.claudeYesYesYesNoNo
Codex~/.codexYesYesYesAGENTS.mdNo
Copilot~/.copilotYesYesYesNoNo
Cursor~/.cursorYesYesYesNoNo
Gemini~/.geminiYesYesYesGEMINI.mdYes
Workflow

How it works

01

Define

Keep agents, skills, commands, and configs in one canonical repo.

02

Detect

Saddle finds which AI tools are installed on your machine.

03

Link

Symlinks wire each tool to your canonical definitions.

04

Extend

Declarative YAML rules define what gets linked. Add support for any new tool by writing a single file.

Zero Config

Detects installed tools automatically. Grays out what's missing. Just run saddle and go.

Headless-ready

Full non-interactive mode for CI/CD. Use --dry-run, --yes, and --check to automate everything.

Community Rules

YAML rule files are shareable. Pick up community-maintained definitions for any tool in the ecosystem, or contribute your own.

Lockfile Tracking

Know exactly what Saddle installed. Verify sync status with --check. Safely remove everything with --uninstall.

Quick start

Get started in 30 seconds

No install required. Pick your package manager and go.

Or install globally: npm install -g saddle-cli

Full setup

Dial it in

Install once, configure flags and env vars, then clone and re-run on every new machine to restore your full setup in seconds.

Terminal
# 1. Install the CLI onto your machine
npm install -g saddle-cli

# 2. Clone your canonical config repo somewhere permanent
git clone https://github.com/your-username/your-config-repo.git ~/dev/ai
cd ~/dev/ai

# 3. Preview what will be linked on this machine
saddle --dry-run --all

# 4. Apply — symlinks your repo into each detected tool
saddle --yes --all

# 5. On any new machine, clone and re-run to restore everything
saddle --check         # exit 0 = in sync, exit 1 = drift detected

Canonical layout

~/dev/ai/
├── agents/          AGENTS.md, GEMINI.md per tool
├── commands/         slash command files
├── skills/           skill subdirectories
├── configurations/    tool-specific config files
├── opencode/         OpenCode config
└── rules/            per-tool YAML installer rules
    ├── claude.yaml
    ├── codex.yaml
    ├── cursor.yaml
    ├── gemini.yaml
    └── opencode.yaml

Flags

npx saddle-cli --help
--dry-runPreview changes without writing to disk
--yesAuto-confirm replacements without prompting
--allSelect every available profile
--profile [ids]Apply specific profiles by name, comma-separated
--listPrint available profiles and exit
--checkVerify symlinks are in sync (exit 0 clean, 1 drift)
--uninstallRemove all symlinks recorded in the lockfile
--verboseShow source paths and resolved symlink targets
--quietSuppress ok/skip output — errors and summary only
SADDLE_DIRBase config directory (default: ~/.config/saddle)
SADDLE_CONFIGPath to config file
SADDLE_RULES_DIRPath to YAML rules directory