>_ DevTrendsen

Language

Home

Languages

Sections

Frontend Backend Mobile DevOps AI / ML GameDev Blockchain Embedded Security
TypeScript

nodeterm turns a mess of terminal tabs into an infinite canvas

Any developer who tries running autonomous AI agents like Claude Code or Codex in parallel with regular services quickly runs into the same problem. A dozen tabs in iTerm or Warp turn into a mess. It's unclear where tests failed, which branch is being edited in the background, and which terminal is waiting for command confirmation.

nodeterm interface

The nodeterm project offers a different take on the workspace. Instead of linear tabs or splits, it uses an infinite canvas where each terminal lives as a separate, movable node.

What's inside the canvas

The core idea is simple: give spatial orientation to your workflows. You can group backend, frontend, and background agent into one cluster, and stick a note with task reminders right next to them.

Canvas with nodes

A node here isn't just a terminal. You can place on the canvas:

  • Full terminal sessions based on xterm and tmux
  • AI agent cards (Claude Code, Copilot, Gemini, Grok)
  • Monaco code editor with quick-save support
  • Git diff viewer and web page preview windows
  • Text sticky notes that can be linked to agents for context sharing

Sessions don't get lost when you close the window or restart the system. Under the hood, the app maintains a real tmux session. On macOS, the client ships with a built-in tmux binary, so you don't need to install it separately.

Monitoring agents without output parsing

When an agent spends a long time writing code or running tests, it's easy to forget to check its status. nodeterm tracks state through system hooks rather than parsing text output.

Agent statuses

If a process needs user confirmation, the card lights up with a NEEDS YOU badge and a native notification pops up. On MacBooks, the status of active agents even shows up in the notch area.

An interesting detail: agents inside the app can interact with the canvas through a built-in CLI. For example, one agent can create an adjacent node to run tests or check another agent's build artifacts.

Kanban board from live sessions

Pressing Cmd+Shift+B switches the canvas to Kanban board mode. Each card on the board remains a working terminal session.

Kanban board

You drag a card from the "In Progress" column to "Review", open it in a modal window, and directly answer the agent's question about the code. Two-way sync with GitHub Issues is also supported: tasks are pulled onto the board and change status when moved.

Access from your phone and server mode

The app isn't limited to a desktop Electron client. The architecture is split into an independent core and transports, which is why nodeterm works in three formats.

Mobile connection

  1. Desktop application for macOS and Linux.
  2. Server Edition. The same canvas runs on a remote server without a graphical shell and opens in a regular browser via WebSockets.
  3. Mobile client on iOS. You scan a QR code on the monitor screen, and the session is forwarded to your phone with end-to-end encryption. You can step away for coffee and answer agent prompts on the go.

Voice input directly into the shell

nodeterm has a local Whisper model built in. If you hold Cmd+Alt (Ctrl+Alt on Linux) and dictate a long instruction, the audio is processed right on your CPU.

Voice dictation

Text isn't sent to the terminal automatically. First you see the recognized result, edit it manually if needed, and only then press send. Audio data doesn't go anywhere over the network.

Architecture and stack

The client is written in TypeScript using Electron and the React Flow library as the canvas engine.

Developers extracted PTY, git, and agent operations into a CorePlatform interface. The Electron process and the server Node process implement the same interface. Thanks to this, the web version isn't a stripped-down port—it uses literally the same renderer interface.

The project is distributed under the Business Source License 1.1 (BUSL-1.1). Source code is open for personal and production use, but prohibits creating a competing paid service based on nodeterm. Four years after each version's release, the code automatically switches to pure MIT.

How to try it

On macOS, the easiest way to install the app is via Homebrew:

brew tap nodeterm/tap
brew trust nodeterm/tap
brew install --cask nodeterm

For Linux, pre-built AppImage and .deb packages are available on the repository releases page.

If you want to run a headless server on a remote machine, you only need Node.js 22 and tmux:

git clone https://github.com/eneskirca/nodeterm.git
cd nodeterm
npm install
npm run server:dev

After startup, the web interface will be waiting for you at http://127.0.0.1:8443.

Who will find nodeterm useful

The tool is primarily aimed at developers who keep dozens of parallel tasks open, work with git worktrees, or actively delegate chunks of code to command-line AI agents. If you're more comfortable with a classic minimalist terminal taking up half the screen, the spatial canvas might seem excessive. But if you're tired of getting lost in endless tabs and tmux windows, nodeterm's visual approach might bring order to your mind.

Related projects