Skip to content

step.log

One tool call or reasoning step, for the receipt and the run timeline.

Direction: Harness → Chips
Sent by: a harness
Requires a run: yes
Schema: step.log.json

Every event also carries the envelope.

Field Required Type Description
v yes 1 Protocol major version.
type yes "step.log"
id yes string The event’s own id. Stable across a retry of the same event.
ts yes string When it happened, by Chips’ clock. Stamped on the way in; a value the sender writes is replaced.
workspace_id yes string A workspace identifier: ws_ followed by a ULID.
space_id no string The space, when the event belongs to one.
run_id no string The run, when the event belongs to one.
seq no number Assigned by the server on append, monotonic per workspace. Absent on the way in.
idempotency_key no string Required on every client-originated write. Sending the same key twice is a no-op.
actor yes object The participant an event is attributed to.
actor.kind yes "person" | "harness" | "agent" | "system" Whether a person, a harness, one of a harness’s agents or Chips itself acted.
actor.id yes string The participant id, or system for Chips.
actor.harness_id no string For an agent: the harness it speaks through, whose budget and runs are the agent’s (ADR 0087). Filled in by Chips.
step_id yes string Stable across the started and done events for one step.
status yes "started" | "done" | "failed" Where this step got to.
title no string What the step is, when it was not in the plan.
tool no string The tool called, for example drive.read.
kind no enum What kind of call the tool is, when the harness knows: the apps draw a step by it where they do not know the tool by its name. One of search, web, shell, image, memory, edit, file, mail, handoff, other.
summary no string One line for the receipt.
sources no object[] Where the information came from.
sources[].kind yes "external" | "internal" Whether the source is outside the workspace.
sources[].label yes string What to show in the receipt, for example vendor website.
sources[].url no string Where to look, when there is somewhere to look.
duration_ms no number How long the step took.
error no string Why it failed, when it did.
{
"v": 1,
"type": "step.log",
"id": "evt_01K4ZQPX000000000000000066",
"ts": "2026-09-02T14:22:02.004Z",
"workspace_id": "ws_01K4ZQPX000000000000000001",
"space_id": "spc_01K4ZQPX000000000000000002",
"actor": {
"kind": "harness",
"id": "hrn_01K4ZQPX000000000000000004"
},
"run_id": "run_01K4ZQPX000000000000000005",
"step_id": "read-po",
"status": "done",
"title": "Read PO #4471",
"tool": "drive.read",
"summary": "120 units, delivery 19 September, signed by Arjun.",
"sources": [
{
"kind": "internal",
"label": "Drive",
"url": "https://drive.example/po-4471"
}
],
"duration_ms": 1840
}