nerd runs your shells and coding agents side by side in panes and tabs, inside the terminal you already use. Its sidebar shows which agent is working, which is waiting for you and which has finished.
- See which agent needs you. nerd recognises Claude Code, Codex, Gemini CLI, Copilot CLI, Cursor, OpenCode, Qwen Code, pi and 13 other agents by their process name. With nerd's hook, those eight report their exact state, and most name the tool they ask to run; the others are read from what they print. nerd shows that an agent is asking; the answer stays yours, in the agent.
- Decide what each pane can reach. A pane runs as you, with your files and your network, until you narrow it. Isolation… keeps a pane to its folder, to the hosts of the agents you choose, or to another macOS account. Messages between agents pass through nerd, under fixed limits and routes that only you change. A plugin shows what it can do before you install it.
- See every way out of nerd's own code. No telemetry, and no update checks on its own. The server runs in a macOS sandbox with networking denied. Every way out of nerd's own code is listed in What leaves nerd, starts from something you do or approved, and writes a line to the log.
- A file tree beside the panes. It shows git changes, searches file contents, and previews files with highlighting and images.
Panes live in a background server. Close the window or restart the Mac, and the layout, folders and pane text come back; agents that support it resume their sessions. Every action is in a right-click menu; keys only repeat them.
curl -fsSL https://nerdterm.dev/install.sh | shThe script downloads the latest release, checks its checksum, installs nerd into ~/.local/bin and, if that folder is not on your PATH, adds it in ~/.zshrc. Run it again to upgrade. NERD_BINDIR installs somewhere else. To install an archive you already have, run sh install.sh nerd-….tar.gz with its .sha256 file beside it; without one the script refuses unless NERD_INSTALL_UNVERIFIED=1 is set.
Build from source
git clone https://github.com/nerdterm/nerd.git
cd nerd
cargo build --release
install -m 755 target/release/nerd ~/.local/bin/nerd
codesign --force --sign - ~/.local/bin/nerdUse install, not cp: macOS caches code signatures by inode and kills a binary overwritten in place.
cd ~/code/my-project
nerd- Right-click a pane and choose Split right or Split down.
- Start an agent in a pane, for example
claude. The sidebar shows its state. When it finishes or asks you something, it moves up into needs you. - Click ≡ at the top of the sidebar for the main menu: the file tree, new spaces, settings, plugins and the rest.
- Right-click a pane and choose Isolation… to limit what its program can reach.
- Close the window whenever you like.
nerd --resumebrings it back.
For exact states, install nerd's hook from Settings… → Agent hooks, or run nerd --install-hook. It goes into every supported agent whose config folder exists. Before it writes into an agent for the first time, it shows the agent, its settings file and the command it resumes with, and asks. When an agent's resume command changes, a restored pane stops typing it until you confirm it again with nerd --install-hook. When nerd starts, it brings a hook an older nerd installed up to date; it never adds one to an agent you did not hook.
| Agent | Config | States and needs you | Subagents | Resumes after a restart with |
|---|---|---|---|---|
| Claude Code | ~/.claude/settings.json |
Yes, with the tool it asks for | Rows with their tools and runs | claude --resume=<id> |
| Codex | ~/.codex/hooks.json |
Yes, with the tool it asks for; no failed calls | Rows, without a task | codex resume <id> |
| Qwen Code | ~/.qwen/settings.json |
Yes, with the tool it asks for | Rows with their tools | qwen --resume <id> |
| Copilot CLI | ~/.copilot/hooks/nerd.json |
Yes, with the tool it asks for | Rows only; the general-purpose subagent does not report | copilot --resume <id> |
| OpenCode | ~/.config/opencode/plugins/nerd.js |
Yes | Child sessions as rows | opencode --session <id> |
| pi | ~/.pi/agent/extensions/nerd.js |
Yes, when an extension asks you something (a permission gate) | None: its helpers are separate pi -p runs |
pi --session <id> |
| Gemini CLI | ~/.gemini/settings.json |
Yes, with the tool it asks for | None: it reports no subagents | gemini --resume <id> |
| Cursor | ~/.cursor/hooks.json |
Yes; it asks no permission nerd can see | Rows only: their tools count as the agent's | Does not resume: starts fresh |
A click on a subagent in the sidebar opens its tool calls beside the agent. A restored pane types only a resume command you confirmed.
Other agents are recognised by name, and their state is read from what they print. It can lag, be wrong, or miss "waiting for you".
Each agent is described by a manifest, plugins/<name>/plugin.json in the source. To add another agent without a new nerd, put its manifest in ~/Library/Application Support/nerd/plugins/<name>/plugin.json and choose Reload plugins and agents in the main menu. Such a manifest adds its hook to a JSON config under ~/.<name> or ~/.config/<name> and never replaces a file. A manifest that breaks a rule, or names a built-in agent, is skipped, and the log says why.
- macOS. nerd relies on macOS for its sandbox, clipboard, sounds, image conversion and login item. Linux and Windows are planned by the maintainer; pull requests for them are not accepted.
- Apple Silicon for the prebuilt binary. Intel Macs can build from source; this is not tested.
- Any terminal with mouse support and 24-bit colour.
- Full-quality image previews need a terminal with the Kitty graphics protocol (Ghostty, Kitty, WezTerm). Elsewhere they are drawn in coloured blocks, and nerd says so under the image.
- To build from source: Rust 1.88 or newer.
- nerd is early software (0.x). Configuration and behaviour may change between releases.
- The binary is not notarized by Apple. The installer removes the download quarantine; for an archive downloaded by hand, run
xattr -d com.apple.quarantine nerd. - The installer adds
~/.local/bintoPATHin~/.zshrconly. With another shell, add it yourself. - Inside tmux or screen, image previews fall back to coloured blocks: neither passes a graphics protocol on. nerd offers to open itself in a new window of the same terminal instead.
- Exact agent states come from the hook, for the supported agents. For other agents the state is read from their output: it can lag, be wrong, or miss "waiting for you".
- After a restart, pane text and layout come back; running processes do not. Pane text is lost if the server is killed with
kill -9or the Mac loses power.
- Usage: the mouse, the keys, every command, and updating in place.
- Isolation: what a pane may read, write and reach, per pane, tab or space.
- Messages: names, routes, limits, and how each agent receives a message.
- Plugins: installing plugins from Plugins…, what a plugin can do and read (most of your files, and the command lines and environments of your other programs), and writing one.
- Configuration: every key in config.json.
- Privacy and security: how nerd works, what it stores, every way out of nerd, and what a program in a pane can do.
- Troubleshooting: common problems and their fixes.
- Uninstall: removing nerd and everything it added.
- Menus, settings and windows: the rules every menu and window follows.
Bug reports are welcome. Pull requests are accepted only for issues the maintainer has marked as accepted. Read CONTRIBUTING.md first.
Report security issues privately; see SECURITY.md.
MIT.
