Activity Monitor For Your AI Agents - Corral
Open Activity Monitor while a few coding agents are running and you get a wall of node and python processes with no idea which is which. Which one is the Claude Code session that has been idle for a day? Which node is a Cursor agent still mid task? Which one is safe to kill? https://popy.app/apps/corral I kept hitting this, so I built Corral : a free, open-source, native macOS app that shows you every Claude Code, Codex, Cursor, Kiro and Antigravity process on your machine, what project it belongs to, how long it has been sitting there, and how much of your Mac it is holding. It is Swift and SwiftUI, MIT licensed, needs no special permissions, and makes no network calls. Repo: https://github.com/popyapp/corral The app itself is simple. The interesting part was everything I learned getting it to work, so that is what this post is about. Finding the agents is harder than it sounds The naive approach is to match on process names. That falls apart immediately. A running cursor-agent never showed up, because nothing in the chain says "cursor" where you would look. The CLI is symlinked as agent , that symlink points at a shell wrapper, and the wrapper execs a bundled node , so the kernel reports the executable as node . The wrapper also exports CURSOR_INVOKED_AS="$(basename $0)" , which tells you that being renamed is a supported way to run it, not an accident. Matching on process names is a dead end. The install directory turned out to be the only stable signal, and it hands you the version for free. Three tools, three ideas of where a conversation lives Once you can find the agents, you want to show what each one is doing. That means reading its transcript, and every tool stores state differently. Claude Code appends JSON lines to one file per session and records the working directory in every entry. Codex writes rollout files and records the directory once, in the opening line, so a session is identified by its first line and described by its last. Cursor keeps a conte