meterbility-agent (Python SDK)
The Python counterpart to @meterbility/agent. Wire any Python LLM agent into
Meterbility by capturing one Step per model call. Runs land in the same
~/.meter/meterbility.db store the TypeScript SDK, the CLI, and the web UI
read from — so a Python agent shows up in meter list and meter web
immediately, with no separate ingest step.
Install
pip install -e packages/agent-py # core only (stdlib)
pip install -e 'packages/agent-py[anthropic]' # add the Anthropic helper
Requires Python 3.9+. Core has zero runtime dependencies (it uses
sqlite3, hashlib, json, pathlib from the standard library).
Minimal usage
from meterbility_agent import MeterbilityTracer
with MeterbilityTracer(project="my-app", agent="support") as tracer:
step = tracer.start_step(
model="claude-opus-4-7",
system_prompt="you are helpful",
history=[{"role": "user", "content": "hello"}],
)
# ... call your model, then record what it did ...
step.record_message("hi back!").record_tokens(
input=10, output=2, cached_read=0, cache_creation=0
)
step.end()
Then in another terminal:
meter list
meter inspect <run-id>
meter web # see it live alongside any Claude Code / Codex runs
Anthropic shortcut
If you already use the official anthropic Python SDK, wrap the client
once and every messages.create() call is captured automatically:
from anthropic import Anthropic
from meterbility_agent import MeterbilityTracer, trace_anthropic
with MeterbilityTracer(project="my-app", agent="support") as tracer:
client = trace_anthropic(tracer, Anthropic()) # API-compatible wrapper
resp = client.messages.create(
model="claude-opus-4-7",
max_tokens=512,
system="you are helpful",
messages=[{"role": "user", "content": "hello"}],
)
# one Meterbility Step captured per call — including tool_use, tokens, latency.
The wrapped client behaves identically to the underlying Anthropic
client — it returns the same Message object, exposes the same
attributes, and re-raises the same exceptions (recording them as
error outcomes before the throw bubbles).
Multi-step agent loop
For multi-step agents that call tools, drive each step manually:
from meterbility_agent import MeterbilityTracer, tool_call_action
with MeterbilityTracer(project="my-app", agent="rag") as tracer:
history = [{"role": "user", "content": "what's the weather in NYC?"}]
# turn 1: model picks a tool
step1 = tracer.start_step(model="claude-opus-4-7", history=history)
step1.record_action(tool_call_action("weather", {"city": "NYC"}, "tu_1"))
step1.record_tokens(input=120, output=20)
step1.end()
# run the tool yourself ...
tool_result = {"temp_f": 68, "conditions": "clear"}
# turn 2: feed the tool result back, model produces a message
history += [
{"role": "assistant", "content": "[tool_call weather]"},
{"role": "tool", "content": str(tool_result)},
]
step2 = tracer.start_step(model="claude-opus-4-7", history=history)
step2.record_message("It's 68°F and clear in NYC.")
step2.record_tokens(input=150, output=15)
step2.end()
What's captured per step
| Field | Source |
|---|---|
model |
required arg to start_step() |
system_prompt, tool_definitions, history, retrieved_docs |
optional context components (blob-stored, content-addressed) |
action |
record_message() / record_tool_call() / record_action() |
outcome |
record_tool_result() / record_outcome() |
tokens (input / output / cached_read / cache_creation [5m] / cache_creation_1h) |
record_tokens() |
cost_cents |
computed from tokens via the same pricing table the TS side uses |
latency_ms |
wall-clock since start_step(), or explicit via record_tokens(latency_ms=...) |
tags |
step.tag("x") — cost:approx auto-applied for unknown models |
Configuration
| Env var | Effect |
|---|---|
METERBILITY_HOME |
Override the data directory (default ~/.meter) |
METERBILITY_REDACT=off |
Disable regex redaction of API keys / bearer tokens / private keys |
Run the tests
cd packages/agent-py
python -m unittest discover -s tests -v
Tests redirect METERBILITY_HOME to a tempdir per test, so they never touch
your real ~/.meter store.
Metadata
Release files for meterbility-agent 0.6.5
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| meterbility_agent-0.6.5.tar.gz | 60.2 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| meterbility_agent-0.6.5-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 90.2 kB
Release files / meterbility_agent-0.6.5.tar.gz
| Download URL | meterbility_agent-0.6.5.tar.gz |
|---|---|
| Size | 60.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
48df845f22e6624d6801998172f9055520ec45327fd4e2f5e66c0df4acef7dc9
|
|
BLAKE2b-256 checksum How to use checksums |
8c7b325407b710360f7bddcbfd3f6ff6dc37477a426bc8cd2099811d3bdb83a3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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 Aug 27, 2026.
Transparency logRelease files / meterbility_agent-0.6.5-py3-none-any.whl
| Download URL | meterbility_agent-0.6.5-py3-none-any.whl |
|---|---|
| Size | 30.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
385cc49692b4b1ef91cd4322bd6465853cb706675004e26df3392b813ed3cf9e
|
|
BLAKE2b-256 checksum How to use checksums |
5df08927e69ca22e60efeaefa8408d8067cc4ab51c6bca70cbded9f9c75eccf6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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 Aug 27, 2026.
Transparency log