SmartMemory
Reference

Memory Type API Matrix

A per-type cheatsheet: for every memory type, where to read more, how to create it, query it, and the key fields it carries — across all three surfaces. Each type name links to its concept, guide, or example page.

Surfaces (columns):

  • SDKSmartMemory Python methods (see the SmartMemory API).
  • MCP — agent tools (see MCP Tools).
  • REST — HTTP routes. All REST paths below are under the /memory prefix (e.g. POST /decisions/createPOST /memory/decisions/create).

For the conceptual model of each type, see Memory Types.

Universal operations (any type)

These work on every memory type; the type is set by memory_type (or auto-classified by ingest()).

OperationSDKMCPREST
Create (pipeline)ingest(text)memory_ingestPOST /ingest
Create (direct)add(MemoryItem(memory_type=…))memory_addPOST /add
Get by idget(id)memory_getGET /{item_id}
Updateupdate(id, …)memory_updatePATCH /{item_id}
Deletedelete(id)memory_deleteDELETE /{item_id}
Searchsearch(q, memory_type=…)memory_searchPOST /search
Search by metadatasearch_by_metadata(k, v)memory_search_by_metadataGET /by-metadata
Listlist()memory_listGET /list

Knowledge layer

Captured through ingest() (auto-classified) or add(memory_type=…); queried by search(memory_type=…). These types evolve into one another (see Memory Dynamics).

TypeCreate (SDK · MCP · REST)QueryKey fields / notes
semanticadd("…", memory_type="semantic") · memory_add · POST /addsearch(memory_type="semantic")Context-independent facts. Default classification.
episodicadd(memory_type="episodic") · memory_add · POST /addsearch(memory_type="episodic")Time-bound events; carries valid_time. Evolves → semantic / zettel.
proceduraladd(memory_type="procedural") · dev_record_pattern · POST /addsearch(memory_type="procedural")How-to / step sequences.
pendingadd(memory_type="pending") / distill() · memory_distill · POST /addsearch(memory_type="pending")Holding bucket; ConsolidationRouter routes at ingest.
zetteladd(memory_type="zettel") · memory_add · POST /zettel/notessearch(memory_type="zettel") + zettel_backlinks · GET /zettel/{note_id}/backlinksAtomic notes; [[wikilink]] cross-refs, zettel_tags. Rich graph API under /zettel/*.

Expertise layer

What to do (and not do). Each has a Manager + Queries lifecycle (supersession, reinforcement, contradiction). Recalled as a typed dict via search(query, expertise=True). Overview: Expertise vs Knowledge.

TypeCreate (SDK · MCP · REST)QueryLifecycle & key fields
decisionadd_decision(content, …) · decision_create · POST /decisions/createsearch(expertise=True)["decision"] · decision_search / decision_list / decision_get · GET /decisions, /decisions/search, /decisions/{id}supersede / reinforce / contradict / retract / provenance / find_conflicts. Fields: rationale, rejected_alternatives, constraints, confidence, decision_type, domain, status. Walkthrough: decisions lifecycle.
opinionadd_opinion(content, subject) · (derived) evolution_synthesize_opinions · POST /opinions/createsearch(expertise=True)["opinion"]Reinforce via evolution_reinforce_opinions · POST /evolution/reinforce/opinions. Fields: subject, confidence.
observationadd_observation(entity_id, fact_id, aspect) · (derived) evolution_synthesize_observations · POST /evolution/synthesize/observationssearch(expertise=True)["observation"]Synthesized from scattered evidence. Fields: entity_id, fact_id, aspect.
reasoningadd_reasoning(trace, source_item_id) · reasoning_extract_trace · POST /reasoning/traces/storesearch(expertise=True)["reasoning"] · reasoning_query_traces · POST /reasoning/traces/query, GET /reasoning/traces/{trace_id}Premises → conclusion chains; validation + supersession. Also reasoning_challenge, reasoning_proof_tree.
constraintadd_constraint(content) / ingest_structured(schema="constraint") · memory_ingest_structured · POST /ingest/structuredsearch(expertise=True)["constraint"]Hard rule discovered or imposed. Fields: domain, source.
learnedadd_learning(content) / ingest_structured(schema="learned") · memory_ingest_structured · POST /ingest/structuredsearch(expertise=True)["learned"]A lesson learned the hard way. Fields: lesson, context.

Operational types

TypeCreate (SDK · MCP · REST)Query / readLifecycle & key fields
plan(PlanManager) / ingest_structured(schema="plan") · memory_plan_create · POST /plans/creatememory_plan_get / memory_plan_active · GET /plans/{id}, /plans/active/listUpdate task: memory_plan_update_task · PATCH /plans/{id}/task; complete / fail. Fields: title, tasks[], status, context.
plan_taskingest_structured(schema="plan_task") · memory_ingest_structured · POST /ingest/structuredvia parent plan (memory_plan_get)DAG node; task_id, status, DEPENDS_ON edges. INDEXED.
codeingest_code(directory) · code_index · POST /code/indexcode_search / code_dependencies / code_dead_code · GET /code/search, /code/dependencies, /code/dead-codeCode entities (class/function/route). Fields: entity_type, repo.
evaluation(derived — EvaluationEvolver)get_evaluation(agent_id, dimension, domain) / list_evaluation_history() · agent_evaluation_get · GET /agents/{agent_id}/evaluation, /evaluation/historyPer-(agent, dimension, domain) score; bi-temporal supersession. Not user-created.
anchoringest_structured(schema="anchor") · memory_anchor_set · POST /anchors/creatememory_anchor_list · GET /anchors/listgraduate → decision · memory_anchor_graduate; check_drift / clear. Fields: anchor_type, session_id.

Structured & telemetry types

Schema-mapped data that bypasses the NLP pipeline via ingest_structured(data, schema=…) (MCP: memory_ingest_structured(data, schema_name=…); REST: POST /ingest/structured). Background: the Structured Memory Types section. The handler sets the ingestion strategy:

  • FULL — embedding + entity extraction (semantically searchable)
  • INDEXED — typed graph node + indexes, no embedding (queried by fields)
  • APPEND — minimal node, recency-only (high-volume telemetry)
TypeStrategyDedicated create surface (if any)Notes / key fields
tool_callAPPENDmemory_ingest_structured(schema_name="tool_call")Tool telemetry. Fields: tool_name, result. Read via memory_search_by_metadata.
conversation_turnAPPENDmemory_distill (turn-pair) / schema="conversation_turn"Conversation replay rows.
conversationingest_conversation(turns) · memory_ingest_conversation · POST /ingest/conversationSession-chunked container (INDEXED) with PART_OF edges. See also bulk ingestion.
documentingest_document(source) · memory_ingest_document · POST /ingest/documentURL/file ingest, chunked.
hook_captureAPPENDschema="hook_capture"Hook event telemetry.
timeline_entryINDEXEDschema="timeline_entry"Derived FS-canonical vault timeline index.
seed_itemFULLschema="seed_item"Reference knowledge from seed packs (searchable).

Notes

  • Two recall channels. Knowledge-layer types are filtered by search(memory_type=…); expertise-layer types come back together as a typed dict from search(query, expertise=True).
  • Origin tiers govern visibility. Derived types (opinion, observation, and evolver output) carry tier-3 origins — searchable but not recalled by default. See the origin taxonomy in the SmartMemory API.
  • Auto-classification. ingest() picks the knowledge-layer type for you; pass memory_type= to add() to force one.

See also

On this page