gi-dellav/multistack

Open source lightweight TUI for parallel agent management

15

stars

77

commits

Rust

primary language

Sep 7, 2026

updated

gi-dellav.github.io/multistack/

README

banner

Multistack

Run multiple zerostack agents side by side in your terminal, allowing to spawn, watch, rename, kill all underlying processes.

Multistack is designed to be a native, lightweight and open-soruce competitor to Conductor.

What it does

  • Spawn parallel agents: each one gets its own PTY, running zerostack --parallel under the hood
  • Live status tracking: see at a glance who's working [~], done [✓], dead [X], or waiting [ ], with per-agent timers
  • Drop into any agent: hit Enter on a process to see its full terminal output, keystrokes pass straight through
  • Status signal support: multistack listens for start/stop signals from zerostack via Unix sockets, so timers and indicators stay accurate even across headless loop iterations

Install

brew tap gi-dellav/tap
brew trust gi-dellav/tap   # required for Homebrew 6.0.0+
brew install multistack    # zerostack installed automatically

Script

curl -fsSL https://raw.githubusercontent.com/gi-dellav/multistack/main/install.sh | bash

Cargo

cargo install multistack

You need zerostack on your PATH, plus a recent Rust toolchain.

Keybindings

Agent list (normal mode)

KeyAction
nSpawn new agent — prompts for a name, creates a git worktree
NSpawn new agent in parallel mode — no prompt, jumps straight to TTY
mSpawn bare agent — no worktree, no --parallel, jumps to TTY
pAdd project — opens directory picker
lRemove project and all its agents
hOpen lazygit in the project (or agent worktree) directory
sOpen $SHELL in the project (or agent worktree) directory
rRename selected agent
dDelete (kill) selected agent
EnterDrop into the selected agent's TTY
/ Move selection
PageUp / PageDownJump to previous / next project header
? / F1Scrollable help overlay (keybindings, statuses, tips)
qQuit — shows confirmation with agent counts (Enter quits, Esc/n stays)
EscQuit (confirmation; git conflicts get a warning)

TTY view (agent / lazygit / shell)

KeyAction
EscReturn to agent list
All other keysForwarded to the underlying process

Prompt (new agent / rename / new project)

KeyAction
EnterConfirm
EscCancel
BackspaceDelete last character
Printable charsAppend to input

Directory picker

KeyAction
EnterAdd selected directory as a project
EscCancel, return to agent list
/Start filtering directories (type to narrow, Esc to clear)
All other keysNavigate the file tree

Requirements

  • Linux/BSD/macOS (uses Unix domain sockets and PTYs)
  • zerostack v1.5+ built with the status-signals feature (default from v1.5)
  • Rust 1.85+ (2024 edition)

License

GPL-3.0-only

Contributors

gi-dellav

77 commits

gi-dellav/multistack

Open source lightweight TUI for parallel agent management

15

stars

77

commits

Rust

primary language

Sep 7, 2026

updated

gi-dellav.github.io/multistack/

README

banner

Multistack

Run multiple zerostack agents side by side in your terminal, allowing to spawn, watch, rename, kill all underlying processes.

Multistack is designed to be a native, lightweight and open-soruce competitor to Conductor.

What it does

  • Spawn parallel agents: each one gets its own PTY, running zerostack --parallel under the hood
  • Live status tracking: see at a glance who's working [~], done [✓], dead [X], or waiting [ ], with per-agent timers
  • Drop into any agent: hit Enter on a process to see its full terminal output, keystrokes pass straight through
  • Status signal support: multistack listens for start/stop signals from zerostack via Unix sockets, so timers and indicators stay accurate even across headless loop iterations

Install

brew tap gi-dellav/tap
brew trust gi-dellav/tap   # required for Homebrew 6.0.0+
brew install multistack    # zerostack installed automatically

Script

curl -fsSL https://raw.githubusercontent.com/gi-dellav/multistack/main/install.sh | bash

Cargo

cargo install multistack

You need zerostack on your PATH, plus a recent Rust toolchain.

Keybindings

Agent list (normal mode)

KeyAction
nSpawn new agent — prompts for a name, creates a git worktree
NSpawn new agent in parallel mode — no prompt, jumps straight to TTY
mSpawn bare agent — no worktree, no --parallel, jumps to TTY
pAdd project — opens directory picker
lRemove project and all its agents
hOpen lazygit in the project (or agent worktree) directory
sOpen $SHELL in the project (or agent worktree) directory
rRename selected agent
dDelete (kill) selected agent
EnterDrop into the selected agent's TTY
/ Move selection
PageUp / PageDownJump to previous / next project header
? / F1Scrollable help overlay (keybindings, statuses, tips)
qQuit — shows confirmation with agent counts (Enter quits, Esc/n stays)
EscQuit (confirmation; git conflicts get a warning)

TTY view (agent / lazygit / shell)

KeyAction
EscReturn to agent list
All other keysForwarded to the underlying process

Prompt (new agent / rename / new project)

KeyAction
EnterConfirm
EscCancel
BackspaceDelete last character
Printable charsAppend to input

Directory picker

KeyAction
EnterAdd selected directory as a project
EscCancel, return to agent list
/Start filtering directories (type to narrow, Esc to clear)
All other keysNavigate the file tree

Requirements

  • Linux/BSD/macOS (uses Unix domain sockets and PTYs)
  • zerostack v1.5+ built with the status-signals feature (default from v1.5)
  • Rust 1.85+ (2024 edition)

License

GPL-3.0-only

Contributors

gi-dellav

77 commits

Languages

Rust

97.6%

Shell

1.2%