JoakimCarlsson/pandemonium

Yet another text editor you don't need. GPU-native, opinionated, and built for conducting coding agents in their own git worktrees.

Rust

2

299 commits

updated Sep 30, 2026

See the code

See what people are saying

SourceMessageScoreDate

I got tired of babysitting AI agents in terminals, so I wrote my own text editor (r/SideProject)

I wrote a text editor. Yes, another one. I know. It started back in May as wasa-cli, a tmux-based thing for running AI agents in their own git worktrees. That worked well enough that I wanted a real GUI for it, so I built one just for me. Then a colleague started using it too, which is how…

1

Sep 30, 2026

README

pandemonium

Yet another text editor you don't need.

An agent's diff with review comments on it, ready to send back to the agent

There are already plenty of good ones. This one exists because I wanted an editor shaped exactly like the way I work, and it is quite opinionated about it. If your workflow looks like mine, you might like it. If it doesn't, Zed, Neovim and VS Code are all excellent and considerably more finished.

How I work, and therefore how this works

I rarely write code alone anymore. Most days I have a few agents running at once, each in its own git worktree, across a couple of repositories, and my job is less typing and more reading what they did, steering them, and deciding what gets merged. Every editor I tried treated that as a terminal bolted to the side of the real work. pandemonium treats it as the real work.

  • Several projects, one window. Repositories are peers in the same window, each with its own branch, file tree, language servers and tasks. Panes, tabs and the palette span all of them.
  • A session is a worktree you review. Starting an agent cuts a fresh worktree and branch. Its files, its diff and its conversation are browsable the same way your own working copy is. You review a session, you don't babysit a terminal.
  • Agents speak ACP. Claude Code, Codex, Gemini, GitHub Copilot and Cursor are driven over the Agent Client Protocol, confined to their own worktree, asking permission through the editor.
  • Everything is a pane. Files, diffs, agent sessions and terminals are the same kind of thing: splittable, tabbable, closable. No bespoke docks.
  • Vim, properly. Modal editing modelled on Zed's vim mode, driven by a binding table: motions, text objects, operators, registers, ., macros, visual block, multi-cursor and the ex command line.
  • Source control that you can actually read. A Source Control sidebar, a lane-coloured commit graph, and review diffs highlighted with tree-sitter and semantic tokens.
  • A debugger in the bottom panel. Breakpoints in the gutter, a call stack, variables and a console beside Problems and Terminal, over the Debug Adapter Protocol with gdb, lldb-dap, debugpy or delve. Your existing .vscode/launch.json or .zed/debug.json is read as it is; F5 starts or continues.
  • GPU-native. Rendered with wgpu, windowed with winit, with a UI layer written from scratch. No web view, no Electron, no UI framework.

Codex asking to run clippy, beside the file it just edited

A Rust file with rust-analyzer hints and the outline pane

Status

Early, moving fast, and built for an audience of one. Things will break, defaults reflect my preferences, and features appear in the order I need them. Linux is the daily driver; macOS and Windows build in CI and should work, but get less love.

Installing

Prebuilt binaries for Linux, macOS and Windows are attached to each release.

curl -fsSL https://raw.githubusercontent.com/JoakimCarlsson/pandemonium/main/install.sh | sh
irm https://raw.githubusercontent.com/JoakimCarlsson/pandemonium/main/install.ps1 | iex

Set PANDEMONIUM_VERSION to pin a release. The script checks the download against the release's SHA256SUMS, puts the binary in ~/.local/bin, and adds a launcher entry on Linux or Pandemonium.app in ~/Applications on macOS.

Building

You need a recent stable Rust toolchain (edition 2024) and a GPU that wgpu is happy with. Agents are fetched with npx on first run, so Node helps too.

git clone https://github.com/JoakimCarlsson/pandemonium.git
cd pandemonium
make run

Other targets:

make fmt     # cargo fmt --all
make lint    # cargo clippy --workspace --all-targets -- -D warnings
make install # build this checkout and install it as pandemonium-preview
             # (on macOS also as ~/Applications/Pandemonium.app)
make release VERSION=0.2.0   # bump, tag and push; CI builds and publishes

Layout

One crate per layer, each depending only on the ones below it.

CrateWhat it is
pm-coreProjects, sessions and worktrees: the domain, knowing nothing of a UI.
pm-acpAgents over the Agent Client Protocol: the process and its protocol.
pm-gfxGPU device, surface, glyph atlas and draw list. The only wgpu code.
pm-textRope storage, syntax trees and the language-server client.
pm-dapDebug adapters over the Debug Adapter Protocol, and launch scenarios.
pm-vtTerminal emulation: parser, cell grid, scrollback.
pm-vimModal editing over a pm-text buffer.
pm-uiElement tree, layout, hit testing, focus and input routing.
pandemoniumThe binary: event loop, window, pane tree and keymap.

The rules the codebase lives by are in AGENTS.md.

Contributing

Issues, ideas and pull requests are all very welcome. It started as a personal tool, so if a change heads somewhere I hadn't planned, let's talk it through in an issue first. And if you'd rather take it in your own direction, forks are more than welcome too.

License

MIT

agent-client-protocol
ai-agents
claude-code
code-editor
coding-agents
git-worktree
gpu
lsp
rust
terminal-emulator
text-editor
tree-sitter
vim
wgpu
winit

JoakimCarlsson/pandemonium

Yet another text editor you don't need. GPU-native, opinionated, and built for conducting coding agents in their own git worktrees.

Rust

2

299 commits

updated Sep 30, 2026

See the code

See what people are saying

SourceMessageScoreDate

I got tired of babysitting AI agents in terminals, so I wrote my own text editor (r/SideProject)

I wrote a text editor. Yes, another one. I know. It started back in May as wasa-cli, a tmux-based thing for running AI agents in their own git worktrees. That worked well enough that I wanted a real GUI for it, so I built one just for me. Then a colleague started using it too, which is how…

1

Sep 30, 2026

README

pandemonium

Yet another text editor you don't need.

An agent's diff with review comments on it, ready to send back to the agent

There are already plenty of good ones. This one exists because I wanted an editor shaped exactly like the way I work, and it is quite opinionated about it. If your workflow looks like mine, you might like it. If it doesn't, Zed, Neovim and VS Code are all excellent and considerably more finished.

How I work, and therefore how this works

I rarely write code alone anymore. Most days I have a few agents running at once, each in its own git worktree, across a couple of repositories, and my job is less typing and more reading what they did, steering them, and deciding what gets merged. Every editor I tried treated that as a terminal bolted to the side of the real work. pandemonium treats it as the real work.

  • Several projects, one window. Repositories are peers in the same window, each with its own branch, file tree, language servers and tasks. Panes, tabs and the palette span all of them.
  • A session is a worktree you review. Starting an agent cuts a fresh worktree and branch. Its files, its diff and its conversation are browsable the same way your own working copy is. You review a session, you don't babysit a terminal.
  • Agents speak ACP. Claude Code, Codex, Gemini, GitHub Copilot and Cursor are driven over the Agent Client Protocol, confined to their own worktree, asking permission through the editor.
  • Everything is a pane. Files, diffs, agent sessions and terminals are the same kind of thing: splittable, tabbable, closable. No bespoke docks.
  • Vim, properly. Modal editing modelled on Zed's vim mode, driven by a binding table: motions, text objects, operators, registers, ., macros, visual block, multi-cursor and the ex command line.
  • Source control that you can actually read. A Source Control sidebar, a lane-coloured commit graph, and review diffs highlighted with tree-sitter and semantic tokens.
  • A debugger in the bottom panel. Breakpoints in the gutter, a call stack, variables and a console beside Problems and Terminal, over the Debug Adapter Protocol with gdb, lldb-dap, debugpy or delve. Your existing .vscode/launch.json or .zed/debug.json is read as it is; F5 starts or continues.
  • GPU-native. Rendered with wgpu, windowed with winit, with a UI layer written from scratch. No web view, no Electron, no UI framework.

Codex asking to run clippy, beside the file it just edited

A Rust file with rust-analyzer hints and the outline pane

Status

Early, moving fast, and built for an audience of one. Things will break, defaults reflect my preferences, and features appear in the order I need them. Linux is the daily driver; macOS and Windows build in CI and should work, but get less love.

Installing

Prebuilt binaries for Linux, macOS and Windows are attached to each release.

curl -fsSL https://raw.githubusercontent.com/JoakimCarlsson/pandemonium/main/install.sh | sh
irm https://raw.githubusercontent.com/JoakimCarlsson/pandemonium/main/install.ps1 | iex

Set PANDEMONIUM_VERSION to pin a release. The script checks the download against the release's SHA256SUMS, puts the binary in ~/.local/bin, and adds a launcher entry on Linux or Pandemonium.app in ~/Applications on macOS.

Building

You need a recent stable Rust toolchain (edition 2024) and a GPU that wgpu is happy with. Agents are fetched with npx on first run, so Node helps too.

git clone https://github.com/JoakimCarlsson/pandemonium.git
cd pandemonium
make run

Other targets:

make fmt     # cargo fmt --all
make lint    # cargo clippy --workspace --all-targets -- -D warnings
make install # build this checkout and install it as pandemonium-preview
             # (on macOS also as ~/Applications/Pandemonium.app)
make release VERSION=0.2.0   # bump, tag and push; CI builds and publishes

Layout

One crate per layer, each depending only on the ones below it.

CrateWhat it is
pm-coreProjects, sessions and worktrees: the domain, knowing nothing of a UI.
pm-acpAgents over the Agent Client Protocol: the process and its protocol.
pm-gfxGPU device, surface, glyph atlas and draw list. The only wgpu code.
pm-textRope storage, syntax trees and the language-server client.
pm-dapDebug adapters over the Debug Adapter Protocol, and launch scenarios.
pm-vtTerminal emulation: parser, cell grid, scrollback.
pm-vimModal editing over a pm-text buffer.
pm-uiElement tree, layout, hit testing, focus and input routing.
pandemoniumThe binary: event loop, window, pane tree and keymap.

The rules the codebase lives by are in AGENTS.md.

Contributing

Issues, ideas and pull requests are all very welcome. It started as a personal tool, so if a change heads somewhere I hadn't planned, let's talk it through in an issue first. And if you'd rather take it in your own direction, forks are more than welcome too.

License

MIT

agent-client-protocol
ai-agents
claude-code
code-editor
coding-agents
git-worktree
gpu
lsp
rust
terminal-emulator
text-editor
tree-sitter
vim
wgpu
winit

Languages

Rust

99.3%