Know when the evidence behind AI knowledge has changed.

Moonwire tracks the evidence behind agent memories, decisions and artifacts, then invalidates downstream knowledge when the source changes.

Before / afterPropagation
RESOURCErefund_policy:v7VALID
ARTIFACTanswer:123STALE
PENDING ACTIONrefund:88BLOCKED
↑ refund_policy moved from v7 to v8 · downstream evidence requires revalidation

Problem

Knowledge outlives its evidence.

Agents turn database rows, policy files, API responses and SaaS records into answers, memories and actions. Those outputs persist after their sources change.

Moonwire makes evidence change an explicit, auditable systems event.

{
  "canonical_ref": "mw://acme/policy/refunds",
  "version": "v7",
  "content_hash": "sha256:…",
  "metadata": {
    "owner": "support-platform"
  }
}

No policy text is stored.

How it works

Lineage in. Invalidation out.

Moonwire records immutable evidence versions and explicit dependency edges. When evidence changes, one durable event walks the downstream graph once—even through cycles.

Source / evidencemw://acme/policy/refundsVALID
Versionv7 → v8CHANGED
Artifactanswer:123STALE
Artifactmemory:92STALE
Decision / actionrefund:88BLOCKED
transactional direct markdurable downstream propagation

30-second code example

Record the evidence you used.

Your application keeps the content. Moonwire receives references, versions, selectors and lineage.

example.pyPython 3.10+
from moonwire import Moonwire

with Moonwire(api_key=os.environ["MOONWIRE_API_KEY"]) as moonwire:
    with moonwire.execution() as run:
        run.evidence(
            ref="mw://acme/policy/refunds",
            version="v7",
            selector={"fields": ["refund_window_days"]},
        )
        result = my_agent(...)
        artifact = run.commit(
            type="answer",
            external_id="answer-123",
        )

status = moonwire.check(artifact.id)
if not status.safe_to_use:
    revalidate(result)

Deliberately narrow

Why this is not another vector database or RAG platform

LineageExplicit resource-version and artifact dependency edges
InvalidationDurable, idempotent downstream status propagation
Versions & hashesImmutable evidence history without requiring content
Safety statusVALID, STALE, REVALIDATE and BLOCKED
It does not retrieve content, create embeddings, answer questions or determine truth.

Self-hosting

One service. One database.

terminalDocker Compose
$ git clone https://github.com/pycarrot/moonwire
$ cd moonwire
$ docker compose up -d --build --wait

✓ postgres  healthy
✓ moonwire  healthy
Your applications
SDK · CLI · REST
HTTP API
Worker
PostgreSQL
state · outbox · audit

Security and privacy

Infrastructure that minimizes what it knows.

API authenticationBearer keys are protected with individually salted Argon2id hashes, with expiry, revocation and documented rotation.
Project isolationEvery resource, version, artifact, edge, event and job is scoped to an authenticated project.
Metadata minimizationStrict body limits and JSON objects keep storage explicit. Customer payloads are never logged by default.
Content stays with youStore references, versions and hashes. Keep policy text, customer records and agent output in your own systems.

Open source

Evidence changes. Your agents should know.

Apache-2.0 licensed infrastructure for systems that need an auditable answer to “is this artifact still safe to use?”