native macOS · vim-style · keyboard first

Keep an eye on every agent.

A native macOS app that feels and works like a TUI, with vim-inspired modes and key bindings. heed runs Claude, Codex, Cursor, pi, opencode and gemini in real terminals, watches what each one is up to, and taps your shoulder only when one needs you.

o start workga next agent that needs yougo PR overlay? every key
Open source. Agents keep their own transcripts; heed never stores them.
psst. claude is blocked on a permission.
A felt-style owl waving from a branch under a night sky
heed
The heed main window: sessions on the left, agent terminals in the middle, PRs and agent events on the right.
workingidleaskingblockeddone
Agent states

Whooo needs you?

Every agent reports what it is up to: working, idle, blocked on a permission, asking you a question, done, rate limited. heed gives each its own shape, not only a color, and ga jumps to the next session that needs you. Everything else stays quiet.

  • Agents tell heed through hooks, so it is not guessing.
  • When an agent cannot, heed reads the terminal and marks the state with a dotted ring: a guess, labelled as one.
  • Repo chips carry the org icon and color, so you spot the right session at a glance.
heed
Sessions grouped by who needs you, each with its state glyph.
IdleWaiting for you, relaxed.
WorkingEyes on the code.
AskingNeeds an answer from you.
BlockedStuck on a permission.
ExitedAgent ended, shell lives on.
Start work

Say what you want. Skip the setup.

Press o and type the task. heed guesses the repo (or several), names the worktree after the task, picks the agent, and starts it in a real terminal with your prompt. You see the exact command before it runs.

  • It shows its reasoning and a confidence for each guess. Change any of it with one key.
  • Autostart runs the agent inside a shell, so the session outlives the agent.
  • Optional: plan first, or open a shell and test split beside it.
heed
The Start work dialog guessing repo, worktree name and agent.
Agents

Every agent. One perch.

Claude, Codex, Cursor, pi, opencode, or any command you can type. Each one is wired up the way it actually works, and anything heed cannot be told it reads from the screen.

  • Profiles, plan and resume arguments, and how the prompt gets delivered.
  • Hooks are passed per run: your own agent config is never edited.
  • Any command line agent, with output patterns for the states it cannot report.
claudecodexcursorpiopencodegeminiyour own command
heed
Per-agent settings, here for claude.
Keyboard first

Built like an editor, not an app with shortcuts.

NORMAL mode drives heed. INSERT hands every key to the terminal. Counts work, relative line numbers show how far you are jumping, f puts a hint on everything and : runs commands. If you have ever :wq’d your way out of something, you are home.

NORMALkeys drive the app
INSERTevery key goes to the agent
VISUALselect many, then act
COMMAND:start, :pr 2841
HINTf, then jump anywhere
jk

Move through sessions. 3j goes three down.

ga

Jump to the next agent that needs you.

o

Start work. Type the task, press enter.

gp

PR overlay for this session, and back.

gd

Diff overlay: committed, staged, unstaged.

'1

Jump straight to pinned session 1.

⌃wv

Split the pane right. Vim muscle memory works.

f

Hint badges on every pane, tab and session.

:

Command line: :start, :pr 2841, :wt sweep.

?

Every key and every agent state, in any mode.

NORMAL3j2 blocked · 1 askingga
heed
The help overlay listing modes, keys and agent states.
  • The mouse works. You just will not need it.
  • INSERT passes every key to the terminal except one escape chord, and you choose the chord.
  • Press ? anywhere and the overlay highlights the mode you are in.
Pull requests

PRs that talk back.

heed watches your open PRs for review comments and failing checks, queues the feedback, and hands it to the session that wrote the code, but only when that agent is idle. Preview it, send it now, or let it run.

  • New, queued, sent, addressed, resolved: you can see where every comment is.
  • After the agent pushes, heed watches the new CI run and reports whether the failure went away.
  • It stops after three rounds without progress. Nobody gets nagged forever.
heed
Open PRs across repos with watch status and the feedback queue.
Worktrees

Worktrees that tidy up after themselves.

Create, list and remove worktrees across repos. Cleanup starts with one honest rule: remove what has been quiet for N days.

  • Never touches dirty or unpushed work, and never pinned sessions.
  • Shows what the next sweep would do before it does it.
  • Org icon and color on every repo, so a long list scans fast.
heed
Worktree table with state, repo chips, PRs and cleanup ETA.
Resume

Pick up where you left off.

Quit heed, restart the Mac, come back tomorrow. Active sessions reopen with their agent session id, in the same worktrees, tabs and splits. Claude, for example, comes back with --resume.

  • If an agent has forgotten the session, you get a fresh start with the same prompt.
  • Sessions that were mid-turn get a “Continue where you left off.” nudge, yours to change.
  • Running processes are not restored, and heed says so.
heed
Resume dialog listing sessions with the exact command for each.
heed
Diff overlay over a session.

Read the diff, stay put

gd opens committed, staged or unstaged changes over your session. Per file, per commit, or all of it. Ask the agent about a hunk with one key.

heed
Notifications inbox with multi-select.

Notifications, one session

Pick several issues or notifications, press s, and they become one session with one prompt. Read them in the app first.

claudecodexcursorpiopencodegeminiyour own command

Pin the ones that matter

Up to nine pinned sessions, one key each: '1 … '9. Pinned sessions are never cleaned up and always come back after a restart.

Straight talk

A few things we would rather you hear from us.

  • macOS only, and not sandboxed: it has to spawn shells, git and agents.
  • heed does not replace your agent. It hosts it.
  • Agents own their transcripts. heed keeps session records, not conversations.
  • Terminals are libghostty. The ones you already like, with splits and tabs.

Questions, answered briefly

Does it work with my agent?

Claude, Codex, Cursor, pi, opencode and gemini are built in. Anything else you can run in a terminal works as a custom agent, with its states read from output patterns.

How does it know when an agent is blocked?

Through each agent's hooks, where it has them, using a small helper command the agent calls. Where it has none, heed watches the terminal and marks that state as a guess.

Will it touch my repos without asking?

Cleanup removes only worktrees that were quiet for N days, never dirty or unpushed work and never pinned sessions, and it can ask before every sweep.

Do I have to use the keyboard?

No, but you will want to. Everything is a key, there is a help overlay on ? in every mode, and the mouse works too.

Let heed take the night shift.

Start the agents, close the lid on worrying. heed will tap you when it matters.

NORMALheed.buildga next  go PR  ? help