aer1-openai-agents
AER-1 verifiable workflow receipts for the OpenAI Agents SDK. One line of integration turns any traced agent run into an offline-verifiable receipt (draft-zambo-aer1, Section 8) covering every model call, tool call, and agent step.
For per-tool-call receipts, see openai-agents-zambo.
The AER-1 framework collector family
The OpenAI Agents SDK collector in the AER-1 framework collector family. Any agent running on these frameworks can emit verifiable AER-1 execution receipts: every step recorded, hash-chained, one Merkle root over the whole run.
- aer1-smolagents, SmolAgents agents via step callbacks
- aer1-openai-agents, the OpenAI Agents SDK via its TracingProcessor
- aer1-crewai, CrewAI crews via the event bus
- aer1-langgraph, LangGraph swarms via callback handler
- aer1-autogen, AutoGen multi-agent chats
Install
pip install aer1-openai-agents
Use (copy, paste, run, no API keys needed)
# pip install aer1-openai-agents
import asyncio
from agents import Agent, Runner, function_tool
from agents.testing.model import ScriptedModel, assistant_message, function_call
from aer1_openai_agents import install
@function_tool
def get_weather(city: str) -> str:
"""Get the weather for a city."""
return f"Sunny in {city}"
async def main():
processor = install(goal="Check the weather")
scripted = ScriptedModel(steps=[
[function_call("get_weather", {"city": "Austin"}, call_id="call_1")],
[assistant_message("It is sunny in Austin.")],
])
agent = Agent(name="weather", instructions="Answer briefly.",
tools=[get_weather])
agent.model = scripted # swap for your real model in production
result = await Runner.run(agent, "What is the weather in Austin?")
receipt = processor.finalize(final_answer=result.final_output)
assert processor.verify(receipt) == [] # VALID
processor.save("receipt.json", receipt)
asyncio.run(main())
install() registers the receipt processor directly. Prefer the
standard path in production if you also want the SDK's own tracing
dashboard:
from agents.tracing import add_trace_processor
from aer1_openai_agents import AER1TracingProcessor
processor = AER1TracingProcessor(goal="Summarize the quarterly report")
add_trace_processor(processor)
install() additionally skips the SDK's backend trace exporter, so no
trace data leaves your machine and proxy-heavy environments cannot fail
at registration time. Either way the integration is: register the
processor, run the agent, finalize. The processor implements the SDK's
TracingProcessor interface, the same pattern other observability
integrations use.
What you get
A JSON receipt with the AER-1 Section 8 workflow members:
type,version,workflow_id,receipt_id,session_idgoal,status,output_hash,verify_urlsteps: one per ended SDK span (model calls, tool calls, agent boundaries, handoffs), each withseq,receipt_id,tool,receipt_hash,started_at,ended_at,statusmerkle_root: the Section 8.1 root over the ordered step receipt ids
Each step's receipt_hash is SHA-256 over the canonical JSON of the
span's observed content, so the hash commits to what the agent actually
did. verify() re-checks everything offline: all 14 Table 2/3 member
requirements, seq ordering 1..n, no duplicate step receipt ids, and the
Merkle root recomputed.
Verify
from aer1_openai_agents import verify_workflow_receipt
failures = verify_workflow_receipt(receipt)
assert failures == [] # empty means valid
The processor never touches the network and never changes agent behavior. It only observes.
Spec
Based on draft-zambo-aer1, Section 8 (verifiable workflow receipts). Verification procedure documented at https://datatracker.ietf.org/doc/draft-zambo-aer1/
See it live
Your receipt is offline-verifiable, but you can also check it on the live verifier:
- Copy the receipt JSON your code produced
- Paste it at https://zambo.dev/verify
- See the verification result with the Merkle root and step hashes
Or mint a live receipt directly: run any call at https://zambo.dev/demo and get a shareable receipt URL like https://zambo.dev/run/.
Metadata
Release files for aer1-openai-agents 0.1.6
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| aer1_openai_agents-0.1.6.tar.gz | 12.0 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| aer1_openai_agents-0.1.6-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 21.2 kB
Release files / aer1_openai_agents-0.1.6.tar.gz
| Download URL | aer1_openai_agents-0.1.6.tar.gz |
|---|---|
| Size | 12.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
6f6cc95d8e72ae1f1c70ae0344d788a96eeb54c565a5cbf93c0f387f28518b8d
|
|
BLAKE2b-256 checksum How to use checksums |
efc7bcb6077a42af8d4b382d3fae9c6c9ea509b76d3ab169a90e5c3650920dc9
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
rambo-pypi-grab/0.1.0
|
Release files / aer1_openai_agents-0.1.6-py3-none-any.whl
| Download URL | aer1_openai_agents-0.1.6-py3-none-any.whl |
|---|---|
| Size | 9.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
32ca5b610bc6ab01385c824f9f961acd64e9a7fba2df2243a99a4c3757842c2b
|
|
BLAKE2b-256 checksum How to use checksums |
271be086a27659525352fc4af504f54157027de3b23a9a2ae2e5f7513afa0fc9
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
rambo-pypi-grab/0.1.0
|