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.
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.5
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.5.tar.gz | 12.0 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| aer1_openai_agents-0.1.5-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 21.2 kB
Release files / aer1_openai_agents-0.1.5.tar.gz
| Download URL | aer1_openai_agents-0.1.5.tar.gz |
|---|---|
| Size | 12.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
e29287811e56b9d264fe8fb9855d81707b5c55f8035b485d76d7b1e745050bea
|
|
BLAKE2b-256 checksum How to use checksums |
19b596fbb6ccb22e28a7f4f98e080c48140de75a418d5a9a558110fc47886121
|
| 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.5-py3-none-any.whl
| Download URL | aer1_openai_agents-0.1.5-py3-none-any.whl |
|---|---|
| Size | 9.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
9050ab883cf664b08136cc1d23991b7bfbc7fbcbd55ac418ea74e7c38df4dc19
|
|
BLAKE2b-256 checksum How to use checksums |
e9b1c165cb260face332ea2a2fd081445dd1d19c52b310df03f4effd5df9a28e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
rambo-pypi-grab/0.1.0
|