Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

bathos

PyPI Python 3.13+ License: Apache 2.0 Documentation

Public alpha — experimental software. bathos is under active development and should be considered a work in progress. APIs, catalog schema, and CLI commands may change between releases without a deprecation period. It is used in production by the author, but expect rough edges and missing features. Feedback and bug reports welcome.

Local-first, zero-server experiment tracking for researchers working across multiple projects and SLURM clusters.

Never lose track of what ran, what it produced, or whether results are still valid.

Install

uv tool install bathos           # base install (includes Rich CLI)
uv tool install 'bathos[viz]'    # adds bth view + bth export --html

Quick start

# Register this project (creates .bth.toml + scripts/ skeleton)
bth init

# Run and track an experiment
bth run scripts/experiments/benchmark_tip3p.py -- --n-steps 1000 --out outputs/run1.parquet

# Query recent runs
bth ls --since 7d
bth show <run-id>

# Check catalog runs for git-drift freshness
bth check [--status <status>] [--check-outputs]

# Escape hatch: raw DuckDB SQL against the catalog
bth sql "SELECT project_slug, count(*) FROM runs GROUP BY 1"

bth run flags

v0.3+ flags:

  • --agent-mode collaborative|autonomous — declare whether this run is agent-driven
  • --derived-from <run-id> — record parent run for lineage tracking
  • --campaign-id <campaign-id> — associate this run with a campaign
  • --no-sidecar — bypass sidecar enforcement (use for ad-hoc runs)
  • --output-paths <path> (repeatable) — register output files produced by this run
  • --tags <tag> (repeatable) — attach search tags to this run

CLI Reference

Core commands:

  • bth init — initialize bathos in a project
  • bth run — execute and track an experiment
  • bth ls — list recent runs
  • bth show <run-id> — display run details
  • bth find — search runs by criteria
  • bth sql — raw DuckDB query against catalog
  • bth check — check catalog runs for git-drift freshness
  • bth lineage <run-id> — show ancestor chain following parent_run_id links
  • bth sprint-audit [--hours N] — audit recent runs across all registered projects
  • bth lint [--project-root PATH] — check scripts/ for naming conventions and missing sidecars
  • bth new-experiment <name> — scaffold a new experiment script and sidecar
  • bth migrate — upgrade cool-tier Parquet fragments to current schema version
  • bth migrate-to-project-subdirs [--dry-run] — move flat catalog runs into runs/<slug>/ subdirs (v0.4+)
  • bth export — export the using-bathos skill and register MCP server
  • bth export --html [--out report.html] [--project slug] [--campaign id] — self-contained HTML report (requires bathos[viz])
  • bth view [--port 8080] [--project slug] [--no-open] — local FastAPI dashboard (requires bathos[viz])

bth sync — Sync cool-tier catalog to/from cluster (v0.4+: per-project filtered)

  • bth sync [<remote>] — push only this project's runs to the remote (filtered by project_slug)
  • bth sync [<remote>] --pull — pull only this project's runs from the remote
  • Output: Pushed 47 runs (filtered 275 from other projects) to 'engaging' in 1.2s
  • Config: sync_filter = "none" in .bth.toml disables filtering (pushes all projects)

bth remote — Manage sync remotes

  • bth remote add <name> <url> — add an SSH remote for catalog sync
  • bth remote list — list configured remotes
  • bth remote remove <name> — remove a remote
  • bth remote test <name> — test SSH connectivity to a remote

bth postmortem — Retrospective tracking for completed experiments (v0.4.1+)

  • bth postmortem validate <file> — validate a *.bth.postmortem.toml file (refutation consistency, asset checksums, git drift)

bth campaign — Manage experiment campaigns (v0.3+)

  • bth campaign create <id> --hypothesis <text> — create a new campaign
  • bth campaign add <run-id> --campaign-id <id> — associate a run with a campaign
  • bth campaign ls — list campaigns
  • bth campaign show <id> — show campaign details and runs
  • bth campaign review <id> — statistical summary and anomaly detection
  • bth campaign conclude <id> --outcome <label> — close campaign with outcome

Script conventions

bth init scaffolds the following structure in your project:

Directory Purpose Naming Tracked
scripts/experiments/ Typer experiment runners verb_noun.py Yes
scripts/analysis/ Post-hoc analysis and plots verb_noun.py Optional
scripts/validation/ Correctness checks verb_noun.py Optional
scripts/benchmarks/ Performance benchmarks verb_noun.py Yes
scripts/data/ Data pipeline / conversion verb_noun.py No
scripts/slurm/ SLURM job files + env helpers verb_noun.slurm Via wrapper
scripts/debug/ Debug specific issues YYMMDD_desc.py No
scripts/explore/ Open-ended investigation YYMMDD_desc.py No
scripts/scratch/ Catchall / ephemeral YYMMDD_desc.py No (gitignored)

Python decorator

For Typer-based scripts that want direct integration:

import bth

@bth.experiment(name="benchmark_tip3p", tags=["tip3p", "nvt"])
def main(n_steps: int, out: Path):
    ...

SLURM

bth init generates a scripts/slurm/_bth_env.sh helper. Source it in job scripts to get automatic provenance capture for batch runs.

Catalog

All runs land in ~/.bth/catalog/ as DuckDB + Parquet. Query with bth ls, bth find, or raw bth sql.

Documentation

Full documentation is available at https://bathos.readthedocs.io.

Metadata

Release files for bathos 0.13.0a8

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for bathos 0.13.0a8
File Size Uploaded Provenance Actions
bathos-0.13.0a8.tar.gz 2.8 MB Without provenance Details for bathos-0.13.0a8.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for bathos 0.13.0a8
File Interpreter ABI Platform Actions
bathos-0.13.0a8-py3-none-any.whl Python 3 none any Details for bathos-0.13.0a8-py3-none-any.whl

Total release size: 3.7 MB

Release files / bathos-0.13.0a8.tar.gz

Download URL bathos-0.13.0a8.tar.gz
Size 2.8 MB
Tags Source
SHA-256 checksum
How to use checksums
9ad4e09e7db61325a2c822d98b934b30fbf4a4c6f804d70db219479f5e110799
BLAKE2b-256 checksum
How to use checksums
590465d11fb5d64967954e052272b73a3bde2ff236b90a3107aa67a478401ad1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.13.6 {"installer":{"name":"uv","version":"0.13.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / bathos-0.13.0a8-py3-none-any.whl

Download URL bathos-0.13.0a8-py3-none-any.whl
Size 957.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
760364e7619edd735a35f22fcf6274a7a07f0d6ebde8e4d6219052c5b74f9937
BLAKE2b-256 checksum
How to use checksums
4100da145601ffad73f166285646fef70e64fb17ac184aef3f0df5d47a61893f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.13.6 {"installer":{"name":"uv","version":"0.13.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Security for bathos 0.13.0a8

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.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page