Skip to main content

CrewAI integration for PQSafe AgentPay — post-quantum safe payments for AI crews

Project description

crewai-pqsafe

PyPI License: MIT

Drop post-quantum signed payments into any CrewAI agent in one line — FIPS 204 (ML-DSA-65) enforced.

Part of the PQSafe AgentPay ecosystem. Built on pqsafe-agent-pay.


What it does

crewai-pqsafe provides PQSafePaymentTool, a CrewAI-compatible tool that gives your agents the ability to make payments authorized by a signed SpendEnvelope — a post-quantum (ML-DSA-65, NIST FIPS 204) token issued by the human wallet owner. Add the tool to any CrewAI Agent and every pqsafe_pay call is signature-verified and policy-enforced before any payment is dispatched.

No long-lived API keys in your crew definition. No credentials to rotate. The envelope constrains exactly what the agent can spend, to whom, via which rail, and for how long — and it cannot be forged or exceeded.


Install

pip install crewai-pqsafe

Quickstart

from crewai import Agent, Crew, Task
from crewai_pqsafe import PQSafePaymentTool

payment_tool = PQSafePaymentTool()

finance_agent = Agent(
    role="Finance Agent",
    goal="Process approved supplier payments autonomously",
    backstory="You pay invoices that have been pre-authorized via PQSafe SpendEnvelopes.",
    tools=[payment_tool],
)

That's it. The finance_agent can now call pqsafe_pay on any task that requires a payment.


Full crew example

import json
from crewai import Agent, Crew, Task
from crewai_pqsafe import PQSafePaymentTool

payment_tool = PQSafePaymentTool()

# Agent with payment capability
finance_agent = Agent(
    role="Finance Agent",
    goal="Process approved supplier payments",
    backstory="You pay invoices pre-authorized via PQSafe SpendEnvelopes.",
    tools=[payment_tool],
)

# Task — envelope is injected into the description at runtime
pay_invoice = Task(
    description=(
        "Renew the Perplexity Pro subscription at perplexity.ai — $20 USD. "
        "Use this signed envelope: {envelope_json}"
    ),
    agent=finance_agent,
    expected_output="Payment confirmation with txId, status, and rail",
)

crew = Crew(agents=[finance_agent], tasks=[pay_invoice])

# Kick off — inject the pre-signed envelope issued by the wallet owner
signed_envelope = {
    "envelopeJson": '{"version":1,"issuer":"pq1...","agent":"finance-crew-v1",...}',
    "signature": "deadbeef...",
    "dsaPublicKey": "cafebabe...",
}
result = crew.kickoff(inputs={"envelope_json": json.dumps(signed_envelope)})
print(result)
# Payment successful. txId=airwallex-tx-abc123 status=success rail=airwallex

How it works

  1. A human wallet owner issues a signed SpendEnvelope using pqsafe-agent-pay (or the PQSafe wallet). The envelope encodes: agent ID, max amount, allowed recipients, currency, and validity window — all bound by an ML-DSA-65 post-quantum signature.
  2. The envelope is passed into the crew as an input variable. It travels with the task context, not stored in the tool.
  3. When the agent decides to pay, it calls the pqsafe_pay tool with envelope_json, recipient, amount, and optional memo.
  4. PQSafePaymentTool verifies the post-quantum signature server-side, enforces all policy constraints, and routes the payment to the cheapest available rail (Airwallex, Wise, Stripe, USDC/Base, or x402).
  5. The tool returns a string: Payment successful. txId=<id> status=<status> rail=<rail> — included in the task output.

What you get

  • One-line integrationtools=[PQSafePaymentTool()] on any CrewAI Agent
  • FIPS 204 ML-DSA-65 enforcement — every payment is quantum-resistant by default
  • Policy guardrails — amount ceiling, recipient allowlist, and time window enforced before dispatch; the agent cannot overspend
  • Multi-rail routing — Airwallex (live sandbox), Wise, Stripe, USDC on Base, x402
  • No credentials in crew code — only the short-lived signed envelope is required at runtime
  • Compatible with any CrewAI crew — hierarchical, sequential, or custom process types

Tool parameters

Parameter Type Required Description
envelope_json str Yes SignedEnvelope serialized as JSON
recipient str Yes Recipient address (IBAN, crypto addr, domain, etc.)
amount float Yes Amount in the envelope's currency (> 0)
memo str No Human-readable payment reference

Returns a string: Payment successful. txId=<id> status=<status> rail=<rail>


Part of PQSafe AgentPay


Links


License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

crewai_pqsafe-0.1.1.tar.gz (6.2 kB view details)

Uploaded Source

Built Distribution

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

crewai_pqsafe-0.1.1-py3-none-any.whl (5.7 kB view details)

Uploaded Python 3

File details

Details for the file crewai_pqsafe-0.1.1.tar.gz.

File metadata

  • Download URL: crewai_pqsafe-0.1.1.tar.gz
  • Upload date:
  • Size: 6.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.9.6

File hashes

Hashes for crewai_pqsafe-0.1.1.tar.gz
Algorithm Hash digest
SHA256 69cd0482751640b319afce8e936cc7aa44ea9207e07d1910200956db4eb69c52
MD5 70dcc7cea7cb5002c10951cad517eb66
BLAKE2b-256 dbe06fcd9fb21c44457f4c57079970c8f93e990b40eef64e922f39bf16c909a0

See more details on using hashes here.

File details

Details for the file crewai_pqsafe-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: crewai_pqsafe-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 5.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.9.6

File hashes

Hashes for crewai_pqsafe-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 0cd0b5facb7dfa6ed47df162deae4518969a16feed8cf90821f720246edbffd6
MD5 fe7c58852e206b5c4922e5b23e57013f
BLAKE2b-256 e2ff984c5a14e86562d42cb040d17d1eda05219f7ce04c0f1444b33f0f9cb00f

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page