Skip to main content

Local-first, zero-server experiment tracking for researchers

Project description

bathos

PyPI Python 3.12+ 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

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 <campaign-id> — associate this run with a campaign
  • --no-sidecar — bypass sidecar enforcement (use for ad-hoc runs)

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 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 campaign — Manage experiment campaigns (v0.3+)

  • bth campaign create <id> --hypothesis <text> — create a new campaign
  • bth campaign add <run-id> --campaign <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.

Project details


Download files

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

Source Distribution

bathos-0.4.1.tar.gz (269.2 kB view details)

Uploaded Source

Built Distribution

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

bathos-0.4.1-py3-none-any.whl (80.4 kB view details)

Uploaded Python 3

File details

Details for the file bathos-0.4.1.tar.gz.

File metadata

  • Download URL: bathos-0.4.1.tar.gz
  • Upload date:
  • Size: 269.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.15 {"installer":{"name":"uv","version":"0.11.15","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}

File hashes

Hashes for bathos-0.4.1.tar.gz
Algorithm Hash digest
SHA256 4824afc6db8ef5966685e4c24fa931dddb2139242fc3f0902116f15abc84ba53
MD5 5de68ad2c5e0c0093620c3ab4b4856d2
BLAKE2b-256 d5b6c82c4621d28b8d280c6f88e24bfb65f2bbe2e43534fd180a8dc442063bba

See more details on using hashes here.

File details

Details for the file bathos-0.4.1-py3-none-any.whl.

File metadata

  • Download URL: bathos-0.4.1-py3-none-any.whl
  • Upload date:
  • Size: 80.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.15 {"installer":{"name":"uv","version":"0.11.15","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}

File hashes

Hashes for bathos-0.4.1-py3-none-any.whl
Algorithm Hash digest
SHA256 c79f2e68f4b8d51ad1dfa9b151e3dc3b83f945e383a3d5452ccf4668517268ab
MD5 3f1807975f61e225591727a48cef525b
BLAKE2b-256 b7b054a4e7f34ee016a1fb2e4b21a10d9d5b19272f82700773c16265980c0874

See more details on using hashes here.

Supported by

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