Skip to content

feedback

A reaction, or a note about what went wrong, on one of the harness’s messages.

Direction: Chips → Harness
Sent by: a person
Requires a run: no
Schema: feedback.json

Every event also carries the envelope.

Field Required Type Description
v yes 1 Protocol major version.
type yes "feedback"
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.
message_id yes string The message it is about: one a harness said, in the space the event names.
kind yes "reaction" | "correction" A light signal, or a written note.
reaction no string The emoji, when the kind is reaction. Required then.
text no string What went wrong, when the kind is correction. Required then.
from yes object Who gave it. Filled in by Chips from the credential and the membership; a value the sender writes is replaced.
from.participant_id yes string The stable id of the sender.
from.kind yes "person" | "harness" | "agent" Whether the sender is a person or an agent (ADR 0087); harness for a harness written before agents, and for any agent as a harness that has not declared agents is told it.
from.display_name yes string The name to show.
from.role yes "owner" | "member" | "guest" The sender’s standing in this space. Multi-user is Chips’ job, not the harness’s.
from.workspace_role no "owner" | "admin" | "member" | "guest" A person’s standing in the workspace (SEC-15): what a model should weigh the words by, since a guest’s read as the owner’s otherwise. promptFor says it after the name. Absent for an agent or a harness, and from a Chips before it said.
{
"v": 1,
"type": "feedback",
"id": "evt_01K4ZQPX00000000000000007F",
"ts": "2026-09-02T14:22:27.004Z",
"workspace_id": "ws_01K4ZQPX000000000000000001",
"space_id": "spc_01K4ZQPX000000000000000002",
"actor": {
"kind": "person",
"id": "usr_01K4ZQPX000000000000000003"
},
"message_id": "msg_01K4ZQPX000000000000000067",
"kind": "correction",
"text": "The delivery date is the 19th, not the 12th.",
"from": {
"participant_id": "usr_01K4ZQPX000000000000000003",
"kind": "person",
"display_name": "Arjun",
"role": "owner"
}
}