Skip to main content

Deterministic reliability testing for tool-using AI agents

Project description

ToolGauntlet

ToolGauntlet by HiLo Labs is a Python package and CLI for deterministic reliability testing of tool-using AI agents.

Public guide: labs.hilomedia.com/products/toolgauntlet. Support: labs.hilomedia.com/support.

Install

pip install toolgauntlet
toolgauntlet --version

The distribution, primary CLI, and public Python import are all toolgauntlet. The prerelease agent-chaos commands and agent_chaos import remain available as compatibility aliases.

Quick start (CLI)

Generate a complete local baseline with no API key:

toolgauntlet quickstart --out-dir toolgauntlet-quickstart

This writes JSON, Markdown, and HTML baseline reports plus a copyable next-step regression command. It uses the built-in deterministic adapter with safe logging enabled and refuses to overwrite its files unless --force is supplied.

Build a custom workflow manually:

toolgauntlet list-suites
toolgauntlet init-suite --id my_suite_v1 --out-dir suites
toolgauntlet run --suite ecommerce_refunds_v1 --runs 10 --out report.json
toolgauntlet report --in report.json --format md --out report.md
toolgauntlet report --in report.json --format html --out report.html

Use a saved baseline as a release gate:

toolgauntlet run --suite ecommerce_refunds_v1 --runs 25 --out baseline.json
toolgauntlet run \
  --suite ecommerce_refunds_v1 \
  --runs 25 \
  --baseline baseline.json \
  --fail-on-regression \
  --regression-tolerance 1.0 \
  --out candidate.json

See the copyable CI workflow in docs/ci-gate-example.md and a sample report in docs/sample-reports/ecommerce_refunds_v1.md.

Before release, run the same local gate used for MVP validation:

scripts/release_gate.sh

Verify the configured external launch stage (live page now; registries as the stage advances):

python scripts/check_launch_readiness.py

Signed pack workflow:

export TOOLGAUNTLET_PACK_KEY=your-shared-signing-key
toolgauntlet sign-pack --suite suites/my_suite_v1
toolgauntlet verify-pack --suite suites/my_suite_v1
toolgauntlet run --suite suites/my_suite_v1 --verify-pack --out report.json

OpenTelemetry traces (optional):

pip install "toolgauntlet[otel]"
# Requires an OTLP/HTTP collector reachable at the default endpoint,
# or pass --otel-endpoint with your collector URL.
toolgauntlet run --suite ecommerce_refunds_v1 --runs 5 --otel-enabled --otel-metrics-enabled

Quick start (Python)

from toolgauntlet import SuiteConfig, run_suite
from toolgauntlet.adapters import deterministic_demo_agent

report = run_suite(
    agent=deterministic_demo_agent,
    suite_path="ecommerce_refunds_v1",
    config=SuiteConfig(runs=10, concurrency=2),
)

report.save_json("report.json")
report.save_markdown("report.md")

OpenAI-compatible adapter

from toolgauntlet import SuiteConfig, run_suite
from toolgauntlet.adapters import OpenAICompatibleAdapterConfig, make_openai_tool_loop_adapter

agent = make_openai_tool_loop_adapter(
    OpenAICompatibleAdapterConfig(
        model="gpt-4o-mini",
        base_url="https://api.openai.com",
    )
)

report = run_suite(
    agent=agent,
    suite_path="ecommerce_refunds_v1",
    config=SuiteConfig(runs=5, concurrency=1),
)

Additional adapter helpers

  • make_async_adapter: use async agent callables with the synchronous harness interface.
  • make_langchain_like_adapter: adapt invoke/ainvoke-style runnables.

See examples in examples/adapters/.

Budget-as-Code Proxy

Start and validate:

toolgauntlet-proxy validate-policy --policy examples/budget_proxy/policy.example.yaml
toolgauntlet-proxy serve \
  --host 127.0.0.1 \
  --port 8080 \
  --policy examples/budget_proxy/policy.example.yaml \
  --ledger logs/usage-ledger.sqlite

One-command local stack (proxy + redis + optional otel/prometheus):

docker compose --env-file .env.proxy -f docker-compose.proxy.yml up --build

See full guide: docs/compose-deployment.md

Build and preview site pages locally:

pip install -e ".[dev,site]"
toolgauntlet build-site --pages-root site/pages/toolgauntlet --out-dir site/dist/toolgauntlet
python -m http.server 8787 --directory site/dist

Key endpoints:

  • GET /healthz
  • GET /metrics
  • GET /v1/models
  • POST /v1/chat/completions
  • POST /v1/responses
  • POST /admin/reload-policy

Common environment variables:

  • OPENAI_API_KEY or BUDGET_UPSTREAM_API_KEY
  • BUDGET_PROXY_API_KEY
  • BUDGET_POLICY_PATH
  • BUDGET_AUDIT_LOG_PATH
  • BUDGET_LEDGER_PATH
  • BUDGET_PROJECT_HEADER
  • BUDGET_PROJECT_API_KEY_HEADER
  • BUDGET_METRIC_NAMESPACE
  • BUDGET_RATE_LIMIT_BACKEND (memory or redis)
  • BUDGET_REDIS_URL (required when backend is redis)
  • BUDGET_REDIS_KEY_PREFIX
  • BUDGET_OTEL_ENABLED
  • BUDGET_OTEL_METRICS_ENABLED
  • BUDGET_OTEL_SERVICE_NAME
  • BUDGET_OTEL_ENDPOINT

To enable distributed rate limiting across proxy instances, install Redis support:

pip install "toolgauntlet[redis]"

Included suites

  • ecommerce_refunds_v1
  • support_triage_v1
  • travel_booking_v1

Documentation

Marketing and launch materials

Backlog and roadmap

Release workflows

GitHub Actions workflows included:

  • .github/workflows/ci.yml
  • .github/workflows/launch-readiness.yml
  • .github/workflows/venture-ops.yml
  • .github/workflows/lead-intake.yml
  • .github/workflows/release.yml

Publishing uses trusted publishing via pypa/gh-action-pypi-publish.

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

toolgauntlet-0.1.1.tar.gz (50.1 kB view details)

Uploaded Source

Built Distribution

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

toolgauntlet-0.1.1-py3-none-any.whl (68.5 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for toolgauntlet-0.1.1.tar.gz
Algorithm Hash digest
SHA256 c3c1a322d22ed9f73e63b92674a718acca73a4221143e2bc0c0f38d5f604c4d6
MD5 b86a2a7f494dbbccbb14ba5333b88a85
BLAKE2b-256 b600713ea729a4a499a79607c01e8107d255c13eb2973623bce9abca23e9bb38

See more details on using hashes here.

Provenance

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

Publisher: release.yml on josephnilo/agent-chaos

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

File details

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

File metadata

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

File hashes

Hashes for toolgauntlet-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 4e81e1af0ff8ed4e7c506b7697a310f6bdf8c7ab9b0c5e234d6b9cbadbeb9313
MD5 0cfa4e70c1ec3c07ffd6b4c2d022ea89
BLAKE2b-256 7cbe57212fe292e4e5f8f3ff346ce2ac6ff4ec1d77e52335d2d4b8d6543d8109

See more details on using hashes here.

Provenance

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

Publisher: release.yml on josephnilo/agent-chaos

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