← All features

Agent Memory

One auditable memory store for every agent you authorize

gno remember stores one fact as a markdown file in a collection you mark memoryManaged; gno recall returns the current facts that match a query, under a budget, with gno:// cites and a receipt. The same contract runs on four surfaces: the CLI, the MCP tools gno_recall and gno_remember, the REST endpoints under /api/memory, and the TypeScript SDK. Every call names its scopes, every replacement keeps its predecessor on disk, and every fact carries who wrote it, in which session, from what source. Memory files are ordinary documents to search, egress policy, and sync, and the SQLite index stays derived and disposable.

Use cases
Decisions, preferences, and standing facts that Claude Code, Codex, Hermes Agent, and OpenClaw look up in the same store
Project scopes that several agents share by agreeing on a scope name, next to private scopes they keep to themselves
Facts that change over time, replaced with a hash-checked supersede and a readable chain on disk
Memory files reviewed, hand-edited, and versioned like any other markdown in your vault

What it gives you

  • Three write paths, one taxonomy: edit an existing note in its file, gno capture creates a genuinely new document with provenance, gno remember upserts one fact of at most 4096 bytes; longer text is refused and pointed at capture
  • Explicit scopes on every call, 1 to 8 per call, with no implicit global scope: an unscoped remember or recall fails with MEMORY_SCOPES_REQUIRED on every surface, and shared visibility is a scope name several callers agree on
  • Supersession instead of edits: a new fact names its predecessor by gno:// URI and content hash, GNO checks both under the shared write lease, and two writers racing to replace the same fact get one successor and one MEMORY_SUPERSEDE_CONFLICT
  • Budgeted, cited recall: at most 8 facts under 512 estimated tokens by default, current facts only, each with its gno:// URI, content hash, scopes, caller, session, and egress lineage
  • Context fence: every recall carries a content-free receipt, and a remember that replays a receipted span or declares a gno:// origin is rejected with MEMORY_FENCED_REPLAY or MEMORY_FENCED_DERIVED
  • The fence is exact-span plus declared origin. A paraphrase presented without its receipt is stored as an original fact; treat receipts as part of the agent's contract, not as a security boundary
  • Identity bound to the connection: MCP takes the caller from the initialize handshake and the session from the transport, so a client cannot claim to be another one
  • The caller decides: remember without a decision returns likely matches and writes nothing; --add and --supersede are the only ways a fact lands, and no model adjudicates a match
  • Retrievable when the call returns: the write and the lexical index sync complete under the shared write lease, and the recall receipt shows retrieval mode hybrid or lexical with the reason
  • Nothing is deleted by the contract: superseded facts stay on disk and in ordinary search, and recall excludes them inside the query
  • Harness adapters without a second write path: the gno agents protocol block adds the recall rung and the remember decision to the ladder, the Hermes Agent provider maps prefetch and a gno_remember tool onto the contract, and the OpenClaw plugin retrieves over the workspace memory files
  • Deliberate exclusions: no automatic capture, no model in the write path, no consolidation jobs, no delete or forget verb, no memory screen in the Web UI, and no cross-machine coordination beyond your own vault sync

Try it yourself

Representative commands and entry points. Full reference lives in the documentation.

gno remember "Prod deploys from main only" --scope project:gno
gno remember "Prod deploys from main only" --scope project:gno --add
gno remember "Prod deploys from release/*" --scope project:gno --supersede gno://memory/facts/2026-09-01/mem-5b1d.md --predecessor-hash 3f9c
gno recall "deploy branch" --scope project:gno --max-facts 3 --json
gno remember "..." --scope project:gno --receipt recall.json
gno mcp --tool-profile core --enable-write

Keep reading

Related features and docs.