Clone and sync
Download a Sandscape project, pull platform changes, and push local changes.
Start with the case that matches your folder:
- If
.sandscape/project.jsonexists, the folder is already connected. Runsandscape pullbefore you edit. - If the folder contains a local game that is not connected, use
sandscape init. - If you want to download a project from Sandscape, list your projects and clone one into a new folder.
The presence of .sandscape/project.json is the reliable test. A generated guide or an
agent configuration directory does not prove that the game is connected.
Download a project
sandscape list
sandscape list --no-pick
sandscape list --json
sandscape clone <session_id> ./my-gamesandscape list shows projects you own and projects shared with you. In an interactive
terminal, it also lets you choose a project to clone. Use --no-pick to print the list
without the picker, or --json for scripts and coding agents.
clone downloads a project into a new directory. If you omit the directory, its name
defaults to the session ID.
The target directory must not exist. The CLI verifies each downloaded file and only places the finished clone at the target path after the download succeeds.
Pull, edit, push
Run this loop whenever you work on the game locally:
sandscape pull
# edit the game with your usual tools
sandscape pushpull downloads files that changed on Sandscape. push uploads new and changed local
files. Both commands use the current directory unless you pass another connected folder:
sandscape pull ./my-game
sandscape push ./my-gameFile deletion does not sync
The current sync protocol is additive. Deleting a local file does not delete the copy on Sandscape, and a file removed on Sandscape is not deleted from your local folder.
Resolve conflicting changes
The CLI does not merge two versions of the same file.
- A push is rejected when Sandscape has a newer project version than your clone. The CLI leaves your files alone. Pull the latest version, resolve any conflict, then push again.
- A pull is rejected when the same file changed both locally and on Sandscape. The output lists the conflicting paths and does not overwrite them.
sandscape pull --forcereplaces the conflicting local files with the versions from Sandscape.
pull --force discards local work
Back up the listed files or confirm that you no longer need the local edits before using
--force.
Files added by the CLI
<game>/
.sandscape/
project.json project ID, synced version, and API origin
design.json game concept, style, assets, and development plan
manifest.json file checksums used for sync
CLAUDE.md generated instructions for coding agents
AGENTS.md the same instructions under a second common filename
.claude/skills/ project copy of the Sandscape skill
.agents/skills/ shared project copy of the Sandscape skill
index.html browser entry point
<game files> your existing structureDo not edit files inside .sandscape by hand. clone and pull update them. Local
changes to .sandscape/design.json are not uploaded.
The CLI excludes its metadata and agent files from game uploads.
Progress and limits
clone, pull, push, and init print file progress during a transfer. Add --json
to receive one JSON event per line instead.
One file can be at most 50 MiB. One push can contain at most 500 MiB and 5,000 files. See CLI reference for the complete limits and event format.
Common sync errors
not_a_clone: run the command from a folder that contains.sandscape/project.json, or pass that folder as an argument.not_authorized: runsandscape login.- A skipped file matched an ignore rule, was a symlink, or looked like a credential. Check what syncs and what does not.
- If the clone version is ahead of Sandscape, clone the project again into a fresh directory.