macOS menu bar · Cursor

Every Cursor session, at a glance.

Perch sits in your menu bar and watches every Cursor session on your Mac — cursor-agent in a terminal and agents inside the IDE, from one install. Live state, the git branch each one is on, and how much of your plan you’ve used.

Get Perch — $29One-time purchase · macOS 13 or later
The Perch panel open from the macOS menu bar, showing four agent sessions with live state, model, context window and spend

How it works

One hook install, both surfaces

One install

cursor-agent and the IDE, together

Perch writes a chain-safe hook into your Cursor config once, and it covers both surfaces — the cursor-agent CLI in a terminal and agent sessions inside Cursor itself. Perch labels which is which on every row, so a fleet of both reads clearly.

Liveness

A session that ends really ends

Neither of Cursor's end-of-session signals is reliable on its own, so Perch runs a watchdog alongside them and falls back to scanning Cursor's own chat records. The result is that finished sessions disappear instead of sitting there forever pretending to run.

Jump

Back to where it's running

One click on a CLI session lands in the exact terminal pane — Warp, iTerm2, Ghostty or Terminal.app. An IDE session raises Cursor itself: its deep links all create something new rather than focus a conversation that already exists, so there's nothing honest to aim at yet.

Worktrees

Four sessions in one repo, and you can tell them apart

cursor-agent --worktree creates a worktree per session, which is a good way to work and a terrible thing to monitor: every row resolves to the same repository name and they render identically. Perch shows the git branch on each row, read live from the checkout itself, so parallel sessions are distinguishable at a glance.

perch main · Read: Views.swift
perch feat/usage-bars · Bash: swift test
perch fix/watchdog · Edit: Session.swift

Read from the repository rather than from Cursor, which reports no branch at all — so it stays correct when you switch mid-session, and works in worktrees, where the naive approach fails precisely where it matters most.

Usage

Included and API, on every screen you own

Both bars, plus the reset

Cursor bills on a billing cycle rather than rolling windows, so Perch shows your Included and API usage against that cycle, with the date it ends. Your plan label sits beside them.

There when Cursor isn’t

The reading is stored, so the bar survives quitting Cursor and relaunching Perch. It clears at the end of your billing period rather than guessing a zero for a period nothing has looked at.

On the phone and the watch

The same bars ride along to Perch Companion and the Apple Watch app, so you can check your remaining usage without opening the Mac.

Opt-in, and off by default

These are the only Cursor numbers that need your account, so they’re behind a switch. Everything else on this page works with it off.

What it doesn’t do

Cursor gives less away than the others. Here’s where

Perch was built against Claude Code first, and not everything ports. Rather than let you find these out after paying:

No remote approvals

Cursor has no event that means “asking a human”, so there is no “needs you” state to send anywhere. Wiring it to the hook that does exist would alert you on every auto-approved command. Claude Code, Codex and OpenCode have this; Cursor doesn’t. Typing a reply from your phone is a separate route and does work — it needs no permission event.

No token totals in Stats

Cursor doesn’t persist per-turn counts, so nothing can total them after the fact. You still get sessions, active days, streaks and the heatmap.

No per-session cost

Deferred, not impossible — under Auto there’s no model name to price against, and a made-up number is worse than a blank.

Delegates sit side by side

Cursor never fires its own subagent hooks, so background work shows as sibling rows rather than nested under its parent.

No per-model breakdown

Under Auto, Cursor reports its model as “default”, so there’s no model name to attribute a session to and nothing for a breakdown to split.

Everything else is there

Live state, the CURSOR badge on Mac and phone, git branch, jump-to-session, usage, streaks and the heatmap, launch at login, and the same one-time license.

Stats

Sessions, streaks and a year of days

A contribution heatmap, current and longest streak, your longest session and busiest day, and a running count of sessions and active days. Filter to Cursor alone, or set it against every other agent you run.

The Perch stats panel showing a contribution heatmap, streaks, and a per-model token breakdown

Pricing

Pay once for the fleet. Subscribe for the conversation.

Solo

$29one-time
  • Lifetime license — pay once, keep it
  • One Mac at a time; deactivate in-app to move
  • iOS companion, push alerts & Live Activities included
  • Notarized app with signed automatic updates
Buy Perch — $29

Team

$29per seat, one-time · 2+ seats
5
seats × $29 = $145
  • A license key for every teammate — not one shared key
  • Assign and revoke seats by email from your customer portal
  • Your seat is claimed on purchase; invite the rest by email
  • Same lifetime license and updates on every seat
  • Perch Pro is separate — each teammate who wants it subscribes in the iPhone app
Buy 5 seats — $145

Pro

Most popular
$4.99per month

or $29 a year

Launch price until 30 September, then $49 a year

  • A Mac app licence included, for as long as you subscribe — nothing separate to buy
  • Read your agents’ conversations from your iPhone, and reply straight back into the session
  • Works with your Mac locked, from anywhere your phone can reach it*
Get it on the App Store

Free to download · Pro is an in-app purchase

* What Pro can reach depends on the agent and on where its session is running. Replying needs the session inside tmux or herdr — OpenCode uses its own local port instead — and it has to be switched on in Settings, because paying for Pro is not the same as consenting to remote input. Reading a conversation works wherever the session runs. Each agent’s own page says exactly what it supports, and what it doesn’t.

FAQ

Questions Cursor users ask

Can I reply to a Cursor session from my phone?
Yes, with Perch Pro — the subscription bought in the iPhone app, not the perpetual $29 licence. This is also separate from approvals above. You can type a full multi-line message straight into Cursor's composer from the iPhone app, as long as the session is running in tmux or herdr — that route needs no permission event, which is why it works for Cursor when remote Allow and Deny do not. Stop is not offered: Cursor's interrupt key has not been measured, and Perch does not send a keystroke it has not watched work.
Can I approve Cursor permission prompts from my phone?
No, and this is deliberate rather than unfinished. Cursor has no event meaning “I am asking a human” — its hook fires on every shell command, including ones it was always going to auto-approve. Wiring that to notifications would turn every ls and git status into a phone and watch alert. So Cursor sessions run to idle without a “needs you”, and the approvals you get from Perch are for Claude Code, Codex and OpenCode.
Does it work with the Cursor IDE or only the CLI?
Both, from a single hook install, and each row is labelled so you can tell them apart. That was validated on a machine with Cursor.app installed rather than assumed.
Why does Stats show sessions and days for Cursor but no tokens?
Because Cursor never writes them anywhere a scan can read. Per-turn token counts arrive on a live hook and aren't persisted, so a retroactive scan has nothing to total. Cursor moves sessions, active days, streaks and the heatmap, and contributes nothing to token totals — shown as absent rather than as a misleading zero.
Is there a per-session cost figure for Cursor?
Not yet. It's deferred rather than impossible: under Auto, Cursor reports its model as “default”, so there's no model to price the tokens against. Rather than print a number we can't stand behind, Perch leaves it out.
Do the usage bars need my Cursor login?
The Included and API bars are opt-in, because the only place those numbers exist is your Cursor account. Turn it off and everything else — sessions, state, git branch, Stats, jump-to-session — works untouched. Once on, the reading is stored so the bar is still there when Cursor isn't running.
Does my code leave my Mac?
No. Session state and usage stay local. Data leaves only for features that require it: your paired iPhone (encrypted, over your LAN or your own tailnet), the push relay, and Polar for license checks.

Running Claude Code, Codex, Devin, OpenCode, Amp or Antigravity too? Perch watches all 7 from one menu bar.