robert
The AI scientific research developer powered by simulations.
robert is the method layer of an AI simulation scientist. It packages what a simulation scientist does as tools that any coding agent can call, and it leaves the simulation itself to stochadex. The agent does the implementation, and the experienced user supplies judgment where the work is new. Every point where the user had to step in is logged.
It is built to test one claim: how far can simulation science be automated? The design doc has the full argument.
The loop
flowchart LR
pose --> conjecture --> confront --> test
test -- fails --> discover --> confront
test -- holds --> compress --> test
compress --> warrant --> query --> revise --> pose
| Step | Writes | Gate before moving on |
|---|---|---|
init |
repo skeleton, domain.yaml |
Domain interview complete |
pose |
claim.yaml |
Question, claim, intended use and conditions named |
conjecture |
model/partitions.yaml, lineage root |
stochadex --check; twice-run harness; a role and hypothesis per partition; observables mapped; input licences |
confront |
ledger/beliefs.jsonl |
Posterior converged; weak identifiability flagged |
test |
tests.yaml verdicts |
Every structural partition passed; a backtest ran |
discover |
a variant in model/lineage.yaml |
Beats its parent on held-out prediction; ladder rule for learned partitions |
compress |
a smaller variant | Claim metric unchanged within tolerance; generalisation |
warrant |
ledger/warrants.jsonl |
Current variant tested and passed; limits stated |
query |
queries/<id>.yaml |
The warrant reaches the mode's rung |
revise |
revise.yaml |
Monitors watch partitions and name their action |
The supporting commands are run, graph, plot, status, explain, intervene
and doctor. Every command is also an MCP tool with the same arguments, so a
project driven through chat leaves the same trail as one driven by hand.
Install
curl -fsSL https://raw.githubusercontent.com/umbralcalc/robert/main/install.sh | sh
The installer puts the robert-ai package in an isolated tool environment, using uv
if you have it, then pipx, and otherwise it installs uv first. It then runs
robert setup, which:
- downloads the stochadex release robert locks into
~/.robert/stochadex/<version>/and checks it against the SHA-256 recorded inrobert/stochadex.json; - installs the Claude Code plugin (both skills and the MCP server) when
claudeis on PATH, and adds the MCP server to~/.cursor/mcp.jsonwhen Cursor is installed.
Run robert doctor at any time to check the toolchain. Re-running robert setup
repairs or upgrades the install, and robert setup --accelerated swaps in the BLAS +
DuckDB build of stochadex. Set ROBERT_VERSION=0.2.0 to install a specific release,
or ROBERT_NO_AGENTS=1 to skip agent registration.
Until the first PyPI release is out, install from GitHub instead:
curl -fsSL https://raw.githubusercontent.com/umbralcalc/robert/main/install.sh | ROBERT_SOURCE=git+https://github.com/umbralcalc/robert sh
How robert depends on stochadex
robert never bundles stochadex. It locks one release and declares the range it supports, in robert/stochadex.json:
| Rule | Effect |
|---|---|
| Resolution order | STOCHADEX_BIN, then the managed install of the wanted version, then PATH |
| Version range | Any binary outside the supported range is refused, with the fix |
| Checksums | A download that doesn't match the lock (or the release's SHA256SUMS) is never installed |
| Project pin | Each project records the stochadex version it was created with; doctor flags drift |
| Updates | A weekly workflow moves the lock to the newest release, tests it, and opens a PR |
robert needs stochadex v0.24 or later: it renders the partition graph with
stochadex graph, and checks its skills against stochadex catalogue, the JSON list
of everything a build can run.
Connect an agent
robert setup already registers Claude Code and Cursor. To do it by hand:
| Agent | How |
|---|---|
| Claude Code | claude plugin marketplace add umbralcalc/robert, then claude plugin install robert@robert. This adds both skills and the MCP server. |
| Cursor | Add adapters/cursor/mcp.json to ~/.cursor/mcp.json, and copy adapters/cursor/rules/ into a project's .cursor/rules/. |
| Anything else | Point it at adapters/agents/AGENTS.md and run robert mcp as a stdio MCP server. |
Every project that robert init creates also contains its own .mcp.json,
.cursor/mcp.json, AGENTS.md and .devcontainer/, so any agent opened in it
finds the tools.
The skills in skills/ are the single source of method content. After you edit
one, run robert adapters to regenerate the Cursor rules, AGENTS.md and the
plugin manifest. CI fails if they drift.
In the cloud
| Route | How |
|---|---|
| Image | ghcr.io/umbralcalc/robert:<version> contains robert, the locked stochadex (accelerated build), Python and git. Run docker run --rm -it -v "$PWD:/work" ghcr.io/umbralcalc/robert status. |
| Dev container / Codespaces | Projects from robert init open in the robert image. For any other repo, add the feature "ghcr.io/umbralcalc/robert/robert:0": {} to its devcontainer.json. |
| Cloud coding agents | Use the one-line installer with ROBERT_NO_AGENTS=1 as the environment's setup script, or start the agent in the robert image. |
| MCP over the network | robert mcp --http serves streamable HTTP at http://127.0.0.1:8765/mcp. Binding to anything else requires a bearer token: ROBERT_MCP_TOKEN=... robert mcp --http --host 0.0.0.0. |
Releases
Versions follow SemVer, pre-1.0, so a minor bump may break the CLI, the tool
schemas or the file contracts. CHANGELOG.md has the policy.
robert/__init__.py holds the only version number; the package, the plugin
manifests and every project's recorded skills version all read it.
To release, run the Prepare release PR workflow with the new version. It turns
the [Unreleased] changelog section into the release and bumps the version. Review
and merge that PR. tag-release.yml then tags the merge commit, and release.yml
tests and publishes:
- the
robert-aipackage to PyPI, through a trusted publisher; - the GitHub Release, with the changelog section as its notes;
- the image to GHCR, for amd64 and arm64;
- the Dev Container Feature.
Worked example
examples/logistic-growth/walkthrough.sh /tmp/logistic-demo
This runs the whole loop against real stochadex runs:
- Unconstrained growth fails its backtest and its density-dependence process check.
- The user's redirect is logged.
discoveradds a carrying capacity, which beats its parent on held-out years.compressremoves a seasonal nuisance without moving the claim.- A forecast is warranted and queried.
- A
decidequery is refused, because no model-part swap was tested on the action path.
Design principles
- One hard boundary. Determinism is enforced at the stochadex run. The agent is free in everything it writes above it, and restriction comes from checks, not templates.
- Build on stochadex, not beside it.
model/sim.yamlis a pure stochadex config. Validation, I/O manifests, provenance and the partition graph all come from the stochadex CLI. robert adds only the claim, the per-partition roles and hypotheses, the lineage, the tests, the ledger and the gates. - The agent never produces a number. Every figure traces back to a config, a seed and a provenance sidecar.
- Mechanism first. Learned (ONNX) components must earn their place through
discover, after mechanistic variants have failed and the user has approved. - Gates live in the MCP server, never in agent hooks, so every agent is held to the same standard.
Repository layout
| Path | What |
|---|---|
robert/ |
The method CLI and MCP server (tools.py is the single registry) |
robert/stochadex.json, robert/deps.py |
The stochadex lock, resolver and installer |
install.sh, Dockerfile, devcontainer-features/ |
Install routes: one line, image, dev container |
skills/simulation-scientist/ |
The method skill |
skills/stochadex-model/ |
The model-authoring skill, moved from stochadex v0.23.0 |
adapters/, .claude-plugin/ |
Generated per-agent adapters |
examples/logistic-growth/ |
The end-to-end worked example |
tests/ |
Unit tests, plus the whole loop against a real stochadex |
Testing
pip install -e '.[dev]'
robert setup --no-agents
pytest
The loop and recipe tests skip when no supported stochadex is installed.
Metadata
Release files for robert-ai 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| robert_ai-0.1.0.tar.gz | 50.8 kB | With provenance | Details for robert_ai-0.1.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| robert_ai-0.1.0-py3-none-any.whl | Python 3 | none | any | Details for robert_ai-0.1.0-py3-none-any.whl |
Total release size: 99.7 kB
Release files / robert_ai-0.1.0.tar.gz
| Download URL | robert_ai-0.1.0.tar.gz |
|---|---|
| Size | 50.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
1355fb9dd7bbaeba2bb3ca5e7f2a9288e631f83c7c31d53b9a01a9617f5128d0
|
|
BLAKE2b-256 checksum How to use checksums |
d2f4cd2370b7db6822e233430419ae4456544e7bc807b87d43d2a4691757f3ac
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 31, 2026.
Transparency logRelease files / robert_ai-0.1.0-py3-none-any.whl
| Download URL | robert_ai-0.1.0-py3-none-any.whl |
|---|---|
| Size | 48.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
f89cef56e84b54c6d8979192a18bcc3456685027cbdf6a448296b280206b09df
|
|
BLAKE2b-256 checksum How to use checksums |
69dc61f87c716afa9a149b9a79a9f1a8e0174fdc39352b77f94ac9098d6ddca1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 31, 2026.
Transparency logSecurity for robert-ai 0.1.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for robert_ai-0.1.0.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 31, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.