Skip to main content

Record, replay, fork & share AI agent executions

Project description

retrace-sdk

The execution replay engine for AI agents. Record every LLM call, tool invocation, and error your AI agent makes. Replay step-by-step. Fork from any point. Share interactive traces via URL.

Install

pip install retrace-sdk

Requires Python 3.10+.

Quick Start

import retrace

retrace.configure(api_key="rt_live_...")  # Get your key at retrace.yashbogam.me/settings

@retrace.record(name="my-agent")
def run_agent(prompt: str):
    response = client.chat.completions.create(
        model="gpt-5.5",
        messages=[{"role": "user", "content": prompt}]
    )
    return response.choices[0].message.content

run_agent("What is quantum computing?")

Auto-Instrumentation

Retrace automatically captures LLM calls from all major providers:

# OpenAI — captured automatically
# Anthropic — captured automatically
# Google Gemini — captured automatically

No extra setup needed. Install the provider SDK alongside retrace-sdk and calls are captured.

Features

  • Record — One decorator captures every LLM call, tool call, and error
  • Replay — Step through executions with play/pause/speed controls
  • Fork — Branch from any step, modify input, watch a new path diverge
  • Share — Publish traces as shareable "tapes" with interactive playback
  • Retrace AI — Built-in evaluations, memory extraction, and semantic search

Resumable Execution (Cascade Replay)

Mark a function as resumable to enable full cascade replay from the dashboard:

@retrace.record(name="my-agent", resumable=True)
def run_agent(prompt: str):
    plan = call_planner(prompt)
    result = call_executor(plan)
    return summarize(result)

When you fork at any span in the dashboard, the SDK re-executes the entire function with modified input — all subsequent LLM calls diverge.

Error Handling

from retrace import RetraceError, RetraceAuthError, RetraceCreditsExhaustedError, RetraceRateLimitError, RetraceEnforcementError

Enforcement (Circuit Breakers)

Hard ceilings that stop a runaway agent before the next call. Local limits are enforced offline (zero network); server_enforcement=True also consults centrally-managed server policies.

import retrace
from retrace import RetraceEnforcementError

retrace.configure(
    api_key="rt_live_...",
    max_steps_per_run=50,
    max_usd_per_run=2.0,
    server_enforcement=True,  # optional: also consult server policies
)

try:
    run_agent("...")
except RetraceEnforcementError as e:
    print(e.verdict, e.reason)  # e.g. "block", "Local USD ceiling reached: ..."

Precedence: explicit arg > env var (RETRACE_MAX_STEPS_PER_RUN, RETRACE_MAX_TOKENS_PER_RUN, RETRACE_MAX_USD_PER_RUN, RETRACE_SERVER_ENFORCEMENT) > unset. If the server check is unreachable, local limits still apply.

Multi-Agent Context

Tag spans with an agent id/role so the dashboard can draw the agent topology and run inter-agent detectors (ping-pong, reasoning–action mismatch, task derailment):

import retrace

with retrace.agent("planner", role="planner"):
    plan = call_planner(prompt)
with retrace.agent("executor", role="executor"):
    result = call_executor(plan)

Golden Cassettes (CI Regression Gates)

Record a run as a golden cassette and gate on it offline in CI with retrace ci replay:

from retrace import write_golden_cassette

write_golden_cassette("golden.json", recorder=rec)

Sampling

retrace.configure(api_key="rt_live_...", sample_rate=0.1)  # Record 10% of traces

Changelog

0.13.0

  • Multi-agent contextretrace.agent(id, role=...) context manager tags spans for topology + inter-agent detectors

  • Golden cassetteswrite_golden_cassette(path, recorder=...) records a run as a CI regression fixture

  • Pre-call enforcement gate — local step/token/USD-per-run ceilings enforced offline; RetraceEnforcementError raised instead of silently skipping the call

  • Sessionssession_id parameter in TraceRecorder to group multi-turn conversations

  • Multi-Agentagent_id field on Span for cross-agent tracing

  • Guardrail support — SDK respects HALT commands from server-side guardrail policies

0.2.2

  • Version sync with TypeScript SDK

0.6.0

  • Token ID capture — Span dataclass now supports token_ids and logprobs fields for speculative decoding during replay
  • Serializationto_dict() includes token_ids/logprobs when present

0.2.1

  • Offline buffer — stores up to 1000 messages when WebSocket disconnects, flushes on reconnect
  • Dedicated listener thread — receives server 'resume' commands without needing active sends
  • Cascade replayresumable=True registers function for SDK-level re-execution
  • Fixed — duplicate except block in transport, proper close() cleanup

0.2.0

  • Typed errors (RetraceAuthError, RetraceCreditsExhaustedError, RetraceRateLimitError)
  • Trace sampling via sample_rate config
  • Auto-instrumentation for OpenAI, Anthropic, Gemini
  • WebSocket transport with auto-reconnect

Links

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

retrace_sdk-0.13.0.tar.gz (143.6 kB view details)

Uploaded Source

Built Distribution

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

retrace_sdk-0.13.0-py3-none-any.whl (56.7 kB view details)

Uploaded Python 3

File details

Details for the file retrace_sdk-0.13.0.tar.gz.

File metadata

  • Download URL: retrace_sdk-0.13.0.tar.gz
  • Upload date:
  • Size: 143.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.13

File hashes

Hashes for retrace_sdk-0.13.0.tar.gz
Algorithm Hash digest
SHA256 936b5feb73037f3bd114c9e410d5b0adf9d816bc1ddab807282ec7ddc96359ec
MD5 1b6bc86e30c4120a6f33fc36dfb8d45b
BLAKE2b-256 903cbffc08043a70f78240066b43f50d84a14301d0a0f737beab21185f115933

See more details on using hashes here.

File details

Details for the file retrace_sdk-0.13.0-py3-none-any.whl.

File metadata

  • Download URL: retrace_sdk-0.13.0-py3-none-any.whl
  • Upload date:
  • Size: 56.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.13

File hashes

Hashes for retrace_sdk-0.13.0-py3-none-any.whl
Algorithm Hash digest
SHA256 09b53fc7ccd290a0380a2322a21c474f65d8d17ca6260be4bb0068f21f5d4a24
MD5 4af808c1a4ed89a5938d6247792f1633
BLAKE2b-256 36445bb15ceb9222554d95be3c6ec5fcde08c85d2af3c5b9915c9f6a5a59a770

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 Pingdom Monitoring Sentry Error logging StatusPage Status page