Skip to main content

warden sync

Update cached remote skills to their latest versions. Syncs unpinned remote skills from GitHub repositories to ensure you have the most recent versions.

Usage

# Sync all remote skills
warden sync

# Sync specific remote
warden sync <remote>
warden sync --remote <remote>

What It Does

  1. Identifies cached remotes - Finds all remote skills in .warden/skills/
  2. Checks for updates - Fetches latest commit SHA from GitHub
  3. Updates unpinned remotes - Downloads new versions if SHA changed
  4. Preserves pinned remotes - Skips skills pinned to specific commits

Arguments

remote
string
Remote repository to sync (optional). Can be specified as positional argument or --remote flag.Formats:
  • owner/repo - Repository in owner/repo format
  • https://github.com/owner/repo - Full GitHub URL
warden sync getsentry/skills
warden sync --remote getsentry/skills
warden sync https://github.com/getsentry/skills

Options

--remote
string
Alternative way to specify remote (same as positional argument)
warden sync --remote owner/repo
--quiet
boolean
default:"false"
Suppress non-error output
warden sync --quiet
--color / --no-color
boolean
Force color output on or off
warden sync --no-color

Remote Types

Unpinned Remotes

Remotes without a specific SHA are automatically updated:
[[skills]]
name = "security-review"
remote = "getsentry/skills"  # No @sha - will be synced
$ warden sync

SYNC REMOTE SKILLS

Syncing getsentry/skills...
getsentry/skills: updated abc1234 -> def5678

 Updated 1 remote.

Pinned Remotes

Remotes pinned to a specific commit SHA are skipped:
[[skills]]
name = "security-review"
remote = "getsentry/skills@abc123def456"  # Pinned - won't be synced
$ warden sync

SYNC REMOTE SKILLS

All cached remotes are pinned to specific versions.
Pinned remotes do not need syncing as they are immutable.
  - getsentry/skills@abc123def456 (pinned)

Exit Codes

0
Success
  • All remotes synced successfully
  • No remotes to sync
  • All remotes already up to date
1
Error
  • Network error fetching remote
  • Invalid remote reference
  • Remote not found in cache
  • One or more remotes failed to sync

Examples

Sync All Remotes

$ warden sync

SYNC REMOTE SKILLS

Syncing getsentry/skills...
getsentry/skills: updated abc1234 -> def5678

Syncing acme/custom-skills...
acme/custom-skills: already up to date

Skipped pinned remotes:
  - other/repo@xyz9876

 Updated 1 remote.

Sync Specific Remote

$ warden sync getsentry/skills

SYNC REMOTE SKILLS

Syncing getsentry/skills...
getsentry/skills: updated abc1234 -> def5678

 Updated 1 remote.

All Up to Date

$ warden sync

SYNC REMOTE SKILLS

Syncing getsentry/skills...
getsentry/skills: already up to date

Syncing acme/custom-skills...
acme/custom-skills: already up to date

 All remotes up to date.

No Remote Skills

$ warden sync

No remote skills cached.
Add remote skills with: warden add --remote owner/repo --skill name

Network Error

$ warden sync

SYNC REMOTE SKILLS

Syncing getsentry/skills...
getsentry/skills: Failed to fetch: Network error

Synced with 1 error.

Remote Caching

Remote skills are cached in .warden/skills/:
.warden/
├── skills/
│   ├── getsentry-skills-abc1234/    # Cached at commit abc1234
│   │   ├── security-review/
│   │   └── bug-detection/
│   └── acme-custom-skills-def5678/  # Cached at commit def5678
│       └── performance-review/
└── state.json  # Cache metadata with SHAs
The state.json tracks the commit SHA for each cached remote:
{
  "skills": {
    "getsentry/skills": {
      "sha": "abc1234def5678",
      "updatedAt": "2026-03-05T14:30:22.000Z"
    }
  }
}

When to Sync

Manual Sync

Run sync when you want the latest skill updates:
# Before important analysis
warden sync
warden

Automated Sync

Add to CI/CD pipelines:
# .github/workflows/warden.yml
- name: Update Warden skills
  run: warden sync
  
- name: Run Warden
  run: warden

Team Sync

Sync after adding new team members or changing skill configurations:
# Share updated cache
warden sync
git add .warden/state.json
git commit -m "Update cached skill versions"

Comparison with Add

The difference between sync and add --force:

warden sync

  • Updates all unpinned remotes at once
  • Only updates cache, doesn’t modify warden.toml
  • Preserves pinned versions
  • Shows summary of updates

warden add —force

  • Updates one skill at a time
  • Re-adds skill to warden.toml (may duplicate)
  • Forces refresh even for pinned versions
  • Used when first adding a skill
# Update all remote skills
warden sync

# Force refresh specific skill
warden add --remote owner/repo --skill name --force

Pinning Skills

To prevent automatic updates, pin skills to specific commits:

Pin Existing Skill

Edit warden.toml to add @sha:
[[skills]]
name = "security-review"
- remote = "getsentry/skills"
+ remote = "getsentry/skills@abc123def456"
Get the current SHA from cache:
cat .warden/state.json | jq '.skills["getsentry/skills"].sha'

Add Pinned Skill

warden add --remote getsentry/skills@abc123 --skill security-review

Unpin Skill

Remove the @sha suffix:
[[skills]]
name = "security-review"
- remote = "getsentry/skills@abc123def456"
+ remote = "getsentry/skills"
Then sync to get latest:
warden sync

Offline Mode

When working offline, Warden uses cached skills automatically:
# Use cached skills without syncing
warden --offline
No need to run sync when using --offline.

Troubleshooting

Remote Not Found

$ warden sync unknown/repo

Remote not found in cache: unknown/repo

Cached remotes:
  - getsentry/skills
  - acme/custom-skills
Solution: Verify the remote name matches what’s in your warden.toml.

Network Errors

If sync fails due to network issues:
# Retry
warden sync

# Or use cached versions
warden --offline

Pinned Skills Not Updating

If a pinned skill isn’t updating:
# Check if it's pinned
grep -A2 'name = "skill-name"' warden.toml

# If pinned, remove @sha and sync
warden sync

Cache Corruption

If the cache is corrupted:
# Remove cache and re-add skills
rm -rf .warden/skills/ .warden/state.json
warden add --remote owner/repo --skill name --force

Build docs developers (and LLMs) love