Agent Payment Policy
Validate paid output before agents accept it
epistemedeus
@epistemedeus
Install
$ openclaw skills install @epistemedeus/agent-payment-policyAgent payment policy
Treat payment success and delivery validity as separate decisions. Use this workflow before an agent accepts a paid JSON response.
Keep the trust boundary explicit
- Let the seller's OpenAPI or marketplace schema establish what it claims to return and whether the request is constructible.
- Define a separate buyer-owned JSON Schema for the minimum acceptable result.
- Compile and inspect that schema before network, credential, balance, signer, or wallet work.
- Bind the canonical schema digest into the immutable intent and signed authorization. Never authorize from a mutable file path alone.
- Validate the exact settled response body against the bound schema before treating delivery as successful.
- Preserve payment settlement and output validation as independent receipt fields. A paid response can still be invalid.
This skill complements wallet, budget, x402, and MPP execution tools. It does not create a wallet, sign a payment, choose a facilitator, or authorize spend.
Speak the package as decide, bind, and classify
A foreign agent can use this package without Pilot private buyer code, a wallet, or a facilitator. Official clients can still pay a SameDayDesk 402 without it. Durable Ed25519 policy signing stays library-only.
| Verb | Use it to | CLI | Library |
|---|---|---|---|
| decide | Inspect constructibility and plan viability | construct-request, plan-check, inspect-url, output-schema-check | constructRequest, createPlan, normalizeRequest, inspectOutputSchema |
| bind | Bind a finished request or verify a signed plan | construct-request, verify-authorization, verify-execution | constructRequest, verifyAuthorization, verifyExecutionAuthorization |
| classify | Accept a local body or classify caller-verified facts | output-accept, receipt-completeness-check | inspectOutputSchema → prepareOutputValidator → validateOutput, evaluateReceiptCompleteness |
Refuse unfinished URLs. Bare /extract is not_constructible. A finished
example such as
https://agents.samedaydesk.com/extract?url=https://example.com binds.
requirePurchaseEvidence stays opt-in. receipt-completeness-check exits 0
by default; pass --fail-on conflict only when CI must halt on conflict.
Build the buyer contract
Write a bounded JSON Schema 2020-12 document that expresses only the fields the
buyer's decision actually needs. Require types and formats, not only field
presence. Prefer additionalProperties: false where the response contract is
closed. Avoid remote $ref, executable extensions, and unbounded recursion.
Example:
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"additionalProperties": false,
"required": ["data"],
"properties": {
"data": {
"type": "object",
"additionalProperties": false,
"required": ["source", "value", "observedAt"],
"properties": {
"source": { "type": "string", "format": "uri" },
"value": { "type": "number", "minimum": 0 },
"observedAt": { "type": "string", "format": "date-time" }
}
}
}
}
Inspect the schema locally with an exact package version:
npm install --save-exact agent-payment-policy@0.15.0
npx agent-payment-policy output-schema-check \
./output-schema.json \
data.source,data.value,data.observedAt
Record the returned schemaDigest, canonical byte count, and required paths.
Stop before wallet access if inspection or compilation fails.
Carry the contract through authorization
Build the immutable purchase intent with:
- exact method and normalized target;
- maximum atomic amount, asset, network, and protocol constraints;
- required media type and response byte ceiling;
- required JSON paths;
- the inspected
schemaDigest; - freshness or content-hash constraints when the decision needs them.
Select one exact offer, freeze it in a route lock, and authorize the plan with a separate policy identity. Reinspect the local schema immediately before execution and require its digest to equal the authorized digest. A changed schema requires a new authorization.
Validate delivery
After the paid response is received:
- enforce the authorized media type and byte ceiling;
- parse JSON without coercion;
- validate the whole body against the prepared buyer schema;
- enforce freshness or content-hash constraints;
- create a receipt that reports payment settlement and output validation separately;
- release the body to downstream reasoning only when validation passes.
For library use:
import {
inspectOutputSchema,
prepareOutputValidator,
validateOutput,
} from "agent-payment-policy";
const requiredFields = ["data.source", "data.value", "data.observedAt"];
const inspected = inspectOutputSchema({
schema,
requiredFields,
});
const contract = {
mediaType: "application/json",
maxResponseBytes: 65536,
requiredFields,
schemaDigest: inspected.schemaDigest,
};
const schemaValidator = prepareOutputValidator({
schema,
contract,
});
const parsedBody = JSON.parse(responseText);
const result = validateOutput(parsedBody, contract, { schemaValidator });
inspectOutputSchema returns requiredPaths, schemaDigest, and
canonicalBytes. It does not return requiredFields. Repeat the same
required-path list in the output contract. maxResponseBytes is the byte
ceiling; maxBytes is ignored. validateOutput takes the parsed JSON value,
not raw response bytes.
Use the package README for the complete intent, planning, authorization, and receipt APIs.
Reconcile incomplete receipt evidence
After the rail adapter has independently verified the provider receipt,
transaction, and buyer balance, normalize only controlled match states into
evaluateReceiptCompleteness. Do not pass raw headers, signatures, transaction
bodies, credentials, wallet secrets, or paid output. Treat any mismatch as a
conflict. Preserve missing facts honestly and use transaction or exact balance
evidence only to supplement the dimension it actually proves.
The completeness report does not replace output validation. A payment can be reconciled while delivery is invalid, and valid delivery does not prove settlement.
Fail closed at the right stage
- Missing or invalid buyer schema: stop before network and wallet work.
- Seller schema cannot guarantee required paths: reject during procurement.
- Authorized schema digest differs from local schema: require reauthorization.
- Paid body fails schema validation: record settlement accurately, mark delivery invalid, and do not pass the body downstream.
- Binary or streaming response: use a separate bounded contract or leave this JSON workflow rather than silently weakening it.
Do not claim that seller conformance proves truth, freshness, or business quality. The schema proves only that the delivered bytes satisfy the buyer's declared structural acceptance contract.
Top skills in this category
百度网盘
@wscats百度网盘(Baidu Drive, pan.baidu.com)文件管理 — 上传、下载、转存、分享、搜索、移动、复制、重命名、创建文件夹、删除(高风险,需用户确认)。 同时支持 Agent 记忆备份/恢复(kimiclaw/maxclaw/qclaw/openclaw)。 TRIGGER: 用户消息明确提及"百...
Polymarket Agent
@andretutaResearch Polymarket markets, whale flow and smart money; optionally trade a Polygon wallet behind deterministic risk guard-rails.
wechat-mp-writer-skill-mxx
@hahacatlsq微信公众号文章全流程写作助手。支持热点选题、文章撰写、AI去味润色(去除机器感)、配图建议、一键发布到公众号草稿箱。适用于技术博主、自媒体创作者、企业公众号运营等场景。当用户需要写公众号文章、润色内容、寻找配图或发布到微信时使用此skill。
Weiyun Skills
@wscats微云网盘 MCP 接口完整技能。包含 weiyun.list、weiyun.list_by_category、weiyun.download、weiyun.delete、weiyun.upload、weiyun.gen_share_link、weiyun.rename_file、weiyun.rename_dir...
Agent Evaluation
@rustyorbTesting and benchmarking LLM agents including behavioral testing, capability assessment, reliability metrics, and production monitoring—where even top agents achieve less than 50% on real-world benchmarks Use when: agent testing, agent evaluation, benchmark agents, agent reliability, test agent.