Mark Wylde published all-your-agents, an event-driven tool that watches every coding agent running on a machine and presents their sessions in a single interface. The project supports Claude Code, Grok, Codex, and omp, with a plugin architecture for adding more harnesses. No polling is involved: the tool watches the files each harness already writes and the processes that write them.
The Problem It Solves
Teams are running multiple coding agents simultaneously, each writing its own session files in its own format. Claude Code stores journals as JSONL in project-specific directories. Grok uses an active_sessions.json index and event logs. Codex writes rollout files. omp keeps a registry split across daemon files and terminal session records. There is no standard format, no shared index, and no common way to see what all of them are doing at once.
all-your-agents reads each harness's native files directly, normalizes the data into a unified session model, and emits events as sessions change. A single API call returns every live session across all harnesses, sorted by what is waiting on the user. The CLI provides a full-screen TUI dashboard with keyboard navigation, transcript viewing, and filtering by title, folder, harness, model, or process ID.
How It Watches Without Polling
The tool's core constraint, documented as ADR 0001, is that it never polls. The start() method watches the filesystem paths each harness uses and monitors the processes writing to them. File change bursts are coalesced per path with a 25ms quiet period and a maximum latency of 1 second. On macOS, where opening one fs.watch can cause others to miss events, each watch re-checks its coverage once after any watch opens or closes.
Each harness provider knows where its files live. Claude Code's live index is at sessions/pid.json inside the Claude config directory. Grok writes to active_sessions.json and reads phase information from events.jsonl. Codex tracks rollout files that a process currently has open. omp joins data from daemon files and terminal session records using the process's controlling terminal. The tool never opens .key files, auth.json, SQLite databases for messaging, or lock sidecars.
Session State and Subagents
A session's status derives from the harness's own state indicators. Claude Code maps its status values: busy becomes running, waiting becomes waiting, shell becomes waiting with a waitingFor flag set to shell. Grok reads phase information from its event log: streaming_text and tool_execution map to running, permission_prompt maps to waiting, and no open turn maps to idle. Codex reports running when a task starts and idle when it completes or aborts. omp determines status from the last conversation record, distinguishing between running turns, idle sessions, and sessions waiting on background shell commands.
Subagents are tracked separately. Claude Code writes subagent metadata to dedicated files. Grok stores subagent information in meta.json within subagent directories. Codex identifies child rollouts by parent_thread_id. omp reads nested agent files and determines whether a subagent is background based on whether its task result indicated asynchronous spawning. The tool exposes subagent relationships through the session object and emits subagent:start and subagent:end events.
The CLI and TUI
The CLI provides several modes. Running npx all-your-agents opens a full-screen dashboard showing live sessions with status, model, and what each is waiting for. The --once flag prints a single table and exits, useful for scripting. --json outputs live sessions as structured data. --history includes closed sessions alongside live ones. --all shows sessions that close while the dashboard is open.
The TUI redraws only on agent changes, key presses, or terminal resize. Clock times are displayed rather than ticking durations, so nothing runs on a timer. A transcript view follows live sessions in real time, showing prompts, replies, tool calls, and outcomes. The NO_COLOR environment variable is respected.
The Conformance Test Kit
The package includes a testing framework with defineConformanceTests and createMemoryHarness for validating provider implementations. Fixture drivers for Claude, Grok, Codex, and omp run the same test suite against real harness data. This matters for anyone building a new provider: the test kit verifies that the normalized session model works correctly for that harness's file formats and state transitions.
What This Means for Agent Workflows
The tool addresses a practical problem that emerges when teams run multiple coding agents. Without unified visibility, a developer cannot tell which agent is waiting on approval, which is blocked on a background task, or which finished ten minutes ago without anyone noticing. The event-driven architecture means the dashboard stays current without consuming resources on periodic refreshes.
The provider architecture also matters. Each harness writes its files in its own format and has its own quirks: Codex does not persist approval requests, omp writes no transcript until the first reply ends, and Grok's tool_started events carry no call identifier. all-your-agents handles these differences internally so consumers of the API see a consistent session model regardless of which harness produced it. For teams evaluating or running multiple coding agents, this kind of normalization removes the friction of context-switching between separate monitoring tools.