v20260818
Adds memorylake conversation — the full conversation and message surface, and the first release to cover MemoryLake's conversational memory.
Conversations
memorylake conversation create --workspace ws-… --custom-id session-42 \
--project proj-… --actors actor-… [--name "Q3 Planning"] [--kind DIRECT|GROUP] [--metadata k=v ...]
memorylake conversation list --workspace ws-… [--page-size N] [--continuation-token TOKEN]
memorylake conversation get --workspace ws-… <ID> [--by-custom-id]
memorylake conversation cook-status --workspace ws-… <ID> [--by-custom-id]
memorylake conversation delete --workspace ws-… <ID>
memorylake conversation message append <CONVERSATION_ID> --actor actor-… --custom-id msg-42 \
(--text "hello" ... | --content-json '<blocks>' | --content-file blocks.json) \
[--parent <MESSAGE_ID>] [--timestamp ISO8601] [--metadata k=v ...] \
[--wait --workspace ws-… [--timeout 600]]
memorylake conversation message list <CONVERSATION_ID> [--page-size N] [--continuation-token TOKEN]conv is an alias for conversation, msg for message.
Things worth knowing
The message subcommands take no --workspace. Conversations are addressed under their workspace, their messages by conversation id alone — the CLI mirrors that split rather than smoothing it over. The one exception is --wait, which needs a workspace because the status it polls is workspace scoped.
Message content is a list of typed blocks. Each --text becomes one TEXT block; --content-json / --content-file carry the other five types (FILE, IMAGE, THINKING, TOOL_USE, TOOL_RESULT). Blocks are forwarded verbatim, so a block type this build predates still works.
--wait polls until the conversation's memory is built, backing off from 1s to 15s and giving up after --timeout seconds (default 600). Giving up undoes nothing: the message prints before the wait starts and processing carries on server-side. In practice one message finishes in ~9s and three in ~19s.
Appends are idempotent by --custom-id. Appends to one conversation are serialized server-side, so two at once leave one caller with a 409. Retrying with the same --custom-id returns the message created the first time instead of duplicating it.
conversation create requires --actors, ahead of a server-side change that will reject conversations created without participants. Today's server still accepts them, so this CLI is deliberately stricter than the API it talks to for now. Note that a conversation with no participants never produces any facts, so nothing useful is lost.
message append does not echo everything it stored. Its response leaves metadata, timestamp and actor_type null even when the request set them; the values are stored and message list reports them. Confirm a write by reading the listing, not the append output.
Which scope an extracted fact lands in is the server's decision. --project bounds what the conversation may read and write; it does not route facts. After a wait returns, look under both fact list --actors and fact list --projects.
Compatibility
No breaking changes for users of v20260810 — everything here is new surface. Existing auth, workspace, actor, project, library, agent, fact, and search commands are unchanged.
Install
Download the tarball for your platform below, verify it against its .sha256, and put memorylake on your PATH:
tar -xzf memorylake-v20260818-<target>.tar.gz
shasum -a 256 -c memorylake-v20260818-<target>.tar.gz.sha256Targets: aarch64-apple-darwin, x86_64-apple-darwin, x86_64-unknown-linux-gnu, aarch64-unknown-linux-gnu.
What's Changed
- feat: Add conversation commands and Conversations API bindings by @a1594834522-coder in #14
- fix: Require --actors on conversation create by @a1594834522-coder in #16
Full Changelog: v20260810...v20260818