Skip to content

The Modern Terminal for all your machines

The Terminal
Reinvented for Modern Work

Work on one machine or an entire fleet, locally or remote. Agent friendly. Tailscale secure access built in.

$ brew install alto soon
Star on GitHub Read the docs

macOS · Linux · Windows  ·  built on libghostty


    
api · keeping awake

try it Close the window. Answer the agent that needs you.

01 · A better terminal

Your work survives the window, and tells you when it needs you.

Sessions outlive the window

Each tab's session is its own background process. Quit the app, update it or let it crash: your build, your server or your agent carries on, and the tab comes back where it was, scrollback included. After a reboot, each tab shows its last screen and a Run again button that resumes the Claude Code or Codex conversation.

# the app quit an hour ago
$ alto ls
1  48211  2h  working  claude
2  48230  2h  done     codex
3  48262  1h  idle     pnpm dev

See what needs you

Every tab carries a mark: a ring while it's busy, a yellow dot when it needs you (a prompt, a question, a bell), green when it's done. A notification finds you while you're elsewhere, so nothing sits waiting unnoticed. Coding agents are first-class: with alto hooks install, Claude Code and Codex report exactly what they're doing.

api infra web dev
Allow claude to run terraform plan?
1 Yes   2 No

No compromises as a terminal

Use it as your everyday terminal, not a second app for agents. It's fast and correct because it's built on libghostty, and images, the Kitty keyboard protocol, native selection and search all just work, with no tmux layer in between mangling them.

  • libghostty
  • tabs + splits
  • profiles
  • Kitty keyboard
  • Sixel
  • search
  • zsh · bash · fish

Humans and agents, one terminal

Watch it work. Take the keyboard whenever.

Talk to Claude Code in one pane. It runs its commands in a work pane beside it, a real terminal you can see and type into, here or on another machine.

  1. See every command it runs. ⌘⇧K opens a work pane beside the agent, and its commands run there in front of you, not hidden in a transcript.
  2. The agent gets clean results. alto run -- cargo test hands back just the output and exit status, so it doesn't misread a screen or wait on the wrong thing.
  3. Step in any time. Type there whenever you like: the agent waits until you've stopped. ⌘⇧P pauses agents in that pane until you say so.

Prefer tools to shell commands? claude mcp add alto -- alto mcp gives the agent run, wait, read_screen and more. How work panes work

claude · conversation

> the build is slow again, find out why

● Bash(alto run -- cargo build --timings)
  ⎿ Compiling aws-sdk-s3 v1.4.0 …
    Finished dev in 48.2s

● Most of it is aws-sdk rebuilding on every change. The dev profile's default features pull it in.

work pane · zsh

~/src/api $ cargo build --timings typed by claude
   Compiling aws-sdk-s3 v1.4.0
   Compiling api v0.9.2
    Finished dev in 48.2s
      Timing report saved
~/src/api $ ▌

02 · Your whole fleet

Every server you run, one terminal away.

Build boxes, GPU servers, cloud VMs, the machines in your homelab rack: each one becomes a device with one command. Open a tab on any of them, script all of them, and see in one list what's waiting on you, and on which machine.

  • Add a machine in a minute

    Setup is one command, alto setup, and needs nobody at the machine. Put it in cloud-init, an image or a container and every new machine arrives ready.

  • New machines show up on their own

    Trust a Tailscale tag (tag:gpu), a person or a whole domain once, and every machine carrying it is yours to open tabs on. No pairing machine by machine; short-lived VMs join and leave by themselves.

  • Never miss what's waiting on you

    alto waiting asks every device you reach and lists every session waiting on a person (a prompt, a question, an agent asking permission), newest first. Answer from wherever you are.

  • Any machine, a tab away

    Work on any machine as if it were local: open a tab there from the + menu, marked with the machine's name in its own color, or drive it from a script with --on gpu-1.

cloud-init · a GPU box joins itself

runcmd:
  - tailscale up --authkey=… --advertise-tags=tag:gpu
  - curl -fsSL -o /usr/local/bin/alto $ALTO_URL
  - su - agent -c 'alto setup --trust "*@example.com"'
$ alto --on gpu-1 new -- claude
4
$ alto --on gpu-1 ls
1  9120  5h  working    claude
2  9188  5h  needs-you  codex
4  9311  1s  working    claude
$ alto waiting
# everything waiting on you, on every machine, newest first
Running Alto on many machines

03 · Tailscale built in

Secure remote access from anywhere in the world.

Your sessions are reachable from a café, a train or the other side of the world, over Tailscale's encrypted network. No ports to open, no SSH server to run, nothing listening where the internet can find it.

  your laptop, anywhere          your phone (planned)
          │                              │
          │   encrypted, device to device, by Tailscale
          ▼                              ▼
  ┌─────────────────── your tailnet ───────────────────┐
  │                                                    │
  │   studio        gpu-1         build-2       nas    │
  │   ● 4 sessions  ● 6 sessions  ● 2 sessions  ● 3    │
  │                                                    │
  └────────────────────────────────────────────────────┘
     nothing listens on the LAN or the internet
  • Nothing exposed to the internet. Alto listens only on your private Tailscale network, never the LAN or the public internet, so there's no port for anyone to find.
  • Your own devices just work. Signed in to the same Tailscale account, they're trusted with no setup. Share with someone else by pairing their device once with a six-digit code, and revoke it any time.
  • Can't be fooled by an impostor. Each device has its own key and must prove who it is before any code or token is sent to it.
  • Works on bad connections. On hotel wifi or a train, you see the current screen at once instead of waiting on a backlog. A dropped tab reconnects by itself, and your session never notices.
  • From your phone, next. Planned · Phase 6
    Native iPhone and Android apps: read the output, answer a prompt, approve a step.

Reliable by design

Built so nothing you start dies by accident.

Crash isolation

Every session runs on its own. If a program or a tab crashes, everything else keeps going.

Update without losing work

Alto updates seamlessly in the background without disrupting your running sessions.

The same session, from anywhere

Open a session in the app, in any other terminal, from your laptop across the world, or hand it to a script or an agent. Everyone sees the real, live screen, not a copy.

   Alto app      alto command      another computer
        │                   │                    over Tailscale
        │      local socket │                         │
        ▼                   ▼                         ▼
   ┌──────────────────────────────────────────────────────────┐
   │ server: finds sessions, starts them, pairs devices,      │
   │ keeps the computer awake, passes remote clients through  │
   └──────────────────────────────────────────────────────────┘
        │ starts            │                         │
        ▼                   ▼                         ▼
   ┌──────────┐        ┌──────────┐              ┌──────────┐
   │ session 1│        │ session 2│      …       │ session N│
   │ terminal │        │ terminal │              │ terminal │
   │ state    │        │ state    │              │ state    │
   └────┬─────┘        └────┬─────┘              └────┬─────┘
        ▼                   ▼                         ▼
     claude               zsh                       codex

How it's built

  • A process per session. Each session owns its program's terminal and a full copy of its state in libghostty: screen, scrollback, modes. That's why one crash stays one crash.
  • A server that holds nothing it can't rebuild. It only routes, so it can restart or be replaced while sessions keep running. It starts at login, so your sessions are there before you open the app.
  • Every client is equal. The app, alto attach, a script and another machine attach the same way and draw the real terminal state, so nothing is a degraded view.
  • Status from signals, never screen-scraping. Marks come from the bell, notifications, progress, shell integration and agent hooks, so they don't break when a tool changes how it looks.
The full architecture

Why not just…

A better approach than what came before.

iTerm2, Ghostty, Terminal, Windows Terminal

Tabs in a regular terminal

The Old Way

Sessions die with the window.

The Alto Way

Sessions outlive the window, updates and crashes, and every tab shows what needs you.

tmux, Zellij, screen

tmux or Zellij inside a terminal

The Old Way

A second emulator between you and the program.

The Alto Way

No middle layer: you see exactly what the program draws, with native scrolling, selection and search.

ssh, mosh, Blink, Termius

SSH or mosh, with tmux

The Old Way

Open ports on the internet and manual key management.

The Alto Way

Tailscale on each device and nothing else: no SSH server, no keys to manage, no ports to open.

ttyd, port forwards, tunnel services

A web terminal or tunnel

The Old Way

A public port becomes your security boundary.

The Alto Way

Nothing listens outside your private network, and every device has to prove who it is.

agent dashboards, IDE agent panes

Agent managers and IDE agent panels

The Old Way

Tied to one app, often one agent.

The Alto Way

Any program and any agent, in a terminal you'd use anyway.

hosted agents, each vendor's remote control

Agents in the cloud

The Old Way

Your code leaves your machine.

The Alto Way

Everything runs on your own machines, reachable securely from anywhere.

Small on purpose

Stays out of your way

  • No repo, worktree or browser panels. The tools you have already manage those.
  • No planner or scheduler of its own. You and your agents decide the work.
  • No environment templates to write before you can start. Any machine you already have is enough.
  • No lock-in: any program, any agent, any tab.

Honest costs

What it asks of you

  • It's a terminal of its own, not a layer over yours (though alto attach works inside any terminal).
  • Reaching other machines needs Tailscale on each one.
  • Rules, single sign-on and an audit log for organizations aren't built yet.
  • It's early. macOS is used daily; Linux and Windows are checked less.

Status

What's built, and what's next

Built

  • The terminal: tabs, splits, profiles, themes, search, images, Kitty keyboard
  • Sessions that outlive the window, and come back after a reboot
  • Agent status, marks and notifications; work panes and alto mcp
  • Other devices over Tailscale: tabs, the command line, pairing, device keys
  • Fleets: alto setup, trust by tag, one queue across devices
  • Updates that keep sessions running

Next

  • Agents that run agents Planned · Phase 7
    A boss session hands tasks to others and hears back, with every brief and result kept on disk.
  • Phone apps Planned · Phase 6
    Native iPhone and Android clients.

Later

  • Groups, placement, rules and audit for fleets Planned · Phase 9
  • Agents in a box, per session Planned · Phase 7
  • Homebrew and packages Soon
  • Open source, most likely GPL-3.0 Planned · Phase 8

You and your agents, on every machine, securely, from anywhere.