Quick start

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 --resume brings it back.

Supported agents

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.

AgentConfigStates and needs youSubagentsResumes after a restart with
Claude Code~/.claude/settings.jsonYes, with the tool it asks forRows with their tools and runsclaude --resume=<id>
Codex~/.codex/hooks.jsonYes, with the tool it asks for; no failed callsRows, without a taskcodex resume <id>
Qwen Code~/.qwen/settings.jsonYes, with the tool it asks forRows with their toolsqwen --resume <id>
Copilot CLI~/.copilot/hooks/nerd.jsonYes, with the tool it asks forRows only; the general-purpose subagent does not reportcopilot --resume <id>
OpenCode~/.config/opencode/plugins/nerd.jsYesChild sessions as rowsopencode --session <id>
pi~/.pi/agent/extensions/nerd.jsYes, when an extension asks you something (a permission gate)None: its helpers are separate pi -p runspi --session <id>
Gemini CLI~/.gemini/settings.jsonYes, with the tool it asks forNone: it reports no subagentsgemini --resume <id>
Cursor~/.cursor/hooks.jsonYes; it asks no permission nerd can seeRows only: their tools count as the agent'sDoes 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.

Edit on GitHub