Skip to main content

Stoneburner

PyPI Python License: MIT CI

Local-first LLM evaluation: token cost, quality, and security suites. The same commands cover a laptop Ollama box and a cloud API.

Install stoneburner-atomics. The CLI and the import stay atomics. (atomics on PyPI is a different package; stoneburner is too similar to an existing stone-burner.)

This is a desk tool, not a research harness and not an unsupervised agent. It records cost, quality, and security-suite results in SQLite. A finished-looking percentage on a partial run is the failure mode it is built to avoid: incomplete coverage prints n/a (scored/total scored) and JSON nulls the headline.

atomics doctor ends with one Next: command when the check is healthy. Typical first-run output (Ollama on localhost, no cloud key):

$ atomics doctor
Python 3.13.11 OK
Platform: Darwin (arm64)
Database path: data/atomics.db
SQLite database OK (readable / creatable)
ANTHROPIC_API_KEY not set (optional; needed for Claude)
OPENAI_API_KEY not set (optional; needed for OpenAI)
inference.env: not found (optional; $INFERENCE_ENV or /etc/agentic/inference.env)
Ollama endpoint: http://localhost:11434
Ollama reachable — 3 model(s): qwen2.5:7b, gemma3:4b, llama3.2:3b

Next: atomics provider-test --provider ollama --no-thinking
      Ollama is reachable.
$ atomics toolcall --provider ollama --channel tools --runs 3 --no-thinking

Summary
  tool-capable: yes
  outcomes: safe call=6  no call=14
  channel divergence (resisted in prose, complied with tools): not measured (no qualifying fixtures)
  response divergence (dangerous call, refusing text): not measured (no qualifying fixtures)
  cost: $0.0000

A tools-only first run is valid. Channel divergence needs a second model as judge. Thinking models that spend the token budget on hidden reasoning are recorded as thinking_budget, not as a mystery generation failure.

New here? QUICKSTART — copy-pasteable commands grouped by goal.

Contributing? ARCHITECTURE — layer map, primitives, how to add an eval suite.

Table of Contents

Install

Ollama on http://localhost:11434 is the one-box path. No cloud key required.

uv tool install stoneburner-atomics
atomics doctor
atomics provider-test --provider ollama --no-thinking
atomics toolcall --provider ollama --channel tools --runs 3 --no-thinking

--no-thinking keeps reasoning models from spending the whole token budget on hidden chain-of-thought. A tools-only toolcall run is a valid first run; channel divergence needs a second model as judge.

API, MCP, or RAG extras:

uv tool install 'stoneburner-atomics[api,mcp]'
uv add 'stoneburner-atomics[rag]'          # from another project

From a clone, uv sync --all-extras. Bare uv sync drops the API, MCP, RAG, and test extras.

Cloud providers work the same way once a key is set:

export ANTHROPIC_API_KEY=sk-ant-...
atomics provider-test
atomics run -n 5
atomics report

atomics run --provider openai -n 5
atomics run --provider bedrock --region us-east-1 -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: atomics compare — see COMPARING for model classes, metrics fidelity, and judge accuracy.

Optional extras: from PyPI, uv add 'stoneburner-atomics[rag]' (or [bedrock], [openai], [api], [mcp]). From a clone, uv sync --all-extras. RAG is atomics rag-index / rag-retrieval / rag --index. atomics server --with-dashboard serves the read-only UI at /dashboard. atomics mcp proxies a running API server and inherits that server's authentication and spend ceilings. See MCP_SERVER.

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: CLI_REFERENCE

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: SECURITY_SUITES · 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: LOAD_TESTING

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: THINKING

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/                # 2500+ tests
└── docs/                 # Detailed documentation

See ARCHITECTURE 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 --all-extras
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

Links are absolute so they work on PyPI as well as GitHub.

Document Description
QUICKSTART Recipe-first guide grouped by goal
CONTRIBUTING Setup, the checks CI runs, and project conventions
ARCHITECTURE Layer map, primitives, contributor guide
SECURITY Vulnerability reporting and operational security considerations
CHANGELOG Version history
RELEASING Release process, versioning and tag conventions
ROADMAP Priorities and future directions
CLI_REFERENCE Full CLI command reference
API_SERVER HTTP API server, authentication, distributed runs, dashboard
MCP_SERVER MCP server for LLM agents, tool surface, trust model
SECURITY_SUITES Security evaluation suites
ADVERSARIAL_SUITES Adversarial fixture flow, scoring, and categories
LOAD_TESTING Stress, soak, scenario, capacity testing
COMPARING Provider comparison, model classes, judge accuracy
THINKING Thinking/reasoning mode internals
LEADERBOARD Adversarial resistance leaderboard
LEADERBOARD-REDBLUE Red/blue capability leaderboard
FRONTIER_COMPARISON Local vs frontier model comparison
INFERENCE_ENV 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

stoneburner_atomics-0.18.2.tar.gz (1.0 MB view details)

Uploaded Source

Built Distribution

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

stoneburner_atomics-0.18.2-py3-none-any.whl (483.4 kB view details)

Uploaded Python 3

File details

Details for the file stoneburner_atomics-0.18.2.tar.gz.

File metadata

  • Download URL: stoneburner_atomics-0.18.2.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

Hashes for stoneburner_atomics-0.18.2.tar.gz
Algorithm Hash digest
SHA256 e9b49688e4382b6f991d520bf29e83f6a5d773412be974600e8d64751694a9a2
MD5 092cda6007be6da578f89e946d0b90fa
BLAKE2b-256 cff082ea1a43de443bbd75ff1edf767835e6807a6cc3db15a81d4b3577226c88

See more details on using hashes here.

File details

Details for the file stoneburner_atomics-0.18.2-py3-none-any.whl.

File metadata

  • Download URL: stoneburner_atomics-0.18.2-py3-none-any.whl
  • Upload date:
  • Size: 483.4 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

Hashes for stoneburner_atomics-0.18.2-py3-none-any.whl
Algorithm Hash digest
SHA256 8f2b46192dac501bcb71f295b01a2b10acc19d689fffc650f3746bfd94d01aeb
MD5 59fa1057bb3cff4325832f1551fe9f78
BLAKE2b-256 0403c73a8831a3e9a1a859f16ca2cd983a61b8775b78a7e3541f55d50bafb56e

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page