Stoneburner
Atomics — Agentic token usage benchmarking platform
A continuous, cron-schedulable benchmarking harness that runs realistic everyday tasks against LLM providers to measure token consumption, cost, throughput, and performance trends over time. Supports tiered usage profiles, multiple providers (including local Ollama), and a full security evaluation suite.
New here? Start with QUICKSTART.md — copy-pasteable commands grouped by goal.
Contributing? Read ARCHITECTURE.md — layer map, primitives, how to add an eval suite.
Table of Contents
- Quick Start
- Providers
- Burn Tiers
- Key Commands
- Security Suites
- Load Testing
- Thinking Mode
- Configuration
- Secrets Management
- Architecture
- Running Tests
- Further Reading
Quick Start
# from a clone
uv sync
# or from PyPI, once a release has been uploaded
uv add stoneburner-atomics
uv tool install stoneburner-atomics
export ANTHROPIC_API_KEY=sk-ant-...
uv run atomics provider-test # verify connection
uv run atomics run -n 5 # run 5 benchmark tasks
uv run atomics report # view results
# other providers
uv run atomics run --provider openai -n 5
uv run atomics run --provider bedrock --region us-east-1 -n 5
uv run atomics run --provider ollama -n 5
Providers
| Provider | Flag | Install |
|---|---|---|
| Claude (Anthropic) | --provider claude (default) |
uv sync |
| Bedrock (AWS) | --provider bedrock --region us-east-1 |
uv sync --extra bedrock |
| OpenAI / Codex | --provider openai |
uv sync --extra openai |
| Ollama (local) | --provider ollama |
uv sync (uses httpx) |
| brain-gateway | --provider brain-gateway |
uv sync (uses httpx) |
| Groq (cloud) | --provider groq |
uv sync (uses httpx) |
| Together AI (cloud) | --provider together |
uv sync (uses httpx) |
| Google Gemini | --provider gemini |
uv sync (uses httpx) |
| llama.cpp (local) | --provider llamacpp |
uv sync (uses httpx) |
| vLLM (OpenAI-compat) | --provider vllm |
uv sync (uses httpx) |
Compare providers after running benchmarks: uv run atomics compare — see docs/COMPARING.md for model classes, metrics fidelity, and judge accuracy.
Optional extras: Real RAG retrieval (
atomics rag-index,atomics rag-retrieval,atomics rag --index) requiresuv sync --extra ragto installsqlite-vecandsentence-transformers. Bedrock and OpenAI providers need--extra bedrockand--extra openairespectively.
The API server mode requires uv sync --extra api to install FastAPI and uvicorn. Add --with-dashboard to serve a read-only web UI at /dashboard. Serving atomics to LLM agents over MCP (atomics mcp) requires uv sync --extra mcp; it proxies a running API server and inherits that server's authentication and spend ceilings. See docs/MCP_SERVER.md.
Burn Tiers
| Tier | Tasks | Model | Interval | Budget | Tokens/hr |
|---|---|---|---|---|---|
| ez | Light only | Haiku 4.5 | 300s | $5 | 15k |
| baseline | Light + Moderate | Sonnet 4.6 | 120s | $50 | 100k |
| mega | All (incl. Heavy) | Sonnet 4.6 | 30s | $250 | 500k |
uv run atomics run --tier ez -n 3 -i 5
uv run atomics tiers # show all tier profiles
Key Commands
| Command | Description |
|---|---|
atomics run |
Start benchmarking loop |
atomics compare |
Provider/model side-by-side comparison |
atomics report |
Usage reports and trends |
atomics eval |
Quality evaluation suite |
atomics adversarial |
Adversarial resilience eval (72 fixtures) |
atomics toolcall |
Tool-call divergence: refuses in prose, complies via function call (20 fixtures) |
atomics redblue |
Red/blue security capability eval (10 fixtures) |
atomics refusal |
Over- vs under-refusal calibration (12 fixtures) |
atomics codereview |
Planted-vuln detection in snippets and diffs (8 fixtures) |
atomics judge-agreement |
Same generation, N judges; pairwise agreement and majority-flip rate |
atomics labcompare |
Two-host throughput + quality bench-off |
atomics stress |
GPU saturation testing |
atomics soak |
Long-duration stability test |
atomics rag |
RAG pipeline evaluation (grounding, faithfulness, abstention) — also supports real retrieval from an indexed corpus |
atomics rag-index |
Build a sqlite-vec index from local documents for real RAG retrieval |
atomics rag-retrieval |
Measure retrieval quality (recall@k, precision@k, MRR, nDCG@k) from an index |
atomics multiturn |
Multi-turn conversation eval (context retention, coherence) |
atomics advisor |
Cost optimization recommendations from historical data |
atomics codegen |
Code generation eval (functional correctness via test execution) |
atomics sweep |
Overnight multi-suite driver (--suites, --runs 3, status file + detachable log) |
atomics doctor |
Installation health check |
atomics server |
Run atomics as an HTTP API server |
atomics mcp |
Expose atomics to LLM agents over MCP (proxies the API server) |
Full reference: docs/CLI_REFERENCE.md
Security Suites
Six eval suites for LLM security assessment:
| Suite | What it measures | Fixtures |
|---|---|---|
| adversarial | Resistance to manipulation (prompt injection, jailbreaks, MCP attacks) | 72 |
| toolcall | Whether a prose refusal survives contact with a function call | 20 |
| redblue | Offensive/defensive security capability (OSINT, vuln analysis, IR) | 10 |
| refusal | Over-refusal vs under-refusal calibration | 12 |
| codereview | Vulnerability detection in code snippets and diffs | 8 |
| archreview | Security architecture reasoning against whole repos | per-repo |
Plus probe (live infrastructure analysis) and sweep (multi-model ranked comparison).
Full documentation: docs/SECURITY_SUITES.md · Leaderboards: adversarial · red/blue
Load Testing
| Command | Purpose |
|---|---|
atomics stress |
Ramp concurrency to find GPU saturation point |
atomics soak |
Long-duration stability with drift analysis |
atomics scenario |
Mixed-workload simulation with SLA scoring |
atomics capacity |
User load projection from stress data |
atomics labcompare |
Two-host throughput + quality bench-off |
Full documentation: docs/LOAD_TESTING.md
Thinking Mode
Auto-detects reasoning-capable models (Claude extended thinking, OpenAI o-series, Ollama qwen3) and tracks thinking tokens separately.
uv run atomics run --provider ollama -m qwen3:14b -n 5 # auto-detected
uv run atomics run --provider claude --thinking -n 5 # explicit
uv run atomics run --provider openai -m o3 --no-thinking # forced off for A/B
Full documentation: docs/THINKING.md
Configuration
Set via environment variables (prefix ATOMICS_) or .env file:
| Variable | Default | Description |
|---|---|---|
ANTHROPIC_API_KEY |
— | Claude provider |
OPENAI_API_KEY |
— | OpenAI provider |
ATOMICS_DEFAULT_MODEL |
claude-sonnet-4-6 |
Default model |
ATOMICS_OLLAMA_HOST |
http://localhost:11434 |
Ollama endpoint |
ATOMICS_OLLAMA_MODEL |
qwen2.5:7b |
Default Ollama model |
ATOMICS_OLLAMA_TIMEOUT |
300 |
Per-request timeout (s) |
ATOMICS_DB_PATH |
(platform) | SQLite location |
ATOMICS_BUDGET_LIMIT_USD |
50.00 |
Cost cap per run |
Database defaults: macOS: data/atomics.db · Linux: ~/.local/share/atomics/atomics.db (XDG)
CLI flags (--tier, --budget, --interval) override these at runtime.
Secrets Management
Layered resolution: environment variable → .env file → OS keychain (macOS Keychain / Linux secret-service).
atomics secrets set ANTHROPIC_API_KEY # store securely (hidden input)
atomics secrets list # verify
atomics secrets delete ANTHROPIC_API_KEY
Architecture
stoneburner/
├── atomics/ # Core Python package
│ ├── api/ # HTTP API server (FastAPI) — runs, evals, reports, jobs, dashboard
│ ├── commands/ # Click command modules (auth, admin, benchmark, eval, security, load, api, worker, distributed)
│ ├── distributed/ # Coordinator + worker for split and fleet runs
│ │ ├── coordinator.py
│ │ ├── models.py
│ │ ├── worker_client.py
│ │ ├── worker_runner.py
│ │ ├── routes.py
│ │ ├── rollup.py # Per-worker aggregation of fleet results
│ │ └── auth.py
│ ├── core/ # Loop engine, task runner, rate/budget guard
│ ├── eval/ # Evaluation framework (eval, adversarial, redblue)
│ ├── probe/ # Live ecosystem probe suite
│ ├── archreview/ # Security-architecture repo benchmark
│ ├── providers/ # LLM adapters (Claude, Bedrock, OpenAI, Ollama, vLLM, brain-gateway)
│ ├── storage/ # SQLite metrics persistence (schema v20)
│ ├── scheduler/ # Cron/systemd/launchd generation and installation
│ └── cli.py # Thin Click root — registers commands from commands/
├── profiles/ # Custom target profiles (local/ gitignored)
├── qa/ # QA fixture suites (local/ gitignored)
├── tests/ # 2289 tests at 89% coverage
└── docs/ # Detailed documentation
See ARCHITECTURE.md for the full layer map and contributor guide.
Running Tests
The api extra is required to run the suite: the API and distributed test
modules import FastAPI at module scope, so without it pytest errors during
collection instead of skipping. The mcp extra is not required for collection
— those tests skip if the SDK is missing — but CI installs it so the MCP
surface is actually tested. Sync it locally too.
uv sync --extra dev --extra api --extra mcp
uv run pytest -q
uv run pytest -q --cov=atomics --cov-report=term-missing --cov-fail-under=85
The suite drives FastAPI's TestClient, an in-process shim, so it proves the
logic but not that the pieces work as separate processes. For that:
uv run python scripts/smoke_fleet.py
This starts a real coordinator and real worker processes, runs a two-host fleet
job against a stubbed OpenAI-compatible endpoint, then kills a worker mid-run to
confirm the job resolves to partial instead of waiting on a dead host. It needs
no credentials and no model, and touches no real database.
Further Reading
| Document | Description |
|---|---|
| QUICKSTART.md | Recipe-first guide grouped by goal |
| CONTRIBUTING.md | Setup, the checks CI runs, and project conventions |
| ARCHITECTURE.md | Layer map, primitives, contributor guide |
| SECURITY.md | Vulnerability reporting and operational security considerations |
| CHANGELOG.md | Version history |
| RELEASING.md | Release process, versioning and tag conventions |
| ROADMAP.md | Priorities and future directions |
| docs/CLI_REFERENCE.md | Full CLI command reference |
| docs/API_SERVER.md | HTTP API server, authentication, distributed runs, dashboard |
| docs/MCP_SERVER.md | MCP server for LLM agents, tool surface, trust model |
| docs/SECURITY_SUITES.md | Security evaluation suites |
| docs/ADVERSARIAL_SUITES.md | Adversarial fixture flow, scoring, and categories |
| docs/LOAD_TESTING.md | Stress, soak, scenario, capacity testing |
| docs/COMPARING.md | Provider comparison, model classes, judge accuracy |
| docs/THINKING.md | Thinking/reasoning mode internals |
| docs/LEADERBOARD.md | Adversarial resistance leaderboard |
| docs/LEADERBOARD-REDBLUE.md | Red/blue capability leaderboard |
| docs/FRONTIER_COMPARISON.md | Local vs frontier model comparison |
| docs/INFERENCE_ENV.md | Vendor-neutral inference control file spec |
License
MIT — see LICENSE.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file stoneburner_atomics-0.18.0.tar.gz.
File metadata
- Download URL: stoneburner_atomics-0.18.0.tar.gz
- Upload date:
- Size: 1.0 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
uv/0.12.5 {"installer":{"name":"uv","version":"0.12.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c0374830c31db6aba59156f18ffc7e53c64cc2c2e0b8dccc22a19e9bc18d3328
|
|
| MD5 |
86c457faab9e1114479105767b522dbd
|
|
| BLAKE2b-256 |
b6371f48e5ad563aee0c58f79c46326ccfc176f961f90d0d9086e05e9245d6e5
|
File details
Details for the file stoneburner_atomics-0.18.0-py3-none-any.whl.
File metadata
- Download URL: stoneburner_atomics-0.18.0-py3-none-any.whl
- Upload date:
- Size: 474.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
uv/0.12.5 {"installer":{"name":"uv","version":"0.12.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
53bc923415ecc5d3a52962785f51dfa6b75a13510b16ca2cf190b92f6d8746ca
|
|
| MD5 |
07b5b7c6e5fb51e7f7fa679a8c5015ab
|
|
| BLAKE2b-256 |
a51faafc68dce588239ddc3fcdf966bf784ed49a1a70764930f9c9e3f7f9a766
|