results
Seal inputs, record outputs, and bind a paper's claims to the runs behind them.
Part of reproducible-science alongside repro, citations and prereg — see the documentation.
Install
pip install results-cli
Quick start
results init
results seal prereg.md analysis.py data.csv --role input
results access "read zenodo metadata" --level "metadata only"
# run the computation, then record its outputs
results run output.json --run-id exp_001 --note "ICC analysis"
results claim "ICC = 0.42" --run-id exp_001 --confirmatory --location "Table 2"
results verify --files
chain intact: 5 events
access 1
claim 1
init 1
run 1
seal 1
file hashes:
ok prereg.md
ok analysis.py
ok data.csv
ok output.json
all checks passed.
Commands
| Command | What it does |
|---|---|
results init |
Start tracking results here |
results seal <file>... |
Hash inputs before a run |
results access <note> |
Record a data-access event |
results run <file>... |
Record outputs after a run |
results claim <text> |
Bind a manuscript claim to a run |
results verify |
Check the ledger chain and every hash it names |
The chain
A number in a manuscript names a claim. The claim names a run. The run names its outputs. The outputs were hashed when they were recorded. The inputs were hashed before the run started.
manuscript → claim → run → output file → sha256
input files → sha256
results verify --files walks the whole thing and tells you what moved.
Data-access levels
The access timeline is what makes the confirmatory/exploratory distinction verifiable.
| Level | Meaning |
|---|---|
nothing seen |
No target data touched |
metadata only |
Structure, region names, sample sizes — not outcomes |
structure seen |
Data shape and distributions, not the target variable |
outcomes seen |
The dependent variable was observed |
An analysis registered after outcomes seen is retrospective.
Verify output
| Result | Meaning |
|---|---|
chain intact |
Every event's prev_hash matches the line before it |
CHAIN BROKEN |
The ledger was edited after it was written |
ok |
File matches its recorded hash |
CHANGED |
File was modified since it was recorded |
MISSING |
File no longer exists |
The ledger
Append-only JSONL in .results/ledger.jsonl. Each line is hash-chained to the previous — editing
or inserting a line breaks the chain. git diff shows what changed; results verify checks
whether it should have.
Claude Code
plugin/ is a Claude Code plugin. Three surfaces, because each catches a different failure:
the hook catches what the model does not think to do, the skill catches what you did not know
to ask for, and the command is there for when you want the answer now.
| surface | fires |
|---|---|
| hook | when a number enters a manuscript that no recorded claim names |
| skill | when Claude judges the situation calls for sealing inputs, recording outputs, binding a paper's claims to runs |
| command | when you type /results-check |
Why the hook. The address is on screen while the sentence is being written and gone immediately afterward. A number recovered later has to be matched by its digits, and a value reported to two or three significant figures matches something in an artifact of any size.
It reports and never blocks, and stays silent in a project with no .results/ ledger.
/plugin marketplace add elliottower/reproducible-science
/plugin install results@reproducible-science
The plugin ships instructions and hooks, not binaries, so install the tool as well:
uv tool install results-cli # or: pip install results-cli
All four tools in one plugin, with every hook, skill and command:
/plugin install reproducible-science@reproducible-science
MIT licensed.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file results_cli-0.3.0.tar.gz.
File metadata
- Download URL: results_cli-0.3.0.tar.gz
- Upload date:
- Size: 39.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7dd18b0f9aecf49214d58175f02a00b4f6d49476549119404c60f36dc90ed165
|
|
| MD5 |
1b8700991a81b60c4093eabaa90af17b
|
|
| BLAKE2b-256 |
f05f11c2bb6111bb19de4f43778920022e0b38b964093cbaa16a56ebc02d2f08
|
Provenance
The following attestation bundles were made for results_cli-0.3.0.tar.gz:
Publisher:
publish-results.yml on elliottower/reproducible-science
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
results_cli-0.3.0.tar.gz -
Subject digest:
7dd18b0f9aecf49214d58175f02a00b4f6d49476549119404c60f36dc90ed165 - Sigstore transparency entry: 2604598422
- Sigstore integration time:
-
Permalink:
elliottower/reproducible-science@83230ff85f43bec602b8312bc9479b14fd2bb0c6 -
Branch / Tag:
refs/tags/v0.3.0 - Owner: https://github.com/elliottower
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-results.yml@83230ff85f43bec602b8312bc9479b14fd2bb0c6 -
Trigger Event:
push
-
Statement type:
File details
Details for the file results_cli-0.3.0-py3-none-any.whl.
File metadata
- Download URL: results_cli-0.3.0-py3-none-any.whl
- Upload date:
- Size: 25.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
adbe24765b5b76c37b8d41477b908fbcb67130ddbc167f56ae6b41a572883cbf
|
|
| MD5 |
7987057dfc692f42e2e2a0d6eb2c4655
|
|
| BLAKE2b-256 |
824c7885c88d20706dc6550ec81d90ec25bd091c9bde4a65809008be77c04bfd
|
Provenance
The following attestation bundles were made for results_cli-0.3.0-py3-none-any.whl:
Publisher:
publish-results.yml on elliottower/reproducible-science
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
results_cli-0.3.0-py3-none-any.whl -
Subject digest:
adbe24765b5b76c37b8d41477b908fbcb67130ddbc167f56ae6b41a572883cbf - Sigstore transparency entry: 2604598466
- Sigstore integration time:
-
Permalink:
elliottower/reproducible-science@83230ff85f43bec602b8312bc9479b14fd2bb0c6 -
Branch / Tag:
refs/tags/v0.3.0 - Owner: https://github.com/elliottower
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-results.yml@83230ff85f43bec602b8312bc9479b14fd2bb0c6 -
Trigger Event:
push
-
Statement type: