🏖️ SandAgent

Output Format

Stream and JSON output formats for runner-cli

The runner-cli supports multiple output formats via the --output-format option.

Usage

sandagent run [options] --output-format <format> -- "<user input>"
# or short form
sandagent run -o <format> -- "<user input>"

Stream Format (Default)

Outputs Server-Sent Events using the AI SDK UI Stream Protocol.

sandagent run -- "Calculate 2+2"
data: {"type":"start","messageId":"msg_123"}
data: {"type":"text-start","id":"text_1"}
data: {"type":"text-delta","id":"text_1","delta":"The answer is 4."}
data: {"type":"text-end","id":"text_1"}
data: {"type":"finish","finishReason":"stop"}
data: [DONE]

JSON Format

Outputs a single structured JSON object.

sandagent run -o json -- "Calculate 2+2"
{
  "content": [
    { "type": "text", "text": "The answer is 4." }
  ],
  "metadata": {
    "messageId": "msg_123",
    "model": "claude-sonnet-4-20250514",
    "finishReason": "stop",
    "usage": { "promptTokens": 10, "completionTokens": 8 }
  }
}

JSON Structure

content — array of content blocks:

{
  content: Array<{
    type: "text" | "tool-call" | "tool-result";
    text?: string;
    toolCall?: { id: string; name: string; input: unknown };
    toolResult?: { id: string; result: unknown };
  }>;
}

metadata — execution metadata:

{
  metadata?: {
    messageId?: string;
    model?: string;
    sessionId?: string;
    finishReason?: string;
    usage?: { promptTokens?: number; completionTokens?: number };
  };
}

error (optional):

{ error?: string; }

Examples

# JSON with specific model
sandagent run -o json -m claude-sonnet-4-20250514 -- "Analyze data.csv"

# JSON with template
sandagent run -o json --template coder -- "Build a REST API"

# Save to file
sandagent run -o json -- "Calculate pi" > result.json

# Parse with jq
sandagent run -o json -- "What is 2+2?" | jq '.content[0].text'

# Use in scripts
result=$(sandagent run -o json -- "Generate UUID")
uuid=$(echo "$result" | jq -r '.content[0].text')

On this page