hermes
Identity
-
Names:
com.nousresearch.hermes; short aliashermes. -
Native format:
hermes-state-sqlite,state.db; state schemas, messages, usage, admissions, executions and receipts are separate native stores/tables. -
Session ID:
sessions.id. Namespace isstate_meta.valuewherekey = store_instance_id; older stores need a persisted installation namespace. Paths never supply it. -
Context and messages:
messages.activeand native ID order define current replay; retain archived rows._compressed_summary: 1has unknown replacement extent.api_contentis model content when present, withcontentkept as display.observed: 1meansaddressed: false. The session creator’suser_iddoes not identify the author of every group message.platform_message_ididentifies platform messages; channel mapping requires the recorded source/chat fields. -
Unassigned facts:
delivery_obligations.session_keyis lane ownership, not a session/message join. Mirror provenance is not persisted, so assistant text does not provecopiedFrom. Source cron/webhook markers can supply session triggers, not invented turn triggers.
Position basis
Use only positions established by the stated format and mapping evidence. Current-state rows without transcript positions form the snapshot tail, after all records with transcript positions. A protocol commit boundary takes precedence over physical EOF; uncommitted bytes are not a gap.
Destinations
hermes: native facts without a standard field
Links
-
Lineage:
parent_session_idplus a matchingmodel_config._branched_frommeans fork; matching_delegate_frommeans spawning; matching_reset_frommeans reset continuation. A marker must equal the immediate parent because compression can copy older markers. Other parent pointers meanrelatedUnknown.source: subagentestablishes scope, not a parent. A child keeps its own native session ID. No root or copied-prefix claim is qualified. -
Entity keys and links: Integer
messages.id, written as decimal text, is stable message identity.tool_call_uids[provider_id]gives a call occurrence ID; resulttool_call_uidjoins it. Without a UID, require a unique native provider-ID-to-occurrence mapping.message_uidalone cannot prove copies because a record carrying compaction content can reuse it while changing the content.
Usage
- Usage and state: Session/model totals are summaries, not per-call inference. Preserve all
session_model_usageprimary-key dimensions. Default zero cost is unknown unlesscost_statusestablishes its meaning; only provider cost/generation APIs prove provider-reported cost.system_prompt_hashjoinssystem_prompts.hashfor instructions.worker_receipts.execution_idjoins its execution. Serialize messages, immutable receipts, then mutable state snapshots.
Lane and unassigned facts
Facts without established session ownership use manifest_meta["com.nousresearch.hermes/unassigned"] with the common shape. An export 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. Use a documented vendor loss or report for omitted unassigned facts; do not create a new core category.Evidence
Basis: source-verified atnousresearch/hermes-agent commit 89a6e05de462768016b2ae0d684338e3cce3f3ee (state schemas/messages, delivery ledger and mirror writer). Native no-model SessionDB and delivery API probes cover branch, delegation, reset and compaction. No package version or messaging/model runtime qualification.
Evidence applies only to the named formats and explicit mappings above. A real capture covers only the behavior that was exercised. A writer probe run without a model 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 0.0.0; source 198f6ad53c661e42ff2423ba42d6262078520e69: The editable Hermes package reports 0.0.0, so these two headless edit/review runs are pinned to source commit 198f6ad53c661e42ff2423ba42d6262078520e69. Only the observed state.db messages are covered. Receipt and worker features were not newly exercised. Preserve relational rows in native.record or native.blob.
The ctx conversion produced 2 streams and 42 records, with 0 errors, 0 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.