Skip to main content

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 + 0600 limit exposure but are not a vault. OS-keychain backing is a planned follow-up (#49).

Learn more

Changelog

https://github.com/davorrunje/defendable-science/blob/main/CHANGELOG.md

License

Apache-2.0.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

defendable_science-0.2.2.tar.gz (51.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

defendable_science-0.2.2-py3-none-any.whl (58.6 kB view details)

Uploaded Python 3

File details

Details for the file defendable_science-0.2.2.tar.gz.

File metadata

  • Download URL: defendable_science-0.2.2.tar.gz
  • Upload date:
  • Size: 51.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for defendable_science-0.2.2.tar.gz
Algorithm Hash digest
SHA256 2bc863af64306f5d830b37a92b5dc52160a24207404832f9b067380380ce0f35
MD5 1238e75301401e0b6fe448fb9f4b945d
BLAKE2b-256 6b6c933d089488e788f1b4ec7392c77547a1d7152f3271f5f7fd963d0d632139

See more details on using hashes here.

Provenance

The following attestation bundles were made for defendable_science-0.2.2.tar.gz:

Publisher: publish.yml on davorrunje/defendable-science

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file defendable_science-0.2.2-py3-none-any.whl.

File metadata

File hashes

Hashes for defendable_science-0.2.2-py3-none-any.whl
Algorithm Hash digest
SHA256 7e6103c5702210b48839b762f5c9e56cc8a93ae609077731c30370dccdc02816
MD5 4e0572b89d7a397aa92d6aeab33c2c3c
BLAKE2b-256 fe39bca77c57af2b8d6b163b5e0051a3738e3bb100becab0726a091737f7cd46

See more details on using hashes here.

Provenance

The following attestation bundles were made for defendable_science-0.2.2-py3-none-any.whl:

Publisher: publish.yml on davorrunje/defendable-science

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

This release

0.2.2 This release

2 files

0.2.1

2 files

0.2.0

2 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page