Setting up sync
Sync copies the personal library through the hosted API. It never writes project dests or home agent dirs. Skip this page if you want to stay local.
Log in
skl login
The CLI prints a verification URL like https://tryskl.fyi/device?user_code=ABCD-2345 and a user code. Open the URL, approve the device, and wait for the poll to finish.
The device token is stored in ~/.local/share/skl/state.db. Login also writes api_base to ~/.config/skl/config.toml. The OS keyring is not required.
If the code expires, run skl login again. If you deny the request, the CLI exits with "device authorization was denied".
Second machine
- Install skl.
- Run
skl loginand approve the new device. - Run
skl sync.
The second machine pulls the personal library. Project dests are still empty until you skl use in each project.
Sync
skl sync
skl sync hash-syncs ~/.local/share/skl/skills only. .agents/skills in a project does not change. Home copies under ~/.claude/skills or ~/.cursor/skills do not change.
You need a local index first. Run skl init or skl create if state.db does not exist yet.
Conflicts
A conflict is a tree-hash mismatch. The same skill name has different content locally and on the server. Default on a TTY is a prompt per skill.
skl sync --keep-local
skl sync --keep-remote
--keep-local overwrites the remote tree. --keep-remote overwrites the local library copy. There is no merge.
On a non-TTY, pass one of those flags. Sync refuses to guess.
Secret findings
Upload is scanned first. Warning-level findings block the upload unless you pass --allow-warnings. Block-level findings always refuse. See Secret scrubbing.
Auto-sync
When [sync] auto = true (the default), login, init, use, unuse, status, create, capture, and list may run a fail-soft sync in the background. frequency_secs defaults to 900. A failed attempt still counts as the throttle.
Background auto-sync cannot prompt. Tree-hash conflicts there keep the remote copy. Use an explicit skl sync when you want the prompt or --keep-local.
Set auto = false to turn piggyback off. skl sync still works.
Log out
skl logout
Logout clears the local device token in state.db. It does not revoke the device on the server. Revoke devices on the devices page.
What the server can read
Sync is not end-to-end encrypted. Traffic uses TLS. Skill blobs are stored at rest on the server, and the server can read them. Treat the personal library as data you are willing to give that host.