initialize → session/new → session/prompt.
There are two ways to get HyphaeDB memory into an ACP editor, and they solve different problems.
Path 1 — your ACP agent reaches HyphaeDB through MCP
This works today with the shipped MCP surface and needs nothing ACP-specific from us. Many ACP agents (claude-agent-acp and its class) can connect to MCP servers on your behalf. The editor passes an mcpServers list when it opens a session; the agent connects to each one and exposes its tools to the model. Point one of those entries at HyphaeDB and the agent gains all 11 memory tools.
store and recall. That is the right shape when you want memory to be automatic.
Path 2 — run HyphaeDB as an ACP memory agent (acp-stdio)
The acp-stdio mode makes the HyphaeDB binary itself an ACP agent. Your editor launches it like any other agent, and its “conversation” is a memory console.
acp-stdio binds no ports and writes only ACP frames to stdout — all logging goes to stderr, because anything else on stdout would corrupt the protocol stream.
It performs no inference
This is the part worth internalising before you use it:session/prompt is a command contract, not a model. There is no LLM in acp-stdio. A prompt is parsed, not interpreted, and the same prompt against the same memories always produces the same result.
That is why it can be trusted with a credential and pointed at your real memory store: nothing is inferred, generated, or guessed.
The grammar
/-command is treated as /recall <text>. That default matters: some editors intercept /-commands before the agent ever sees them, and plain text still performs the primary operation.
CellType is one of Decision, Constraint, Risk, Pattern, Lesson, Fact, Preference, Context, Task.
Examples:
/QUERY --layer l1 x works). Flag names are not: --LAYER is rejected rather than silently ignored, because a near-miss flag name means you expected behaviour that would not have been applied.
A mistyped command is reported in the conversation (error: unknown command "/recal"; try /help) and the turn ends normally — it is not a protocol error. A typo never silently becomes a search for the literal text you typed.
Results
Each match comes back as one message chunk:/store answers stored <id>. An empty search answers no results rather than saying nothing.
Sessions
session/new opens a HyphaeDB session scoped to the cwd your editor sends — the working directory becomes the project scope memories are filed under. session/load resumes one after a restart, so a session outlives the agent process. Sessions are per-credential: a session opened under one API key is unreachable from another, and a request for someone else’s session id is indistinguishable from a request for one that never existed.
What this agent will not do
These are deliberate, and they are why it is safe to point at a real database:- It never runs your
mcpServers. An ACP client may pass a list of MCP servers to connect to, and a stdio entry is a command line. Honouring one would hand any ACP client arbitrary command execution on your machine. The list is accepted and dropped. - It never touches your filesystem or terminal. ACP lets an agent ask the editor to read files, write files, or run terminals. This one issues none of those requests, whatever your client advertises.
- It declares only what it implements.
initializereportsloadSession: trueand every prompt capability asfalse— and images, audio and embedded file contents are genuinely rejected rather than quietly ignored, so a client is never told a capability exists that does not.