deepagents

Identity

  • Names: com.langchain.deepagents; short alias deepagents.
  • Native format: deepagents-langgraph-sqlite, checkpoint writes and metadata. Decode allowed JsonPlus MessagePack message classes as data; never instantiate native classes.
  • Session ID: thread_id, verbatim. Application-supplied local thread IDs require a stable installation/profile namespace. Nonempty checkpoint_ns is a subgraph lane, not a session or installation namespace.
  • Notes: AI.usage_metadata is a per-response report and supports a derived inference keyed by message identity; response_metadata.model_name and finish reason retain their recorded meanings. Tool status success/error controls outcome; artifact is raw. Keep unsupported writes and application checkpoints as vendor records rather than filesystem checkpoints.
checkpoint_ns alone remains a subgraph lane. A separate child stream requires a source-native ID for a distinct conversation and a pinned writer contract; otherwise this mapping is unqualified.

Position basis

  • Entity keys and order: Root-namespace writes with channel = messages supply chat. Order is (checkpoint_id, task_id, idx) under the pinned reader; the native unit key also includes thread, namespace and item index. Checkpoint channel_values do not generate a second transcript. Message id supplies logical identity.
Use only positions established by the stated format and mapping evidence. Current-state rows without transcript positions form the snapshot tail. A protocol commit boundary takes precedence over physical EOF; uncommitted bytes are not a gap.

Destinations

deepagents: native facts without a standard field

  • Links and revisions: Native tool-call IDs join tool_call_id only when unique. Repeated message id replaces the same components with supersedes. RemoveMessage(id) targets that message’s known context projections; REMOVE_ALL_MESSAGES prunes through the current tip. Unsupported Overwrite or component-set changes remain native evidence, with context loss declared.
  • Lineage: Checkpoint parent_checkpoint_id connects checkpoints, not sessions. Nonroot subgraph writes remain under their explicit thread owner. No child, copy or root mapping is qualified.

Usage

Select one report per native accounting identity only when this entry establishes that identity. Keep unjoinable or overlapping reports as native evidence. Declare incomplete semantic coverage. Schema defaults and placeholder zeros are not reported usage. Rules for what a backend includes in its usage counts require evidence; do not infer them from a model name.

Lane and unassigned facts

Facts without established session ownership use manifest _meta["com.langchain.deepagents/unassigned"] with the common shape. Selection may retain these facts with any session subset, including an empty subset, but must not imply session ownership. State the selection policy in the export report.

Losses

Declare every applicable loss under ASR-157. Missing model rendering, accounting joins, lineage or exact context boundaries remain losses when this entry does not qualify them. Unknown ownership is not itself lost data. For omitted unassigned facts, use a documented vendor loss or report; do not create a new core category.

Evidence

Basis: source-verified at Deep Agents commit b16a74085af0057a24ce00f23a6a165bf5f21ed2 (libs/code/deepagents_code/sessions.py), with sanitized AsyncSqliteSaver and authored reducer fixtures. That source review does not establish an agent release version; the separate CLI observation follows below. Evidence applies only to the named formats and explicit mappings above. A real capture covers only exercised behavior. A no-model writer probe covers persistence, not model or tool execution. Authored tests do not qualify an agent version. Unlisted formats and link mappings remain unqualified.

Observations from 2026-10-27

observed, version deepagents-code 0.1.88; deepagents 0.7.30: The producer was dcode/deepagents-code 0.1.88 with deepagents 0.7.30. The separately inspected deepagents-cli 0.3.0 did not produce these sessions. A writes.type value of null with an empty value is an ordinary null control write, not corrupt MessagePack. Decode msgpack only for that serialization discriminator. Keep non-message control writes as vendor audit records with native.record or native.blob; do not emit gaps for valid null writes. The ctx conversion produced 2 streams and 411 records, with 0 errors, 2 notices, 0 gaps and 0 unidentified inputs under validator-v0.1.2. These counts describe the selected output; an empty bundle qualifies no source format. No sanitized native fixture was retained for this observation. Whole native records use native.record or native.blob, with JSON text columns preserved as strings. The exporter’s own bookkeeping for serialization, partitioning and message keys belongs in the exporter namespace (rs.ctx for ctx), not in a provider metadata destination. These runs add no evidence for unexercised approvals, lineage links, compaction boundaries or exact request context.