Defendable Science
Research you can defend.
Defendable Science helps you keep research honest — especially now that AI is in the loop. You (not the AI) make and sign off every material decision, and you must be able to explain and defend the work; the tool keeps the accounts, advises, and probes. It supports honest, disclosable AI-assisted research — it does not certify that any work is honest.
This package is the CLI / tooling behind the
defendable-science Claude Code plugin.
The plugin (skills + methodology) stays pure-markdown; this package provides the
defendable-science command it calls — literature, dataset, defend, backlog,
and doctor — installed isolated, so it never touches your project's ML
environment.
Install
uv tool install defendable-science # recommended (isolated tool env)
# or: pipx install defendable-science
# or: pip install defendable-science
defendable-science --version
defendable-science doctor # reports python / uv / rclone
Documentation: https://defendable.science/
CLI
defendable-science --version
defendable-science doctor # environment report
defendable-science literature resolve|cites|refs|enrich|neighbors # citation graph (OpenAlex + S2)
defendable-science dataset validate|ingest|emit # manifest + Croissant
defendable-science dataset fetch|verify|mirror|audit # SHA-256 retrieval + rclone mirror
defendable-science defend record # understanding-status record
defendable-science backlog park|add|list|rank|promote|drop # exploration backlog
defendable-science keys set|list|check|unset|path # API-key & credential store
Every command is implemented and emits JSON (the skills parse it). Failures are
surfaced honestly: a rate-limit or transient network error is retried with
backoff (honoring Retry-After) and, if it persists, reported as a distinct,
actionable message — never a silent "not found" and never a traceback. A missing
API key or rclone binary is reported cleanly, and an optional key (e.g.
S2_API_KEY) simply lifts the rate ceiling — see
API keys & credentials.
API keys & credentials
Some services throttle hard without a key. Providing one is optional (the tooling degrades gracefully) but lifts the ceiling:
| Key | Service | What it buys | How to obtain |
|---|---|---|---|
S2_API_KEY |
Semantic Scholar | Rate limit well above the shared keyless pool. | https://www.semanticscholar.org/product/api#api-key |
OPENALEX_MAILTO |
OpenAlex | The "polite pool" (a contact email) — faster, more reliable. | https://docs.openalex.org/how-to-use-the-api/rate-limits-and-authentication |
RCLONE_CONFIG_<REMOTE>_* |
Private dataset mirror | rclone remote credentials passed as scoped env vars (no config file). | Per your rclone remote. |
Keys live in a CLI-managed JSON store at .defendable-science/keys.json
(gitignored, created 0600), read with os.environ > store > unset
precedence, so an environment variable always wins. Manage it with keys:
defendable-science keys set S2_API_KEY # hidden prompt, or reads piped stdin
echo "$MY_KEY" | defendable-science keys set S2_API_KEY
defendable-science keys set < keys.json # a JSON object sets many at once
defendable-science keys list # presence + source (never the value)
defendable-science keys check | unset | path
The value is read only from stdin or a hidden prompt — never argv — so it never
hits your shell history or the process list, and list/check/doctor report
presence only.
Plaintext at rest. The store is not encrypted; gitignore +
0600limit exposure but are not a vault. OS-keychain backing is a planned follow-up (#49).
Learn more
- Documentation: https://defendable.science/
- User guide: https://defendable.science/get-started/user-guide
- Plugin, source & full design record: https://github.com/davorrunje/defendable-science
- Disclose your AI use & cite Defendable Science: https://github.com/davorrunje/defendable-science/blob/main/DISCLOSURE.md
Changelog
https://github.com/davorrunje/defendable-science/blob/main/CHANGELOG.md
License
Metadata
Release files for defendable-science 0.2.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| defendable_science-0.2.2.tar.gz | 51.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| defendable_science-0.2.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 110.2 kB
Release files / defendable_science-0.2.2.tar.gz
| Download URL | defendable_science-0.2.2.tar.gz |
|---|---|
| Size | 51.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
2bc863af64306f5d830b37a92b5dc52160a24207404832f9b067380380ce0f35
|
|
BLAKE2b-256 checksum How to use checksums |
6b6c933d089488e788f1b4ec7392c77547a1d7152f3271f5f7fd963d0d632139
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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 Aug 26, 2026.
Transparency logRelease files / defendable_science-0.2.2-py3-none-any.whl
| Download URL | defendable_science-0.2.2-py3-none-any.whl |
|---|---|
| Size | 58.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
7e6103c5702210b48839b762f5c9e56cc8a93ae609077731c30370dccdc02816
|
|
BLAKE2b-256 checksum How to use checksums |
fe39bca77c57af2b8d6b163b5e0051a3738e3bb100becab0726a091737f7cd46
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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 Aug 26, 2026.
Transparency log