nix run github:andrewgazelka/tap
Terminal session manager for tiling WM users. Detach and reattach to sessions without the overhead of tmux.
If you use a tiling window manager (i3, Sway, Aerospace, yabai), you already have window tiling. Running tmux means two competing systems: tmux tiles inside the terminal, your WM tiles windows. This creates:
- Conflicting keybindings (is
Ctrl+bfor tmux or your WM?) - Nested navigation (WM to window, then tmux to pane)
- Redundant concepts (tmux panes vs terminal windows)
But tmux has one killer feature: session persistence. You can detach from a running process and reattach later. That's worth the overhead for some people.
tap gives you session persistence without the tiling overhead.
tap # start a session
# ... run your dev server ...
# close the terminal (or press Ctrl+\ to detach)
tap attach # reattach from any terminalYour window manager handles tiling. tap handles persistence. No conflicts.
- Detach/Attach - Close your terminal, reattach later
- Background sessions - Start processes that outlive your terminal
- Scrollback capture - Access terminal output programmatically
- AI integration - Claude Code can see and control tap sessions
- Zero config - Works out of the box, no
.tmux.confrequired
tap # start interactive session
tap start htop # run a command in a new session
tap list # list active sessions
tap attach [session] # reattach to a session
tap detach # detach from current session (or Ctrl+\)
tap scrollback [session] # get terminal output
tap inject "ls" [session] # type into a sessionAdd to ~/.config/ghostty/config:
command = tap
Now every new terminal window is automatically a tap session.
| Feature | tmux | screen | abduco | tap |
|---|---|---|---|---|
| Session persistence | yes | yes | yes | yes |
| Window/pane tiling | yes | yes | no | no |
| Config complexity | high | medium | low | none |
| Keybind conflicts with WM | yes | yes | minimal | minimal |
| Scrollback API | no | no | no | yes |
| AI tool integration | no | no | no | yes |
flowchart LR
subgraph tap
PTY[PTY Master]
SB[Scrollback Buffer]
Sock[Unix Socket]
end
Shell[Shell/Command] <-->|stdin/stdout| PTY
PTY --> SB
PTY --> Sock
Client[tap client] <-->|JSON| Sock
Claude[Claude Code] --> Client
MIT