How to Monitor PrimeAgent's Activity: Real-Time Health, Workload, and Token Tracking
PrimeAgent exposes real-time health, workload, and token usage through a combination of CLI commands, RPC endpoints, rotating log files, and an activity tracker class that reports status to both the TUI and programmatic interfaces.
PrimeAgent (from the PrimeIntellect-ai/prime-agent repository) continuously monitors its own operational state through several tightly-coupled TypeScript components. Whether you need a quick health check from the command line or deep programmatic integration via RPC, the codebase provides multiple observability layers that track everything from supervisor socket presence to cumulative token consumption.
Core Monitoring Components
PrimeAgent's monitoring architecture consists of six primary components that work together to provide full visibility into the system:
| Component | Monitors | Source Location | Reporting Method |
|---|---|---|---|
| Daemon Supervisor | Public supervisor socket presence, worker heartbeats, supervisor lease ownership | daemon-supervisor.ts |
Emits log lines via appendRotatingLog and updates SupervisorOwnershipRecord |
| Supervisor Ownership | Generation, PID, and token identifying the current supervisor instance | daemon-supervisor-ownership.ts |
Throws errors like supervisor_generation_stale caught during startup |
| Agent Activity Tracker | Token count, flow direction (↑/↓), and activity labels (thinking, working) | agent-activity.ts |
Provides AgentActivityStatus objects to UI and RPC layers |
| RPC / TUI Status Events | Real-time connection state and session status | rpc-client.ts and interactive-mode.ts |
Exposes agent_messages_status command and renders colored badges |
| CLI Status Command | Daemon state snapshot including socket path, PID, and active sessions | package-manager-cli.ts |
prime-agent status with optional --json output |
| Rotating Log Files | Full chronological trace of daemon and supervisor actions | daemon.log in agent directory |
File system logs accessed via tail or prime-agent doctor --full |
Real-Time Daemon Health Monitoring
Supervisor Socket and Lease Management
The DaemonSupervisor class in packages/coding-agent/src/modes/daemon/daemon-supervisor.ts maintains the primary health loop for the system. When the daemon starts, DaemonSupervisor.start() creates a Unix-socket listener at this.socketPath and writes a supervisor config file containing the generation, PID, and token (lines 1034–1038).
The supervisor continuously validates socket presence and worker heartbeats. If the socket disappears, the event loop logs the loss via appendRotatingLog and triggers a supervisor restart (see the recovery logic referenced in daemon.md at line 36). The internal SupervisorOwnershipRecord tracks lease ownership state throughout this process.
Ownership Validation and Error Handling
The daemon-supervisor-ownership.ts module stores the unique identifiers (generation, PID, token) that distinguish legitimate supervisor instances. When workers connect, they receive the supervisor's authentication claim via supervisorAuthenticationClaim() and validate it against the registry entry.
If validation fails—such as when a stale supervisor attempts to claim ownership—the system throws a supervisor_generation_stale error. The supervisor's startup routine catches these exceptions to prevent split-brain scenarios and ensure only one supervisor manages the worker pool at a time.
Tracking Agent Activity and Token Usage
The Agent Activity Tracker Class
Located in packages/coding-agent/src/modes/interactive/agent-activity.ts, the AgentActivityTracker class maintains granular visibility into session-level operations. InteractiveMode instantiates this tracker when a session begins, routing all incoming events through activityTracker.handleEvent(event).
The tracker maintains rolling statistics including:
- Token count: Cumulative tokens used in the current session
- Direction: Token flow indicator (↑ for output, ↓ for input)
- Activity labels: High-level states like "thinking", "working", or "idle"
Access the current status programmatically by calling activityTracker.getStatus(), which returns an AgentActivityStatus object containing these fields.
Accessing Status via CLI and Logs
The prime-agent status Command
For operational health checks, the CLI entry point (implemented in package-manager-cli.ts) provides the prime-agent status command. This outputs a concise human-readable table showing socket path, supervisor PID, active sessions, and heartbeat health.
For automation and monitoring systems, append the --json flag to receive structured data:
prime-agent status --json
This produces machine-readable output including:
{
"socketPath": "/tmp/prime-agent-12345.sock",
"supervisorPid": 12345,
"supervisorGeneration": "1",
"activeSessions": 2,
"heartbeat": { "lastSeen": "2026-08-14T13:42:10.123Z" }
}
Rotating Log Files
PrimeAgent writes persistent logs to daemon.log within the agent directory using the appendRotatingLog function from daemon-supervisor.ts. For real-time debugging or post-mortem analysis, tail this file:
tail -f $(prime-agent status --json | jq -r .socketPath | sed 's/.sock/.log/')
Alternatively, use the built-in diagnostic command:
prime-agent doctor --full
Programmatic Monitoring via RPC
The RPC layer in packages/coding-agent/src/modes/rpc/rpc-client.ts exposes the same status data available in the TUI through programmatic interfaces. The key command is agent_messages_status (implemented around line 446), which returns the current activity state.
Monitor PrimeAgent programmatically using Node.js:
import { RpcClient } from "prime-agent/rpc-client";
async function monitor() {
const client = await RpcClient.connect("/tmp/prime-agent-12345.sock");
// Subscribe to live status updates
client.on("agent_messages_status", (payload) => {
const { statusKey, statusText } = payload;
console.log(`Status [${statusKey}]: ${statusText}`);
});
// Monitor connection state changes
client.on("connection_status", (status) => {
console.log(`Connection: ${status}`);
});
}
monitor();
The RPC client also emits session_status events for tracking running/idle states and error conditions, enabling you to build custom dashboards or alerting systems.
How the Monitoring Pipeline Works
Understanding the data flow helps troubleshoot gaps in observability:
-
Supervisor startup:
DaemonSupervisor.start()initializes the Unix socket and writes the supervisor config file with generation, PID, and token identifiers. -
Worker admission: Workers connecting to the supervisor socket validate the
supervisorAuthenticationClaim()against the registry. Stale or missing sockets trigger election of a new supervisor. -
Activity tracking: During active sessions,
InteractiveModeroutes events throughAgentActivityTracker.handleEvent(), maintaining token counts and activity labels. -
Status propagation: The tracker's
getStatus()method feeds two pathways simultaneously—the TUI renders this in thestatusContainer(showing strings like "↓ 123 tokens thinking"), while the RPC server maps identical data toagent_messages_statusfor external consumers.
Summary
prime-agent status --jsonprovides immediate, machine-readable health snapshots including socket paths, PIDs, and session counts.AgentActivityTrackerinagent-activity.tstracks real-time token usage and activity states, accessible via both TUI and RPC.- Supervisor health is monitored through
daemon-supervisor.ts, which validates socket presence and manages ownership claims throughdaemon-supervisor-ownership.ts. - Log files at
daemon.logprovide persistent audit trails viaappendRotatingLog, accessible through standard Unix tools orprime-agent doctor --full. - RPC integration via
rpc-client.tsenables subscription toagent_messages_statusevents for building custom monitoring solutions.
Frequently Asked Questions
How do I check if the PrimeAgent daemon is running?
Run prime-agent status in your terminal. If the daemon is active, it displays the supervisor PID, socket path, and active session count. Use the --json flag for programmatic parsing. If the daemon is down, the command exits with an error indicating it cannot connect to the supervisor socket.
Where does PrimeAgent store its activity logs?
Logs are written to daemon.log within the agent directory, managed by the appendRotatingLog function in daemon-supervisor.ts. You can locate the exact path by checking the socket path from prime-agent status --json and replacing .sock with .log, or by running prime-agent doctor --full to see all log locations.
Can I monitor PrimeAgent token usage programmatically?
Yes. Import the AgentActivityTracker class from agent-activity.ts to track tokens directly in custom extensions, or connect via the RPC client to subscribe to agent_messages_status events. The RPC payload includes statusKey and statusText fields showing current activity and token flow direction (↑/↓).
What does the supervisor_generation_stale error indicate?
This error originates in daemon-supervisor-ownership.ts when a worker detects that the supervisor's generation identifier does not match the registry entry. This typically occurs during supervisor failover or when multiple daemon processes attempt to claim the same lease. The system catches this error during the startup routine to prevent split-brain scenarios and trigger election of a new supervisor.
Have a question about this repo?
These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →