macOS menu bar · Amp

Every Amp thread, honestly green.

Perch sits in your menu bar and watches every Amp thread on your Mac — running, idle, or stopped waiting on your approval, read from Amp’s own state machine rather than guessed from a file’s timestamp. Type a reply straight back from your phone.

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

How it works

Three layers, and the first one is a refusal

Ignored

The local thread store, deliberately skipped

Amp keeps a folder of thread JSON on disk, and it is dead — on a machine running Amp every day it had not been written to in four months, because threads sync to Amp's servers now. Reading it would resurrect long-finished sessions and present them as your fleet. Perch does not open it.

Scan

Amp's own logs, read forward

Discovery reads the CLI's structured logs instead — one file per thread. Their agent-state lines carry a real machine: working, streaming, running tools, compacting, idle. So an Amp row goes green because Amp said it was working, not because a file changed.

Plugin

The one state the log never had

Amp has no hook configuration to install into, but it does have plugins. Perch installs one it owns and can verify, which subscribes to Amp's thread state and reports the moment a thread stops for your approval — the state no log line ever carried.

The scan underneath needs nothing from you, and it stays there even with the plugin installed. If the plugin is removed, or Amp changes what it reports, Amp threads keep appearing with live running and idle state — you lose the waiting-on-approval row, not the fleet.

What lands on the row

A state machine, not a modified date

Running or idle, from Amp itself

Not inferred from file timestamps. An idle Amp that is still connected keeps receiving chatter that touches its log, so anything keyed on freshness would read every open Amp as permanently running. State comes from the last agent-state line and nothing else.

Waiting on you

The plugin surfaces the approval state directly, so an Amp thread stopped for your decision says so on the row, on your phone and on your watch — instead of sitting there looking like it is still working.

The tool it is running

The activity line names what Amp is doing right now, and the project it is doing it in, both read from the same stream as the state.

The thread's own title

Amp names its threads, and Perch shows that name rather than the folder it runs in. Two Amp threads in one repository are finally told apart.

Which process owns which thread

A live Amp holds its current thread's log open for writing, so the binding between a process and a thread is observed rather than guessed — the same kind of ground truth Perch uses for Devin.

A killed thread reads as ended, never idle

An Amp stopped mid-turn leaves its log asserting it is still streaming, forever. Perch marks that ended. Calling it idle would read to the rest of the app as a turn that completed — and fire the completion sound and a finished notification for work that never finished.

Answering

Type into Amp from your phone. Stop, deliberately, is missing.

An Amp thread running in tmux or herdr can be typed into from the iPhone app: a full message, line breaks and all, straight into Amp’s composer. Your Mac can stay locked — the text never goes through the keyboard or the screen, so nothing has to be awake to receive it.

Multi-line was not assumed. Every agent that accepts it was watched holding two lines unsubmitted before the feature was turned on, and Amp is one of the three also seen answering a two-line message as a single message rather than two.

Why there is no Stop button

Stop works for Claude Code, Codex and OpenCode. Amp is not on that list because its interrupt key was measured and it is not the key the others use — so the obvious implementation would send a keystroke that does something else to your thread.

That is a measurement, not a backlog item. The button appears when there is a key worth sending, and not before.

Usage

Your plan, parsed out of a sentence

Amp does not publish your usage as data. Its internal API exposes exactly one usage-shaped call, and what comes back is a string: the server writes the sentence and the CLI prints it. So Perch reads English — the plan name, the named percentage meters inside it, and how many days until it renews.

The meter with the least left drives the headline bar, because there is no way to ask Amp which of its meters is the binding one. The rest appear as named windows beside it, so no figure is drawn twice.

What an unfamiliar sentence gets

Nothing. If the wording matches no shape Perch has actually captured, no strip is drawn at all — rather than a confident 0% that would read as an account about to run dry.

The countdown is day-granular because the sentence is. Perch will not render an hour it cannot see.

It reuses the credential the Amp CLI already stores, read-only, talks to one allow-listed host, fetches nothing unless an Amp session is on screen, and waits five minutes between fetches.

What it doesn’t do

The gaps, named

No tokens, no context window

Nothing Amp writes locally carries them. Measured, then measured again on a later research pass to check it had not changed.

No per-thread cost

Same reason. Amp’s CLI can report cost per thread, but Perch does not read it yet, so the row shows no dollar figure.

Amp is not in Stats

Perch’s Stats view is built on tokens and spend. With neither available for Amp, an Amp column would be an empty one — so Amp threads are watched live and left out of the history.

No Approve or Deny from the phone

Perch can tell you an Amp thread is waiting on a decision, and you can type to it — but answering the approval itself from your phone is not built. Watching the request and brokering the answer are different jobs, and only the first is done.

No summary when a turn finishes

An Amp thread goes from working to idle. Perch tells you the turn finished, but without the summary line it can show for agents that publish one.

CLI only

Perch watches the Amp CLI. Amp inside an editor is not classified separately, and those threads are not discovered.

Every one of these is a measurement rather than a plan. Where Amp gains a way to publish a number, the number appears; until then the row stays empty instead of filled with a plausible guess. OpenCode is the other end of this spectrum, if you want to see what a fully instrumented provider looks like.

Pricing

Pay once. Keep watch forever.

One licence covers every agent Perch supports, not just Amp — and includes the iPhone companion and all future updates.

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

Prices in USD, tax included.

FAQ

Amp, specifically

Do I have to configure Amp?
No. Perch finds Amp threads with no setup at all, by reading logs the CLI already writes. For the waiting-on-approval state it installs one plugin file it owns — written with restrictive permissions and an owner marker, so Perch can tell its own file from anything else and will not touch a plugin it did not write. Amp has no hook configuration, so there is no version of this that works by editing a settings file.
Why doesn't Perch show tokens, context or cost for Amp?
Because nothing on your Mac carries them. This was measured, and then measured again on a later research pass specifically to check whether it had changed: Amp's logs have no token counts, and the local thread store that once did is the stale one Perch refuses to read. Rather than show a zero that looks like a real number, Perch shows nothing.
Can I stop an Amp turn from my phone?
No, and that is a deliberate omission rather than unfinished work. Stop is offered for Claude Code, Codex and OpenCode. Amp's interrupt key was measured and it is not the key those agents use, so sending that key would do something other than stop the turn. Perch would rather offer no button than one that quietly does the wrong thing.
Can I reply to an Amp thread from my phone?
Yes. Amp is one of the agents you can type a full message into from the iPhone app, multi-line included — a two-line message was checked by hand and arrived as one message rather than two. It needs the thread running inside tmux or herdr, which is how Perch reaches a session without touching your keyboard or waking the screen.
Why is my Amp usage strip missing?
Because Amp does not publish usage as data. Its server renders a sentence and the CLI prints it, so Perch parses English. It reads the shapes it has actually captured — a plan name, named percentage meters, a renewal countdown — and when a sentence matches none of them it shows no strip at all. An unrecognised account gets nothing rather than an invented figure.
Does Perch write anything to my Amp data?
Only the one plugin file, and only in Amp's plugin folder. The thread logs are read and never written, the dead thread store is never opened, and the plugin sends metadata about lifecycle events — never your prompts, your code, or the model's replies.
What happens if Amp changes its log format?
Perch degrades rather than lies. The log is an internal, unversioned surface and is treated as one: when Perch can no longer read a state, it falls back to reporting the thread as recently touched instead of asserting a state it cannot see.