# How to Use PI Desktop for Real‑Time Data Monitoring

> Discover how PI Desktop enables real-time data monitoring with its stream-enabled agent runtime. Get instant UI updates without polling and streamline your data analysis.

- Repository: [Lan/PI-Desktop](https://github.com/vastsa/PI-Desktop)
- Tags: how-to-guide
- Published: 2026-09-12

---

**PI Desktop supports real‑time data monitoring through a stream‑enabled agent runtime and Electron‑IPC protocol that pushes incremental updates to the UI without polling.**

PI Desktop (vastsa/PI-Desktop) is an open‑source framework designed for AI‑driven desktop applications. Its architecture natively supports real‑time data monitoring by treating streamed responses as first‑class citizens, allowing developers to build live dashboards and log viewers that update instantly as data arrives.

## Streaming Architecture

The core of PI Desktop’s real‑time capability lies in the **stream‑enabled agent runtime** implemented in [`packages/agent-runtime/src/subagent.ts`](https://github.com/vastsa/PI-Desktop/blob/main/packages/agent-runtime/src/subagent.ts). When a provider returns a response marked with `status: "streaming"`, the runtime forwards each partial result through the IPC bridge immediately rather than buffering until completion.

This design preserves ordering and timestamps, enabling the UI to render updates as they arrive rather than waiting for the full dataset.

## IPC Protocol for Real‑Time Updates

All inter‑process communication channels are strictly defined in [`packages/shared/src/protocol.ts`](https://github.com/vastsa/PI-Desktop/blob/main/packages/shared/src/protocol.ts). For real‑time monitoring, two channels are critical:

- **`pi-desktop/agent/prompt`** – An invoke channel used to initiate a streaming turn.
- **`pi-desktop/agent/event/message`** – An event channel that pushes incremental messages from the back‑end to the renderer.

This whitelist approach ensures only authorized real‑time channels are exposed, maintaining security while enabling low‑latency data flow.

### Starting a Streaming Turn

To begin monitoring data in real time, invoke the prompt channel with the `streaming` flag enabled:

```typescript
import { ipcRenderer } from "electron";

ipcRenderer.invoke(
  "pi-desktop/agent/prompt",
  {
    // Prompt that triggers a streaming provider (e.g., a long‑running model)
    text: "monitor temperature",
    // Enable streaming mode
    streaming: true,
  }
);

```

### Receiving Incremental Messages

Subscribe to the event channel to receive data chunks as they stream from the back‑end:

```typescript
import { ipcRenderer } from "electron";

ipcRenderer.on(
  "pi-desktop/agent/event/message",
  (_event, message) => {
    // `message` arrives as soon as the back‑end streams a chunk
    console.log("Real‑time update:", message);
    // Update a chart or log view here
  }
);

```

## Remote Data Monitoring Capabilities

PI Desktop extends real‑time monitoring to remote hosts through the **Remote Agent Control** architecture documented in [`docs/spec/06-delivery/07-remote-control-rollout.md`](https://github.com/vastsa/PI-Desktop/blob/main/docs/spec/06-delivery/07-remote-control-rollout.md). When configured for remote operation, the same streaming IPC messages are forwarded over an SSH‑tunneled RACP (Remote Agent Control Protocol) channel.

You can monitor logs or metrics on another machine using identical code patterns. The IPC bridge automatically routes requests to the remote host while preserving the same low‑latency semantics:

```typescript
// Same invoke, but the desktop is configured to use a remote host.
// The IPC bridge automatically routes the request over the SSH‑tunneled RACP channel.
ipcRenderer.invoke("pi-desktop/agent/prompt", { text: "fetch remote logs", streaming: true });

```

## Session State Management

The session state machine defined in [`docs/spec/03-runtime/10-session-state-machine.md`](https://github.com/vastsa/PI-Desktop/blob/main/docs/spec/03-runtime/10-session-state-machine.md) treats each streamed turn as a first‑class unit within the session lifecycle. This design allows the UI to maintain consistency even when:

- Streams are aborted mid‑transmission.
- Connections pause and resume.
- Multiple concurrent monitoring sessions run simultaneously.

The back‑end can terminate or pause streams without corrupting the overall session state, ensuring robust long‑running monitoring tasks.

## Performance Safeguards

To prevent UI lag during high‑volume streaming, PI Desktop enforces payload size limits in [`packages/shared/src/rpc-limits.ts`](https://github.com/vastsa/PI-Desktop/blob/main/packages/shared/src/rpc-limits.ts). These constraints cap the maximum size of streaming chunks, guaranteeing responsive rendering even when monitoring high‑frequency data sources like system metrics or live logs.

## Summary

- **Stream‑enabled runtime**: The agent runtime in [`packages/agent-runtime/src/subagent.ts`](https://github.com/vastsa/PI-Desktop/blob/main/packages/agent-runtime/src/subagent.ts) processes partial results immediately rather than buffering complete responses.
- **Dedicated IPC channels**: Use `pi-desktop/agent/prompt` to start streams and `pi-desktop/agent/event/message` to receive updates defined in [`packages/shared/src/protocol.ts`](https://github.com/vastsa/PI-Desktop/blob/main/packages/shared/src/protocol.ts).
- **Remote capability**: SSH‑tunneled RACP channels extend real‑time monitoring to remote hosts via [`docs/spec/06-delivery/07-remote-control-rollout.md`](https://github.com/vastsa/PI-Desktop/blob/main/docs/spec/06-delivery/07-remote-control-rollout.md).
- **Session integrity**: The state machine in [`docs/spec/03-runtime/10-session-state-machine.md`](https://github.com/vastsa/PI-Desktop/blob/main/docs/spec/03-runtime/10-session-state-machine.md) manages streamed turns as first‑class units, supporting abort and resume operations.
- **Built‑in limits**: RPC payload caps in [`packages/shared/src/rpc-limits.ts`](https://github.com/vastsa/PI-Desktop/blob/main/packages/shared/src/rpc-limits.ts) ensure UI responsiveness during heavy data loads.

## Frequently Asked Questions

### Does PI Desktop require polling for real‑time updates?

No. PI Desktop uses a **push‑based streaming architecture** where the back‑end forwards data chunks through Electron IPC events as soon as they are available. The renderer listens to `pi-desktop/agent/event/message` events rather than polling endpoints, eliminating latency from repeated requests.

### Can I monitor remote servers with PI Desktop?

Yes. The Remote Agent Control feature routes streaming IPC messages over SSH tunnels to remote hosts. As implemented in [`docs/spec/06-delivery/07-remote-control-rollout.md`](https://github.com/vastsa/PI-Desktop/blob/main/docs/spec/06-delivery/07-remote-control-rollout.md), you use the same `pi-desktop/agent/prompt` invoke and `pi-desktop/agent/event/message` event channels, but the framework automatically routes traffic to the remote runtime via the RACP protocol.

### What happens if a real‑time stream is interrupted?

The session state machine ([`docs/spec/03-runtime/10-session-state-machine.md`](https://github.com/vastsa/PI-Desktop/blob/main/docs/spec/03-runtime/10-session-state-machine.md)) handles stream interruptions gracefully. Each streamed turn is tracked independently, allowing the back‑end to abort or pause without losing session consistency. The UI can detect disconnections through IPC event handlers and initiate new streaming turns as needed.

### Are there limits on streaming data size to protect UI performance?

Yes. [`packages/shared/src/rpc-limits.ts`](https://github.com/vastsa/PI-Desktop/blob/main/packages/shared/src/rpc-limits.ts) enforces payload size constraints on streaming messages to prevent memory pressure and dropped frames. These limits ensure the renderer remains responsive even when ingesting high‑frequency telemetry or log streams.