Claude Code moved my coding into the terminal. But my reviewing didn't move with it.
Every time the agent finished a task, I had two options: squint at git diff in a pager, or alt-tab to an IDE just to read the changes — in a project the agent was working on, not me. And with a few sessions running in parallel across projects, getting back to one meant remembering which folder it lives in, cd-ing there, and running claude --resume by hand.
So I built familiar — three full-screen overlays for the kitty terminal, each on its own hotkey. Here's what they do and how the whole loop works.
DenoBY
/
familiar
Keyboard-driven kitty overlays for an AI-agent workflow: a Claude Code session manager, a git reviewer, and a log browser.
familiar
Claude Code writes the code in your terminal — familiar gives that terminal the missing IDE half. Three full-screen kitty overlays, one hotkey each: review everything the agent just changed in an IDE-grade diff and send line comments straight back into the chat; see all your sessions live — which agent is busy, which is waiting for your permission — and resume, fork or spin up a worktree in a keystroke; walk the git history the same way. Pure Python standard library plus vendored Pygments for syntax highlighting — nothing to install. macOS only.
A familiar is a helper spirit in a cat's shape — fitting for a set of kitty kittens that tend your coding agents.
Each kitten is a full-screen overlay opened by a hotkey:
| Kitten | Hotkey | What it does |
|---|---|---|
| session | Cmd+Shift+S |
Browse and manage Claude Code sessions — resume, fork, continue, new session, |
The loop: review → comment → paste back
Cmd+Shift+R opens review — a two-pane view of everything uncommitted: file tree with statuses on the left, syntax-highlighted unified diff on the right.
The parts that earn their keep daily:
-
Word-diff — in a changed line, only the words that actually changed are highlighted.
int(raw_minutes)→round(raw_minutes)reads instantly. -
⌥-click go-to-definition — jump to where a symbol is defined without leaving the overlay, with a back stack (
⌃o). No LSP, no index — a context-aware resolver on top ofgit grep. - Final-code view — read the file as it will look after the merge, IDE-style, edits marked in the gutter.
-
Line comments → markdown. This is the actual loop-closer: you walk the diff, drop comments on lines, press
w— and everything lands in your clipboard as structured markdown. Paste into the Claude chat: "here are the review comments, fix them." Done.
When you don't need a full review — just pointing the agent somewhere — ⌘⇧C copies an @path/to/file.py#L42 reference (or #L42-58 if you've selected a range with the mouse), the exact form Claude Code resolves. ⌘C on a file in the tree copies its @path. No more "in that file, somewhere near that function".
Sessions: one list, all projects
Cmd+Shift+S opens session — every Claude Code session across all projects in one place:
The status is live — busy / waiting for permission / background agent — read from Claude Code's process registry, not from file mtimes, so it's the truth, not a guess. From the list: resume, fork, start a session in a fresh git worktree, or preview the whole conversation as a rendered transcript — tool calls with output, file edits as coloured diffs, markdown answers:
History: log
Cmd+Shift+L — commit list with a branch graph, and per-commit diffs on the same engine as review. git fetch / git push without leaving the overlay.
Under the hood
Each overlay is a kitty kitten — a Python TUI that kitty runs in an overlay window over your shell. That gave me a UI layer for free: real mouse events, pixel-precise clicks, instant startup. The whole thing is pure Python standard library (Pygments is vendored for highlighting) — no pip install, no node_modules, nothing to break.
A fun constraint: the terminal mouse protocol carries Shift/Alt/Ctrl but never Cmd — which is why go-to-definition is ⌥-click, not ⌘-click.
Try it
brew tap denoby/familiar https://github.com/DenoBY/familiar
brew install denoby/familiar/familiar
familiar enable --kittens





Top comments (0)