Skip to main content
This page documents the current public HTTP control surface. In application code, prefer the helper-first SDK methods where they exist and use these routes as wire-contract and debugging references.

Core memory routes

RouteMethodPurposeRecommended SDK surface
/v2/control/ingestPOSTAsync ingest for facts, traces, lessons, rules, WM, and other typed memoryremember() for normal writes, raw client.control.ingest(...) when you need job control
/v2/control/batch_insertPOSTCompatibility bulk write pathraw client.control.batchInsert(...) / batch_insert(...)
/v2/control/ingest/jobs/:job_idGETIngest job status and completionraw client.control.getIngestJob(...) / get_ingest_job(...)
/v2/control/queryPOSTAnswer-oriented routed retrievalrecall() or raw client.control.query(...)
/v2/control/contextPOSTPre-assembled context block with disclosure modes and budget controlgetContext() / get_context()
/v2/control/activityPOSTChronological memory/activity browse surface with scope and type filtersraw client.control.listActivity(...) when available, otherwise direct HTTP
/v2/control/activity/exportPOSTExport chronological memory/activity as JSONLdirect HTTP or operator export tooling
/v2/control/archivePOSTWrite an exact reusable artifact block and return a stable reference_idarchive() / archive_block()
/v2/control/dereferencePOSTFetch exact stored content by reference_iddereference()
/v2/control/diagnosePOSTFailure-path lesson surfacingdiagnose()
/v2/control/memory_healthPOSTMemory quality, staleness, contradictions, and section healthmemoryHealth() / memory_health()
/v2/control/reflectPOSTExtract lessons and rules from run evidencereflect()
/v2/control/lessonsPOSTList stored lessons for a run/session scoperaw client.control.lessons(...)
/v2/control/lessons/deletePOSTDelete a stored lessonforget() or raw lesson delete

MAS and learning-loop routes

RouteMethodPurposeRecommended SDK surface
/v2/control/agentsPOSTList registered agents for the runlistAgents() / list_agents()
/v2/control/agents/registerPOSTRegister an agent identity and its scopesregisterAgent() / register_agent()
/v2/control/checkpointPOSTSave a pre-compaction or pre-transition checkpointcheckpoint()
/v2/control/outcomePOSTReinforce a lesson or rule after success/failure/partial outcomerecordOutcome() / record_outcome()
/v2/control/step_outcomePOSTRecord a per-step process reward signal within a runrecordStepOutcome() / record_step_outcome()
/v2/control/strategiesPOSTSurface repeated patterns from stored lessons and rulessurfaceStrategies() / surface_strategies()
/v2/control/handoffPOSTPersist a coordination handoff between agentshandoff()
/v2/control/feedbackPOSTPersist a response to a handoff or review requestfeedback()

Explicit planning and state routes

RouteMethodPurpose
/v2/control/goals/addPOSTAdd a goal
/v2/control/goals/updatePOSTUpdate a goal
/v2/control/goals/listPOSTList goals
/v2/control/goals/treePOSTRetrieve the nested goal tree
/v2/control/variables/setPOSTSet an explicit run-scoped variable
/v2/control/variables/getPOSTGet a variable
/v2/control/variables/listPOSTList variables
/v2/control/variables/deletePOSTDelete a variable
/v2/control/concepts/definePOSTDefine a concept
/v2/control/concepts/listPOSTList concepts
/v2/control/actions/submitPOSTRecord an action
/v2/control/actions/logPOSTRead the action log
/v2/control/cycles/runPOSTRecord a reasoning / planning cycle
/v2/control/cycles/historyPOSTRead cycle history

Run management and agent lifecycle routes

RouteMethodPurposeRecommended SDK surface
/v2/control/runsGETList recent runsraw client.control.listRuns(...) / list_runs(...)
/v2/control/runs/linkPOSTLink a child run to a parent runraw client.control.linkRun(...) / link_run(...)
/v2/control/runs/unlinkPOSTUnlink a previously linked runraw client.control.unlinkRun(...) / unlink_run(...)
/v2/control/delete_runPOSTDelete a run and its associated dataraw client.control.deleteRun(...) / delete_run(...)
/v2/control/agents/heartbeatPOSTAgent liveness heartbeat signalraw client.control.agentHeartbeat(...) / agent_heartbeat(...)
/v2/control/activities/appendPOSTAppend activity traces to a runraw client.control.appendActivity(...) / append_activity(...)
/v2/control/context/snapshotPOSTFull context snapshot including working memory, attention, goalsraw client.control.contextSnapshot(...) / get_run_snapshot(...)
/v2/control/events/subscribeGETStream control events via SSEraw client.control.subscribe(...)
/v2/control/ingest/statsPOSTGet per-run ingest statisticsraw client.control.getRunIngestStats(...) / get_run_ingest_stats(...)

Operating guidance

  • Prefer helper methods for normal application code.
  • Use raw route-level control when you need exact request-shape control, ingest-job polling, or contract debugging.
  • Treat /v2/control/context as the default compaction-safe context assembly surface for long-running systems.
  • Treat /v2/control/activity as the chronological audit surface for stored MuBit data. It is separate from semantic query.
  • Use /v2/control/archive plus /v2/control/dereference when later steps need exact artifact fidelity rather than only semantic discovery.
  • Use diagnose, memory_health, and strategies before changing prompts blindly.

Temporal query parameters

POST /v2/control/query and POST /v2/control/context accept temporal filtering and budget control:
FieldTypeRequiredDescription
min_timestampint64noLower bound for temporal filter (unix seconds, inclusive). Filters by occurrence_time with created_at fallback.
max_timestampint64noUpper bound for temporal filter (unix seconds, inclusive).
budgetstringnoSearch budget tier: "low", "mid" (default), "high". Controls latency/quality tradeoff.

Staleness fields in query evidence

Evidence items in query and context responses may include staleness metadata:
FieldTypeDescription
is_staleboolWhether this entry has been superseded by a newer version
superseded_bystringID of the superseding entry (empty if not stale)
Stale entries are returned with a ranking penalty. Filter them in your application if you only want current information.

Occurrence time on ingest

POST /v2/control/ingest items accept an occurrence time field:
FieldTypeRequiredDescription
occurrence_timeint64noWhen the event actually occurred (unix seconds). Distinct from ingestion time. Used for temporal queries and recency ranking.

Evidence provenance and context pressure

/v2/control/query and /v2/control/context now expose reuse provenance on surfaced evidence:
  • retrieval_mode: semantic, exact_reference, checkpoint, rule_overlay, lesson_overlay, or working_memory
  • reference_id: stable exact-reference ID when available
  • referenceable: whether the source can be dereferenced later
  • origin_entry_type: typed LTM source such as fact, lesson, rule, archive_block, or checkpoint
/v2/control/context also reports context-pressure telemetry:
  • requested token budget
  • budget_used
  • budget_remaining
  • source counts by entry type
  • source counts by retrieval mode
  • evidence_candidates_considered
  • evidence_dropped_by_budget
  • exact_references_surfaced

Step-level outcome request shape

POST /v2/control/step_outcome records a per-step process reward signal, complementing the run-level /v2/control/outcome.
FieldTypeRequiredDescription
run_idstringyesSession/run identifier
step_idstringyesUnique step identifier within the run
step_namestringnoHuman-readable step label
outcomestringyesOne of success, failure, partial, neutral
signalfloatnoReward signal from -1.0 to 1.0
rationalestringnoWhy this outcome was assigned
directive_hintstringnoHindsight guidance for future runs
agent_idstringnoAgent that performed the step
user_idstringnoLogical user scope
metadata_jsonstringnoArbitrary JSON metadata
Response: { "step_outcome_id": "...", "accepted": true }. Use after each agentic step where you want dense reward signal. Then call reflect(include_step_outcomes=True) to produce step-attributed lessons.

Lane parameters

Lanes partition memory within a shared run for multi-agent isolation.
RouteFieldDescription
/v2/control/ingestlane (on each item)Tags ingested items with a named lane
/v2/control/querylane_filterRetrieves only entries tagged with the specified lane
/v2/control/contextlane_filterFilters context assembly by lane
/v2/control/agents/registershared_memory_lanesDeclares which lanes an agent participates in
Items without a lane are visible to all queries. Items with a lane are visible only when lane_filter matches or is empty.
lane (MAS memory isolation) is distinct from the core data-plane retrieval lane concept used in direct search routing. See Core Direct Lanes for the data-plane concept.

Step-wise reflection parameters

POST /v2/control/reflect now accepts additional fields for targeted reflection:
FieldTypeDescription
step_idstringScope reflection to a specific step
last_n_itemsint32Reflect only over the N most recent evidence items
include_step_outcomesboolInclude recorded step outcomes as reflection input
These compose with existing fields (run_id, checkpoint_id). Use last_n_items for incremental after-each-step reflection, and include_step_outcomes when step reward signals should influence lesson extraction.

Activity routes request shapes

POST /v2/control/activity

List chronological memory/activity entries.
FieldTypeRequiredDescription
run_idstringyesSession/run identifier
limitint32noMaximum entries to return (default 50)
offsetint32noPagination offset
entry_typesstring[]noFilter by entry type (e.g. ["fact", "lesson"])
agent_idstringnoFilter by agent
Response: { "entries": [...], "total": int, "has_more": bool }.

POST /v2/control/activity/export

Export activity as JSONL.
FieldTypeRequiredDescription
run_idstringyesSession/run identifier
formatstringnoExport format, default "jsonl"
entry_typesstring[]noFilter by entry type
Response: JSONL stream of activity entries.

POST /v2/control/activities/append

Append manual activity traces.
FieldTypeRequiredDescription
run_idstringyesSession/run identifier
entriesobject[]yesActivity entries to append
entries[].typestringyesEntry type (e.g. "observation", "action")
entries[].contentstringyesEntry content
agent_idstringnoAgent that produced the entries
Response: { "appended": int }.

Run management request shapes

POST /v2/control/runs/link

FieldTypeRequiredDescription
run_idstringyesParent run identifier
linked_run_idstringyesChild run to link
Response: { "linked": true }.

POST /v2/control/runs/unlink

FieldTypeRequiredDescription
run_idstringyesParent run identifier
linked_run_idstringyesChild run to unlink
Response: { "unlinked": true }.

POST /v2/control/delete_run

FieldTypeRequiredDescription
run_idstringyesRun to delete
Response: { "deleted": true }.

POST /v2/control/context/snapshot

FieldTypeRequiredDescription
run_idstringyesSession/run identifier
include_working_memoryboolnoInclude working memory state
include_goalsboolnoInclude active goals
Response: { "snapshot": { "working_memory": {...}, "attention": {...}, "goals": [...] } }.

POST /v2/control/ingest/stats

FieldTypeRequiredDescription
run_idstringyesSession/run identifier
Response: { "total_ingested": int, "by_type": {...}, "last_ingest_at": string }.

GET /v2/control/ingest/jobs/:job_id

No request body. Returns:
FieldTypeDescription
job_idstringJob identifier
statusstringOne of pending, processing, completed, failed
items_totalintTotal items in the job
items_processedintItems processed so far
created_atstringISO timestamp
completed_atstringISO timestamp (if completed)

Next steps