Agent Monitor

A Paseo plugin that provides a host-wide agent triage roster.

$ paseo plugin install omercnet/agent-monitor

1.2.0 · Updated 2026-10-03

For older daemons

$ paseo plugin install npm:@omercnet/paseo-agent-monitor@1.2.0

Plugins run unsandboxed on your machine. Read the source before you install.

Agent Monitor screenshot 1Agent Monitor screenshot 2

agent-monitor

One roster for every agent on a daemon: an Agent monitor screen in the sidebar plus a global Command Center item (Open agent monitor). On Paseo 0.11 the sidebar row also counts the agents that need attention.

Answers "which of my 38 agents needs me right now" without walking the workspace tree.

Demo

https://github.com/user-attachments/assets/3c841799-ed98-4ec4-86a0-a7917e3894fc

Screenshots

Agent, project, and workspace names come from an isolated synthetic workspace. Both PNGs were captured at 2× pixel density after browser DevTools replaced the local host label and verified that no private organization names remained in the rendered page.

Project-first roster

Agent Monitor project-first roster

Monitor settings

Agent Monitor settings sheet

What it shows

  • Counts and filters by triage bucket: Attention, Running, Idle, Closed. Attention covers requiresAttention, status === "error", and pending permission requests.
  • Default layout groups agents by project, then by workspace under each project. Open the gear beside Refresh for the host-native Monitor settings screen, which can switch to workspace groups or a flat compact list.
  • Settings also control float-pinned sorting, agent sort (triage / recently updated / title), collapse of matching workspace headers, density, default bucket, whether Closed stays out of All, and display toggles for diffs, pin markers, model, wait age, subagent counts, last error, and compact placement. Preferences are a typed, host-scoped document shared by connected clients.
  • Workspace headers show up to two workspace labels and current +additions −deletions (additions in the success color, deletions in danger when color diffs are on).
  • Per row: a status dot that separates errors (danger) from agents waiting on you (warning) and running agents (success), state and wait age on a right-aligned rail (attentionTimestamp, falling back to updatedAt), model, and lastError inline.
  • Parent rows show their subagent count; child rows use a left indent guide.
  • Text filter over title, agent id, provider, model, cwd, project, and workspace.
  • Select an agent row to open that agent, or select a workspace header (or its folder button when collapsed) to open its workspace through Paseo's cross-platform navigation API.
  • Archive one agent, or sweep every closed agent (two taps).
  • The row's badge counts the Attention bucket, using the same rule as the roster. It shows no number while the roster loads or after a refresh fails, and N+ once the agent list reaches the 2,000-agent page limit.
  • Press the badge for a popover of those agents, longest waiting first (up to eight), with Open monitor, which opens the roster filtered to Attention.
  • The monitor screen accepts a bucket param (attention, running, idle, closed, or all) as its initial filter, so a link such as …/surface/monitor?param.bucket=attention opens filtered and keeps that filter on reload. Chips then filter in place without changing the URL.
  • Paseo 0.9 and 0.10 keep the static sidebar item that opens the monitor surface.

How it reads state

usePaseo().agents.list() pages the daemon agent directory, usePaseo().workspaces.list() reads workspace pin state, project id, and diff stats (200 per page, up to 10 pages each), and usePaseo().projects.list() supplies registered project names, including custom renames, so an agent whose workspace is beyond the paged workspace list still lands under its real project. Rows refresh from agent, workspace, and project subscription deltas, debounced 750ms, with a 30s backstop refetch. The screen, the sidebar row, and its popover share that query, subscription set, and backstop; on web and desktop, refreshes pause while the window is hidden and catch up when it returns. The plugin borrows the selected host's connection; it opens no socket of its own.

Limits

Interrupting a turn is not part of PaseoApi, so archive is the only lifecycle action here.

The sidebar popover lists agents but cannot open them: Paseo 0.11 gives popovers no navigation. Open the monitor and select the agent there.

Install

Requires Paseo ^0.9.0 || ^0.10.0 || ^0.11.0. Development uses the stable 0.9 SDK line.

Install the published package on the daemon host:

paseo plugin install npm:@omercnet/paseo-agent-monitor
paseo plugin update agent-monitor

Develop

bun install
bun run check
bun run test
bun run test:coverage
bun run typecheck

Release Please maintains the version, changelog, component tag, and GitHub release from Conventional Commits in the monorepo.

The project supports Paseo ^0.9.0 || ^0.10.0 || ^0.11.0 and pins @getpaseo/plugin, @getpaseo/client, @getpaseo/protocol, and @getpaseo/cli to the stable 0.9 SDK line. Renovate groups @getpaseo/* updates so the SDKs move together.

React 19.1 and React Native 0.81 intentionally match the versions supplied by Paseo.