Skip to content

Use case

Know the moment Claude Code or Codex stops to ask for your approval

Pairbar is a macOS app that lays one sidebar over the Claude and Codex desktop apps and shows what every chat is doing. With its optional live status, Claude's and Codex's own hooks tell Pairbar each prompt, tool call, permission request and stop as it happens. A chat that asks to run a command shows Needs you at once, with the command ("Bash · git push"); a working chat shows the tool it's running right now; and a chat that finishes shows it the moment it stops.

Last updated

Claude / CodexPreToolUsePermissionRequestStopPairbar's helper~1 ms · always exits 0chat id + folderevent nameBash · git pushnever prompts, output or repliessocketNEEDS YOU?Fix login redirectBash · git pushAdd dark modeapply_patch · ThemeOff until you click Install… in Settings → IntegrationsInstall backs up ~/.claude/settings.json (or ~/.codex/config.toml) first; Uninstall removes exactlyPairbar's entries. Everything stays on this Mac: nothing goes over the network.
A Claude or Codex hook runs Pairbar's local helper, which passes one line over a private socket: "Needs you · Bash · git push".

The problem

Agents spend a lot of their time waiting on you: a shell command to allow, a file edit to approve. If you're in another window, nothing tells you, and a chat you expected to be halfway done has been sitting on a prompt for twenty minutes.

  • A Codex thread waiting for you to approve a command writes nothing to its files, so from the outside it looks like it's still working.
  • Working out status from files is accurate, but a moment late, and some things (a shell command waiting for permission) can only be guessed.
  • With several chats in two apps, checking each one by hand is the only reliable way to know.

How Pairbar solves it

  1. Install live status for Claude
    Settings → Integrations → Live status for Claude (hooks) → Install…, or the "Get instant status" card at the top of the chat list, which offers Claude and Codex together. Pairbar asks you to confirm first.
  2. Install live status for Codex, and trust it once
    Settings → Integrations → Live status for Codex (hooks) → Install…. Then, in Codex, type /hooks, look at Pairbar's hooks and trust them: Codex runs a hook only after you've reviewed it.
  3. Start a new message or chat
    Both apps read their hooks when a chat starts. Claude chats already open start sending events after their next message; for Codex, start a new chat or reopen the app. Settings shows "Last event received 12 s ago" once events arrive.
  4. Watch for Needs you
    A chat that asks for approval gets the orange ? on its icon, moves to the Needs you section at the top, and shows what it wants to run ("Bash · git push").
  5. Get told while you're elsewhere
    Turn on alerts for Claude and for Codex in Settings → Notifications for a banner when a chat needs you or finishes. The menu-bar icon shows how many chats need you, and ⌃⌥K from any app lists them before you type.

What changes with live status on

From the files onlyWith hooks
Claude asks to run a commandNeeds you when Claude's session record says so, or guessed after a pauseNeeds you at once, with the command
Codex asks to approve a commandlooks like Working (Codex writes nothing while it waits)Needs you at once, with what it wants to run
A chat is workingthe last thing it wrotethe tool running right now ("Bash · npm test", "Edit · Store.swift", "apply_patch · Store.swift")
A turn endsonce its files settlethe moment it stops (Codex: Waiting for you)
Subagents and spawned threadsfrom the transcriptsworking or done as they start and stop

Commands are shown only as their program and subcommand (git push), never with arguments, which could contain passwords. Codex's own questions in plan mode don't go through hooks; Pairbar keeps finding those in the rollout file.

What Install writes, and how to undo it

  • Claude: one entry per event in ~/.claude/settings.json, added after your own hooks for that event. The tool events run asynchronously, so Claude never waits for Pairbar on a tool call. Nothing else in the file changes.
  • Codex: one block at the end of ~/.codex/config.toml, between two comment lines of Pairbar's (or entries added to ~/.codex/hooks.json when your hooks are there). Pairbar adds text after your config; it doesn't rewrite it.
  • Before writing, Pairbar saves a backup to ~/.pairbar/backups (the latest 10 are kept). If a file isn't valid JSON or TOML, Pairbar doesn't touch it and says why.
  • Uninstall removes exactly Pairbar's entries, after another backup, and status comes only from the files again.

What the hooks send

Each hook runs a small helper inside Pairbar that keeps only the chat's id, folder and transcript path, the event's name, and the tool's name with its short summary. It never passes on your prompts, a tool's input or output, or the model's replies. It hands that one line to Pairbar over a private socket that only your account can use, then exits, always successfully and without printing anything. Nothing goes over the network; if Pairbar isn't running, the event is dropped. See what the helper sends.

Without Pairbar

Without Pairbar, you can wire up some of this yourself:

  • Write your own Claude Code hook on the Notification or PermissionRequest event that runs osascript or terminal-notifier to show a macOS banner.
  • Write a Codex hook for PermissionRequest or Stop in ~/.codex/config.toml, and trust it with /hooks.
  • Rely on the apps' own notifications, where they offer them, one app at a time.
  • Keep both apps visible and glance at them, which works until you switch to a browser.

Frequently asked questions

Does Pairbar change my Claude or Codex configuration?
Only when you click Install…. It adds its own hook entries after a backup to ~/.pairbar/backups, leaves your hooks and settings as they are, and Uninstall removes exactly its entries again.
What do the hooks send, and where?
Only local metadata: the chat's id and folder, the event's name, and a tool's name with a short summary such as "git push". Never prompts, tool output or replies. It goes over a private socket on your Mac, never over the network.
Do the hooks slow Claude or Codex down?
The helper takes about a millisecond, always exits successfully and prints nothing, so it doesn't change what the apps do. Claude's tool-call hooks also run asynchronously, so Claude doesn't wait for them.
Why do I have to trust the hooks in Codex?
Codex runs a new hook only after you've reviewed it. Type /hooks in Codex, check Pairbar's entries and trust them; Codex remembers that for the app and the command line together.
Does status work without the hooks?
Yes. Pairbar reads status from the files Claude and Codex already write. The hooks make it instant and let a Codex chat that's waiting for approval show Needs you, which its files never show.

Try Pairbar free for 7 days

One sidebar for the Claude and Codex desktop apps. Everything on for 7 days, no card needed; then $49/year ($39 first year with LAUNCH), $9/month or $129 lifetime (first 200 buyers). macOS 26 or later, Apple silicon.