deepagents
Identity
-
Names:
com.langchain.deepagents; short aliasdeepagents. -
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. Nonemptycheckpoint_nsis a subgraph lane, not a session or installation namespace. -
Notes:
AI.usage_metadatais a per-response report and supports a derived inference keyed by message identity;response_metadata.model_nameand finish reason retain their recorded meanings. Tool status success/error controls outcome;artifactis 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 = messagessupply chat. Order is(checkpoint_id, task_id, idx)under the pinned reader; the native unit key also includes thread, namespace and item index. Checkpointchannel_valuesdo not generate a second transcript. Messageidsupplies 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
-
Links and revisions: Native tool-call IDs join
tool_call_idonly when unique. Repeated messageidreplaces the same components withsupersedes.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_idconnects 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 commitb16a74085af0057a24ce00f23a6a165bf5f21ed2 (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.