A terminal-native AI IDE built from glyph components. Single binary, opens any project, runs over SSH, ships with picker-driven navigation, project search, git integration, embedded terminal, LSP, and an AI panel.
The clip above is what you land on when you run nook . for the first time:
a welcome card with the project name, file count, live AI/LSP status, and the
quick-start keys. ? opens the full keymap overlay; Ctrl+P opens the picker
and drops you in the editor. See visuals/record-welcome-cast.py for the
exact PTY tour.
The second clip is the ghost-text wedge: Ctrl+P to find a file, type a prefix
in the editor, idle past the debounce, Tab to accept the proposal. Haiku
streams the suggestion; the demo recording bypasses the API via
NOOK_GHOST_DEMO so it costs no tokens. See visuals/record-cast.py for the
exact PTY tour.
Three keybindings ported from Cursor, each pinned to the right model.
- Ctrl+K — inline edit on the current line. Haiku streams a replacement;
preview, then Enter to accept or
rto retry. Stop sequences fence the output so the apply step is exactly one line. - Ctrl+L — multi-file composer. Sonnet returns a planned diff against the open workspace; per-file accept/reject.
- Tab — ghost-text autocomplete. 400ms debounced idle trigger, Haiku returns a single-line continuation, Tab merges, Esc dismisses. Stale generations are discarded by tag.
Opening a .go file starts gopls under the project root. Each
publishDiagnostics notification surfaces as a colored gutter sigil — red
● for errors, yellow for warnings, blue for info or hints — and a
●nE nW summary lands in the status bar. Mutating keystrokes publish a
didChange so the markers stay live as you type. gopls is the default
binary; the wrapper at internal/lsp is server-agnostic and reusable for
other languages.
npm install -g @anthropic-ai/claude-code
claude /login # or set ANTHROPIC_API_KEY in your shell
go install github.com/truffle-dev/glyph/cmd/nook@latest
export PATH="$(go env GOPATH)/bin:$PATH" # one-time, if go bin isn't on PATH
nook .go install drops the binary into $(go env GOPATH)/bin (usually
~/go/bin). If nook isn't found after install, that directory isn't on
your PATH yet. Add it to ~/.zshrc or ~/.bashrc to make it permanent.
nook drives its AI wedges by spawning the claude CLI in --print --output-format stream-json mode, so whatever auth claude is already
configured with (OAuth session or ANTHROPIC_API_KEY) is what nook uses.
There is no separate key to manage and no direct API call to Anthropic.
Without claude on PATH, the editor, picker, search, git pane, terminal,
and LSP all still work. Only the AI wedges go dark — they show "claude CLI
not found on PATH" in place of streaming.
spec.md— the product spec and architecture (read this first)roadmap.md— shipped ledger, standing constraints, and open candidates (the living status doc)research/00-synthesis-and-spec.md— same content, kept as the research-foundation copyresearch/01-cursor-features.md— Cursor feature inventory + MVP shortlistresearch/02-helix-architecture.md— Helix architecture deep-dive (compositor, picker, LSP, selection model)research/03-neovim-ai-plugins.md— Avante / CodeCompanion / copilot.lua / aider patternsresearch/04-lsp-go-client.md—go.lsp.dev+ concurrency model + lifecycleresearch/05-aider-ux.md— aider end-to-end UX, repo-map, slash commands, git-native auto-commitresearch/06-zed-distinctive.md— Zed's multibuffer + inline assistant + outline patternresearch/07-tui-ide-landscape.md— micro / amp / kakoune / Edit / nvim distros / convergence patternsresearch/08-developer-workflow.md— what a terminal-native dev's day actually looks like
Cursor is electron and expensive. Helix has no AI. Neovim+plugins is fragile. aider is a REPL, not an IDE. Zed is GPU, not TUI. The unfilled space: a TUI that has Cursor's AI UX, Helix's picker UX, aider's git ergonomics, and Zed's multibuffer — in a single binary. Built from glyph primitives. That's nook.


