Most AI scientist systems start with a research goal. That assumes someone has already done one of the hardest parts: choosing a question worth answering.

The idea behind Urithiru was to reverse that order: start with datasets, inspect what is measurable, and see whether an AI scientist can develop a research direction from there.

I spent six weeks building and testing this idea. The result is Urithiru, an open-source agent that searches for hypotheses over tabular data. You can inspect some of runs, including the search tree, generated analyses, logs, plots, and outside-data checks, at urithiru.eamag.me.

Why start from available data?

Research advice usually starts with a question: identify an important problem, formulate a hypothesis, and then find or collect the data needed to answer it. This is the right ideal, and I wrote about it in Good Research.

The starting hypothesis in my research notes was more exploratory: “There are already datasets collected for other experiments, can we test new ideas on them instead of collecting new data?”, instead of inventing an experiment for measurements that do not exist, we can start from the measurement surface.

Urithiru grows a tree of questions from the data

I started from AutoDiscovery and Evidence-Informed LLM Beliefs for Continual Scientific Discovery. They use Bayesian surprise as a reward for Monte Carlo tree search: if testing a hypothesis moves the model’s belief, the search spends more attention in that part of the tree.

Urithiru uses the same basic structure for research. A move is a new hypothesis, the current position is the tree of previously tested claims, and the reward measures how much the empirical result changed the literature-grounded belief. A high-reward branch receives more of the remaining analysis budget, while less explored branches still get occasional chances.

Urithiru makes this agentic: instead of simple hypothesis generation, from a metadata and a single python file for an analysis we create separate agents for each task. We start every branch with an exploratory data agent that reads the files, executes code, and returns several falsifiable claim-test pairs. The engine removes duplicates, picks a diverse candidate, and records several belief stages:

  1. , what the model expects before claim-specific evidence. Each model (gpt, claude, gemini, etc.) has a different prior over the same data, so this is a model-specific baseline.
  2. , what a literature agent concludes without receiving the seed dataset. This should be closer to reality, though it’s still biased by search and retrieval limitations.
  3. , what an experiment agent concludes after writing and running an analysis without receiving the literature verdict.
  4. , an optional attempt to test the claim on a separately collected dataset.

Example: Can vigorous exercise weaken the relationship between BMI and long-term blood sugar?

Urithiru began with , while the literature lowered to 0.35; an analysis of 5,141 NHANES participants then found the BMI–HbA1c slope was 38% lower among vigorously active adults, raising to 0.94. But an independent Mexican health survey found virtually identical slopes among active and inactive adults, dropping to 0.11.

The disagreement between literature and executed data becomes the reward. That updates the tree, and the next proposal agent receives relevant evidence from earlier nodes.

Some fails

The scientific wiki became a summary

The inspiration came from two recent examples of agents maintaining state outside a conversation. Andrej Karpathy described an LLM Wiki that incrementally turns raw sources into linked Markdown pages, updates earlier summaries, and records contradictions instead of reconstructing the same knowledge through RAG on every query.

A much stranger example appeared in Hugging Face’s technical account of the July 2026 agent intrusion. During the incident, an autonomous agent constructed a small self-describing message protocol over public request-capture services and dead-drop datasets. The idea was to create a similar messege board for research so agents could leave notes of what they found and what they tried, instead of repeating the same search over and over, agents would leave verified observations in a persistent, linked structure, and later agents could build on that structure instead of inheriting a long chat transcript.

I expected a long-running research agent to need memory. My first design mounted a Markdown wiki into every agent container and periodically asked another agent to consolidate results into concept, dataset, and source pages.

The wiki program lasted two weeks and went through two versions. The first degenerated into one page per hypothesis. The second produced a much nicer graph of nine reusable concept pages over 30 discoveries, but it’s still wasn’t useful. The wiki supplied 46.9 times more context and performed worse. It was useful for me to browse, but not useful as model-facing memory. LLM synthesis smoothed away statistical qualifications and surrounded the relevant evidence with a lot of polished text.

Grant objectives as a guide for AI

Starting only from data has no mechanism for scientific taste. I tried to supply one by connecting a dataset to the grant that funded it. The model read the grant. Its proposals moved slightly closer to the grant text in embedding space and slightly farther from four unrelated grants. But executable proposal rates were 269/325 with the grant and 267/325 without it, with no meaningful difference. But grant context changed how proposals were phrased, not what the agent could do. This does not show that goals are useless. It shows that a long grant narrative is not a substitute for a discriminating research objective, and that the dataset used to test steering cannot already satisfy the objective by construction.

Finding external datasets actually worked but was limited

I wanted to see whether an agent could take a result from one dataset, find a relevant independent dataset, and test the same hypothesis again. It worked for almost half of the frozen claims: some results replicated, some contradicted the original finding, and others stopped because the required measurements did not exist.

This gives researchers a useful step before collecting new data. Search existing public datasets, preserve the original claim and variable mapping, and treat the result as another experiment rather than a final verdict.

The open-source project

Now you can run it yourself, I built local Docker and google cloud support, checkpoint and resume support, and a small interface for inspecting the tree. I’m using antigravity because it’s the fastest agent and has a good web search built in, so it’s pretty cheap (I hit my 5h limits after around 20 hypotheses).

You can inspect the complete node, including the proposal, literature, generated analysis results, and external source.