memory-referee

Workflows

Memory hygiene and adjudication layer for OpenClaw agent workflows. Deduplicates entities, resolves naming conflicts, separates facts from goals from speculation, archives stale records, enforces consistent schemas, detects contradictions, and preserves provenance. Complements ontology and Proactive Agent.

Install

openclaw skills install memory-referee

memory-referee

ontology and Proactive Agent give agents the ability to remember more. memory-referee is designed to work alongside skills like ontology and Proactive Agent to give that memory a cleaner foundation to stand on — deduplicating entities, resolving naming conflicts, separating facts from goals from speculation, archiving stale records, and enforcing consistent schemas.


Built with Saturnday — AI-specific governance for AI-generated code.

While governing the build of memory-referee, Saturnday caught the kinds of mistakes AI coders routinely ship: .env patterns that could expose API keys, deduplication logic that could silently drop memory records, fake tests that passed while verifying almost nothing, and runtime validation gaps that would let malformed records corrupt downstream decisions.

That is the difference between AI-generated code and governed AI-generated code. www.saturnday.dev


When to Use

Invoke this skill whenever an agent's memory store may have accumulated:

  • Duplicate or near-duplicate records that should be collapsed into a single canonical entry
  • Naming conflicts where the same entity appears under multiple aliases
  • Mixed classification — facts, goals, and speculation interleaved without clear labelling
  • Stale records that have aged past their useful window and should be archived
  • Schema drift — records that no longer conform to the expected structure
  • Contradictions — two records that assert incompatible facts about the same entity

Use it after running ontology or Proactive Agent to clean up accumulated memory before passing it downstream.

Inputs

Each record in raw_records must be a JSON object with the following fields:

FieldTypeRequiredDescription
idstringyesUnique identifier for the record
kindstringyesOne of fact, goal, or speculation
entitystringyesThe entity this record is about
contentstringyesThe record's content
timestampstringyesISO 8601 date string
provenanceobjectyesSingle provenance object: { sourceId, sourceLabel, capturedAt }. The skill wraps this internally into an array to support merged records with multiple sources.
tagsstring[]noOptional tags

Outputs

FieldTypeDescription
reportstringMarkdown adjudication report summarising all decisions
resultobjectStructured JSON with deduplicated, classified, validated records

Usage

CLI

echo '[{"id":"r1","kind":"fact","entity":"Alice","content":"Alice prefers dark mode","timestamp":"2026-03-27T00:00:00Z","provenance":{"sourceId":"s1","sourceLabel":"pref-log","capturedAt":"2026-03-27T00:00:00Z"}}]' | node dist/index.js

Library

import { main } from 'memory-referee';

const records = [
  {
    id: 'r1',
    kind: 'fact',
    entity: 'Alice',
    content: 'Alice prefers dark mode',
    timestamp: '2026-03-27T00:00:00Z',
    provenance: { sourceId: 's1', sourceLabel: 'pref-log', capturedAt: '2026-03-27T00:00:00Z' }
  }
];

const { markdown, json, report } = main(JSON.stringify(records));

console.log(markdown);  // human-readable adjudication report
console.log(json);      // structured JSON output