This release is a pre-release and may not be stable for production use.
bathos
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 projectbth run— execute and track an experimentbth ls— list recent runsbth show <run-id>— display run detailsbth find— search runs by criteriabth sql— raw DuckDB query against catalogbth check— check catalog runs for git-drift freshnessbth lineage <run-id>— show ancestor chain following parent_run_id linksbth sprint-audit [--hours N]— audit recent runs across all registered projectsbth lint [--project-root PATH]— check scripts/ for naming conventions and missing sidecarsbth new-experiment <name>— scaffold a new experiment script and sidecarbth migrate— upgrade cool-tier Parquet fragments to current schema versionbth migrate-to-project-subdirs [--dry-run]— move flat catalog runs intoruns/<slug>/subdirs (v0.4+)bth export— export the using-bathos skill and register MCP serverbth export --html [--out report.html] [--project slug] [--campaign id]— self-contained HTML report (requiresbathos[viz])bth view [--port 8080] [--project slug] [--no-open]— local FastAPI dashboard (requiresbathos[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 byproject_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.tomldisables filtering (pushes all projects)
bth remote — Manage sync remotes
bth remote add <name> <url>— add an SSH remote for catalog syncbth remote list— list configured remotesbth remote remove <name>— remove a remotebth 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.tomlfile (refutation consistency, asset checksums, git drift)
bth campaign — Manage experiment campaigns (v0.3+)
bth campaign create <id> --hypothesis <text>— create a new campaignbth campaign add <run-id> --campaign-id <id>— associate a run with a campaignbth campaign ls— list campaignsbth campaign show <id>— show campaign details and runsbth campaign review <id>— statistical summary and anomaly detectionbth 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.0a6
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| bathos-0.13.0a6.tar.gz | 2.2 MB | Without provenance | Details for bathos-0.13.0a6.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| bathos-0.13.0a6-py3-none-any.whl | Python 3 | none | any | Details for bathos-0.13.0a6-py3-none-any.whl |
Total release size: 3.0 MB
Release files / bathos-0.13.0a6.tar.gz
| Download URL | bathos-0.13.0a6.tar.gz |
|---|---|
| Size | 2.2 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
e11b6fd82ee4089154dc7cd2b20217d4e63957215dfd054051270b165fa15537
|
|
BLAKE2b-256 checksum How to use checksums |
ea03311319538ea76602d8078e2f4b085f79ce2fa24ac5478c6f46f78c8f8259
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.1 {"installer":{"name":"uv","version":"0.13.1","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.0a6-py3-none-any.whl
| Download URL | bathos-0.13.0a6-py3-none-any.whl |
|---|---|
| Size | 731.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
56de7a7ccb31f6f0a5c13f576c16bfab80b56a7c6fd57a5753cf0643cecaefe0
|
|
BLAKE2b-256 checksum How to use checksums |
e0cfc6e835d512e4759287b42bfb885d30702b220bf01d98247dce62d6adb473
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.1 {"installer":{"name":"uv","version":"0.13.1","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.0a6
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.