Plato is a multi-agent AI system that takes experimental data and produces peer-reviewable scientific papers end-to-end — generating the research idea, designing the methodology, running the analysis, and writing the LaTeX manuscript through a reviewer-panel revision loop.
Phase 5 hardening landed alongside the dashboard's 13-stream feature push:
- Multi-source retrieval — six adapters (arXiv, OpenAlex, ADS, Crossref, PubMed, Semantic Scholar) behind a domain-aware orchestrator with rate-limit backoff, ETag caching, and per-host circuit breakers.
- Citation validation — every reference is resolved against Crossref +
Retraction Watch + arXiv before the paper finalizes. The run dir gets a
validation_report.jsonwith per-reference pass/fail. - Claim → Evidence Matrix — the literature pass extracts atomic claims
with quote spans and links them to source records. Persisted as
evidence_matrix.jsonlper run. - Reviewer panel + revision loop — methodology / statistics / novelty /
writing axes feed an aggregator that drives a redraft loop bounded by
Plato.get_paper(max_revision_iters=...). - Autonomous research loop —
plato loop --hours 8 --max-cost-usd 50iterates under a wall-clock + cost budget, committing improvements and reverting regressions. - Reproducibility manifest — every workflow emits
manifest.jsonwith git sha, project sha-256, model versions, source ids, tokens, and cost. - Observability — opt in by setting
LANGFUSE_*env vars; LangFuse callbacks are wired into every LangGraph invocation. - Pluggable domains —
DomainProfileregistry exposes retrieval, keyword extractor, journal preset, executor, and novelty corpus as swap points. Astro is the default; biology ships out-of-the-box. - Multi-tenant dashboard — set
PLATO_DASHBOARD_AUTH_REQUIRED=1and the dashboard readsX-Plato-Userfrom the upstream proxy to scope every project, key store, and run artifact per tenant.
See docs/adr/ for the design decisions behind these changes and
dashboard/CHANGELOG.md for the full list.
To install plato create a virtual environment and pip install it. We recommend using Python 3.12:
python -m venv Plato_env
source Plato_env/bin/activate
pip install "plato[dashboard]"Or alternatively install it with uv, initializing a project and installing it:
uv init
uv add plato[dashboard]Then, run the Plato dashboard with:
plato dashboard
Initialize a Plato instance and describe the data and tools to be employed.
from plato import Plato
p = Plato(project_dir="project_dir")
prompt = """
Analyze the experimental data stored in data.csv using sklearn and pandas.
This data includes time-series measurements from a particle detector.
"""
p.set_data_description(prompt)Generate a research idea from that data specification.
p.get_idea()Generate the methodology required for working on that idea.
p.get_method()With the methodology setup, perform the required computations and get the plots and results.
p.get_results()Finally, generate a latex article with the results. You can specify the journal style, in this example we choose the APS (Physical Review Journals) style.
from plato import Journal
p.get_paper(journal=Journal.APS)You can also manually provide any info as a string or markdown file in an intermediate step, using the set_idea, set_method or set_results methods. For instance, for providing a file with the methodology developed by the user:
p.set_method(path_to_the_method_file.md)A Linear-themed real-time web dashboard with full pipeline visualization, cost tracking, and live agent log streaming. See dashboard/README.md for setup.
pip install "plato[dashboard]"
plato dashboardThe dashboard supersedes the legacy plato run Streamlit app for new workflows.
For hosted Railway SaaS/Lab deployments with Clerk auth or Clerk Billing, run the local production gates and redacted strict preflight before deploying:
bash dashboard/scripts/check-local-production-gates.sh
bash dashboard/scripts/check-hosted-saas-preflight.sh --railway --service plato --environment production --hosted-required --strictIt verifies the Clerk user/Lab auth contract, PLATO_BACKEND_PROXY_SECRET,
public origin, Clerk proxy, and hosted billing flags without printing secret
values. Strict mode treats preflight warnings as release blockers. After
deploying, use the read-only production readiness check to probe the live app
and scan Railway logs:
bash dashboard/scripts/check-production-readiness.sh --service plato --environment production --origin https://discovering.appIf railway variables --json/--kv is unavailable but you have a local
Railway variables snapshot, pass it with --variables-file; the checker still
prints only redacted key status and lengths:
bash dashboard/scripts/check-production-readiness.sh --service plato --environment production --origin https://discovering.app --variables-file /path/to/railway-variables.jsonSee dashboard/RAILWAY.md for the full production variable matrix.
You will need python 3.12 or higher installed. Clone Plato:
git clone https://github.com/Eldergenix/Plato-Scientific-Research-Autonomous-Agent.git
cd Plato-Scientific-Research-Autonomous-AgentCreate and activate a virtual environment
python3 -m venv Plato_env
source Plato_env/bin/activateAnd install the project
pip install -e .You can also install the project using uv, just running:
uv syncwhich will create the virtual environment and install the dependencies and project. Activate the virtual environment if needed with
source .venv/bin/activateYou can run Plato with Docker using the dashboard compose file:
docker compose -f dashboard/compose.yaml up --buildThe local dashboard runs on http://localhost:7878 by default.
You can also build an image locally with
docker build -f docker/Dockerfile.dev -t plato_src .Pull requests are welcome! Feel free to open an issue for bugs, comments, questions and suggestions.
If you make use of Plato, please cite the following references:
@article{villaescusanavarro2025platoprojectdeepknowledge,
title={The Plato project: Deep knowledge AI agents for scientific discovery},
author={Francisco Villaescusa-Navarro and Boris Bolliet and Pablo Villanueva-Domingo and Adrian E. Bayer and Aidan Acquah and Chetana Amancharla and Almog Barzilay-Siegal and Pablo Bermejo and Camille Bilodeau and Pablo Cárdenas Ramírez and Miles Cranmer and Urbano L. França and ChangHoon Hahn and Yan-Fei Jiang and Raul Jimenez and Jun-Young Lee and Antonio Lerario and Osman Mamun and Thomas Meier and Anupam A. Ojha and Pavlos Protopapas and Shimanto Roy and David N. Spergel and Pedro Tarancón-Álvarez and Ujjwal Tiwari and Matteo Viel and Digvijay Wadekar and Chi Wang and Bonny Y. Wang and Licong Xu and Yossi Yovel and Shuwen Yue and Wen-Han Zhou and Qiyao Zhu and Jiajun Zou and Íñigo Zubeldia},
year={2025},
eprint={2510.26887},
archivePrefix={arXiv},
primaryClass={cs.AI},
url={https://arxiv.org/abs/2510.26887},
}
@software{Plato_2025,
author = {Pablo Villanueva-Domingo, Francisco Villaescusa-Navarro, Boris Bolliet},
title = {Plato: Modular Multi-Agent System for Scientific Research Assistance},
year = {2025},
url = {https://github.com/Eldergenix/Plato-Scientific-Research-Autonomous-Agent},
note = {Available at https://github.com/Eldergenix/Plato-Scientific-Research-Autonomous-Agent},
version = {latest}
}
@software{CMBAGENT_2025,
author = {Boris Bolliet},
title = {CMBAGENT: Open-Source Multi-Agent System for Science},
year = {2025},
url = {https://github.com/CMBAgents/cmbagent},
note = {Available at https://github.com/CMBAgents/cmbagent},
version = {latest}
}GNU GENERAL PUBLIC LICENSE (GPLv3)
Plato - Copyright (C) 2026 Pablo Villanueva-Domingo, Francisco Villaescusa-Navarro, Boris Bolliet