Skip to main content

crewai-aer1

AER-1 verifiable execution receipts for CrewAI crews. One checkable receipt per tool call, emitted through CrewAI's own typed event bus. No changes to your Crew, Agent, or Task definitions.

For whole-run workflow receipts with a Merkle root (AER-1 Section 8), see aer1-crewai.

Quickstart

from crewai import Agent, Crew, Task
from crewai_aer1 import AER1Listener

receipts = AER1Listener()  # keep this reference alive for the process

researcher = Agent(
    role="Researcher",
    goal="Find verifiable facts",
    backstory="A careful analyst.",
    tools=[my_search_tool],
)
task = Task(description="...", expected_output="...", agent=researcher)
crew = Crew(agents=[researcher], tasks=[task])

crew.kickoff()
receipts.save("receipts.jsonl")
print(f"{len(receipts.receipts)} verifiable receipts recorded")

That is the whole integration. The listener subclasses CrewAI's BaseEventListener and registers handlers for ToolUsageFinishedEvent (and CrewKickoffStartedEvent for crew context) on the singleton event bus in setup_listeners. Because the bus is process-wide, every crew you kick off is covered with zero code intrusion. Just make sure the module that instantiates AER1Listener is imported, and the instance stays alive (not garbage collected), or handlers stop firing.

What a receipt proves

Each receipt follows the AER-1 receipt record (IETF Internet-Draft draft-zambo-aer1, Sections 3-6): a stable id, RFC 3339 timestamp, tool identity, provenance class (EXECUTED BY CREWAI), base64 canonical bytes, and a SHA-256 output commitment anyone can recompute. A receipt proves the recorded bytes were not changed after the tool ran. It does not prove the tool was correct.

Honest boundaries, enforced in code:

  • Cached tool results (from_cache=True) are skipped. Nothing executed, so there is nothing to attest.
  • Tool calls the tool itself reported as failed are skipped. There is no successful result to commit to.
  • A listener exception never breaks a crew run. Every handler is guarded.

Verify a receipt yourself

from crewai_aer1 import verify_receipt
ok, reason = verify_receipt(receipts.receipts[0])

Spec and conformance

License

MIT

Metadata

Release files for crewai-aer1 0.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for crewai-aer1 0.1.1
File Size Uploaded
crewai_aer1-0.1.1.tar.gz 6.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for crewai-aer1 0.1.1
File Interpreter ABI Platform
crewai_aer1-0.1.1-py3-none-any.whl Python 3 none any Details

Total release size: 12.9 kB

Release files / crewai_aer1-0.1.1.tar.gz

Download URL crewai_aer1-0.1.1.tar.gz
Size 6.5 kB
Tags Source
SHA-256 checksum
How to use checksums
4d029eb1aa55eaad96f10c8a9d331be30954ff76989d26a671e15eb161b8b58a
BLAKE2b-256 checksum
How to use checksums
39b11285348a6ff08c533de44abe580cf24d316c34f56092820a08782135664b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via rambo-pypi-grab/0.1.0

Release files / crewai_aer1-0.1.1-py3-none-any.whl

Download URL crewai_aer1-0.1.1-py3-none-any.whl
Size 6.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
4d0491b0297473459df424485909390d3a27e82c558a3d0b797b338e533f8906
BLAKE2b-256 checksum
How to use checksums
355805f926c4cbafb7f42e73050b455259bd045420ac21bf04b0f0dbf1c84916
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via rambo-pypi-grab/0.1.0

Release history Release notifications | RSS feed

This release

0.1.1 This release

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page