research-diff
Maps your research from its notes, experiment configs, results and paper (questions, hypotheses, experiments, results, claims) and shows what each iteration changed. Built for exploring ideas with AI coding agents.
1 open warning
- H2 is open and no experiment tests it
The map above is this repository's own example (examples/batch-size), regenerated from its files on every change.
What it reads
Markers in your own files, in one grammar: an id (Q question, H hypothesis, E experiment, R result,
C claim, and a number) and a title, then links and a status on the lines after it.
## H2: Learning-rate warm-up removes the gap <- notes (Markdown): a heading or a list item
answers: Q1
status: open <- open | supported | refuted | anything you like
| Where | How |
|---|---|
Notes (.md) |
definitions as above; tests:, of:, supports:, weakens:, relies on:, metrics: acc=0.91 |
| Experiment configs (YAML, JSON, TOML) | a research: block: id, title, tests, status, and results: out/e1.json, whose numbers become the result E1.results |
| Scripts and notebooks | a comment: # research-diff: E2 tests H2 |
| The paper (LaTeX) | a comment: % C1: Small batches win and % relies on: H1, R1; the paragraph's \cite{…} become its sources; % expects: E1.results acc.batch32 > 0.85 warns when a result stops meeting it |
The map is built from markers only, so the same files always give the same map. It warns when a claim relies on
nothing or on a refuted hypothesis, when a number no longer meets what a claim expects:, when an open hypothesis has no experiment, and when a link points at nothing.
Use
pipx install research-diff
research-diff map --out docs # research.svg and research.json
research-diff diff --base HEAD # what your uncommitted iteration did
research-diff sync # MLflow / W&B runs into research/runs.json
research-diff checkpoint # mark what you have understood
research-diff diff # only what came after that
A diff reads like: Adds 1 hypothesis (H3); H1: open → refuted; E1.results acc.b32: 0.874 → 0.881 (+0.8%); 1 new
link; 2 new warnings (C1 relies on H1, which is refuted…). It comes with the exact list (plan.txt) and a picture of
only what changed (diff.svg).
With AI coding agents
pipx inject research-diff mcp
research-diff setup claude # a Stop hook, a skill and the MCP server (--scope project, --undo)
research-diff watch # http://127.0.0.1:8766/ : the research diff since your checkpoint, live
After every Claude Code turn one line says what changed in the research. The agent's tools: research_diff,
research_map, log_result (records a run's metrics and what it supports or weakens in research/log.md, so it is
on the map and in git) and checkpoint. The pictures, snapshots and live page are
system-diff's.
Experiment trackers
Runs logged to MLflow (its local mlruns/ store) or W&B (its local wandb/ folders) become results of the experiment
they are tagged with: research-diff.experiment (or research_id) as an MLflow tag or param, research_id in the W&B
config. Tracker folders are usually git-ignored, so research-diff sync copies their runs into research/runs.json,
which is tracked: the runs are then on the map, in git and in the next diff. The hook, the live page and the MCP tools
sync on their own.
Markers suggested by your LLM
research-diff suggest # notes and paper files with no marker yet, or name the files
git apply .git/research-diff/suggest.patch
Your LLM (the one your Claude Code uses) proposes markers for what the text already says. Each proposal is checked before it reaches the patch: a real line of a file it was shown, a marker in that file's own form, and no id that is already used. Nothing is written until you apply the patch.
License
MIT
Metadata
Release files for research-diff 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 |
|---|---|---|---|---|
| research_diff-0.1.0.tar.gz | 31.9 kB | With provenance | Details for research_diff-0.1.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| research_diff-0.1.0-py3-none-any.whl | Python 3 | none | any | Details for research_diff-0.1.0-py3-none-any.whl |
Total release size: 64.1 kB
Release files / research_diff-0.1.0.tar.gz
| Download URL | research_diff-0.1.0.tar.gz |
|---|---|
| Size | 31.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
fb6ddd4bb2daa0d25b093587c606651f231fe06b6bf7345b681d8802d5662ac0
|
|
BLAKE2b-256 checksum How to use checksums |
7f5f56d16b17bd6f7cd34876085b1545a9494ec55f061c9cd6310ddbdd3e4768
|
| 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 Nov 2, 2026.
Transparency logRelease files / research_diff-0.1.0-py3-none-any.whl
| Download URL | research_diff-0.1.0-py3-none-any.whl |
|---|---|
| Size | 32.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
d5e783426dfa1a3c6d00cf4ab2eee53be5641c59c0f83d0aa9e3a4ba91ded76a
|
|
BLAKE2b-256 checksum How to use checksums |
ec6dd65f81dc2c8fa02b31008a1d4f824f0ff285af33b6c4acfa9f40fe19f19a
|
| 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 Nov 2, 2026.
Transparency logSecurity for research-diff 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 research_diff-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 Nov 2, 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.