Skip to main content

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-verifyzero 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

CrewAI remains a duck-typed optional peer and is not installed transitively. Install the CrewAI version selected by your application after auditing its own dependency graph. This avoids making EMILIA an installation path for CrewAI's currently unpatched optional ChromaDB dependency chain.

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: to,  # optional semantic selector
    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

The high-level wrappers always bind the tool name and complete bound arguments; target_for can add context but cannot weaken that binding. Use bind_call_action() when minting the exact receipt action.

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

emilia_crewai-0.3.3.tar.gz (16.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

emilia_crewai-0.3.3-py3-none-any.whl (13.0 kB view details)

Uploaded Python 3

File details

Details for the file emilia_crewai-0.3.3.tar.gz.

File metadata

  • Download URL: emilia_crewai-0.3.3.tar.gz
  • Upload date:
  • Size: 16.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for emilia_crewai-0.3.3.tar.gz
Algorithm Hash digest
SHA256 aeab476478d49e6747aa6654aec0e8fa6fabf6d8b9c888b207c271bdf193e608
MD5 139e06f4b0a32ff93bbab7931c506991
BLAKE2b-256 ef243ee04bf7265e5bf52e55001333a1b98d4b6259f8b5c02c173dbbbf128df0

See more details on using hashes here.

Provenance

The following attestation bundles were made for emilia_crewai-0.3.3.tar.gz:

Publisher: publish-crewai.yml on emiliaprotocol/emilia-protocol

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file emilia_crewai-0.3.3-py3-none-any.whl.

File metadata

  • Download URL: emilia_crewai-0.3.3-py3-none-any.whl
  • Upload date:
  • Size: 13.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for emilia_crewai-0.3.3-py3-none-any.whl
Algorithm Hash digest
SHA256 f084be9f70e356b47004f1a91305bf53459667a2c1297bb3a0414cf4898977b6
MD5 3e7915a7bb7c664dc0a474a9d9116bba
BLAKE2b-256 6207f27ecd8adb29aa39470d3bb8a2ceb69b3ab063c3e8d9e9ef242375bcc86f

See more details on using hashes here.

Provenance

The following attestation bundles were made for emilia_crewai-0.3.3-py3-none-any.whl:

Publisher: publish-crewai.yml on emiliaprotocol/emilia-protocol

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

This release

0.3.3 This release

2 files

0.3.0

2 files

0.2.0

2 files

0.1.0

2 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