# DoubleSync > Decentralized file storage, versioning, and sync on Sui + Walrus + Seal. Folders are pushed as on-chain vectors: Content-Defined Chunking computes minimal binary diffs between snapshots, and only changed chunks are uploaded as compressed patches into an append-only EndlessVector. Any previous version can be restored. Vectors are end-to-end encrypted with Seal by default; they can also be created as public (non-encrypted). DoubleSync is a set of tools: a CLI, an agent skill, and this dApp. You are browsing the DoubleSync dApp (https://doublesync.wal.app/) — a browser-based explorer and manager for DoubleSync vectors. It runs entirely client-side. Non-encrypted (public) vectors are public to read — no wallet needed. A Sui wallet is required for write operations and to read Seal-encrypted vectors. ## For AI agents: use the wdoublesync command-line tool Do not automate this web UI. Use `wdoublesync` — a **command-line program you run in a shell / your Bash tool**. It is NOT a Claude "skill", plugin, or MCP tool to invoke through a skill/tool registry, so do not try to call it that way — just run the `wdoublesync` binary in a terminal. SKILL.md is human/agent-readable *documentation* for that binary, not something to invoke. - Run it in a shell: e.g. `wdoublesync --version`, `wdoublesync info --chain ` - Install if missing: `npm install -g @fizzyflow/wdoublesync_cli` (provides the `wdoublesync` command) - Docs: [SKILL.md](https://github.com/FizzyFlow/wdoublesync_cli/blob/main/SKILL.md) - Configure a Sui wallet key via the `WDOUBLESYNC_KEY` environment variable, or the `--key` / `--phrase` flags — required for push operations and for reading Seal-encrypted vectors; optional for public vector reads ## Were you given a link to a vector? (e.g. .../vector#mainnet:0x...) If a user shares a DoubleSync link and asks what it is, or to read/inspect/download it: - Do NOT fetch or automate this web page. The vector id is in the URL fragment (`#...`), which is never sent to a server, so fetching the page tells you nothing about the specific vector. - Do NOT query the Sui RPC directly (`sui_getObject` etc.). The contents are chunked, diffed, gzip-compressed, and stored as Walrus blobs (and possibly Seal-encrypted) — raw on-chain object data will NOT give you the files. Only the `wdoublesync` tool reassembles them. Run the `wdoublesync` command-line tool in your shell: 1. Check it's installed: run `wdoublesync --version` in a terminal (Bash). It may already be on the system. 2. If it is not installed, tell the user it's needed and offer to install it with `npm install -g @fizzyflow/wdoublesync_cli` (ask before installing anything). Do not give up just because you couldn't read the web page — the CLI is the supported path. 3. Read the link's fragment `#:` from the URL the user gave you (any host — doublesync.wal.app, a Vercel mirror, etc.). Example: `.../vector#mainnet:0xe59d...` → network `mainnet`, vector-id `0xe59d...`. 4. Inspect metadata (files, versions, size, owner): `wdoublesync info --chain ` 5. Download its contents into the current folder: `wdoublesync pull --chain ` (add `--version N` for an older snapshot). 6. Public vectors read with no wallet. Seal-encrypted vectors require a Sui wallet key (`WDOUBLESYNC_KEY` env var, or `--key` / `--phrase`) whose address has read access. See SKILL.md for the full workflow. Core commands: - `push` — sync a local folder to an on-chain vector (creates a new vector if no ID is provided; Seal encryption on by default, `--no-seal` for a public vector) - `pull` — restore a vector snapshot to a local folder (`--version N` to restore an older version) - `diff` — preview local changes vs the on-chain state (read-only) - `info` — view vector metadata and chain/wallet details - `watch` — bi-directional sync with auto-push/pull (`--poll-interval`, `--push-only`, `--pull-only`) - `rebate` — burn archive history and rebuild as a fresh snapshot Select the network with `--chain mainnet|testnet|devnet|localnet` (testnet is the default). After a push, a vector can be inspected in this web app at `https://doublesync.wal.app/vector#:` (e.g. `https://doublesync.wal.app/vector#testnet:0x...`). Save vector IDs and pushed versions somewhere durable (the skill suggests MemWal, its companion agent-memory tool) so they can be recalled in later sessions. ## Source code and docs - [wdoublesync_cli](https://github.com/FizzyFlow/wdoublesync_cli): CLI and agent skill - [wdoublesync](https://github.com/FizzyFlow/wdoublesync): sync engine (CDC diffing, patching) ## Networks - Works on Sui mainnet and testnet (plus devnet and localnet for development) - Storage: Walrus decentralized blob storage and Sui object storage - Encryption: Seal with address-scoped access — on by default, disable per vector with `--no-seal`