Open-source translational gap hunter for stalled or failed-but-promising drug programs.
Agents propose. Humans dispose. Not a molecule generator. Not clinical decision support.
Context of Use: GapForge assembles literature- and graph-backed gap hypotheses for scientific discussion. It is not for clinical care, prescribing, regulatory submission evidence, or synthesis planning.
Most clinical candidates fail (~85–90%). AI has accelerated molecule discovery but has not fixed translation. GapForge focuses on the harder question:
This program looked promising and stalled — what are the plausible scientific gaps, and what should we check next?
| We do | We do not |
|---|---|
| Evidence assembly across trials, literature, and target–disease graphs | Autonomous molecule design |
| Gap taxonomy (efficacy, biomarker, endpoint, PK, safety, …) | Patient treatment recommendations |
| Hypothesis cards with citations + adversarial critic | Auto-approving high-stakes claims |
| Mandatory human review (HITL) before “team conclusions” | Claiming regulatory-grade credibility without validation |
Design details: docs/GAPFORGE.md · HITL: docs/HUMAN_IN_THE_LOOP.md
| Tier | Capability | Policy |
|---|---|---|
| L0 | Read-only graph / program explore | Auto-allowed |
| L1 | Summaries with citations | Auto + spot check |
| L2 | Gap hypotheses / next experiments | HITL required |
| L3 | Chemistry generation, dosing, patient advice | Blocked (v1) |
Prerequisites: Docker Desktop, Python 3.11+, Node.js 22+.
git clone https://github.com/LordKay-sudo/gapforge.git
cd gapforge
cp .env.example .env
docker compose up --build| Service | URL |
|---|---|
| Web UI | http://localhost:8080 |
| GapForge programs | http://localhost:8080/programs |
| HITL review queue | http://localhost:8080/gaps/review |
| API docs | http://localhost:8000/docs |
| Neo4j Browser | http://localhost:7474 (neo4j / changeme) |
- Flurizan (tarenflurbil) — Alzheimer Phase 3 efficacy miss (educational historical framing)
- Astegolimab — COPD Phase 2b signal / Phase 3 miss (biomarker vs all-comers)
Workflow:
- Open GapForge → pick a program
- Inspect trials, taxonomy, and L2 hypothesis cards
- Open Review → run Discern / OntoHarness → approve / reject / request more
- Export review bundle — only approved cards become team conclusions
Seed data: data/gapforge/ (all *.json cases load via scripts/seed_gapforge.py)
Discern: docs/DISCERN.md
GapForge projects each L2 hypothesis (Neo4j records → Turtle) and validates via OntoHarness before propose/approve. Failures block HITL approval and show repair hints in the review UI (same panel pattern as Discern).
# Stack + OntoHarness sidecar (strict: fail closed if sidecar unreachable)
docker compose -f docker-compose.yml -f docker-compose.ontoharness.yml up --buildLocal API without Docker: set ONTOHARNESS_ENABLED=true in .env and run OntoHarness on :8010.
flowchart TB
subgraph humans [Human ownership]
Reviewer[Scientist reviewer]
Gate[HITL approval gate]
end
subgraph agents [Propose only]
Planner[plan_gap_investigation]
Critic[run_critic]
end
subgraph core [GapForge core]
API[FastAPI /api/v1]
UI[React explorer]
N4j[(Neo4j)]
end
Reviewer --> Gate
Planner --> API
Critic --> API
Critic --> Gate
UI --> API --> N4j
Built on a disease–target knowledge graph (Open Targets–style associations) with GapForge program/trial/hypothesis nodes and PROV-style SUPPORTED_BY / CONTRADICTED_BY edges.
GapForge is the product name for this repo. Related open components:
| Repository | Role |
|---|---|
| gapforge (this repo) | Graph + GapForge API/UI + Flurizan case study |
| kg-rag-demo | Citation-grounded literature / ClinicalTrials RAG |
| ontoharness | SHACL + vocab gate sidecar (L2 semantic validation) |
| embabel-mcp | MCP tools + research_program_gaps agent |
| peerlens | Paper quality signals (retraction / concern filter) |
| bioinsight-graph | Upstream disease–target graph lineage |
Docs: docs/ECOSYSTEM.md · MCP tools: plan_gap_investigation, build_program_dossier, propose_gap_hypotheses, run_critic, export_review_bundle.
| Method | Path | Notes |
|---|---|---|
GET |
/api/v1/programs |
List stalled programs |
GET |
/api/v1/programs/{id}/dossier |
L1 dossier |
GET |
/api/v1/gaps |
Hypothesis cards |
POST |
/api/v1/gaps/{id}/critic |
Adversarial critic |
POST |
/api/v1/discern |
Universal I/O weigh (compliance / reliability / …) |
GET |
/api/v1/discern/policy |
Active thresholds by risk tier |
POST |
/api/v1/gaps/{id}/ontology-validate |
Re-run OntoHarness SHACL + vocab gate |
GET |
/api/v1/reviews/queue |
HITL queue |
POST |
/api/v1/reviews/{gap_id} |
approve / reject / request_more |
GET |
/api/v1/export/review-bundle |
Provenance export |
Aligned with FDA/EMA Guiding Principles of Good AI Practice in Drug Development: human-centric design, clear context of use, risk-based controls, data provenance, and reviewable outputs.
- Associations are correlative, not causal
- Predictions (if added later) are labeled
model_estimateand never auto-written as facts - Literature informs RAG; only curated ETL writes the main Neo4j fact graph
See PROVENANCE.md.
# API tests
cd api && py -3 -m venv .venv
.\.venv\Scripts\pip install -r requirements.txt pytest
.\.venv\Scripts\python -m pytest -q
# Web
cd web && npm install && npm run buildDocs: GETTING_STARTED.md · ARCHITECTURE.md · ROADMAP.md
MIT © 2026 LordKay-sudo
Upstream Open Targets–style data: see licence notes in PROVENANCE.md (typically CC0 for platform data — always verify for your release).