# AIRAS - an open-source project for research automation 
AIRAS is open-source software for automated research. It gives a coding agent (Claude Code, Cursor, or any MCP client) everything it needs to take a research topic through literature survey, hypothesis, experiments, and a finished paper, and it makes the paper's claims **verifiable**: the paper is preregistered in git before any experiment runs, every reported number is realized from run outputs, and CI re-checks all of it before the PDF of record is produced. AIRAS ships as one PyPI package (`airas`) that provides: - an **MCP server** with the research tools the flow needs (paper search, hypothesis and experimental design, experiment results, figure rendering, LaTeX, Overleaf, and the record/verification tools), - a **Claude Code plugin** that bundles the server with the `auto-research` workflow skills, - a small **CLI** (`airas verify-record`, `airas verify-paper`) that the experiment repository's CI uses as the verification gate. Currently, it focuses on the automation of machine learning research. ## Quick Start No clone, no Docker. Only [uv](https://docs.astral.sh/uv/) is required; `uvx` fetches the package on first run. ### 1. Install AIRAS is meant to be driven from **Claude Code** through its plugin. The plugin installs the MCP server together with the `auto-research` workflow skills and the hooks that record the agent's state: ``` /plugin marketplace add airas-org/airas /plugin install airas@airas ``` The MCP server can also be used on its own, without the skills and hooks. In Claude Code: ```bash claude mcp add airas -- uvx airas ``` In any other MCP client, add it to the client's MCP configuration (e.g. `.mcp.json`): ```json { "mcpServers": { "airas": { "command": "uvx", "args": ["airas"] } } } ``` **Upgrading.** `uvx` keeps the version it fetched the first time, so an existing install does not move to a new release on its own. Run `uv cache clean airas` (or `uvx airas@latest`) once to pick up the latest version. ### 2. Configure credentials Credentials live in `~/.airas/credentials.json` and are re-read on every tool call, so you can create or edit the file at any time: ```bash mkdir -p ~/.airas cat > ~/.airas/credentials.json <<'EOF' { "GH_PERSONAL_ACCESS_TOKEN": "ghp_...", "SEYVAL_API_KEY": "..." } EOF chmod 600 ~/.airas/credentials.json ``` | Key | Purpose | | --- | --- | | `GH_PERSONAL_ACCESS_TOKEN` | Required. Creates and drives the experiment repository (`repo` + `workflow` scopes, admin on the repository). | | `SEYVAL_API_KEY` (+ optional `SEYVAL_COMPUTE_ID`, `SEYVAL_WORKSPACE_ID`) | Needed for `backend="seyval"`: running experiments on the Seyval compute platform and cross-checking their provenance. See [Execution platforms](#execution-platforms-and-llms). | | `OPENAI_API_KEY` / `ANTHROPIC_API_KEY` / `GEMINI_API_KEY` / `OPENROUTER_API_KEY` / `AWS_BEARER_TOKEN_BEDROCK` / `VERCEL_AI_GATEWAY_API_KEY` | Not needed for the flow: the agent driving AIRAS authors every artifact itself, guided by the skills, and `get_prompts` provides the authoring guidance for a step when you write it yourself. A key is only used when you call the backend-LLM tools (`analyze_experiment`, `verify_paper_values` with a `model`) directly. | ### 3. Start a research project In Claude Code, invoke the orchestrator skill and give it a topic: ``` /airas:auto-research ``` It walks through the flow below, asking you to settle the operational choices (repository visibility, execution platform, compute target) once up front. Other MCP clients call the tools directly; each tool's description says what comes before and after it, and the [MCP documentation](docs/development/MCP.mdx) walks the flow. ## The auto-research flow `auto-research` owns only the ordering and the rules that span steps. Each step is its own skill with a stated contract, so you can also invoke a single step on an existing repository. | Step | Skill | What it leaves in the repository | | --- | --- | --- | | 1 | `setup-repository` | An experiment repository created from [airas-template](https://github.com/airas-org/airas-template), cloned, with Actions secrets provisioned and `main` protected. All research state lives here from now on. | | 2 | `search-papers` | Papers found across sources, including [airas-papers-db](https://github.com/airas-org/airas-papers-db), and their full text downloaded for the next step to read. | | 3 | `hypothesize-and-design` | A falsifiable hypothesis and an experimental design that fixes run ids, metrics, models, datasets, and the compute environment. | | 4 | `preregister-paper` | The full paper, written **before any experiment**, as numbered claims with criteria and predicted intervals. Its commit is the freeze point; `.research/record.json` is created here. | | 5 | `write-experiment-code` | Experiment code against a fixed execution contract (Hydra entrypoint, `sanity` / `pilot` / `full` modes), environment fixed by lockfile and Dockerfile. Metrics are produced by [airas-eval](https://github.com/airas-org/airas-eval), not by the code itself. | | 6 | `run-experiments` | Runs executed on the chosen backend (GitHub Actions or Seyval), outputs brought back under `.research/results/` with provenance. See [Execution platforms](#execution-platforms-and-llms). | | 7 | `analyze-results` | The analysis and verifiable figures (Vega-Lite charts, text-defined diagrams). | | 8 | `publish-paper` | Every stated number realized from the record, compile and verification green locally, then pushed. CI re-runs the verification and commits `paper.pdf` to the protected branch: the paper of record. | ### What the flow guarantees - **Declare before you run.** Nothing is dispatched before the preregistration commit exists, and every run descends from it. Fixes are committed on top, never rebased away. - **The record only grows.** `.research/record.json` is an append-only tree of hypotheses, claims, designs, runs, and results. A reworded claim, a changed run condition, or a dropped result all fail the same check. A claim that misses its criterion is reported as a negative result, not rewritten. - **No experimental number is ever typed.** Numbers reach the paper only through `\airasval{...}` references to a run's measured metric or declared parameter, rendered from the record. Anything else is marked `\unverified{...}`. - **The gate is enforced, not advisory.** Branch protection makes the verification workflow a required check, so a red run cannot be pushed past. - **The repository is the state.** Everything a later step needs is committed, so a fresh session can resume from the clone alone. ### Execution platforms and LLMs Experiments run through the same three MCP tools on either backend: `dispatch_experiment` starts the run, `get_experiment_run_status` follows it, and `import_run_outputs` copies its outputs from where the backend keeps them (Seyval's storage, or the workflow's artifact on **GitHub Actions**) into `.research/results/` with a provenance manifest. The record gate cross-checks the committed bytes against that same store, and once the store has dropped the run, against the sha256 hashes the import recorded. **Seyval** (bring-your-own Slurm compute) and **GitHub Actions** are supported; a backend for machines you run yourself (RunPod, a lab cluster) is not yet, since it needs a store the agent cannot rewrite. The flow needs no LLM key: the agent authors the hypothesis, design, analysis and paper itself, guided by the skills. Backend-LLM tools (`analyze_experiment`, and `verify_paper_values` with a `model`) and `get_prompts`, which hands a client the prompts they use, exist for use outside the flow; the former need a provider key (`get_available_llms` lists the models your keys allow). Supported providers: OpenAI, Anthropic, Google Gemini, OpenRouter, Amazon Bedrock, and Vercel AI Gateway. ## Companion repositories AIRAS relies on three sibling repositories under the `airas-org` organization. Each keeps one piece of the workflow outside the agent's reach. | Repository | Role | | --- | --- | | [airas-template](https://github.com/airas-org/airas-template) | The template every experiment repository is created from. It ships the CI workflows, the execution contract, and the verification gate. | | [airas-papers-db](https://github.com/airas-org/airas-papers-db) | A curated database of papers from top conferences that the agent can search through `search_papers`, alongside OpenAlex, Semantic Scholar, and arXiv. | | [airas-eval](https://github.com/airas-org/airas-eval) | The evaluation logic, in one place. Metrics are computed by airas-eval from the run's evaluation inputs, not by the experiment code, so the agent cannot tamper with its own scores. | ## MCP tools The `auto-research` flow uses the following tools; the skills above are thin contracts over them. The server exposes more, but these are the ones a research project goes through. | Step | Tools | | --- | --- | | `setup-repository` | `prepare_repository`, `set_github_actions_secrets` | | `search-papers` | `search_papers`, `dispatch_literature_fetch` | | `hypothesize-and-design` | `get_prompts`, `retrieve_models`, `retrieve_datasets`, `search_huggingface_hub` | | `preregister-paper` | `preregister_record`, `get_prompts`, `append_to_record`, `update_record`, `verify_latex` | | `write-experiment-code` | `get_prompts`, `get_library_docs` | | `run-experiments` | `dispatch_experiment`, `get_experiment_run_status`, `import_run_outputs`, `fetch_experiment_results` | | `analyze-results` | `fetch_experiment_results`, `analyze_experiment` / `get_prompts`, `render_chart`, `render_diagram`, `append_to_record`, `update_record` | | `publish-paper` | `verify_record`, `verify_paper_values`, `verify_latex`, `open_in_overleaf`, `get_workflow_runs` | See the [MCP documentation](docs/development/MCP.mdx) for descriptions, credentials per tool, and configuration options. ## CLI ```bash uvx airas # MCP server on stdio (default) uvx airas verify-record # check .research/record.json against run outputs, git history, and the platform uvx airas verify-paper # check paper values and citations against the record and run outputs — no PDF build uvx airas verify-record --implementation-verifier-model