Skip to main content

AI-powered autonomous ML research framework — agent runs experiments against frozen evaluation contracts on your existing pipelines.

Project description

🥋 Dojo — An AI-powered autonomous ML research framework.

Dojo.ml logo

Run controlled, reproducible ML experiments on your existing pipelines and build a memory of what actually works.



What is Dojo?

You define a domain — a research area pointing at your data with a fixed evaluation contract. An AI agent runs experiments inside that contract: writing training code, calling frozen load_data and evaluate tools, logging metrics, and recording findings as durable knowledge atoms.

The agent owns the training code. The framework owns evaluation. That separation is what makes the metrics trustworthy run-over-run, and what makes it safe to leave the agent unsupervised.

What's a domain?

A domain is a frozen research contract: one load_data + one evaluate + one workspace. Many experiments live inside it.

  • Create a new domain when the data source, target variable, or evaluation metric changes.
  • Don't create a new domain when you want to try a new model, hyperparameter, or feature — that's an experiment, and experiments are the agent's job.

⚠️ Proof of Concept — under active development. Single-tenant, local-first, open source. Today only RegressionTask is supported; more task types are coming once regression is solid.


Quickstart — recommended path

The recommended way to onboard a real project is the dojo-onboard Claude Code skill. It reads your code, asks a few targeted questions about the data + evaluation, writes PROGRAM.md + SETUP.md from the conversation, and drives the framework to generate + verify + freeze the contract.

uv tool install dojoml              # one-time
dojo skill install dojo-onboard     # one-time, requires Claude Code
cd path/to/your/python/project
claude                              # in Claude Code, run: /dojo-onboard
dojo run                            # after the skill finishes

Prerequisites:

  • Python 3.11+
  • Claude Code installed (for the skill path)
  • The claude CLI logged in — Dojo shells out to it for agent runs (no ANTHROPIC_API_KEY needed)
  • (Optional) Docker, if you want experiments to run inside a containerised sandbox — see Run experiments inside Docker

Fallback — dojo onboard (no Claude Code)

If you don't have Claude Code, the built-in Typer wizard does the same setup interactively:

uv tool install dojoml
cd path/to/your/python/project
dojo onboard                        # interactive prompts
dojo run

For scripted / CI use, dojo onboard --non-interactive --name my-project writes default PROGRAM.md + SETUP.md templates and stops; edit the files, then run dojo domain setup.

Try a preset (tire-kicker)

To see Dojo work end-to-end on a canned dataset with no existing project:

mkdir housing && cd housing
dojo onboard --preset california_housing
dojo run --max-turns 30

Configuration

.dojo/config.yaml in your project root:

agent:
  backend: claude      # "stub" (no LLM, deterministic) or "claude"
tracking:
  backend: file        # "file" or "mlflow"

Env-var overrides use double underscore for nested fields: DOJO_AGENT__BACKEND=stub, DOJO_TRACKING__BACKEND=mlflow.

Run experiments inside Docker

By default, the agent's experiment scripts run in a host subprocess (LocalSandbox). For runaway training jobs that might OOM your laptop, opt into the containerised sandbox so each script runs inside an ephemeral docker run with --memory and --cpus limits — an OOM kills the container, not the host.

# .dojo/config.yaml
sandbox:
  backend: docker           # default "local"
  image: python:3.11-slim   # default — matches Dojo's minimum supported Python
  memory_limit: 8g          # optional; passed to `docker --memory`
  cpu_limit: "4"            # optional; passed to `docker --cpus`
  network: bridge           # default — set "none" for strict isolation

Or via env vars: DOJO_SANDBOX__BACKEND=docker DOJO_SANDBOX__MEMORY_LIMIT=8g.

When docker is selected, dojo domain setup builds a sibling .venv-docker/ next to your host .venv/ from your pyproject.toml or requirements.txt, so macOS users don't have to manage a Linux-compatible venv by hand. First setup pulls the image + installs deps (can take minutes); subsequent runs are instant. Add .venv-docker/ to your .gitignore. Delete the directory and re-run dojo domain setup to force a rebuild after dep changes.

Caveats: python:3.11-slim doesn't ship build tools — if your deps need native compilation (e.g. psycopg2 from source), point sandbox.image at a beefier image or one you've baked the deps into. OOMKilled (exit 137) and exec format error (exit 126) responses are tagged with a [dojo] marker in stderr explaining the fix.

Pointers

Development

Clone, then:

just dev                           # install backend (uv sync) + frontend (npm install)
just test                          # pytest -v
just lint                          # ruff check + format check

Full server + web UI dev loop: just run-stub (or just run-claude). Backend at http://localhost:8000, frontend at http://localhost:5173. The React frontend is not bundled in the PyPI release yet — run it from a checkout.

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

dojoml-0.0.23.tar.gz (122.8 kB view details)

Uploaded Source

Built Distribution

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

dojoml-0.0.23-py3-none-any.whl (168.2 kB view details)

Uploaded Python 3

File details

Details for the file dojoml-0.0.23.tar.gz.

File metadata

  • Download URL: dojoml-0.0.23.tar.gz
  • Upload date:
  • Size: 122.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for dojoml-0.0.23.tar.gz
Algorithm Hash digest
SHA256 c669e116fba12c40c99b7bfcb02675875ab7434ddcbe3d08ffff47324db81603
MD5 6aed797977d6292e777ce6d5d10ecd8a
BLAKE2b-256 f32a9b5215f03802c717014b9de746594c1b165c85bfffcfdaafb9d2829408d6

See more details on using hashes here.

Provenance

The following attestation bundles were made for dojoml-0.0.23.tar.gz:

Publisher: release.yml on Garsdal/Dojo

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

File details

Details for the file dojoml-0.0.23-py3-none-any.whl.

File metadata

  • Download URL: dojoml-0.0.23-py3-none-any.whl
  • Upload date:
  • Size: 168.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for dojoml-0.0.23-py3-none-any.whl
Algorithm Hash digest
SHA256 144897b7c444a8e39e2c7b0aa713abc76dd1bd07acf454917f921ea1a3fe4d2f
MD5 8b57fe95346fa5bb57f008a2d36b5311
BLAKE2b-256 cd61a45e049cc0cdcd078acf0bb6ed2611ad52cb48396bf96ca2414fbb95f192

See more details on using hashes here.

Provenance

The following attestation bundles were made for dojoml-0.0.23-py3-none-any.whl:

Publisher: release.yml on Garsdal/Dojo

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