How Staffekt works
For those who want the details
How Staffekt works: lock, units and client-side encryption
A closed-session sync for terminal agents: no real time, no conflicts, a history of versions and a key that never leaves your computer in the clear.
# at startup
staffekt giu↓ dir/Projects/site (from laptop)
Units downloaded: 1, up to date: 58.
# before shutting down
staffekt spengoUploaded and lock released. You can shut down.
01
The lock and its generations
Every account has a single lock on the server, taken and released atomically: two computers can never hold it together. Every time someone takes it the generation number grows, and a computer can record new versions only with the generation it was given.
- If the other computer did not upload,
giustops and tells you which one and since when. - You can take it anyway, with an explicit confirmation: the overtaken computer, when it comes back, cannot overwrite anything.
- Its unsaved work is set aside as a recoverable version (
staffekt parcheggio). - The lock never expires by itself: a computer that did not upload is exactly what should be flagged.
02
Units: only what changed moves
Work is split into units: every project in a followed folder, every conversation folder in ~/.claude/projects, Claude Code's settings, the list of sessions. su uploads only the units with files newer than the last run (with a full check every 7 days); giu downloads only those with a different version.
Unit names do not contain your home folder: the same conversation lands under the right path on a computer with another user name too.
03
What stays on each computer
- Claude Code's login (
.credentials.json) and the sessions' runtime folders. node_modules,.venv, regenerablevendor, caches, sockets and temporary files.~/.ssh: excluded by default. Keys stay where they are.- Anything you add with
staffekt esclusi.
File modes, symbolic links and dates are kept: scripts stay executable and git repositories intact.
04
Encryption and key
Data is stored with restic: encrypted, deduplicated snapshots, one per version of a unit. Your account's key is a random 256-bit secret generated on your computer.
- Only the encrypted key goes to the server, twice: under your passphrase and under your recovery code (Argon2id + XChaCha20-Poly1305).
- A new computer joins with a one-time invite code and unlocks the key with your passphrase.
- Storage only receives encrypted blocks; file and folder names are inside the encrypted data.
If you lose both your passphrase and your recovery code, your data is gone for good. Nobody can get it back, not even us: that is the price of encryption that keeps us from reading it.
05
Versions and recovery
# the versions of a project
staffekt versioni ~/Progetti/sito# an old version in a separate folder
staffekt ripristina ~/Progetti/sito 3# work that was set aside
staffekt parcheggio06
The server
Servers in the European Union: S3-compatible storage (Garage) for the encrypted blocks and a small API for accounts, computers, the lock and versions. File contents never pass through the API, and the client will be released under the GPL-3.0 license.
Done
- Linux client
- Lock with generations
- Versions, restore, parking
- Sessions in herdr and tmux
Coming
- macOS
- Windows (WSL)
- Other terminal agents
- Different project folders across computers
Want to try it?
The beta is invite-only.
Staffekt is an independent project, not affiliated with Anthropic. Claude and Claude Code are trademarks of their respective owners.
