Every coding agent.
One place to interact and talk with them.

Always up to date with agent work, with rich notifications: the notch tells you when an agent finishes or needs you. Press ⌘L for a powerful launcher with quick access to all your current agent conversations. Instant voice answers with ⌘⌘ on notifications, in the launcher or from anywhere. Works with Claude Code, Codex, OpenCode, Pi and 30+ other harnesses.

Scroll to watch it work ↓

T3 Code — unibar
Hold the waveform still until I talk
Done. It learns the room's noise first, then ignores the start chime.
✳ Pricing page — claude-3 · ~/shop/web
✻ Welcome to Claude Code ~/shop/web
> Add a pricing page with three tiers
● Read src/app/layout.tsx
● Write src/app/pricing/page.tsx +142
● Pricing page is live at /pricing with Free, Pro and Team. Monthly is selected by default.
localhost:3000/pricing
Simple pricing

Monthly Yearly

Free$01 agentStart
Pro$12Unlimited agentsUpgrade
Team$29Shared inboxContact
Simple pricing Welcome email
localhost:3000/pricing
Simple pricing

Monthly Yearly

Free$01 agentStart
Pro$12Unlimited agentsUpgrade
Team$29Shared inboxContact
Reply…↑
root@hetzner-1 — ssh
Unibar Settings
GeneralAIRouterVoiceHarnessesMachinesPhonePermissions
1. Paste this on your Linux server or VPS
curl -fsSL https://herdr.dev/install.sh | sh && mkdir -p ~/.ssh && chmod 700 ~/.ssh && (grep -qF 'ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHk…' ~/.ssh/authorized_keys || echo 'ssh-ed25519 AAAAC3…' >> ~/.ssh/authorized_keys) && chmod 600 ~/.ssh/authorized_keys && (nohup ~/.local/bin/herdr server >/dev/null 2>&1 &)Copy
It installs herdr, lets only this Mac's Unibar key in over SSH, and starts herdr in the background. Agents there must run in herdr, signed in to Claude Code or Codex.
2. Enter the address it prints
me@203.0.113.7hetzner-1Connect
✓ Connected hetzner-1 · 3 agents
branch soft-delete · ~/work/apiDiffs
Talk⇥Open in Herdr⌘⏎Zen⌥⏎Clear⌘E
Listening…
Reply to claude-3 · ✳ Pricing page
Route instead⇥Stop⌘⌘or⏎Cancelesc
Message to claude-3Sending… press Esc to undo
Undo
Sent toclaude-3
10:42●●●

Inbox

API
◎
Staging migrationRun the migration on staging?
Run the new migration against staging before I open the PR?
1Yes, run it
2No, just open the PR
3Show me the SQL first
SHOP/WEB
✳︎
Pricing pageWriting src/app/pricing/page.tsx
BLOG
P
Launch post draftDraft is ready to publish
→ Publish it→ Show diff

Talk

Talking to main agentSay what you want done — Unibar routes it to the right agent.
✓ Sent to pi-2 · Launch post draft 10:42
Hold to talk
Type a command…
1Inbox Talk Settings
  1. ⌘LLauncher
  2. ●Notices
  3. ⏎Chat
  4. ⌥⏎Zen
  5. ✳︎claude.ai
  6. ⌘⌘Voice
  7. ↹Any app
  8. 📱Phone
  9. sshServers
  10. ☾Always on

⌘L Launcher

Your latest chats,
one key away.

Every chat from herdr, your terminals and desktop apps in one list. Chats waiting on you come first, then each project. Arrow through them to read what you started with, what you asked last, and the agent's newest reply. Nothing loads while you move.

  • ⏎ opens the full conversation, with tool calls and diffs.
  • ⌘⏎ jumps to the agent's own Ghostty tab, or the app it lives in.
  • ⇥ talks to the selected chat. 1–9 pick by position.

⌘⌘ Voice

See where it goes
before you speak.

Double-tap ⌘. Before you say a word, the pill shows the target and that chat's last reply: "Reply to claude-3", "Types into Cursor", or "Unibar · routing". Press ⇥ to hand it to the router. "@name" or "at codex twelve" always wins.

Reply to claude-3 · ✳ Pricing page
CuTypes into Cursor · unibar · you press ⏎
Unibar · routing

What's in Unibar

One place for every agent,
wherever it runs.

iPhone & Android app

Pair your phone with a QR code. The inbox groups agents by project, with questions you answer in one tap and next-step chips for finished work. Hold the mic to talk; your Mac transcribes it and the router delivers it.

Connects to your Mac over your network. Use Tailscale to reach it from anywhere.

codex-9 needs you
Yes, run it
claude-3 working
pi-2 done

Server connector

Agents on a Linux server or VPS join the same list. Paste one command there: it installs herdr, lets in only this Mac's Unibar key over SSH, and starts herdr. Then enter the address it prints.

Everything goes over SSH. The server opens no new port.

root@hetzner-1:~# curl -fsSL https://herdr.dev/install.sh | sh && …
Unibar: connect root@203.0.113.7

The top notch

Unibar lives around your Mac's camera notch. Beside it, the agent that most needs you: a spinner while it works, amber when it asks, green when it's done. When one finishes, a notice grows out of the notch; double-tap ⌘ to answer it by voice, or ⏎ to open the chat. Hover it for the launcher.

+2

Inbox

Every question and permission prompt in one card. 1–9 answers, J/K moves, E clears, R writes a reply.

Full conversations

Read any agent's transcript with tool calls, diffs and changed files, whether it ran in a terminal or a desktop app.

Take it back

Every send waits a moment. Esc stops it before it reaches the agent.

Smart router

Talk without picking a chat.

Press ⌘⌘ and Unibar first looks at the window in front. If it's a chat with an agent, your words go to that chat, and the pill says so before you speak. Only when nothing in front is a chat does the router decide one thing: which chat gets this?

  • Knows what's in front. Claude Code or Codex in Ghostty, the Claude, Codex, T3 Code or Conductor app, Cursor, VS Code: "Reply to claude-3" or "Types into Cursor", right where you're looking. ⇥ hands it to the router instead.
  • Picks the right split. With several windows or splits open, it goes to the one you're focused on: Unibar reads that window's title to tell which chat it is. When it can't be sure, it types into the focused input and you press ⏎, so it never guesses.
  • Acts when sure. The top pick has to pass a confidence floor and beat the runner-up by a margin.
  • Asks when not. You get the two or three likely chats, numbered. Press a number or say "the first one".
  • Names win. "@codex-12 run the tests" or "at cloud seven…" goes straight there.
  • Learns from you. Your picks teach each chat its topics. The router's own guesses don't.

A chat in front

Reply to claude-3 · ✳ Pricing page

Nothing in front: the router picks, or asks

make the cards line up on mobile
1
Pricing pageclaude-3 · shop/web · 2m ago
62%
2
Card grid refactorcodex-12 · shop/web · 14m ago
55%
3
New claude agentin web
Other chat…1–3 or ⏎ · Esc drops it · two chats fit

Supported harnesses

Works with what
you already run.

Unibar finds each one by itself. Settings → Harnesses shows which are installed and how many chats each has now. Desktop chats appear if they were active in the last 12 hours.

FAQ

Questions

What is Unibar?

A Mac app that sits between you and your coding agents. It shows every agent that's running, tells you when one needs you or finishes, and lets you talk or type to any of them from one place.

Do I need to change how I run my agents?

No. Keep using your terminal or desktop app. Agents in herdr get full control: message, answer, interrupt and start new ones. For Claude Code, Codex, OpenCode, Pi and Copilot running in Ghostty, messages are typed into their own tab.

Where does my voice go?

Whisper transcribes your speech on your Mac. Only a routing request leaves it, and only when the router has to choose: your words plus a short description of each chat in the working set.

Which model does the routing?

You pick it in Settings → Router: a hosted decision model (Jev, OpenRouter, OpenAI Decisions), a language model with your own key or the Claude Code / ChatGPT subscription you already have, or offline keyword matching.

Is there a phone app?

Yes, for iPhone and Android. Pair it with a QR code to answer questions, act on finished work, and talk to agents by text or voice. It connects to your Mac directly over your network.

Can it see agents on my server?

Yes. Settings → Machines gives you one command to paste on a Linux server or VPS. Its herdr agents then show up next to your local ones, over SSH.

What do I need?

A Mac on macOS 13 or later. Grant Accessibility for the talk shortcut and Microphone for voice.

Never keep an agent waiting.