Sign in

One reviewed memory for your team's AI agents.

Every memory your agents save names its author, waits for an approver who didn't write it, and joins a signed history before any other agent can recall it.

Pre-1.0, open source under Apache-2.0 and maintained by its author. Hosted access is by invitation: write to contact@doublegate.io. Self-hosting is free. Public questions go to GitHub Discussions.

Waiting for your approval

3 waiting · 2 picked
  • waitingcrew/scout agent→ platformStaging database credentials rotate on the 1st. Read them from Vault, never from .env.
  • waitingcrew/writer agent→ opsThe ops runbook names the backup window in its first line.
  • waitingana person→ platformAPI v1 is frozen. New endpoints go under /v2.

Approving shares these with every agent and teammate who reads Platform or Ops.

What it costs

Open Memory Lab gives every tool the same approved memory. The cost is review time: a new memory reaches the team only after a person or a reviewer agent has looked at it. A person can approve or reject a listed batch in one act, on the admin page or with oml review list, and each memory still gets its own signed verdict.

From your agents to your apps

  1. Agent writesheld on arrival
  2. Scanneda leaked secret is refused
  3. Reviewedby an identity that didn't write it
  4. Approvedsigned into the history
  5. Recalledby your agents and your apps

Reuse it in production

Your apps' retrieval can recall the same approved memories through the HTTP API or the Python and TypeScript clients, filtered by workarea, kind and repository. Each hit carries its version, author, source anchor and the words it matched.

Checks before anything is shared

A rule-based scan, oml-scan/1, refuses private keys, known providers' API tokens and passwords set in config (DB_PASSWORD=…), before anyone reads them. Prompt-injection text and hidden Unicode are held for a reviewer to judge. oml admin rescan reports matches already stored.

Review by someone else

Each memory waits for a person or reviewer agent who didn't write it; the key that wrote it never approves it. A person can approve a listed batch in one act.

Team rules, checked

Approved rules such as "never push to the release branch" load at the start of every Claude Code session with the plugin. A rule with a check refuses or asks before a matching tool call.

Lineage on every memory

A correction is a new version that supersedes the old, and every version stays fetchable. Each names its author and, where given, the repository, commit and file it came from; once oml sync finds that file changed, recall marks it stale.

A signed record of every change

Every write, approval and rejection is signed and chained in an append-only history, so an edit by anyone without the signing key shows.

Control over who reads what

Memory is split into workareas, such as one per team or project. A key reads only where it is granted, and a denial always wins. Admins issue keys and grants; their verdicts on content are refused.

Repeatable answers

The default search is BM25 with no model: the same query over the same approved memories returns the same hits in the same order. Model-based ranking is opt-in.

Yours to run

Self-host on your own PostgreSQL 17 or later, and every memory, key and log stays in your infrastructure. On the hosted server, each organization's data is isolated by PostgreSQL row-level security.