Durable and public tool activity. Raw arguments, results, queries, titles, paths, and workspace content deliberately have no field in this type. The stable target ids and bounded public error summary are the only context kept for an auditable, useful activity row.
API reference sections
Schema
ToolActivity
Type object
Shape
| Field | Type | Description |
|---|---|---|
| idrequired | ToolInvocationId | ToolInvocationId - a client-minted UUID v4, never derived from content or location. |
| attempt_idrequired | InferenceAttemptId | InferenceAttemptId - a client-minted UUID v4, never derived from content or location. |
| chat_idrequired | ChatId | ChatId - a client-minted UUID v4, never derived from content or location. |
| assistant_message_idrequired | MessageId | MessageId - a client-minted UUID v4, never derived from content or location. |
| tool_namerequired | string | |
| read_onlyrequired | boolean | |
| statusrequired | ToolActivityStatus | |
| approvalrequired | ToolApproval | |
| proposed_atrequired | Timestamp | Epoch milliseconds, UTC. Signed, so instants before 1970 are representable. |
| started_at | Timestamp or null | |
| completed_at | Timestamp or null | |
| result_bytes | integer (uint64, >= 0) or null | |
| error_code | ToolErrorCode or null | |
| target_workspace_id | WorkspaceId or null | |
| target_document_id | DocumentId or null | |
| error_message | string or null | |
| agent_label | string or null | A local agent's own label for the call (Read README.md), bounded, kept since schema 8 so a row reads the same after the turn as during it. |
| agent_summary | string or null | What a local agent's permission request asked, bounded, kept since schema 8. |
| agent_input | string or null | What the agent asked the tool to do - a command line, a change's paths, an MCP call's arguments - bounded to [ |
| agent_output | string or null | What the tool produced - output, a diff, a result - bounded to [ |
| text_offset | integer (uint32, >= 0) or null | How much of the reply's Markdown, in bytes, had arrived when the call began: the text before it was said before it, the text after it after. Kept since schema 10 on a local agent's rows, so a reopened reply can still tell the agent's running commentary from its final answer. |
| live | AgentActivityLive or null | A local agent's live state for this row - the choices a pending permission request offers - populated only from the worker's live turn table while the turn runs. |
{
"id": "00000000-0000-4000-8000-000000000000",
"attempt_id": "00000000-0000-4000-8000-000000000000",
"chat_id": "00000000-0000-4000-8000-000000000000",
"assistant_message_id": "00000000-0000-4000-8000-000000000000",
"tool_name": "string",
"read_only": false,
"status": "proposed",
"approval": "not_required",
"proposed_at": 0,
"started_at": 0,
"completed_at": 0,
"result_bytes": 0,
"error_code": "permission_denied",
"target_workspace_id": "00000000-0000-4000-8000-000000000000",
"target_document_id": "00000000-0000-4000-8000-000000000000",
"error_message": "string",
"agent_label": "string",
"agent_summary": "string",
"agent_input": "string",
"agent_output": "string",
"text_offset": 0,
"live": {
"choices": [
{
"id": "string",
"intent": "allow_once",
"label": "string"
}
],
"questions": [
{
"id": "string",
"header": "string",
"question": "string",
"options": [
{
"label": "string",
"description": "string"
}
],
"allow_other": false,
"secret": false
}
]
}
}The contract has no example values, so example bodies are generated from each schema: every field is shown with a placeholder of its type.
Generated from contract version 1. Last updated .
