Session Sync

Cloud Session Sync — Git for Your Claude Code Sessions

Every Claude Code turn becomes an immutable, git-backed snapshot. Roll back to any point, branch into a different path, continue in the cloud with one click, and resume on any machine with full context.

Every turn is a snapshot

Run `forge link` once. From then on every local turn — transcript, tool I/O, current commit SHA, cost — becomes an immutable snapshot in your org's session history. Hooks never block Claude Code; offline turns queue and drain on reconnect.

Roll back & branch

Pick any prior snapshot and continue down a different path. Forge creates a new branch; both paths stay in history. Comparing two attempts is a plain git diff — 'undo' finally means something in an AI session.

Continue in the cloud

Pick a snapshot in the dashboard, type a prompt, send. A sandboxed cloud worker clones your repo at that exact commit, replays the conversation, runs the turn, and streams the output live.

Resume on any machine

`forge cloud-pull` + resume, and Claude Code picks up exactly where the session left off — full conversation, correct workspace state. Cloud turns stitch into your local transcript automatically.

How it works

Three nested concepts: a session (the long-lived thread tied to one git repository), its branches (linear chains of snapshots — roll back and continue differently, and a new branch is born), and snapshots (the immutable record of one turn: message log, workspace state as a git commit, tool I/O, model parameters, cost — append-only).

If that sounds git-shaped, that’s deliberate. Workspace state lives as commits on dedicated forge/session/… branches, so every snapshot is reviewable in any git tool, diffs and merges already exist, and the session tree is just git log --all --graph away.

flowchart TD
    L[Claude Code · local] -->|every turn: transcript + commit SHA| S[(Forge sessions
snapshots = git commits)] S -->|"Continue in cloud"| C[Cloud sandbox turn] C -->|new snapshot, streamed live| S S -->|pick any snapshot| B[Roll back / branch] B -->|new branch in the tree| S S -->|cloud-pull + resume| M[Claude Code · any machine] M -->|keeps syncing| S classDef endpoint fill:#0a1a33,stroke:#22d3ee,stroke-width:2px,color:#67e8f9; class L,M endpoint;

Getting started

The forge CLI ships as a single platform binary — same install pattern as sc , no runtime dependencies. Once it’s on your PATH:

1
2
forge link   # one-time: browser approval, hooks installed
claude       # work normally — turns sync in the background

Prefer explicit control over hooks? forge sync pushes the current local session state up in one shot — the “I’m done locally, hand off to cloud” move. And on another machine:

1
2
forge cloud-pull --session <session-id>
forge claude --resume

Security model

Transcripts are encrypted in transit and at rest with a per-organization KMS key — destroy the key and every blob is unreadable. Retention is configurable per org; forge session forget <id> exists for targeted deletion. What’s uploaded is explicit: the transcript, the commit SHA, run stats — never your working tree or environment.

And secrets stay out of the transcript entirely. Agents reach credentials only through scoped tools — secret_list returns metadata, never values — and the secure-curl path resolves {{alias}} placeholders at the egress proxy, outside the agent’s address space. The plaintext never enters the agent’s context, so it can’t end up in a synced snapshot either. Every access leaves a plaintext-free audit row.

It composes

The same session machinery backs workflow runs, with the same git-backed audit trail underneath, executed locally or in the cloud via forge-cli . Read the launch post: Introducing Cloud Session Sync .

Ready to ship faster?

Forge runs the full cycle autonomously — from labeled issue to reviewable PR.