m.  Mason

A home for all your Claude Code sessions

An ADHD-friendly, calm, and organized-by-default replacement for the Claude app, or the 10 terminal windows you have open right now.

Add persistent notes, rename windows, and easily spin off ideas into new chats. Customize your window view, never miss a session that needs you, and easily quiet everything that you don’t want to pay attention to.

New sessions created in Mason are automatically nested into projects based on their topics, and sessions in a git worktree join their main project.

ProjectsOpen 2?
Open all 5Open starred 1FindShush
moonbase-api1 waiting
+ New session+ New terminalOpen all 3Note
Teach the scheduler lunar timewaiting
Asking if a moon day should really be 29.5 Earth days
Oxygen sensor webhooks
Adding retries so no ping drifts off into space
Rename the cheese_inventory table
Wrote the migration and a rollback
burritocopter1 session
Home1 session
+ New project
Mason 0.3Summaries onNotifications onAutoLightDark

An example list. Green is working, grey is idle, and a session that needs you lights up.

ProjectsOpen 4

4 sessions from all projects viewed organized by project

?

moonbase-api

Scheduler · moon daysOpus 5.5–×
● Read(src/calendar/lunar.ts) Found the 24-hour assumption in 3 places. ● Bash(npm test -- --grep "lunar") A moon day is 29.5 Earth days. Make standup monthly instead? ❯ 1. Yes 2. No
❯
O₂ sensors · retriesautoSonnet 5.5–×
Ask ops if 6 tries is too polite
● Read(src/webhooks/oxygen.ts) Pings give up after one try today. ● Update(src/webhooks/retry.ts) + backoff: exponential, max 6 tries * Orbiting… (41s)
❯
Cheese table · renameplanOpus 5.5–×
Run the migration after 9am, once the on-call astronaut is awake. Keep the old table for a week in case anyone misses it.more ▾
✻ Simmered for 35s · done 4:12 PM ※ recap: We're renaming cheese_inventory. The migration and rollback are written and checked. Next: run it after 9am.
❯

burritocopter

Drop zones · geofenceHaiku 5.5–×
● Read(src/flight/zones.json) 12 drop zones, 2 overlap the duck pond. ● Update(src/flight/landing.ts) + hover 2m above picnic blankets No more salsa on the windshield <3 * Wrapping… (12s)
❯

Try the layout menu above. The outlined window is the one you’re typing in, and a fainter edge marks the one you just left. Each window shows its model (click to switch) and can hold a note.

Download and install

You need a Mac with Apple silicon, Claude Code, Homebrew, and Node.js 20 or newer. Mason builds on your own machine, so it takes a couple of minutes the first time.

  1. Get the code. Clone it, so Mason can update itself later:
    git clone https://github.com/brittanyrferrero/mason.git ~/mason
    Downloaded the .zip instead? Unzip it to ~/mason. Everything works, but there's no Update button; download again for a newer version.
  2. Install tmux and the dependencies.
    brew install tmux
    cd ~/mason
    npm install
  3. Turn on the hooks. This is what lights up "waiting on you" and adds /pause and /stash to Claude. Your settings file is backed up first.
    node scripts/hooks.mjs install
  4. Build and open Mason. This puts Mason.app in ~/Applications and opens it.
    scripts/install-app.sh
  5. Start working. Your existing Claude sessions appear right away. Press ⌃⌥M from anywhere to bring Mason forward, and ? inside it for the help card.
Updating, uninstalling, and the escape hatch

Updating. When there's a new version, a quiet Update button shows up at the top right of Mason with what's new. Click it and Mason rebuilds and reopens itself; running sessions keep going. (This needs the git clone install; a .zip copy stays as it is.) You can also pull the latest code and run scripts/install-app.sh yourself.

Uninstalling. node scripts/hooks.mjs uninstall removes exactly what it added. Then delete Mason.app and ~/.mason.

Escape hatch. From any Terminal, tmux -L mason ls lists Mason's sessions and tmux -L mason attach -t <name> opens one.

Keys worth knowing

Bring Mason forward⌃⌥M
Quick capture⌃⌥N
Peek at a sessionSpace
Find/
Rename / Pin / StarR P *
Focus one window⌘⇧F
Open all starred⇧A
Spin off a side thought⌘⇧N
Switch between sessions⌘[ ⌘]

How it's built

Mason has no network port. It reads what Claude Code already writes to disk and keeps its own data in one SQLite file. The only things that leave your Mac are the short summaries it asks Claude to write (you can turn those off) and a quiet check on GitHub for a newer version.

ElectronDesktop shell, menu bar, global hotkeys
ReactThe Quiet list UI
tmuxA private server keeps sessions alive
xterm.js + node-ptyLive terminals inside the app
SQLiteNotes, names, stars in ~/.mason
Claude Code hooks"Waiting" events, /pause, /stash
# reads
~/.claude/projects/**/*.jsonl   transcripts
~/.claude/sessions/*.json       running, busy, idle
# writes
~/.mason/mason.db               Mason's own data
~/.mason/events.jsonl           one line per hook event