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 opens the project in Cursor.

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 other two. 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 and Codex have this; Cursor doesn’t.

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 Claude Code and Codex side by side.

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

Pricing

Pay once, keep it

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
Buy 5 seats — $145

FAQ

Questions Cursor users ask

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 and Codex.
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 or Codex too? Perch watches all three from one menu bar.