kraal 0.1.1

A terminal workspace manager for SSH fleets and coding agents
kraal-0.1.1 is not a library.

kraal runs in the terminal you already use: panes, tabs and workspaces that keep running when you close the window. It also knows what each pane is doing: the server it is on, the branch, whether that server is production, the agent working there and whether it is waiting for you.

  • Never hunt for the stuck agent. Claude Code, Codex, OpenCode, Gemini and a dozen others are marked working, blocked or done, in the sidebar and on their pane, with a desktop notification. alt+a jumps to the next one that needs you.
  • Several agents on one repository. Start an agent in its own worktree and branch, then review, commit, open a pull request or merge without leaving kraal.
  • Every subscription you pay for. A personal and a work Claude plan, two Codex plans: kraal shows each one's usage, picks one per project, and moves to another when one reaches its limit.
  • Your servers, one key away. kraal remembers every host you ssh to. Open one, or a whole group in a grid; type in all of them at once; copy files between any two; keep tunnels open.
  • Production looks like production. A pane on a production server, cluster, Terraform workspace or AWS profile gets a red frame, and kraal asks before broadcast typing or a multi-line paste lands there.
  • Tools where you are. lazygit, k9s, htop or the logs open on the focused pane's server or in its directory. ctrl+b o labels every link, path, commit or pod on screen, to copy or open it.
  • Runbooks that stop at the first failure. Procedures kept as files run server by server after showing their plan, and log everything. Your Markdown docs run block by block.
  • Close the terminal, keep working. Sessions keep running when the window closes or the connection drops. After a reboot, kraal rebuilds the layout, reconnects SSH shells and resumes agent conversations.
  • One binary, any modern terminal. Linux and macOS. The kitty keyboard protocol (Shift+Enter reaches Claude Code), images in panes (kitty graphics and sixel), shell integration, the mouse.

Install

curl -fsSL https://raw.githubusercontent.com/kraal-sh/kraal/main/install.sh | sh

or cargo install kraal · prebuilt archives for Linux and macOS, x86_64 and arm64. The script checks the archive's checksum and installs into ~/.local/bin; kraal update does the same later. More ways

Quick start

kraal                              # start a session, or attach to the running one
kraal integration install claude   # exact agent states from Claude Code's hooks (codex too)

Press ctrl+b and let go: a menu shows what each next key does. ctrl+b d detaches, and kraal brings you back where you were.

Keys you can guess

After ctrl+b, a theme's letter runs its main action and the capital opens its menu: s connects to a server, S shows everything about servers. The same letters mean the same thing in every menu (n new, x close, e rename). Shortcuts work on any keyboard layout, and every command and every menu can move to the keys you want. Keys

Workspaces as files

Declare a workspace once and open it in one command (kraal shop): tabs, splits, servers, commands, agents and live previews, in a KDL file.

layout {
    cwd "~/src/shop"
    tab name="release" {
        pane split_direction="vertical" {
            pane command="ssh" { args "deploy@web-prod-1"; }
            pane split_direction="horizontal" {
                pane agent="claude"              // a shell that starts claude
                pane preview="CHANGELOG.md"      // a live Markdown preview
            }
        }
    }
}

Sessions and workspaces

Made to be scripted

Every pane knows its session, so scripts and agents drive kraal from inside it:

kraal run --right --name tests -- cargo test     # a new pane; prints its id
kraal wait -p api --until blocked,done           # until the agent in "api" needs you
kraal exec @prod -- uptime                       # on every server of a group, in parallel
kraal events agent.blocked pane.failed           # what happens, as JSON lines

[hooks] runs a command on any event: ping your phone when an agent is blocked, log every SSH connection to production. Scripting, events and hooks

Documentation

Install · Keys · Sessions and workspaces · Servers · Coding agents · Tools, contexts and hints · Production · Runbooks · Shell integration and images · Scripting, events and hooks · Configuration

The name

A kraal is an enclosure for cattle, in southern Africa. Servers are cattle, not pets, and now agents are too.

Status

kraal is young. Linux is used every day; macOS passes the whole test suite on every release but nobody uses it daily yet; Windows is not supported. Known gaps:

  • Images in panes need a terminal that draws kitty graphics with Unicode placeholders (Ghostty, kitty).
  • Agents running in a remote session are not listed in your local sidebar yet, and Kubernetes, Terraform and AWS contexts are read for local panes only.
  • Agent states come from hooks for Claude Code, and for the end of Codex's turns; otherwise they are read from the screen and can lag.

Bug reports and ideas are welcome in the issues.

Development

cargo test        # unit and end-to-end tests

License

Copyright 2026 vodhash and the kraal contributors.

Licensed under the Apache License, Version 2.0.

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in kraal by you, as defined in the Apache-2.0 license, shall be licensed as above, without any additional terms or conditions.