results
Seal a run, record what it produced, and verify the chain.
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 that tells Claude when to reach for the CLI.
/plugin marketplace add elliottower/results
/plugin install results@results
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.1.0.tar.gz.
File metadata
- Download URL: results_cli-0.1.0.tar.gz
- Upload date:
- Size: 9.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1e8f3b8a9f22df176c04c24e3d5c46883ba97a2a756e69698d8bec51a1e71232
|
|
| MD5 |
db19baffb2aad2dd02e5f7b8010a5d4b
|
|
| BLAKE2b-256 |
4965836c9e245d9a0440abdaa7ced548566136d825d1eab0f5a65bc37d4b6d13
|
Provenance
The following attestation bundles were made for results_cli-0.1.0.tar.gz:
Publisher:
publish.yml on elliottower/results
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
results_cli-0.1.0.tar.gz -
Subject digest:
1e8f3b8a9f22df176c04c24e3d5c46883ba97a2a756e69698d8bec51a1e71232 - Sigstore transparency entry: 2500322030
- Sigstore integration time:
-
Permalink:
elliottower/results@7c823bb6549917081832e992d79b2592a9113d1f -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/elliottower
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@7c823bb6549917081832e992d79b2592a9113d1f -
Trigger Event:
release
-
Statement type:
File details
Details for the file results_cli-0.1.0-py3-none-any.whl.
File metadata
- Download URL: results_cli-0.1.0-py3-none-any.whl
- Upload date:
- Size: 7.5 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 |
1ae0716c8327860005fdc9a79984279acbccdb72c7a224cc7c41f40aa85176c8
|
|
| MD5 |
defcd8c9bf3424f3ee199061aa7c8782
|
|
| BLAKE2b-256 |
0b0565171551df76c648fe429280fbbd25c2fbc9e6681c863e3724a3ff0053d3
|
Provenance
The following attestation bundles were made for results_cli-0.1.0-py3-none-any.whl:
Publisher:
publish.yml on elliottower/results
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
results_cli-0.1.0-py3-none-any.whl -
Subject digest:
1ae0716c8327860005fdc9a79984279acbccdb72c7a224cc7c41f40aa85176c8 - Sigstore transparency entry: 2500322038
- Sigstore integration time:
-
Permalink:
elliottower/results@7c823bb6549917081832e992d79b2592a9113d1f -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/elliottower
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@7c823bb6549917081832e992d79b2592a9113d1f -
Trigger Event:
release
-
Statement type: