emilia-crewai
Guard CrewAI tools with the EMILIA Protocol — require an offline-verifiable authorization receipt (EP-RECEIPT-v1) before an irreversible tool runs.
missing receipt -> refused
valid receipt -> runs
replayed receipt -> refused (one-time consumption)
forged receipt -> refused
Verification is offline Ed25519 over canonical JSON via
emilia-verify — zero network, no
vendor in the loop. The approval becomes portable evidence an auditor can check
without trusting the operator. It is necessary, not sufficient: it composes with —
never replaces — your tool's own checks.
The base gate proves a pinned issuer signed an action-bound authorization claim. For a human-presence claim, require
assurance_class="class_a"and supply an independent assurance verifier pinned to the relying party's keys, RP, and origins.
Install
pip install emilia-crewai # brings in emilia-verify
pip install "emilia-crewai[crewai]" # also install CrewAI (optional peer)
Quick start
Gate a CrewAI BaseTool instance — its _run now requires a receipt:
from emilia_crewai import guard_crewai_tool, using_receipt
guard_crewai_tool(
my_wire_tool,
action="payment.release",
trusted_keys=[ISSUER_SPKI_B64URL], # pin the issuer keys you trust
target_for=lambda to, amount: f"payment.release:{to}", # optional per-call binding
assurance_class="class_a",
verify_assurance=verify_pinned_class_a_evidence,
)
# Bind the human-approved receipt for the agent step, then run as normal:
with using_receipt(receipt):
crew.kickoff() # my_wire_tool runs only with a valid, action-bound receipt
Or decorate a plain tool function:
from emilia_crewai import require_receipt, using_receipt
@require_receipt("payment.release", trusted_keys=[ISSUER_SPKI_B64URL])
def send_payment(to: str, amount: int) -> str:
return do_transfer(to, amount)
Lower-level gate (verify -> reserve -> execute -> commit yourself):
from emilia_crewai import ReceiptGate
gate = ReceiptGate("payment.release", trusted_keys=[ISSUER_SPKI_B64URL])
result = gate.run(receipt, lambda: do_transfer(to, amount), target=to)
run() consumes the receipt after any execution attempt, including an exception:
the external effect may have happened before its response was lost. Production
fleets must pass an atomic, ownership-fenced {reserve, commit, release} store;
the default is process-local. Call release() only when you can prove execution
never began.
Multi-agent / quorum
For collective decisions (M-of-N agents or humans approving one action), EMILIA's
quorum produces a single composite, offline-verifiable receipt. See the
emilia_verify.verify_quorum primitive and draft-schrock-ep-quorum.
What it is / isn't
- Is: an offline gate for an action-bound issuer receipt, with an explicit Class-A/quorum verifier hook for independently established human ceremony.
- Isn't: authentication ("who is the agent"), access control, or a hosted runtime. It composes on top of whatever runtime you use.
Apache-2.0. Reference implementation, experimental. Part of the
EMILIA Protocol — an open
IETF-track authorization-receipt standard (draft-schrock-ep-authorization-receipts).
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 emilia_crewai-0.2.0.tar.gz.
File metadata
- Download URL: emilia_crewai-0.2.0.tar.gz
- Upload date:
- Size: 15.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/6.1.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1ea72212501fc6ed5dcf221d1a694f3581c008525e31cf43aee9226d68cf590a
|
|
| MD5 |
4c57ad16d5286153eb0ed534acbe0080
|
|
| BLAKE2b-256 |
4916f5fdee55586592dbcda9ea6512e67d3f85e874f09a23e9befa7fe4ffd062
|
Provenance
The following attestation bundles were made for emilia_crewai-0.2.0.tar.gz:
Publisher:
publish-crewai.yml on emiliaprotocol/emilia-protocol
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
emilia_crewai-0.2.0.tar.gz -
Subject digest:
1ea72212501fc6ed5dcf221d1a694f3581c008525e31cf43aee9226d68cf590a - Sigstore transparency entry: 2190900678
- Sigstore integration time:
-
Permalink:
emiliaprotocol/emilia-protocol@d94bbcde1e7378bbe0d274e2b093e9a3156a9986 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/emiliaprotocol
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-crewai.yml@d94bbcde1e7378bbe0d274e2b093e9a3156a9986 -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file emilia_crewai-0.2.0-py3-none-any.whl.
File metadata
- Download URL: emilia_crewai-0.2.0-py3-none-any.whl
- Upload date:
- Size: 11.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/6.1.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2723cfcfe96efd070c50175af7c504d5db3047ba31e63652b54c677dd4a0b0a3
|
|
| MD5 |
6f05a64e4fb2859fd2a2ccfcfdde6ebe
|
|
| BLAKE2b-256 |
32653e5f38d1a2da95146ffe8ea042b75d9bae312da8c2f1d6afcc21db887c10
|
Provenance
The following attestation bundles were made for emilia_crewai-0.2.0-py3-none-any.whl:
Publisher:
publish-crewai.yml on emiliaprotocol/emilia-protocol
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
emilia_crewai-0.2.0-py3-none-any.whl -
Subject digest:
2723cfcfe96efd070c50175af7c504d5db3047ba31e63652b54c677dd4a0b0a3 - Sigstore transparency entry: 2190900694
- Sigstore integration time:
-
Permalink:
emiliaprotocol/emilia-protocol@d94bbcde1e7378bbe0d274e2b093e9a3156a9986 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/emiliaprotocol
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-crewai.yml@d94bbcde1e7378bbe0d274e2b093e9a3156a9986 -
Trigger Event:
workflow_dispatch
-
Statement type: