Terminal-native command center for AI agents.
Install · Quick start · Agent messaging · Supported agents · Configuration · Docs
Run Claude, Codex, Pi, and other coding agents in real terminal panes — tmux-style workspaces, tabs, and splits — then let them message each other over a native, persisted bus. Detach and the agents keep running; reattach from anywhere. See every agent's state at a glance — blocked, working, done — and search the whole conversation history later.
zynk is a single Rust binary that lives in the terminal you already use. It isn't a web dashboard, an Electron shell, or a screenshot wrapper around someone else's view: you see each agent's own terminal, with a coordination layer on top.
Running many agents in terminals is powerful, and it turns chaotic fast — panes scattered across windows, no clear "who's blocked", handoffs lost in scrollback, no shared memory or protocol between them.
zynk gives the terminal that missing coordination layer:
- Workspaces, tabs, and panes that persist across detach and full restart.
- Agent awareness — a sidebar that shows what every agent is doing right now.
- A native message bus — agents address each other by pane, with honest delivery state and a persisted, searchable history.
- Real terminal workspaces — workspaces (per repo or folder), tabs, and panes that are actual processes, not rewritten agent views.
- Agent awareness — blocked / working / done / idle, detected from process names and output, no hooks required.
- Native agent messaging —
zynk send/reply/thread/inbox/query. - Persistent conversation store — every message in a global SQLite DB, retrievable by keyword and meaning.
- Detach / reattach + restore — pane processes survive client detach; sessions restore panes after a full restart, with opt-in recent screen history.
- Integrations — official agent hooks add native session identity and semantic state reporting.
- Mouse-native throughout, 18 built-in themes, keyboard copy mode, and sound/toast notifications.
Install with Homebrew, download a prebuilt binary, use Nix, or build from source.
Homebrew (macOS and Linux):
brew install dzevs/tap/zynkThis installs the prebuilt v3.0.0 binary from GitHub Releases; on Linuxbrew the binary is glibc-dynamic and needs glibc ≥ 2.30.
Prebuilt binary (without Homebrew) — Linux x86_64 (glibc ≥ 2.30):
curl -LO https://github.com/dzevs/zynk/releases/download/v3.0.0/zynk-v3.0.0-linux-x86_64.tar.gz
curl -LO https://github.com/dzevs/zynk/releases/download/v3.0.0/SHA256SUMS
sha256sum --ignore-missing -c SHA256SUMS
tar -xzf zynk-v3.0.0-linux-x86_64.tar.gz && install -m 755 zynk ~/.local/bin/zynk
zynk --versionTargets: linux-x86_64, linux-aarch64 (GNU/glibc dynamic, glibc ≥ 2.30), macos-x86_64,
macos-aarch64, windows-x86_64 — always verify against SHA256SUMS.
Note
The macOS and Windows binaries are unsigned. On macOS, clear the quarantine
(xattr -dr com.apple.quarantine ./zynk); on Windows, use SmartScreen's "More info → Run anyway".
Nix:
nix run github:dzevs/zynkBuild from source — needs Rust (stable), Zig 0.15.2 (the bundled libghostty-vt is built with Zig),
and network access during the build (the Zig build fetches libghostty-vt's package dependencies; offline
builds aren't supported yet). cargo install zynk builds the same 3.x crate from source under the same
requirements. See DEVELOPMENT.md.
git clone https://github.com/dzevs/zynk && cd zynk
cargo build --release --locked
./target/release/zynkStart zynk where the work lives:
zynkzynk starts or attaches to one background session server and opens a workspace. Run an agent in the root pane.
The prefix is ctrl+b:
ctrl+bthenshift+n— new workspacectrl+bthenv/minus— split panesctrl+bthenc— new tab ·ctrl+bthenw— switch workspacesctrl+bthenq— detach (the server and pane processes keep running; runzynkagain to reattach)
This is zynk's net-new layer on top of the multiplexer. Agents send each other plain-text messages; zynk attaches structured protocol metadata, prepends a visible awareness header, persists every message to a global SQLite store, tracks honest delivery state, and lets agents retrieve past messages by keyword and meaning.
zynk send <target> <text> [--type review|approve|…] # resolve target → atomic submit, persisted
zynk reply <target> <text> # parent auto-derived; no --reply-to
zynk thread <conversation> # read-only: walk a conversation
zynk inbox # read-only: messages addressed to you
zynk who # live agents / panes in the session
zynk query <text> [--workspace|--conversation|--agent|--since|--limit] # hybrid retrievalDesign guarantees (binding):
- Honest delivery. Send results distinguish
draftedandsubmitted; delivery events later advance toreceivedthrough the server-authoritativezynk.message_receivedevent, or tofailedon delivery failure. zynk never collapses these states —receivedcomes from the receiving integration's event, never from screen scraping or a socket ACK. A receiver without the zynk integration stays atsubmitted. - Body purity. The message body is pure text; all provenance (identity, workspace/tab, branch,
git_sha, cwd) plus zynk's protocol IDs persist as structured metadata, indexed apart from the body. - Structured responses. No silent success and no bare
ok— mutating commands return a structured response (stable JSON for automation plus concise human text) withresult, the relevant ids, delivery state, and anexthint. Read commands (query/thread/inbox/status) default to human text, with--jsonfor the structured form. - Read-only retrieval.
query/thread/inboxopen the DB read-only (PRAGMA query_only=1) and write zero delivery events.queryis hybrid: FTS5 keyword (BM25) + on-device embeddings via sqlite-vec, fused with RRF.
Agents can drive zynk over the same local Unix socket — create workspaces, split panes, spawn helpers, read
output, wait for state changes, and message each other. Start with SKILL.md.
| tmux | gui managers | zynk | |
|---|---|---|---|
| persistent sessions | ✓ | — | ✓ |
| detach / reattach | ✓ | — | ✓ |
| panes, tabs, workspaces | ✓ | ✓ | ✓ |
| agent awareness | — | ✓ | ✓ |
| lives in your terminal | ✓ | — | ✓ |
| real terminal views | ✓ | — | ✓ |
| mouse-native | — | ✓ | ✓ |
| agents can orchestrate | ? | ? | ✓ |
| native agent-to-agent messaging | — | — | ✓ |
| persisted + retrievable conversation | — | — | ✓ |
tmux gives you persistence and panes, but predates agents. GUI managers show agent state, but they make you leave your terminal for their wrapped view. zynk is persistence, awareness, and a native multi-agent conversation layer in one tool that stays out of your way.
Automatic detection works out of the box — process-name matching plus terminal-output heuristics.
| agent | idle / done | working | blocked |
|---|---|---|---|
| pi | ✓ | ✓ | partial |
| claude code | ✓ | ✓ | ✓ |
| codex | ✓ | ✓ | ✓ |
| droid | ✓ | ✓ | ✓ |
| amp | ✓ | ✓ | ✓ |
| opencode | ✓ | ✓ | ✓ |
| grok CLI | ✓ | ✓ | ✓ |
| github copilot CLI | ✓ | ✓ | ✓ |
| qodercli | ✓ | ✓ | ✓ |
| cursor agent · antigravity CLI · kimi code CLI · kilo code CLI · hermes agent | ✓ | ✓ | ✓ |
| kiro CLI | ✓ | ✓ | — |
Detected but not fully tested: gemini CLI, cline. For agents outside the list, zynk still works as a terminal
multiplexer; custom integrations can report agent labels over the socket API. Install official integrations
with zynk integration install <agent> (claude, codex, copilot, droid, pi, opencode, and more).
Press ctrl+b to enter prefix mode; default actions are prefix-first and tmux-like.
| key | action | key | action | |
|---|---|---|---|---|
prefix+c |
new tab | prefix+shift+n |
new workspace | |
prefix+n / p |
next / previous tab | prefix+shift+g |
new worktree | |
prefix+1..9 |
switch tab | prefix+v / minus |
split pane | |
prefix+w |
workspace navigation | prefix+x |
close pane | |
prefix+h/j/k/l |
focus pane | prefix+z |
zoom pane | |
prefix+shift+h/j/k/l |
swap pane | prefix+b |
toggle sidebar | |
prefix+g |
session navigator | prefix+q |
detach |
Mouse works throughout. For copy: drag-select inside a pane, or prefix+[ for keyboard copy mode (v to
select, y to copy, q to leave).
zynk separates config from data:
- Config:
~/.config/zynk/config.toml(override the path withZYNK_CONFIG_PATH). - Data: the global conversation SQLite DB at
~/.zynk/zynk.db(override the data home withZYNK_HOME, or the DB directory withZYNK_SQLITE_HOME).
zynk --default-config # print the full default configIf a database from an earlier build already occupies ~/.zynk/zynk.db, zynk fails closed rather than
overwrite it, and points you at the explicit zynk db adopt/backup/import action.
Note
Auto-update and update channels stay fail-closed until release-manifest hosting exists, so zynk update
doesn't fetch yet. Update with brew upgrade dzevs/tap/zynk, a newer release binary, Nix, or a source
rebuild — then stop the old server (zynk server stop) so the new binary takes effect.
SKILL.md— reusable agent skill for driving zynk over the socketAGENTS.md— how co-author / reviewer agents work in this repoCLAUDE.md— project guide for the implementer (architecture, commands, conventions)DEVELOPMENT.md— build, run, and test from sourceCONTRIBUTING.md— how to contribute ·CODE_OF_CONDUCT.md
Contributions are welcome through GitHub issues and pull requests. Read CONTRIBUTING.md
first, build from source with DEVELOPMENT.md, and run just check before opening a PR. If
you're an AI agent working on this repo, read AGENTS.md before making changes.
zynk is a fork of herdr, a terminal workspace manager by ogulcancelik and the herdr contributors. zynk keeps herdr's terminal-multiplexer foundation and adds a net-new multi-agent conversation layer (global persistence, structured protocol metadata + a visible message header, honest delivery, and hybrid retrieval).
zynk is distributed under the GNU Affero General Public License v3.0 or later (AGPL-3.0-or-later); the fork
preserves that license unchanged. Upstream copyright notices and the AGPL license are preserved — see
LICENSE and NOTICE.
- Copyright © ogulcancelik and the herdr contributors (upstream herdr).
- Copyright © 2026 Zevs <hi@zevs.gg> — the zynk fork and its additions.
The zynk crate on crates.io (the 2.x line) was a separate, now-retired protocol/helper CLI (MIT). This native
terminal app continues the name at the 3.x line under AGPL-3.0-or-later — a different, new product. New
zynk-layer code is AGPL-3.0-or-later as part of the combined work; per AGPL, complete corresponding source is
available with any conveyed or network-served build.
