Skip to main content

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)

Source distribution for meterbility-agent 0.6.5
File Size Uploaded
meterbility_agent-0.6.5.tar.gz 60.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for meterbility-agent 0.6.5
File Interpreter ABI Platform
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 log

Release 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

Release history Release notifications | RSS feed

This release

0.6.5 This release

2 release files

0.6.4

2 release files

0.6.2

2 release files

0.6.1

2 release files

0.6.0

2 release files

0.5.1

2 release files

0.5.0

2 release files

0.4.0

2 release files

0.3.1

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