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.0.tar.gz (59.9 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.0-py3-none-any.whl (28.3 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: oxen_team-0.1.0.tar.gz
  • Upload date:
  • Size: 59.9 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.0.tar.gz
Algorithm Hash digest
SHA256 1c46def20e033f20d22b23b4057c7d6d668bf421769a4dbb80a65a2779707b56
MD5 5ce1caeb8df827a7cc80eab056df2eaf
BLAKE2b-256 f123aafd6855112a14edb87d1bd4e5e40c362ff606a3717f7b3c86096f4a0b79

See more details on using hashes here.

Provenance

The following attestation bundles were made for oxen_team-0.1.0.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.0-py3-none-any.whl.

File metadata

  • Download URL: oxen_team-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 28.3 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.0-py3-none-any.whl
Algorithm Hash digest
SHA256 7bacd3579faa5bde296351b8622ece9037b6f0a028a4487ba0367aeb471522e5
MD5 55f5074f8493492cf3f214e756640a45
BLAKE2b-256 6da2182e43427de061c21fee7ab56117a14ee454ce3b73250db529078de79909

See more details on using hashes here.

Provenance

The following attestation bundles were made for oxen_team-0.1.0-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