membership.added
A person or an agent joined a space. Shows as a muted centred line.
Direction: Chips → the log
Sent by: a person
Requires a run: no
Schema: membership.added.json
Fields
Section titled “Fields”Every event also carries the envelope.
| Field | Required | Type | Description |
|---|---|---|---|
v |
yes | 1 |
Protocol major version. |
type |
yes | "membership.added" |
|
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. |
participant_id |
yes | string |
Who joined. |
participant_kind |
yes | "person" | "harness" | "agent" |
A person or an agent (ADR 0087); harness for a harness in a room before the upgrade gave it an agent. |
role |
no | "owner" | "member" | "guest" |
Their standing here, which is what every from field reports. |
joined_at |
no | string |
Defaults to the event’s own timestamp. |
moved_from |
no | string |
For an agent moved here from another room (ADR 0087): the room it left. Written by Chips. |
fork_of |
no | string |
For a fork’s copy (ADR 0087, Fork): the agent.fork it answers, so the room shows the copy joining on the line that asked for it. Written by Chips. |
made_for |
no | string |
For a new agent a person asked a harness for (ADR 0108): the agent.asked it answers, so the room shows it joining on the line that asked for it. Written by Chips. |
agent_name |
no | string |
For a harness asked for this room from the + (ADR 0150): the first name its agent will have here, held for it until it claims the room or answers in it, and the name the room calls it by meanwhile. A person’s device may propose one; Chips keeps it when nobody has it and picks one off its list otherwise. |
invite_id |
no | string |
For a person who came in by a space’s invite link (ADR 0168): the link, so the room says they joined by it. The actor is whoever made the link, who put them here. Written by Chips. |
Example
Section titled “Example”{ "v": 1, "type": "membership.added", "id": "evt_01K4ZQPX0000000000000000C9", "ts": "2026-09-02T14:20:05.004Z", "workspace_id": "ws_01K4ZQPX000000000000000001", "space_id": "spc_01K4ZQPX000000000000000002", "actor": { "kind": "person", "id": "usr_01K4ZQPX000000000000000003" }, "participant_id": "hrn_01K4ZQPX000000000000000004", "participant_kind": "harness", "role": "member", "joined_at": "2026-09-02T14:20:05.004Z"}