Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

cube-harness banner

cube-harness

Open source harness for building and evaluating AI agents using the CUBE Standard.

CUBE Standard defines the benchmark protocol. cube-harness is the evaluation runtime: it runs agents against any CUBE-compatible benchmark, records trajectories, and scales execution with Ray.

[!NOTE] cube-harness is in active development (alpha). Interfaces may change. We welcome early adopters and contributors who want to shape the framework, not just use it. See our Roadmap and Contributing Guide.

Want to change the harness itself? Start with Changing cube-harness and the project Design Philosophy; the /gatekeep-rfc skill lets you check your own draft before anyone else reads it.

Have a benchmark to contribute? Fill out this short form — no commitment required. Want to go deeper? Apply to join the core team.

Quickstart

Installation

# Clone the repository
git clone https://github.com/The-AI-Alliance/cube-harness.git
cd cube-harness

# Install dependencies
make install

API Keys

Set your OpenAI API key:

export OPENAI_API_KEY=your-key-here

Any LiteLLM-supported provider works — just change model_name in the recipe.

Run Tests

make test

Run Hello Example

The hello_miniwob recipe demonstrates running a ReAct agent on the MiniWob benchmark.

Start here — first 2 tasks, in-process (fast, no Ray required):

make debug          # → uv run recipes/hello_miniwob.py --limit 2

Full benchmark (parallel via Ray):

make hello          # → uv run recipes/hello_miniwob.py

Configuration

A recipe is a declarative config file: it imports canonical configs by name, tweaks a few attributes, builds one or more Experiment objects, and ends with run(...). Copy a recipe from recipes/ and edit it — recipes are documentation-by-example, not a CLI.

from cube_harness.agents.genny_configs import GENNY_CONFIGS  # "default", "swe"
from cube_harness.infra import INFRA_CONFIGS                  # ~/.cube/infra.py; "local" built in
from cube_harness.recipe import run

agent = GENNY_CONFIGS["swe"]          # every lookup is a fresh deep copy
agent.budget.cost_limit = 2.0         # validated at the assignment site

exp = Experiment(name="x", agent_config=agent, benchmark_config=..., infra=INFRA_CONFIGS["local"])
if __name__ == "__main__":
    run(exp)                          # or run(exp_a, exp_b)

run() is the only CLI, identical for every recipe and not extensible: --limit N (first N tasks, in-process), --ray N (worker count), --set dotted.path=value (ad-hoc override). For anything structural, clone the file. Config objects are typed Pydantic models, serialized with every experiment for reproducibility.

Infra is machine-local in ~/.cube/infra.py (a dict[str, InfraConfig], never committed; credentials come from env). "local" works with zero setup. To use a cluster/cloud, copy recipes/infra_template.py to ~/.cube/infra.py and edit it — it documents the process and shows LocalInfraConfig plus commented Toolkit/Azure examples.

See docs/configuration.md for the full philosophy, a comparison with Hydra/YAML/CLI approaches, and how to run sweeps.

Experiment Viewer

cube-harness includes a Gradio-based XRay UI for exploring experiment results, trajectories, and OpenTelemetry spans:

make xray
# or: uv run ch-xray

The viewer displays:

  • Trajectory list — all runs with task ID, steps, reward, and duration
  • Visual timeline — color-coded steps (blue=environment, green=agent) with duration-based widths
  • Screenshots — environment state at each step
  • Step details — observations, agent actions, and LLM reasoning
  • Debug data — raw JSON, LLM calls, and tool configurations

cube-harness Viewer Screenshot

Architecture Overview

cube-harness is a universal evaluation platform for agentic benchmarks and an RL data generation framework built on top of the CUBE Standard.

Core Components

cube-harness Overview

  • Agent — LLM-powered decision maker that receives observations and produces actions
  • Environment — Executes actions, provides observations and rewards (tool + task composition)
  • Tool — Modular action provider that exposes an action space, reusable across benchmarks
  • ActionSpace — Defines the set of possible actions a tool can execute
  • Task — Defines goals, validation logic, and action subsets
  • Trajectory — Stores interaction history (observations, actions, rewards)
  • Episode — Single agent-environment loop for one task; records a trajectory
  • Benchmark — Collection of tasks; produces env configs for episodes
  • Experiment — Coordinates execution of multiple episodes across a benchmark
  • ExpRunner — Execution runtime (sequential or parallel via Ray)

Design Goals

  1. Benchmark Agnostic — Plug in any CUBE-standard benchmark (MiniWob, WebArena, OSWorld, …) via the Benchmark interface
  2. Agent Agnostic — Support any agent architecture by implementing the Agent protocol
  3. RL-Ready — Trajectory format designed for training data generation with full LLM call logging
  4. Scalable — Ray integration for parallel episode execution across multiple workers
  5. Observable — Structured trajectory output for analysis and debugging

Development

make format    # Format code
make lint      # Lint and auto-fix
make help      # Show all commands
make test      # Run tests
make coverage  # Run tests with coverage report

Pre-commit hooks

Install once after cloning to get ruff lint/format, trailing-whitespace checks, and DCO sign-off enforcement on every commit:

pre-commit install --hook-type pre-commit --hook-type commit-msg --hook-type prepare-commit-msg

The prepare-commit-msg hook automatically appends Signed-off-by: Your Name <email> to every commit message (required by the DCO). You can also sign off manually with git commit -s.

Project Structure

cube-harness/
├── src/cube_harness/   # Source code for the framework
├── tests/              # Test suite
├── recipes/            # Example recipes and configurations
├── docs/               # Project documentation
└── Makefile            # Common task shortcuts

Getting Involved

All contributions are welcome — open an issue, submit a PR, or wrap a new benchmark. See CONTRIBUTING.md for the development guide, DCO requirements, and RFC process.

Want deeper involvement? Join the core team, shape the roadmap, and get credit for what you build. Apply here.

For general AI Alliance contribution guidelines, see the community repo.

Metadata

Release files for cube-harness 0.1.0rc2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for cube-harness 0.1.0rc2
File Size Uploaded
cube_harness-0.1.0rc2.tar.gz 398.8 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for cube-harness 0.1.0rc2
File Interpreter ABI Platform
cube_harness-0.1.0rc2-py3-none-any.whl Python 3 none any Details

Total release size: 855.5 kB

Release files / cube_harness-0.1.0rc2.tar.gz

Download URL cube_harness-0.1.0rc2.tar.gz
Size 398.8 kB
Tags Source
SHA-256 checksum
How to use checksums
5ecd468f724985bd67c4eff72747d535623c877e09d6f4e04fc111dfadf0e63c
BLAKE2b-256 checksum
How to use checksums
e1e241254b22128e0e8459cbcbbf639d0442ae2f1fb3a2fa7b3313f49c572aec
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jun 19, 2026.

Transparency log

Release files / cube_harness-0.1.0rc2-py3-none-any.whl

Download URL cube_harness-0.1.0rc2-py3-none-any.whl
Size 456.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
a64f14bc029c7f64a22c2118c12f0645ec77bc408bfa2ada9939d4205290ccd6
BLAKE2b-256 checksum
How to use checksums
a7f1c4e50dc623a385400e7042b196f53d8d75dbfb41bb88181f4eddc99dedd1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jun 19, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.1.0rc2 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page