Skip to main content

A lightweight framework for managing AI research experiments with Claude Code

Project description

ox

A lightweight framework for managing AI research experiments with Claude Code at the heart of the workflow.

Like a good ox: strong work ethic, no tangles. Think of it as a yak that went to finishing school.

Install

uv add oxen-team

Quick Start

# Create a project
ox init my-research
cd my-research
uv sync

# Create a study
ox new study "learning rate schedules"

# Create an experiment
ox new experiment learning-rate-schedules "cosine-baseline" --tag lr --tag cosine

# Check what a script accepts
ox config-schema src/my_research/scripts/train.py

# Run it
ox run src/my_research/scripts/train.py \
  --config studies/learning-rate-schedules/experiments/cosine-baseline/config.yaml \
  --experiment cosine-baseline

# Query results
ox ls --study learning-rate-schedules
ox query "status = 'completed' ORDER BY updated_at DESC"
ox show cosine-baseline

How It Works

Write a training script with two conventions:

from pydantic import BaseModel
from ox import Tracker

class Config(BaseModel):
    lr: float = 1e-3
    batch_size: int = 32
    epochs: int = 10

def main(config: Config, tracker: Tracker) -> None:
    for epoch in range(config.epochs):
        loss = train_epoch(model, config)
        tracker.log({"loss": loss, "epoch": epoch}, step=epoch)

No argparse. No decorators. No registration. The Config class is your argument spec — ox generates CLI flags from the Pydantic model automatically.

Philosophy

  • Get out of the agent's way. Claude Code is the orchestrator. Ox provides composable primitives.
  • Convention over configuration. A Config class and a main function. That's it.
  • Everything in the repo. Experiments, configs, notes — all in version control.
  • Framework-agnostic. Use PyTorch, JAX, whatever. Ox handles config and tracking.
  • Skills over scaffolding. Complex workflows are Claude Code skills, not framework code.

Project Structure

After ox init, you get:

my-research/
├── CLAUDE.md                 # Master prompt for Claude Code
├── .claude/skills/           # Claude skill files (yours to customize)
├── ox.yaml                   # Project config
├── studies/                  # Research studies and experiments
├── src/my_research/scripts/  # Training entrypoints
└── .ox/metrics/              # Local tracker output (gitignored)

CLI Commands

Command Description
ox init <name> Scaffold a new project
ox new study <name> Create a study
ox new experiment <study> <name> Create an experiment
ox run <script> [--config PATH] [--experiment ID] Run a training script
ox ls [--study S] [--status S] [--tag T] List experiments
ox query <expression> SQL query over experiments
ox show <id> Show experiment details
ox status Show running experiments
ox config-schema <script> Print config JSON schema

Tracker

Metrics are logged via the Tracker interface:

tracker.log({"loss": 0.5, "acc": 0.9}, step=10)

Backends:

  • local (default) — JSONL files in .ox/metrics/
  • wandb — Weights & Biases (uv add 'oxen-team[wandb]')

Configure in ox.yaml:

tracker:
  backend: local
  output_dir: .ox/metrics

License

MIT

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

oxen_team-0.1.1.tar.gz (64.8 kB view details)

Uploaded Source

Built Distribution

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

oxen_team-0.1.1-py3-none-any.whl (29.0 kB view details)

Uploaded Python 3

File details

Details for the file oxen_team-0.1.1.tar.gz.

File metadata

  • Download URL: oxen_team-0.1.1.tar.gz
  • Upload date:
  • Size: 64.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for oxen_team-0.1.1.tar.gz
Algorithm Hash digest
SHA256 cf0b43a17a332b4b3a52ebda19d321bba5fc50691d2ee7693fd98e119f058cbf
MD5 472561033f0fdc41b755f2a262e610b0
BLAKE2b-256 9ae3b7e3af9c6b64e10e88d3de82f565e57a19e991a944fae62c8477b208693d

See more details on using hashes here.

Provenance

The following attestation bundles were made for oxen_team-0.1.1.tar.gz:

Publisher: publish.yml on tdfirth/ox

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

File details

Details for the file oxen_team-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: oxen_team-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 29.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for oxen_team-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 80464a3de5cd76d26e1200918da461f5810ab8d50f1c1bc55d9be7c20c68e3df
MD5 a3118b6f12c1ab7128998cc139246f05
BLAKE2b-256 aadb6e6b7412671affcc36bd68fa5fb44155d7bbedac988b4336228d8d3c0e9b

See more details on using hashes here.

Provenance

The following attestation bundles were made for oxen_team-0.1.1-py3-none-any.whl:

Publisher: publish.yml on tdfirth/ox

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

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