Decides before paying
- Looks at
- Amount, merchant, budget, rate
- Question
- May this agent spend this much here?
- Sees the delivery
- Never
- Catches
- Overspending
Spending policies decide whether an agent may pay. Tare checks what it got. An independent check of x402 data deliveries: it reads what a data seller promised, verifies what actually arrived, and keeps an evidence-backed record of every seller that over-promised.
With x402 an agent pays a data seller and receives the body in the same response. The seller describes its delivery, "1,240 unique records, no nulls", and the agent moves on. Nothing compares that description to the rows. Budgets and allowlists cannot help: they never look at what came back.
Pay per record? Then someone has to count the records.
Spending limits answer "may I pay?" Tare answers "did I get it?" They are two halves of safe agent commerce. A spending cap limits what the agent can pay. Tare checks what that payment bought, whichever wallet signed it. The published run paid with a capped testnet-only key, because Kite Passport only pays sellers in Kite's catalog (see the FAQ).
Tare pays the seller 0.001 pieUSD over x402 on Kite testnet, inside hard spending caps, and gets the body back with a settlement hash.
x402 · Kite testnetSERV Reasoning reads only the seller's own words, both its 402 advertisement and its delivery note, and turns them into claims: count, unique, fields, no nulls and, if a time window is named, freshness.
SERV ReasoningPlain code counts the rows, the distinct ids, the fields, the empty values and the age of each timestamp, and checks each claim. The rows never reach the model.
Tare codeEvery check becomes a receipt with evidence. A seller whose claims fail is held on its seller record, so the agent stops buying from it.
Tare codeThe model reads. The code verifies. The wallet pays. None of them can do another's job.
Seller A promises 1,240 unique records, no nulls. It delivers 1,240 rows
with only 860 unique ids and 40 empty timestamps, and its 402 advertisement promised a score field that never arrives. Seller B promises 200 and delivers 200.
Counts above come from the committed seller payloads. Transaction hashes appear only in the console, and only once a payment has returned them.
Settlement hash, sha256 of the delivered body and sha256 of the prompt used to read the promise, so a check can be repeated.
A promise with no count is "unverifiable", not verified. Steering the model into empty claims gets a seller held, not trusted.
SERV sees the prose inside <prose> tags and nothing else. Any tags the seller hides in its prose are stripped.
A held seller is stopped before any payment is attempted. The console's payment counter does not move.
Only a hash returned in PAYMENT-RESPONSE is stored or shown. Missing means "paid, no hash", never a made-up value.
Buys carry a request id and run one at a time, so a double click replays the receipt instead of paying twice.
Payments are signed on the operator's machine, so the live console runs locally. This hosted site shows the published run: the same receipts, read-only.
# clone, install, check git clone https://github.com/Ritapossible/Tare && cd Tare npm ci && npm test # live console on http://127.0.0.1:4020 npm run app
No. A spending policy decides before a payment, from the amount, the merchant and the budget. Tare works after the delivery: it checks the rows a seller sent against the seller's own claims. It sits next to a spending policy. A spending cap limits what the agent can pay; Tare verifies what that spend bought.
Over x402 on Kite testnet, with testnet pieUSD. Tare supports Kite Passport (kpass) as its payment rail, but Passport currently only pays sellers listed in Kite's service catalog. Until Tare's sellers are listed, the published run signs standard x402 payments with a testnet-only key, capped by Tare at 0.05 per payment and 1 in total, and the Pieverse facilitator settles them on Kite testnet. Every hash shown is a real Kite testnet transaction.
No. SERV Reasoning (gpt-5.4-mini-serv-multipath) only turns the seller's words into typed claims: four from one prompt, and a time window from a second prompt that runs only when the seller mentions time. Code drops a claim the text does not support. Counting, checking, recording and paying are all plain code. Any extra field the model returns, such as a "verdict", is dropped unread.
Both of the seller's own. Before paying, Tare reads the description in the seller's 402 response, the promise made before any money moves. After paying, it reads the note that came with the delivery. Each is checked against the same rows, and both are shown word for word on the receipt. A broken advertised claim shows as advertised:count, advertised:unique and so on.
Because x402 only returns the body after payment. There is nothing to count before paying. What Tare guarantees is that a broken promise is caught, evidenced and acted on, so the agent does not buy from that seller again.
The model has no pass to give. The worst a seller can do is skew the extracted claims, and a promise with no count claim fails closed as "unverifiable". Live injection results from scripts/serv_eval.mjs are published in the write-up.
Each seller origin has a record. It starts in good standing. A failed check (dispute) or a promise with nothing to check (unverifiable) puts the seller on hold, with the receipt that caused it. A human can release a hold after review. It does not refund the first payment.
No. Tare runs on Kite testnet with pieUSD from the faucet. No USDC, no card.