Skip to main content

IntentProof

An AI agent must ask IntentProof before it sends money. If the pay instruction came from a page, email, tweet, or tool result, the payment is blocked.

Install

pip install intentproof-guard
intentproof serve

Open http://127.0.0.1:8080

The top of the page is money already approved. The form under it is a manual test.

  • Block means do not pay.
  • Hold means a person must approve.
  • Approve means the agent may pay.

From this folder before the package is on PyPI: pip install .

In your agent

from intentproof.sdk import IntentProof, PaymentBlocked

guard = IntentProof("http://127.0.0.1:8080", "dev", agent_id="demo")
guard.tracker.note_user("pay the hosting bill")
guard.tracker.note_fetched(page_or_tool_text)

try:
    guard.pay(rail="stripe", amount="12", recipient="acme hosting", instruction="pay the hosting bill")
except PaymentBlocked:
    pass  # do not call Stripe or the wallet

note_user is what the person typed. note_fetched or note_tool_output is anything the agent read. Call the rail only when pay() returns.

intentproof summary
intentproof config
intentproof config set daily_ceiling 750

Configuration

Settings live in intentproof.toml in the current folder. If the file is missing, the defaults below are used. A GUARD_* environment variable overrides the file. Restart intentproof serve after a change.

intentproof config prints the active values.

Where it runs

Setting Default What it does
api_keys dev Bearer token the agent must send. Separate several keys with commas.
db_path data/intentproof.db SQLite file for decisions, the allowlist, and spend.
slack_webhook_url empty A hold posts a short Slack message. Empty means no Slack call. The hold still stands.
approval_timeout_seconds 900 A hold with no answer becomes a deny after 15 minutes.
PORT 8080 Port for intentproof serve. Environment variable only.

When a payment is blocked, held, or approved

Amounts are US dollars.

Setting Default What it does
non_user_block_above 5 Block when the instruction came from a tool result, page, email, or tweet and the amount is above this. At or under it, the payment is held.
unknown_recipient_block_above 10 Block when this recipient was never trusted and the amount is above this. At or under it, the payment is held as a new recipient.
auto_approve_max 25 Approve only when the user typed the instruction, the recipient is trusted, and the amount is at or under this.
per_tx_cap 100 Hold a single payment above this, even for a trusted recipient.
daily_ceiling 500 Hold when today's approved spend, across every rail, would go over this.
weekly_ceiling 2000 Hold when this week's approved spend, across every rail, would go over this.
velocity_max 5 Block after this many payment attempts from the same agent.
velocity_window_seconds 300 The window for that count: 5 minutes.

Trusted means the recipient is on the allowlist, or a person already approved a payment to them.

Two match settings are fixed in code: the copied instruction must be at least 12 characters, and a fuzzy match must score at least 0.86. That catches a payment whose words were copied from text the agent just read.

intentproof config set daily_ceiling 750
intentproof config set api_keys your-real-key

Release files for intentproof-guard 0.1.0

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

Source distribution (sdist)

Source distribution for intentproof-guard 0.1.0
File Size Uploaded
intentproof_guard-0.1.0.tar.gz 20.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for intentproof-guard 0.1.0
File Interpreter ABI Platform
intentproof_guard-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 39.8 kB

Release files / intentproof_guard-0.1.0.tar.gz

Download URL intentproof_guard-0.1.0.tar.gz
Size 20.3 kB
Tags Source
SHA-256 checksum
How to use checksums
3f45f4a4439a7e7857532339f95dec99bc966401251f5731a2d08beda29d5d8e
BLAKE2b-256 checksum
How to use checksums
2b98f48dc16b5fcc6430a056757f3d93a68aa8ec774dc6af84798caeb6057d27
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 26, 2026.

Transparency log

Release files / intentproof_guard-0.1.0-py3-none-any.whl

Download URL intentproof_guard-0.1.0-py3-none-any.whl
Size 19.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
31885c97c1058c909dc9ea8e5453dc102c69fb456a154a11ff006728e3ac00a8
BLAKE2b-256 checksum
How to use checksums
6e5e2851b925ceb9766fabc610583fdcd18ee4a5c4f67ec1848a3c55784958de
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 26, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.1.0 This release

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