Framework Cloud docs

Skill sync

Skill sync connects a local skill directory to your Framework Cloud account. Each version contains SKILL.md and its companion files. Binary files and executable scripts retain their bytes and modes.

Account connection

Sign in through the package or CLI with your account token. Project pull tokens cannot publish skills. Sync uses the configured Cloud server.

Local skills

Run sync from a Framework project. Use a project-relative skill directory.

framework::skills_sync(".claude/skills/my-skill")
fw skills sync .agents/skills/my-skill --variant python

An untracked skill becomes a private account skill at version 1. Its name does not establish a relationship to another skill. Later edits create versions of the same skill.

Unchanged Framework skills retain their canonical identity. A local edit becomes a private fork linked to the exact canonical version. Forks retain their source when renamed or edited. Forks can also have forks.

Status

Use dry_run = TRUE in R, dry_run=True in Python, or --dry-run in the CLI to inspect the next action. The direction option accepts auto, push, pull, and status. The CLI uses --direction.

Automatic sync pushes local changes or pulls Cloud changes when only one side changed. It stops when both sides changed. It also stops when tracked copies for different assistants diverge or disappear.

Conflicts

Reconcile the files manually, or explicitly select a side. resolve = "local" in R, resolve="local" in Python, or --resolve local in the CLI publishes the local snapshot. The remote choice installs the Cloud snapshot. Both choices require an explicit sync call. Automatic text merging is unavailable.

Replaced local directories remain in .framework/skills-backups/. This directory is ignored by Git. Cloud versions remain available in the skill editor. Restore publishes the selected snapshot as the current version when its content differs from the current snapshot.

Existing skills

An initial download requires an explicit skill ID and an absent target directory. Use skill_id in the packages or --id in the CLI. Select the language with variant or --variant. An existing untracked directory must match the Cloud snapshot before adoption. Its name alone is insufficient.

Project state

.framework/skills.lock.json records identities, language variants, base hashes, and assistant paths. Keep it with the project. R, Python, and the CLI share this format. They verify snapshots before installing them and reject stale writes. Repeated requests reuse a saved request ID after an interrupted upload.

Only one local sync can run at a time. After a terminated process, confirm no sync is running before removing .framework/skills.sync.lock.

File limits

Each skill supports 256 files, 4 MB per file, and 16 MB total. Paths use ASCII letters, numbers, periods, underscores, and hyphens. Symlinks, parent paths, Git metadata, environment files, private keys, and generated caches are excluded or rejected. SKILL.md must be a regular, nonexecutable file.

Package skill updates preserve local edits and account forks. Sync runs only when you call it. Background synchronization is unavailable.

Edit this page on GitHub