TruAssure
Know what your AI agents actually did, not just what they said.
TruAssure is a black-box, evidence-based quality engineering framework for AI agents: chat assistants, task agents (LangGraph, OpenAI Agents SDK, custom loops) and multi-agent workflows. It judges every checkpoint on independent evidence (the agent's tool calls as a recording proxy saw them, its handoffs, the data it changed) and compares that with what the agent claims. It runs the same scenarios under injected faults, rephrasings and repeats, and turns the results into release decisions.
pip install truassure # the ta / truassure commands and the library
pip install "truassure[mcp,proxy,otel]" # plus the MCP server, the recording proxy and A2A tap, the OTel receiver
Python 3.11 or later, on Windows, Linux or macOS. MIT licence.
Five minutes, offline
ta demo # the whole tour on a scripted agent: no Docker, no LLM, no network
ta console --runs-dir ta_demo --open # browse the runs, reports, comparisons and gates
ta docs --open # the full guide, shipped inside the package
Test your own agent
ta new task my-agent-tests # or: ta new workflow ... / ta new chat ...
cd my-agent-tests # catalog.yaml, environment.py, truassure-gate.yaml, .env.example, README.md
ta validate catalog.yaml
ta run catalog.yaml --env environment:environment --repeats 3 --perturbations all
ta report latest
ta gate latest --policy truassure-gate.yaml
ta init --ci github --catalog catalog.yaml --env environment:environment # or --ci azure
Enterprise systems
pip install "truassure[postgres]" # or [sqlserver], [mysql], [oracle], [sql] for SQLAlchemy alone
from truassure.adapters.state.factory import make_state
from truassure.adapters.drivers.queue import QueueDriver, ServiceBusTransport
from truassure.profiles.task import task_environment
def environment(worker):
return task_environment(
name="claims",
driver=QueueDriver(ServiceBusTransport.from_env(), request="claims-events", reply="claims-results"),
state=[
make_state("oracle+oracledb://reader:***@db:1521/?service_name=CLAIMS", schema="CLAIMS"),
make_state("https://crm.test.example/api", resources={"cases": "/cases"}),
],
)
Any SQL database SQLAlchemy supports, read-only, with tables and keys found by reflection. A factory picks the
adapter from a URL or path. There are drivers for HTTP, chat, OpenAI-compatible endpoints, Azure Service Bus and
Kafka. ta library lists reusable scenario packs (privacy, prompt injection, unsafe writes, payments and
approvals, identity across handoffs, conversation handling, answers and boundaries, tone and policy) that a catalog
includes with its own parameters; each tags its scenarios with catalogue test types.
Across initiatives
pip install "truassure[s3]" # or [azure-blob], or [postgres] etc. for a database store; a folder needs nothing
ta push # share the latest run (store, initiative and team in truassure.yaml)
ta run catalog.yaml --env environment:environment --publish
ta portfolio --store s3://quality-results/truassure --csv portfolio.csv
ta console --store s3://quality-results/truassure --open
The portfolio shows every initiative and project: the latest gate verdict, pass rate, pass^k, open defects by
severity, the trend, and each run's report. Nothing is shared without ta push or --publish.
The starter project connects to an agent behind HTTP. Put ta proxy in front of the agent's tools, and
ta a2a between its agents, to get an independent record of every call and handoff and to inject faults.
How an agent is judged
Each checkpoint is judged at five stages, and TruAssure reports the first one that failed:
| Stage | Question |
|---|---|
| goal | Did it understand the request? |
| plan | Was its course sensible (steps, loops, handoffs, approvals before writes)? |
| action | Did it take only allowed, correct actions, with the right arguments, for the right person? |
| end state | Is the data right afterwards, and did nothing else change? |
| output | Is what it told the user true, complete and consistent with what it did? |
Seven evidence seams (SE-01 to SE-07) catch the failures an agent's own account hides. Examples: a call it reported that never happened, a write it never mentioned, success announced after a failure, a handoff that carries another customer's identity, and a different deployment that behaves differently.
What you get
- Profiles: conversational, task and workflow (handoffs, identity on every hop, failure containment).
- Reliability: repeats and perturbations, pass^k, robustness and flaky detection, plus fault injection in the tool server's own format.
- Change: run-by-run comparison, and deployment parity (model, host, framework) judged against run-to-run noise.
- Governance:
- defect lists (JSON and CSV) and JUnit for CI;
- capability packs and a release gate with per-capability thresholds;
- a 71-type test scorecard, with each type's catalogue metrics measured or marked not measured;
- grader calibration (Cohen's kappa), and rubric grading for tone and written policy.
- Reports: a customer-facing execution report (
execution-report.htmland.json): a readiness statement, KPI cards and charts, test-type and test-data coverage, persona views, findings with evidence and next actions, and the trend against the previous comparable run; personal details masked. Plus the one-file engineering report. - Sharing: a local token-protected console and a shared store across initiatives.
- Automation:
ta mcpgives an AI assistant one tool per command. GitHub Actions and Azure DevOps templates come fromta init. - Security defaults:
- listeners bind to 127.0.0.1 and need tokens;
- secrets come only from the environment or
.envand are never printed; - personal data is masked before evidence is stored, and retention is enforced.
Commands
| Command | Purpose |
|---|---|
demo, new, docs |
The offline tour, a starter project, the guide |
library |
The scenario library: list packs, show one, add it to a catalog |
push, pull, portfolio |
Share runs to a folder, S3 or Azure Blob store; copy them back; the cross-initiative view |
validate, translate |
Check catalogs; convert a suite catalog |
run, show, report, gc |
Run a catalog; inspect runs; the engineering and execution reports; retention |
compare, defects, junit, scorecard, pack, gate, calibrate |
Run-level analysis and governance |
init |
A CI pipeline that runs, reports and gates |
console, mcp |
The browser console; the MCP server |
proxy, a2a, otel |
Observers: recording MCP proxy, agent-to-agent tap, OpenTelemetry receiver |
ta <command> --help lists every option. Examples use fictitious data (Harbor Mutual).
Metadata
Release files for truassure 1.4.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| truassure-1.4.1.tar.gz | 1.8 MB | With provenance | Details for truassure-1.4.1.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| truassure-1.4.1-py3-none-any.whl | Python 3 | none | any | Details for truassure-1.4.1-py3-none-any.whl |
Total release size: 2.1 MB
Release files / truassure-1.4.1.tar.gz
| Download URL | truassure-1.4.1.tar.gz |
|---|---|
| Size | 1.8 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
07825526755da304f84bc18f2e27d1b5405707707ae7f2c22ed76665fdcc25ee
|
|
BLAKE2b-256 checksum How to use checksums |
b195e8898ee208aa975c8c2424ef455dd9a3d4b75dfd857c91480352bff6c04b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
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 Nov 8, 2026.
Transparency logRelease files / truassure-1.4.1-py3-none-any.whl
| Download URL | truassure-1.4.1-py3-none-any.whl |
|---|---|
| Size | 313.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
907d3bd232189d842cdfec1c10555c8cefc9207599d9acf4e4b44ba9fbfde6fc
|
|
BLAKE2b-256 checksum How to use checksums |
b3abe144839d47a8fc3878e36633aceda3aabf4af553d780e961e1e3269aad8f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
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 Nov 8, 2026.
Transparency logSecurity for truassure 1.4.1
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.
Full provenance
Both files in this release have been uploaded with provenance metadata.
Attestation for truassure-1.4.1.tar.gz
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 Nov 8, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.