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 集成