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.1.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.1-py3-none-any.whl (58.6 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: defendable_science-0.2.1.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.1.tar.gz
Algorithm Hash digest
SHA256 d9376bc6f3b4e845fb0d0dfc11cbf7a3585756a75a07e11de64cbdbfba84bbe5
MD5 2ed57d78728ce6e420417893473ccbc0
BLAKE2b-256 6851168fc56d5b623af51369ae00a3cc3eb86582c4fbd8846bd35ab32b20bf16

See more details on using hashes here.

Provenance

The following attestation bundles were made for defendable_science-0.2.1.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.1-py3-none-any.whl.

File metadata

File hashes

Hashes for defendable_science-0.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 030902ec3aa7351b00bb6c9ccfef7b6961051ba346bb0d55a39b7b31d3061c8a
MD5 9ce359537a8e17d45be6a173d3ad44a8
BLAKE2b-256 8a7f57f93f49db70c592889c17977ab8a4d1917b52b4cede1bafe65c14b38ff3

See more details on using hashes here.

Provenance

The following attestation bundles were made for defendable_science-0.2.1-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

0.2.2

2 files

This release

0.2.1 This release

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