The full upstream README, mirrored here for reference. Install config, tool schemas, adoption signals, and an original overview live on the Provena Agent Memory listing page.
Evidence-backed persistent memory for AI agents.
Know what an agent remembers, where it came from, and why it was retrieved.
Provena gives Codex, Claude Code, Gemini CLI, custom agents, and other MCP clients a shared long-term memory layer with explicit provenance. It stores source events separately from structured claims, links every claim to immutable evidence, records review and retrieval history, and keeps source authority separate from semantic relevance.
The result is agent context that can be inspected, challenged, scoped, and explained instead of an opaque collection of vector matches.
See evidence-backed agent memory in action.
A one-minute walkthrough of setup, cross-session recall, and the Provena operator console.
https://github.com/user-attachments/assets/37fe219c-b678-4c6d-811d-bfdd37552628
Try Provena → · See how it works · Contribute
Provena is looking for early contributors interested in Python, TypeScript, MCP, PostgreSQL, agent security, technical writing, and developer tooling.
Start with the open good first issue list. Each beginner task includes its expected skills, estimated effort, likely files, acceptance criteria, and verification commands. Comment on an issue before starting so contributors do not duplicate work.
Documentation, tests, accessibility improvements, reproducible bug reports, and focused code changes are all useful contributions.
Provena is a memory service and integration harness for AI-assisted development workflows. It sits between an agent host and durable storage through REST, MCP, or lifecycle hooks.
The harness is responsible for:
Provena does not execute an agent's code or tasks. Its role in the execution context is to make memory capture and context assembly traceable. Retrieval records improve reproducibility by showing which stored claims were supplied to an agent, but Provena does not currently replay a model run or prove that a retrieved claim influenced a later action.
| Record | Meaning |
|---|---|
| Event | Immutable source material, such as a user statement, assistant inference, hypothesis, or tool observation. |
| Claim | A structured proposition: subject, predicate, JSON value, validity interval, and review state. |
| Evidence | An immutable link from a claim to the event that supports it. |
| Memory action | An append-only status transition or review decision with actor, reason, and version. |
| Claim relationship | A typed link such as supports, contradicts, supersedes, derived_from, or related_to. |
| Retrieval event | An audit record of a query and the exact claims returned to an agent. |
| Scope | An exact organization, project, or branch boundary for stored and retrieved memory. |
Claims can be candidates, active, verified, conflicted, superseded, quarantined, expired, ephemeral, or deleted. Changing state never erases the claim's source evidence.
Agent memory can be relevant and still be wrong, stale, speculative, or malicious. A vector result alone cannot answer who asserted a fact, what the original source said, whether a human reviewed it, or which execution context received it.
Provena preserves those distinctions:
memory_explain follows a claim back to its source event, credential, extraction run, relationships, status history, and recorded retrievals.PostgreSQL is the authoritative system of record. pgvector embeddings are derived indexes; they do not replace evidence or determine authority.
A typical write and retrieval flow is:
Model output never raises source authority or activates a claim. Candidate claims may be returned as clearly marked provisional context until a human promotes, quarantines, or deletes them.
Install the published connector with pipx, which manages Provena in its own environment and exposes the command globally. You do not need to create or activate a virtual environment. Choose the agent host you use:
If pipx is not installed, follow the official pipx installation instructions. A regular pip install remains supported when you already have a persistent Python environment.
This prepares the version-matched Compose deployment, preserves an existing database and .env, starts PostgreSQL and local Ollama models, bootstraps separate agent and reviewer credentials, installs MCP and lifecycle hooks for the selected host, and starts the operator console. The command prints the scope-specific console URL.
Quickstart uses a digest-pinned, third-party CPU-only Ollama image. Its Linux/amd64 image download is about 32 MB; the default extraction and embedding models still download about 1.26 GB. This setup does not use GPU acceleration. See ADR 0022 for the image choice and its trust tradeoff.
After this explicit setup, ordinary prompts and final responses are captured automatically and relevant candidate or reviewed claims are supplied to later turns. Restart the selected host and review Provena under /hooks and /mcp. pip install alone never edits an agent's configuration or begins capture. See ADR 0020 and ADR 0021.
Published releases provide prebuilt API and console images. Download the three deployment files from the matching GitHub release, then create local configuration:
Generate separate values for POSTGRES_PASSWORD and BOOTSTRAP_TOKEN, place them in .env, and start core mode:
Core mode supports explicit memories and review without downloading a model. To enable local automatic extraction and semantic retrieval, add the Ollama override:
Save the one-time credentials printed by provena init. Add the human key and scope ID to .env before starting the optional console profile. See deploy/README.md for upgrades and backups.
For local development:
curlFor the containerized setup, only Docker Engine, Docker Compose, and curl are required.
Install the Python service and its MCP and test dependencies:
Set a private BOOTSTRAP_TOKEN in .env, then start PostgreSQL and Ollama and install the default local models:
Migrate the database and start the API:
The API is now available at http://127.0.0.1:8000; interactive OpenAPI documentation is at http://127.0.0.1:8000/docs. Verify API and database readiness with:
In a second Bash terminal, load the same configuration and create a local organization, project scope, agent credential, and human review credential:
The bootstrap credentials are returned once and exported only in the current shell. Start the operator console with the human credential:
Open http://127.0.0.1:3000/overview?scope=$PROVENA_SCOPE_ID.
Back up the existing database before the first restart with this Compose file, then restore it into the new named volume:
Copy the environment template and replace BOOTSTRAP_TOKEN with a private value:
The first start downloads the configured Ollama extraction and embedding models. Follow progress and verify the API:
Press Ctrl+C after the services are ready; the containers continue running in the background.
Create the initial workspace from inside the API container:
Then start the console profile with the issued human credential and project scope:
Open:
http://127.0.0.1:8000/docshttp://127.0.0.1:3000/overview?scope=$PROVENA_SCOPE_IDStop the stack without deleting memory:
PostgreSQL and Ollama use named volumes. Add docker compose --profile console down --volumes only when you intentionally want to destroy the local database and downloaded models.
For an existing Provena service, install the connector as a managed command and configure MCP plus automatic capture and retrieval using the agent credential and one exact scope. Replace codex with claude or gemini for that host:
Restart the selected host and review the installed integration under /hooks and /mcp. Use provena connect <host> without --install to print configuration without changing the host. Use generic to print standard MCP JSON for another client. The printed MCP command uses:
After adding the configuration, verify the same credential and scope independently:
The MCP adapter exposes:
memory_context and memory_search for attributed retrieval;memory_record_event and memory_capture_turn for source capture;memory_remember and memory_propose_claim for evidence-backed candidate claims; andmemory_explain for provenance, review, conflict, and retrieval history.Agent keys can create events and candidate claims. Only human credentials can review claim status or resolve conflicts. Host sessions provide provenance labels; they do not create separate memory stores. See ADR 0014 for the model-agnostic integration boundary.
| Variable | Default | Purpose |
|---|---|---|
DATABASE_URL | postgresql+psycopg://provena:provena_dev@localhost:5437/provena | SQLAlchemy connection for the authoritative PostgreSQL store. |
BOOTSTRAP_TOKEN | empty | Local trust anchor for creating organizations and issuing, rotating, or revoking credentials. Required for bootstrap operations. |
MEMORY_PROVIDER | ollama | Memory intelligence provider: ollama, openai, or none. |
OLLAMA_BASE_URL | http://127.0.0.1:11434 | Ollama HTTP endpoint. Compose overrides this with the internal service address. |
EXTRACTION_MODEL | qwen2.5:1.5b | Fact extraction model. Provider-prefixed model names are stored as provenance. |
EMBEDDING_MODEL | nomic-embed-text | Embedding model used for semantic retrieval. |
OPENAI_API_KEY | empty | Required only when MEMORY_PROVIDER=openai. |
| Variable | Purpose |
|---|---|
PROVENA_API_URL | Base URL of the Provena REST API. |
PROVENA_API_KEY | Server-side console or agent credential. Never expose it as a NEXT_PUBLIC_ variable. |
PROVENA_SCOPE_ID | Exact project or branch scope used for capture and retrieval. |
PROVENA_AGENT_HOST | Optional host label used by portable lifecycle hooks for session provenance. |
Use a human credential for the local console if you need review and conflict actions. Use an agent credential for MCP and automatic capture. Do not give a conversational agent the human review key.
Start only the development dependencies:
Create and migrate the disposable integration-test database, then run the deterministic suite:
Validate migrations and the frontend production build:
Model-dependent behavior is isolated behind the memory intelligence interface. Deterministic tests use fake transports and do not require model calls.
Read the architecture guide for current guarantees and limits. Accepted decisions live in docs/adr/.
Provena currently uses exact-scope retrieval; branch inheritance and cross-scope promotion are not implemented. It records claim delivery but not whether an agent action was caused by that claim. Binary artifact storage, production identity federation, semantic duplicate resolution, automatic temporal resolution, and a general task execution sandbox are outside the current implementation.
Raw event payloads, claims, evidence, actions, extraction metadata, embeddings, and retrieval membership are stored in PostgreSQL. This keeps the provenance transaction atomic while broader artifact storage remains deferred.
Choose an open beginner task, comment that you are working on it, and keep the pull request focused on that issue. Preserve the evidence and tenant-boundary invariants, use Alembic for schema changes, add real PostgreSQL coverage for database guarantees, and record durable architecture decisions in docs/adr/.
See CONTRIBUTING.md for setup and verification commands, CODE_OF_CONDUCT.md for community expectations, SECURITY.md for private vulnerability reporting, and CHANGELOG.md for release history.