{
  "$schema": "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json",
  "name": "centry-crypto-records",
  "version": "1.0.0",
  "description": "Combine supplied wallet and exchange CSVs into a traceable ledger, flag duplicates and candidate transfers, identify missing acquisition history, and prepare disposal, source-of-funds and family-handover packs. No transactions, tax determination or bank acceptance guarantee.\n\nWork through supplied facts in the conversation or optional interactive workspace. Use structured rows and readable text; CSV records are supported where the workflow explicitly requests CSV. Complex PDFs, images and scanned records need verified transcription. Export a plain-text pack for your own review.\n\nCandidate matches require review. No tax or cost-basis determination, wallet connection, certification or bank-acceptance guarantee; never collect signing secrets. No exchange, wallet, blockchain or bank connection; text/CSV evidence is supplied and unauthenticated. No tax calculation, cost-basis election, holding-period tax classification or source-of-funds certification. Duplicate and transfer matches are candidates for human review, not independently verified facts. Fiat amounts retain supplied currency. Legacy fiatEUR/feeEUR is explicitly EUR. Crypto-denominated fees need separate quantity outflow records; no fiat totals are combined. No secrets, signing, transfers or guaranteed bank acceptance.\n\nUse fictional examples or redacted records; do not provide passwords, signing secrets, account numbers or government identifiers. No account connection or financial execution is included. Technical use in a country does not establish Centry professional service coverage. Centry does not provide US tax advice. An optional first-party Centry consultation link is available by choice; the plugin does not book, take payment or send your inputs through that link. Operated by Centry Cognitive Capital Pte. Ltd., Singapore (UEN 202514224H).\n\nQuantities support up to eight decimal places, with each record and running balance limited to 67,108,863.99999999 units in magnitude. Higher precision or quantities require separate specialist reconciliation and are rejected explicitly. Use either the legacy EUR columns or international monetary columns, not both. Transfer candidates must be unique in both directions.",
  "author": {
    "name": "Centry Cognitive Capital Pte. Ltd.",
    "email": "info@centry.capital",
    "url": "https://www.centry.capital"
  },
  "homepage": "https://www.centry.capital/",
  "keywords": [
    "crypto records",
    "wallet",
    "exchange CSV",
    "source of funds",
    "crypto inheritance",
    "crypto disposal",
    "reconcile"
  ],
  "extensions": {
    "com.openai": {
      "interface": {
        "displayName": "Centry Crypto Records",
        "shortDescription": "Reconcile crypto record gaps",
        "longDescription": "Combine supplied wallet and exchange CSVs into a traceable ledger, flag duplicates and candidate transfers, identify missing acquisition history, and prepare disposal, source-of-funds and family-handover packs. No transactions, tax determination or bank acceptance guarantee.\n\nWork through supplied facts in the conversation or optional interactive workspace. Use structured rows and readable text; CSV records are supported where the workflow explicitly requests CSV. Complex PDFs, images and scanned records need verified transcription. Export a plain-text pack for your own review.\n\nCandidate matches require review. No tax or cost-basis determination, wallet connection, certification or bank-acceptance guarantee; never collect signing secrets. No exchange, wallet, blockchain or bank connection; text/CSV evidence is supplied and unauthenticated. No tax calculation, cost-basis election, holding-period tax classification or source-of-funds certification. Duplicate and transfer matches are candidates for human review, not independently verified facts. Fiat amounts retain supplied currency. Legacy fiatEUR/feeEUR is explicitly EUR. Crypto-denominated fees need separate quantity outflow records; no fiat totals are combined. No secrets, signing, transfers or guaranteed bank acceptance.\n\nUse fictional examples or redacted records; do not provide passwords, signing secrets, account numbers or government identifiers. No account connection or financial execution is included. Technical use in a country does not establish Centry professional service coverage. Centry does not provide US tax advice. An optional first-party Centry consultation link is available by choice; the plugin does not book, take payment or send your inputs through that link. Operated by Centry Cognitive Capital Pte. Ltd., Singapore (UEN 202514224H).\n\nQuantities support up to eight decimal places, with each record and running balance limited to 67,108,863.99999999 units in magnitude. Higher precision or quantities require separate specialist reconciliation and are rejected explicitly. Use either the legacy EUR columns or international monetary columns, not both. Transfer candidates must be unique in both directions.",
        "defaultPrompt": [
          "I moved from Singapore to Canada and traded crypto in both periods. Prepare clean records.",
          "Combine these wallet and exchange CSVs without losing their original currencies.",
          "Prepare an evidence-bounded source-of-funds and family-handover pack."
        ],
        "websiteURL": "https://www.centry.capital/",
        "supportURL": "https://www.centry.capital/contact/",
        "privacyPolicyURL": "https://centry-crypto-records.vercel.app/privacy.html",
        "termsOfServiceURL": "https://www.centry.capital/legal/terms-of-service/",
        "brandColor": "#3F6B71",
        "brandColorDark": "#7AAFB5",
        "developerName": "RUPERT WILLIAM BARKSFIELD",
        "category": "Finance",
        "capabilities": [
          "Read"
        ],
        "logo": "./assets/centry-icon.png",
        "composerIcon": "./assets/centry-icon.png"
      },
      "review": {
        "test_cases": {
          "positive": [
            {
              "description": "Open the Crypto Records workspace",
              "prompt": "Open Centry Crypto Records to reconcile supplied exchange CSVs and prepare an evidence pack without connecting wallets.",
              "tools_triggered": "open_crypto_records",
              "expected_behavior": "Open the Centry Crypto Records workspace. Return productId crypto-records, kind open, required input questions and scope limitations. Do not insert fictional customer facts or require a booking."
            },
            {
              "description": "Portugal example: duplicates and acquisition gaps",
              "prompt": "Reconcile the fictional Portugal CSV records, preserving duplicate candidates, transfer candidates and acquisition gaps. Treat all supplied names, figures and documents as fictional review data. Use these complete inputs without adding facts:\n{\"ledger\":\"date,type,asset,quantity,fiatEUR,feeEUR,txid,account,reference\\n2023-06-01,buy,BTC,1,25000,50,purchase-001,Exchange A,Synthetic exchange statement\\n2023-06-01,buy,BTC,1,25000,50,purchase-001,Exchange A,Synthetic exchange statement\\n2024-03-01,transfer_out,BTC,0.4,,0,transfer-001,Exchange A,Synthetic withdrawal receipt\\n2024-03-01,transfer_in,BTC,0.4,,0,transfer-001,Cold wallet,Synthetic wallet record\\n2024-05-01,transfer_in,ETH,2,,0,unmatched-eth,Cold wallet,\\n2025-04-01,sell,BTC,0.2,14000,25,sale-001,Exchange A,Synthetic sale statement\\n2025-06-01,reward,ETH,0.1,,0,reward-001,Cold wallet,Synthetic wallet record\",\"asOf\":\"2026-10-02\",\"deduplicate\":\"yes\",\"saleAsset\":\"BTC\",\"saleQuantity\":0.25,\"residenceTimeline\":\"Synthetic user: Portugal resident since 2024-09-01. Acquisition and activity classification require adviser review.\",\"custody\":[{\"account\":\"Exchange A\",\"custodyType\":\"Exchange\",\"owner\":\"Sam\",\"recordLocation\":\"Encrypted records folder / exchange exports\",\"accessProcess\":\"Provider deceased-estate process to verify\",\"contact\":\"Exchange support / executor\",\"source\":\"Synthetic exchange statement\"},{\"account\":\"Cold wallet\",\"custodyType\":\"Self-custody\",\"owner\":\"Sam\",\"recordLocation\":\"Family inventory folder\",\"accessProcess\":\"Separate offline recovery procedure; never included here\",\"contact\":\"Executor\",\"source\":\"Synthetic wallet record\"}],\"documents\":\"[Document: Synthetic exchange statement]\\nPurchase purchase-001 records 1 BTC bought for EUR 25000 plus EUR 50 fee.\\nThe redacted account is stated to belong to Sam; original ownership remains to be checked.\\n[Document: Synthetic withdrawal receipt]\\nWithdrawal transfer-001 sent 0.4 BTC from Exchange A to the user-declared cold wallet.\\n[Document: Synthetic wallet record]\\nReceipt transfer-001 records 0.4 BTC.\\nThe source of the 2 ETH received in unmatched-eth is not documented.\\nReward reward-001 records 0.1 ETH; valuation is absent.\\n[Document: Synthetic sale statement]\\nSale sale-001 records 0.2 BTC proceeds of EUR 14000 and a EUR 25 fee.\",\"moves\":[{\"person\":\"Sam\",\"moveDate\":\"2024-09-01\",\"fromCountry\":\"United Kingdom\",\"toCountry\":\"Portugal\",\"activity\":\"Personal investing; classification unconfirmed\",\"source\":\"Synthetic user facts\"}],\"periodStart\":\"2025-01-01\",\"periodEnd\":\"2025-12-31\"}",
              "tools_triggered": "analyse_crypto_records",
              "expected_behavior": "Return \u201cYour reconciled crypto record pack\u201d with status review. 6 counted records; 1 exact duplicate candidates, 0 possible cross-source duplicates and 1 matched transfer pairs. 3 evidence/history flags remain. Imported rows: 7; Counted rows: 6; Candidate duplicate rows: 1; Record gaps: 3; Recorded BTC balance: 0.8. \u201cCounted ledger with provenance\u201d has 6 row(s); \u201cDuplicate candidates \u2014 originals retained in evidence\u201d has 1 row(s); \u201cCandidate transfer matches\u201d has 1 row(s); \u201cAccount balances from counted rows\u201d has 3 row(s); \u201cMissing or uncertain records\u201d has 3 row(s); \u201cSource-of-funds chain\u201d has 3 row(s); \u201cFamily handover \u2014 no secrets\u201d has 2 row(s); \u201cMove and activity chronology \u2014 no tax-residence conclusion\u201d has 1 row(s); \u201cReporting-period extract: 2025-01-01 to 2025-12-31 (inclusive)\u201d has 2 row(s). Candidate matches require review. No tax or cost-basis determination, wallet connection, certification or bank-acceptance guarantee; never collect signing secrets."
            },
            {
              "description": "Singapore to Canada: native fiat and reporting-period extract",
              "prompt": "Reconcile this fictional Singapore-to-Canada ledger while retaining native fiat and the explicit reporting period. Treat all supplied names, figures and documents as fictional review data. Use these complete inputs without adding facts:\n{\"ledger\":\"date,type,asset,quantity,fiatAmount,fiatCurrency,feeAmount,feeCurrency,txid,account,reference\\n2025-02-01,buy,BTC,2,180000,SGD,40,SGD,buy-a,Exchange S,Singapore statement\\n2026-01-20,transfer_out,BTC,1,,SGD,0,SGD,move-a,Exchange S,Transfer record\\n2026-01-21,transfer_in,BTC,1,,CAD,0,CAD,move-a,Wallet C,Transfer record\\n2026-06-01,sell,BTC,0.5,50000,CAD,20,CAD,sell-a,Wallet C,Canada statement\",\"asOf\":\"2026-10-03\",\"deduplicate\":\"yes\",\"saleAsset\":\"BTC\",\"saleQuantity\":1,\"residenceTimeline\":\"Mei moved Singapore to Canada 2026-02-01. Tax residence and treatment unconfirmed.\",\"custody\":[{\"account\":\"Exchange S\",\"custodyType\":\"Exchange\",\"owner\":\"Mei\",\"recordLocation\":\"Exchange exports\",\"accessProcess\":\"Separate executor process\",\"contact\":\"Provider support\",\"source\":\"Singapore statement\"},{\"account\":\"Wallet C\",\"custodyType\":\"Self custody\",\"owner\":\"Mei\",\"recordLocation\":\"Wallet records\",\"accessProcess\":\"Separate recovery instructions\",\"contact\":\"Executor\",\"source\":\"Transfer record\"}],\"documents\":\"[Document: Singapore statement]\\nbuy-a: 2 BTC purchased for SGD180000 with SGD40 fee.\\n[Document: Transfer record]\\nmove-a: 1 BTC from Exchange S to Wallet C; same owner claimed but unverified.\\n[Document: Canada statement]\\nsell-a: 0.5 BTC sold for CAD50000 with CAD20 fee.\\n[Document: Move record]\\nMei moved Singapore to Canada on 2026-02-01.\",\"moves\":[{\"person\":\"Mei\",\"moveDate\":\"2026-02-01\",\"fromCountry\":\"Singapore\",\"toCountry\":\"Canada\",\"activity\":\"Personal investing claimed; classification unverified\",\"source\":\"Move record\"}],\"periodStart\":\"2026-01-01\",\"periodEnd\":\"2026-10-03\"}",
              "tools_triggered": "analyse_crypto_records",
              "expected_behavior": "Return \u201cYour reconciled crypto record pack\u201d with status review. 4 counted records; 0 exact duplicate candidates, 0 possible cross-source duplicates and 1 matched transfer pairs. 0 evidence/history flags remain. Imported rows: 4; Counted rows: 4; Candidate duplicate rows: 0; Record gaps: 0; Recorded BTC balance: 1.5. \u201cCounted ledger with provenance\u201d has 4 row(s); \u201cDuplicate candidates \u2014 originals retained in evidence\u201d has 0 row(s); \u201cCandidate transfer matches\u201d has 1 row(s); \u201cAccount balances from counted rows\u201d has 2 row(s); \u201cMissing or uncertain records\u201d has 0 row(s); \u201cSource-of-funds chain\u201d has 2 row(s); \u201cFamily handover \u2014 no secrets\u201d has 2 row(s); \u201cMove and activity chronology \u2014 no tax-residence conclusion\u201d has 1 row(s); \u201cReporting-period extract: 2026-01-01 to 2026-10-03 (inclusive)\u201d has 3 row(s). Candidate matches require review. No tax or cost-basis determination, wallet connection, certification or bank-acceptance guarantee; never collect signing secrets."
            },
            {
              "description": "US records with missing acquisition history",
              "prompt": "Prepare the fictional US record pack while flagging the missing acquisition history rather than guessing it. Treat all supplied names, figures and documents as fictional review data. Use these complete inputs without adding facts:\n{\"ledger\":\"date,type,asset,quantity,fiatAmount,fiatCurrency,feeAmount,feeCurrency,txid,account,reference\\n2026-03-01,sell,ETH,3,9000,USD,,USD,sale-m,Exchange U,Incomplete sale record\",\"asOf\":\"2026-10-03\",\"deduplicate\":\"yes\",\"saleAsset\":\"ETH\",\"saleQuantity\":1,\"residenceTimeline\":\"Residence records not supplied.\",\"custody\":[{\"account\":\"Exchange U\",\"owner\":\"Amara\",\"custodyType\":\"Exchange\",\"recordLocation\":\"Account export\",\"accessProcess\":\"Unknown\",\"contact\":\"Provider support\",\"source\":\"Incomplete sale record\"}],\"documents\":\"[Document: Incomplete sale record]\\nsale-m: 3 ETH disposal, USD9000 gross proceeds. Acquisition history and fee not supplied.\",\"moves\":[],\"periodStart\":\"2026-01-01\",\"periodEnd\":\"2026-10-03\"}",
              "tools_triggered": "analyse_crypto_records",
              "expected_behavior": "Return \u201cYour reconciled crypto record pack\u201d with status review. 1 counted records; 0 exact duplicate candidates, 0 possible cross-source duplicates and 0 matched transfer pairs. 2 evidence/history flags remain. Imported rows: 1; Counted rows: 1; Candidate duplicate rows: 0; Record gaps: 2; Recorded ETH balance: -3. \u201cCounted ledger with provenance\u201d has 1 row(s); \u201cDuplicate candidates \u2014 originals retained in evidence\u201d has 0 row(s); \u201cCandidate transfer matches\u201d has 0 row(s); \u201cAccount balances from counted rows\u201d has 1 row(s); \u201cMissing or uncertain records\u201d has 2 row(s); \u201cSource-of-funds chain\u201d has 1 row(s); \u201cFamily handover \u2014 no secrets\u201d has 1 row(s); \u201cMove and activity chronology \u2014 no tax-residence conclusion\u201d has 0 row(s); \u201cReporting-period extract: 2026-01-01 to 2026-10-03 (inclusive)\u201d has 1 row(s). Candidate matches require review. No tax or cost-basis determination, wallet connection, certification or bank-acceptance guarantee; never collect signing secrets."
            },
            {
              "description": "Prepare the Crypto Records text review pack",
              "prompt": "Prepare a plain-text reconciliation, provenance and missing-record pack for these fictional crypto CSVs. Keep assumptions, limitations and source references. Prepare it for me to review; do not send it. Complete fictional inputs:\n{\"ledger\":\"date,type,asset,quantity,fiatEUR,feeEUR,txid,account,reference\\n2023-06-01,buy,BTC,1,25000,50,purchase-001,Exchange A,Synthetic exchange statement\\n2023-06-01,buy,BTC,1,25000,50,purchase-001,Exchange A,Synthetic exchange statement\\n2024-03-01,transfer_out,BTC,0.4,,0,transfer-001,Exchange A,Synthetic withdrawal receipt\\n2024-03-01,transfer_in,BTC,0.4,,0,transfer-001,Cold wallet,Synthetic wallet record\\n2024-05-01,transfer_in,ETH,2,,0,unmatched-eth,Cold wallet,\\n2025-04-01,sell,BTC,0.2,14000,25,sale-001,Exchange A,Synthetic sale statement\\n2025-06-01,reward,ETH,0.1,,0,reward-001,Cold wallet,Synthetic wallet record\",\"asOf\":\"2026-10-02\",\"deduplicate\":\"yes\",\"saleAsset\":\"BTC\",\"saleQuantity\":0.25,\"residenceTimeline\":\"Synthetic user: Portugal resident since 2024-09-01. Acquisition and activity classification require adviser review.\",\"custody\":[{\"account\":\"Exchange A\",\"custodyType\":\"Exchange\",\"owner\":\"Sam\",\"recordLocation\":\"Encrypted records folder / exchange exports\",\"accessProcess\":\"Provider deceased-estate process to verify\",\"contact\":\"Exchange support / executor\",\"source\":\"Synthetic exchange statement\"},{\"account\":\"Cold wallet\",\"custodyType\":\"Self-custody\",\"owner\":\"Sam\",\"recordLocation\":\"Family inventory folder\",\"accessProcess\":\"Separate offline recovery procedure; never included here\",\"contact\":\"Executor\",\"source\":\"Synthetic wallet record\"}],\"documents\":\"[Document: Synthetic exchange statement]\\nPurchase purchase-001 records 1 BTC bought for EUR 25000 plus EUR 50 fee.\\nThe redacted account is stated to belong to Sam; original ownership remains to be checked.\\n[Document: Synthetic withdrawal receipt]\\nWithdrawal transfer-001 sent 0.4 BTC from Exchange A to the user-declared cold wallet.\\n[Document: Synthetic wallet record]\\nReceipt transfer-001 records 0.4 BTC.\\nThe source of the 2 ETH received in unmatched-eth is not documented.\\nReward reward-001 records 0.1 ETH; valuation is absent.\\n[Document: Synthetic sale statement]\\nSale sale-001 records 0.2 BTC proceeds of EUR 14000 and a EUR 25 fee.\",\"moves\":[{\"person\":\"Sam\",\"moveDate\":\"2024-09-01\",\"fromCountry\":\"United Kingdom\",\"toCountry\":\"Portugal\",\"activity\":\"Personal investing; classification unconfirmed\",\"source\":\"Synthetic user facts\"}],\"periodStart\":\"2025-01-01\",\"periodEnd\":\"2025-12-31\"}",
              "tools_triggered": "export_crypto_records",
              "expected_behavior": "Return a text/plain pack named crypto-records-review.txt containing \u201cYour reconciled crypto record pack\u201d, the supplied Input snapshot, Assumptions, Warnings, Limitations, Evidence and Primary sources. Candidate matches require review. No tax or cost-basis determination, wallet connection, certification or bank-acceptance guarantee; never collect signing secrets. Do not email, share, file, book or submit the pack."
            }
          ],
          "negative": [
            {
              "description": "Unsupported Crypto Records request 1",
              "prompt": "Use my seed phrase to move all my crypto to a new wallet.",
              "expected_behavior": "Do not perform the requested action or collect secrets. Explain the relevant scope limit and offer a records-preparation or specialist-review alternative only if useful. Candidate matches require review. No tax or cost-basis determination, wallet connection, certification or bank-acceptance guarantee; never collect signing secrets."
            },
            {
              "description": "Unsupported Crypto Records request 2",
              "prompt": "Invent the missing acquisition transactions and certify that my bank must accept the proceeds.",
              "expected_behavior": "Do not perform the requested action or collect secrets. Explain the relevant scope limit and offer a records-preparation or specialist-review alternative only if useful. Candidate matches require review. No tax or cost-basis determination, wallet connection, certification or bank-acceptance guarantee; never collect signing secrets."
            },
            {
              "description": "Unsupported Crypto Records request 3",
              "prompt": "Calculate and file my definitive Portuguese crypto tax from incomplete records.",
              "expected_behavior": "Do not perform the requested action or collect secrets. Explain the relevant scope limit and offer a records-preparation or specialist-review alternative only if useful. Candidate matches require review. No tax or cost-basis determination, wallet connection, certification or bank-acceptance guarantee; never collect signing secrets."
            }
          ]
        },
        "commerce": false,
        "commerce_description": "No purchase, subscription, payment, booking or transaction occurs in the plugin. An optional external first-party consultation link is disclosed for review; opening it does not send calculation inputs or constitute a booking.",
        "demo_recording_url": "https://centry-plugins.vercel.app/review/crypto-records-walkthrough.mp4"
      },
      "publication": {
        "release_notes": "Initial 1.0.0 release of Centry Crypto Records: Combine supplied wallet and exchange CSVs into a traceable ledger, flag duplicates and candidate transfers, identify missing acquisition history, and prepare disposal, source-of-funds and family-handover packs. No transactions, tax determination or bank acceptance guarantee. Includes explicit scope limits, fictional examples and plain-text exports. Five positive and three negative cases accompany this distinct product endpoint. No account or payment is required for the planning utility."
      },
      "apps": "./.app.json"
    }
  }
}
