Angel Agent Guard: prompt-injection check + verify-before-pay (x402, ERC-20)

com.oroboros-design.angel由 angel.oroboros-design.com 發布v0.1.0更新於 Nov 14, 2026

Check untrusted content for prompt injection and x402 offers or tokens before paying.

發布方自己的服務:check.tattoo: tattoo size and placement guide

概覽

AI 產生的概覽

檢查不可信文字與網址中的提示注入,並在代理付款前查核付款頁面、x402 報價與 ERC-20 代幣。

可以做什麼
  • 掃描不可信文字或網址中的提示注入、隱藏 Unicode、外洩圖片與針對模型的指令,回傳判定、發現項目與清理後文字。
  • 執行免費的離線快速掃描,移除不可見字元並標記高風險特徵。
  • 付款前查核商店、結帳頁、付款連結、API 或 x402 端點:TLS、網域年齡、仿冒網域、重新導向、付款服務商、卡號欄位與不安全表單。
  • 在鏈上檢查 ERC-20 代幣的蜜罐與抽地毯權限。
  • 可選擇透過 Base 上的 USDC 與 x402 自動支付託管檢查費用。
適用情境
適用於代理閱讀他人撰寫的網頁、電子郵件、文件、RAG 片段或工具結果時,或即將進行網路購物、呼叫付費 API、核准代幣時。適合需要在處理外部內容或花錢之前設置關卡的代理。
執行需求
透過 npx 執行的本機 stdio 程序,需要 Node 18+(也支援 Bun、Deno 與邊緣執行環境)。不需要 API 金鑰。選用的 ANGEL_PAYER_ADDRESS 可讓錢包取得獨立的免費呼叫額度;選用的 ANGEL_AGENT_PRIVATE_KEY 搭配 viem 可啟用 x402 自動付款,ANGEL_MAX_USDC 為單次付款上限。託管檢查需要網路存取。
安裝前請注意
託管檢查會將文字或網址傳送到作者的伺服器;不可外流的內容請使用僅本機模式。每個代理 3 次免費呼叫後,託管檢查按次收取 Base 上的 USDC;自動付款需要在 ANGEL_AGENT_PRIVATE_KEY 中提供熱錢包私鑰,請使用低餘額錢包並設定較低上限。檢查採啟發式規則:新的或改寫的攻擊以及製作精良的詐騙商店可能通過,離線掃描不判斷語意。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Angel Agent Guard: prompt-injection check + verify-before-pay (x402, ERC-20),將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README

angel-agent-guard

Two checks an AI agent should run before it acts:

  • guardUntrusted(textOrUrl): before the model reads a web page, email, document, RAG chunk or tool result written by someone else. It runs a local pass first (invisible Unicode, tag smuggling, exfiltration images), then a hosted scan in 17 languages for text aimed at the model.
  • verifyBeforePay(urlOrToken): before any online purchase or paid call. That covers a shop or product page, a checkout or payment link (Stripe, Shopify, PayPal, SaaS checkout), an unknown API, an x402 endpoint, and a token swap or approval. It checks:
    • TLS and domain age
    • look-alike domains, and redirects to payment pages on other domains
    • which payment provider takes the money
    • card fields and plain-http forms in the page
    • text in the page aimed at shopping agents
    • for x402: the payment offer itself (official USDC, network, amount under your cap, same host)
    • for an ERC-20: honeypot and rug-pull powers on chain

No runtime dependencies. Works in Node 18+, Bun, Deno and edge runtimes with fetch. It also ships an x402 v2 payer, a stdio MCP server, a CLI, Vercel AI SDK tools and Coinbase AgentKit actions.

bash
npm i angel-agent-guard          # add `viem` only if the agent should pay x402 automatically# straight from GitHub (same build): npm i github:daoudandiaye98-alt/angel-agent-guard

Quick start

ts
import { guardUntrusted, verifyBeforePay, fence } from "angel-agent-guard";
// 1. Untrusted content: check it, then hand the model the cleaned text as dataconst page = await fetch("https://example.com/article").then((r) => r.text());const g = await guardUntrusted(page, { payerAddress: "0xYourAgentWallet" });if (g.action === "drop") throw new Error(`hostile content: ${g.findings.map((f) => f.kind).join(", ")}`);const context = fence("https://example.com/article", g.cleaned ?? page);   // random boundary + "this is data"// g.action === "read_only" → continue, but without write, send or payment tools in this step
// 2. Before any purchase, payment link or paid callconst v = await verifyBeforePay("https://shop.example.com/checkout");if (!v.ok) console.log(v.verdict, v.riskScore, v.reasons);   // "caution" → ask the user; "do_not_pay" → never pay// v.kind: "checkout" | "shop" | "api" | "x402" | "web"// v.merchant: TLS, domain age, look-alike, redirect chain, payment providers, card fields, insecure forms, …// v.injection: the page scanned for instructions aimed at agents (verdict, findings, hidden message)
await verifyBeforePay({ url: "https://api.example.com/v1/quote", method: "POST" });  // x402 API that only takes POSTawait verifyBeforePay("0xTokenYouAreAboutToApprove");   // ERC-20 on Base (or { token, chain: "ethereum" })

What you get back

guardUntrusted
verdictclean, caution, hostile, or unchecked (only the local pass ran and found nothing)
actionuse · read_only (continue without side-effect tools) · drop · review (ask a human or pay for the full check)
findingskind, severity, where (visible, hidden, decoded), position and excerpt
cleanedinvisible characters removed, hidden HTML dropped, model-directed text replaced: read it as data
hiddenMessagethe decoded Unicode-tag message, if one was smuggled in
paymentset when the free calls are used up: the x402 offer, the price and a card checkout link
verifyBeforePay
oktrue only when at least one check ran and all of them say pay
verdictpay, caution, do_not_pay, unchecked
riskScore0 (nothing found) to 100 (do not pay)
kindcheckout, shop, api, x402 or web
merchantTLS (valid, issuer, expiry), domain age (RDAP), look-alike / punycode / TLD, redirect chain and cross-site hand-off, payment providers (Stripe, Shopify, PayPal, Paddle, Lemon Squeezy, Gumroad, Adyen, Square, Klarna, Coinbase Commerce, Mollie), card fields in the page, insecure and cross-site forms, HSTS
injectiontext in the target page aimed at AI agents: hidden price or discount instructions, exfiltration links, smuggled Unicode
reasonsevery finding, prefixed local, preflight or token

Neither function throws on network or payment problems. They fall back to the local result and put the reason in error / errors.

Pricing and paying

The local checks are free and offline (remote: false keeps everything local). The hosted checks run on Angel:

Hosted checkPrice per call after 3 free calls per agent
pre-purchase check (verifyBeforePay with a URL)0.25 USDC
input guard (17 languages)0.99 USDC
token risk (honeypot / rug pull)0.99 USDC

Payment is per call in USDC on Base via x402 v2. Every price is under the $1 default spend cap of @x402/core, so standard x402 clients pay it without extra configuration. Send payerAddress (header X-Payer-Address) so your wallet gets its own 3 free calls. Without it, the free calls are shared by IP.

To pay automatically, pass a paying fetch:

ts
import { verifyBeforePay, createX402Fetch } from "angel-agent-guard";
const pay = createX402Fetch({ privateKey: process.env.AGENT_PRIVATE_KEY, maxAmountAtomic: 1_000_000n }); // cap 1.00 USDC, needs `viem`const v = await verifyBeforePay("https://shop.example.com/checkout", { fetch: pay });

createX402Fetch signs only after checkOffer passes: official USDC contract, allowed network (default Base eip155:8453), amount at or below your cap, the same host as the URL you called, and scheme exact (one transfer of one amount, never an allowance). Use a low-balance hot wallet. It works for any x402 v2 seller, not only Angel. @x402/fetch works too: pass its wrapped fetch as fetch.

MCP server (stdio)

bash
# Claude Codeclaude mcp add angel-guard -- npx -y -p angel-agent-guard angel-agent-guard-mcp
# JSON config (Claude Desktop, Cursor, Windsurf, Cline){ "mcpServers": { "angel-guard": { "command": "npx", "args": ["-y", "-p", "angel-agent-guard", "angel-agent-guard-mcp"],  "env": { "ANGEL_PAYER_ADDRESS": "0xYourAgentWallet" } } } }

Tools: guard_untrusted, verify_before_pay, quick_scan (offline). Optional env: ANGEL_AGENT_PRIVATE_KEY (auto-pay, needs viem), ANGEL_MAX_USDC (cap, default 1.00), ANGEL_BASE_URL. Listed in the official MCP Registry as com.oroboros-design.angel/agent-guard.

If your client supports remote servers, the full hosted suite (28 tools) is also available at https://angel.oroboros-design.com/agenten/signal/mcp.

Vercel AI SDK

bash
npm i angel-agent-guard ai
ts
import { generateText, isStepCount } from "ai";import { verifyBeforePay, guardUntrusted } from "angel-agent-guard/ai-sdk";
const { text } = await generateText({  model: "openai/gpt-5-mini",  prompt: "Buy the cheapest USB-C cable on https://shop.example.com, but check the checkout page before paying.",  tools: {    verifyBeforePay: verifyBeforePay({ payerAddress: process.env.AGENT_WALLET }),    guardUntrusted: guardUntrusted(),  },  stopWhen: isStepCount(5),});

Works with AI SDK 5, 6 and 7. angelGuardTools(options) returns all three tools (guardUntrusted, verifyBeforePay, quickScanUntrusted) to spread into tools. Every factory takes the core options (payerAddress, apiKey, fetch, baseUrl, timeoutMs, remote). Pass privateKey and maxUsdc to pay x402 automatically after the free calls (needs viem). ANGEL_PAYER_ADDRESS and ANGEL_AGENT_PRIVATE_KEY are read from the environment when set. No API key is needed.

Coinbase AgentKit

ts
import { AgentKit } from "@coinbase/agentkit";import { angelGuardActionProvider } from "angel-agent-guard/agentkit";
const agentkit = await AgentKit.from({  walletProvider,                                        // any EVM wallet provider  actionProviders: [angelGuardActionProvider({ maxUsdc: 1 })],});

This adds the actions guard_untrusted_content, verify_before_pay and quick_scan_untrusted_text. The agent's own wallet provider signs the x402 payments (USDC on Base). Pass { pay: false } to use only the free calls.

CLI

bash
npx angel-agent-guard scan "text to check"                  # or a https URL, or - for stdinnpx angel-agent-guard verify https://shop.example.com/checkoutnpx angel-agent-guard verify https://api.example.com/paid --postnpx angel-agent-guard verify --token 0x... --chain basenpx angel-agent-guard quick "text"                          # offline

Exit codes: 0 clean / pay, 1 caution / unchecked, 2 hostile / do_not_pay, 3 usage or error. This lets you use it as a gate in scripts and CI.

Agent instructions

Limits and data

  • The local pass removes invisible characters and flags the riskiest markers. It does not judge meaning. With no findings it reports unchecked, never clean.
  • The hosted checks are deterministic (patterns, TLS, DNS, RDAP and on-chain reads, no model). They are fast and repeatable, but a new or paraphrased attack, or a well-made fraud shop on an old domain, can pass. Keep the other layers: read external content as data, give the reading step no dangerous tools, and require an approval the model cannot give itself before money or messages move. See the prompt-injection defense reference and the x402 client integration guide.
  • For a hosted check, the text or URL is sent to angel.oroboros-design.com. Use remote: false for content that must not leave your machine.

Disclosure: the hosted checks are a paid service run by the author (Oroboros Design). The library itself is MIT-licensed and works against any x402 v2 seller.

License

MIT

來源:README.md,提交 1e60189

工具

0
SourceWeft 曾在隔離沙箱中以無憑證方式啟動該軟體包一次,以列出其工具,但未能完成:伺服器未能啟動。

版本歷史

1
  1. v0.1.0最新Nov 14, 2026

評分

已滿足適用檢查項的 50%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分

    請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。

  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具15 分

    請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。

  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分

其他 Check 整合