rook

module
v0.41.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 3, 2026 License: MIT

README

rook

A native macOS terminal, multiplexer and editor in Zig — built to replace a ghostty+tmux daily driver, and to be driven by an agent as fluently as by a human.

Current state: STATUS.md. That page is the honest one: what works, what does not, and what is owed. This page is the intro and the reasoning.

The name works twice: rooks are the clever corvids — tool-users and the classic witch's familiar — and the chess rook is the castle, the home base you retreat into. Part of the incantery suite, but deliberately its own thing: nothing depends on rook.

Demo

https://github.com/user-attachments/assets/1ebda3b9-14ca-4193-8629-ecb1871025bc

Install

macOS (Apple Silicon):

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

Installs /Applications/rook.app from the latest release. Use the script rather than a browser download — curl skips the quarantine attribute, so the ad-hoc-signed app launches without Gatekeeper ceremony. Re-run it to upgrade.

From source: make install. Needs Zig 0.16, plus Go if you want the providers. Maintainers cut releases with make release VERSION=vX.Y.Z.

Configure

Config lives at ~/.config/rook/config.toml. docs/config.sample.toml is the complete surface: every key at its default, commented out, so you can copy it in verbatim and uncomment what you want. The file is optional.

Chrome — bars, segments, keybinds — can also be declared as a graph and built with an SDK rather than written by hand; see docs/environments/ and sdk/rook.

What it is

A terminal you would use for the latency alone, with an editor and LSP in the same binary, designed so that anything an agent might want to do is a named command rather than a private code path.

It is not an AI IDE today. It was heading that way, grew an agent layer — threads, code review, an attention inbox, asks that followed you to your phone — and then removed all of it on 2026-07-31. Not because the thesis was wrong, but because each feature had grown its own protocol, and none of them could have been written by anyone outside the repo. They come back as plugins over one vocabulary, or they do not come back.

Architecture

Two decisions from the original design survived three rewrites. They are here because they are still load-bearing.

  1. A single command registry. Every action — split a pane, open a file, toggle the tree — is a named command. Clicks dispatch commands, keybindings dispatch commands, the ⌘K palette lists them, the editor's :Ex verbs reach them, and the ctl socket runs them by name. This is what keeps "an agent can do everything the user can" structurally true rather than aspirational, and it is why the e2e suite can drive the real app.

  2. Extensibility is out-of-process and API-first — no side doors. A provider is a separate process reaching one external system, speaking newline-delimited JSON over stdio and declaring its capabilities up front (sdk/provider). Language servers work the same way. The Neovim/tmux model, not Hyper's inject-components-into-the-tree model, which fossilized its internals.

    The open edge: parsing runs on the frame budget and cannot be out-of-process, so grammars want a native plugin class rook does not have yet. That is the next real design problem.

Everything else — xterm.js behind a seam, a Go PTY host, Wails, Svelte, shelling out to the claude CLI — was true once and is not now. The reasoning is worth reading as history rather than as description:

Performance

The bar is "nothing about rook feels like web tech" — the audience is Ghostty/Alacritty/Kitty switchers. Numbers, and how to reproduce each one, live in app/PERF.md; app/bench.sh runs them.

metric value
key → photon p50 15.5 ms windowed / 8.5 ms fullscreen
time cat 150MB ascii 0.90–0.92 s (Ghostty 1.3.1: 1.610 s, same machine)
idle frames 0

License

MIT

Directories

Path Synopsis
Package providers is not code.
Package providers is not code.
github command
rook-provider-github answers rook's questions about GitHub.
rook-provider-github answers rook's questions about GitHub.
linear command
rook-provider-linear answers rook's questions about Linear.
rook-provider-linear answers rook's questions about Linear.
sdk
rook
Code generated by scripts/gen-cmds.sh from app/src/registry.zig.
Code generated by scripts/gen-cmds.sh from app/src/registry.zig.
rook/example command
An example environment — the SDK's showcase config, in the node-list shape: a config is a LIST OF DECLARATIONS, values not statements.
An example environment — the SDK's showcase config, in the node-list shape: a config is a LIST OF DECLARATIONS, values not statements.
provider module

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL