Deterministic execution recording and replay for AI agents
Project description
Fixtura
Deterministic execution recording and replay for AI agents — turn real agent runs into regression tests.
What this is
Fixtura is a framework-agnostic execution-assurance layer that sits underneath whichever orchestration framework a team already uses (like LangGraph or CrewAI). It watches an AI agent's tool calls, records everything that happens through a permission-checked execution layer, and lets you replay that recording later — deterministically, without touching live systems — to debug failures or gate CI on regressions.
It's built to work with OpenEval, a deterministic (non-LLM-judge) agent evaluation engine already built and published separately. Fixtura produces the recordings; OpenEval scores them.
Why this exists
Most "agent observability" tools (Langfuse, Phoenix, Braintrust, Laminar) are built for production monitoring at scale. Fixtura's angle is narrower and more testable: recorded traces as literal test fixtures, replayable offline, usable to gate pull requests the same way unit test snapshots do. See ARCHITECTURE.md for why this is scoped the way it is, and what was deliberately cut.
Status
🎯 v1.0.6 is released. See ROADMAP.md for future features like counterfactual replay (Live Branching).
OpenEval Adapter (optional, manual install required)
The OpenEval evaluation harness (Acceptance Test 4) relies on OpenEval, which is currently unpublished on PyPI. Note that the openeval namespace on PyPI is occupied by an unrelated placeholder package.
Because PyPI's Warehouse strictly rejects git URL dependencies, Fixtura cannot automatically install OpenEval for you. Installing fixtura[eval] will currently not pull down the adapter's dependencies.
To use the OpenEval Adapter, you must explicitly install openeval-core from its git repository as a separate manual step:
pip install git+https://github.com/yash161004/OpenEval.git@4cb6cfe362c770a7674f5b0111ff54646883709b
Without this, importing fixtura.tools.openeval_adapter will raise a RuntimeError prompting this manual installation.
Documents in this repo
| Doc | Purpose |
|---|---|
| ARCHITECTURE.md | System design, components, data flow |
| THREAT_MODEL.md | Trust boundaries, what could go wrong, mitigations |
| ROADMAP.md | Frozen v1 scope table + acceptance tests + v1.1/v2 future work |
| docs/TRACE_FORMAT_SPEC.md | Exact schema every recording must produce |
| docs/COLLABORATION.md | How the project's owners work together |
Core components
- Tool Execution Layer
- Permission Engine
- Execution Recorder + Sanitizer
- Passive Replay + Step Inspection
- Trace Viewer UI (minimal)
- OpenEval adapter (evaluation harness reuse)
License
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
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 fixtura-1.0.7.tar.gz.
File metadata
- Download URL: fixtura-1.0.7.tar.gz
- Upload date:
- Size: 22.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
90b0e67b5bdb3dc9939698efc30e804193d246cc0ca768eb7ac24d52e578c76a
|
|
| MD5 |
5c6f5304d89984c753991525352ace75
|
|
| BLAKE2b-256 |
05968b4b17622cadb760f41e0938f3bd3b5de3594923c705f2add03db1486b32
|
File details
Details for the file fixtura-1.0.7-py3-none-any.whl.
File metadata
- Download URL: fixtura-1.0.7-py3-none-any.whl
- Upload date:
- Size: 28.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fe12a1f733142cbf3fdc4300f7c5f0fa7fbc5da15a18609d0054801a5ed4f176
|
|
| MD5 |
442b8eb80519c0666fea7726cb3334a4
|
|
| BLAKE2b-256 |
2cc27e055ca89f560656612c576479f102cda9ad1a3baa362ea516d9fcbeb131
|