Multi-Agent Control Panel
See every running agent, tell parallel sessions apart, and find the one that's blocked
When you run several agents at once — two Claude Code windows, a Codex session, a background refactor — Pushary tracks each one as its own session and shows you which is blocked, which is idle, and which has errored. The dashboard lives at Dashboard → Agent; the same view is available to agents over MCP via list_sessions.
Per-agent identity
Every session is identified by two fields the hook attaches automatically:
Prop
Type
Together with the agent type and name, the tuple (site, agent type, machine, session) uniquely keys a session. That's why two claude windows in the same repo on the same machine show up as two rows, not one merged row — and why "route the blocked one to my phone" can actually point at the right session.
machineId is a hash of your hostname, computed locally. Pushary never sees your real machine name.
Session status
Each session has a computed status that reflects what it's doing right now:
| Status | Meaning |
|---|---|
active | Seen within the last 2 minutes, nothing pending |
waiting | Has an open approval question — this is the one that needs you |
idle | Was active but hasn't been seen for 2+ minutes |
offline | Hasn't been seen for 15+ minutes |
errored | Last tool call reported an error (sticky until the session recovers) |
waiting always wins — if a session has a pending question it shows as waiting regardless of how long ago it was last seen. errored is sticky and never auto-flips to idle/offline.
Presence is kept fresh by a background sweeper, and a foreground-app check suppresses a push when you're already looking at the dashboard, so you don't get buzzed for something you're watching live.
The Blocked Queue
The agent overview groups everything by session and floats the blocked ones to the top, so the first thing you see is "which agent is waiting on me." Each card shows the agent, its machine, its status, and any pending question — with the Stop control right there.
Reading sessions from an agent (list_sessions)
A supervising agent can poll the fleet over MCP. list_sessions is read-only — it never starts, stops, or steers anything, and sends no notification. It's scoped to your API key's site; there's no parameter that can widen it to another tenant.
{
"tool": "list_sessions",
"arguments": { "status": "waiting", "limit": 20 }
}It returns { sessions, pendingQuestions }. Each session carries its identity (agentType, agentName, machineId, sessionId), its computedStatus, the last action/event, and a human timeAgo.
The status filter accepts active, idle, waiting, and errored. It does not accept offline — offline sessions are still returned by an unfiltered call, you just can't filter for them.
See the full tools reference for the exact schema.