{"_id":"@ackrate/cli","_rev":"5-fd9164c5ea9bae3fb3785ba2d39a9f29","name":"@ackrate/cli","dist-tags":{"latest":"0.2.1"},"versions":{"0.1.7":{"name":"@ackrate/cli","version":"0.1.7","keywords":["stellar","soroban","ackrate","agent-payments","x402","ap2","mandate","cli"],"license":"Apache-2.0","_id":"@ackrate/cli@0.1.7","maintainers":[{"name":"ackrate","email":"drewgonzales2021@gmail.com"}],"homepage":"https://github.com/reapp-protocol/ackrate-research-arena#readme","bugs":{"url":"https://github.com/reapp-protocol/ackrate-research-arena/issues"},"bin":{"ackrate":"dist/ackrate-cli.bundle.mjs"},"dist":{"shasum":"57343e18134d372a87e68f2b8215b80a0a971616","tarball":"https://registry.npmjs.org/@ackrate/cli/-/cli-0.1.7.tgz","fileCount":3,"integrity":"sha512-dnqjDLFlWXVzj3hbkkasMXPyzBFeVvr0rl4b5OXp6ClYICT3JtTN5pGy40qI42T2qM6Dta8PznfqXQivSoKvlg==","signatures":[{"sig":"MEUCIC02SmfsArXwg7xa5sE8QNyaZ945Qg/eNEvc1O2CMV/2AiEA9xqElRYLDZFnB6Z6Eibuj7h7WkplkDItxRgFc2km1Ys=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":198399},"type":"module","gitHead":"dd5e43133a11e178e220640a73defa9e8d96a048","scripts":{"test":"node --import tsx --test src/version.test.ts src/settlement-store.test.ts src/payment-failure.test.ts","build":"tsc -p tsconfig.json","start":"tsx src/index.ts","prepack":"npm --prefix ../.. run cli:bundle"},"_npmUser":{"name":"ackrate","email":"drewgonzales2021@gmail.com"},"repository":{"url":"git+https://github.com/reapp-protocol/ackrate-research-arena.git","type":"git","directory":"packages/cli"},"_npmVersion":"11.16.0","description":"ackrate command-line tools for contract-enforced agent payments on Stellar.","directories":{},"_nodeVersion":"26.3.0","dependencies":{"@stellar/stellar-sdk":"^14.5.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"commander":"^12.1.0","@ackrate/core":"^0.3.1","@ackrate/stellar":"^0.2.2"},"_npmOperationalInternal":{"tmp":"tmp/cli_0.1.7_1785558117250_0.15869334220776854","host":"s3://npm-registry-packages-npm-production"}},"0.1.8":{"name":"@ackrate/cli","version":"0.1.8","keywords":["stellar","soroban","ackrate","agent-payments","x402","ap2","mandate","cli"],"license":"Apache-2.0","_id":"@ackrate/cli@0.1.8","maintainers":[{"name":"ackrate","email":"drewgonzales2021@gmail.com"}],"homepage":"https://github.com/reapp-protocol/ackrate-research-arena#readme","bugs":{"url":"https://github.com/reapp-protocol/ackrate-research-arena/issues"},"bin":{"ackrate":"dist/ackrate-cli.bundle.mjs"},"dist":{"shasum":"cc10ec5024df84e7f8613bc1031edcc0fcb61587","tarball":"https://registry.npmjs.org/@ackrate/cli/-/cli-0.1.8.tgz","fileCount":3,"integrity":"sha512-rKDDOwgEpqbkceq/JljNQzeNdPVTVgId+mxN0XbEhlLrsMF6U9ID/FE07lNMgozlZCyuylKjK9v4rObHzf8BPw==","signatures":[{"sig":"MEUCIF0C1+DuOXKex6MRZYA5akbR41g07juyCBctcE0xTpuvAiEAngjnoGTHpeR6HPn4EDr9O+kco1V+mrpeCstXx/9gz7I=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":204323},"type":"module","engines":{"node":">=20"},"gitHead":"0e0d1a2c01c73310ab4aa47ff2c84b1e0dc46e8d","_npmUser":{"name":"ackrate","email":"drewgonzales2021@gmail.com"},"repository":{"url":"git+https://github.com/reapp-protocol/ackrate-research-arena.git","type":"git","directory":"packages/cli"},"_npmVersion":"11.16.0","description":"ackrate command-line tools for contract-enforced agent payments on Stellar.","directories":{},"_nodeVersion":"26.3.0","dependencies":{"@stellar/stellar-sdk":"^14.5.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/cli_0.1.8_1785641042809_0.5696172937559492","host":"s3://npm-registry-packages-npm-production"}},"0.1.9":{"name":"@ackrate/cli","version":"0.1.9","keywords":["stellar","soroban","ackrate","agent-payments","x402","ap2","mandate","cli"],"license":"Apache-2.0","_id":"@ackrate/cli@0.1.9","maintainers":[{"name":"ackrate","email":"drewgonzales2021@gmail.com"}],"homepage":"https://github.com/ackrate/ackrate-protocol/tree/main/packages/cli#readme","bugs":{"url":"https://github.com/ackrate/ackrate-protocol/issues"},"bin":{"ackrate":"dist/ackrate-cli.bundle.mjs"},"dist":{"shasum":"e0c385b7f657b81c7b74386440c1bae45a75dc5e","tarball":"https://registry.npmjs.org/@ackrate/cli/-/cli-0.1.9.tgz","fileCount":3,"integrity":"sha512-tArfSqmH3QyaBZJlShMQpJ66Ik8stTVlwy92eLmUch1iRMgfwBvtzIPUUyrtlRQjbfVpGJ2/PQk7yUVjOLDQOg==","signatures":[{"sig":"MEUCIELFvsmwE3tJuulfk0+zyhhNJ3HoRtjOBihZxfHQfMJKAiEAs2AE+hgViDWxNIC/m7VYVl8y+ofiTpfkimKb9VzXI+I=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIFZjz1XQRzhsUzOONjHbY+b8cYnOXIR7Dzn78liMNBL8AiA+SrzlE5NpEoNwAkRZRBJJQjg+HGX01tV/SBI3d8PCOA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":245977},"type":"module","gitHead":"76dcd1ed93729dc54a87a253dc272ee4915addef","scripts":{"test":"node --import tsx --test src/version.test.ts src/settlement-store.test.ts src/payment-failure.test.ts src/ops-signing-request.test.ts src/mainnet-demo.test.ts","build":"tsc -p tsconfig.json","start":"tsx src/index.ts","prepack":"npm --prefix ../.. run cli:bundle"},"_npmUser":{"name":"ackrate","email":"drewgonzales2021@gmail.com"},"repository":{"url":"git+https://github.com/ackrate/ackrate-protocol.git","type":"git","directory":"packages/cli"},"_npmVersion":"11.16.0","description":"Command-line tool for the Ackrate MandateRegistry: scaffold a project, fund testnet accounts, create AP2 mandates, and pay on-chain. The contract is the source of truth.","directories":{},"_nodeVersion":"26.3.0","dependencies":{"@stellar/stellar-sdk":"^14.5.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"commander":"^12.1.0","@ackrate/core":"*","@ackrate/stellar":"*"},"_npmOperationalInternal":{"tmp":"tmp/cli_0.1.9_1787742937308_0.1281372377643326","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@ackrate/cli","version":"0.2.0","keywords":["stellar","soroban","ackrate","agent-payments","x402","ap2","mandate","cli"],"license":"Apache-2.0","_id":"@ackrate/cli@0.2.0","maintainers":[{"name":"ackrate","email":"drewgonzales2021@gmail.com"}],"homepage":"https://github.com/ackrate/ackrate-protocol/tree/main/packages/cli#readme","bugs":{"url":"https://github.com/ackrate/ackrate-protocol/issues"},"bin":{"ackrate":"dist/ackrate-cli.bundle.mjs"},"dist":{"shasum":"491d6a48894c0741b073b55d89c17bdfb10581c1","tarball":"https://registry.npmjs.org/@ackrate/cli/-/cli-0.2.0.tgz","fileCount":4,"integrity":"sha512-vpJTYAZRC2dWWAqPpv2iR87ti0IjqwtZ1Jo/PbiaYlOF2CCD4kD+GnRGkw/GDz48+fG3wHs8jszB3j6u/gaNHw==","signatures":[{"sig":"MEYCIQCRGXUp5t0UigH8/95OUJ4tpCPZHPI/HvMUR7Ms1IDu4wIhAOAxn5HjD4bpN+aKSXh7VfO/I1cSOAPQCCnUc5iCTcVi","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQC7fKVOsrehvk1hatC7KukXztHdxOfvQMwkhuqFV4luhQIhAOsen/30rGhmyVY8F25Iazrv6qi0/7C29KqbKOLzEpQj","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2241593},"type":"module","_from":"file:/var/folders/t0/nkfkv7xj1bx7njmf7_mb7nhh0000gn/T/ackrate-verified-candidates-oWZbx4/ackrate-cli-0.2.0.tgz","engines":{"node":">=22.0.0"},"scripts":{"test":"node --import tsx --test src/version.test.ts src/config.test.ts src/settlement-store.test.ts src/payment-failure.test.ts src/ops-signing-request.test.ts src/mainnet-demo.test.ts src/registered-mandate.test.ts src/mainnet-preflight-authorization.test.ts src/mainnet-funding.test.ts","build":"tsc -p tsconfig.json","start":"tsx src/index.ts","prepack":"npm --prefix ../.. run cli:bundle"},"_npmUser":{"name":"ackrate","email":"drewgonzales2021@gmail.com"},"_resolved":"/var/folders/t0/nkfkv7xj1bx7njmf7_mb7nhh0000gn/T/ackrate-verified-candidates-oWZbx4/ackrate-cli-0.2.0.tgz","_integrity":"sha512-vpJTYAZRC2dWWAqPpv2iR87ti0IjqwtZ1Jo/PbiaYlOF2CCD4kD+GnRGkw/GDz48+fG3wHs8jszB3j6u/gaNHw==","repository":{"url":"git+https://github.com/ackrate/ackrate-protocol.git","type":"git","directory":"packages/cli"},"_npmVersion":"11.16.0","description":"ACKRATE Mainnet CLI for project setup, mandate registration, USDC payments, reference agents, and signature coordination.","directories":{},"_nodeVersion":"26.3.0","dependencies":{"@stellar/stellar-sdk":"16.3.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"commander":"^12.1.0","@ackrate/core":"*","@ackrate/stellar":"*"},"_npmOperationalInternal":{"tmp":"tmp/cli_0.2.0_1788729788335_0.8490702540945443","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"_id":"@ackrate/cli@0.2.1","bin":{"ackrate":"dist/ackrate-cli.bundle.mjs"},"bugs":{"url":"https://github.com/ackrate/ackrate-protocol/issues"},"dist":{"shasum":"d7308adc4a6d9109e55113647a06ca95759f5c3a","tarball":"https://registry.npmjs.org/@ackrate/cli/-/cli-0.2.1.tgz","fileCount":4,"integrity":"sha512-kVNd5oYGeXaipN3HXCyI1izktSkAbWxtbz+FUuiElpzVs5c73MG+DsXskb9bRocA5VcvQQXjh1AGFkNTzhxhfQ==","signatures":[{"sig":"MEUCIQDlyl039anTFevl9c0iN8pEUPp24n0EAVtmINxi5PGPBAIgQ+ORq9sc2XANu9OIKc7xSq4q93LLRR/h5YMj775+iB0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCICAmJZNqzc5fkQO8X42dp2PLbb5N3DFqK6zXc70ND+cvAiBF16jbY81FQEvw5c5AxQPF6lpxrAU34bgOhjPAMVr1XA=="}],"unpackedSize":2268614},"name":"@ackrate/cli","type":"module","_from":"file:/private/tmp/ackrate-cli-setup-release.wUCtAn/ackrate-cli-0.2.1.tgz","engines":{"node":">=22.0.0"},"license":"Apache-2.0","scripts":{"test":"node --import tsx --test src/version.test.ts src/config.test.ts src/settlement-store.test.ts src/payment-failure.test.ts src/ops-signing-request.test.ts src/mainnet-demo.test.ts src/registered-mandate.test.ts src/mainnet-preflight-authorization.test.ts src/mainnet-funding.test.ts src/setup-resume.test.ts","build":"tsc -p tsconfig.json","start":"tsx src/index.ts","prepack":"npm --prefix ../.. run cli:bundle"},"version":"0.2.1","_npmUser":{"name":"ackrate","email":"drewgonzales2021@gmail.com"},"homepage":"https://github.com/ackrate/ackrate-protocol/tree/main/packages/cli#readme","keywords":["stellar","soroban","ackrate","agent-payments","x402","ap2","mandate","cli"],"_resolved":"/private/tmp/ackrate-cli-setup-release.wUCtAn/ackrate-cli-0.2.1.tgz","_integrity":"sha512-kVNd5oYGeXaipN3HXCyI1izktSkAbWxtbz+FUuiElpzVs5c73MG+DsXskb9bRocA5VcvQQXjh1AGFkNTzhxhfQ==","repository":{"url":"git+https://github.com/ackrate/ackrate-protocol.git","type":"git","directory":"packages/cli"},"_npmVersion":"11.16.0","description":"ACKRATE Mainnet CLI for project setup, mandate registration, USDC payments, reference agents, and signature coordination.","directories":{},"maintainers":[{"name":"ackrate","email":"drewgonzales2021@gmail.com"}],"_nodeVersion":"26.3.0","dependencies":{"@stellar/stellar-sdk":"16.3.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"commander":"^12.1.0","@ackrate/core":"*","@ackrate/stellar":"*"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/cli_0.2.1_1788778729030_0.6846772585055434"}}},"time":{"created":"2026-08-01T04:21:57.096Z","modified":"2026-09-07T10:58:49.389Z","0.1.7":"2026-08-01T04:21:57.406Z","0.1.8":"2026-08-02T03:24:02.949Z","0.1.9":"2026-08-26T11:15:37.399Z","0.2.0":"2026-09-06T21:23:08.440Z","0.2.1":"2026-09-07T10:58:49.183Z"},"bugs":{"url":"https://github.com/ackrate/ackrate-protocol/issues"},"license":"Apache-2.0","homepage":"https://github.com/ackrate/ackrate-protocol/tree/main/packages/cli#readme","keywords":["stellar","soroban","ackrate","agent-payments","x402","ap2","mandate","cli"],"repository":{"url":"git+https://github.com/ackrate/ackrate-protocol.git","type":"git","directory":"packages/cli"},"description":"ACKRATE Mainnet CLI for project setup, mandate registration, USDC payments, reference agents, and signature coordination.","maintainers":[{"name":"ackrate","email":"drewgonzales2021@gmail.com"}],"readme":"# @ackrate/cli 0.2.1\n\nRun Ackrate's contract-enforced USDC payment workflow on Stellar Mainnet from\nyour terminal: configure signers, register a mandate, approve its budget, pay a\nmerchant, and verify the receipt.\n\nMainnet MandateRegistry:\n[`CCLZEBJXG4YVJEPBCR5F27N733BCK5HQJWZZGB3K54JVODY3VAGP4HWR`](https://stellar.expert/explorer/public/contract/CCLZEBJXG4YVJEPBCR5F27N733BCK5HQJWZZGB3K54JVODY3VAGP4HWR).\n\nMainnet is the default. The CLI bundles the official deployment configuration\nfrom `@ackrate/stellar`; you do not need to copy the contract address or download\na separate manifest for this deployment. Authorized upgrades replace the\nimplementation at this same address. Compatibility and release evidence must\nstill be checked when that implementation changes.\n\n## Install\n\n```bash\nnpm install -g @ackrate/cli@0.2.1\nackrate --help\n```\n\nRequires Node.js 22 or newer. The installed command is `ackrate`. Check the\n[coordinated release status](https://github.com/ackrate/ackrate-protocol/blob/main/docs/ackrate-sdk-npm.md)\nfor publication and clean-install verification.\n\n## Before you spend\n\nMainnet operations use real USDC and XLM transaction fees. The CLI never creates\nfunded accounts or stores new private keys for this workflow. Prepare:\n\n- Existing user, agent, and merchant accounts authorized to use canonical Stellar USDC.\n- Enough user USDC for the chosen budget and XLM fee headroom on signing accounts.\n- Named user and agent identities in Stellar CLI secure storage or a supported signing device.\n- A verified merchant address and explicit price/budget approval.\n\nUse `--confirm-real-usdc` only after reviewing the operation. Selecting Mainnet\nor loading its configuration does not authorize a payment by itself.\n\n## Run the reference research agent\n\nReplace the example signer names and `G...` with your configured identities and\nmerchant address. This bounded run pays `0.01` USDC per source against a `0.03`\nUSDC mandate, then verifies rejection of a fourth purchase.\n\n```bash\nackrate demo research-agent \\\n  --network mainnet \\\n  --user-signer ackrate-user \\\n  --agent-signer ackrate-agent \\\n  --agent-secret-env ACKRATE_AGENT_SECRET \\\n  --merchant G... \\\n  --price 0.01 \\\n  --budget 0.03 \\\n  --confirm-real-usdc\n```\n\n`ACKRATE_AGENT_SECRET` is an environment-variable **name**. Inject its value\nfrom a secret manager; never put a secret in command arguments, source, or logs.\nThe research demo needs detached agent signing for its bound HTTP payment proof,\nin addition to the named transaction signer. The named identity and injected key\nmust represent the same agent.\n\nThe reference consumer and fulfillment agents run the HTTP 402 → on-chain\npayment → verified proof → delivered JSON flow. Success requires three durable\nreceipts matching three delivered resources, consistent budget/sequence and\nmerchant balance, and a fourth purchase rejected without payment. No LLM API\nkey is needed: this command demonstrates the payment and delivery path.\n\nThe official manifest is bundled. `--manifest ./mainnet-deployment.json` remains\navailable when you deliberately supply a complete deployment record; it must\nmatch the same official deployment and pass validation. The CLI rejects wrong-network RPCs, incomplete evidence,\nconflicting USDC identities, paused contracts, missing or reused actor accounts,\ninsufficient balances, and invalid demo price/budget combinations.\n\nAn interrupted reference demo keeps a durable run marker in the same atomic\nclaim used by `pay`. A new demo or payment cannot replace it. Preserve the\noriginal receipts, outcomes, and delivery origin; `settlement reconcile` reports\ntheir retained context for manual exact-receipt recovery. Automatic demo resume\nis not implemented, and payment acknowledgment cannot clear a demo marker.\n\nFor a registration that succeeded before allowance signing failed, an operator\ncan preserve the old journal and explicitly recover **that same registration**\nin a separate, private `ACKRATE_HOME` by adding\n`--resume-setup-registration <confirmed-registration-transaction-hash>` to the\ncommand above. This is not general payment recovery: the confirmed Mainnet\ntransaction, exact actors/asset/budget/credential, unchanged payer sequence,\nactive unexpired mandate and zero spent/sequence must all match. Registration is\nnot repeated and expiry is not extended. Real-USDC confirmation is still\nrequired. This narrow path needs at least 0.05 spendable payer XLM for allowance\nsetup; the normal payer and agent fee floors remain 0.50 XLM. These floors are\nreadiness checks, not guaranteed future transaction fees. Do not use this option\nafter any payment or allowance has applied or while another process is active.\n\n## Use a persistent project\n\n```bash\nackrate init \\\n  --user-signer ackrate-user \\\n  --agent-signer ackrate-agent \\\n  --merchant G... \\\n  --price 0.01 \\\n  --budget 0.03\nackrate setup\nackrate mandate create --confirm-real-usdc\nackrate pay --confirm-real-usdc\nackrate settlement reconcile\nackrate settlement acknowledge <TX_HASH>\n```\n\n`init` writes the public project configuration. `setup` performs read-only\naccount, balance, asset, RPC, and registry checks. Mandate creation has two\ndistinct user-authorized operations: register the mandate, then approve the\nregistry's token allowance. The allowance goes to the **contract**, never the\nagent or CLI. A budget is a cap, not an upfront deposit.\n\n`pay` is agent-signed. The contract checks the stored mandate and atomically\nconsumes its budget/sequence with the USDC transfer. A cached mandate or an SDK\npreflight cannot replace the on-chain `execute_payment` path.\n\n## Recover a pending payment\n\nBefore broadcast, the CLI signs, derives the exact transaction hash and validity\nwindow, and fsyncs a private journal and its parent directory. An atomic local claim prevents concurrent\nCLI processes using the same state from submitting a second payment.\n\nIf confirmation is uncertain, do not retry as a new payment:\n\n```bash\nackrate settlement reconcile\nackrate settlement acknowledge <EXACT_CONFIRMED_TX_HASH>\n```\n\nReconciliation queries the original hash without another signature or payment.\nA confirmed success remains blocked until you explicitly acknowledge that exact\ntransaction. A proven failure, or a provably expired transaction within retained\nRPC history, can be cleared without acknowledging a payment that never landed.\nUnknown results stay locked. Protect the journal and do not delete it to bypass\nan unresolved purchase. Incomplete markers, interrupted journal operations, and\ninvalid RPC history also remain locked for manual review.\n\n## Commands\n\n| Command | Purpose |\n|---|---|\n| `ackrate init` | Create an official Mainnet project; optional `--manifest` selects a validated supplied record. |\n| `ackrate setup` | Run read-only readiness checks for the configured project. |\n| `ackrate mandate create [-b <amount>] [-e <seconds>] [--confirm-real-usdc]` | Register a budget/expiry mandate and approve the registry allowance. |\n| `ackrate pay [amount] [--confirm-real-usdc]` | Submit an agent-signed mandate-validated USDC payment. |\n| `ackrate settlement reconcile` | Resolve the existing journal's exact transaction hash. |\n| `ackrate settlement acknowledge <tx-hash>` | Accept one exact confirmed success and reopen the payment path. |\n| `ackrate demo research-agent` | Run the bounded consumer/fulfillment reference flow with the required signer and spending options. |\n| `ackrate ops create` | Bind an unsigned authority transaction to a signing request. |\n| `ackrate ops verify` | Independently verify its network, hash, source, and exact contract call. |\n| `ackrate ops combine` | Combine exactly two different valid custodian signatures. |\n\nUse `ackrate <command> --help` for command-specific options. `-f` permits\nreplacement only where supported; it does not bypass unresolved settlement\nstate or the real-USDC confirmation guard.\n\n## Two-signature coordination\n\nThe `ops` commands coordinate already prepared governed operations, such as an\nauthorized pause or upgrade. They do not construct arbitrary safe governance\ntransactions for you, accept custodian secrets, or execute a change merely by\ncombining signatures. First build and simulate the exact intended invocation\nusing the [Mainnet contract guide](https://github.com/ackrate/ackrate-protocol-contracts/blob/main/contracts/mainnet-v2/README.md).\n\nFill the public addresses in\n[`examples/mainnet-authority-manifest.template.json`](examples/mainnet-authority-manifest.template.json),\nthen create the review request:\n\n```bash\nackrate ops create --xdr unsigned.xdr --manifest mainnet-authority.json --out request.json\nackrate ops verify --request request.json\n```\n\nEach custodian independently verifies the request and signs the unchanged XDR\nusing their own secure identity. The coordinator combines the two signed files:\n\n```bash\nackrate ops combine \\\n  --request request.json \\\n  --signed signed-a.xdr signed-b.xdr \\\n  --out ready.xdr\n```\n\nDuplicate, unknown, wrong-network, changed-payload, and mixed-request signatures\nare rejected. Before authorized submission, both custodians verify that the\ncombined envelope's hash still equals the request hash. Keep private signer\nstores and recovery material on independently controlled devices.\n\n## Local files\n\n| File | Purpose | Safe to commit? |\n|---|---|---:|\n| `ackrate.config.json` | Public Mainnet configuration, deployment identity, and signer names. | Yes, after checking for accidentally added secrets. |\n| `~/.ackrate/mandate.json` | Active mandate and setup transaction references. | No. |\n| `~/.ackrate/pending-settlement/state.json` | Prepared hash, sequence, and validity window until reconciliation. | No. |\n\n`ACKRATE_HOME` can relocate private CLI state. All processes sharing an account's\nworkflow must use coordinated durable state; separate directories are not a safe\nway to run concurrent payments against an unresolved mandate.\n\n## Configuration and source\n\nThe CLI bundles [`@ackrate/core`](https://www.npmjs.com/package/@ackrate/core)\nand [`@ackrate/stellar`](https://www.npmjs.com/package/@ackrate/stellar).\nThe [canonical deployment configuration](https://github.com/ackrate/ackrate-protocol/blob/main/packages/stellar/src/deployments.ts)\nmaps the coordinated packages to the Mainnet registry above. See its\n[deployment evidence](https://github.com/ackrate/ackrate-protocol-contracts/blob/main/contracts/mainnet-v2/README.md)\nor see the [hosted wallet project](https://github.com/ackrate/ackrate-protocol-demo).\n\nApache-2.0.\n","readmeFilename":"README.md"}