PiPi
Quickstart
Using Pi
  • 简体中文
  • English
Quickstart
Using Pi
  • 简体中文
  • English
  • Start here

    • Quickstart
    • Using Pi
    • Providers
    • Security
    • Containerization
    • Settings
    • Keybindings
    • Sessions
    • Compaction & Branch Summarization
  • Customization

    • Extensions
    • Skills
    • Prompt Templates
    • Themes
    • Pi Packages
    • Custom Models
    • Custom Providers
  • Reference

    • Session File Format
  • Programmatic Usage

    • SDK
    • RPC Mode
    • JSON Event Stream Mode
    • TUI Components
  • Platform Setup

    • Windows Setup
    • Termux (Android) Setup
    • tmux Setup
    • Terminal Setup
    • Shell Aliases
  • Development

    • Development

JSON Event Stream Mode

pi --mode json "Your prompt"

Outputs all session events as JSON lines to stdout. Useful for integrating pi into other tools or custom UIs.

Event Types

Events are defined in AgentSessionEvent:

type AgentSessionEvent =
  | AgentEvent
  | { type: 'queue_update'; steering: readonly string[]; followUp: readonly string[] }
  | { type: 'compaction_start'; reason: 'manual' | 'threshold' | 'overflow' }
  | {
      type: 'compaction_end'
      reason: 'manual' | 'threshold' | 'overflow'
      result: CompactionResult | undefined
      aborted: boolean
      willRetry: boolean
      errorMessage?: string
    }
  | {
      type: 'auto_retry_start'
      attempt: number
      maxAttempts: number
      delayMs: number
      errorMessage: string
    }
  | { type: 'auto_retry_end'; success: boolean; attempt: number; finalError?: string }

queue_update emits the full pending steering and follow-up queues whenever they change. compaction_start and compaction_end cover both manual and automatic compaction.

Base events from AgentEvent:

type AgentEvent =
  // Agent lifecycle
  | { type: 'agent_start' }
  | { type: 'agent_end'; messages: AgentMessage[] }
  // Turn lifecycle
  | { type: 'turn_start' }
  | { type: 'turn_end'; message: AgentMessage; toolResults: ToolResultMessage[] }
  // Message lifecycle
  | { type: 'message_start'; message: AgentMessage }
  | { type: 'message_update'; message: AgentMessage; assistantMessageEvent: AssistantMessageEvent }
  | { type: 'message_end'; message: AgentMessage }
  // Tool execution
  | { type: 'tool_execution_start'; toolCallId: string; toolName: string; args: any }
  | {
      type: 'tool_execution_update'
      toolCallId: string
      toolName: string
      args: any
      partialResult: any
    }
  | {
      type: 'tool_execution_end'
      toolCallId: string
      toolName: string
      result: any
      isError: boolean
    }

Message Types

Base messages from packages/ai/src/types.ts:

  • UserMessage (line 134)
  • AssistantMessage (line 140)
  • ToolResultMessage (line 152)

Extended messages from packages/coding-agent/src/core/messages.ts:

  • BashExecutionMessage (line 29)
  • CustomMessage (line 46)
  • BranchSummaryMessage (line 55)
  • CompactionSummaryMessage (line 62)

Output Format

Each line is a JSON object. The first line is the session header:

{ "type": "session", "version": 3, "id": "uuid", "timestamp": "...", "cwd": "/path" }

Followed by events as they occur:

{"type":"agent_start"}
{"type":"turn_start"}
{"type":"message_start","message":{"role":"assistant","content":[],...}}
{"type":"message_update","message":{...},"assistantMessageEvent":{"type":"text_delta","delta":"Hello",...}}
{"type":"message_end","message":{...}}
{"type":"turn_end","message":{...},"toolResults":[]}
{"type":"agent_end","messages":[...]}

Example

pi --mode json "List files" 2>/dev/null | jq -c 'select(.type == "message_end")'
Last Updated:: 7/6/26, 9:32 AM
Contributors: seepine
Prev
RPC Mode
Next
TUI Components