Core Concepts
Trace Schema (JSONL)
Specification of the minimal JSONL event schema, supported event types, field alias tolerance, and sample traces.
Last updated: 2026-10-31•v0.1.0
Last Signal standardizes agent telemetry around a minimal, stream-friendly JSON Lines (JSONL) schema. Each line in a trace represents a discrete, timestamped lifecycle event.
Supported Event Types
| Event Type | Description | Required Context |
|---|---|---|
| agent_start | Agent session initialized | trace_id, timestamp |
| model_call | Agent issued prompt to LLM | operation, metadata (model, tokens) |
| tool_call | Agent dispatched tool execution | operation, attempt |
| tool_result | Tool returned result or exception | operation, status, error_message |
| retry | Agent triggered retry attempt | operation, attempt |
| agent_end | Agent gracefully finished loop | status |
| process_error | Fatal unhandled exception or crash | error_message, metadata |
Schema Field Definitions
| Field | Type | Description |
|---|---|---|
| timestamp | float / string | Epoch timestamp (seconds or milliseconds) or ISO-8601 string. |
| trace_id | string | Unique execution trace identifier (e.g. ls_9f8e210a). |
| event_type | string | One of the supported event types above. |
| operation | string | Name of the tool, action, or model being executed. |
| status | string | Execution status: 'started', 'completed', 'failed', 'aborted'. |
| error_message | string / null | Human-readable error description or exception string. |
| attempt | integer | Current retry attempt index (1-indexed). |
| metadata | object | Arbitrary key-value dictionary for payloads, durations, or tokens. |
Field Alias Tolerance
Different agent frameworks (LangChain, AutoGen, CrewAI, custom loops) use varying field nomenclature. To ensure zero-friction integration, Last Signal's trace reader implements lenient alias tolerance:
- tool → operation: If tool is present, Last Signal maps it automatically to operation.
- err → error_message: If err is present, it maps to error_message.
- error → error_message: Automatically normalized.
- type → event_type: Automatically normalized if event_type is absent.
Interactive JSONL Trace Sample
sample_failure_trace.jsonl(6 events)
1{"timestamp":1730412300.1,"trace_id":"ls_demo_881","event_type":"agent_start"}
2{"timestamp":1730412301.2,"trace_id":"ls_demo_881","event_type":"tool_call","operation":"web_search","attempt":1}
3{"timestamp":1730412301.9,"trace_id":"ls_demo_881","event_type":"tool_result","operation":"web_search","status":"failed","error_message":"HTTP 429 Too Many Requests"}
4{"timestamp":1730412302.5,"trace_id":"ls_demo_881","event_type":"retry","operation":"web_search","attempt":1}
5{"timestamp":1730412303,"trace_id":"ls_demo_881","event_type":"tool_result","operation":"web_search","status":"failed","error_message":"HTTP 429 Too Many Requests"}
6{"timestamp":1730412303.8,"trace_id":"ls_demo_881","event_type":"process_error","error_message":"RateLimitExhaustionError: Exceeded provider quota"}