All commands
Every zev command, with the ones you'll use every day first. Each entry says what it does, how to type it, and shows examples.
Search for a command to run…
Every zev command, with the ones you'll use every day first. Each entry says what it does, how to type it, and shows examples.
The commands are grouped by what you're doing, and the groups go from everyday to specialised. Most people only ever need the first three groups.
In the terminal, zev help lists every command, and zev help <command> shows how to use one. Press / on this page to search.
In the usage lines: <name> means you fill something in, [name] means it's optional, and a | b means one or the other.
| I want to… | Command |
|---|---|
| start a new project | zev init |
| copy a project from Zaryn | zev clone |
| see what I changed | zev status, zev diff |
| choose what to save | zev add |
| save a version | zev commit |
| see the history | zev log, zev show |
| undo changes to a file | zev restore |
| delete a file | zev rm |
| put work aside for a moment | zev stash |
| work on something separately | zev branch, zev checkout |
| combine branches | zev merge |
| send my work to Zaryn | zev push |
| get others' work | zev pull |
| ask for a review | zev pr |
| check nothing got worse (tests, speed, size, model scores) | zev eval |
| install packages faster through Zaryn | zev mirror |
| use my proxy for every app, or as a VPN | zev proxy, zev vpn |
Makes the current folder (or the folder you name) a zev repository. It creates a hidden .zev folder for the history and doesn't touch your files.
zev initzev init my-projectCopies a repository to your computer: its full history, its files, and origin set to where it came from. The folder is named after the repository unless you give one.
zev clone <address> [folder] [--branch <name>]zev clone someone/projectzev clone someone/project my-copy --branch devzev clone someone/project@devzev clone https://zaryn.xyz/someone/projectzev clone file:///home/me/backups/projectPrivate repositories need you to be signed in with access to them. The folder must not exist yet, or be empty.
Reads and changes this repository's settings. The two you need are your name and email, which go on every commit.
zev config set user.name "Your Name"zev config set user.email "you@example.com"zev config get user.namezev config listShows where you are: the branch, what's staged for the next commit, what you changed but haven't staged, files you deleted, and new files zev doesn't track yet. Each section says which command to run next.
zev statuszev status --json # for scriptsOn branch mainChanges to be committed: new file: notes.mdChanges not staged for commit: modified: todo.txt deleted: old.txtUntracked files: draft.txtStages changes, which means picking them for the next commit. It handles new files, changed files and deleted files.
zev add <file | folder | .>...zev add notes.md # one filezev add src # everything in a folderzev add . # everything in the projectzev add old.txt # old.txt was deleted: stages the deletionFiles matching .zevignore are skipped (unless zev already tracks them). Files that haven't changed since the last commit aren't staged, so zev add . is always safe to run.
Saves everything you staged as a new commit, with a message describing it.
zev commit -m "Fix the login button on small screens"zev commit "Same thing, without -m"If nothing is staged, zev says so and makes no commit. A good message says what changed and why, in a few words.
Shows the lines that changed: + added, - removed, with a little unchanged text around each change.
zev diff [file | folder] your changes that aren't staged yetzev diff --staged [file] what the next commit will containzev diff <commit> [<commit>] [-- file] between commitszev diffzev diff todo.txtzev diff --stagedzev diff HEAD~3 HEAD # what the last three commits changedzev diff v1.0 main -- src # between a tag and a branch, only in srcLists commits, newest first: the ID, author, date and message.
zev log [--oneline] [-n <count> | --all] [<commit or branch>]zev log # the last 10zev log --oneline # one line eachzev log -n 30zev log --allzev log feature # the history of another branchShows one commit and the changes it made. Without a commit it shows the newest one.
zev showzev show 5f7f5e22 # the first characters of an ID are enoughzev show HEAD~1 # the commit before the newestzev show v1.0 # a tagNaming commits. Everywhere zev asks for a commit, you can write HEAD (the commit you're on), HEAD~2 (two before it), a branch name, a tag name, or the start of a commit ID (at least 4 characters).
Undoes changes to files.
zev restore <file | folder | .>... throw away your changes: back to the last commitzev restore --staged <file | folder | .>... unstage: keep your changes, leave them out of the next commitzev restore todo.txt # undo my edits to todo.txtzev restore . # undo all my edits (careful!)zev restore old.txt # bring back a deleted filezev restore --staged notes.md # take notes.md out of the next commitChanges you throw away with zev restore were never committed, so they can't be brought back. If you might want them later, use zev stash instead.
Deletes a tracked file and stages the deletion for the next commit.
zev rm [--cached] [--force] <file | folder>...zev rm old.txtzev rm build # a whole folderzev rm --cached secrets.env # stop tracking it, but keep the filezev refuses to delete a file with changes that aren't committed, so you don't lose work by accident. --force deletes it anyway. --cached is what you want when you committed something by mistake (add it to .zevignore too).
Puts your uncommitted changes aside and gives you a clean folder (back to the last commit). Later, you bring them back.
zev stash [save [message]] put changes asidezev stash list see themzev stash pop [id] bring back the newest (or that one) and delete itzev stash apply [id] bring it back and keep itzev stash drop [id] delete itzev stash save "half-done search box"zev checkout main # do something elsezev checkout featurezev stash popStashes include staged and unstaged changes to tracked files. Untracked files stay where they are. zev stash pop won't overwrite a file you changed after stashing; it tells you which file is in the way.
A branch is a separate line of work. You can try something on a branch without touching main, then merge it in when it's ready. See Branches and merging for the full story.
Lists branches (* marks the one you're on), makes one, or deletes one.
zev branch # listzev branch new-search # make it (you stay where you are)zev branch -d new-search # delete itSwitches to another branch and updates your files to match it.
zev checkout <branch> [--force]zev checkout -b <new-branch>zev checkout new-searchzev checkout -b new-search # make it and switch to it, bringing your changes alongzev never overwrites your uncommitted work: if switching would replace a changed file, it changes nothing and names the file. Commit or stash first. --force throws your changes away and switches.
The same as zev checkout, by the name some people expect. zev switch -c <new-branch> makes a branch and switches to it.
Brings the commits of another branch into the one you're on.
zev merge <branch>zev merge <branch> --resolve when both changed the same lineszev merge --continue | --abortzev checkout mainzev merge new-searchIf the branches don't overlap, zev combines them by itself. If both changed the same lines, it stops without changing anything and suggests --resolve, which marks both versions in the file:
<<<<<<< mainthe line as it is on main=======the line as it is on new-search>>>>>>> new-searchEdit the file to keep what you want, delete the marker lines, then zev add <file> and zev merge --continue. zev merge --abort puts everything back as it was. Step by step.
Replays the commits of the branch you're on on top of another branch, as if you had started from its latest commit.
zev rebase mainIf it stops because both changed the same lines, run zev merge main --resolve instead: it does the same replay and lets you combine the lines by hand.
Copies one commit from anywhere onto the branch you're on.
zev cherry-pick 47bec4f5Gives a commit a name that doesn't move, usually a release.
zev tag [list] list tagszev tag <name> tag the current commitzev tag -a <name> -m <message> a tag with a message and authorzev tag -d <name> delete a tagzev tag v1.0zev show v1.0Signs this computer in to Zaryn (or another zev server). You do this once per computer.
zev login <server> --register <username> --email <address> make an account (an emailed code confirms it)zev login <server> --register <username> --code <123456> finish, if you closed the terminalzev login <server> --device [--client <name>] approve in your browser (existing accounts, servers, agents)zev login <server> sign in again with this project's identityzev login zaryn.xyz --register sara --email sara@example.comzev login zaryn.xyz --deviceThe token is saved in ~/.config/zev/credentials, readable only by you.
Shows the server and account you're signed in as.
Forgets the saved sign-in on this computer. The token itself keeps working until you revoke it on Zaryn (Settings → AI agents and tokens).
Creates the current project on Zaryn and connects it as origin. It asks for a name, the kind of project (code, model, dataset, agent or topology), public or private, and a license.
zev newzev pushSends your commits to a remote. With nothing after it, it sends the branch you're on to origin.
zev push [remote] [branch]zev pushzev push origin feature-xzev push me/project mainLarge files only send the parts that changed. In encrypted repositories, files are encrypted on your computer before they're sent.
Gets new commits from a remote and updates your files to match.
zev pull [remote] [branch]zev pullzev pull origin mainIf updating would overwrite a file you changed, zev changes no files and names the file. The new commits are still saved; commit or stash, then zev checkout <branch>.
Manages remotes, the named addresses of other copies of the repository.
zev remote # listzev remote add upstream team/projectzev remote show upstreamzev remote remove upstreamOpens a pull request from the branch you're on. zev drafts the title and description from your commits, shows them, and asks before opening.
zev pr [--title <t>] [--desc <d>] [--target <branch>] [--yes]zev pr list | view <number> | merge <number>zev checkout -b fix-typozev commit -m "Fix a typo in the README"zev pushzev prSee Collaboration from the terminal.
Opens and manages issues (bug reports, ideas, tasks).
zev issue [--title <t>] [--desc <d>]zev issue list [--all] | view <number> | comment <number> | close <number>Makes your own copy of someone's repository on Zaryn, to change freely and send back with a pull request.
zev fork-repo someone/project --clone--as <name> names the copy differently; --clone also clones it to your computer.
Turns on CI for a repository and shows recent runs.
zev ci enablezev ci statusRuns an MCP server so an AI agent (Claude Code, Codex and others) can use Zaryn through zev. See Scripting and AI agents.
claude mcp add zaryn -- zev mcpShows, for each line of a file, the commit and author that last changed it.
zev blame src/login.jsFinds the commit that broke something by halving the history: you mark commits good or bad, and zev picks the next one to test.
zev bisect startzev bisect bad # the current commit is brokenzev bisect good 5f7f5e22 # this older one worked# test what zev checks out, then mark it: zev bisect good / zev bisect badzev bisect reset # doneSearches commits, experiments, metrics, lineage and snapshots.
zev search commits loginzev search all "learning rate"Puts two commits, branches, snapshots or experiments side by side.
zev compare branches main featureJoins this computer to one of your team's private networks (Premium): devices reach each other directly and privately, through NATs, over WireGuard. See Private networks.
sudo zev net up <owner>/<network> join (runs in the background)sudo zev net down [<network>] leave for now (--forget to leave for good)zev net status peers, connections, trafficzev net ls networks you're inzev net map [<owner>/<network>] who reaches whom, and what one failure would costzev net share <port> [--name web] share an app on this device with the networkzev net config <owner>/<network> a config file for WireGuard's own apps (phones)Makes this machine the collector of a site: it reads the site's routers and switches over SSH with read-only commands (Cisco IOS / IOS-XE, Huawei VRP, MikroTik RouterOS, FRRouting, VyOS) for config backups and drift, the live map, the address plan and Path Explain, and runs the site's probes. Passwords stay on the collector. See Network sites, Path Explain and probes and Digital twin.
zev site join <token> [--server URL] make this machine the site's collectorzev site cred add <name> --user <user> [--key <file>] [--enable]zev site cred ls · zev site cred rm <name> the logins kept on this collectorzev site test <address> [--cred <name>] [--vendor cisco|huawei|mikrotik|frr|vyos] [--config]zev site discover <range>… which addresses answer on SSH, and what they arezev site probe ping|tcp|http|dns <target> [--port N] [--expect X] run a probe from here, as the service doeszev site diff <owner>/<site> <device>=<file>… [--drills] [--json] what a config change would do, before it's made (exits 1 if traffic would break)sudo zev site install run the collector as a servicezev site status this collector and its deviceszev site forget-key <address> after a device's SSH key changed on purposeEncrypts a private repository's files on your devices, so Zaryn stores only data it can't read. See Encrypted repositories.
zev encrypt [status | on | share | recovery | unlock | approve <fingerprint> | rotate]Checks, with cryptographic proofs instead of trust, that the server really stores everything from your last push. See Verified storage.
zev verify-storageDeclares commits compromised (for example a poisoned dataset or a leaked key), so owners of everything built on them are told. See Advisories and lineage.
zev advisory file | list | show <id> | refresh | withdraw <id> | ack <id> | verify <id> | feedShows which advisories reach a repository. zev taint check is a CI gate: it fails while an unresolved advisory applies.
zev taintzev taint check --fail-on highShows (and creates the first time) this repository's signing key.
zev sign <cid> signs an object with your identity; zev verify <cid> checks a signature.
Anchors the hash of a snapshot or commit on a blockchain, as public proof that it existed at that time.
zev notarize snapshot <name> | commit <id> | verify <record> | list | configPrints a full provenance report for the repository.
zev eval catches regressions in any project; the rest tracks the things ML projects care about, next to the code.
Runs your tests, builds, benchmarks or eval, finds the numbers (test results, coverage, timings, bundle, binary and firmware sizes, frame times, model scores), records them for this commit on Zaryn and tells you at once whether a pull request into main would be blocked. Exits 1 when a metric got worse than its tolerance (in its units or a percentage, like 5%), so it works as a CI step too. See Evals and lineage.
zev eval init # once: detects Rust, JS/TS, Go, Zig, C/C++, PlatformIO, Godot, Unity, Python; saves zev-evals.jsonzev eval init -- python eval.py # or start from your own commandzev eval run # before every pull request, or in CIzev eval report junit.xml lcov.info # results files you already havezev eval # this commit next to mainzev eval compare main my-branchzev eval badge binary # Markdown for your READMERecords numbers (accuracy, loss, latency…) with commits, and compares them.
zev metrics set accuracy 0.913zev metrics showzev metrics compare <commit-a> <commit-b>A regression gate for CI: exits with an error if a metric got worse than the thresholds allow.
zev checkSets the limits zev check enforces.
zev threshold set accuracy --min 0.9zev threshold listShows a metric's trend over the commits, as a small chart.
zev history accuracyA semantic diff: changed metrics, and structural code changes (renamed functions, changed signatures) instead of only lines. See Semantic diffing.
Tracks a hypothesis from start to result.
zev experiment start <name> [description] | list | show <name> | complete <name> | abandon <name> | compare <a> <b>Registers datasets, splits them into shards, and records which shards were used where, so you know what a bad shard affected.
zev dataset register <path> --name <n> | split <n> --shards <k> | assign | lineage <n> | impact <n> --shard <i> | listRecords what was made from what: data, scripts, models.
zev lineage record <trained_on|fine_tuned_from|evaluated_on|derived_from|uses> <owner/repo[@commit]>zev lineage upstreamzev lineage add <id> <type> <description> | link <child> <parent> | show <id> | list | graph | provenance <cid>record and upstream work on Zaryn: what this repository came from, and whether that changed since. The rest keeps a graph inside this repository only.
Records whether a change came from a person or an AI model, and with what prompt.
zev context add src/parser.py --model claude --kind llmzev context blame src/parser.pyCompares model weight files (.safetensors, PyTorch, NumPy) tensor by tensor.
zev wdiff base.safetensors tuned.safetensorsMerges two checkpoints: average, weighted, SLERP or TIES.
zev merge-weights a.safetensors b.safetensors --output merged.safetensors --strategy slerp --alpha 0.5Notices when metrics drift away from a baseline.
zev drift baseline <snapshot or commit> | config --metric <m> --delta <d> | check | show | history | watchCaptures a command and its output, and later checks that it reproduces within a tolerance.
Named snapshots of the repository's state, optionally permanent.
zev snapshot create <name> | list | show <name> | restore <name> | diff <a> <b>Lists lineage that Zaryn inferred from model weights ("this model looks fine-tuned from that one"), for you to accept or dismiss.
These are for special setups and tooling. You won't need them for everyday work.
| Command | What it does |
|---|---|
zev hook list | add <type> <script> | remove <type> | run scripts before or after commit, push, merge (pre-commit, post-commit, pre-push, post-merge, commit-msg) |
zev gc | remove objects that nothing refers to any more |
zev export <file> / zev import <file> / zev archive-info <file> | the repository (or a snapshot) as a single archive file |
zev publish commit | experiment | snapshot | config | publish to a configured endpoint |
zev ipfs status | add | cat | pin | unpin | block-put | block-get | block-stat | talk to a local IPFS node |
zev ipns key-gen | publish | resolve | announce | IPNS names |
zev peer status | announce | listen | connect | sync | sync with peers directly over libp2p |
zev dag show | walk | put | stat | query | export | import | get | the content-addressed graph, directly |
zev ipld migrate | log | IPLD commits |
zev graft <cid> --as <name> | link an outside CID under a readable name |
zev fedmerge --from <file.car> | merge work from a .car file, no server needed |
zev fork <meta-cid> <folder> | fork from an IPFS metadata CID |
zev fetch-range <hash> <start> <len> | part of a server object, checked against its hash |
zev cat <cid> / zev hash <data> | read an object / compute a CID |
zev verify-release <url> <cid> / zev verify-sth <url> | check the server's transparency log |
zev push-api / zev pull-api / zev clone-api | the server versions of push, pull and clone; zev push, zev pull and zev clone pick them for you |
zev self update # update zev (the download's signature is checked)zev self update --check # only say whether there's a newer versionzev self uninstallIf zev came from a package manager (apt, dnf, zypper, pacman), update it there instead; zev self update tells you which command to use.
Sends zev's own connections (sign-in, clone, push, pull, updates, private networks) through a proxy of yours, and if you like every app (share, system, ssh, run) or the whole computer (zev vpn), for networks that block the way to Zaryn: VLESS, VMess, Trojan, Shadowsocks, Hysteria2 and WireGuard (through the Xray engine), SOCKS5 or HTTP, or a provider's subscription. Several servers at once with failover, chains, and routes for what goes direct. See Using zev through a proxy.
zev proxy start ['<link>'] [--tun] [--kill-switch] everything on in one go (apps, desktop, VPN with --tun)zev proxy stop everything off againzev proxy is it on, and through which serverzev proxy add <name> [<link>] [--use] save a proxy (no link: paste it, out of shell history)zev proxy use <name> | off go through it, or directly againzev proxy use <a>,<b> | auto | <sub> a pool: the fastest 3 run, switching when one stops answeringzev proxy probe [<name>|auto] time every server at once and rank themzev proxy chain <name> <a> <b> [<c>…] reach <b> through <a>; use it by its namezev proxy route [direct|proxy|rm <route>… | iran | clear] what goes direct (example.com, CIDR, geoip:ir)zev proxy test [<name>] connect through it and time the way to Zarynzev proxy doctor [<name>] [--no-fix] [--json] find what blocks the way and fix what zev can (per network)zev proxy set [forget | dns|ipv4|fragment|fp …] the network's fixeszev proxy ls | status | rm <name>zev proxy engine install install Xray (needed for all but socks5:// and http://; SHA-256 checked)zev proxy sub add <name> <url> a subscription: all its servers, named <name>-1, -2 …zev proxy sub update [<name>] | ls | rm <name>zev proxy config <name> the Xray config zev runs for it (holds its secrets)zev proxy share on [--port N] [--lan] | off | status one SOCKS5+HTTP port (127.0.0.1:10808) for every appzev proxy system on | off the desktop's proxy setting and new sessions' http_proxy, all_proxy…zev proxy ssh [<host>…] | off SSH (git push to GitHub…) through the proxyzev proxy connect <host> <port> a connection on stdin/stdout (SSH's ProxyCommand)zev proxy run <command…> one command through it (HTTP, HTTPS, SOCKS, git over SSH)zev proxy check where you appear from; DNS and IPv6 leakszev proxy top [--once] live traffic of the shared port or the VPNAll of this computer's traffic through the proxy you chose with zev proxy use: every program, its DNS and IPv6, on Linux. See the whole computer: zev vpn.
sudo zev vpn on [--kill-switch] [--exclude <name|ip/cidr>,…] start it (a system service)sudo zev vpn off stop it; routes, rules and firewall table removedzev vpn statusPoints pip, uv, npm, cargo and rustup at Zaryn's mirrors, which check every file against the hash the tool already knows. See Mirrors.
zev mirror what is set up, tool by toolzev mirror on [cargo npm pip uv rustup] switch them to Zaryn (all by default)zev mirror off [...] back to their own servers (only zev's lines are removed)zev mirror zig [--check|--undo] this project's build.zig.zon through the mirror (--check: download and check every dependency now)zev --version prints the version and the system it was built for.
zev help lists every command; zev help <command> shows how to use one. Typos get a suggestion (zev comit → did you mean zev commit).