Research Registry is a local-first research memory for humans and agents. It stores a research question, the evidence collected for it, the claims supported by that evidence, and a reusable guidance report on top.
This repo is currently a developer preview aimed at:
- a single developer running on
localhost - a small team sharing one self-hosted registry
- Codex and MCP workflows that want durable, source-backed research memory
The future public/shared network is not the current product target. The current target is usable local-first software with a clear path to self-hosted shared org deployments.
v0.1.0 is a GitHub-first open-source preview.
Release-critical supported paths:
- managed localhost runtime for multiple local Codex instances
- shared self-hosted Compose deployment for internal teams
Supported-but-secondary:
- repo-local developer process via
research-registry-web - stdio MCP via
research-registry-mcp
Example-only or explicitly unsupported in this preview:
- Kubernetes as a production-hardened deployment target
- direct public-internet exposure without your own network controls
- PyPI as the primary install path
- published hosted multi-tenant service
Managed localhost preview support matrix:
- Linux: primary target and covered in CI smoke jobs
- macOS: intended supported preview target for localhost use, but not yet CI-covered
- Windows: not yet claimed for this preview
Canonical records:
QuestionResearchSessionSourceExcerptClaimReport
Reports are guidance-first. They carry:
- current guidance
- evidence that supports it right now
- gaps
- needs
- wants
- linked follow-up questions
Legacy aliases such as annotation and finding still exist for compatibility, but they are not the canonical model for new integrations.
If you only want the fastest path that should work on a fresh machine, start with Getting Started.
make upVerify that the local runtime is healthy:
make status
curl http://127.0.0.1:8010/readyz
curl http://127.0.0.1:8010/openapi.jsonWhat success looks like:
make statusprintsconfigured=trueandready=trueGET /readyzreturns{"status":"ready"}GET /openapi.jsonreturns the Research Registry OpenAPI document~/.codex/config.tomlcontains a managedresearchRegistryMCP block~/.codex/skills/containsresearch-captureandresearch-memory-retrieval
Then open http://127.0.0.1:8010 in a browser. You should see published reports and claims instead of an empty board.
What make up does:
- creates
.venv/if needed - installs the project in editable mode
- creates managed config under
~/.config/research-registry/ - creates managed data under
~/.local/share/research-registry/ - starts the managed localhost Postgres plus app stack on
127.0.0.1:8010 - patches
~/.codex/config.tomlwith a managedresearchRegistryMCP block - installs the
research-captureandresearch-memory-retrievalskill symlinks into~/.codex/skills/ - seeds demo content by default so the UI is not empty
If you want the stack without demo content:
make up SEED_DEMO=0Manual equivalent:
python3 -m venv .venv
. .venv/bin/activate
pip install -e ".[dev]"
research-registry-local-install
research-registry-seed
research-registry-seed-memory-retrievalThis installs a shared localhost runtime for your local Codex instances:
- Docker Compose on
127.0.0.1:8010 - Postgres for durable local storage
- a shared local API key
- a managed MCP entry in
~/.codex/config.tomlpointing athttp://127.0.0.1:8010/mcp/ - symlinks for the
research-captureandresearch-memory-retrievalskills in~/.codex/skills
Local default behavior:
- localhost HTTP backend
- Postgres storage inside Compose
- one shared local runtime for multiple Codex instances
- backend status resolves to localhost unless you explicitly point clients elsewhere
Status and stop commands:
make status
make token
make down
make uninstallTo remove the managed localhost install and delete its local config/data directories plus Docker volumes:
make purge-localFor a repo-local developer-only run without Docker, research-registry-web still works and defaults to local SQLite.
Optional demo data:
make upFirst real workflow:
- Ask Codex to research something source-backed.
- Let the implicit capture workflow store the question, excerpts, claims, and report privately.
- Open
/admin/loginand review what was stored. - Publish the reusable reports or claims that should become visible on the public board.
Use Postgres and point clients at a shared server:
Canonical server/runtime settings:
RESEARCH_REGISTRY_DATABASE_URLRESEARCH_REGISTRY_ADMIN_TOKENRESEARCH_REGISTRY_SESSION_SECRETRESEARCH_REGISTRY_HOSTRESEARCH_REGISTRY_PORTRESEARCH_REGISTRY_PUBLIC_BASE_URLRESEARCH_REGISTRY_CAPTURE_QUEUE_PATHRESEARCH_REGISTRY_BACKEND_PROFILE_PATH
Client/backend-selection settings:
RESEARCH_REGISTRY_BACKEND_URLRESEARCH_REGISTRY_BACKEND_PROFILERESEARCH_REGISTRY_API_KEYRESEARCH_REGISTRY_ORGRESEARCH_REGISTRY_DEFAULT_BACKEND_URL
Compatibility fallback:
RESEARCH_REGISTRY_DB_PATHremains supported for local SQLite setups. IfRESEARCH_REGISTRY_DATABASE_URLis unset, the app derives a local SQLite URL from that path.
Environment examples:
- repo root
.env.exampleis for repo-local or container-local development and defaults to SQLite deploy/.env.exampleis for the shared Compose preview and defaults to Postgres plus bind/public URL settings
Backend selection precedence for clients:
RESEARCH_REGISTRY_BACKEND_URLRESEARCH_REGISTRY_BACKEND_PROFILE- org profile matched by
RESEARCH_REGISTRY_ORG RESEARCH_REGISTRY_DEFAULT_BACKEND_URL- localhost default
Health endpoints:
GET /healthzfor process livenessGET /readyzfor storage readiness
Admin bootstrap endpoints:
POST /api/admin/organizationsPOST /api/admin/api-keys
These are guarded by the admin token and are intended for self-hosted setup workflows.
Developer preview API docs:
- Swagger UI:
http://127.0.0.1:8010/docs - OpenAPI JSON:
http://127.0.0.1:8010/openapi.json - step-by-step curl flow: docs/api-quickstart.md
Public reads:
GET /api/searchGET /api/backend/statusGET /api/questions/{id}GET /api/sessions/{id}GET /api/sources/{id}GET /api/excerpts/{id}GET /api/claims/{id}GET /api/reports/{id}
Authenticated writes:
POST /api/questionsPOST /api/questions/{id}/statusPOST /api/sessionsPOST /api/sourcesPOST /api/excerptsPOST /api/claimsPOST /api/reportsPOST /api/publish
Admin moderation:
POST /api/reviewPOST /api/index-state
Compatibility aliases:
/api/annotations/{id}maps to excerpts/api/findings/{id}maps to claims
The web app and API are the primary product surface. MCP and Codex skills sit on top of that:
- HTTP MCP endpoint:
http://127.0.0.1:8010/mcp/aftermake uporresearch-registry-local-install - stdio MCP server:
research-registry-mcp - implicit capture skill:
skills/research-capture - memory/retrieval skill:
skills/research-memory-retrieval
- Getting started
- API quickstart
- Architecture
- Local deployment
- Shared Compose deployment
- Kubernetes deployment
- Operations
- Implicit research capture
- Memory/retrieval skill
- Research pass suite
- Support policy
Container assets:
Dockerfiledeploy/compose.yamldeploy/kubernetes/
Migrate storage explicitly:
make up SEED_DEMO=0
./.venv/bin/research-registry-migrateRun tests:
make testRun the preview release gate:
make preview-checkRun the grounded pass runner:
./.venv/bin/research-registry-pass-runner --db-path /tmp/research-pass-runner.sqlite3 --reset --rounds 2- Localhost is the default.
- Shared org mode is self-hosted, not multi-tenant cloud.
- Shared deployments are supported for internal-only exposure behind normal network controls.
- API keys plus admin token are the supported auth model for this preview.
- Postgres is the intended backend for shared deployments.