{
  "schemaVersion": "1.0",
  "item": {
    "slug": "bookkeeper",
    "name": "Bookkeeper",
    "source": "tencent",
    "type": "skill",
    "category": "效率提升",
    "sourceUrl": "https://clawhub.ai/h4gen/bookkeeper",
    "canonicalUrl": "https://clawhub.ai/h4gen/bookkeeper",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/bookkeeper",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=bookkeeper",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md",
      "references/inspected-skills.md"
    ],
    "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/bookkeeper"
    },
    "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/bookkeeper",
    "agentPageUrl": "https://openagent3.xyz/skills/bookkeeper/agent",
    "manifestUrl": "https://openagent3.xyz/skills/bookkeeper/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/bookkeeper/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": "Purpose",
        "body": "Automate preparatory bookkeeping from incoming email to accounting records.\n\nCore objective:\n\ndetect invoice email,\nextract structured invoice data,\nverify payment event,\ncreate accounting entry and reconciliation status.\n\nThis is orchestration logic across upstream tools; it is not a replacement for financial controls."
      },
      {
        "title": "Required Installed Skills",
        "body": "gmail (inspected latest: 1.0.6)\ndeepread-ocr (inspected latest: 1.0.6)\nstripe-api (inspected latest: 1.0.8)\nxero (inspected latest: 1.0.4)\n\nInstall/update:\n\nnpx -y clawhub@latest install gmail\nnpx -y clawhub@latest install deepread-ocr\nnpx -y clawhub@latest install stripe-api\nnpx -y clawhub@latest install xero\nnpx -y clawhub@latest update --all"
      },
      {
        "title": "Required Credentials",
        "body": "MATON_API_KEY (for Gmail, Stripe, Xero through Maton gateway)\nDEEPREAD_API_KEY (for OCR extraction)\n\nPreflight:\n\necho \"$MATON_API_KEY\" | wc -c\necho \"$DEEPREAD_API_KEY\" | wc -c\n\nIf missing, stop before any bookkeeping action."
      },
      {
        "title": "Inputs the LM Must Collect First",
        "body": "company_base_currency\ninvoice_keywords (default: invoice, rechnung, receipt, quittung)\nvendor_rules (for example AWS -> Hosting expense account)\ndate_tolerance_days for matching (default: 3)\namount_tolerance (default: exact, or configurable small tolerance)\nauto_post_policy (manual-review, auto-if-high-confidence)\nattachment_policy (store-link, attach-binary-if-supported)\n\nDo not auto-post financial records without explicit policy."
      },
      {
        "title": "Gmail (gmail)",
        "body": "Use for intake and attachment discovery.\n\nRelevant behavior:\n\nquery messages with Gmail operators (for example has:attachment, subject:invoice, sender filters)\nfetch message metadata and full payload for parsing\nlabel/update messages after processing (for traceability)"
      },
      {
        "title": "DeepRead OCR (deepread-ocr)",
        "body": "Use for extracting structured fields from invoice PDFs/images.\n\nRelevant behavior:\n\nasync processing (queued -> completed/failed)\nschema-driven extraction\nfield-level hil_flag and reason for uncertainty\nwebhook or polling modes"
      },
      {
        "title": "Stripe (stripe-api)",
        "body": "Use for payment-side verification.\n\nRelevant behavior:\n\nquery charges/payment_intents/invoices/balance transactions\nverify amount, currency, status, and date proximity"
      },
      {
        "title": "Xero (xero)",
        "body": "Use for accounting record creation and payment/reconciliation visibility.\n\nRelevant behavior:\n\ncreate contacts if missing\ncreate invoices/bills (ACCPAY for payable bills)\nlist payments and bank transactions"
      },
      {
        "title": "Stage 1: Inbox detection",
        "body": "Scan Gmail for candidate invoice emails.\n\nRecommended query pattern:\n\nhas:attachment (subject:invoice OR subject:rechnung OR subject:receipt OR subject:quittung)\noptional sender constraint for known vendors (for example from:aws)\n\nOutput:\n\nmessage ID\nsender\nreceived date\nattachment candidates"
      },
      {
        "title": "Stage 2: Attachment extraction",
        "body": "For each invoice candidate attachment:\n\nsend file to DeepRead OCR with invoice schema\nwait for async completion (webhook preferred; polling fallback)\nparse structured result\n\nMinimum extracted fields:\n\nvendor\ninvoice_date\ninvoice_number\ntotal_amount\ntax_amount\ncurrency\n\nQuality gate:\n\nif critical fields have hil_flag=true, route to review queue before posting."
      },
      {
        "title": "Stage 3: Payment verification",
        "body": "Use Stripe to check whether corresponding payment occurred.\n\nMatching policy:\n\namount equals invoice total (within tolerance)\ncurrency matches\ndate within tolerance window\nstatus is successful/paid\n\nIf multiple candidates match, mark as ambiguous_match and require review."
      },
      {
        "title": "Stage 4: Accounting write",
        "body": "Use Xero for booking.\n\nDefault payable flow:\n\nensure vendor contact exists (create if needed)\ncreate bill entry (Type: ACCPAY) with line item category (for example Hosting)\nmark as paid/reconciled state only when Stripe verification is confident\ninclude reference fields: invoice number, source message ID, payment reference\n\nAttachment handling:\n\nif binary attachment endpoint/path is available in the active integration, attach file\notherwise store durable file reference and include link/reference in description/metadata"
      },
      {
        "title": "Stage 5: Traceability updates",
        "body": "After successful processing:\n\napply Gmail processed label\nstore processing log (source email, extraction confidence, matching evidence, xero IDs)\nkeep idempotency key to avoid duplicate posting"
      },
      {
        "title": "Scenario Mapping (AWS Invoice)",
        "body": "For the scenario \"AWS invoice by email -> Xero + card match\":\n\nGmail finds AWS email with PDF attachment.\nDeepRead OCR extracts structured fields (vendor/date/total/tax/invoice number).\nStripe check confirms payment event around invoice date and amount.\nXero creates payable entry (ACCPAY) under Hosting category.\nRecord is marked paid only after confident match; source PDF linked/attached per policy."
      },
      {
        "title": "Data Contract",
        "body": "Normalize to one transaction record before posting:\n\n{\n  \"source\": {\n    \"gmail_message_id\": \"...\",\n    \"sender\": \"billing@aws.amazon.com\",\n    \"attachment_name\": \"invoice.pdf\"\n  },\n  \"invoice\": {\n    \"vendor\": \"AWS\",\n    \"invoice_number\": \"INV-123\",\n    \"invoice_date\": \"2024-05-01\",\n    \"total\": 53.20,\n    \"tax\": 0.00,\n    \"currency\": \"USD\",\n    \"ocr_confidence_ok\": true\n  },\n  \"payment_match\": {\n    \"provider\": \"stripe\",\n    \"matched\": true,\n    \"transaction_id\": \"ch_...\",\n    \"amount\": 53.20,\n    \"date\": \"2024-05-01\"\n  },\n  \"accounting\": {\n    \"system\": \"xero\",\n    \"entry_type\": \"ACCPAY\",\n    \"category\": \"Hosting\",\n    \"status\": \"Paid\"\n  }\n}"
      },
      {
        "title": "Output Contract",
        "body": "Always return:\n\nIntakeSummary\n\nemails scanned, invoice candidates found\n\n\n\nExtractionSummary\n\nextracted fields and hil_flag status\n\n\n\nPaymentVerification\n\nmatched/not matched + evidence\n\n\n\nAccountingAction\n\ncreated/updated records and IDs\n\n\n\nReviewQueue\n\nany records requiring manual validation"
      },
      {
        "title": "Quality Gates",
        "body": "Before auto-posting:\n\nvendor identified\ninvoice number/date/total present\nno critical hil_flag unresolved\npayment match confidence above policy threshold\nduplicate check passed (same vendor + invoice number + total)\n\nIf any gate fails, return Needs Review and do not auto-post."
      },
      {
        "title": "Guardrails",
        "body": "Never mark invoice as paid without payment evidence.\nNever silently overwrite existing accounting records.\nNever drop uncertain OCR fields; surface them explicitly.\nPrefer manual review when amount/date ambiguity exists.\nPreserve source audit trail for every booking action."
      },
      {
        "title": "Failure Handling",
        "body": "Gmail unavailable: stop intake and report connection issue.\nOCR job failed/timeout: keep email queued for retry.\nStripe no match: post as unpaid bill or route to review per policy.\nXero write failed: keep normalized record and retry safely with idempotency key."
      },
      {
        "title": "Known Limits from Inspected Upstream Skills",
        "body": "DeepRead OCR is asynchronous and may require webhook/polling orchestration.\nThe inspected Xero skill docs emphasize core accounting endpoints but do not fully document attachment upload flow; attachment behavior depends on supported endpoint path in active integration.\nStripe/Xero matching is orchestration logic here, not a single native \"auto-reconcile\" endpoint in these inspected skill docs.\nQuickBooks is not part of this researched stack; this meta-skill is Xero-first.\n\nTreat these limits as mandatory operator disclosures."
      }
    ],
    "body": "Purpose\n\nAutomate preparatory bookkeeping from incoming email to accounting records.\n\nCore objective:\n\ndetect invoice email,\nextract structured invoice data,\nverify payment event,\ncreate accounting entry and reconciliation status.\n\nThis is orchestration logic across upstream tools; it is not a replacement for financial controls.\n\nRequired Installed Skills\ngmail (inspected latest: 1.0.6)\ndeepread-ocr (inspected latest: 1.0.6)\nstripe-api (inspected latest: 1.0.8)\nxero (inspected latest: 1.0.4)\n\nInstall/update:\n\nnpx -y clawhub@latest install gmail\nnpx -y clawhub@latest install deepread-ocr\nnpx -y clawhub@latest install stripe-api\nnpx -y clawhub@latest install xero\nnpx -y clawhub@latest update --all\n\nRequired Credentials\nMATON_API_KEY (for Gmail, Stripe, Xero through Maton gateway)\nDEEPREAD_API_KEY (for OCR extraction)\n\nPreflight:\n\necho \"$MATON_API_KEY\" | wc -c\necho \"$DEEPREAD_API_KEY\" | wc -c\n\n\nIf missing, stop before any bookkeeping action.\n\nInputs the LM Must Collect First\ncompany_base_currency\ninvoice_keywords (default: invoice, rechnung, receipt, quittung)\nvendor_rules (for example AWS -> Hosting expense account)\ndate_tolerance_days for matching (default: 3)\namount_tolerance (default: exact, or configurable small tolerance)\nauto_post_policy (manual-review, auto-if-high-confidence)\nattachment_policy (store-link, attach-binary-if-supported)\n\nDo not auto-post financial records without explicit policy.\n\nTool Responsibilities\nGmail (gmail)\n\nUse for intake and attachment discovery.\n\nRelevant behavior:\n\nquery messages with Gmail operators (for example has:attachment, subject:invoice, sender filters)\nfetch message metadata and full payload for parsing\nlabel/update messages after processing (for traceability)\nDeepRead OCR (deepread-ocr)\n\nUse for extracting structured fields from invoice PDFs/images.\n\nRelevant behavior:\n\nasync processing (queued -> completed/failed)\nschema-driven extraction\nfield-level hil_flag and reason for uncertainty\nwebhook or polling modes\nStripe (stripe-api)\n\nUse for payment-side verification.\n\nRelevant behavior:\n\nquery charges/payment_intents/invoices/balance transactions\nverify amount, currency, status, and date proximity\nXero (xero)\n\nUse for accounting record creation and payment/reconciliation visibility.\n\nRelevant behavior:\n\ncreate contacts if missing\ncreate invoices/bills (ACCPAY for payable bills)\nlist payments and bank transactions\nCanonical Signal Chain\nStage 1: Inbox detection\n\nScan Gmail for candidate invoice emails.\n\nRecommended query pattern:\n\nhas:attachment (subject:invoice OR subject:rechnung OR subject:receipt OR subject:quittung)\noptional sender constraint for known vendors (for example from:aws)\n\nOutput:\n\nmessage ID\nsender\nreceived date\nattachment candidates\nStage 2: Attachment extraction\n\nFor each invoice candidate attachment:\n\nsend file to DeepRead OCR with invoice schema\nwait for async completion (webhook preferred; polling fallback)\nparse structured result\n\nMinimum extracted fields:\n\nvendor\ninvoice_date\ninvoice_number\ntotal_amount\ntax_amount\ncurrency\n\nQuality gate:\n\nif critical fields have hil_flag=true, route to review queue before posting.\nStage 3: Payment verification\n\nUse Stripe to check whether corresponding payment occurred.\n\nMatching policy:\n\namount equals invoice total (within tolerance)\ncurrency matches\ndate within tolerance window\nstatus is successful/paid\n\nIf multiple candidates match, mark as ambiguous_match and require review.\n\nStage 4: Accounting write\n\nUse Xero for booking.\n\nDefault payable flow:\n\nensure vendor contact exists (create if needed)\ncreate bill entry (Type: ACCPAY) with line item category (for example Hosting)\nmark as paid/reconciled state only when Stripe verification is confident\ninclude reference fields: invoice number, source message ID, payment reference\n\nAttachment handling:\n\nif binary attachment endpoint/path is available in the active integration, attach file\notherwise store durable file reference and include link/reference in description/metadata\nStage 5: Traceability updates\n\nAfter successful processing:\n\napply Gmail processed label\nstore processing log (source email, extraction confidence, matching evidence, xero IDs)\nkeep idempotency key to avoid duplicate posting\nScenario Mapping (AWS Invoice)\n\nFor the scenario \"AWS invoice by email -> Xero + card match\":\n\nGmail finds AWS email with PDF attachment.\nDeepRead OCR extracts structured fields (vendor/date/total/tax/invoice number).\nStripe check confirms payment event around invoice date and amount.\nXero creates payable entry (ACCPAY) under Hosting category.\nRecord is marked paid only after confident match; source PDF linked/attached per policy.\nData Contract\n\nNormalize to one transaction record before posting:\n\n{\n  \"source\": {\n    \"gmail_message_id\": \"...\",\n    \"sender\": \"billing@aws.amazon.com\",\n    \"attachment_name\": \"invoice.pdf\"\n  },\n  \"invoice\": {\n    \"vendor\": \"AWS\",\n    \"invoice_number\": \"INV-123\",\n    \"invoice_date\": \"2024-05-01\",\n    \"total\": 53.20,\n    \"tax\": 0.00,\n    \"currency\": \"USD\",\n    \"ocr_confidence_ok\": true\n  },\n  \"payment_match\": {\n    \"provider\": \"stripe\",\n    \"matched\": true,\n    \"transaction_id\": \"ch_...\",\n    \"amount\": 53.20,\n    \"date\": \"2024-05-01\"\n  },\n  \"accounting\": {\n    \"system\": \"xero\",\n    \"entry_type\": \"ACCPAY\",\n    \"category\": \"Hosting\",\n    \"status\": \"Paid\"\n  }\n}\n\nOutput Contract\n\nAlways return:\n\nIntakeSummary\n\nemails scanned, invoice candidates found\n\nExtractionSummary\n\nextracted fields and hil_flag status\n\nPaymentVerification\n\nmatched/not matched + evidence\n\nAccountingAction\n\ncreated/updated records and IDs\n\nReviewQueue\n\nany records requiring manual validation\nQuality Gates\n\nBefore auto-posting:\n\nvendor identified\ninvoice number/date/total present\nno critical hil_flag unresolved\npayment match confidence above policy threshold\nduplicate check passed (same vendor + invoice number + total)\n\nIf any gate fails, return Needs Review and do not auto-post.\n\nGuardrails\nNever mark invoice as paid without payment evidence.\nNever silently overwrite existing accounting records.\nNever drop uncertain OCR fields; surface them explicitly.\nPrefer manual review when amount/date ambiguity exists.\nPreserve source audit trail for every booking action.\nFailure Handling\nGmail unavailable: stop intake and report connection issue.\nOCR job failed/timeout: keep email queued for retry.\nStripe no match: post as unpaid bill or route to review per policy.\nXero write failed: keep normalized record and retry safely with idempotency key.\nKnown Limits from Inspected Upstream Skills\nDeepRead OCR is asynchronous and may require webhook/polling orchestration.\nThe inspected Xero skill docs emphasize core accounting endpoints but do not fully document attachment upload flow; attachment behavior depends on supported endpoint path in active integration.\nStripe/Xero matching is orchestration logic here, not a single native \"auto-reconcile\" endpoint in these inspected skill docs.\nQuickBooks is not part of this researched stack; this meta-skill is Xero-first.\n\nTreat these limits as mandatory operator disclosures."
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/h4gen/bookkeeper",
    "publisherUrl": "https://clawhub.ai/h4gen/bookkeeper",
    "owner": "h4gen",
    "version": "1.0.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/bookkeeper",
    "downloadUrl": "https://openagent3.xyz/downloads/bookkeeper",
    "agentUrl": "https://openagent3.xyz/skills/bookkeeper/agent",
    "manifestUrl": "https://openagent3.xyz/skills/bookkeeper/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/bookkeeper/agent.md"
  }
}