remember
Append a new memory (decision, fact, preference, blocker, commitment, …). Never merges; append-only. Content is capped at 2000 characters. To surface a commitment or blocker in a PROJECT-scoped briefing, passproject — a memory written with a NULL project never matches the bare project selector; only the scope_project selector’s includeUnscoped: true opts it back in. Optionally pass facts: the measurable claims the memory states, as subject/predicate/value triples that get_facts can then read back directly instead of re-reading the prose. Values are text, so put the unit in the predicate and keep one measure per fact (subject lift.back_squat, predicate top_set.weight_kg, value 98). Give a fact a validFrom when it became true, if that is not now.
Title: Remember · Required scope: memory:write
Input schema
{
"type": "object",
"properties": {
"memoryType": {
"type": "string",
"enum": [
"decision",
"commitment",
"blocker",
"fact",
"preference",
"pattern",
"note",
"event"
]
},
"topic": {
"type": "string",
"minLength": 1,
"maxLength": 256
},
"content": {
"type": "string",
"minLength": 1,
"maxLength": 2000
},
"scope": {
"default": "personal",
"type": "string",
"minLength": 1,
"maxLength": 64,
"pattern": "^[a-z0-9][a-z0-9-]*$"
},
"project": {
"type": "string",
"minLength": 1,
"maxLength": 256
},
"tags": {
"default": [],
"maxItems": 32,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 64
}
},
"facts": {
"maxItems": 16,
"type": "array",
"items": {
"type": "object",
"properties": {
"subject": {
"type": "string",
"minLength": 1,
"maxLength": 256
},
"predicate": {
"type": "string",
"minLength": 1,
"maxLength": 256
},
"value": {
"type": "string",
"minLength": 1,
"maxLength": 2000
},
"confidence": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"validFrom": {
"description": "Inclusive START of the fact’s valid-time window, as an ISO-8601 instant. Use at most 3 fractional-second digits (millisecond precision) — a finer instant is rejected, never truncated. Omit (or null) to leave it unset.",
"anyOf": [
{
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
},
{
"type": "null"
}
]
},
"validTo": {
"description": "Exclusive END of the fact’s valid-time window (requires validFrom), as an ISO-8601 instant. Use at most 3 fractional-second digits (millisecond precision) — a finer instant is rejected, never truncated. Omit (or null) to leave it unset.",
"anyOf": [
{
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
},
{
"type": "null"
}
]
}
},
"required": [
"subject",
"predicate",
"value"
],
"additionalProperties": false
}
},
"sessionRunId": {
"description": "Opaque id of the current agent session run. Pass through from SessionStart. Omit to attach the single leased-open session for this project, if any. A run id not owned by this tenant fails the write.",
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
},
"required": [
"memoryType",
"topic",
"content"
],
"additionalProperties": false
}
Output schema
{
"type": "object",
"properties": {
"memory": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"memoryType": {
"type": "string",
"enum": [
"decision",
"commitment",
"blocker",
"fact",
"preference",
"pattern",
"note",
"event"
]
},
"topic": {
"type": "string"
},
"scope": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"pattern": "^[a-z0-9][a-z0-9-]*$"
},
"project": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 256
},
{
"type": "null"
}
]
}
},
"required": [
"id",
"memoryType",
"topic",
"scope",
"project"
],
"additionalProperties": true
},
"embedded": {
"type": "string",
"enum": [
"pending",
"done",
"failed",
"off"
]
},
"commitmentId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"factIds": {
"type": "array",
"items": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
}
},
"required": [
"memory",
"embedded"
],
"additionalProperties": true
}
search
Unified semantic + keyword retrieval over your memories, supersession-aware. Accepts a query and an optional result limit, plus optional filters that narrow the candidate set BEFORE fusion (no change to ranking weights): memoryType OR memoryTypes (a list of types, mutually exclusive with memoryType), scope, project, status, asOf (bi-temporal time travel with validAt/asKnownAt), and recordedAfter/recordedBefore (an inclusive recorded-at range over the live view — not time travel). Omit a filter to leave that axis unconstrained. Set order: “chronological” for an exhaustive, unranked recorded_at-descending listing instead of the fused ranking — no embedding call, no gateway required; query is RELEVANCE-ONLY and is rejected in chronological order (that mode ranks nothing, so a query could only be ignored), and chronological instead REQUIRES at least one filter to bound the scan. Default order “relevance” is the fused ranked search and still requires a query. If a retrieval-scope policy is set (configure_scope set_retrieval_default), an unscoped search may be narrowed to your default scope (the result then reports appliedScope) or rejected until you pass a scope filter. Hit content is a bounded excerpt — when a hit reports truncated: true, call get_memories with its id to read the full content. Superseded predecessors are never filtered out, only ranked below their successor — a hit reports superseded: true when it is one, so you can tell a demoted result from a current one; superseded is recomputed live on every page (including continuations of a frozen relevance walk), so a hit’s rank and score stay frozen across pages of one walk but its superseded flag can still flip if it is revised mid-session. To page: pass nextCursor back as cursor with the SAME query, filters, and order; pages come from the ordering frozen (relevance) or the keyset position (chronological) on the first page, so a mid-walk write or archive can never duplicate or skip a hit. The cursor is bound to the query, filters, and order that issued it: passing it with any of those changed is rejected as invalid input — omit the cursor to start a new search. The relevance cursor token is a real context cost (~4-6 KB — it carries the frozen ids+scores of the candidate pool); the chronological cursor is tiny (a single row position) by comparison. Paging stops at the frozen pool (relevance) or the live corpus (chronological): hasMore: false means there is nothing more to page to. For broad scans set projection: “compact” to omit content/contentLength/truncated per hit (~5x fewer tokens), then batch-fetch the interesting ids with get_memories. Title: Search · Required scope:memory:read
Input schema
{
"anyOf": [
{
"type": "object",
"properties": {
"query": {
"type": "string",
"minLength": 1
},
"limit": {
"default": 5,
"type": "integer",
"minimum": 1,
"maximum": 25
},
"memoryType": {
"description": "Single memory type to match. Mutually exclusive with memoryTypes — pass one or the other, never both.",
"type": "string",
"enum": [
"decision",
"commitment",
"blocker",
"fact",
"preference",
"pattern",
"note",
"event"
]
},
"scope": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"pattern": "^[a-z0-9][a-z0-9-]*$"
},
"project": {
"type": "string",
"minLength": 1,
"maxLength": 256
},
"status": {
"type": "string",
"enum": [
"active",
"archived"
]
},
"asOf": {
"type": "object",
"properties": {
"validAt": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
},
"asKnownAt": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
}
},
"additionalProperties": false
},
"memoryTypes": {
"minItems": 1,
"maxItems": 8,
"type": "array",
"items": {
"type": "string",
"enum": [
"decision",
"commitment",
"blocker",
"fact",
"preference",
"pattern",
"note",
"event"
]
},
"description": "OR-set of memory types to match. Mutually exclusive with memoryType — pass one or the other, never both."
},
"recordedAfter": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
"description": "Inclusive lower bound on recorded_at. Use at most 3 fractional-second digits (millisecond precision). Must not be later than recordedBefore when both are given."
},
"recordedBefore": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
"description": "Inclusive upper bound on recorded_at. Use at most 3 fractional-second digits (millisecond precision). Must not be earlier than recordedAfter when both are given."
},
"cursor": {
"description": "Opaque continuation token from a previous page’s nextCursor. Omit for the first page. Keep query and filters identical across pages of one walk.",
"type": "string",
"minLength": 1
},
"projection": {
"default": "full",
"description": "Per-hit output shape: full (default) includes the content excerpt; compact omits content/contentLength/truncated for cheap broad scans — batch-fetch interesting ids with get_memories.",
"type": "string",
"enum": [
"full",
"compact"
]
},
"order": {
"default": "relevance",
"description": "Retrieval order: 'relevance' (default) is the fused ranked search — query required.",
"type": "string",
"const": "relevance"
}
},
"required": [
"query"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"query": {
"description": "NOT ACCEPTED in chronological order — this mode never ranks, so a query would be silently ignored. Omit it and narrow with at least one filter, or use order: \"relevance\" for ranked search.",
"type": "string",
"minLength": 1
},
"limit": {
"default": 5,
"type": "integer",
"minimum": 1,
"maximum": 25
},
"memoryType": {
"description": "Single memory type to match. Mutually exclusive with memoryTypes — pass one or the other, never both.",
"type": "string",
"enum": [
"decision",
"commitment",
"blocker",
"fact",
"preference",
"pattern",
"note",
"event"
]
},
"scope": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"pattern": "^[a-z0-9][a-z0-9-]*$"
},
"project": {
"type": "string",
"minLength": 1,
"maxLength": 256
},
"status": {
"type": "string",
"enum": [
"active",
"archived"
]
},
"asOf": {
"type": "object",
"properties": {
"validAt": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
},
"asKnownAt": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
}
},
"additionalProperties": false
},
"memoryTypes": {
"minItems": 1,
"maxItems": 8,
"type": "array",
"items": {
"type": "string",
"enum": [
"decision",
"commitment",
"blocker",
"fact",
"preference",
"pattern",
"note",
"event"
]
},
"description": "OR-set of memory types to match. Mutually exclusive with memoryType — pass one or the other, never both."
},
"recordedAfter": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
"description": "Inclusive lower bound on recorded_at. Use at most 3 fractional-second digits (millisecond precision). Must not be later than recordedBefore when both are given."
},
"recordedBefore": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
"description": "Inclusive upper bound on recorded_at. Use at most 3 fractional-second digits (millisecond precision). Must not be earlier than recordedAfter when both are given."
},
"cursor": {
"description": "Opaque continuation token from a previous page’s nextCursor. Omit for the first page. Keep query and filters identical across pages of one walk.",
"type": "string",
"minLength": 1
},
"projection": {
"default": "full",
"description": "Per-hit output shape: full (default) includes the content excerpt; compact omits content/contentLength/truncated for cheap broad scans — batch-fetch interesting ids with get_memories.",
"type": "string",
"enum": [
"full",
"compact"
]
},
"order": {
"type": "string",
"const": "chronological",
"description": "Retrieval order: chronological is an exhaustive, unranked recorded_at DESC listing — no embedding call, no vector/abstention signal."
}
},
"required": [
"order"
],
"additionalProperties": false
}
]
}
Output schema
{
"type": "object",
"properties": {
"hits": {
"maxItems": 25,
"type": "array",
"items": {
"anyOf": [
{
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"memoryType": {
"type": "string"
},
"topic": {
"type": "string"
},
"content": {
"type": "string",
"maxLength": 600
},
"contentLength": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"truncated": {
"type": "boolean"
},
"score": {
"type": "number"
},
"superseded": {
"type": "boolean"
}
},
"required": [
"id",
"memoryType",
"topic",
"content",
"contentLength",
"truncated",
"score",
"superseded"
],
"additionalProperties": true
},
{
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"memoryType": {
"type": "string"
},
"topic": {
"type": "string"
},
"score": {
"type": "number"
},
"superseded": {
"type": "boolean"
}
},
"required": [
"id",
"memoryType",
"topic",
"score",
"superseded"
],
"additionalProperties": true
}
]
}
},
"count": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"hasMore": {
"type": "boolean"
},
"nextCursor": {
"type": "string",
"minLength": 1
},
"appliedScope": {
"description": "Scope your retrieval-scope policy applied to this unscoped call (mode default). Absent when nothing was narrowed.",
"type": "string",
"minLength": 1,
"maxLength": 64,
"pattern": "^[a-z0-9][a-z0-9-]*$"
}
},
"required": [
"hits",
"count",
"hasMore"
],
"additionalProperties": true
}
get_facts
Currently-valid facts for a subject, with optional bi-temporal time travel, OR a chronological time-series read across a valid-time window (range: {from?, to?} — half-open [from, to), surfaces superseded generations inside it). range and asOf are mutually exclusive. List/range mode (no subject) returns the most recent (or earliest-in-window) facts, bounded by an optional limit (default 50, max 200). Title: Get Facts · Required scope:memory:read
Input schema
{
"type": "object",
"properties": {
"subject": {
"type": "string",
"minLength": 1
},
"predicate": {
"type": "string",
"minLength": 1
},
"asOf": {
"type": "object",
"properties": {
"validAt": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
},
"asKnownAt": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
}
},
"additionalProperties": false
},
"limit": {
"default": 50,
"type": "integer",
"minimum": 1,
"maximum": 200
},
"range": {
"type": "object",
"properties": {
"from": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
"description": "Inclusive lower bound on valid_from (valid-time window). Use at most 3 fractional-second digits (millisecond precision). Must not be later than `to` when both are given."
},
"to": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
"description": "Exclusive upper bound on the valid-time window [from, to). Use at most 3 fractional-second digits (millisecond precision). Must not be earlier than `from` when both are given."
}
},
"additionalProperties": false
}
},
"additionalProperties": false
}
Output schema
{
"type": "object",
"properties": {
"facts": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"subject": {
"type": "string"
},
"predicate": {
"type": "string"
},
"value": {
"type": "string"
},
"confidence": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"validFrom": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
},
"validTo": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
},
{
"type": "null"
}
]
},
"recordedAt": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
}
},
"required": [
"id",
"subject",
"predicate",
"value",
"confidence",
"validFrom",
"validTo",
"recordedAt"
],
"additionalProperties": true
}
},
"count": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
}
},
"required": [
"facts",
"count"
],
"additionalProperties": true
}
revise
Supersede an existing memory with a corrected successor, linked by a typed edge (supersedes or updates). Never edits in place; append-and-supersede. Title: Revise · Required scope:memory:write
Input schema
{
"type": "object",
"properties": {
"memoryType": {
"type": "string",
"enum": [
"decision",
"commitment",
"blocker",
"fact",
"preference",
"pattern",
"note",
"event"
]
},
"topic": {
"type": "string",
"minLength": 1,
"maxLength": 256
},
"content": {
"type": "string",
"minLength": 1,
"maxLength": 2000
},
"scope": {
"default": "personal",
"type": "string",
"minLength": 1,
"maxLength": 64,
"pattern": "^[a-z0-9][a-z0-9-]*$"
},
"project": {
"type": "string",
"minLength": 1,
"maxLength": 256
},
"tags": {
"default": [],
"maxItems": 32,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 64
}
},
"predecessorId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"edgeIntent": {
"default": "supersedes",
"type": "string",
"enum": [
"supersedes",
"updates"
]
},
"sessionRunId": {
"description": "Opaque id of the current agent session run. Pass through from SessionStart. Omit to attach the single leased-open session for this project, if any. A run id not owned by this tenant fails the write.",
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
},
"required": [
"memoryType",
"topic",
"content",
"predecessorId"
],
"additionalProperties": false
}
Output schema
{
"type": "object",
"properties": {
"memory": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"memoryType": {
"type": "string",
"enum": [
"decision",
"commitment",
"blocker",
"fact",
"preference",
"pattern",
"note",
"event"
]
},
"topic": {
"type": "string"
},
"scope": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"pattern": "^[a-z0-9][a-z0-9-]*$"
},
"project": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 256
},
{
"type": "null"
}
]
}
},
"required": [
"id",
"memoryType",
"topic",
"scope",
"project"
],
"additionalProperties": true
},
"embedded": {
"type": "string",
"enum": [
"pending",
"done",
"failed",
"off"
]
}
},
"required": [
"memory",
"embedded"
],
"additionalProperties": true
}
resolve
Settle a memory by its id. A commitment transitions to a target status (open, waiting, resolved, expired) — serves resolve and unresolve (resolved -> open); illegal transitions are rejected. A blocker is archived (status active -> archived) and leaves the active-blocker briefing; the passed status is ignored for blockers and the result reports archived. Commitments AND blockers must be written WITH a project to be resolvable from a project-scoped briefing. Title: Resolve · Required scope:memory:write
Input schema
{
"type": "object",
"properties": {
"memoryId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"status": {
"type": "string",
"enum": [
"open",
"waiting",
"resolved",
"expired"
]
},
"sessionRunId": {
"description": "Opaque id of the current agent session run. Pass through from SessionStart. Omit to attach the single leased-open session for this project, if any.",
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
},
"required": [
"memoryId",
"status"
],
"additionalProperties": false
}
Output schema
{
"type": "object",
"properties": {
"commitmentId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"status": {
"anyOf": [
{
"type": "string",
"enum": [
"open",
"waiting",
"resolved",
"expired"
]
},
{
"type": "string",
"enum": [
"archived"
]
}
]
}
},
"required": [
"commitmentId",
"status"
],
"additionalProperties": true
}
briefing
Structured session orientation: open/overdue commitments, blockers, stale candidates, recent decisions, preferences. Requires an explicit selector (all, scope, project, or scope_project) — no unfiltered default. If a retrieval-scope policy is set (configure_scope set_retrieval_default), a kind: “all” selector may be narrowed to your default scope (the result then reports appliedScope) or rejected until you pass a scope selector. A PROJECT selector only matches memories written WITH that project; a memory written without a project (project IS NULL) never appears through the project lens. The scope_project selector narrows to one scope AND one project together; its includeUnscoped: true additionally opts NULL-project memories of that scope in (default false = strict intersection; the bare project selector is never widened). Active blockers leave this set when resolved (resolve archives the blocker memory). brief mode (default) returns counts plus top items; full returns the bounded lists. Optional sections picks a subset (un-requested sections are skipped and omitted); optional sectionLimit (1-100) tunes the per-section bound. Each section reports its exact count and hasMore when more rows exist than returned. Title: Briefing · Required scope:memory:read
Input schema
{
"type": "object",
"properties": {
"selector": {
"oneOf": [
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "all"
}
},
"required": [
"kind"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "scope"
},
"scope": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"pattern": "^[a-z0-9][a-z0-9-]*$"
}
},
"required": [
"kind",
"scope"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "project"
},
"project": {
"type": "string",
"minLength": 1,
"maxLength": 256
}
},
"required": [
"kind",
"project"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "scope_project"
},
"scope": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"pattern": "^[a-z0-9][a-z0-9-]*$"
},
"project": {
"type": "string",
"minLength": 1,
"maxLength": 256
},
"includeUnscoped": {
"default": false,
"description": "Also match memories in the scope written with NO project (project IS NULL). Default false: strict scope AND project intersection.",
"type": "boolean"
}
},
"required": [
"kind",
"scope",
"project"
],
"additionalProperties": false
}
]
},
"mode": {
"default": "brief",
"type": "string",
"enum": [
"brief",
"full"
]
},
"sections": {
"minItems": 1,
"maxItems": 6,
"type": "array",
"items": {
"type": "string",
"enum": [
"commitments",
"overdue",
"blockers",
"staleCandidates",
"recentDecisions",
"preferences"
]
},
"description": "Subset of sections to compute (unique names). Absent = all sections. Un-requested sections are skipped entirely and omitted from the result."
},
"sectionLimit": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"description": "Per-section item bound (1..100). Absent = the mode default (3 brief / 25 full)."
}
},
"required": [
"selector"
],
"additionalProperties": false
}
Output schema
{
"type": "object",
"properties": {
"selector": {
"oneOf": [
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "all"
}
},
"required": [
"kind"
],
"additionalProperties": true
},
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "scope"
},
"scope": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"pattern": "^[a-z0-9][a-z0-9-]*$"
}
},
"required": [
"kind",
"scope"
],
"additionalProperties": true
},
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "project"
},
"project": {
"type": "string",
"minLength": 1,
"maxLength": 256
}
},
"required": [
"kind",
"project"
],
"additionalProperties": true
},
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "scope_project"
},
"scope": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"pattern": "^[a-z0-9][a-z0-9-]*$"
},
"project": {
"type": "string",
"minLength": 1,
"maxLength": 256
},
"includeUnscoped": {
"default": false,
"description": "Also match memories in the scope written with NO project (project IS NULL). Default false: strict scope AND project intersection.",
"type": "boolean"
}
},
"required": [
"kind",
"scope",
"project",
"includeUnscoped"
],
"additionalProperties": true
}
]
},
"mode": {
"type": "string",
"enum": [
"brief",
"full"
]
},
"generatedAt": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
},
"commitments": {
"type": "object",
"properties": {
"count": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"items": {
"maxItems": 100,
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"memoryId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"topic": {
"type": "string"
},
"status": {
"type": "string",
"enum": [
"open",
"waiting",
"resolved",
"expired"
]
},
"dueAt": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
},
{
"type": "null"
}
]
},
"overdue": {
"type": "boolean"
}
},
"required": [
"id",
"memoryId",
"topic",
"status",
"dueAt",
"overdue"
],
"additionalProperties": true
}
},
"hasMore": {
"type": "boolean"
}
},
"required": [
"count",
"items",
"hasMore"
],
"additionalProperties": true
},
"overdue": {
"type": "object",
"properties": {
"count": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"items": {
"maxItems": 100,
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"memoryId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"topic": {
"type": "string"
},
"status": {
"type": "string",
"enum": [
"open",
"waiting",
"resolved",
"expired"
]
},
"dueAt": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
},
{
"type": "null"
}
]
},
"overdue": {
"type": "boolean"
}
},
"required": [
"id",
"memoryId",
"topic",
"status",
"dueAt",
"overdue"
],
"additionalProperties": true
}
},
"hasMore": {
"type": "boolean"
}
},
"required": [
"count",
"items",
"hasMore"
],
"additionalProperties": true
},
"blockers": {
"type": "object",
"properties": {
"count": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"items": {
"maxItems": 100,
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"memoryType": {
"type": "string",
"enum": [
"decision",
"commitment",
"blocker",
"fact",
"preference",
"pattern",
"note",
"event"
]
},
"topic": {
"type": "string"
},
"scope": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"pattern": "^[a-z0-9][a-z0-9-]*$"
},
"project": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 256
},
{
"type": "null"
}
]
},
"recordedAt": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
},
"updatedAt": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
}
},
"required": [
"id",
"memoryType",
"topic",
"scope",
"project",
"recordedAt",
"updatedAt"
],
"additionalProperties": true
}
},
"hasMore": {
"type": "boolean"
}
},
"required": [
"count",
"items",
"hasMore"
],
"additionalProperties": true
},
"staleCandidates": {
"type": "object",
"properties": {
"count": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"items": {
"maxItems": 100,
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"memoryType": {
"type": "string",
"enum": [
"decision",
"commitment",
"blocker",
"fact",
"preference",
"pattern",
"note",
"event"
]
},
"topic": {
"type": "string"
},
"scope": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"pattern": "^[a-z0-9][a-z0-9-]*$"
},
"project": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 256
},
{
"type": "null"
}
]
},
"recordedAt": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
},
"updatedAt": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
}
},
"required": [
"id",
"memoryType",
"topic",
"scope",
"project",
"recordedAt",
"updatedAt"
],
"additionalProperties": true
}
},
"hasMore": {
"type": "boolean"
}
},
"required": [
"count",
"items",
"hasMore"
],
"additionalProperties": true
},
"recentDecisions": {
"type": "object",
"properties": {
"count": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"items": {
"maxItems": 100,
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"memoryType": {
"type": "string",
"enum": [
"decision",
"commitment",
"blocker",
"fact",
"preference",
"pattern",
"note",
"event"
]
},
"topic": {
"type": "string"
},
"scope": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"pattern": "^[a-z0-9][a-z0-9-]*$"
},
"project": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 256
},
{
"type": "null"
}
]
},
"recordedAt": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
},
"updatedAt": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
}
},
"required": [
"id",
"memoryType",
"topic",
"scope",
"project",
"recordedAt",
"updatedAt"
],
"additionalProperties": true
}
},
"hasMore": {
"type": "boolean"
}
},
"required": [
"count",
"items",
"hasMore"
],
"additionalProperties": true
},
"preferences": {
"type": "object",
"properties": {
"count": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"items": {
"maxItems": 100,
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"memoryType": {
"type": "string",
"enum": [
"decision",
"commitment",
"blocker",
"fact",
"preference",
"pattern",
"note",
"event"
]
},
"topic": {
"type": "string"
},
"scope": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"pattern": "^[a-z0-9][a-z0-9-]*$"
},
"project": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 256
},
{
"type": "null"
}
]
},
"recordedAt": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
},
"updatedAt": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
}
},
"required": [
"id",
"memoryType",
"topic",
"scope",
"project",
"recordedAt",
"updatedAt"
],
"additionalProperties": true
}
},
"hasMore": {
"type": "boolean"
}
},
"required": [
"count",
"items",
"hasMore"
],
"additionalProperties": true
},
"appliedScope": {
"description": "Scope your retrieval-scope policy applied to this unscoped call (mode default). Absent when nothing was narrowed.",
"type": "string",
"minLength": 1,
"maxLength": 64,
"pattern": "^[a-z0-9][a-z0-9-]*$"
}
},
"required": [
"selector",
"mode",
"generatedAt"
],
"additionalProperties": true
}
handoff
Export structured context (decisions, open commitments, preferences — with content) for another agent or provider to pick up the thread. Requires an explicit selector (all, scope, project, or scope_project); the payload is bounded. If a retrieval-scope policy is set (configure_scope set_retrieval_default), a kind: “all” selector may be narrowed to your default scope (the result then reports appliedScope) or rejected until you pass a scope selector. A scope_project selector narrows to one scope AND one project; its includeUnscoped: true additionally exports NULL-project memories of that scope (default false). Optional sectionLimit (1-100) tunes the per-section bound. The envelope reports exact per-section counts, and truncated flags a section whose list is incomplete. Item content is a bounded excerpt — when a line reports truncated: true, call get_memories with its id to read the full content. Title: Handoff · Required scope:memory:read
Input schema
{
"type": "object",
"properties": {
"selector": {
"oneOf": [
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "all"
}
},
"required": [
"kind"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "scope"
},
"scope": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"pattern": "^[a-z0-9][a-z0-9-]*$"
}
},
"required": [
"kind",
"scope"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "project"
},
"project": {
"type": "string",
"minLength": 1,
"maxLength": 256
}
},
"required": [
"kind",
"project"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "scope_project"
},
"scope": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"pattern": "^[a-z0-9][a-z0-9-]*$"
},
"project": {
"type": "string",
"minLength": 1,
"maxLength": 256
},
"includeUnscoped": {
"default": false,
"description": "Also match memories in the scope written with NO project (project IS NULL). Default false: strict scope AND project intersection.",
"type": "boolean"
}
},
"required": [
"kind",
"scope",
"project"
],
"additionalProperties": false
}
]
},
"generatedFor": {
"type": "string",
"minLength": 1,
"maxLength": 256
},
"sectionLimit": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"description": "Per-section item bound (1..100). Absent = the default of 25."
}
},
"required": [
"selector"
],
"additionalProperties": false
}
Output schema
{
"type": "object",
"properties": {
"selector": {
"oneOf": [
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "all"
}
},
"required": [
"kind"
],
"additionalProperties": true
},
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "scope"
},
"scope": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"pattern": "^[a-z0-9][a-z0-9-]*$"
}
},
"required": [
"kind",
"scope"
],
"additionalProperties": true
},
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "project"
},
"project": {
"type": "string",
"minLength": 1,
"maxLength": 256
}
},
"required": [
"kind",
"project"
],
"additionalProperties": true
},
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "scope_project"
},
"scope": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"pattern": "^[a-z0-9][a-z0-9-]*$"
},
"project": {
"type": "string",
"minLength": 1,
"maxLength": 256
},
"includeUnscoped": {
"default": false,
"description": "Also match memories in the scope written with NO project (project IS NULL). Default false: strict scope AND project intersection.",
"type": "boolean"
}
},
"required": [
"kind",
"scope",
"project",
"includeUnscoped"
],
"additionalProperties": true
}
]
},
"generatedFor": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"generatedAt": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
},
"decisions": {
"maxItems": 100,
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"memoryType": {
"type": "string",
"enum": [
"decision",
"commitment",
"blocker",
"fact",
"preference",
"pattern",
"note",
"event"
]
},
"topic": {
"type": "string"
},
"content": {
"type": "string",
"maxLength": 600
},
"contentLength": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"truncated": {
"type": "boolean"
},
"scope": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"pattern": "^[a-z0-9][a-z0-9-]*$"
},
"project": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 256
},
{
"type": "null"
}
]
}
},
"required": [
"id",
"memoryType",
"topic",
"content",
"contentLength",
"truncated",
"scope",
"project"
],
"additionalProperties": true
}
},
"commitments": {
"maxItems": 100,
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"memoryId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"topic": {
"type": "string"
},
"status": {
"type": "string",
"enum": [
"open",
"waiting",
"resolved",
"expired"
]
},
"dueAt": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
},
{
"type": "null"
}
]
}
},
"required": [
"id",
"memoryId",
"topic",
"status",
"dueAt"
],
"additionalProperties": true
}
},
"preferences": {
"maxItems": 100,
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"memoryType": {
"type": "string",
"enum": [
"decision",
"commitment",
"blocker",
"fact",
"preference",
"pattern",
"note",
"event"
]
},
"topic": {
"type": "string"
},
"content": {
"type": "string",
"maxLength": 600
},
"contentLength": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"truncated": {
"type": "boolean"
},
"scope": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"pattern": "^[a-z0-9][a-z0-9-]*$"
},
"project": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 256
},
{
"type": "null"
}
]
}
},
"required": [
"id",
"memoryType",
"topic",
"content",
"contentLength",
"truncated",
"scope",
"project"
],
"additionalProperties": true
}
},
"notes": {
"type": "array",
"items": {
"type": "string"
}
},
"counts": {
"type": "object",
"properties": {
"decisions": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"commitments": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"preferences": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
}
},
"required": [
"decisions",
"commitments",
"preferences"
],
"additionalProperties": true
},
"truncated": {
"type": "object",
"properties": {
"decisions": {
"type": "boolean"
},
"commitments": {
"type": "boolean"
},
"preferences": {
"type": "boolean"
}
},
"required": [
"decisions",
"commitments",
"preferences"
],
"additionalProperties": true
},
"appliedScope": {
"description": "Scope your retrieval-scope policy applied to this unscoped call (mode default). Absent when nothing was narrowed.",
"type": "string",
"minLength": 1,
"maxLength": 64,
"pattern": "^[a-z0-9][a-z0-9-]*$"
}
},
"required": [
"selector",
"generatedFor",
"generatedAt",
"decisions",
"commitments",
"preferences",
"notes",
"counts",
"truncated"
],
"additionalProperties": true
}
get_memories
Fetch the full content of memories by id — use this after search or handoff returns an item with truncated: true to read the complete body. Accepts up to 20 ids plus an optional maxContentChars per-item bound (default 10000, max 65536; ids × maxContentChars may not exceed 262144 per call); an item still truncated at the cap reports truncated: true with its full contentLength. Ids that do not resolve for you are listed in notFound — never an error. Title: Get Memories · Required scope:memory:read
Input schema
{
"type": "object",
"properties": {
"ids": {
"minItems": 1,
"maxItems": 20,
"type": "array",
"items": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
},
"maxContentChars": {
"default": 10000,
"type": "integer",
"minimum": 600,
"maximum": 65536
}
},
"required": [
"ids"
],
"additionalProperties": false
}
Output schema
{
"type": "object",
"properties": {
"memories": {
"maxItems": 20,
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"memoryType": {
"type": "string",
"enum": [
"decision",
"commitment",
"blocker",
"fact",
"preference",
"pattern",
"note",
"event"
]
},
"topic": {
"type": "string"
},
"content": {
"type": "string",
"maxLength": 65536
},
"contentLength": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"truncated": {
"type": "boolean"
},
"scope": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"pattern": "^[a-z0-9][a-z0-9-]*$"
},
"project": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 256
},
{
"type": "null"
}
]
},
"status": {
"type": "string",
"enum": [
"active",
"archived"
]
},
"commitmentStatus": {
"type": "string",
"enum": [
"open",
"waiting",
"resolved",
"expired"
]
},
"tags": {
"type": "array",
"items": {
"type": "string"
}
},
"validFrom": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
},
"validTo": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
},
{
"type": "null"
}
]
},
"recordedAt": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
}
},
"required": [
"id",
"memoryType",
"topic",
"content",
"contentLength",
"truncated",
"scope",
"project",
"status",
"tags",
"validFrom",
"validTo",
"recordedAt"
],
"additionalProperties": true
}
},
"count": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"notFound": {
"maxItems": 20,
"type": "array",
"items": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
}
},
"required": [
"memories",
"count",
"notFound"
],
"additionalProperties": true
}
configure_scope
Manage your memory scopes: list, create, rename, set aliases, or delete (registry only — existing memories keep their scope). set_retrieval_default binds your READS to a scope: mode “default” narrows unscoped search/briefing/handoff calls to the given scope (results report appliedScope), “require” rejects unscoped reads until a scope is passed, “off” restores unrestricted reads (scope must be null for require/off). Mutating actions require the write scope. Title: Configure Scope · Required scope:memory:read or memory:write
Input schema
{
"oneOf": [
{
"type": "object",
"properties": {
"action": {
"type": "string",
"const": "list"
}
},
"required": [
"action"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"action": {
"type": "string",
"const": "create"
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"pattern": "^[a-z0-9][a-z0-9-]*$"
},
"aliases": {
"default": [],
"maxItems": 16,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"pattern": "^[a-z0-9][a-z0-9-]*$"
}
}
},
"required": [
"action",
"name"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"action": {
"type": "string",
"const": "rename"
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"pattern": "^[a-z0-9][a-z0-9-]*$"
},
"newName": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"pattern": "^[a-z0-9][a-z0-9-]*$"
}
},
"required": [
"action",
"name",
"newName"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"action": {
"type": "string",
"const": "set_aliases"
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"pattern": "^[a-z0-9][a-z0-9-]*$"
},
"aliases": {
"maxItems": 16,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"pattern": "^[a-z0-9][a-z0-9-]*$"
}
}
},
"required": [
"action",
"name",
"aliases"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"action": {
"type": "string",
"const": "delete"
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"pattern": "^[a-z0-9][a-z0-9-]*$"
}
},
"required": [
"action",
"name"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"action": {
"type": "string",
"const": "set_retrieval_default"
},
"scope": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 64,
"pattern": "^[a-z0-9][a-z0-9-]*$"
},
{
"type": "null"
}
]
},
"mode": {
"type": "string",
"enum": [
"off",
"default",
"require"
]
}
},
"required": [
"action",
"scope",
"mode"
],
"additionalProperties": false
}
]
}
Output schema
{
"oneOf": [
{
"type": "object",
"properties": {
"action": {
"type": "string",
"const": "list"
},
"scopes": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"pattern": "^[a-z0-9][a-z0-9-]*$"
},
"aliases": {
"maxItems": 16,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"pattern": "^[a-z0-9][a-z0-9-]*$"
}
},
"createdAt": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
}
},
"required": [
"id",
"name",
"aliases",
"createdAt"
],
"additionalProperties": true
}
},
"count": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
}
},
"required": [
"action",
"scopes",
"count"
],
"additionalProperties": true
},
{
"type": "object",
"properties": {
"action": {
"type": "string",
"const": "upserted"
},
"scope": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"pattern": "^[a-z0-9][a-z0-9-]*$"
},
"aliases": {
"maxItems": 16,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"pattern": "^[a-z0-9][a-z0-9-]*$"
}
},
"createdAt": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
}
},
"required": [
"id",
"name",
"aliases",
"createdAt"
],
"additionalProperties": true
}
},
"required": [
"action",
"scope"
],
"additionalProperties": true
},
{
"type": "object",
"properties": {
"action": {
"type": "string",
"const": "deleted"
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"pattern": "^[a-z0-9][a-z0-9-]*$"
}
},
"required": [
"action",
"name"
],
"additionalProperties": true
},
{
"type": "object",
"properties": {
"action": {
"type": "string",
"const": "retrieval_default_set"
},
"policy": {
"type": "object",
"properties": {
"mode": {
"type": "string",
"enum": [
"off",
"default",
"require"
]
},
"scope": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 64,
"pattern": "^[a-z0-9][a-z0-9-]*$"
},
{
"type": "null"
}
]
}
},
"required": [
"mode",
"scope"
],
"additionalProperties": true
}
},
"required": [
"action",
"policy"
],
"additionalProperties": true
}
]
}
describe_environment
Report server capabilities (tool names, count, version), your registered scopes, your active retrieval-scope policy (retrievalScopePolicy), and bounded memory/commitment counts. Exposes no secrets or configuration values. Title: Describe Environment · Required scope:memory:read
Input schema
{
"type": "object",
"properties": {},
"additionalProperties": false
}
Output schema
{
"type": "object",
"properties": {
"capabilities": {
"type": "object",
"properties": {
"tools": {
"type": "array",
"items": {
"type": "string"
}
},
"toolCount": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"version": {
"type": "string"
}
},
"required": [
"tools",
"toolCount",
"version"
],
"additionalProperties": true
},
"scopes": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"pattern": "^[a-z0-9][a-z0-9-]*$"
},
"aliases": {
"maxItems": 16,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"pattern": "^[a-z0-9][a-z0-9-]*$"
}
},
"createdAt": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
}
},
"required": [
"id",
"name",
"aliases",
"createdAt"
],
"additionalProperties": true
}
},
"stats": {
"type": "object",
"properties": {
"memoriesByType": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
}
},
"activeMemories": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"supersededMemories": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"archivedMemories": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"commitmentsByStatus": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
}
}
},
"required": [
"memoriesByType",
"activeMemories",
"supersededMemories",
"archivedMemories",
"commitmentsByStatus"
],
"additionalProperties": true
},
"retrievalScopePolicy": {
"type": "object",
"properties": {
"mode": {
"type": "string",
"enum": [
"off",
"default",
"require"
]
},
"scope": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 64,
"pattern": "^[a-z0-9][a-z0-9-]*$"
},
{
"type": "null"
}
]
}
},
"required": [
"mode",
"scope"
],
"additionalProperties": true
}
},
"required": [
"capabilities",
"scopes",
"stats",
"retrievalScopePolicy"
],
"additionalProperties": true
}
review_proposals
List proposals awaiting review (optionally by status), reject one, or accept one. Two kinds are reviewed the same way: consolidation proposals, where accepting materializes the proposed edge and a supersedes/updates edge also closes the predecessor; and extracted-fact proposals, where accepting writes the structured fact soget_facts can read it. Accept and reject take the proposal id either way. Reject and accept require the write scope.
Title: Review Proposals · Required scope: memory:read or memory:write
Input schema
{
"oneOf": [
{
"type": "object",
"properties": {
"action": {
"type": "string",
"const": "list"
},
"status": {
"type": "string",
"enum": [
"proposed",
"applied",
"rejected"
]
},
"limit": {
"default": 25,
"type": "integer",
"minimum": 1,
"maximum": 100
}
},
"required": [
"action"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"action": {
"type": "string",
"const": "reject"
},
"proposalId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
},
"required": [
"action",
"proposalId"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"action": {
"type": "string",
"const": "accept"
},
"proposalId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
},
"required": [
"action",
"proposalId"
],
"additionalProperties": false
}
]
}
Output schema
{
"oneOf": [
{
"type": "object",
"properties": {
"action": {
"type": "string",
"const": "list"
},
"proposals": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"fromId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"toId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"edgeType": {
"type": "string",
"enum": [
"supersedes",
"updates",
"extends",
"derives"
]
},
"memoryType": {
"type": "string",
"enum": [
"decision",
"commitment",
"blocker",
"fact",
"preference",
"pattern",
"note",
"event"
]
},
"similarity": {
"type": "number"
},
"rationale": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"status": {
"type": "string",
"enum": [
"proposed",
"applied",
"rejected"
]
},
"decidedAt": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
},
{
"type": "null"
}
]
},
"createdAt": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
}
},
"required": [
"id",
"fromId",
"toId",
"edgeType",
"memoryType",
"similarity",
"rationale",
"status",
"decidedAt",
"createdAt"
],
"additionalProperties": true
}
},
"count": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"factProposals": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"memoryId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"subject": {
"type": "string"
},
"predicate": {
"type": "string"
},
"value": {
"type": "string"
},
"memoryType": {
"type": "string",
"enum": [
"decision",
"commitment",
"blocker",
"fact",
"preference",
"pattern",
"note",
"event"
]
},
"confidence": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"validFrom": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
},
{
"type": "null"
}
]
},
"validTo": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
},
{
"type": "null"
}
]
},
"rationale": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"status": {
"type": "string",
"enum": [
"proposed",
"applied",
"rejected"
]
},
"decidedAt": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
},
{
"type": "null"
}
]
},
"createdAt": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
}
},
"required": [
"id",
"memoryId",
"subject",
"predicate",
"value",
"memoryType",
"confidence",
"validFrom",
"validTo",
"rationale",
"status",
"decidedAt",
"createdAt"
],
"additionalProperties": true
}
}
},
"required": [
"action",
"proposals",
"count"
],
"additionalProperties": true
},
{
"type": "object",
"properties": {
"action": {
"type": "string",
"const": "rejected"
},
"proposal": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"fromId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"toId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"edgeType": {
"type": "string",
"enum": [
"supersedes",
"updates",
"extends",
"derives"
]
},
"memoryType": {
"type": "string",
"enum": [
"decision",
"commitment",
"blocker",
"fact",
"preference",
"pattern",
"note",
"event"
]
},
"similarity": {
"type": "number"
},
"rationale": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"status": {
"type": "string",
"enum": [
"proposed",
"applied",
"rejected"
]
},
"decidedAt": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
},
{
"type": "null"
}
]
},
"createdAt": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
}
},
"required": [
"id",
"fromId",
"toId",
"edgeType",
"memoryType",
"similarity",
"rationale",
"status",
"decidedAt",
"createdAt"
],
"additionalProperties": true
}
},
"required": [
"action",
"proposal"
],
"additionalProperties": true
},
{
"type": "object",
"properties": {
"action": {
"type": "string",
"const": "applied"
},
"proposal": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"fromId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"toId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"edgeType": {
"type": "string",
"enum": [
"supersedes",
"updates",
"extends",
"derives"
]
},
"memoryType": {
"type": "string",
"enum": [
"decision",
"commitment",
"blocker",
"fact",
"preference",
"pattern",
"note",
"event"
]
},
"similarity": {
"type": "number"
},
"rationale": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"status": {
"type": "string",
"enum": [
"proposed",
"applied",
"rejected"
]
},
"decidedAt": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
},
{
"type": "null"
}
]
},
"createdAt": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
}
},
"required": [
"id",
"fromId",
"toId",
"edgeType",
"memoryType",
"similarity",
"rationale",
"status",
"decidedAt",
"createdAt"
],
"additionalProperties": true
}
},
"required": [
"action",
"proposal"
],
"additionalProperties": true
},
{
"type": "object",
"properties": {
"action": {
"type": "string",
"const": "rejected_fact"
},
"proposal": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"memoryId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"subject": {
"type": "string"
},
"predicate": {
"type": "string"
},
"value": {
"type": "string"
},
"memoryType": {
"type": "string",
"enum": [
"decision",
"commitment",
"blocker",
"fact",
"preference",
"pattern",
"note",
"event"
]
},
"confidence": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"validFrom": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
},
{
"type": "null"
}
]
},
"validTo": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
},
{
"type": "null"
}
]
},
"rationale": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"status": {
"type": "string",
"enum": [
"proposed",
"applied",
"rejected"
]
},
"decidedAt": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
},
{
"type": "null"
}
]
},
"createdAt": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
}
},
"required": [
"id",
"memoryId",
"subject",
"predicate",
"value",
"memoryType",
"confidence",
"validFrom",
"validTo",
"rationale",
"status",
"decidedAt",
"createdAt"
],
"additionalProperties": true
}
},
"required": [
"action",
"proposal"
],
"additionalProperties": true
},
{
"type": "object",
"properties": {
"action": {
"type": "string",
"const": "applied_fact"
},
"proposal": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"memoryId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"subject": {
"type": "string"
},
"predicate": {
"type": "string"
},
"value": {
"type": "string"
},
"memoryType": {
"type": "string",
"enum": [
"decision",
"commitment",
"blocker",
"fact",
"preference",
"pattern",
"note",
"event"
]
},
"confidence": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"validFrom": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
},
{
"type": "null"
}
]
},
"validTo": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
},
{
"type": "null"
}
]
},
"rationale": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"status": {
"type": "string",
"enum": [
"proposed",
"applied",
"rejected"
]
},
"decidedAt": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
},
{
"type": "null"
}
]
},
"createdAt": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
}
},
"required": [
"id",
"memoryId",
"subject",
"predicate",
"value",
"memoryType",
"confidence",
"validFrom",
"validTo",
"rationale",
"status",
"decidedAt",
"createdAt"
],
"additionalProperties": true
},
"factId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
},
"required": [
"action",
"proposal",
"factId"
],
"additionalProperties": true
}
]
}