Added
-
kolu-tui: attach to your terminals from the shell (beta) #1255
kolu-tui attach <id>takes over any live kolu terminal right in your shell — full raw passthrough, so every keystroke and chord reaches the inner program untouched. An ssh-style line-start escape is the one exception:~.detaches (kolu-server keeps the terminal; re-attach anytime),~~sends a literal tilde,~?shows help, and--escapepicks another character. Attaching resizes the terminal to your window and repaints the scrollback instantly; when the program inside exits, kolu-tui exits with the same code, and your terminal is always restored cleanly — even on a crash. -
kolu-tui: list and snapshot your terminals from the shell (beta) #1084
A new terminal-side CLI talks to your running kolu-server over a local unix socket —kolu-tui listprints every live terminal (id · pid · idle · command · cwd, or--json), andkolu-tui snapshot <id>dumps a terminal’s current scrollback to stdout for piping and grepping. Read-only for now (attach/spawn land later); run it vianix run github:juspay/kolu#kolu-tui, and the home-manager module installs it alongside the server automatically. An unreachable server is an honest one-line error, never a hang. -
Maximize a tile without the mouse #1248
You can now toggle a tile between the freeform canvas and maximized view straight from the keyboard with Cmd/Ctrl+Shift+M, or by running “Maximize terminal” from the command palette — no more reaching for the chrome-bar button or double-clicking a title bar. The command’s label flips to “Restore canvas” once you’re maximized, so it always names what the next click does.
Fixed
-
Terminal output no longer freezes until you press a key #1273
A terminal could silently stop painting new output — an agent seemingly stuck for minutes while its work actually continued — until any keypress made everything appear at once. The cause: a viewport scroll you never made (a touch artifact, a TUI leaving its alternate screen, a scroll tick delivered late after backgrounding the tab) engaged the scroll-lock, which held all output in a buffer with nothing to ever release it. The lock now engages only for scrolls you actually make — wheel, touch, scroll keys, find-in-terminal jumps; any other scroll snaps back to the bottom and output keeps flowing. Returning to the tab also releases a lock left engaged while you were away, and the Diagnostic Info dialog now shows each terminal’s lock state and the exact transition that engaged it. -
Switching branches no longer flashes the previous branch's PR #1257
When you switched a terminal to a different branch (or left the repo) while its PR was still being looked up, the tile could briefly show the old branch’s pull request — number, title, and CI status — until the new lookup finished, up to a few seconds later. Kolu now discards a stale in-flight lookup whose branch no longer matches, so the PR pill only ever reflects the branch you’re actually on. -
No more false GitHub auth warnings on non-GitHub repos #1256
A terminal in a repository hosted outside GitHub (Forgejo, Codeberg, GitLab, …) used to show a “gh: not authenticated” warning on its tile and re-log it every 30 seconds — but there was nothing to authenticate; the repo simply isn’t on GitHub. Kolu now recognizes that case and stays quiet, exactly like a branch with no PR. (Real PR metadata for Forgejo and friends is planned — this stops the lie first.) -
External links in HTML previews now open in a new tab #1249
Clicking a link to an outside site (a different host) inside a previewed.htmlfile now opens it in a new browser tab, instead of silently doing nothing or replacing the preview with the remote page. Links between files in the same preview still open in place and move the file tree, as before. -
No more error spam in fresh repos #1246
Opening a terminal in a freshlygit init’d repository (no remote, no commits) no longer logs a repeated “no base branch found” error on every change. The Code tab’s Branch view now shows an empty diff there instead of failing — while repos that simply haven’t fetched their remote still get the actionable “run git fetch” prompt. -
No more scary error on upgrade #1239
Upgrading from an older build no longer logs anEVENT_ITERATOR_VALIDATION_FAILEDerror at launch. Your saved Code-tab layout now carries forward cleanly instead of needing the preferences file deleted by hand. -
Terminals no longer silently freeze #1235
A WebSocket that died without notice — a laptop sleeping, Wi-Fi roaming, or a network/proxy dropping an idle connection — used to leave a terminal frozen until you reloaded the page. A heartbeat now detects the dead connection and reconnects on its own, so live output resumes without a reload. -
Per-terminal zoom in canvas mode #1247
Pressing Cmd/Ctrl +/- to change a terminal’s font size now zooms only the focused tile. Previously every open terminal zoomed at once, so two tiles could never be aligned to the same font size if one was zoomed before the other opened. -
Code tab keeps your tree/preview split #1250
Resizing the split between the file tree and the preview in the Code tab now sticks. Previously, switching to another terminal (or any moment the Code tab left the screen, such as a terminal sitting outside a git repository) could silently overwrite the saved split with a garbage value, so coming back — or reloading — brought the panes up at the wrong size.
Internal
-
Drive CI from a coding agent (odu MCP server) #1258
kolu’s CI runner odu now ships an MCP server —nix run .#odu -- mcp, wired into your agent config automatically. A coding agent (Claude Code, Codex, opencode, Gemini CLI) can start a run, snapshot the pipeline, tail a node’s log, rerun just the failed node, and block until the run settles — or the instant a node goes red — all as structured tool calls instead of scraping the terminal. The live pipeline is also a subscribable MCP resource, so notification-aware agents get pushed updates as nodes change. -
odu's live-attach command is now `odu attach` (was `odu monitor`) #1262
kolu’s CI runner odu renamed its interactive live-view command frommonitortoattach— matching the “a CI runner you attach to” model — and unified it withrun’s view: attaching now paints the same recipes×platforms matrixrunshows, with a focused-node log pane andrto rerun the lane under the cursor.odu monitorno longer exists; usenix run .#odu -- attach. -
Turn any @kolu/surface into an MCP server #1270
The new sibling package@kolu/surface-mcpre-exposes any@kolu/surfacespec to an MCP host —serveSurfaceAsMcpmaps each cell/stream/event to a subscribable resource and each procedure (plus optional bespoketools) to a tool under a default-denyexposeallowlist, owning the subscribe/teardown lifecycle, the zod→JSON-Schema bridge, and the stdio discipline so nobody hand-writes them twice. It builds on a new core primitive,projectSurface(withsurfaceClientRef+deriveCell/deriveStream/deriveEvent), that derives a curated surface B from a live client of surface A — a server that’s a client — so the observer-safe view an agent touches is shaped in surface-land and shared by every face.
// already on master — get these now: nix run github:juspay/kolu