Intramedial is in restricted beta. At sign up or sign in, you have to provide the beta tester password you received or request one at preview@intramedial.com. Thank you.
Loading…
portmind.memoryModule 51
Plane module
Agent memory snapshots
Inspect what an agent remembers and take a signed, Merkle-rooted snapshot of its memory, with a versioned, workspace-scoped store.
portmind.memory reads and writes an agent-scoped memory store, and snapshot roots its entries in a Merkle tree and signs the root as a memory-attestation with the region's ledger-bundle key. The gateway reaches the store through a service binding in every region.
Agents act when the plane says yes, and the record says why.
Put admission in front of your MCP servers, repositories, SaaS tools and cloud accounts. Every agent gets a lease or a reason – and you keep the lever to stop any of them.
The gateway forwards /api/v1/portmind/* to the Portmind runtime in each region. Memory is scoped to the calling workspace and stored in that region's workspace database.
Record
The record
What gets recorded
agentRef
The agent whose memory the entry belongs to; required on every read and write.
key
The memory entry's own key, distinct from the agent it belongs to.
entry
One memory entry, returned by the single-key read.
Every live entry for an agent, returned by the no-key list read.
version
Incremented on each upsert to the same key, so a write never silently loses a prior value.
merkleRoot
The root snapshot computes over the agent's current memory at that moment.
Mechanism
Step by step
How it works
An entry is written
POST /api/v1/portmind/memory upserts one entry for an agentRef and a key, versioning it on conflict rather than overwriting silently.
One entry is read by key
GET /api/v1/portmind/memory/<key> with agentRef returns that one entry as entry, or a tombstoned result if it was deleted.
The whole memory lists
GET /api/v1/portmind/memory with agentRef and an optional limit returns every live entry for that agent as entries.
A snapshot roots and signs the memory
POST /api/v1/portmind/snapshot builds a Merkle root over the sorted {key, contentSha256} leaves of an agent's current memory and returns it as a signed memory-attestation.
Try it
Live demo
Run it from this page
GET/api/v1/portmind/memory/billing-agent
// No body: this is a GET. Press Run.
This module's calls change real state or reach outside services, so the shared demo does not run them. Sign in to run it in your own workspace. portmind.memory docs
Responses
This module's calls change real state or reach outside services, so the shared demo does not run them. Sign in to run it in your own workspace.
Code
Live example
A real request
A request in the shape the API accepts, and an example response in the shape the module returns.
GET/api/v1/portmind/memory/billing-agentAuthorization: Bearer av_workspace_••••→ 200 { entry: { agentRef, key, value, contentSha256, tags, version, createdAt, updatedAt } } for one key (add ?agentRef=); 404 if no live entry. The no-key list route returns { entries }
A signed memory attestation shows exactly what an agent's memory held at that moment, not what it holds now.
Correcting a stale memory entry
An operator removes or updates one key in an agent's memory rather than clearing its whole store, since entries are addressed and versioned individually.
Verifying a memory export offline
The attestation is signed with the same per-region key as ledger bundles, so intramedial-verify checks it against /.well-known/ledger-bundles-keys.json with no call back to Intramedial.
The dashboard browser against real data
The memory browser console reads from this exact client with no demo-data fallback, so what it shows is what the store actually holds, nothing staged.
When to use something else
Calls without a workspace context. Every route answers 401 unless the gateway has resolved a workspace.
Storing values in the attestation. It carries each entry's key and content hash only; the values stay in the store.
Treating { entries } as the shape of a single-key read. That read returns entry, singular.
Evidence
Guarantees
What it does, and what it does not
A module is a strong claim about a narrow thing. Rely on it for exactly what it is.
It does
The store code, its upsert-with-versioning logic and its Merkle snapshot computation are real, tested code, not a design document alone.
A missing key is a clean 404 and a missing field a clean 400, not a silent failure.
A snapshot's Merkle root is computed over the agent's own sorted entries at that moment, not a cached or stale copy.
It does not
That a snapshot exists when signing is unavailable. With no signing key configured in the region, snapshot answers 503 signing_unavailable and returns nothing unsigned.
That memory crosses regions. Each region's store is separate.
That an exported value is the one attested. Re-hash each value and compare it with its contentSha256 in the attestation.
Details
Build notes
Before you build
A dedicated worker
runtime/portmind is a Cloudflare Worker with its own store, tests and dashboard client, reached only through the gateway's service binding.
No MCP or ACP dispatch wiring
Portmind is not part of the /api/v1/acp/* dispatch system and has no coordination.* action id; it is its own standalone Worker, reached only through the gateway binding described above.
The key is not the agent
The single-key path's URL segment names a memory key, not an agent id; the agent is always given separately as agentRef.
Limits and metering
Memory entries are capped in size; an oversized body is 413.
The single-key read returns one entry; only the no-key list read returns entries.
No MCP or contract action id exists for any Portmind route.
Access
API & MCP
REST and MCP
Authenticate with a workspace API key as a Bearer token. The base URL is https://api.intramedial.com.
REST endpoints
GET/api/v1/portmind/memoryList an agent's live memory entries.
GET/api/v1/portmind/memory/:keyRead one memory entry by key.
POST/api/v1/portmind/memoryWrite or version one memory entry.
MCP actions
This module has no MCP action. Call it over REST from any agent or program.