DEV Community

Cover image for Chaos Cypher v0.6.0: Memory for Agents That Says Who Said It
Denis MacPherson for Chaos Cypher

Posted on Originally published at chaoscypher.com

Chaos Cypher v0.6.0: Memory for Agents That Says Who Said It

An agent that works with you for a week learns a lot, and almost all of it is gone the next time it starts. The usual fixes are a notes file it rereads or a vector store it searches, and neither can tell you who said a thing, when, or what it replaced.

Chaos Cypher v0.6.0 is the agent-memory release. It has three themes: memory for agents, retrieval that reads the question, and sources you can keep current. It also carries breaking changes for MCP clients, custom domain plugins and databases from before the core entity types, so if you run any of those, read the upgrade notes before you pull the image.

Memory for agents

Five new MCP tools let an agent hand Chaos Cypher a sentence or a note in plain words and get it back later as facts with where they came from:

  • remember stores the text as a source of type memory. It is kept whole and searchable at once, and its facts are extracted against the entities the graph already knows, so a later "Pierre" lands on the same Pierre node. A text that looks like a key or a password is refused and nothing is stored.
  • recall answers in the shape of the question — an entity card, a grouped list, a relation chain, or a digest — with every fact tagged [who DATE], [doc TITLE] or [pack NAME].
  • forget previews the matches first, then removes one memory and the facts only it stated, and leaves an audit row with the counts — never the text.
  • list_memories and digest show what is stored and what a window of time added, replaced and forgot.

A later memory on a single-valued relation (where someone lives) replaces the earlier fact and keeps it as history, and recall(as_of=…) shows the facts as they stood on a date.

Three things make this practical on a small local setup:

  • No embedding model required. With search.enable_vector_search: false, the CLI, the Python API and chaoscypher mcp make no embedding call; search answers with keyword results and every memory tool works.
  • Several agents, one database. One chaoscypher mcp -m write per agent can share a database on the same machine and a local disk. No write is lost; a write that cannot get the lock in 60 seconds answers one fixed "database is busy" line instead of hanging.
  • Nothing is dropped when linking is slow. remember stores the memory before it links it into the graph; if the model does not answer in time, the memory is kept as a note, says why, and links later.

chaoscypher mcp --profile memory serves only these five tools, which keeps a small model's tool list short, and chaoscypher memory export writes memories to a .ccx package another database can load. The Memory guide walks through it.

In plain terms: your agent can now keep what it learns between sessions, and every fact it recalls tells you who said it and when.

Retrieval that reads the question

Before chat builds its graph context, it now decides what kind of question it was asked: a lookup, an aggregate (everything sharing a relation with a named entity), a path (how two named things are connected) or a global question. An aggregate gets the entity's relationships grouped by label, each with the sentence that states it; a path gets the shortest relation chains between the two entities, each hop with its sentence. The default router uses rules, with no extra model call.

The graph is also handed to the model in a tighter shape (40 triples instead of 200 by default), an identity resolver merges one entity written under two names after every commit, and hybrid search gains a real keyword half: chunks now have a full-text index.

In plain terms: chat looks for the kind of evidence your question needs, and shows the model the sentences behind it rather than a wall of triples.

Sources you can keep current

Paste a documentation site's address and each of its pages is imported as its own source under one site, found through the site's llms.txt, its sitemaps, or a three-link-deep crawl that never leaves the address you gave. Check for updates re-fetches every page: unchanged pages are left alone, changed ones re-imported in place, new ones added, and a page the site no longer lists is marked Gone from site, never deleted. Pages you left out stay out. The crawler sends its own user agent and honours robots.txt. See Import a Docs Site.

In plain terms: a docs site becomes one source you can refresh, and your citations keep pointing at the page they came from.

Also in this release

  • Nothing that says something is deleted by a filter. Entities and relationships the extraction filters used to drop are now kept with a flag (unevidenced, low_plausibility) when they carry a description or evidence.
  • Pinned decoding by default: temperature 0 and seed 42 for chat and extraction, so re-imports and retries give the same output for the same input (only Ollama honours the seed). Regenerate still gives a different answer.
  • Security: the PyPI packages carry PEP 740 attestations, chat runs only the tools it offered the model, and a failed MCP tool call answers a fixed sentence and a code, never the error's own text.

Upgrading

Upgrade with the published image:

docker pull ghcr.io/chaoscypherinc/chaoscypher:0.6.0
Enter fullscreen mode Exit fullscreen mode

or pip install -U chaoscypher-cli. Before you swap the image, drain the queue (wait for /api/v1/queue/stats to report 0 pending). Eighteen migrations run on first start, six of them needs_confirmation. Read Breaking changes and Upgrade advisory in the v0.6.0 changelog first if you run custom domain plugins, MCP clients that match error strings, API clients that threshold the hybrid search score, or a database extracted before the core entity types — that last one is not migrated in place: export with v0.5.0, upgrade, then import.

New here? The ten-minute quickstart runs the whole stack locally with Ollama, and nothing leaves your machine unless you choose.

Top comments (0)