CrewAI integration for PQSafe AgentPay — post-quantum safe payments for AI crews
Project description
crewai-pqsafe
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
- 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. - The envelope is passed into the crew as an input variable. It travels with the task context, not stored in the tool.
- When the agent decides to pay, it calls the
pqsafe_paytool withenvelope_json,recipient,amount, and optionalmemo. PQSafePaymentToolverifies 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).- The tool returns a string:
Payment successful. txId=<id> status=<status> rail=<rail>— included in the task output.
What you get
- One-line integration —
tools=[PQSafePaymentTool()]on any CrewAIAgent - 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
pqsafe-agent-pay— Python SDK (envelope creation, signing, verification) — this plugin's dependencylangchain-pqsafe— same pattern for LangChain agents@pqsafe/agent-pay— core TypeScript SDK@pqsafe/mastra— Mastra workflow integration
Links
- Main repo: github.com/PQSafe/pqsafe
- Docs: docs.pqsafe.xyz
- Live demo: demo.pqsafe.xyz
- Website: pqsafe.xyz
License
MIT
Project details
Release history Release notifications | RSS feed
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 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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
69cd0482751640b319afce8e936cc7aa44ea9207e07d1910200956db4eb69c52
|
|
| MD5 |
70dcc7cea7cb5002c10951cad517eb66
|
|
| BLAKE2b-256 |
dbe06fcd9fb21c44457f4c57079970c8f93e990b40eef64e922f39bf16c909a0
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0cd0b5facb7dfa6ed47df162deae4518969a16feed8cf90821f720246edbffd6
|
|
| MD5 |
fe7c58852e206b5c4922e5b23e57013f
|
|
| BLAKE2b-256 |
e2ff984c5a14e86562d42cb040d17d1eda05219f7ce04c0f1444b33f0f9cb00f
|