from line 1
1---
2title: Local
3url: https://platform.claude.com/docs/en/api/compliance/apps/sessions/local
4---
5
61# Local
72
83## List local sessions
94
10**get** `/v1/compliance/apps/sessions/local`
5**GET** `/v1/compliance/apps/sessions/local`
116
127List local sessions across the organizations the key may read.
138
from line 9
149Results are ordered by `created_at` descending. Pagination is
1510forward-only via `next_page`; there is no reverse cursor.
1611
17### Query Parameters
12### Query parameters
1813
19- `created_at: optional object { gte, lt }`
14- `created_at: optional object`
2015
2116 - `gte: optional string`
2217
2318 Only return sessions whose first inference call is at or after this time (RFC 3339; a UTC offset is required).
2419
20 format: date-time
21
2522 - `lt: optional string`
2623
2724 Only return sessions whose first inference call is strictly before this time (RFC 3339; a UTC offset is required).
2825
26 format: date-time
27
2928- `limit: optional number`
3029
3130 Maximum results (default: 100, max: 500)
3231
32 default: 100, maximum: 500, minimum: 1
33
3334- `page: optional string`
3435
3536 Opaque pagination token from a previous response's `next_page` field. Pass this to retrieve the next page of results. Clients should treat this value as an opaque string and not attempt to parse or interpret its contents, as the format may change without notice.
3637
37- `updated_at: optional object { gte }`
38- `updated_at: optional object`
3839
3940 - `gte: optional string`
4041
4142 Only return sessions whose last inference call is at or after this time (RFC 3339; a UTC offset is required). Combines with `created_at.gte` / `created_at.lt`; the ordering and pagination are unchanged. Use it to poll for sessions that have been active since a previous pass — a session that becomes active later can only enter the result, never leave it.
4243
43### Header Parameters
44 format: date-time
4445
46### Headers
47
4548- `"x-api-key": optional string`
4649
4750### Returns
4851
49- `data: array of object { id, created_at, organization_uuid, 5 more }`
52- `data: array of object`
5053
5154 Page of local sessions, ordered by `created_at` descending; ties are broken by a fixed server-side order. `updated_at` never participates in the ordering; the `updated_at.gte` query parameter filters on it without changing the order or the pagination cursor.
5255
from line 61
5861
5962 Timestamp of the session's first retained inference call (RFC 3339, UTC). When a session's activity spans the child organization's retention boundary, calls older than the boundary are no longer reflected, so this value is the timestamp of the earliest retained call: always strictly after the boundary, never the boundary itself.
6063
64 format: date-time
65
6166 - `organization_uuid: string`
6267
6368 UUID of the child organization the session belongs to
from line 73
6873
6974 - `type: "compliance_local_session"`
7075
71 - `"compliance_local_session"`
76 default: compliance_local_session
7277
7378 - `updated_at: string`
7479
7580 Timestamp of the session's last retained inference call (RFC 3339, UTC). Always at or after `created_at`. When a session's activity spans the child organization's retention boundary, calls older than the boundary are no longer reflected — but because retention removes only the oldest calls, this value (unlike `created_at`) is unaffected until the entire session has aged out. On the list endpoint this value is a lower bound: for a session still active at a page or `created_at.lt` window boundary it can momentarily lag the session's true last activity. Retrieving the session, or its messages, always reflects the exact latest retained call.
7681
77 - `user: object { id, email_address }`
82 format: date-time
7883
84 - `user: object`
85
7986 The authenticated user at the time of the session. Always set; `user.id` is always populated. `user.email_address` is null when the user's account has been deleted or the user is no longer a member of an organization the key may read.
8087
8188 - `id: string`
from line 103
96103
97104### Example
98105
99```http
106```bash
100107curl https://api.anthropic.com/v1/compliance/apps/sessions/local \
101108 -H "Authorization: Bearer $ANTHROPIC_COMPLIANCE_API_KEY"
102109```
103110
104#### Response
111#### Response (200)
105112
106113```json
107114{
from line 132
125132
126133## Retrieve a local session
127134
128**get** `/v1/compliance/apps/sessions/local/{local_session_id}`
135**GET** `/v1/compliance/apps/sessions/local/{local_session_id}`
129136
130137Retrieve one local session.
131138
from line 141
134141enforced when the response is served: a session whose every
135142inference call has aged out returns 404.
136143
137### Path Parameters
144### Path parameters
138145
139146- `local_session_id: string`
140147
141### Header Parameters
148### Headers
142149
143150- `"x-api-key": optional string`
144151
from line 159
152159
153160 Timestamp of the session's first retained inference call (RFC 3339, UTC). When a session's activity spans the child organization's retention boundary, calls older than the boundary are no longer reflected, so this value is the timestamp of the earliest retained call: always strictly after the boundary, never the boundary itself.
154161
162 format: date-time
163
155164- `organization_uuid: string`
156165
157166 UUID of the child organization the session belongs to
from line 171
162171
163172- `type: "compliance_local_session"`
164173
165 - `"compliance_local_session"`
174 default: compliance_local_session
166175
167176- `updated_at: string`
168177
169178 Timestamp of the session's last retained inference call (RFC 3339, UTC). Always at or after `created_at`. When a session's activity spans the child organization's retention boundary, calls older than the boundary are no longer reflected — but because retention removes only the oldest calls, this value (unlike `created_at`) is unaffected until the entire session has aged out. On the list endpoint this value is a lower bound: for a session still active at a page or `created_at.lt` window boundary it can momentarily lag the session's true last activity. Retrieving the session, or its messages, always reflects the exact latest retained call.
170179
171- `user: object { id, email_address }`
180 format: date-time
172181
182- `user: object`
183
173184 The authenticated user at the time of the session. Always set; `user.id` is always populated. `user.email_address` is null when the user's account has been deleted or the user is no longer a member of an organization the key may read.
174185
175186 - `id: string`
from line 197
186197
187198### Example
188199
189```http
200```bash
190201curl https://api.anthropic.com/v1/compliance/apps/sessions/local/$LOCAL_SESSION_ID \
191202 -H "Authorization: Bearer $ANTHROPIC_COMPLIANCE_API_KEY"
192203```
193204
194#### Response
205#### Response (200)
195206
196207```json
197208{
from line 220
209220}
210221```
211222
212## Domain Types
223## Domain types
213224
214225### Local List Response
215226
216- `LocalListResponse object { id, created_at, organization_uuid, 5 more }`
227- `LocalListResponse object`
217228
218229 A Cowork or Claude Code session that a user ran on their own computer
219230 while signed in with their organization account.
from line 237
226237
227238 Timestamp of the session's first retained inference call (RFC 3339, UTC). When a session's activity spans the child organization's retention boundary, calls older than the boundary are no longer reflected, so this value is the timestamp of the earliest retained call: always strictly after the boundary, never the boundary itself.
228239
240 format: date-time
241
229242 - `organization_uuid: string`
230243
231244 UUID of the child organization the session belongs to
from line 249
236249
237250 - `type: "compliance_local_session"`
238251
239 - `"compliance_local_session"`
252 default: compliance_local_session
240253
241254 - `updated_at: string`
242255
243256 Timestamp of the session's last retained inference call (RFC 3339, UTC). Always at or after `created_at`. When a session's activity spans the child organization's retention boundary, calls older than the boundary are no longer reflected — but because retention removes only the oldest calls, this value (unlike `created_at`) is unaffected until the entire session has aged out. On the list endpoint this value is a lower bound: for a session still active at a page or `created_at.lt` window boundary it can momentarily lag the session's true last activity. Retrieving the session, or its messages, always reflects the exact latest retained call.
244257
245 - `user: object { id, email_address }`
258 format: date-time
246259
260 - `user: object`
261
247262 The authenticated user at the time of the session. Always set; `user.id` is always populated. `user.email_address` is null when the user's account has been deleted or the user is no longer a member of an organization the key may read.
248263
249264 - `id: string`
from line 275
260275
261276### Local Retrieve Response
262277
263- `LocalRetrieveResponse object { id, created_at, organization_uuid, 5 more }`
278- `LocalRetrieveResponse object`
264279
265280 A Cowork or Claude Code session that a user ran on their own computer
266281 while signed in with their organization account.
from line 288
273288
274289 Timestamp of the session's first retained inference call (RFC 3339, UTC). When a session's activity spans the child organization's retention boundary, calls older than the boundary are no longer reflected, so this value is the timestamp of the earliest retained call: always strictly after the boundary, never the boundary itself.
275290
291 format: date-time
292
276293 - `organization_uuid: string`
277294
278295 UUID of the child organization the session belongs to
from line 300
283300
284301 - `type: "compliance_local_session"`
285302
286 - `"compliance_local_session"`
303 default: compliance_local_session
287304
288305 - `updated_at: string`
289306
290307 Timestamp of the session's last retained inference call (RFC 3339, UTC). Always at or after `created_at`. When a session's activity spans the child organization's retention boundary, calls older than the boundary are no longer reflected — but because retention removes only the oldest calls, this value (unlike `created_at`) is unaffected until the entire session has aged out. On the list endpoint this value is a lower bound: for a session still active at a page or `created_at.lt` window boundary it can momentarily lag the session's true last activity. Retrieving the session, or its messages, always reflects the exact latest retained call.
291308
292 - `user: object { id, email_address }`
309 format: date-time
293310
311 - `user: object`
312
294313 The authenticated user at the time of the session. Always set; `user.id` is always populated. `user.email_address` is null when the user's account has been deleted or the user is no longer a member of an organization the key may read.
295314
296315 - `id: string`
from line 324
305324
306325 Workspace identifier (tagged ID, prefixed `wrkspc_`). Null for sessions not attributed to a workspace.
307326
308# Messages
327## Local › Messages
309328
310## Retrieve local session messages
329### Retrieve local session messages
311330
312**get** `/v1/compliance/apps/sessions/local/{local_session_id}/messages`
331**GET** `/v1/compliance/apps/sessions/local/{local_session_id}/messages`
313332
314333Read one local session's transcript, oldest-first by default.
315334
from line 340
321340honored for 24 hours: a cursor older than that is rejected with an
322341explicit 400; restart the walk to read under the current boundary.
323342
324### Path Parameters
343#### Path parameters
325344
326345- `local_session_id: string`
327346
328### Query Parameters
347#### Query parameters
329348
330349- `limit: optional number`
331350
332351 Maximum results (default: 100, max: 1000)
333352
353 default: 100, maximum: 1000, minimum: 1
354
334355- `order: optional "asc" or "desc"`
335356
336357 Sort direction. `asc` (oldest-first, default) or `desc`.
337358
359 default: asc
360
338361 - `"asc"`
339362
340363 - `"desc"`
from line 370
347370
348371 Truncate each text item inside a tool result to at most this many bytes (cut on a code-point boundary). Pass `-1` to request the server maximum (approximately 1 MiB); larger values are clamped to it. `0` is not a valid value.
349372
373 default: 10000, maximum: 2147483647, minimum: -1
374
350375- `tool_use_input_max_bytes: optional number`
351376
352377 Truncate each tool-use input to at most this many bytes (cut on a code-point boundary so the result is valid UTF-8). Pass `-1` to request the server maximum (approximately 1 MiB); larger values are clamped to it. `0` is not a valid value.
353378
354### Header Parameters
379 default: 10000, maximum: 2147483647, minimum: -1
355380
381#### Headers
382
356383- `"x-api-key": optional string`
357384
358### Returns
385#### Returns
359386
360- `data: array of object { id, content, created_at, 4 more }`
387- `data: array of object`
361388
362389 Transcript turns for this page, in call order: oldest call first by default, newest call first with `order=desc`. The messages of one call carry the call's timestamp and follow each other in transcript order; a page boundary can fall between them.
363390
from line 392
365392
366393 Message identifier, prefixed `clsm_`. Stable for as long as the message's turn is retained: identifiers of retained turns do not change as older turns age out of the organization's retention period. The `retention_elapsed` placeholder's identifier is distinct from every retained turn's and changes only when further turns age out.
367394
368 - `content: array of object { text, truncated, type } or object { id, input, name, 2 more } or object { content, is_error, name, 3 more }`
395 - `content: array of object or object or object`
369396
370397 Content blocks within the message, discriminated on `type` (`text` / `tool_use` / `tool_result`: the same discriminator values as the claude.ai chat-messages endpoint; the tool variants omit `integration_name` and `mcp_server_url`, and `text` carries `truncated`). Extended-thinking content is never included. The request's `system` field is never included; a presence-only marker message is emitted when it was set. The request's `tools[]` definitions are never included as transcript messages. Project-level instructions (such as CLAUDE.md files) appear in the message stream as a user-role context block and are included. Empty when `provenance.type` is `content_unavailable`.
371398
372 - `Text object { text, truncated, type }`
399 - `Text object`
373400
374401 Text content block.
375402
from line 408
381408
382409 True when `text` was shortened by the server's fixed per-string bound (approximately 1 MiB), or when ancillary content the block carried (such as citations) was omitted, or when this block stands in for a non-text block whose content is not shown, or when it is an explanatory marker the server inserted (its text enclosed in square brackets, e.g. prefacing client-asserted history). There is no request parameter that raises the per-string bound.
383410
411 default: false
412
384413 - `type: "text"`
385414
386 - `"text"`
415 default: text
387416
388 - `ToolUse object { id, input, name, 2 more }`
417 - `ToolUse object`
389418
390419 Tool invocation requested by the assistant.
391420
from line 434
405434
406435 True when `input` was shortened. Pass `tool_use_input_max_bytes=-1` to request the server maximum.
407436
437 default: false
438
408439 - `type: "tool_use"`
409440
410 - `"tool_use"`
441 default: tool_use
411442
412 - `ToolResult object { content, is_error, name, 3 more }`
443 - `ToolResult object`
413444
414445 Result returned by a tool invocation.
415446
416 - `content: array of object { text, type }`
447 - `content: array of object`
417448
418449 Text content returned by the tool. Non-text item types are omitted and signalled via `truncated` with an in-band item-count marker.
419450
from line 454
423454
424455 - `type: "text"`
425456
426 - `"text"`
457 default: text
427458
428459 - `is_error: boolean`
429460
from line 472
441472
442473 True when one or more text items in `content` were shortened or non-text items were omitted. Pass `tool_result_max_bytes=-1` to request the server maximum.
443474
475 default: false
476
444477 - `type: "tool_result"`
445478
446 - `"tool_result"`
479 default: tool_result
447480
448481 - `created_at: string`
449482
450483 When the message was recorded (RFC 3339, UTC)
451484
485 format: date-time
486
452487 - `model: string or null`
453488
454489 The model that served this assistant turn, as reported in the `model` field of the underlying Messages API response. Null on user messages and on any assistant message whose `provenance` is set: client-asserted history and synthetic markers were not produced by a model during this session, and for unavailable content the serving model is not known.
455490
456 - `provenance: object { reason, type } or object { type } or object { type } or null`
491 - `provenance: object or object or object or null`
457492
458493 Where this turn's content came from, discriminated on `type`. Null (the common case) means verified content: on an assistant message, content Claude produced during this session; on a user message, content the user sent. `content_unavailable`: the turn's content cannot be returned and `content` is empty; `reason` says why. `client_asserted`: assistant content the client supplied as conversation history; `content` shows what the model received but its authorship is not verified; never on user-role messages. `synthetic_marker`: a transcript marker the endpoint generated rather than content either party sent during the session. Both `client_asserted` and `synthetic_marker` can result from normal request or client processing, not only client modification. Callers should tolerate unrecognized `type` values.
459494
460 - `ContentUnavailable object { reason, type }`
495 - `ContentUnavailable object`
461496
462497 The turn's content cannot be returned; `content` is empty.
463498
from line 502
467502
468503 - `type: "content_unavailable"`
469504
470 - `"content_unavailable"`
505 default: content_unavailable
471506
472 - `ClientAsserted object { type }`
507 - `ClientAsserted object`
473508
474509 Assistant content the client supplied as conversation history
475510 rather than produced by Claude during this session. `content` shows
from line 514
479514
480515 - `type: "client_asserted"`
481516
482 - `"client_asserted"`
517 default: client_asserted
483518
484 - `SyntheticMarker object { type }`
519 - `SyntheticMarker object`
485520
486521 A transcript marker generated by the endpoint rather than sent by
487522 either party during the session. Marker messages indicate that the
from line 530
495530
496531 - `type: "synthetic_marker"`
497532
498 - `"synthetic_marker"`
533 default: synthetic_marker
499534
500535 - `role: "assistant" or "user"`
501536
from line 542
507542
508543 - `type: "compliance_local_session_message"`
509544
510 - `"compliance_local_session_message"`
545 default: compliance_local_session_message
511546
512547- `next_page: string or null`
513548
514549 Opaque pagination cursor (prefixed `page_`) for the next page. Null when there is no further page. Treat as an opaque string; the format may change without notice.
515550
516- `session: object { id, created_at, organization_uuid, 5 more }`
551- `session: object`
517552
518553 The local session the messages belong to. `user.email_address` is always null on this endpoint; the messages endpoint does not resolve email addresses.
519554
from line 560
525560
526561 Timestamp of the session's first retained inference call (RFC 3339, UTC). When a session's activity spans the child organization's retention boundary, calls older than the boundary are no longer reflected, so this value is the timestamp of the earliest retained call: always strictly after the boundary, never the boundary itself.
527562
563 format: date-time
564
528565 - `organization_uuid: string`
529566
530567 UUID of the child organization the session belongs to
from line 572
535572
536573 - `type: "compliance_local_session"`
537574
538 - `"compliance_local_session"`
575 default: compliance_local_session
539576
540577 - `updated_at: string`
541578
542579 Timestamp of the session's last retained inference call (RFC 3339, UTC). Always at or after `created_at`. When a session's activity spans the child organization's retention boundary, calls older than the boundary are no longer reflected — but because retention removes only the oldest calls, this value (unlike `created_at`) is unaffected until the entire session has aged out. On the list endpoint this value is a lower bound: for a session still active at a page or `created_at.lt` window boundary it can momentarily lag the session's true last activity. Retrieving the session, or its messages, always reflects the exact latest retained call.
543580
544 - `user: object { id, email_address }`
581 format: date-time
545582
583 - `user: object`
584
546585 The authenticated user at the time of the session. Always set; `user.id` is always populated. `user.email_address` is null when the user's account has been deleted or the user is no longer a member of an organization the key may read.
547586
548587 - `id: string`
from line 596
557596
558597 Workspace identifier (tagged ID, prefixed `wrkspc_`). Null for sessions not attributed to a workspace.
559598
560### Example
599#### Example
561600
562```http
601```bash
563602curl https://api.anthropic.com/v1/compliance/apps/sessions/local/$LOCAL_SESSION_ID/messages \
564603 -H "Authorization: Bearer $ANTHROPIC_COMPLIANCE_API_KEY"
565604```
566605
567#### Response
606##### Response (200)
568607
569608```json
570609{
from line 643
604643 }
605644}
606645```
607
608## Domain Types
609
610### Message List Response
611
612- `MessageListResponse object { id, content, created_at, 4 more }`
613
614 A single user or assistant turn in a local session transcript.
615
616 - `id: string`
617
618 Message identifier, prefixed `clsm_`. Stable for as long as the message's turn is retained: identifiers of retained turns do not change as older turns age out of the organization's retention period. The `retention_elapsed` placeholder's identifier is distinct from every retained turn's and changes only when further turns age out.
619
620 - `content: array of object { text, truncated, type } or object { id, input, name, 2 more } or object { content, is_error, name, 3 more }`
621
622 Content blocks within the message, discriminated on `type` (`text` / `tool_use` / `tool_result`: the same discriminator values as the claude.ai chat-messages endpoint; the tool variants omit `integration_name` and `mcp_server_url`, and `text` carries `truncated`). Extended-thinking content is never included. The request's `system` field is never included; a presence-only marker message is emitted when it was set. The request's `tools[]` definitions are never included as transcript messages. Project-level instructions (such as CLAUDE.md files) appear in the message stream as a user-role context block and are included. Empty when `provenance.type` is `content_unavailable`.
623
624 - `Text object { text, truncated, type }`
625
626 Text content block.
627
628 - `text: string`
629
630 Text content from the user or the assistant
631
632 - `truncated: boolean`
633
634 True when `text` was shortened by the server's fixed per-string bound (approximately 1 MiB), or when ancillary content the block carried (such as citations) was omitted, or when this block stands in for a non-text block whose content is not shown, or when it is an explanatory marker the server inserted (its text enclosed in square brackets, e.g. prefacing client-asserted history). There is no request parameter that raises the per-string bound.
635
636 - `type: "text"`
637
638 - `"text"`
639
640 - `ToolUse object { id, input, name, 2 more }`
641
642 Tool invocation requested by the assistant.
643
644 - `id: string or null`
645
646 Tool-use ID, e.g. 'toolu_01AbC...'
647
648 - `input: string`
649
650 Arguments passed to the tool, as a JSON-encoded string. May be shortened (see the `truncated` field); a truncated value is cut mid-document and is not valid JSON.
651
652 - `name: string`
653
654 Name of the tool invoked
655
656 - `truncated: boolean`
657
658 True when `input` was shortened. Pass `tool_use_input_max_bytes=-1` to request the server maximum.
659
660 - `type: "tool_use"`
661
662 - `"tool_use"`
663
664 - `ToolResult object { content, is_error, name, 3 more }`
665
666 Result returned by a tool invocation.
667
668 - `content: array of object { text, type }`
669
670 Text content returned by the tool. Non-text item types are omitted and signalled via `truncated` with an in-band item-count marker.
671
672 - `text: string`
673
674 Text returned by the tool
675
676 - `type: "text"`
677
678 - `"text"`
679
680 - `is_error: boolean`
681
682 True when the tool reported an error
683
684 - `name: string`
685
686 Name of the tool that produced this result
687
688 - `tool_use_id: string or null`
689
690 ID of the tool_use block this result responds to
691
692 - `truncated: boolean`
693
694 True when one or more text items in `content` were shortened or non-text items were omitted. Pass `tool_result_max_bytes=-1` to request the server maximum.
695
696 - `type: "tool_result"`
697
698 - `"tool_result"`
699
700 - `created_at: string`
701
702 When the message was recorded (RFC 3339, UTC)
703
704 - `model: string or null`
705
706 The model that served this assistant turn, as reported in the `model` field of the underlying Messages API response. Null on user messages and on any assistant message whose `provenance` is set: client-asserted history and synthetic markers were not produced by a model during this session, and for unavailable content the serving model is not known.
707
708 - `provenance: object { reason, type } or object { type } or object { type } or null`
709
710 Where this turn's content came from, discriminated on `type`. Null (the common case) means verified content: on an assistant message, content Claude produced during this session; on a user message, content the user sent. `content_unavailable`: the turn's content cannot be returned and `content` is empty; `reason` says why. `client_asserted`: assistant content the client supplied as conversation history; `content` shows what the model received but its authorship is not verified; never on user-role messages. `synthetic_marker`: a transcript marker the endpoint generated rather than content either party sent during the session. Both `client_asserted` and `synthetic_marker` can result from normal request or client processing, not only client modification. Callers should tolerate unrecognized `type` values.
711
712 - `ContentUnavailable object { reason, type }`
713
714 The turn's content cannot be returned; `content` is empty.
715
716 - `reason: string`
717
718 Why this turn's content cannot be returned, e.g. `not_captured` (the content was not captured for compliance retrieval), `client_aborted` (the client closed the connection or cancelled the request before the response completed, so the response was not captured for this turn; any partial output already streamed to the client is not included; assistant-role turns only), `cmek_key_revoked` (the content is encrypted under the organization's customer-managed key and that key is unavailable), `retention_elapsed` (the content lies past the organization's retention boundary; on the placeholder standing in for every pre-boundary turn), or `oversize` (the message exceeds the server's per-message size bound even after per-block truncation). Callers should tolerate unrecognized values. `not_captured` is not proof that no record was stored: content withheld by the storage layer's fail-closed access policies carries the same reason and is deliberately indistinguishable from content that was never captured.
719
720 - `type: "content_unavailable"`
721
722 - `"content_unavailable"`
723
724 - `ClientAsserted object { type }`
725
726 Assistant content the client supplied as conversation history
727 rather than produced by Claude during this session. `content` shows
728 what the model received but its authorship is not verified; this can
729 result from normal request or client processing, not only client
730 modification. Never on user-role messages.
731
732 - `type: "client_asserted"`
733
734 - `"client_asserted"`
735
736 - `SyntheticMarker object { type }`
737
738 A transcript marker generated by the endpoint rather than sent by
739 either party during the session. Marker messages indicate that the
740 prompt history diverged from what was captured, that the request's
741 `system` field was present but is not shown, or that
742 prompt-carried history was suppressed because the session spans the
743 child organization's retention boundary and those turns cannot be
744 placed against it (the marker's text names the cause). Markers that
745 report a mismatch with captured history can result from normal request
746 or client processing, not only client modification.
747
748 - `type: "synthetic_marker"`
749
750 - `"synthetic_marker"`
751
752 - `role: "assistant" or "user"`
753
754 Message sender (`user` or `assistant`)
755
756 - `"assistant"`
757
758 - `"user"`
759
760 - `type: "compliance_local_session_message"`
761
762 - `"compliance_local_session_message"`
763646
No line in this hunk matches that.