Moves weight out of a cloud-synced folder without losing anything, and without asking you to remember where you put things.
You have twenty gigabytes in the cloud, the paid plan is about to run out, and half of that weight is material you have not opened in years. You move it to an external disk. Six months later you no longer remember which disk, or why you moved it, and the file you want is not where you look for it.
rsync and rclone copy, verify and delete the source better than I would write it myself, and stiva does not try to redo them. What it adds on top:
<name>.MOVED.md next to a file and WHERE-DID-THE-FILES-GO.md inside an emptied folder: it says where the file went, on which disk, how big it is and why it left.find and restore, so the move stays reversible a year from now.inspect tells you how many gigabytes you have to pull down before you begin, and checks that the local disk can hold them..gdoc, .gsheet, .gslides) are pointers with no content and no checksum. They cannot be verified, so stiva refuses to move them instead of moving them badly.The token is issued by inspect and it is the fingerprint of the plan. If the plan changes after the inspection, the token is no longer valid and the run stops.
It is there to stop someone from editing the plan and deleting in the same move. That holds for you at two in the morning, and it holds for an agent working in your place: the only road to deletion goes through a plan you have read.
Claude Code stores its history in a folder whose name is the working path. If you move the folder, those sessions are left orphaned: they still exist, and nobody opens them again, because nobody will ever go back to the old path.
stiva notices on its own and re-points them:
It rewrites only the cwd field, which is what Claude Code uses to resume. The content of the messages is left alone, even where it quotes the old path: that is history, and rewriting it would falsify what happened. The old session folder stays where it is, as a safety net.
It also works on its own, for moves done by hand:
Claude Code keeps its history in two places. The CLI stores it under a folder named after the working path, inside ~/.claude/projects/. The desktop app keeps a separate record: one JSON file per session under ~/Library/Application Support/Claude/claude-code-sessions/, with a cwd and an originCwd field inside.
Fixing the first one does not fix the second: those sessions in the app keep pointing at a folder that is gone.
--wait holds off until the app is closed before writing. While it is running, it rewrites its own files from memory and takes the correction back out.
These do not move. The tests exist to defend them.
restore.froster does the copy, the verification, the conditional deletion, leaves a file explaining where the data went and keeps a register. It is more mature than this project. stiva exists because froster archives only to object storage, and I needed a folder on an external disk.
stiva moves files, so after the operation the content sits in one place only. Irreplaceable material needs a second copy, and stiva does not make it for you: it reminds you and nothing more.
| Tool | What it covers | Why it was not enough |
|---|---|---|
| froster | Almost everything, breadcrumb included | S3 destinations only |
| ordne | Plan, approval, blake3 verification | No breadcrumb, space check on Linux only |
| HuskHoard | Storage tiers, verification | Linux only, placeholders written for machines in place of readable notes |
| Hedge, ShotPut and similar | Copy with checksum verification | They never delete the source, as a matter of trade culture |