https://github.com/user-attachments/assets/fb6ee0de-a5ce-437c-b2a3-d354081ca727
You have more passion projects than hours in the day. And now, with coding agents, you can finally build them all, at the same time.
But the work scatters. Plans get lost in terminal scrollback. What's left to do lives in your head. And every project pulls you away from the last.
snyvi keeps it all in order. It is a desktop app with one desk for each project — its folder, and up to four agents side by side, each in its own panel — and everything your agents write, kept where you can read it: rendered, filed under its project, and searchable with everything else that ever arrived.
One small app, on your own machine. Nothing to configure, nothing to sign in to, and nothing leaves your computer.
Install
One line, on Linux or macOS. It picks the right path for the machine it is on, checks every download against its published checksum, and connects Claude Code if it finds it:
curl -fsSL https://mrova.rocks/snyvi/install.sh | sh
It is short enough to read first. Run it again to update. By hand, or on Windows:
Windows: scoop install snyvi after scoop bucket add snyvi https://github.com/snymrova/scoop-snyvi, or download
snyvi-windows-x64-setup.exe and double-click it. Either way it
connects Claude Code (if you have it); the installer also opens snyvi.
(Windows warns that the installer isn't signed: More info → Run anyway.)
macOS:
brew install --cask snymrova/snyvi/snyvi
snyvi init-claude --auto
Without Homebrew, download Apple silicon or Intel.
Debian / Ubuntu (most Linux desktops — Intel or AMD, so x64):
curl -LO https://github.com/snymrova/snyvi/releases/latest/download/snyvi-linux-x64.deb
curl -LO https://github.com/snymrova/snyvi/releases/latest/download/snyvi-app-linux-x64.deb
sudo dpkg -i snyvi-linux-x64.deb # snyvi itself: the daemon, the CLI, the MCP server
sudo apt install -y ./snyvi-app-linux-x64.deb # the window, which desks need — apt, so webkit resolves
snyvi init-claude --auto
snyvi app
On an ARM machine — a Raspberry Pi, an ARM server — swap x64 for arm64 in
both file names. uname -m tells you which you are on: x86_64 is x64,
aarch64 is arm64.
The second package is the one to notice. snyvi runs in your browser without it, and desks do not run at all — a browser tab is not allowed to start a process on your machine, so the panels are refused there and the sidebar says so. It is about 4 MB, it is the only piece that links a browser engine, and it adds to snyvi rather than replacing it.
Any other Linux: snyvi-linux-x64.tar.gz
(arm64) — one static binary, nothing to install. The window is
snyvi-app-linux-x64.deb (arm64) on a Debian-based
system, or built from source elsewhere.
Cargo, on anything with a Rust toolchain: cargo install snyvi builds
the daemon, the CLI and the MCP server from crates.io — everything
but the window, which links a browser engine and is
built separately.
Every file above is on the latest release with a .sha256 beside it.
Updating is installing the newer version the way you installed the old
one — the one-liner again, brew upgrade, scoop update snyvi,
cargo install snyvi, the newer .deb or installer — and then, on Linux,
snyvi restart so the daemon picks it up. The install guide
has every platform in full.
A desk for each project
A desk is a project's folder with real shells in it: up to four panels in
a fixed grid, rooted where the work is, in the same window as everything the
work produces. Open a folder and press its +, right-click it, or ask the
palette for New desk here.
A panel is a shell, so it runs what a shell runs: Claude Code, Codex, the
tests the plan asks for, a git log. The picture above is four Claude Code
sessions on one project, each on its own part of it, with the rail beside them
listing who is working and what they have sent.
Nothing a document contains is ever typed into a panel. There is no "run this block" and no fan-out to four shells: the shells are yours, and what an agent wrote reaches them only when you type it. Desks need the desktop window, because a browser tab cannot be allowed to start a process on your machine; a tab says so where the desks would be. How it works.
Nothing scrolls away
When an agent writes a plan or a review, it doesn't vanish up the terminal. It lands on the desk under Documents, marked with the panel that wrote it, and opens as a clean page over the desk — the agents still listed beside it, still working.
A document arrives and nothing moves. It joins a queue — a row in the
sidebar, a mark in the tree, a count in the bar above what you are reading —
and n opens the next one when you are ready for it.
Markdown, tables, Mermaid diagrams, and source in eighty-odd languages, each
rendered once on receipt and served already made. A diagram is its own
viewport: ⌘/Ctrl + scroll zooms toward the cursor, a drag pans, f fills the
screen and 0 fits it back. Code arrives highlighted, with its functions and
types in the rail.
Filed, and kept
Every document files itself by project, in one inbox, without being asked:
Project the sender's working directory, by its git root
└── Workflow one agent session, named after the first document it sent
└── Document immutable, rendered once, kept with every other version of itself
Documents are never edited in place. When an agent revises a plan it sends it
again, and both are kept: c shows exactly what changed, and every snapshot
of that file — across every session, from every agent — is listed in the rail.
Both names in the tree are guesses, so both can be corrected in place, and
nothing underneath moves when you do. Del deletes, and the row it leaves
behind offers it back for eight seconds, as does ⌘/Ctrl Z. Nothing here is
unrecoverable except snyvi reset, which asks you to type the number of
documents before it agrees.
A folder is a first-class thing too: snyvi browse ., or the row under
Folders, reads a directory as it is on disk — nothing copied, nothing
imported — with the same highlighting, the same outline and the same /.
Out of your head
Each desk keeps its own notes, so what's left to do stays with the project, not in your head. Add one from the rail, tick it off when it is done, and it is still there, struck through, the next time you sit down at that desk.
Agents get a line of their own as well: a note is 280 characters at the foot of the sidebar, for the sentence that is not a document — the statements spike came out yes.
Just as you left it
Move between projects and each desk is exactly as you left it: its panels, its documents, its notes. The agents on the desk you walked away from keep working, and the sidebar's dot says so. The layout survives a restart; the processes do not, because a daemon that respawned eight shells at login is a daemon nobody leaves running.
⌘K / Ctrl+K finds anything, across all of them: every document every
agent has ever sent, full text, code included. p:project and
kind:md|code|diff|text narrow it.
Any agent
Claude Code, Codex, Cursor, Gemini, or anything that speaks MCP: snyvi mcp
is a plain stdio MCP server, and each agent is one command.
snyvi init-claude --auto # Claude Code, and every Markdown file it writes
snyvi init codex # also: cursor, claude-desktop, gemini, windsurf, vscode, zed
snyvi init # every agent at once, and what each already has
Leave out --auto and Claude sends only when it decides to, or when you ask.
The viewer says the same thing from the inside: an empty library is a page of
agents — connected, not set up, or pointing at a binary that has moved — each
with the line that fixes it.
The channel goes one way. Agents send; snyvi shows. Nothing here can be read back by an agent.
From a terminal, the same thing without an agent:
snyvi send PLAN.md # open a file (or stdin) and print its link
snyvi watch PLAN.md # and again every time it is saved
snyvi app # open the window
snyvi status # what is running and what is connected
Private, and fast
One static binary and one small window, on your own machine. The daemon
listens on 127.0.0.1 only: no account, no hosted mode, no telemetry. It is up
11 ms from cold, a send takes about 13 ms, and snyvi bench --check fails a
push that misses any budget (numbers).
Keys
⌘K / Ctrl+K searches everything · n opens the next new document · c
compares with the previous version · / finds inside what you are reading ·
t and \ hide the rail and the sidebar · ? lists every key there is.
Update and remove
Install the new version the way you installed the old one: the one-liner
again, brew upgrade, scoop update snyvi, cargo install snyvi, or the
newer .deb or installer. Those first three restart the daemon for you;
after a .deb, run snyvi restart. To remove snyvi: snyvi uninstall-claude, then uninstall it the way you
installed it. Your documents are kept until you run snyvi reset.
More
- Guide: every platform, command, agent and key.
- Desks: the model, the caps, and what a browser tab is kept out of.
- Roadmap: what shipped, and why.
- The film: how the demo above is shot, voiced and cut.
MIT licensed.