skillsync
Docs/Skillsync CLI

Sync sessions to Skillsync

Publish one local coding session as a private Skillsync thread, share it with workspaces, and work with synced sessions from the CLI.

These docs cover the current Skillsync CLI. Local session support is powered by the open-source txcript project.

skl sync sends one local session to Skillsync as a thread you own. Nothing uploads unless you run it: there is no watcher, no scheduled sync, and no MCP tool for it.

Sign in first:

skl login

Sync one session

skl sync <id>

The ID is the one printed by skl list or skl query. An unambiguous prefix or the exact title also works. Omit it to pick a session interactively.

The thread is private to you on the first sync. The command prints its URL. skl sync is a shortcut for skl remote sync; both accept the same arguments.

Re-run the command after the session grows. A session is keyed by its ID, so a re-sync updates the same thread in place and the URL does not change. The local session is the source of truth: a sync always replaces the stored copy.

Preview without sending anything:

skl sync <id> --dry-run

This validates the session, prints a JSON summary of what would be sent (session metadata, message and block counts, and the workspace set), and uploads nothing.

Share with workspaces

Repeat --workspace for the complete set of workspaces the thread should be shared with. The set you pass replaces the previous one.

skl sync <id> --workspace engineering
skl sync <id> --workspace engineering --workspace platform

Remove every workspace share:

skl sync <id> --private

--workspace and --private cannot be combined. Up to 20 workspaces can be shared in one sync.

On a re-sync with neither flag, the existing shares are kept. A background re-sync does not need to know how a thread is shared.

Workspace members see a shared thread only while both you and they are members of that workspace. The thread stays yours; ownership never moves to the workspace.

Default shares for first syncs

Set the workspaces a session's first sync from this machine is shared with:

skl remote set-default engineering
skl remote set-default engineering platform

The default applies only when sync is run without --workspace or --private on a session that has not been synced from this machine before. Re-syncs keep their existing shares. Flags on the command line always win.

skl remote set-default            # show the current default
skl remote set-default --clear    # first syncs stay private again

What is sent

The session is read through txcript, mapped to Skillsync's thread format, gzipped, and posted in one request. Inline images are downsized first. An image that cannot be decoded is replaced by a placeholder and counted in a warning; the rest of the session still syncs.

Sync refuses:

  • A session with no exportable messages.
  • A session recorded under a path hidden with skl ignore. Run skl ignore remove <path> to allow it.
  • A session from an agent Skillsync does not accept yet. See the sync column in /docs/transcript-support.
  • A session that exceeds the server size limit after compression.

The checks run before any network request.

Synced sessions

skl remote works with sessions already on Skillsync. Nothing under it uploads; delete is the only write.

skl remote list
skl remote list --from codex -n 5
skl remote list --json

Lists your synced sessions, newest first, with slug, agent, date, visibility, and title. --from accepts the agent IDs used by skl list. -n shows at most that many (1 to 50; default 20). ls is an alias.

skl remote open <reference>
skl remote view <reference>
skl remote continue <reference>
skl remote continue <reference> --with codex
skl remote delete <reference>
skl remote delete <reference> --yes
CommandEffect
openOpen the thread in the browser. Prints the URL if no browser can be opened.
viewPrint the Skillsync copy as text, in the same format as skl view.
continueResume the session in a local agent.
deleteDelete the thread from Skillsync. Prompts unless --yes is passed; needs a terminal or --yes. The local session is kept. rm is an alias.

A <reference> is either a local session ID (or prefix) that was synced from this machine, or a thread slug as shown by skl remote list or in a Skillsync URL. Local IDs resolve through a map skl sync records on this machine; Skillsync never returns the local ID.

continue behaves like skl continue. If the session is still on this machine, it resumes in place. Otherwise the Skillsync copy is fetched and written as a new local session for the target agent, then launched. Pass --with when the thread's original agent cannot resume on this machine.

Automation

Always pass the session ID when scripting; without one the command opens a picker and fails without a terminal.

skl sync "$SESSION_ID" --workspace engineering
skl remote list --json

SKL_TOKEN can hold a browser login token or an skl_ API token minted under Settings → Environments. An API token can only sync: skl sync works with it, skl remote commands need a login.

AI agents driving skl should not run skl sync unless the person asked them to publish that specific session. skl guide says the same to them.