Skip to content

run.requested

A lane arrived from a lead, with the trail that led to it.

Direction: Chips → Harness
Sent by: Chips only; refused from a client
Requires a run: no
Schema: run.requested.json

Every event also carries the envelope.

Field Required Type Description
v yes 1 Protocol major version.
type yes "run.requested"
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.
lane_id yes string A lane identifier: lane_ followed by a ULID.
goal yes string What is being asked.
constraints no string[] Bounds on how to do it.
deadline no string When it is needed by.
on_behalf_of yes string The person the work is ultimately for.
requested_by yes string The lead that routed it.
specialist_id yes string The harness this lane runs on, which the run in the envelope belongs to. A lead may name an ephemeral child, which Chips has minted by the time this arrives.
agent_id no string The agent of that harness that works the lane (ADR 0087): its one agent in the lane’s room, the one the lead named, a lead’s hand-off to one of its own, or a child minted for this lane.
trail yes object[] How the work got here. Lanes deeper than three are flattened into steps, not rejected.
trail[].participant_id yes string Who handled this hop.
trail[].run_id no string The run this hop belongs to.
trail[].goal no string What was asked at this hop.
autonomy yes 0 | 1 | 2 | 3 The level for this lane.
link_to no string[] The lead spaces this lane is linked into, where its route card appears.
origin no string The message that caused the routing, quoted in the specialist’s task card.
attachments no object[] Anything the specialist needs.
attachments[].attachment_id yes string A attachment identifier: att_ followed by a ULID.
attachments[].filename yes string The name to show. Never trusted for its type.
attachments[].mime_type yes string Sniffed from the bytes on upload, not taken from the client.
attachments[].byte_size yes number Size in bytes.
attachments[].sha256 yes string Lowercase hex digest. The store is content-addressed.
attachments[].width no number Pixels, for images and video.
attachments[].height no number Pixels, for images and video.
attachments[].duration_ms no number Milliseconds, for audio and video.
attachments[].transcript no string What was said, for a voice note the server transcribed when it arrived (ADR 0054). Machine-heard: the person’s words as best the server could make them out.
attachments[].replaces no string The version of the room’s file of this name that this one was made from (ADR 0099), from the post’s replaces. Filled in by Chips; a value the sender writes is replaced.
attachments[].url yes string A signed URL, bound to the requesting token: fetch it with that token as the bearer, since the URL alone is refused.
attachments[].url_expires_at yes string Ten minutes from issue, by default (decision 10).
label no string What the lead calls the specialist on this lane, when that is not its participant name: a Space’s name, a subagent’s type.
{
"v": 1,
"type": "run.requested",
"id": "evt_01K4ZQPX000000000000000075",
"ts": "2026-09-02T14:22:17.004Z",
"workspace_id": "ws_01K4ZQPX000000000000000001",
"space_id": "spc_01K4ZQPX00000000000000000C",
"run_id": "run_01K4ZQPX00000000000000000D",
"actor": {
"kind": "system",
"id": "system"
},
"lane_id": "lane_01K4ZQPX00000000000000000A",
"goal": "Are the Northwind quotes in line with last quarter?",
"constraints": ["Use the finance warehouse, not the CRM"],
"deadline": "2026-09-02T18:00:00.000Z",
"on_behalf_of": "usr_01K4ZQPX000000000000000003",
"requested_by": "hrn_01K4ZQPX000000000000000004",
"specialist_id": "hrn_01K4ZQPX00000000000000000B",
"trail": [
{
"participant_id": "usr_01K4ZQPX000000000000000003",
"goal": "Get PO #4471 confirmed with Northwind."
},
{
"participant_id": "hrn_01K4ZQPX000000000000000004",
"run_id": "run_01K4ZQPX000000000000000005",
"goal": "Are the Northwind quotes in line with last quarter?"
}
],
"autonomy": 1,
"link_to": ["spc_01K4ZQPX000000000000000002"],
"origin": "msg_01K4ZQPX000000000000000007"
}