DEV Community

Cover image for I got tired of alt-tabbing to an IDE to see what Claude Code changed, so I built terminal overlays for it
Deno
Deno

Posted on

I got tired of alt-tabbing to an IDE to see what Claude Code changed, so I built terminal overlays for it

familiar — a quick tour of the overlays

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.

GitHub logo 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.

English · Русский

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.

review — two-pane diff with word-level highlights

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 of git 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:

session — all sessions with live status

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:

session — conversation preview

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.

log — commit list with branch graph

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
Enter fullscreen mode Exit fullscreen mode

Top comments (0)