Manage, sync, and export AI Agent Skills across coding tools.
loadout stores skills in the Agent Skills open standard format (YAML frontmatter + Markdown) and loads them into Claude Code, Codex, Gemini CLI, Cursor, GitHub Copilot, and ChatGPT.
# Clone and install locally
git clone https://github.com/wiggleji/loadout.git
cd loadout
npm install
npm run build
npm linkAfter npm link, the loadout command is available globally.
# 1. Initialize loadout
loadout init
# 2. Create a skill
loadout create my-skill -d "TypeScript best practices" -t "typescript,code-style"
# 3. Edit the skill instructions
# Open ~/.loadout/skills/my-skill/SKILL.md in your editor
# 4. Load the skill into your AI tool (interactive)
loadout load my-skillThe load command prompts you to pick which AI tool to load into:
? Which AI tool do you want to load skills into?
❯ Claude Code — Generates CLAUDE.md in current directory
Codex (OpenAI) — Generates AGENTS.md in current directory
Gemini CLI — Generates GEMINI.md in current directory
Cursor — Generates .cursor/rules/{name}.mdc
GitHub Copilot — Generates .github/instructions/{name}.instructions.md
ChatGPT — Generates chatgpt-instructions/{name}.md
Select one with arrow keys and press Enter. The skill is exported to the chosen format in your current working directory.
Skills follow the Agent Skills spec. Each skill is a directory under ~/.loadout/skills/:
my-skill/
├── SKILL.md # YAML frontmatter + markdown instructions
├── scripts/ # Optional executable code
├── references/ # Optional reference docs (inlined on export)
└── assets/ # Optional templates, data
Example SKILL.md:
---
name: my-skill
description: TypeScript best practices
version: 0.1.0
tags:
- typescript
- code-style
globs:
- "*.ts"
- "*.tsx"
alwaysApply: false
---
# TypeScript Best Practices
- Use strict mode
- Prefer `const` over `let`
- Use ESM imports with `.js` extensions
- Define types with interfaces, not type aliases, when possibleloadout init # Initialize ~/.loadout/
loadout create <name> # Create a new skill
-d, --description <desc> # Skill description
-t, --tags <tags> # Comma-separated tags
loadout list # List all skills
loadout show <name> # Show skill details
loadout validate [name] # Validate against Agent Skills spec
loadout delete <name> # Delete a skill
loadout import <path> # Import a skill from a directory# Interactive — pick your AI tool from a menu
loadout load [names...]
-o, --output <dir> # Output directory (default: .)
# Direct — specify the format explicitly
loadout export <format> [names...]
-o, --output <dir> # Output directory (default: .)Supported formats:
| Format | Output File | Tool |
|---|---|---|
claude-code |
CLAUDE.md |
Claude Code (Anthropic CLI) |
codex |
AGENTS.md |
OpenAI Codex CLI |
gemini-cli |
GEMINI.md |
Google Gemini CLI |
cursor |
.cursor/rules/{name}.mdc |
Cursor |
copilot |
.github/instructions/{name}.instructions.md |
GitHub Copilot |
chatgpt |
chatgpt-instructions/{name}.md |
ChatGPT |
If no skill names are given, all skills are exported.
Sync skills across devices via Google Drive or iCloud.
loadout login # Interactive — pick Google Drive or iCloud
loadout logout # Interactive — pick provider to log out
loadout sync # Bidirectional sync
loadout push [names...] # Push skills to cloud
loadout pull [names...] # Pull skills from cloud
loadout status # Show sync statusGoogle Drive — works on all platforms. Requires a one-time OAuth setup (see Google Drive Setup below):
loadout login # Select "Google Drive" → prompts for credentials on first run → opens browser
loadout sync # Bidirectional synciCloud — macOS only, no credentials needed. Uses your local iCloud Drive directory (~/Library/Mobile Documents/com~apple~CloudDocs/.loadout/). Skills are synced automatically by macOS to all devices signed into the same Apple ID.
loadout login # Select "iCloud" → verifies iCloud Drive exists
loadout synciCloud sync is not supported on Windows or Linux. An error will be shown if you try.
loadout config # Show all config
loadout config <key> # Get a value
loadout config <key> <value> # Set a valueKey settings:
| Key | Default | Description |
|---|---|---|
skillsDir |
~/.loadout/skills |
Skills directory |
conflictStrategy |
last-write-wins |
Sync conflict resolution (last-write-wins, local-wins, remote-wins, manual) |
cloudProvider |
— | Cloud provider (google-drive, icloud) |
autoSync |
false |
Auto-sync on push/pull |
To sync skills via Google Drive, you need to create your own Google OAuth credentials (free, takes ~5 minutes).
- Go to Google Cloud Console
- Click Select a project (top bar) → New Project
- Name it anything (e.g.
loadout) → Create
- Go to APIs & Services > Library
- Search for Google Drive API
- Click it → Enable
- Go to APIs & Services > OAuth consent screen
- Select External → Create
- Fill in:
- App name:
loadout(or anything you like) - User support email: your email
- Developer contact email: your email
- App name:
- Click Save and Continue through the remaining steps (Scopes, Test users) — defaults are fine
- On the Test users step, add your own Google email address
While in "Testing" mode, only the test users you add can log in. This is fine for personal use. To let anyone log in, you'd need to publish and verify the app with Google.
- Go to APIs & Services > Credentials
- Click + Create Credentials → OAuth client ID
- Application type: Desktop app
- Name:
loadout(or anything) - Click Create
- Copy the Client ID and Client Secret
loadout login
# Select "Google Drive"
# Paste your Client ID and Client Secret when prompted
# Browser opens → sign in with Google → doneYour credentials are saved locally — you only need to enter them once. On subsequent logins, loadout login goes straight to the browser OAuth flow.
You can also set them manually if you prefer:
loadout config googleDrive.clientId <your-client-id>
loadout config googleDrive.clientSecret <your-client-secret>
loadout login # Select "Google Drive" → opens browser directlyloadout create typescript-rules -d "TypeScript conventions"
# Edit ~/.loadout/skills/typescript-rules/SKILL.md
cd ~/my-project
loadout load typescript-rules
# Select "Claude Code" → writes CLAUDE.md in ~/my-project/cd ~/my-project
loadout export cursor
# Writes .cursor/rules/{name}.mdc for each skill# If you have a skill directory somewhere
loadout import ~/Downloads/my-shared-skill
loadout list # Now shows my-shared-skill# On device A
loadout login # Select "Google Drive", enter OAuth credentials
loadout push
# On device B
loadout login # Select "Google Drive", enter same OAuth credentials
loadout pull# On Mac A
loadout login # Select "iCloud"
loadout push
# On Mac B — skills appear automatically via iCloud Drive
loadout login # Select "iCloud"
loadout pullnpm install # Install dependencies
npm run build # Build with tsup
npm test # Run tests (vitest)
npm run typecheck # Type check
npm run dev # Watch mode buildsrc/
├── cli/ # Commander setup + 16 commands
├── lib/
│ ├── skill/ # Types, parser, serializer, validator, manager
│ ├── sync/ # Engine, manifest, differ, resolver, lock
│ ├── providers/ # CloudProvider interface, Google Drive, iCloud
│ ├── export/ # 6 exporters (cursor, copilot, chatgpt, claude-code, codex, gemini-cli)
│ ├── auth/ # Google OAuth, iCloud auth, credential store
│ └── config/ # Types, defaults, loader
└── utils/ # FS helpers, hash, logger, errors
MIT