{
  "schemaVersion": "1.0",
  "item": {
    "slug": "receipts-guard",
    "name": "Receipts Guard",
    "source": "tencent",
    "type": "skill",
    "category": "金融交易",
    "sourceUrl": "https://clawhub.ai/lazaruseth/receipts-guard",
    "canonicalUrl": "https://clawhub.ai/lazaruseth/receipts-guard",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/receipts-guard",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=receipts-guard",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SECURITY_AUDIT.md",
      "SKILL.md",
      "capture.js",
      "fly.toml",
      "package-lock.json",
      "package.json"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-04-23T16:43:11.935Z",
      "expiresAt": "2026-04-30T16:43:11.935Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=4claw-imageboard",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=4claw-imageboard",
        "contentDisposition": "attachment; filename=\"4claw-imageboard-1.0.1.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/receipts-guard"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/receipts-guard",
    "agentPageUrl": "https://openagent3.xyz/skills/receipts-guard/agent",
    "manifestUrl": "https://openagent3.xyz/skills/receipts-guard/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/receipts-guard/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "RECEIPTS Guard v0.7.1 - The Three Rails",
        "body": "\"The rails for the machine economy.\"\n\nERC-8004 identity + x402 payments + arbitration protocol. The infrastructure for agent commerce.\n\nThe Three Rails:\n\nRailStandardPurposeIdentityERC-8004On-chain agent identity anchoringTrustERC-8004 ReputationArbitration outcomes build reputationPaymentx402Paid arbitration, automated settlements\n\nLocal-first. Chain-anchored. Cloud-deployable. Security-hardened."
      },
      {
        "title": "What's New in v0.7.1 (Security Hardening)",
        "body": "🔐 HTTP Authentication - API Key and DID Request Signing\n🛡️ Authorization Checks - Counterparty verification for /accept\n🌐 CORS Hardening - Configurable origin whitelist (blocked by default)\n⚡ Rate Limiting - 100 requests/minute per IP\n✅ Input Validation - Payment address, cost, deadline validation"
      },
      {
        "title": "What's New in v0.7.0",
        "body": "⛓️ ERC-8004 Integration - Anchor identity to Ethereum/Base registries\n💰 x402 Payments - Paid arbitration with USDC/ETH\n☁️ Cloud Deployment - Dockerfile + Fly.io Sprites support\n🌐 HTTP Server Mode - REST API for cloud agents"
      },
      {
        "title": "From v0.6.0:",
        "body": "🪪 Self-Sovereign Identity - DID-based identity with Ed25519 signatures\n🔑 Key Rotation - Old key signs new key, creating unbroken proof chain\n👤 Human Controller - Twitter-based recovery backstop"
      },
      {
        "title": "From v0.5.0:",
        "body": "⚖️ Full Arbitration Protocol - propose → accept → fulfill → arbitrate → ruling\n📜 PAO (Programmable Agreement Object) - Canonical termsHash, mutual signatures\n📊 LPR (Legal Provenance Review) - Timeline visualization for arbiters"
      },
      {
        "title": "Quick Start",
        "body": "# === ARBITRATION FLOW ===\n\n# 1. Create proposal\nnode capture.js propose \"I will deliver API docs by Friday\" \"AgentX\" \\\n  --arbiter=\"arbiter-prime\" --deadline=\"2026-02-14\"\n\n# 2. Accept proposal (as counterparty)\nnode capture.js accept --proposalId=prop_abc123\n\n# 3. Fulfill agreement\nnode capture.js fulfill --agreementId=agr_xyz789 \\\n  --evidence=\"Docs delivered at https://docs.example.com\"\n\n# --- OR if there's a dispute ---\n\n# 4. Open arbitration\nnode capture.js arbitrate --agreementId=agr_xyz789 \\\n  --reason=\"non_delivery\" --evidence=\"No docs received by deadline\"\n\n# 5. Submit evidence (both parties)\nnode capture.js submit --arbitrationId=arb_def456 \\\n  --evidence=\"Screenshot of empty inbox\" --type=screenshot\n\n# 6. Issue ruling (as arbiter)\nnode capture.js ruling --arbitrationId=arb_def456 \\\n  --decision=claimant --reasoning=\"Evidence shows non-delivery past deadline\"\n\n# 7. View timeline\nnode capture.js timeline --agreementId=agr_xyz789"
      },
      {
        "title": "Identity (v0.6.0)",
        "body": "identity init - Create Identity\n\nnode capture.js identity init --namespace=remaster_io --name=receipts-guard \\\n  --controller-twitter=@Remaster_io\n\nCreates:\n\nEd25519 keypair\nDID document: did:agent:<namespace>:<name>\nHuman controller configuration\n\nidentity show - Display Identity\n\nnode capture.js identity show [--full]\n\nShows identity summary or full DID document with --full.\n\nidentity rotate - Rotate Keys\n\nnode capture.js identity rotate [--reason=scheduled|compromise|device_change]\n\nOld key signs new key (proof chain)\nOld key archived for historical signature verification\nUnbroken chain = same identity\n\nidentity verify - Verify Identity or Signature\n\n# Verify DID key chain\nnode capture.js identity verify --did=did:agent:acme:trade-bot\n\n# Verify signature\nnode capture.js identity verify \\\n  --signature=\"ed25519:xxx:timestamp\" \\\n  --termsHash=\"sha256:abc123...\"\n\nidentity set-controller - Set Human Controller\n\nnode capture.js identity set-controller --twitter=@handle\n\nLinks a human controller for emergency recovery.\n\nidentity recover - Emergency Recovery\n\nnode capture.js identity recover --controller-proof=<TWITTER_URL> --confirm\n\nHuman controller posts recovery authorization, all old keys revoked.\n\nidentity publish - Publish DID Document\n\nnode capture.js identity publish [--platform=moltbook|ipfs|local]\n\nidentity anchor - Anchor to ERC-8004 (v0.7.0)\n\nnode capture.js identity anchor --chain=ethereum|base|sepolia\n\nRegisters identity on-chain to ERC-8004 Identity Registry:\n\nRequires RECEIPTS_WALLET_PRIVATE_KEY environment variable\nStores transaction hash in DID document\nMainnet: credibility anchor\nBase: x402-native, lower fees\n\nDeployed Registries:\n\nChainIdentity RegistryStatusEthereum0x8004A169FB4a3325136EB29fA0ceB6D2e539a432LiveSepolia0x8004A818BFB912233c491871b3d84c89A494BD9eTestnetBaseComing soonTBD\n\nidentity resolve - Resolve DID (v0.7.0)\n\nnode capture.js identity resolve --did=did:agent:namespace:name [--chain=CHAIN]\n\nResolves DID from local storage or on-chain registry."
      },
      {
        "title": "ERC-8004 Integration (v0.7.0)",
        "body": "The ERC-8004 standard provides three registries for agent trust:\n\nIdentity Registry - NFT-based agent identifiers\nReputation Registry - On-chain feedback and scores\nValidation Registry - Work verification by validators\n\nRECEIPTS integrates with existing registries while providing superior off-chain agreement lifecycle management.\n\nChain Configuration:\n\n# Environment variables\nexport ETHEREUM_RPC=https://eth.llamarpc.com\nexport BASE_RPC=https://mainnet.base.org\nexport RECEIPTS_WALLET_PRIVATE_KEY=0x... # Never commit this!"
      },
      {
        "title": "x402 Payment Integration (v0.7.0)",
        "body": "x402 enables paid arbitration - arbiters get compensated for their work.\n\nProposal with Payment Terms\n\nnode capture.js propose \"Service agreement\" \"counterparty\" \\\n  --arbiter=\"arbiter-prime\" \\\n  --arbitration-cost=\"10\" \\\n  --payment-token=\"USDC\" \\\n  --payment-chain=\"base\" \\\n  --payment-address=\"0x...\" # Arbiter's address\n\nArbitration with Payment Proof\n\n# Without payment proof (fails if x402 required)\nnode capture.js arbitrate --agreementId=agr_xxx --reason=\"non_delivery\"\n# Error: Payment required: 10 USDC\n\n# With payment proof\nnode capture.js arbitrate --agreementId=agr_xxx --reason=\"non_delivery\" \\\n  --evidence=\"...\" --payment-proof=\"0x123...\"\n\nx402 Schema:\n\n{\n  \"x402\": {\n    \"arbitrationCost\": \"10\",\n    \"arbitrationToken\": \"USDC\",\n    \"arbitrationChain\": 8453,\n    \"paymentAddress\": \"0x...\",\n    \"paymentProtocol\": \"x402\",\n    \"version\": \"1.0\"\n  }\n}"
      },
      {
        "title": "Cloud Deployment (v0.7.0)",
        "body": "Run RECEIPTS Guard as a persistent cloud agent.\n\nHTTP Server Mode\n\nnode capture.js serve [--port=3000]\n\nPublic Endpoints (no auth):\n\nGET / - Service info\nGET /health - Health check\nGET /identity - DID document\nGET /identity/chains - Chain status\n\nProtected Endpoints (auth required):\n\nGET /list - List all records\nGET /proposals - List proposals\nGET /agreements - List agreements\nPOST /propose - Create proposal\nPOST /accept - Accept proposal (counterparty only)"
      },
      {
        "title": "HTTP API Security (v0.7.1)",
        "body": "The HTTP server implements multiple security layers:\n\nAuthentication\n\nOption 1: API Key\n\n# Generate a secure API key\nexport RECEIPTS_API_KEY=$(openssl rand -hex 32)\n\n# Use in requests\ncurl -H \"X-API-Key: $RECEIPTS_API_KEY\" https://your-agent.fly.dev/list\n\nOption 2: DID Request Signing\n\n# Sign each request with your Ed25519 key\n# Headers required:\n# - X-DID: your DID (e.g., did:agent:namespace:name)\n# - X-DID-Timestamp: Unix timestamp in milliseconds\n# - X-DID-Signature: ed25519:BASE64URL_SIGNATURE:TIMESTAMP\n\n# Signed message format: METHOD:PATH:TIMESTAMP\n# Example: POST:/propose:1707494400000\n\nCORS Configuration\n\nBy default, cross-origin requests are blocked for security.\n\n# Allow specific origins\nexport RECEIPTS_ALLOWED_ORIGINS=https://app.example.com,https://dashboard.example.com\n\n# Allow all origins (not recommended for production)\nexport RECEIPTS_ALLOWED_ORIGINS=*\n\nRate Limiting\n\nDefault: 100 requests per minute per IP.\n\n# Customize rate limit\nexport RECEIPTS_RATE_LIMIT=200\n\nResponse headers:\n\nX-RateLimit-Limit - Max requests per window\nX-RateLimit-Remaining - Remaining requests\nX-RateLimit-Reset - Window reset timestamp\n\nInput Validation\n\nAll POST endpoints validate:\n\nPayment addresses - Must be valid Ethereum address format (0x + 40 hex chars)\nArbitration costs - Must be non-negative, max 1,000,000\nDeadlines - Must be valid ISO date in the future\nPayment tokens - Must be USDC, ETH, USDT, or DAI\nPayment chains - Must be configured chain (ethereum, base, sepolia)\n\nAuthorization\n\n/accept endpoint verifies the requester is the designated counterparty (when using DID signing)\nAPI key authentication trusts the server owner\n\nEnvironment Variables\n\n# Security\nRECEIPTS_API_KEY=              # API key for authentication (generate with: openssl rand -hex 32)\nRECEIPTS_ALLOWED_ORIGINS=      # Comma-separated CORS origins (default: none/blocked)\nRECEIPTS_RATE_LIMIT=           # Requests per minute (default: 100)\n\n# Existing\nRECEIPTS_WALLET_PRIVATE_KEY=   # For on-chain transactions\nRECEIPTS_AGENT_ID=             # Agent identifier\nETHEREUM_RPC=                  # Ethereum RPC endpoint\nBASE_RPC=                      # Base RPC endpoint\n\nFly.io Sprites Deployment\n\n# Deploy\nfly launch\nfly deploy\n\n# Configure secrets\nfly secrets set RECEIPTS_WALLET_PRIVATE_KEY=...\nfly secrets set ETHEREUM_RPC=...\n\n# Create persistent volume\nfly volumes create receipts_data --size 1\n\nDocker\n\ndocker build -t receipts-guard .\ndocker run -p 3000:3000 -v receipts-data:/data receipts-guard\n\nmigrate - Migrate to DID\n\nnode capture.js migrate --to-did\n\nUpgrades existing agreements to use DID references (preserves legacy data)."
      },
      {
        "title": "Arbitration Protocol",
        "body": "propose - Create Agreement Proposal\n\nnode capture.js propose \"TERMS\" \"COUNTERPARTY\" --arbiter=\"ARBITER\" [options]\n\nOptions:\n  --arbiter=AGENT         Required: mutually agreed arbiter\n  --deadline=ISO_DATE     Fulfillment deadline\n  --value=AMOUNT          Agreement value (for reference)\n  --channel=CHANNEL       Communication channel\n\nCreates a PAO (Programmable Agreement Object) with:\n\ntermsHash - SHA-256 of canonical terms + parties + deadline\nProposer signature\nProposed arbiter\nStatus: pending_acceptance\n\naccept - Accept Proposal\n\nnode capture.js accept --proposalId=prop_xxx\n\nAdds counterparty signature to same termsHash\nCreates active agreement in agreements/\nBoth parties have signed - agreement is binding\n\nreject - Reject Proposal\n\nnode capture.js reject --proposalId=prop_xxx --reason=\"REASON\"\n\nfulfill - Claim Fulfillment\n\nnode capture.js fulfill --agreementId=agr_xxx --evidence=\"PROOF\"\n\nEvidence is required (proof of completion)\nStatus: pending_confirmation\nCounterparty has 48-hour grace period to dispute\n\narbitrate - Open Dispute\n\nnode capture.js arbitrate --agreementId=agr_xxx --reason=\"BREACH_TYPE\" --evidence=\"PROOF\"\n\nValid reasons:\n  non_delivery      - Counterparty didn't deliver\n  partial_delivery  - Delivery was incomplete\n  quality           - Delivery didn't meet specs\n  deadline_breach   - Missed deadline\n  repudiation       - Counterparty denies agreement\n  other             - Other breach\n\nsubmit - Submit Evidence\n\nnode capture.js submit --arbitrationId=arb_xxx --evidence=\"PROOF\" [--type=TYPE]\n\nTypes:\n  document    - Text evidence (default)\n  screenshot  - Visual proof\n  witness     - Third-party witness statement\n\nBoth parties can submit evidence during the evidence period (7 days default).\n\nruling - Issue Ruling (Arbiter Only)\n\nnode capture.js ruling --arbitrationId=arb_xxx --decision=DECISION --reasoning=\"EXPLANATION\"\n\nDecisions:\n  claimant    - Rule in favor of claimant\n  respondent  - Rule in favor of respondent\n  split       - Split responsibility\n\nOnly the designated arbiter can issue rulings\nReasoning hash posted to Moltbook (optional)\nAgreement closes with ruling recorded\n\ntimeline - Generate LPR (Legal Provenance Review)\n\nnode capture.js timeline --agreementId=agr_xxx\n\nGenerates chronological timeline showing:\n\nAll state transitions\nEvidence submissions with hashes\nSignatures and timestamps\nRuling (if issued)"
      },
      {
        "title": "Capture Commands",
        "body": "Capture Agreement (ToS)\n\nnode capture.js capture \"TERMS_TEXT\" \"SOURCE_URL\" \"MERCHANT_NAME\" [options]\n\nOptions:\n  --consent-type=TYPE     explicit | implicit | continued_use\n  --element=SELECTOR      DOM element that triggered consent\n  --screenshot=BASE64     Screenshot at time of consent\n\nCapture Promise (Agent-to-Agent)\n\nnode capture.js promise \"COMMITMENT_TEXT\" \"COUNTERPARTY\" [options]\n\nOptions:\n  --direction=outbound    outbound (I promised) | inbound (they promised)\n  --channel=email         email | chat | moltbook | api"
      },
      {
        "title": "Utility Commands",
        "body": "List Records\n\nnode capture.js list [--type=TYPE]\n\nTypes:\n  all          - Everything (default)\n  captures     - ToS captures and promises\n  proposals    - Pending proposals\n  agreements   - Active/closed agreements\n  arbitrations - Open/closed arbitrations\n  rulings      - Issued rulings\n\nQuery\n\nnode capture.js query --merchant=\"Company\" --risk-level=high\n\nDiff\n\nnode capture.js diff --capture1=ID --capture2=ID\n\nDispute Package\n\nnode capture.js dispute --captureId=local_xxx\n\nWitness\n\nnode capture.js witness --captureId=ID [--anchor=moltbook|bitcoin|both]\n\nRules\n\nnode capture.js rules --list\nnode capture.js rules --add=\"PATTERN\" --flag=\"FLAG_NAME\"\n\nExport\n\nnode capture.js export --format=json|csv|pdf [--captureId=ID]"
      },
      {
        "title": "State Machine",
        "body": "PROPOSAL:\n  pending_acceptance → accepted → (becomes agreement)\n                    → rejected\n                    → expired\n\nAGREEMENT:\n  active → pending_confirmation → fulfilled → closed\n        → disputed → (becomes arbitration)\n\nARBITRATION:\n  open → evidence_period → deliberation → ruled → closed"
      },
      {
        "title": "DID Document (identity/did.json) - v0.6.0",
        "body": "{\n  \"@context\": [\"https://www.w3.org/ns/did/v1\"],\n  \"id\": \"did:agent:remaster_io:receipts-guard\",\n\n  \"verificationMethod\": [{\n    \"id\": \"did:agent:remaster_io:receipts-guard#key-xxx\",\n    \"type\": \"Ed25519VerificationKey2020\",\n    \"controller\": \"did:agent:remaster_io:receipts-guard\",\n    \"publicKeyMultibase\": \"z6Mkf5rGMoatrSj1f...\"\n  }],\n\n  \"authentication\": [\"did:agent:remaster_io:receipts-guard#key-xxx\"],\n\n  \"keyHistory\": [{\n    \"keyId\": \"#key-xxx\",\n    \"activatedAt\": \"2026-02-09T00:00:00Z\",\n    \"rotatedAt\": null,\n    \"rotationProof\": null,\n    \"publicKeyMultibase\": \"z6Mkf5rGMoatrSj1f...\"\n  }],\n\n  \"controller\": {\n    \"type\": \"human\",\n    \"platform\": \"twitter\",\n    \"handle\": \"@Remaster_io\"\n  },\n\n  \"created\": \"2026-02-09T00:00:00Z\",\n  \"updated\": \"2026-02-09T00:00:00Z\"\n}"
      },
      {
        "title": "Signature Formats",
        "body": "# Ed25519 (v0.6.0) - cryptographically secure\ned25519:<base64url-signature>:<timestamp>\n\n# Legacy HMAC (v0.5.0 and earlier) - still supported for backward compatibility\nsig:<hex-signature>:<timestamp>"
      },
      {
        "title": "Proposal (proposals/prop_xxx.json)",
        "body": "{\n  \"proposalId\": \"prop_xxx\",\n  \"termsHash\": \"sha256:...\",\n  \"terms\": { \"text\": \"...\", \"canonical\": \"...\" },\n  \"proposer\": \"agent-a\",\n  \"counterparty\": \"agent-b\",\n  \"proposedArbiter\": \"arbiter-prime\",\n  \"deadline\": \"2026-02-15T00:00:00Z\",\n  \"value\": \"100 USD\",\n  \"proposerSignature\": \"ed25519:...\",\n  \"status\": \"pending_acceptance\",\n  \"createdAt\": \"...\",\n  \"expiresAt\": \"...\"\n}"
      },
      {
        "title": "Agreement (agreements/agr_xxx.json)",
        "body": "{\n  \"agreementId\": \"agr_xxx\",\n  \"termsHash\": \"sha256:...\",\n  \"parties\": [\"agent-a\", \"agent-b\"],\n  \"arbiter\": \"arbiter-prime\",\n  \"signatures\": {\n    \"agent-a\": \"ed25519:...\",\n    \"agent-b\": \"ed25519:...\"\n  },\n  \"status\": \"active\",\n  \"timeline\": [\n    { \"event\": \"proposed\", \"timestamp\": \"...\", \"actor\": \"agent-a\" },\n    { \"event\": \"accepted\", \"timestamp\": \"...\", \"actor\": \"agent-b\" }\n  ]\n}"
      },
      {
        "title": "Arbitration (arbitrations/arb_xxx.json)",
        "body": "{\n  \"arbitrationId\": \"arb_xxx\",\n  \"agreementId\": \"agr_xxx\",\n  \"claimant\": \"agent-a\",\n  \"respondent\": \"agent-b\",\n  \"arbiter\": \"arbiter-prime\",\n  \"reason\": \"non_delivery\",\n  \"status\": \"evidence_period\",\n  \"evidence\": {\n    \"claimant\": [...],\n    \"respondent\": [...]\n  },\n  \"evidenceDeadline\": \"...\"\n}"
      },
      {
        "title": "Ruling (rulings/rul_xxx.json)",
        "body": "{\n  \"rulingId\": \"rul_xxx\",\n  \"arbitrationId\": \"arb_xxx\",\n  \"arbiter\": \"arbiter-prime\",\n  \"decision\": \"claimant\",\n  \"reasoning\": \"...\",\n  \"reasoningHash\": \"sha256:...\",\n  \"issuedAt\": \"...\"\n}"
      },
      {
        "title": "Data Storage",
        "body": "~/.openclaw/receipts/\n├── identity/                   # v0.6.0 Self-Sovereign Identity\n│   ├── did.json                # DID document (public)\n│   ├── private/\n│   │   ├── key-current.json    # Current private key\n│   │   └── key-archive/        # Rotated keys (for verification)\n│   ├── key-history.json        # Rotation chain with proofs\n│   ├── controller.json         # Human controller config\n│   └── recovery/               # Recovery records\n├── index.json                  # Fast lookup index\n├── proposals/\n│   └── prop_xxx.json           # Proposal metadata\n├── agreements/\n│   ├── agr_xxx.json            # Agreement metadata\n│   └── agr_xxx.txt             # Terms text\n├── arbitrations/\n│   └── arb_xxx.json            # Arbitration record\n├── rulings/\n│   └── rul_xxx.json            # Ruling record\n├── witnesses/\n│   └── witness_xxx.json        # Witness anchors\n├── local_xxx.json              # ToS captures\n├── promise_xxx.json            # Promise captures\n└── custom-rules.json           # Custom rulesets"
      },
      {
        "title": "Before Accepting Any Agreement",
        "body": "Review the termsHash - Ensure you're signing what you expect\nVerify the arbiter - Must be mutually trusted\nCheck the deadline - Ensure it's achievable\nRun capture on any ToS you encounter:\nnode capture.js capture \"TERMS\" \"URL\" \"MERCHANT\""
      },
      {
        "title": "Before Making Commitments",
        "body": "Use propose for formal commitments:\nnode capture.js propose \"I will deliver X by Y\" \"AgentZ\" --arbiter=\"trusted-arbiter\"\n\n\nWait for acceptance before acting\nDocument fulfillment with evidence"
      },
      {
        "title": "During Arbitration",
        "body": "Submit all relevant evidence before deadline\nUse appropriate evidence types (document, screenshot, witness)\nReference specific termsHash in submissions"
      },
      {
        "title": "Environment Variables",
        "body": "RECEIPTS_AGENT_ID       # Your agent identifier\nRECEIPTS_MOLTBOOK_KEY   # API key for Moltbook witnessing\nRECEIPTS_CUSTOM_RULES   # Path to custom rules file"
      },
      {
        "title": "Framework Integration",
        "body": "const receipts = require('./capture.js');\n\n// Generate terms hash for verification\nconst hash = receipts.generateTermsHash(\n  \"I will deliver API docs\",\n  [\"agent-a\", \"agent-b\"],\n  \"2026-02-14\"\n);\n\n// Sign terms\nconst signature = receipts.signTerms(hash, \"my-agent-id\");\n\n// Verify signature\nconst valid = receipts.verifySignature(hash, signature, \"my-agent-id\");\n\n// Access directories\nconsole.log(receipts.PROPOSALS_DIR);\nconsole.log(receipts.AGREEMENTS_DIR);\nconsole.log(receipts.ARBITRATIONS_DIR);\nconsole.log(receipts.RULINGS_DIR);"
      },
      {
        "title": "Links",
        "body": "GitHub: https://github.com/lazaruseth/receipts-mvp\nClawHub: https://clawhub.ai/lazaruseth/receipts-guard\nMoltbook: https://moltbook.com/u/receipts-guard\nReport Issues: https://github.com/lazaruseth/receipts-mvp/issues"
      },
      {
        "title": "Disclaimer",
        "body": "RECEIPTS Guard provides evidence capture and arbitration workflow tooling. It is NOT a substitute for legal review. The arbitration protocol provides structure but does not constitute legal arbitration. Always consult with a qualified attorney for actual disputes."
      }
    ],
    "body": "RECEIPTS Guard v0.7.1 - The Three Rails\n\n\"The rails for the machine economy.\"\n\nERC-8004 identity + x402 payments + arbitration protocol. The infrastructure for agent commerce.\n\nThe Three Rails:\n\nRail\tStandard\tPurpose\nIdentity\tERC-8004\tOn-chain agent identity anchoring\nTrust\tERC-8004 Reputation\tArbitration outcomes build reputation\nPayment\tx402\tPaid arbitration, automated settlements\n\nLocal-first. Chain-anchored. Cloud-deployable. Security-hardened.\n\nWhat's New in v0.7.1 (Security Hardening)\n🔐 HTTP Authentication - API Key and DID Request Signing\n🛡️ Authorization Checks - Counterparty verification for /accept\n🌐 CORS Hardening - Configurable origin whitelist (blocked by default)\n⚡ Rate Limiting - 100 requests/minute per IP\n✅ Input Validation - Payment address, cost, deadline validation\nWhat's New in v0.7.0\n⛓️ ERC-8004 Integration - Anchor identity to Ethereum/Base registries\n💰 x402 Payments - Paid arbitration with USDC/ETH\n☁️ Cloud Deployment - Dockerfile + Fly.io Sprites support\n🌐 HTTP Server Mode - REST API for cloud agents\nFrom v0.6.0:\n🪪 Self-Sovereign Identity - DID-based identity with Ed25519 signatures\n🔑 Key Rotation - Old key signs new key, creating unbroken proof chain\n👤 Human Controller - Twitter-based recovery backstop\nFrom v0.5.0:\n⚖️ Full Arbitration Protocol - propose → accept → fulfill → arbitrate → ruling\n📜 PAO (Programmable Agreement Object) - Canonical termsHash, mutual signatures\n📊 LPR (Legal Provenance Review) - Timeline visualization for arbiters\nQuick Start\n# === ARBITRATION FLOW ===\n\n# 1. Create proposal\nnode capture.js propose \"I will deliver API docs by Friday\" \"AgentX\" \\\n  --arbiter=\"arbiter-prime\" --deadline=\"2026-02-14\"\n\n# 2. Accept proposal (as counterparty)\nnode capture.js accept --proposalId=prop_abc123\n\n# 3. Fulfill agreement\nnode capture.js fulfill --agreementId=agr_xyz789 \\\n  --evidence=\"Docs delivered at https://docs.example.com\"\n\n# --- OR if there's a dispute ---\n\n# 4. Open arbitration\nnode capture.js arbitrate --agreementId=agr_xyz789 \\\n  --reason=\"non_delivery\" --evidence=\"No docs received by deadline\"\n\n# 5. Submit evidence (both parties)\nnode capture.js submit --arbitrationId=arb_def456 \\\n  --evidence=\"Screenshot of empty inbox\" --type=screenshot\n\n# 6. Issue ruling (as arbiter)\nnode capture.js ruling --arbitrationId=arb_def456 \\\n  --decision=claimant --reasoning=\"Evidence shows non-delivery past deadline\"\n\n# 7. View timeline\nnode capture.js timeline --agreementId=agr_xyz789\n\nCommands\nIdentity (v0.6.0)\nidentity init - Create Identity\nnode capture.js identity init --namespace=remaster_io --name=receipts-guard \\\n  --controller-twitter=@Remaster_io\n\n\nCreates:\n\nEd25519 keypair\nDID document: did:agent:<namespace>:<name>\nHuman controller configuration\nidentity show - Display Identity\nnode capture.js identity show [--full]\n\n\nShows identity summary or full DID document with --full.\n\nidentity rotate - Rotate Keys\nnode capture.js identity rotate [--reason=scheduled|compromise|device_change]\n\nOld key signs new key (proof chain)\nOld key archived for historical signature verification\nUnbroken chain = same identity\nidentity verify - Verify Identity or Signature\n# Verify DID key chain\nnode capture.js identity verify --did=did:agent:acme:trade-bot\n\n# Verify signature\nnode capture.js identity verify \\\n  --signature=\"ed25519:xxx:timestamp\" \\\n  --termsHash=\"sha256:abc123...\"\n\nidentity set-controller - Set Human Controller\nnode capture.js identity set-controller --twitter=@handle\n\n\nLinks a human controller for emergency recovery.\n\nidentity recover - Emergency Recovery\nnode capture.js identity recover --controller-proof=<TWITTER_URL> --confirm\n\n\nHuman controller posts recovery authorization, all old keys revoked.\n\nidentity publish - Publish DID Document\nnode capture.js identity publish [--platform=moltbook|ipfs|local]\n\nidentity anchor - Anchor to ERC-8004 (v0.7.0)\nnode capture.js identity anchor --chain=ethereum|base|sepolia\n\n\nRegisters identity on-chain to ERC-8004 Identity Registry:\n\nRequires RECEIPTS_WALLET_PRIVATE_KEY environment variable\nStores transaction hash in DID document\nMainnet: credibility anchor\nBase: x402-native, lower fees\n\nDeployed Registries:\n\nChain\tIdentity Registry\tStatus\nEthereum\t0x8004A169FB4a3325136EB29fA0ceB6D2e539a432\tLive\nSepolia\t0x8004A818BFB912233c491871b3d84c89A494BD9e\tTestnet\nBase\tComing soon\tTBD\nidentity resolve - Resolve DID (v0.7.0)\nnode capture.js identity resolve --did=did:agent:namespace:name [--chain=CHAIN]\n\n\nResolves DID from local storage or on-chain registry.\n\nERC-8004 Integration (v0.7.0)\n\nThe ERC-8004 standard provides three registries for agent trust:\n\nIdentity Registry - NFT-based agent identifiers\nReputation Registry - On-chain feedback and scores\nValidation Registry - Work verification by validators\n\nRECEIPTS integrates with existing registries while providing superior off-chain agreement lifecycle management.\n\nChain Configuration:\n\n# Environment variables\nexport ETHEREUM_RPC=https://eth.llamarpc.com\nexport BASE_RPC=https://mainnet.base.org\nexport RECEIPTS_WALLET_PRIVATE_KEY=0x... # Never commit this!\n\nx402 Payment Integration (v0.7.0)\n\nx402 enables paid arbitration - arbiters get compensated for their work.\n\nProposal with Payment Terms\nnode capture.js propose \"Service agreement\" \"counterparty\" \\\n  --arbiter=\"arbiter-prime\" \\\n  --arbitration-cost=\"10\" \\\n  --payment-token=\"USDC\" \\\n  --payment-chain=\"base\" \\\n  --payment-address=\"0x...\" # Arbiter's address\n\nArbitration with Payment Proof\n# Without payment proof (fails if x402 required)\nnode capture.js arbitrate --agreementId=agr_xxx --reason=\"non_delivery\"\n# Error: Payment required: 10 USDC\n\n# With payment proof\nnode capture.js arbitrate --agreementId=agr_xxx --reason=\"non_delivery\" \\\n  --evidence=\"...\" --payment-proof=\"0x123...\"\n\n\nx402 Schema:\n\n{\n  \"x402\": {\n    \"arbitrationCost\": \"10\",\n    \"arbitrationToken\": \"USDC\",\n    \"arbitrationChain\": 8453,\n    \"paymentAddress\": \"0x...\",\n    \"paymentProtocol\": \"x402\",\n    \"version\": \"1.0\"\n  }\n}\n\nCloud Deployment (v0.7.0)\n\nRun RECEIPTS Guard as a persistent cloud agent.\n\nHTTP Server Mode\nnode capture.js serve [--port=3000]\n\n\nPublic Endpoints (no auth):\n\nGET / - Service info\nGET /health - Health check\nGET /identity - DID document\nGET /identity/chains - Chain status\n\nProtected Endpoints (auth required):\n\nGET /list - List all records\nGET /proposals - List proposals\nGET /agreements - List agreements\nPOST /propose - Create proposal\nPOST /accept - Accept proposal (counterparty only)\nHTTP API Security (v0.7.1)\n\nThe HTTP server implements multiple security layers:\n\nAuthentication\n\nOption 1: API Key\n\n# Generate a secure API key\nexport RECEIPTS_API_KEY=$(openssl rand -hex 32)\n\n# Use in requests\ncurl -H \"X-API-Key: $RECEIPTS_API_KEY\" https://your-agent.fly.dev/list\n\n\nOption 2: DID Request Signing\n\n# Sign each request with your Ed25519 key\n# Headers required:\n# - X-DID: your DID (e.g., did:agent:namespace:name)\n# - X-DID-Timestamp: Unix timestamp in milliseconds\n# - X-DID-Signature: ed25519:BASE64URL_SIGNATURE:TIMESTAMP\n\n# Signed message format: METHOD:PATH:TIMESTAMP\n# Example: POST:/propose:1707494400000\n\nCORS Configuration\n\nBy default, cross-origin requests are blocked for security.\n\n# Allow specific origins\nexport RECEIPTS_ALLOWED_ORIGINS=https://app.example.com,https://dashboard.example.com\n\n# Allow all origins (not recommended for production)\nexport RECEIPTS_ALLOWED_ORIGINS=*\n\nRate Limiting\n\nDefault: 100 requests per minute per IP.\n\n# Customize rate limit\nexport RECEIPTS_RATE_LIMIT=200\n\n\nResponse headers:\n\nX-RateLimit-Limit - Max requests per window\nX-RateLimit-Remaining - Remaining requests\nX-RateLimit-Reset - Window reset timestamp\nInput Validation\n\nAll POST endpoints validate:\n\nPayment addresses - Must be valid Ethereum address format (0x + 40 hex chars)\nArbitration costs - Must be non-negative, max 1,000,000\nDeadlines - Must be valid ISO date in the future\nPayment tokens - Must be USDC, ETH, USDT, or DAI\nPayment chains - Must be configured chain (ethereum, base, sepolia)\nAuthorization\n/accept endpoint verifies the requester is the designated counterparty (when using DID signing)\nAPI key authentication trusts the server owner\nEnvironment Variables\n# Security\nRECEIPTS_API_KEY=              # API key for authentication (generate with: openssl rand -hex 32)\nRECEIPTS_ALLOWED_ORIGINS=      # Comma-separated CORS origins (default: none/blocked)\nRECEIPTS_RATE_LIMIT=           # Requests per minute (default: 100)\n\n# Existing\nRECEIPTS_WALLET_PRIVATE_KEY=   # For on-chain transactions\nRECEIPTS_AGENT_ID=             # Agent identifier\nETHEREUM_RPC=                  # Ethereum RPC endpoint\nBASE_RPC=                      # Base RPC endpoint\n\nFly.io Sprites Deployment\n# Deploy\nfly launch\nfly deploy\n\n# Configure secrets\nfly secrets set RECEIPTS_WALLET_PRIVATE_KEY=...\nfly secrets set ETHEREUM_RPC=...\n\n# Create persistent volume\nfly volumes create receipts_data --size 1\n\nDocker\ndocker build -t receipts-guard .\ndocker run -p 3000:3000 -v receipts-data:/data receipts-guard\n\nmigrate - Migrate to DID\nnode capture.js migrate --to-did\n\n\nUpgrades existing agreements to use DID references (preserves legacy data).\n\nArbitration Protocol\npropose - Create Agreement Proposal\nnode capture.js propose \"TERMS\" \"COUNTERPARTY\" --arbiter=\"ARBITER\" [options]\n\nOptions:\n  --arbiter=AGENT         Required: mutually agreed arbiter\n  --deadline=ISO_DATE     Fulfillment deadline\n  --value=AMOUNT          Agreement value (for reference)\n  --channel=CHANNEL       Communication channel\n\n\nCreates a PAO (Programmable Agreement Object) with:\n\ntermsHash - SHA-256 of canonical terms + parties + deadline\nProposer signature\nProposed arbiter\nStatus: pending_acceptance\naccept - Accept Proposal\nnode capture.js accept --proposalId=prop_xxx\n\nAdds counterparty signature to same termsHash\nCreates active agreement in agreements/\nBoth parties have signed - agreement is binding\nreject - Reject Proposal\nnode capture.js reject --proposalId=prop_xxx --reason=\"REASON\"\n\nfulfill - Claim Fulfillment\nnode capture.js fulfill --agreementId=agr_xxx --evidence=\"PROOF\"\n\nEvidence is required (proof of completion)\nStatus: pending_confirmation\nCounterparty has 48-hour grace period to dispute\narbitrate - Open Dispute\nnode capture.js arbitrate --agreementId=agr_xxx --reason=\"BREACH_TYPE\" --evidence=\"PROOF\"\n\nValid reasons:\n  non_delivery      - Counterparty didn't deliver\n  partial_delivery  - Delivery was incomplete\n  quality           - Delivery didn't meet specs\n  deadline_breach   - Missed deadline\n  repudiation       - Counterparty denies agreement\n  other             - Other breach\n\nsubmit - Submit Evidence\nnode capture.js submit --arbitrationId=arb_xxx --evidence=\"PROOF\" [--type=TYPE]\n\nTypes:\n  document    - Text evidence (default)\n  screenshot  - Visual proof\n  witness     - Third-party witness statement\n\n\nBoth parties can submit evidence during the evidence period (7 days default).\n\nruling - Issue Ruling (Arbiter Only)\nnode capture.js ruling --arbitrationId=arb_xxx --decision=DECISION --reasoning=\"EXPLANATION\"\n\nDecisions:\n  claimant    - Rule in favor of claimant\n  respondent  - Rule in favor of respondent\n  split       - Split responsibility\n\nOnly the designated arbiter can issue rulings\nReasoning hash posted to Moltbook (optional)\nAgreement closes with ruling recorded\ntimeline - Generate LPR (Legal Provenance Review)\nnode capture.js timeline --agreementId=agr_xxx\n\n\nGenerates chronological timeline showing:\n\nAll state transitions\nEvidence submissions with hashes\nSignatures and timestamps\nRuling (if issued)\nCapture Commands\nCapture Agreement (ToS)\nnode capture.js capture \"TERMS_TEXT\" \"SOURCE_URL\" \"MERCHANT_NAME\" [options]\n\nOptions:\n  --consent-type=TYPE     explicit | implicit | continued_use\n  --element=SELECTOR      DOM element that triggered consent\n  --screenshot=BASE64     Screenshot at time of consent\n\nCapture Promise (Agent-to-Agent)\nnode capture.js promise \"COMMITMENT_TEXT\" \"COUNTERPARTY\" [options]\n\nOptions:\n  --direction=outbound    outbound (I promised) | inbound (they promised)\n  --channel=email         email | chat | moltbook | api\n\nUtility Commands\nList Records\nnode capture.js list [--type=TYPE]\n\nTypes:\n  all          - Everything (default)\n  captures     - ToS captures and promises\n  proposals    - Pending proposals\n  agreements   - Active/closed agreements\n  arbitrations - Open/closed arbitrations\n  rulings      - Issued rulings\n\nQuery\nnode capture.js query --merchant=\"Company\" --risk-level=high\n\nDiff\nnode capture.js diff --capture1=ID --capture2=ID\n\nDispute Package\nnode capture.js dispute --captureId=local_xxx\n\nWitness\nnode capture.js witness --captureId=ID [--anchor=moltbook|bitcoin|both]\n\nRules\nnode capture.js rules --list\nnode capture.js rules --add=\"PATTERN\" --flag=\"FLAG_NAME\"\n\nExport\nnode capture.js export --format=json|csv|pdf [--captureId=ID]\n\nState Machine\nPROPOSAL:\n  pending_acceptance → accepted → (becomes agreement)\n                    → rejected\n                    → expired\n\nAGREEMENT:\n  active → pending_confirmation → fulfilled → closed\n        → disputed → (becomes arbitration)\n\nARBITRATION:\n  open → evidence_period → deliberation → ruled → closed\n\nData Structures\nDID Document (identity/did.json) - v0.6.0\n{\n  \"@context\": [\"https://www.w3.org/ns/did/v1\"],\n  \"id\": \"did:agent:remaster_io:receipts-guard\",\n\n  \"verificationMethod\": [{\n    \"id\": \"did:agent:remaster_io:receipts-guard#key-xxx\",\n    \"type\": \"Ed25519VerificationKey2020\",\n    \"controller\": \"did:agent:remaster_io:receipts-guard\",\n    \"publicKeyMultibase\": \"z6Mkf5rGMoatrSj1f...\"\n  }],\n\n  \"authentication\": [\"did:agent:remaster_io:receipts-guard#key-xxx\"],\n\n  \"keyHistory\": [{\n    \"keyId\": \"#key-xxx\",\n    \"activatedAt\": \"2026-02-09T00:00:00Z\",\n    \"rotatedAt\": null,\n    \"rotationProof\": null,\n    \"publicKeyMultibase\": \"z6Mkf5rGMoatrSj1f...\"\n  }],\n\n  \"controller\": {\n    \"type\": \"human\",\n    \"platform\": \"twitter\",\n    \"handle\": \"@Remaster_io\"\n  },\n\n  \"created\": \"2026-02-09T00:00:00Z\",\n  \"updated\": \"2026-02-09T00:00:00Z\"\n}\n\nSignature Formats\n# Ed25519 (v0.6.0) - cryptographically secure\ned25519:<base64url-signature>:<timestamp>\n\n# Legacy HMAC (v0.5.0 and earlier) - still supported for backward compatibility\nsig:<hex-signature>:<timestamp>\n\nProposal (proposals/prop_xxx.json)\n{\n  \"proposalId\": \"prop_xxx\",\n  \"termsHash\": \"sha256:...\",\n  \"terms\": { \"text\": \"...\", \"canonical\": \"...\" },\n  \"proposer\": \"agent-a\",\n  \"counterparty\": \"agent-b\",\n  \"proposedArbiter\": \"arbiter-prime\",\n  \"deadline\": \"2026-02-15T00:00:00Z\",\n  \"value\": \"100 USD\",\n  \"proposerSignature\": \"ed25519:...\",\n  \"status\": \"pending_acceptance\",\n  \"createdAt\": \"...\",\n  \"expiresAt\": \"...\"\n}\n\nAgreement (agreements/agr_xxx.json)\n{\n  \"agreementId\": \"agr_xxx\",\n  \"termsHash\": \"sha256:...\",\n  \"parties\": [\"agent-a\", \"agent-b\"],\n  \"arbiter\": \"arbiter-prime\",\n  \"signatures\": {\n    \"agent-a\": \"ed25519:...\",\n    \"agent-b\": \"ed25519:...\"\n  },\n  \"status\": \"active\",\n  \"timeline\": [\n    { \"event\": \"proposed\", \"timestamp\": \"...\", \"actor\": \"agent-a\" },\n    { \"event\": \"accepted\", \"timestamp\": \"...\", \"actor\": \"agent-b\" }\n  ]\n}\n\nArbitration (arbitrations/arb_xxx.json)\n{\n  \"arbitrationId\": \"arb_xxx\",\n  \"agreementId\": \"agr_xxx\",\n  \"claimant\": \"agent-a\",\n  \"respondent\": \"agent-b\",\n  \"arbiter\": \"arbiter-prime\",\n  \"reason\": \"non_delivery\",\n  \"status\": \"evidence_period\",\n  \"evidence\": {\n    \"claimant\": [...],\n    \"respondent\": [...]\n  },\n  \"evidenceDeadline\": \"...\"\n}\n\nRuling (rulings/rul_xxx.json)\n{\n  \"rulingId\": \"rul_xxx\",\n  \"arbitrationId\": \"arb_xxx\",\n  \"arbiter\": \"arbiter-prime\",\n  \"decision\": \"claimant\",\n  \"reasoning\": \"...\",\n  \"reasoningHash\": \"sha256:...\",\n  \"issuedAt\": \"...\"\n}\n\nData Storage\n~/.openclaw/receipts/\n├── identity/                   # v0.6.0 Self-Sovereign Identity\n│   ├── did.json                # DID document (public)\n│   ├── private/\n│   │   ├── key-current.json    # Current private key\n│   │   └── key-archive/        # Rotated keys (for verification)\n│   ├── key-history.json        # Rotation chain with proofs\n│   ├── controller.json         # Human controller config\n│   └── recovery/               # Recovery records\n├── index.json                  # Fast lookup index\n├── proposals/\n│   └── prop_xxx.json           # Proposal metadata\n├── agreements/\n│   ├── agr_xxx.json            # Agreement metadata\n│   └── agr_xxx.txt             # Terms text\n├── arbitrations/\n│   └── arb_xxx.json            # Arbitration record\n├── rulings/\n│   └── rul_xxx.json            # Ruling record\n├── witnesses/\n│   └── witness_xxx.json        # Witness anchors\n├── local_xxx.json              # ToS captures\n├── promise_xxx.json            # Promise captures\n└── custom-rules.json           # Custom rulesets\n\nAgent Instructions\nBefore Accepting Any Agreement\nReview the termsHash - Ensure you're signing what you expect\nVerify the arbiter - Must be mutually trusted\nCheck the deadline - Ensure it's achievable\nRun capture on any ToS you encounter:\nnode capture.js capture \"TERMS\" \"URL\" \"MERCHANT\"\n\nBefore Making Commitments\nUse propose for formal commitments:\nnode capture.js propose \"I will deliver X by Y\" \"AgentZ\" --arbiter=\"trusted-arbiter\"\n\nWait for acceptance before acting\nDocument fulfillment with evidence\nDuring Arbitration\nSubmit all relevant evidence before deadline\nUse appropriate evidence types (document, screenshot, witness)\nReference specific termsHash in submissions\nEnvironment Variables\nRECEIPTS_AGENT_ID       # Your agent identifier\nRECEIPTS_MOLTBOOK_KEY   # API key for Moltbook witnessing\nRECEIPTS_CUSTOM_RULES   # Path to custom rules file\n\nFramework Integration\nconst receipts = require('./capture.js');\n\n// Generate terms hash for verification\nconst hash = receipts.generateTermsHash(\n  \"I will deliver API docs\",\n  [\"agent-a\", \"agent-b\"],\n  \"2026-02-14\"\n);\n\n// Sign terms\nconst signature = receipts.signTerms(hash, \"my-agent-id\");\n\n// Verify signature\nconst valid = receipts.verifySignature(hash, signature, \"my-agent-id\");\n\n// Access directories\nconsole.log(receipts.PROPOSALS_DIR);\nconsole.log(receipts.AGREEMENTS_DIR);\nconsole.log(receipts.ARBITRATIONS_DIR);\nconsole.log(receipts.RULINGS_DIR);\n\nLinks\nGitHub: https://github.com/lazaruseth/receipts-mvp\nClawHub: https://clawhub.ai/lazaruseth/receipts-guard\nMoltbook: https://moltbook.com/u/receipts-guard\nReport Issues: https://github.com/lazaruseth/receipts-mvp/issues\nDisclaimer\n\nRECEIPTS Guard provides evidence capture and arbitration workflow tooling. It is NOT a substitute for legal review. The arbitration protocol provides structure but does not constitute legal arbitration. Always consult with a qualified attorney for actual disputes."
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/lazaruseth/receipts-guard",
    "publisherUrl": "https://clawhub.ai/lazaruseth/receipts-guard",
    "owner": "lazaruseth",
    "version": "0.7.1",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/receipts-guard",
    "downloadUrl": "https://openagent3.xyz/downloads/receipts-guard",
    "agentUrl": "https://openagent3.xyz/skills/receipts-guard/agent",
    "manifestUrl": "https://openagent3.xyz/skills/receipts-guard/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/receipts-guard/agent.md"
  }
}