kolu
Docs

the workspace daemon & its CLI · alpha

Padi: the memory
under kolu.

padi — the per-host workspace daemon

padi is the per-host daemon that remembers the memory under kolu — what a Kolu workspace is: terminals, sessions, restore state, repo context, the code tree, git status, diffs, and agent awareness. It sits above kaval, which owns the live PTYs. The split is simple: kaval keeps shells alive; padi keeps the workspace legible. The whole layer stack is in Architecture; padi is a @kolu/surface daemon, with the drain-capable live recycle that keeps a client connected across an upgrade.

Where it sits

The browser talks to kolu-server, the server binds padi, and padi supervises its own kaval. Restart the web shell and padi still has the workspace. Restart padi and kaval still has the PTYs. The layers recover on different clocks because they own different state.

kolu-server binds padi, padi supervises kaval, and kaval owns PTYs. padi holds the workspace record while kaval holds the live shells.FACEWORKSPACEPTY OWNERkolubrowser + serverpadisession · registry · agentsthe workspace recordkavalPTYs + screenssurfaceunix socketstate-root on disk

What padi knows

kaval only knows terminals. padi is where terminal observations become a workspace: repo-aware, agent-aware, resumable, and readable from more than one face.

terminal registry

which terminals exist, where they belong, and how to re-open them after the web layer moves.

workspace memory

the session record, activity feed, restore target, and durable state-root for one host.

repo context

repo, branch, pull request, checks, cwd, foreground command, file browsing, git status, and diffs.

agent state

whether a terminal’s agent is working, waiting, or asking for you, folded into one live surface.

The thin shell face — padi-tui

padi-tui reads the same workspace surface kolu uses. Where kaval-tui shows what’s running in each PTY, padi-tui shows what each terminal is in: repo, PR, checks, foreground command, live byte activity, and agent state. That is the state behind the multi-agent dock.

padi-tui status
padi-tui watch
padi-tui wait a3f10000 --until awaiting,waiting
padi-tui create -- claude
ID        REPO·BRANCH         PR        AGENT             FOREGROUND        IDLE
a3f10000  kolu·feat/dial-ssh  #1412 ✓   claude · working  node              2s
b7c20000  kolu·master         —         codex · waiting   codex             1m
c9d40000  kolu·fix/fold       #1408 ✗   —                 nvim              5m

Usually no flag. padi keys its socket by a digest of its state-root, so inside a kolu terminal $PADI_SOCKET makes padi-tui flag-less — an agent driving its siblings never guesses a path. Elsewhere it autodiscovers the running padi; --socket <path> or --state-root <dir> point it elsewhere. Remote padi over ssh is a later phase in Architecture; today padi-tui is local. For remote PTY control that already works, use kaval-tui --host.

wait <id> --until awaiting,waiting blocks until a terminal’s agent finishes its turn — a done-signal read from real padi state, not guessed from terminal silence. For a robust driver, wait in two phases: --until working for pickup, then --until awaiting,waiting for turn-end, so a stale previous-turn state cannot satisfy the wait early. --timeout <ms> fails loud (exit 2), a terminal that exits first exits 3, and --json prints { id, agent }. The deeper design notes live in the padi atlas note.

Command What it does
padi-tui status · --json Print a one-shot workspace snapshot: terminals, repos, agent state, foreground process, and recency.
padi-tui watch · --json Follow the workspace live, including state changes and activity indicators.
padi-tui wait <id> --until awaiting,waiting · --timeout <ms> · --json Block until an agent turn ends using padi’s real agent-state fold, not a guess from terminal silence.
padi-tui create -- claude · --parent <id> · --worktree <branch> · --repo <path> · --json Create a kolu terminal from the shell: a new tile, a split tile, or a worktree’d agent that appears live on the canvas.

Why it is not inside kolu-server

The web server is a face: HTTP, assets, websocket transport. The workspace is a daemon: durable folder, terminal registry, session restore, agent awareness. Keeping those apart means a deploy can replace the web shell without making the workspace disappear.