changedInput schema / properties / agent_id / description
Previous value: -"Agent identifier"New value: +"Agent identifier. May be omitted when this connection can write to exactly one agent."
changedInput schema / properties / associations / description
Previous value: -"Associative memory to declare alongside this call: entities the text mentions, with their aliases, and subject–predicate–object relations. Stored verbatim; the server extracts nothing and infers nothing. On store, the stored memory is recorded as mentioning every entity named here and anchors every relation. Malformed items are reported in the response's associations.dropped and skipped; the memory is stored regardless. Optional."New value: +"Entities and relations to declare against this memory, as declare_associations takes them: {entities: [{name, aliases}], relations: [{subject, predicate, object}]}, subject / object being entity names or 'mem:<id>' / 'ep:<id>' refs. Malformed items are reported in the response's associations.dropped and skipped; the memory is stored regardless."
removedInput schema / properties / associations / properties
Removed value: -{
- "entities": {
- "description": "Entities to register (if new) and mark as mentioned. Names and aliases are compared after normalization (NFKC, case-folded, whitespace collapsed), so two that normalize alike name one entity.",
- "items": {
- "properties": {
- "aliases": {
- "description": "Other names for the same entity. An alias resolves to at most one entity per scope; a second claim on it is dropped.",
- "items": {
- "type": "string"
- },
- "type": "array"
- },
- "name": {
- "description": "The canonical name, kept as written.",
- "type": "string"
- }
- },
- "required": [
- "name"
- ],
- "type": "object"
- },
- "type": "array"
- },
- "relations": {
- "description": "Declared relations. subject / object are entity names (registered if new) or record refs 'mem:<id>' / 'ep:<id>' of this agent; predicate is free text, normalized. A predicate from the role vocabulary (supports, supersedes, corrects, qualifies, contradicts, temporal_predecessor) on a record → record relation is read by reconstruct as that role.",
- "items": {
- "properties": {
- "object": {
- "type": "string"
- },
- "predicate": {
- "type": "string"
- },
- "subject": {
- "type": "string"
- }
- },
- "required": [
- "subject",
- "predicate",
- "object"
- ],
- "type": "object"
- },
- "type": "array"
- }
-}
changedInput schema / properties / channel / description
Previous value: -"Memory channel for context separation (e.g. 'chat', 'discord'). Default: '' (shared)."New value: +"Memory channel for context separation (e.g. 'chat'). Default: '' (shared)."
addedInput schema / properties / content
Added value: +{
+ "description": "The text to store. Content that is empty — or that sanitizes to empty — is refused with ok:false, result:'rejected'.",
+ "type": "string"
+}
addedInput schema / properties / id
Added value: +{
+ "description": "Optional caller id: a later store with the same id in the same project is skipped as a duplicate.",
+ "type": "string"
+}
addedInput schema / properties / lock
Added value: +{
+ "default": false,
+ "description": "Also lock the memory against edits and deletion. Default false.",
+ "type": "boolean"
+}
changedInput schema / properties / message / description
Previous value: -"ClotoMessage to store. Legacy source shapes are normalized server-side where unambiguous (e.g. lowercase type words, Rust serde externally-tagged dicts, bare 'user'/'assistant' strings); unknown shapes are stored verbatim and surfaced by check_health(invalid_source_type)."New value: +"The older form of content, id, source, timestamp and metadata."
removedInput schema / properties / message / properties / content / description
Removed value: -"The text to store. Content that is empty — or that sanitizes to empty — is refused with ok:false, result:'rejected'."
removedInput schema / properties / message / properties / id / description
Removed value: -"Caller-supplied message id used for msg_id-based dedup (γ-project-scoped). Optional."
removedInput schema / properties / message / properties / metadata / description
Removed value: -"Free-form JSON object for producer-specific context. Empty when unused. Serialised size is capped at 8000 characters (same cap for source); an oversized field is refused with result='rejected' rather than truncated, because a truncated JSON document is not a JSON document."
changedInput schema / properties / message / properties / source / description
Previous value: -"Attribution of who produced the content. Canonical shape is {type, id, name}. Type is the discriminator; id / name identify the concrete producer. Store null / empty {} only when the producer is genuinely unknown. A null source is normalized to {} at the write seam, so both persist (and recall) as the anonymous {}."New value: +"Also a bare 'user' / 'assistant' word, or null, stored as the anonymous {}."
removedInput schema / properties / message / properties / source / properties
Removed value: -{
- "id": {
- "description": "Stable producer id (e.g. discord user id, agent id). Empty when anonymous.",
- "type": "string"
- },
- "name": {
- "description": "Human-readable label for display. Empty when unknown.",
- "type": "string"
- },
- "type": {
- "description": "Producer role — send one of 'User', 'Agent', 'System'. Legacy producers that cannot are folded server-side at the write seam ('ai' / 'assistant' are normalized to 'Agent'; 'session' is normalized to 'System' (type words are matched case-insensitively)), and shapes outside that table are stored verbatim for check_health(invalid_source_type) to surface.",
- "type": "string"
- }
-}
removedInput schema / properties / message / properties / timestamp / description
Removed value: -"UTC ISO-8601 timestamp with offset (e.g. '2026-07-22T12:00:00+00:00'). Defaults to server-time UTC when omitted. Aware non-UTC offsets are accepted; naive strings are surfaced by check_health(timestamp_format_drift)."
addedInput schema / properties / metadata
Added value: +{
+ "description": "Free-form JSON, at most 8000 characters serialised (source has the same cap). Larger is rejected, not truncated.",
+ "type": "object"
+}
changedInput schema / properties / project_id / description
Previous value: -"v2.4.17 isolation axis. Optional — omit or pass '' to store in the global pool. Reads via γ semantics: a recall with project_id='X' returns 'X' rows + global pool. v2.5.1: pass '@auto' to resolve this agent's default from the server's operating context (the resolution is echoed as resolved_project_id; an unmapped agent yields operating_context_warning). bug-186: resolution requires a configured operating context. With none — the default, and equally the outcome of a sidecar that fails to parse — the sentinel is NOT resolved: it is stored and filtered as the literal project_id '@auto', resolved_project_id echoes '@auto', and no warning is raised. Read resolved_project_id before relying on the resolution."New value: +"Isolation bucket; omit or '' for the global pool (a recall in 'X' reads 'X' and the global pool). '@auto' resolves this agent's default from the operating context, echoed as resolved_project_id; with no operating context configured it is stored as the literal '@auto'."
addedInput schema / properties / source
Added value: +{
+ "description": "Who produced the content, {type, id, name}. Default: {type:'Agent', id:<agent_id>}. Pass {} only when the producer is unknown.",
+ "properties": {
+ "id": {
+ "type": "string"
+ },
+ "name": {
+ "type": "string"
+ },
+ "type": {
+ "description": "One of 'User', 'Agent', 'System'; legacy spellings are folded ('ai' / 'assistant' are normalized to 'Agent'; 'session' is normalized to 'System' (type words are matched case-insensitively)).",
+ "type": "string"
+ }
+ },
+ "type": "object"
+}
addedInput schema / properties / timestamp
Added value: +{
+ "description": "ISO-8601 with an offset, e.g. '2026-07-22T12:00:00+00:00'. Default: now.",
+ "type": "string"
+}
removedInput schema / required
Removed value: -[
- "agent_id",
- "message"
-]