AgentGuard CB is an open-source, MIT-licensed TypeScript SDK that
deterministically compiles structured chargeback evidence from your existing Stripe, Shopify, and CRM data.
then stages it in Stripe with submit:false for your team to review and submit.
Hash-chained, Ed25519-signed, GDPR-controller-of-nothing. Runs on your infrastructure. No LLM. No telemetry. Stripe, Visa, and Mastercard are referenced nominatively. this Software is not affiliated with or endorsed by any of them.
Output staged via stripe.disputes.update with submit:false. Your team submits.
A dispute notification fires. The on-call merchant ops person opens five dashboards, copy-pastes screenshots into a Word document, exports a PDF, and uploads it to the Stripe dashboard before the deadline. Every dispute. Every time. The evidence is unsigned, untyped, untracked.
A typed pipeline that ingests structured data, compiles a hash-chained evidence object, and stages it
in Stripe with submit:false. leaving the final submit decision
with a human on your team.
Adapters for Stripe (charges, refunds, 3DS, radar), Shopify (orders, fulfillments, IP), and any HTTPS endpoint that speaks JSON. Each record is fingerprinted with SHA-256 at ingest time.
// 1 · ingest. typed, deterministic, fingerprinted import { agentguardCb } from '@merchantguard/agentguard-cb'; const dd = agentguardCb({ stripe: { apiKey: process.env.STRIPE_SECRET_KEY }, signingKey: process.env.DD_ED25519_KEY, }); const snapshot = await dd.ingest({ disputeId: 'dp_3Lk7P9X8nM4', sources: ['stripe', 'shopify', 'carrier', 'auth_log'], }); // snapshot.contentHash → "sha256:7e4a…c19d"
The compiler walks the snapshot, fills the Stripe evidence schema (receipts, shipping documentation, customer communication, service date), and chains every field's source hash into a verifiable audit log. The output is a single Ed25519-signed envelope.
// 2 · compile. Merkle-chained, Ed25519-signed const evidence = await dd.compile(snapshot, { reason: 'product_not_received', policy: './policies/refund-v3.md', }); // evidence.envelope = { // schema: 'stripe.dispute_evidence/v1', // fields: { receipt, shipping_documentation, … }, // merkleRoot: 'sha256:9c…f2a1', // signature: 'ed25519:7c4a…d3e9', // signer: 'fp:b1c8…', // timestamp: '2026-04-30T03:14:09Z', // }
submit:false.
The compiled evidence is uploaded to Stripe via disputes.update
with submit:false. Your team reviews it in the Stripe dashboard
and submits when satisfied. AgentGuard CB never submits on your behalf.
qualified, requires_action, not_qualified)// 3 · stage. submit:false leaves the human in the loop const staged = await dd.stage(evidence, { submit: false, }); // staged = { // stripeDisputeId: 'dp_3Lk7P9X8nM4', // evidenceHash: 'sha256:9c…f2a1', // stripeStatus: 'requires_action', // surfaced from Stripe // eligibility: 'qualified', // surfaced from Stripe // reviewUrl: 'https://dashboard.stripe.com/disputes/…', // } // → human reviewer opens reviewUrl, clicks Submit when satisfied
We're explicit about scope. The legal posture lives in LEGAL.md,
DISCLAIMER.md, and PATENTS.md
in the repo. Read them. Then read them again.
AgentGuard CB is software you install. It does not act on the card networks' behalf, hold merchant credentials, or mediate the merchant–acquirer relationship. Visa is referenced nominatively to identify rules with which the Software is designed to interoperate.
We make no claim about dispute outcomes. AgentGuard CB stages structured evidence; it does not predict, qualify, or guarantee any decision by the issuer or the card networks.
There is no language model in the pipeline. Compilation is deterministic. same inputs, same output, byte-for-byte. We do not generate prose. Field values come from your source records, full stop.
AgentGuard CB runs on your infrastructure. Snapshots, signing keys, and audit logs never leave your environment. There is no MerchantGuard-operated control plane. There is no telemetry. We are GDPR-controller-of-nothing by construction.
Third-party trademarks are used nominatively to identify the rules and APIs with which the Software interoperates. No partnership, certification, or endorsement is implied by any such reference.
The output of AgentGuard CB is a structured payload. The decision to submit, contest, accept, or
escalate any dispute is yours and your counsel's. Read DISCLAIMER.md.
Every action (ingest, compile, sign, stage, human submit) is appended to a hash-chained log. Each entry's
prevHash binds it to the entry before it. Break any link and the
signature over the chain head fails.
Patent-pending audit primitive. Runs on your infrastructure. Verified end-to-end before it touches a single chargeback.
The chain is portable. Export it as a single JSON file, hand it to your auditor, your acquiring bank, or opposing counsel. the signature verifies against the published Ed25519 public key without any MerchantGuard-side service.
Open-source means every link is a link. There's nothing to schedule, no email to capture, no
sandbox to provision. npm install, fork the repo, read the legal docs.
# 1. install $ npm install @merchantguard/agentguard-cb # 2. generate signing key $ npx agentguard-cb keygen > .dd.ed25519 # 3. ingest your first dispute $ npx agentguard-cb ingest dp_xxx --sources=stripe,shopify # 4. compile + stage (submit:false) $ npx agentguard-cb stage dp_xxx → staged. review at https://dashboard.stripe.com/disputes/dp_xxx
Read the docs first. AgentGuard CB does not submit chargeback evidence on your behalf. The final submit decision rests with a human reviewer on your team. and with your counsel where the dispute warrants it.