{"slug": "show-hn-typed-agent-memory-with-corrections-and-history", "title": "Show HN: Typed agent memory with corrections and history", "summary": "Polign released Recall, a shared typed memory system that lets AI agents store, correct, and read back facts, preferences, and project context across processes and sessions. Recall is available through Go, Python, and MCP integrations, uses Polign v0.6.4 or later as its storage backend, and ships with a Claude Code plugin for memory across coding sessions. The system preserves earlier statements when a value is corrected, so agents can read current values, inspect history, or query what was known at an earlier time, and forgetting records a withdrawal rather than permanently deleting the record.", "body_md": "**Shared, typed memory for agents.**\n\nRecall lets agents share facts, preferences, and project context across processes and sessions. One agent can record a preference, another can update it, and both can read the current value and its history.\n\nUse it through **Go**, **Python**, or **MCP**, with\n[Polign](https://github.com/Polign/polign) as the storage backend. Go applications\ncan also supply their own backend.\n\n| Integration | Get started | \n|---|---|\n| **Python** | Follow the quickstart below, then see the [client guide](https://github.com/Polign/recall/blob/main/python/README.md) . | \n| **Go** | Run `go get github.com/Polign/recall` and follow the[Go client guide](https://github.com/Polign/recall/blob/main/docs/reference.md#context-aware-client) . | \n| **MCP** | [Connect an agent](https://github.com/Polign/recall/blob/main/docs/mcp.md) to tools for remembering, recalling, and forgetting facts. | \n\nThe [Claude Code plugin](https://github.com/Polign/polign/tree/main/plugins/recall)\nis a ready-made MCP integration for memory across coding sessions.\n\nYou'll need Python 3.10+ and [Polign v0.6.4 or later](https://github.com/Polign/polign#install),\nwith both `polign` and `polign-server` on your `PATH`. The Python client launches\na local `polign mcp` process that connects to your database. This example needs\nno model or embedding API key.\n\nStart the database in a terminal and leave it running:\n\n```\npolign-server -store \"fs:$HOME/.local/share/recall/data\"\n```\n\nIn another terminal, from a checkout of this repository, install the Python client and select a collection for the example:\n\n```\npython3 -m venv .venv\nsource .venv/bin/activate\npython -m pip install ./python\nexport POLIGN_URL=http://127.0.0.1:23000\nexport POLIGN_COLLECTION=recall_demo\n```\n\nOne process saves an editor preference and then changes it:\n\n``` python\npython - <<'PY'\nfrom polign_recall import Client\n\nwith Client() as memory:\n    memory.remember(\"user\", \"prefers_editor\", \"vim\")\n    memory.remember(\"user\", \"prefers_editor\", \"neovim\")\nPY\n```\n\nRun a second process in the same terminal. It reads the saved preference and the earlier statements:\n\n``` python\npython - <<'PY'\nfrom polign_recall import Client\n\nwith Client() as memory:\n    current = memory.recall(\"user\", \"prefers_editor\")\n    print(current[0].value)  # neovim\n    print([event.value for event in memory.history(\"user\", \"prefers_editor\")])\n    # On a fresh collection: ['vim', 'neovim']\nPY\n```\n\nEach process closes its client when it exits; the memories remain in the\ndatabase. Agents on other machines can use the same server URL and collection,\nwith `POLIGN_API_KEY` set when authentication is required.\n\nFor examples covering historical reads and forgetting, see the\n[Python session example](https://github.com/Polign/recall/blob/main/examples/python/sessions.py) or\n[Go session example](https://github.com/Polign/recall/blob/main/examples/sessions).\n\nA memory has a **subject**, a **predicate**, and a **typed value**:\n\n| Subject | Predicate | Value | \n|---|---|---|\n| `user` | `prefers_editor` | `neovim` | \n| `recall-demo` | `prefers_test_framework` | `pytest` | \n| `recall-demo` | `uses_technology` | `Go` | \n\nThe registry defines which predicates an application accepts, their value types,\nand whether they hold one value or several. Recall includes 15 predicates for\npreferences, identity, and project facts. You can\n[extend the registry](https://github.com/Polign/recall/blob/main/docs/reference.md#the-registry) for your application.\n\nFor a single-valued predicate such as `prefers_editor`, a new assertion replaces\nthe current value. A multi-valued predicate such as `uses_technology` can hold\nboth Python and Go. Corrections preserve earlier statements, so you can read\ncurrent values, inspect their history, or query what was known at an earlier time.\n\nForgetting records a withdrawal and removes the affected fact from current\nanswers. **It does not permanently delete the record.**\n\nAn agent can also [propose facts from text](https://github.com/Polign/recall/blob/main/docs/reference.md#free-text-without-a-second-model).\nRecall validates those proposals against the registry before writing them.\n\nRecall provides memory rules, validation, and history; the backend provides persistence and access to the data. Agents share memory by using the same backend, collection, and namespace, with compatible Recall versions and memory definitions. Search also requires compatible embedding methods.\n\nConcurrent reads and writes follow the backend's consistency guarantees. Recall\ndoes not add transaction isolation or replication. Go applications can implement\nthe `Put`, `List`, and `Search` [backend contract](https://github.com/Polign/recall/blob/main/docs/reference.md#complete-histories)\nto use another storage system.\n\nThe Go library has no external module dependencies. Its built-in lexical\nembedder supports word-overlap search; applications can supply a model-based\nembedder for semantic search. See the [embedding guide](https://github.com/Polign/recall/blob/main/docs/reference.md#embeddings).\n\n| Path | Contents | \n|---|---|\n| [`recall.go`](https://github.com/Polign/recall/blob/main/recall.go) ,[` doc.go`](https://github.com/Polign/recall/blob/main/doc.go) | Public Go API at `github.com/Polign/recall` | \n| [`internal/engine/`](https://github.com/Polign/recall/blob/main/internal/engine) | Memory implementation and unit tests | \n| [`polign/`](https://github.com/Polign/recall/blob/main/polign) | Go backend adapter | \n| [`python/`](https://github.com/Polign/recall/blob/main/python) | Python package and tests | \n| [`cmd/`](https://github.com/Polign/recall/blob/main/cmd) | Command-line tools, including `recall-audit` | \n| [`examples/`](https://github.com/Polign/recall/blob/main/examples) | Runnable Go and Python examples | \n| [`docs/`](https://github.com/Polign/recall/blob/main/docs) | Guides and API reference | \n| [`testdata/`](https://github.com/Polign/recall/blob/main/testdata) | Shared audit fixtures | \n\nSee the [development guide](https://github.com/Polign/recall/blob/main/docs/development.md) for the implementation map and\ntest commands.\n\n[Developer reference](https://github.com/Polign/recall/blob/main/docs/reference.md) ·\n[Caching memory reads](https://github.com/Polign/recall/blob/main/docs/materialization.md) ·\n[Exporting and replaying history](https://github.com/Polign/recall/blob/main/docs/audit.md)", "url": "https://wpnews.pro/news/show-hn-typed-agent-memory-with-corrections-and-history", "canonical_source": "https://github.com/Polign/recall", "published_at": "2026-09-14 18:38:31+00:00", "updated_at": "2026-09-14 21:37:42.667778+00:00", "lang": "en", "topics": ["ai-agents", "ai-tools", "developer-tools", "ai-products"], "entities": ["Polign", "Recall", "Claude Code", "Go", "Python", "MCP"], "alternates": {"html": "https://wpnews.pro/news/show-hn-typed-agent-memory-with-corrections-and-history", "markdown": "https://wpnews.pro/news/show-hn-typed-agent-memory-with-corrections-and-history.md", "text": "https://wpnews.pro/news/show-hn-typed-agent-memory-with-corrections-and-history.txt", "jsonld": "https://wpnews.pro/news/show-hn-typed-agent-memory-with-corrections-and-history.jsonld"}}