illogical

Terminals that outlive
the window, the daemon and the reboot.

illogical is a multiplexer you drive with the mouse. A daemon owns your terminals; the browser on your desktop or your phone draws the tabs and splits. Close it, crash it, reboot: your work is where you left it.

curl -fsSL https://illogical.widgets.wtf/install.sh | sh

Linux (x86_64, arm64) and macOS (Apple silicon). Free and open source, MIT or Apache-2.0.

illogical in a browser: an editor, a test run and a git log in three panes, with tabs along the top

Mouse first. No prefix key.

Tabs and splits are ordinary things you click, drag and right-click. Drag a tab onto a pane's edge to split it there, drag a divider to resize, right-click for everything else.

Each finished command gets a mark in the gutter, green or red. Click one to select its output, right-click to copy it or run it again.

The right-click menu on a pane: split, move, restart policy and more

Durable, honestly.

Processes don't survive a reboot. Everything else does:

  • Every pane's output is on disk as it happens, and its screen is checkpointed. The layout is saved on every change.
  • After a crash or a reboot each pane comes back with its scrollback and does what you told it: a shell where it was, re-run its command, or run claude --continue.
  • On Linux, restarting or upgrading the daemon doesn't touch running programs at all. vim keeps its screen; a build keeps building.
Panes after the daemon was killed: their scrollback is back, marked restored, with a fresh prompt

Agents as blocks, beside your terminals.

Run Claude Code, Codex or any ACP agent as a UI instead of a TUI: its messages, every command it runs with the output, and the cost of each turn.

When it wants to run something, or has a question, you get a card: Approve, Always, Deny, or pick an answer. It waits as long as it takes, survives a daemon restart, and the first answer from any screen wins.

An agent block beside a shell: a failing test run, an edit, a passing run, and a card asking to approve a git commit

On your phone, over your tailnet.

The same live layout on every window you open and on your phone, reached over Tailscale. Only you get in: the daemon asks Tailscale who's calling.

A pane that rings, a long command that finishes, an agent that needs you: you get a push notification, and tapping it opens the pane. Approve a command or answer a question with your thumb.

The phone view of an agent asking which approach to take, with three answers as buttons The phone's sheet: what needs you, then every tab and pane

A CLI for scripts and agents.

illogical works from any shell and inside every pane. Run things, type into panes, wait for a command or a line of output, tail, and search every pane's history.

The same calls are an HTTP API on a Unix socket.

$ illogical run --wait -- cargo build     # a new tab; exits with its code
$ illogical send %3 'git status' -e       # type a line, press Enter
$ illogical wait %3 --match 'listening on'
$ illogical tail %3 -f --text
$ illogical search 'panic|Traceback' --since 1d
$ illogical agent "fix the failing test"
$ illogical wait %5 --needs-input        # it asks…
$ illogical call %5 approve               # …you answer

Install

One line

curl -fsSL https://illogical.widgets.wtf/install.sh | sh

Downloads the release for your machine, checks it, and starts the daemon as a service (systemd on Linux, launchd on macOS). Run it again to upgrade.

Homebrew

brew tap jhgaylor/tap \
  https://git.inevitable.fyi/jhgaylor/homebrew-tap
brew install illogical
illogicald install

macOS and Linux.

From source

git clone https://git.inevitable.fyi/jhgaylor/illogical
cd illogical
just bootstrap && just install

Needs Rust, mise, just and pnpm. Details.

Then open http://127.0.0.1:7681. From your phone and other machines, put it behind Tailscale: tailscale serve --bg --https=443 http://127.0.0.1:7681. The quickstart covers the rest, and advanced setup covers throwaway VMs per tab, dev servers beside their terminals, more machines, and iTerm2 as a tmux client.