



Horizon is a GPU-accelerated terminal board that puts all your sessions
on an infinite canvas. Workspaces group related panels. Presets launch them.
The command palette jumps you there. Close the app — the board is still there tomorrow.
The model ·
Five minutes ·
Highlights ·
Install ·
Shortcuts ·
Config ·
Browse ·
VNC ·
Browser reference ·
Speech
Why Horizon?
Tabbed terminals hide your work. Tiled terminals box you in. Horizon gives you a canvas — an infinite 2D surface where every terminal, agent, browser, VNC desktop, and editor lives as a panel you can place, resize, and group.
Think of it as a whiteboard for live sessions, with a structured workflow on top: color-coded workspaces, preset panels, a command palette, and fit-to-workspace whenever you want a clean overview.
The model
Horizon has five nouns. Everything else is a shortcut, a preset, or a panel kind.
| Noun | What it is | How you use it |
|---|
| Canvas | The infinite 2D surface | Drag empty canvas or swipe with two fingers to pan. Pinch or Ctrl+scroll to zoom. Minimap to jump. |
| Workspace | A color-coded cluster with a shared working directory | Ctrl+double-click the canvas and pick a preset, or click New in the sidebar. Arrange with Default (free), Rows, Cols, or Grid. Detach it to its own window. |
| Panel | One live surface inside a workspace | Shell, SSH, coding agent, browser, markdown, git, or usage. |
| Preset | A named template for a new panel | Command palette, Ctrl+double-click, or Ctrl+Shift+N (first preset). |
| Session | A saved board | Close Horizon and come back. Ctrl+Shift+J switches between saved boards. |
A typical board looks like this:
Session
└── Canvas
├── Workspace "Backend" cwd: ~/projects/api
│ ├── Shell
│ ├── Grok
│ ├── Browser → http://127.0.0.1:3000
│ └── Git Changes
└── Workspace "Frontend" cwd: ~/projects/web
├── Shell
└── Claude
Workspaces stay visible. There are no hidden tabs. If something is off-screen, pan, zoom, fit, or search — do not hunt through a tab strip.
Panel kinds
| Kind | What you get |
|---|
shell | Login shell in the workspace directory |
ssh | Remote shell — usually from the Remote Hosts overlay |
grok · claude · codex · open_code · gemini · kilo_code · pi | First-class coding-agent TUIs, with session resume where the CLI supports it |
browser | Live Chromium, Firefox, or Safari on the canvas, shared with agents |
editor | Markdown split view (syntax + preview) |
git_changes | Changed files, diffs, and hunks for the workspace repo |
usage | Token spend across agent panels |
command | Run an arbitrary command as a panel |
device | Native VNC view of a loopback desktop, or of a remote desktop reached through an SSH tunnel (the host's key must already be trusted, for example by opening it over SSH once). Read-only until you turn Interact on, which sends your mouse and keyboard to that desktop |
Five minutes on the canvas
You do not need a config file to start. Launch Horizon, then:
- Ctrl+double-click empty canvas. A preset list appears. Pick Shell (or Grok, Claude, Browser, …). Shell and agent presets then ask for a working directory — that becomes the workspace cwd, and the first panel lands there.
- Press Ctrl+Shift+N for another panel of the first preset (Shell by default), or Ctrl+Shift+K and type a preset alias (
gb, cc, web, gc).
- On the workspace header, click Rows, Cols, or Grid when you want structure, or Default to drag freely.
- Press Ctrl+Shift+9 to fit the workspace into view. Press Ctrl+Shift+W to jump back to it without changing zoom.
- Press Ctrl+Shift+K again. Type a workspace name, a panel title,
@ for panels only, or > for presets and actions.
- Close Horizon. Reopen it tomorrow — the session, layout, canvas pan/zoom, and terminal history are still there.
Once that loop is familiar, the rest is optional: New in the sidebar for an empty workspace, Ctrl+Shift+H for SSH/Tailscale hosts, the workspace Detach control for a dedicated window, a Browser panel for any site on this machine or on BrowserStack, a Device panel for each VNC desktop you want to watch, or Settings (Ctrl+Shift+,) to change settings in YAML form with the canvas still visible behind it.
More to explore
New here? First steps walks you from install to your first board, agent, browser and cloud.
- Cloud workspaces — rent a RunPod or Hetzner worker and get its shell, agent, browser and Device panels on your board. Agents keep working when your laptop sleeps. Linux and macOS. See Cloud workspaces.
- Local Network Bridge — let a cloud reach devices on your home or office network. See Local Network Bridge.
- Casting — show a panel, a workspace or the whole window on an Apple TV. Linux only. See Casting.
- Agent-driven desktops — agents click and type in an isolated X11 desktop while you watch it in a Device panel. Linux only. See Watch an app over VNC.
Highlights
Infinite Canvas
Pan and zoom freely. Place panels anywhere. A minimap in the corner keeps you oriented — click or drag it to jump.
Workspaces
Group related panels into color-coded workspaces. Auto-arrange with rows, columns, or grid — or drag freely. Detach a workspace into its own OS window.
Full Terminal Emulation
24-bit color, mouse reporting, scrollback, alt-screen, and Kitty keyboard protocol. Powered by the Alacritty terminal engine. Click a TUI (Grok, vim, less, …) and the click goes to the app; Shift+click still selects text.
Command Palette
Ctrl+Shift+K searches workspaces, panels, presets, and actions. Prefix > for presets and actions, @ for panels only. Selecting a panel pans the canvas to it.
AI Agent Panels
First-class Grok, Claude Code, Codex, OpenCode, Gemini CLI, KiloCode, and Pi integration. Session persistence and resume work where the CLI supports it. Title bars show a working indicator and, when a session is bound, its id. A live usage dashboard tracks token spend.
Live Browser
Open any site in Chromium, Firefox, or Safari on this machine, or on a BrowserStack browser or phone you name in config. On this machine you and an agent share the page: navigate, inspect, click, fill, capture network traffic, and hand control back and forth. A BrowserStack panel shows the live page and takes the same navigate, click, and fill actions.
Git Integration
A built-in git status panel watches the workspace repo. See changed files, inline diffs, and hunk-level detail without leaving the canvas.
Smart Detection
Click an OSC 8 hyperlink to open it. Ctrl+click a URL or file path under the cursor. Horizon sees what the terminal prints and makes it interactive.
Remote Hosts
Ctrl+Shift+H discovers hosts from SSH config and Tailscale. Search, filter, and connect. Type user@filter to override the SSH user.
The SSH | VNC switch (or Tab) picks what opening a host creates: a terminal over SSH, or a Device panel showing the host's desktop (read-only until you turn Interact on in the panel). VNC never crosses the network in the clear: Horizon runs ssh -W 127.0.0.1:<port> to the host and pipes that into its native VNC viewer, so the server only has to listen on the host's loopback interface (remote_hosts.vnc_port, default 5900). A host whose server listens elsewhere gets its own entry in remote_hosts.vnc_ports, keyed by the label the overlay shows or by its SSH host name; typing :port at the end of the filter (for example lab:5901) uses that port for one session, or for the shortcut being saved.
The in picker chooses the workspace that receives the session. It defaults to remote_hosts.default_workspace (Remote Sessions, created as a grid on first use); pick any other workspace for one session (Alt+↑/↓ cycles it from the keyboard), or Set default (Alt+D) to make it the new default in this Horizon's settings store. Set default waits while the Settings editor has unsaved edits, so the two never overwrite each other.
Right-click a host for Open over SSH, Open over VNC, Save SSH shortcut and Save VNC shortcut. A saved shortcut is an ordinary preset (SSH: <host> or VNC: <host>, with the user@ override applied) saved to this Horizon's settings store, so the command palette and the preset picker can add that host to any workspace later.
The same viewer also watches loopback VNC servers on this computer, one port per copy of an app. See Watch an app over VNC.
Live Settings Editor
Ctrl+Shift+, opens the config as a side panel with YAML highlighting and live preview. Toggle light / dark / auto themes; changes apply to the canvas behind the editor.
Session Persistence
Close Horizon, come back tomorrow. Sessions, panel layouts, canvas pan/zoom, and terminal history restore as you left them. Ctrl+Shift+J switches boards. An opt-in setting can line attached workspaces into a horizontal row in sidebar order after restore.
Markdown Editor
Drop a .md file onto the canvas or create one from the palette. Split view with syntax highlighting and live preview, saved with Ctrl+Shift+S.
Speech Input
Opt-in, on-device dictation into terminals and browser pages. Hold a push-to-talk key (default F9) or use the title-bar mic. Nothing leaves the machine.
Audited Browser Automation
Agents discover one MCP browser contract automatically. Every action is correlated in a redacted audit trail. The horizon-browser CLI runs prompt jobs and repeatable JSON plans.
Install
Download (fastest)