Most of my day is spent in a terminal, talking to coding agents. This is the setup that makes that pleasant. Everything here lives in my dotfiles.

Terminal

Ghostty. Fast, native, and the config is a plain text file. The one setting that matters: macos-option-as-alt = left, so alt shortcuts reach my terminal apps instead of typing ∆ and ˚.

The shell is zsh with oh-my-zsh and powerlevel10k, plus the usual replacements:

  • fzf for fuzzy history and file search
  • zoxide so z tinygrad jumps to the right folder
  • eza, bat, fd and rg in place of ls, cat, find and grep
  • direnv for per-project environments

Multiplexer

herdr, a terminal workspace manager built for AI coding agents. It knows which panes are running an agent and whether that agent is working or waiting on me.

I gave it tmux keys so my muscle memory carries over. The prefix is ctrl+s, and in Ghostty cmd+s sends it too. On my Mac caps lock is command, so the prefix is caps+s, the same finger as on my HHKB.

KeysAction
prefix c, prefix n / pnew tab, next / previous tab
prefix % / "split
prefix h j k lmove between panes
alt+up / alt+down, alt+1-9switch workspaces
prefix shift+cnew workspace running Claude
prefix ffind an old session and resume it

My tmux config mirrors these bindings, so it works the same on machines without herdr.

Agents

Claude Code, mostly with permission prompts off inside herdr. c is my alias for claude --dangerously-skip-permissions.

threadr

After a few months I had hundreds of conversations and no good way back into them. So I built threadr:

  • threadr <terms> searches every past session by what it was about, puts me back in its directory and resumes it.
  • /branch-out forks the conversation I’m in into a new herdr workspace, so I can try something without losing the main line.
  • threadr tree draws which conversations were forked from which.

Claude Code doesn’t record where a fork came from, so threadr reconstructs it from the message ids the two conversations share. How that works.

Keyboard

An HHKB, with control where caps lock usually is. On the MacBook, Karabiner turns caps lock into command and swaps backspace with backslash, so both keyboards feel about the same.