Mark an execution shell handled (or un-handled) for the calling viewer.
Per-viewer inbox state for one execution shell. VIEWER STATE ONLY: it records that a person dealt with the row and never acknowledges, closes, stops or otherwise touches the execution itself, and it advances no event or a2a cursor. Idempotent - repeating the same value is a no-op that returns the same body. The shell’s organization is resolved from the shell, not from the caller’s active workspace, because a user-scoped inbox routinely shows rows from other organizations. A caller who cannot see the shell receives 404.
AuthorizationBearer <WorkOS user access token>WorkOS user access token created by the Rensei CLI. The authenticated organization is resolved from membership and may be narrowed with X-Rensei-Org.
id*stringShell id: session:<sessionId>, instance:<instanceId> or interactive:<sessionId>.
1 <= lengthapplication/json- body
handled*booleantrue records the row as handled by this viewer; false clears it.
The viewer state now recorded for this shell.
application/json- response
id*stringorgId*stringhandledAt*|ISO-8601 when handled, null when cleared. Mirrors the list row’s field.
curl -X POST 'https://app.rensei.ai/api/execution-shells/string/handled' \ -H 'Content-Type: application/json' \ -d '{ "handled": true}'{ "id": "string", "orgId": "string", "handledAt": "string"}Time-ordered conversation projection for one execution shell.
One projection for every shell kind: session activities (agent text, tool entries, system errors), user steers with delivery state, approval asks and decisions, system lifecycle entries with the dispatch receipt last on terminal shells, and inline peer (a2a) entries with their text preview - never the full body. Peer entries are on by default; `peers=0` hides them. Interactive shells with no activities carry the live PTY tail in the top-level `tail` field (observe-fenced, never paged). The shell’s organization is resolved from the shell, not from the caller’s active workspace. A caller who cannot see the shell receives 404.
Count the inbox rows that need the calling viewer and are not handled.
The number of execution shells the caller’s user-scoped inbox (`GET /api/execution-shells?scope=user`) would label "Needs you" (`state=blocked`: not closed, a person is blocking) that the caller has not marked handled, computed as one aggregate over the caller’s org memberships and project entitlements - the same rows the inbox can show. Independent of the active workspace.