[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-anthropic-tres-wallets-upload":3,"mdc-ym7zaj-key":34,"related-repo-anthropic-tres-wallets-upload":3053,"related-org-anthropic-tres-wallets-upload":3157},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":12,"stars":23,"repoUrl":24,"updatedAt":25,"license":26,"forks":27,"topics":28,"repo":29,"sourceUrl":32,"mdContent":33},"tres-wallets-upload","onboard wallets into TRES Finance","Upload and onboard multiple on-chain wallets or exchange accounts into Tres Finance. Use this skill whenever the user wants to add wallets, onboard wallets, import wallets, upload wallet addresses, ingest wallets, or connect exchanges into Tres — whether from a file (CSV\u002FExcel) or by typing them manually. This skill guides Claude through the full flow: wallet type selection → input collection → validation → preview with editable HTML table → exchange credential collection (if exchange) → user confirmation → batch creation via the TRES MCP API. Always trigger this skill for wallet onboarding, wallet data ingestion, or any request to \"add wallets to Tres\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},"anthropic","Anthropic","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fanthropic.png","anthropics",[13,17,20],{"name":14,"slug":15,"type":16},"Finance","finance","tag",{"name":18,"slug":19,"type":16},"Web3","web3",{"name":21,"slug":22,"type":16},"Ethereum","ethereum",294,"https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fclaude-plugins-community","2026-07-02T07:37:37.97001",null,69,[],{"repoUrl":24,"stars":23,"forks":27,"topics":30,"description":31},[],"Community plugin marketplace for Claude Cowork and Claude Code. Read-only mirror — submit plugins at clau.de\u002Fplugin-directory-submission.","https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fclaude-plugins-community\u002Ftree\u002FHEAD\u002Ftres-finance-plugin\u002Fskills\u002Ftres-wallets-upload","---\nname: tres-wallets-upload\ndescription: >\n  Upload and onboard multiple on-chain wallets or exchange accounts into Tres Finance.\n  Use this skill whenever the user wants to add wallets, onboard wallets, import wallets,\n  upload wallet addresses, ingest wallets, or connect exchanges into Tres — whether from\n  a file (CSV\u002FExcel) or by typing them manually. This skill guides Claude through the full\n  flow: wallet type selection → input collection → validation → preview with editable\n  HTML table → exchange credential collection (if exchange) → user confirmation → batch\n  creation via the TRES MCP API. Always trigger this skill for wallet onboarding, wallet\n  data ingestion, or any request to \"add wallets to Tres\".\ncompatibility: \"Requires TRES Finance MCP connected (https:\u002F\u002Fai.tres.finance\u002Fmcp)\"\n---\n\n# TRES Wallet Upload Skill\n\nOnboard on-chain wallets and exchange accounts into Tres Finance with validation, preview, and confirmation.\n\n---\n\n> ⚠️ **EXECUTION RULE — READ BEFORE STARTING:**\n> This skill is a strict sequential checklist. You MUST follow every step in the exact order written — do not skip, merge, or reorder steps. Before moving to the next step, verify the current step is fully complete. Steps that involve API calls (schema fetch, existing-wallet check, batch mutation) are mandatory — never skip them to save time or because results seem obvious. If you catch yourself about to skip a step, stop and execute it first.\n\n---\n\n## Step 0 — Ask Wallet Type\n\nBefore doing anything else, ask the user what kind of wallet they want to add using `ask_user_input_v0`:\n\n```\nquestion: \"What would you like to add to Tres?\"\noptions:\n  - \"On-Chain Wallets (Ethereum, Solana, Bitcoin, etc.)\"\n  - \"Exchange Accounts (Binance, Coinbase, Kraken, etc.)\"\ntype: single_select\n```\n\n- If the user selects **On-Chain Wallets** → proceed to **[ON-CHAIN FLOW]** (Step OC-1)\n- If the user selects **Exchange Accounts** → proceed to **[EXCHANGE FLOW]** (Step EX-1)\n\n---\n\n---\n\n# ON-CHAIN FLOW\n\n---\n\n## Step OC-1 — Ask for Input Method\n\nAsk the user how they want to provide their on-chain wallets using `ask_user_input_v0`:\n\n```\nquestion: \"How would you like to add your wallets?\"\noptions:\n  - \"Upload a file (CSV or Excel)\"\n  - \"Enter manually in a table\"\ntype: single_select\n```\n\nWait for the user's response, then proceed to the matching option in Step OC-2.\n\n---\n\n## Step OC-2 — Collect Wallet Data\n\n### Option A: File Upload\nIf the user selects \"Upload a file\" (or uploads a CSV or Excel file directly):\n- Read the file with pandas \u002F openpyxl from `\u002Fmnt\u002Fuser-data\u002Fuploads\u002F`\n- Expected columns (flexible): `name`, `address` (or `identifier`), `network` (or `platform`), `tags` (optional), `description` (optional)\n- Normalise header names (case-insensitive, strip spaces, accept aliases)\n- Parse into a list of wallet dicts, then proceed to Step OC-3\n\n### Option B: Simple Manual Entry (conversational)\nIf the user selects \"Enter manually in a table\":\n- **Do NOT render an HTML widget.** Instead, ask the user to provide their wallets in plain text, one per line, in this format:\n  ```\n  Name | Address | Network | Tags (optional)\n  ```\n  Example:\n  ```\n  Treasury Hot | 0xABCD...1234 | ETHEREUM | defi,treasury\n  Cold Storage | bc1q...xyz | BITCOIN |\n  ```\n- Once the user pastes their wallets, parse the lines into a list of wallet dicts, then proceed to Step OC-4.\n- If the user is unsure of the network name, tell them to type it as best they can and you will fuzzy-match it to the correct `ParentPlatform` value.\n\n---\n\n## Step OC-3 — Fetch Live Platform List from Schema\n\n**Always** fetch the ParentPlatform enum values live from the TRES MCP schema — never hardcode them. Use:\n\n```graphql\n# Via TRES MCP introspect tool:\nintrospect(\"ParentPlatform\")\n```\n\nThis returns the full list of valid enum values to use in the network dropdown and for validation.\n\n### Identifying exchanges vs on-chain wallets\n\nTo filter the ParentPlatform list to on-chain platforms only, exclude any value that matches a known exchange\u002Fcustodian. The authoritative live list of supported exchanges is fetched in the Exchange Flow (Step EX-1). As a local heuristic for the on-chain filter, exclude these:\n\n```\nANCHORAGE, AQUANOW, ASCENDEX, B2C2, BACKPACK, BINANCE_EXCHANGE, BINANCE_EXCHANGE_TR,\nBITCOIN_SUISSE, BITFINEX, BITGET, BITGO, BITMEX, BITSO, BITSTAMP, BITVAVO, BREX,\nBTC_MARKETS, BTCTURK, BULLISH, BYBIT, CEFFU, CIRCLE, COBO, COINBASE, COINBASE_COMMERCE,\nCOINBASE_EXCHANGE, COINBASE_INTERNATIONAL, COINBASE_PRIME, COINEX, COPPER, CRYPTOCOM,\nCRYPTOCOM_EXCHANGE, CUSTOMERS_BANK, DERIBIT, EQUALSMONEY, FALCONX, FIDELITY,\nFIFTH_THIRD_BANK, FIREBLOCKS, FORDEFI_UTXO, FTX, FTXUS, GATEIO, GEMINI, HITBTC, HTX,\nKRAKEN, KRAKEN_CUSTODY, KRAKEN_FUTURES, KUCOIN, LAYERONE, LEDGER_ENTERPRISE, LMAX,\nLUKKA, M2, MERCADO, MERCURY, MERCURY_TREASURY, MEOW, MEOW_TREASURY, MESH_PAYMENTS,\nMORGAN_STANLEY, NONCO, OKX, PAXFUL, PARADEX, QONTO, QREDO, REVOLUT_FR, REVOLUT_UK,\nSVB_GO, SVB_ONLINE, SYGNUM, TALOS, VERTEX, WHITEBIT, WINTERMUTE, WISE_US,\nBANK_HAPOALIM_BIZ, BANK_HAPOALIM_INTERNATIONAL, BANK_OF_AMERICA,\nBANQUE_POPULAIRE_RIVES_DE_PARIS, CHASE, CHECKOUT\n```\n\nAny platform NOT in this list is treated as an on-chain wallet requiring a standard blockchain address.\n\n---\n\n## Step OC-4 — Validate Wallets\n\nRun ALL checks below. Collect errors per-row; do NOT abort early.\n\n### Required field checks\n| Field | Rule |\n|-------|------|\n| `name` | Non-empty string |\n| `identifier` | Non-empty string |\n| `parentPlatform` | Must be a valid `ParentPlatform` enum value (from live schema) |\n\n### Network name normalisation\nIf a network name from a CSV is lowercase or mixed-case (e.g. `tezos`, `Ethereum`), uppercase it and fuzzy-match to the nearest valid `ParentPlatform` enum value. Show a warning banner in the preview noting the normalisation and asking the user to confirm.\n\n### Address format validation per network (on-chain only)\nApply these regex rules for on-chain wallets. Skip for exchanges.\n\n| Network(s) | Rule |\n|---|---|\n| ETHEREUM, BNB, POLYGON, AVALANCHE_*, ARBITRUM, OPTIMISM, BASE, FANTOM, MOONBEAM, and other EVM chains | `^0x[0-9a-fA-F]{40}$` |\n| BITCOIN | P2PKH `1...`, P2SH `3...`, or Bech32 `bc1...` — 25–62 chars |\n| SOLANA | Base58, 32–44 chars: `^[1-9A-HJ-NP-Za-km-z]{32,44}$` |\n| TRON | `^T[1-9A-HJ-NP-Za-km-z]{33}$` |\n| TEZOS | `^tz[123][1-9A-HJ-NP-Za-km-z]{33}$` |\n| SUI, APTOS | `^0x[0-9a-fA-F]{62,64}$` |\n| STELLAR | Starts with `G`, 56 chars |\n| RIPPLE | Starts with `r`, 25–34 chars |\n| CARDANO | Starts with `addr1`, length > 50 |\n| NEAR | Ends in `.near` OR 64-char hex |\n| TON | Starts with `EQ` or `UQ`, 48 chars |\n| ALGORAND | 58-char Base32 uppercase |\n\n### Network–address mismatch detection\nFlag obvious mismatches (e.g. `0x...` address on SOLANA network, or Bitcoin address on ETHEREUM).\n\n### Duplicate detection\n\n**Within-batch duplicates:**\nFlag rows sharing the same `(identifier, parentPlatform)` pair. Mark both as errors.\n\n**Existing-wallet check against Tres (batches ≤ 200 wallets):**\n```graphql\n{\n  internalAccount(identifier_In: [\"addr1\", \"addr2\", ...]) {\n    results { id name identifier parentPlatform }\n  }\n}\n```\nBuild a lookup: `key = identifier.toLowerCase() + \"|\" + parentPlatform.toUpperCase()`\n- Match → mark as **⚠️ warning** (yellow): `\"Exists (ID: XXXXX)\"` — API will update, not duplicate\n- Summary bar must show: `X new | Y already exist | Z errors`\n\nFor batches > 200: skip the API check, show a note in the preview.\n\n---\n\n## Step OC-5 — Show Text Preview\n\n> 🚫 **HARD GATE:** Do NOT render this preview until Step OC-4 (validation) AND the existing-wallet Tres API check are both fully complete. Showing the preview without the API check is a violation of this skill.\n\n**Do NOT render an HTML widget.** Instead, present the wallet data as a clean markdown table in plain text so the user can review it:\n\n```\n| # | Name | Address | Network | Tags | Status |\n|---|------|---------|---------|------|--------|\n| 1 | Treasury Hot | 0xABCD...1234 | ETHEREUM | defi | ✅ New |\n| 2 | Cold Wallet | bc1q...xyz | BITCOIN | | ⚠️ Exists (ID: 12345) |\n| 3 | Bad Wallet | invalid-addr | SOLANA | | ❌ Invalid address |\n```\n\n- Show a summary line: `X new | Y already exist | Z errors`\n- List all errors below the table with row number and description:\n  ```\n  Errors:\n  - Row 3 (Bad Wallet): Invalid SOLANA address format\n  ```\n- If there are errors, tell the user to correct and re-paste the data before proceeding\n- If there are only warnings (existing wallets), ask: \"Ready to upload? Existing wallets will be updated. Type **yes** to confirm.\"\n- If all rows are valid, ask: \"Ready to upload N wallets to Tres Finance. Type **yes** to confirm.\"\n\nWhen the user confirms → proceed to Step OC-6.\n\n---\n\n## Step OC-6 — Final Confirmation\n\nWhen Claude receives `TRES_WALLET_UPLOAD_CONFIRMED:`:\n1. Parse the JSON payload\n2. Present a plain-text summary:\n   ```\n   About to upload N wallets to Tres Finance:\n   - 3 ETHEREUM wallets\n   - 2 SOLANA wallets\n   - 1 TEZOS wallet (will update existing)\n\n   Shall I proceed?\n   ```\n3. Wait for explicit user confirmation (\"yes\", \"confirm\", \"go ahead\")\n\n---\n\n## Step OC-7 — Execute Batch Upload\n\nCall `updateBatchInternalAccounts` via TRES MCP:\n\n```graphql\nmutation UpdateBatchInternalAccounts($internalAccounts: [InternalAccountInput]) {\n  updateBatchInternalAccounts(internalAccounts: $internalAccounts) {\n    internalAccounts {\n      id\n      name\n      identifier\n      parentPlatform\n      status\n    }\n    validationResults {\n      iaIdentifier\n      validationResult {\n        issueType\n        errorMessage\n      }\n    }\n  }\n}\n```\n\nVariables per wallet:\n```json\n{\n  \"name\": \"Treasury Hot\",\n  \"identifier\": \"0xABCD...\",\n  \"parentPlatform\": \"ETHEREUM\",\n  \"tags\": [\"defi\", \"treasury\"],\n  \"enforceCollectTransactions\": true\n}\n```\n\nNote: `platformKeys` is not included for on-chain wallets.\n\n### Chunking\nIf batch > 100 wallets, split into chunks of 50 and call sequentially.\n\n### Result handling\n- Parse `validationResults` — surface any `issueType` \u002F `errorMessage` to the user\n- Show success count and any failures\n- For failures, offer to retry just the failed wallets\n\n---\n\n---\n\n# EXCHANGE FLOW\n\n---\n\n## Step EX-1 — Introduction & Guide\n\nShow the user the integration guide link:\n\n> Before connecting an exchange, please review the **Tres Finance Exchange Integration Guide**:\n> 👉 https:\u002F\u002Fhelp.tres.finance\u002Farticle\u002Fintegrating-your-exchange-accounts-with-tres-finance\n\nThen fetch the **live validated exchange list** from TRES MCP — never hardcode it:\n\n```graphql\nquery GetAllValidatedExchanges {\n  ledgerFilters {\n    allValidatedExchanges {\n      id\n      displayName\n    }\n  }\n}\n```\n\nThis returns the authoritative list of supported exchanges (47 as of writing, but always fetch live). Sort A-Z by `displayName`. Present as a native `\u003Cselect>` dropdown using `ask_user_input_v0` or inline in a `show_widget` form, mirroring the Tres UI with a \"Connection Guidelines ↗\" link alongside the label.\n\n---\n\n## Step EX-2 — Fetch Required Fields for the Selected Exchange\n\nOnce the user selects an exchange, fetch its credential fields. **Use the `id` value (lowercase) as the `exchangeName`:**\n\n```graphql\nquery ExchangeRequiredFields {\n  exchangeRequiredFields {\n    requiredFields(exchangeName: \"\u003Cexchange_id_lowercase>\") {\n      name\n      type\n      description\n      mapping\n    }\n  }\n}\n```\n\n**Important:** Skip any field where `mapping` starts with `https:\u002F\u002F` — these are integration guide links, not credential inputs. Show them as a clickable link instead.\n\nStore the remaining fields. Each field has:\n- `name` — the credential field key\n- `description` — the human-readable label to show the user\n- `mapping` — the key used when constructing `platformKeys` (e.g. `platform_keys.api_key`)\n- `type` — use to determine input type\n\n---\n\n## Step EX-3 — Collect Exchange Credentials (Conversational)\n\n**Do NOT render an HTML widget.** Instead, ask the user for credentials in plain conversational steps.\n\nFirst, show the integration guide link:\n> 📖 Before connecting, review the guide: https:\u002F\u002Fhelp.tres.finance\u002Farticle\u002Fintegrating-your-exchange-accounts-with-tres-finance\n\nThen ask for the fields one by one (or all at once in a single prompt), clearly listing what is needed:\n\n```\nTo connect \u003CExchange Name>, I need the following:\n\n**Account Name** (required) — a friendly name for this account in Tres\n**API Key** (required)\n**API Secret** (required, will be stored securely)\n**Tags** (optional) — comma-separated tags\n\nPlease provide these values. Keep API secrets private — do not share them in public channels.\n```\n\n- For fields where `field.name` contains \"secret\", \"private\", \"signing\", or \"passphrase\" — note they will be stored securely\n- For optional fields (e.g. OKX sub-account), label them clearly as `(optional)`\n- Skip any field where `mapping` starts with `https:\u002F\u002F` — show it as a link instead\n\n### Mandatory confirmations (ask as yes\u002Fno questions before proceeding)\nBefore accepting the credentials, ask:\n1. \"Do you confirm the API key has **read-only permissions**? (yes\u002Fno)\"\n2. \"Do you agree to the **Tres Finance Terms of Service**? (yes\u002Fno)\"\n\nOnly proceed once both are confirmed.\n\nOnce all credentials and confirmations are collected, store them in the queue format and proceed to Step EX-4.\n\n---\n\n## Step EX-4 — Accumulate Exchange Accounts\n\nAfter collecting credentials for an exchange:\n1. Parse and store the account data in a pending queue\n2. Confirm: `✅ \u003CaccountName> (\u003Cexchange>) added to queue`\n3. Display the running queue as a brief list:\n   ```\n   Queued accounts:\n   1. My Binance Account (BINANCE_EXCHANGE)\n   ```\n4. Ask: \"Would you like to **add another exchange** or **proceed to upload**?\"\n\nIf user wants to add another → loop back to **Step EX-1** (queued accounts are preserved).\nIf user wants to proceed → go to **Step EX-5**.\n\n---\n\n## Step EX-5 — Final Review & Confirmation\n\nPresent a plain-text summary of all queued accounts:\n\n```\nReady to connect the following exchange accounts to Tres Finance:\n\n1. My Binance Account (BINANCE_EXCHANGE)\n2. Kraken Main (KRAKEN)\n\nShall I proceed?\n```\n\nWait for explicit user confirmation (\"yes\", \"confirm\", \"go ahead\", etc.)\n\n---\n\n## Step EX-6 — Execute Exchange Account Creation\n\nCall `updateBatchInternalAccounts` via TRES MCP for all queued accounts:\n\n```graphql\nmutation UpdateBatchInternalAccounts($internalAccounts: [InternalAccountInput]) {\n  updateBatchInternalAccounts(internalAccounts: $internalAccounts) {\n    internalAccounts {\n      id\n      name\n      identifier\n      parentPlatform\n      status\n    }\n    validationResults {\n      iaIdentifier\n      validationResult {\n        issueType\n        errorMessage\n      }\n    }\n  }\n}\n```\n\nVariables per exchange account:\n```json\n{\n  \"name\": \"\u003CaccountName>\",\n  \"identifier\": \"\u003CaccountName>\",\n  \"parentPlatform\": \"\u003CEXCHANGE_ID_UPPERCASE>\",\n  \"tags\": [\"\u003Ctag1>\"],\n  \"enforceCollectTransactions\": true,\n  \"platformKeys\": \"{\\\"api_key\\\": \\\"...\\\", \\\"api_secret\\\": \\\"...\\\"}\"\n}\n```\n\n**Important:**\n- `identifier` = account name (no blockchain address for exchanges)\n- `platformKeys` = a **JSON string** (not an object), built from `field.mapping` → value pairs collected in the form\n- `parentPlatform` = exchange `id` uppercased (e.g. `binance_exchange` → `BINANCE_EXCHANGE`)\n- Process all accounts in a single batch call where possible\n\n### Result handling\n- Show success\u002Ffailure per account\n- Surface `issueType` and `errorMessage` for failures\n- Offer to retry failed accounts\n\n---\n\n## Error Messages & Recovery\n\n| Situation | What to do |\n|-----------|-----------|\n| CSV has no `address` column | Ask user to map which column contains the wallet address |\n| Unknown network name | Fuzzy-match to nearest `ParentPlatform` enum value, show warning banner, ask user to confirm |\n| Address format invalid | Mark as error in preview; user must fix or remove the row before upload |\n| Duplicate in batch | Mark both rows as errors; user must remove or fix one |\n| Wallet already exists in Tres | Mark as ⚠️ warning (yellow); proceed — API will update it |\n| No file and no wallets typed | Prompt user to either upload a file or use the manual table |\n| Batch > 200 wallets | Skip existing-wallet API check; show informational note |\n| MCP mutation returns error | Show error per wallet; offer retry |\n| Exchange credentials rejected | Show the validation error and prompt user to re-enter credentials |\n| `exchangeRequiredFields` returns empty | Inform user that this exchange may need manual setup; link to the guide |\n| `allValidatedExchanges` returns empty | Fall back to informing user and linking to https:\u002F\u002Fhelp.tres.finance |\n",{"data":35,"body":37},{"name":4,"description":6,"compatibility":36},"Requires TRES Finance MCP connected (https:\u002F\u002Fai.tres.finance\u002Fmcp)",{"type":38,"children":39},"root",[40,49,55,59,76,79,86,100,112,160,163,166,171,174,180,191,200,205,208,214,221,226,309,315,320,371,374,380,390,418,423,429,434,443,448,451,457,462,468,551,557,583,589,594,862,868,881,887,905,913,963,974,1008,1013,1016,1022,1037,1046,1055,1109,1114,1117,1123,1135,1163,1166,1172,1185,1346,1351,1574,1587,1593,1598,1604,1646,1649,1652,1657,1660,1666,1671,1694,1706,1773,1809,1812,1818,1843,1926,1952,1957,2016,2019,2025,2034,2039,2052,2057,2066,2111,2117,2122,2148,2153,2158,2161,2167,2172,2223,2242,2245,2251,2256,2265,2270,2273,2279,2290,2422,2427,2723,2730,2805,2810,2842,2845,2851,3047],{"type":41,"tag":42,"props":43,"children":45},"element","h1",{"id":44},"tres-wallet-upload-skill",[46],{"type":47,"value":48},"text","TRES Wallet Upload Skill",{"type":41,"tag":50,"props":51,"children":52},"p",{},[53],{"type":47,"value":54},"Onboard on-chain wallets and exchange accounts into Tres Finance with validation, preview, and confirmation.",{"type":41,"tag":56,"props":57,"children":58},"hr",{},[],{"type":41,"tag":60,"props":61,"children":62},"blockquote",{},[63],{"type":41,"tag":50,"props":64,"children":65},{},[66,68,74],{"type":47,"value":67},"⚠️ ",{"type":41,"tag":69,"props":70,"children":71},"strong",{},[72],{"type":47,"value":73},"EXECUTION RULE — READ BEFORE STARTING:",{"type":47,"value":75},"\nThis skill is a strict sequential checklist. You MUST follow every step in the exact order written — do not skip, merge, or reorder steps. Before moving to the next step, verify the current step is fully complete. Steps that involve API calls (schema fetch, existing-wallet check, batch mutation) are mandatory — never skip them to save time or because results seem obvious. If you catch yourself about to skip a step, stop and execute it first.",{"type":41,"tag":56,"props":77,"children":78},{},[],{"type":41,"tag":80,"props":81,"children":83},"h2",{"id":82},"step-0-ask-wallet-type",[84],{"type":47,"value":85},"Step 0 — Ask Wallet Type",{"type":41,"tag":50,"props":87,"children":88},{},[89,91,98],{"type":47,"value":90},"Before doing anything else, ask the user what kind of wallet they want to add using ",{"type":41,"tag":92,"props":93,"children":95},"code",{"className":94},[],[96],{"type":47,"value":97},"ask_user_input_v0",{"type":47,"value":99},":",{"type":41,"tag":101,"props":102,"children":106},"pre",{"className":103,"code":105,"language":47},[104],"language-text","question: \"What would you like to add to Tres?\"\noptions:\n  - \"On-Chain Wallets (Ethereum, Solana, Bitcoin, etc.)\"\n  - \"Exchange Accounts (Binance, Coinbase, Kraken, etc.)\"\ntype: single_select\n",[107],{"type":41,"tag":92,"props":108,"children":110},{"__ignoreMap":109},"",[111],{"type":47,"value":105},{"type":41,"tag":113,"props":114,"children":115},"ul",{},[116,140],{"type":41,"tag":117,"props":118,"children":119},"li",{},[120,122,127,129,138],{"type":47,"value":121},"If the user selects ",{"type":41,"tag":69,"props":123,"children":124},{},[125],{"type":47,"value":126},"On-Chain Wallets",{"type":47,"value":128}," → proceed to ",{"type":41,"tag":69,"props":130,"children":131},{},[132],{"type":41,"tag":133,"props":134,"children":135},"span",{},[136],{"type":47,"value":137},"ON-CHAIN FLOW",{"type":47,"value":139}," (Step OC-1)",{"type":41,"tag":117,"props":141,"children":142},{},[143,144,149,150,158],{"type":47,"value":121},{"type":41,"tag":69,"props":145,"children":146},{},[147],{"type":47,"value":148},"Exchange Accounts",{"type":47,"value":128},{"type":41,"tag":69,"props":151,"children":152},{},[153],{"type":41,"tag":133,"props":154,"children":155},{},[156],{"type":47,"value":157},"EXCHANGE FLOW",{"type":47,"value":159}," (Step EX-1)",{"type":41,"tag":56,"props":161,"children":162},{},[],{"type":41,"tag":56,"props":164,"children":165},{},[],{"type":41,"tag":42,"props":167,"children":169},{"id":168},"on-chain-flow",[170],{"type":47,"value":137},{"type":41,"tag":56,"props":172,"children":173},{},[],{"type":41,"tag":80,"props":175,"children":177},{"id":176},"step-oc-1-ask-for-input-method",[178],{"type":47,"value":179},"Step OC-1 — Ask for Input Method",{"type":41,"tag":50,"props":181,"children":182},{},[183,185,190],{"type":47,"value":184},"Ask the user how they want to provide their on-chain wallets using ",{"type":41,"tag":92,"props":186,"children":188},{"className":187},[],[189],{"type":47,"value":97},{"type":47,"value":99},{"type":41,"tag":101,"props":192,"children":195},{"className":193,"code":194,"language":47},[104],"question: \"How would you like to add your wallets?\"\noptions:\n  - \"Upload a file (CSV or Excel)\"\n  - \"Enter manually in a table\"\ntype: single_select\n",[196],{"type":41,"tag":92,"props":197,"children":198},{"__ignoreMap":109},[199],{"type":47,"value":194},{"type":41,"tag":50,"props":201,"children":202},{},[203],{"type":47,"value":204},"Wait for the user's response, then proceed to the matching option in Step OC-2.",{"type":41,"tag":56,"props":206,"children":207},{},[],{"type":41,"tag":80,"props":209,"children":211},{"id":210},"step-oc-2-collect-wallet-data",[212],{"type":47,"value":213},"Step OC-2 — Collect Wallet Data",{"type":41,"tag":215,"props":216,"children":218},"h3",{"id":217},"option-a-file-upload",[219],{"type":47,"value":220},"Option A: File Upload",{"type":41,"tag":50,"props":222,"children":223},{},[224],{"type":47,"value":225},"If the user selects \"Upload a file\" (or uploads a CSV or Excel file directly):",{"type":41,"tag":113,"props":227,"children":228},{},[229,240,299,304],{"type":41,"tag":117,"props":230,"children":231},{},[232,234],{"type":47,"value":233},"Read the file with pandas \u002F openpyxl from ",{"type":41,"tag":92,"props":235,"children":237},{"className":236},[],[238],{"type":47,"value":239},"\u002Fmnt\u002Fuser-data\u002Fuploads\u002F",{"type":41,"tag":117,"props":241,"children":242},{},[243,245,251,253,259,261,267,269,275,276,282,283,289,291,297],{"type":47,"value":244},"Expected columns (flexible): ",{"type":41,"tag":92,"props":246,"children":248},{"className":247},[],[249],{"type":47,"value":250},"name",{"type":47,"value":252},", ",{"type":41,"tag":92,"props":254,"children":256},{"className":255},[],[257],{"type":47,"value":258},"address",{"type":47,"value":260}," (or ",{"type":41,"tag":92,"props":262,"children":264},{"className":263},[],[265],{"type":47,"value":266},"identifier",{"type":47,"value":268},"), ",{"type":41,"tag":92,"props":270,"children":272},{"className":271},[],[273],{"type":47,"value":274},"network",{"type":47,"value":260},{"type":41,"tag":92,"props":277,"children":279},{"className":278},[],[280],{"type":47,"value":281},"platform",{"type":47,"value":268},{"type":41,"tag":92,"props":284,"children":286},{"className":285},[],[287],{"type":47,"value":288},"tags",{"type":47,"value":290}," (optional), ",{"type":41,"tag":92,"props":292,"children":294},{"className":293},[],[295],{"type":47,"value":296},"description",{"type":47,"value":298}," (optional)",{"type":41,"tag":117,"props":300,"children":301},{},[302],{"type":47,"value":303},"Normalise header names (case-insensitive, strip spaces, accept aliases)",{"type":41,"tag":117,"props":305,"children":306},{},[307],{"type":47,"value":308},"Parse into a list of wallet dicts, then proceed to Step OC-3",{"type":41,"tag":215,"props":310,"children":312},{"id":311},"option-b-simple-manual-entry-conversational",[313],{"type":47,"value":314},"Option B: Simple Manual Entry (conversational)",{"type":41,"tag":50,"props":316,"children":317},{},[318],{"type":47,"value":319},"If the user selects \"Enter manually in a table\":",{"type":41,"tag":113,"props":321,"children":322},{},[323,353,358],{"type":41,"tag":117,"props":324,"children":325},{},[326,331,333,342,344],{"type":41,"tag":69,"props":327,"children":328},{},[329],{"type":47,"value":330},"Do NOT render an HTML widget.",{"type":47,"value":332}," Instead, ask the user to provide their wallets in plain text, one per line, in this format:\n",{"type":41,"tag":101,"props":334,"children":337},{"className":335,"code":336,"language":47},[104],"Name | Address | Network | Tags (optional)\n",[338],{"type":41,"tag":92,"props":339,"children":340},{"__ignoreMap":109},[341],{"type":47,"value":336},{"type":47,"value":343},"\nExample:\n",{"type":41,"tag":101,"props":345,"children":348},{"className":346,"code":347,"language":47},[104],"Treasury Hot | 0xABCD...1234 | ETHEREUM | defi,treasury\nCold Storage | bc1q...xyz | BITCOIN |\n",[349],{"type":41,"tag":92,"props":350,"children":351},{"__ignoreMap":109},[352],{"type":47,"value":347},{"type":41,"tag":117,"props":354,"children":355},{},[356],{"type":47,"value":357},"Once the user pastes their wallets, parse the lines into a list of wallet dicts, then proceed to Step OC-4.",{"type":41,"tag":117,"props":359,"children":360},{},[361,363,369],{"type":47,"value":362},"If the user is unsure of the network name, tell them to type it as best they can and you will fuzzy-match it to the correct ",{"type":41,"tag":92,"props":364,"children":366},{"className":365},[],[367],{"type":47,"value":368},"ParentPlatform",{"type":47,"value":370}," value.",{"type":41,"tag":56,"props":372,"children":373},{},[],{"type":41,"tag":80,"props":375,"children":377},{"id":376},"step-oc-3-fetch-live-platform-list-from-schema",[378],{"type":47,"value":379},"Step OC-3 — Fetch Live Platform List from Schema",{"type":41,"tag":50,"props":381,"children":382},{},[383,388],{"type":41,"tag":69,"props":384,"children":385},{},[386],{"type":47,"value":387},"Always",{"type":47,"value":389}," fetch the ParentPlatform enum values live from the TRES MCP schema — never hardcode them. Use:",{"type":41,"tag":101,"props":391,"children":395},{"className":392,"code":393,"language":394,"meta":109,"style":109},"language-graphql shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# Via TRES MCP introspect tool:\nintrospect(\"ParentPlatform\")\n","graphql",[396],{"type":41,"tag":92,"props":397,"children":398},{"__ignoreMap":109},[399,409],{"type":41,"tag":133,"props":400,"children":403},{"class":401,"line":402},"line",1,[404],{"type":41,"tag":133,"props":405,"children":406},{},[407],{"type":47,"value":408},"# Via TRES MCP introspect tool:\n",{"type":41,"tag":133,"props":410,"children":412},{"class":401,"line":411},2,[413],{"type":41,"tag":133,"props":414,"children":415},{},[416],{"type":47,"value":417},"introspect(\"ParentPlatform\")\n",{"type":41,"tag":50,"props":419,"children":420},{},[421],{"type":47,"value":422},"This returns the full list of valid enum values to use in the network dropdown and for validation.",{"type":41,"tag":215,"props":424,"children":426},{"id":425},"identifying-exchanges-vs-on-chain-wallets",[427],{"type":47,"value":428},"Identifying exchanges vs on-chain wallets",{"type":41,"tag":50,"props":430,"children":431},{},[432],{"type":47,"value":433},"To filter the ParentPlatform list to on-chain platforms only, exclude any value that matches a known exchange\u002Fcustodian. The authoritative live list of supported exchanges is fetched in the Exchange Flow (Step EX-1). As a local heuristic for the on-chain filter, exclude these:",{"type":41,"tag":101,"props":435,"children":438},{"className":436,"code":437,"language":47},[104],"ANCHORAGE, AQUANOW, ASCENDEX, B2C2, BACKPACK, BINANCE_EXCHANGE, BINANCE_EXCHANGE_TR,\nBITCOIN_SUISSE, BITFINEX, BITGET, BITGO, BITMEX, BITSO, BITSTAMP, BITVAVO, BREX,\nBTC_MARKETS, BTCTURK, BULLISH, BYBIT, CEFFU, CIRCLE, COBO, COINBASE, COINBASE_COMMERCE,\nCOINBASE_EXCHANGE, COINBASE_INTERNATIONAL, COINBASE_PRIME, COINEX, COPPER, CRYPTOCOM,\nCRYPTOCOM_EXCHANGE, CUSTOMERS_BANK, DERIBIT, EQUALSMONEY, FALCONX, FIDELITY,\nFIFTH_THIRD_BANK, FIREBLOCKS, FORDEFI_UTXO, FTX, FTXUS, GATEIO, GEMINI, HITBTC, HTX,\nKRAKEN, KRAKEN_CUSTODY, KRAKEN_FUTURES, KUCOIN, LAYERONE, LEDGER_ENTERPRISE, LMAX,\nLUKKA, M2, MERCADO, MERCURY, MERCURY_TREASURY, MEOW, MEOW_TREASURY, MESH_PAYMENTS,\nMORGAN_STANLEY, NONCO, OKX, PAXFUL, PARADEX, QONTO, QREDO, REVOLUT_FR, REVOLUT_UK,\nSVB_GO, SVB_ONLINE, SYGNUM, TALOS, VERTEX, WHITEBIT, WINTERMUTE, WISE_US,\nBANK_HAPOALIM_BIZ, BANK_HAPOALIM_INTERNATIONAL, BANK_OF_AMERICA,\nBANQUE_POPULAIRE_RIVES_DE_PARIS, CHASE, CHECKOUT\n",[439],{"type":41,"tag":92,"props":440,"children":441},{"__ignoreMap":109},[442],{"type":47,"value":437},{"type":41,"tag":50,"props":444,"children":445},{},[446],{"type":47,"value":447},"Any platform NOT in this list is treated as an on-chain wallet requiring a standard blockchain address.",{"type":41,"tag":56,"props":449,"children":450},{},[],{"type":41,"tag":80,"props":452,"children":454},{"id":453},"step-oc-4-validate-wallets",[455],{"type":47,"value":456},"Step OC-4 — Validate Wallets",{"type":41,"tag":50,"props":458,"children":459},{},[460],{"type":47,"value":461},"Run ALL checks below. Collect errors per-row; do NOT abort early.",{"type":41,"tag":215,"props":463,"children":465},{"id":464},"required-field-checks",[466],{"type":47,"value":467},"Required field checks",{"type":41,"tag":469,"props":470,"children":471},"table",{},[472,491],{"type":41,"tag":473,"props":474,"children":475},"thead",{},[476],{"type":41,"tag":477,"props":478,"children":479},"tr",{},[480,486],{"type":41,"tag":481,"props":482,"children":483},"th",{},[484],{"type":47,"value":485},"Field",{"type":41,"tag":481,"props":487,"children":488},{},[489],{"type":47,"value":490},"Rule",{"type":41,"tag":492,"props":493,"children":494},"tbody",{},[495,512,527],{"type":41,"tag":477,"props":496,"children":497},{},[498,507],{"type":41,"tag":499,"props":500,"children":501},"td",{},[502],{"type":41,"tag":92,"props":503,"children":505},{"className":504},[],[506],{"type":47,"value":250},{"type":41,"tag":499,"props":508,"children":509},{},[510],{"type":47,"value":511},"Non-empty string",{"type":41,"tag":477,"props":513,"children":514},{},[515,523],{"type":41,"tag":499,"props":516,"children":517},{},[518],{"type":41,"tag":92,"props":519,"children":521},{"className":520},[],[522],{"type":47,"value":266},{"type":41,"tag":499,"props":524,"children":525},{},[526],{"type":47,"value":511},{"type":41,"tag":477,"props":528,"children":529},{},[530,539],{"type":41,"tag":499,"props":531,"children":532},{},[533],{"type":41,"tag":92,"props":534,"children":536},{"className":535},[],[537],{"type":47,"value":538},"parentPlatform",{"type":41,"tag":499,"props":540,"children":541},{},[542,544,549],{"type":47,"value":543},"Must be a valid ",{"type":41,"tag":92,"props":545,"children":547},{"className":546},[],[548],{"type":47,"value":368},{"type":47,"value":550}," enum value (from live schema)",{"type":41,"tag":215,"props":552,"children":554},{"id":553},"network-name-normalisation",[555],{"type":47,"value":556},"Network name normalisation",{"type":41,"tag":50,"props":558,"children":559},{},[560,562,568,569,574,576,581],{"type":47,"value":561},"If a network name from a CSV is lowercase or mixed-case (e.g. ",{"type":41,"tag":92,"props":563,"children":565},{"className":564},[],[566],{"type":47,"value":567},"tezos",{"type":47,"value":252},{"type":41,"tag":92,"props":570,"children":572},{"className":571},[],[573],{"type":47,"value":21},{"type":47,"value":575},"), uppercase it and fuzzy-match to the nearest valid ",{"type":41,"tag":92,"props":577,"children":579},{"className":578},[],[580],{"type":47,"value":368},{"type":47,"value":582}," enum value. Show a warning banner in the preview noting the normalisation and asking the user to confirm.",{"type":41,"tag":215,"props":584,"children":586},{"id":585},"address-format-validation-per-network-on-chain-only",[587],{"type":47,"value":588},"Address format validation per network (on-chain only)",{"type":41,"tag":50,"props":590,"children":591},{},[592],{"type":47,"value":593},"Apply these regex rules for on-chain wallets. Skip for exchanges.",{"type":41,"tag":469,"props":595,"children":596},{},[597,612],{"type":41,"tag":473,"props":598,"children":599},{},[600],{"type":41,"tag":477,"props":601,"children":602},{},[603,608],{"type":41,"tag":481,"props":604,"children":605},{},[606],{"type":47,"value":607},"Network(s)",{"type":41,"tag":481,"props":609,"children":610},{},[611],{"type":47,"value":490},{"type":41,"tag":492,"props":613,"children":614},{},[615,632,669,688,705,722,739,760,780,800,821,849],{"type":41,"tag":477,"props":616,"children":617},{},[618,623],{"type":41,"tag":499,"props":619,"children":620},{},[621],{"type":47,"value":622},"ETHEREUM, BNB, POLYGON, AVALANCHE_*, ARBITRUM, OPTIMISM, BASE, FANTOM, MOONBEAM, and other EVM chains",{"type":41,"tag":499,"props":624,"children":625},{},[626],{"type":41,"tag":92,"props":627,"children":629},{"className":628},[],[630],{"type":47,"value":631},"^0x[0-9a-fA-F]{40}$",{"type":41,"tag":477,"props":633,"children":634},{},[635,640],{"type":41,"tag":499,"props":636,"children":637},{},[638],{"type":47,"value":639},"BITCOIN",{"type":41,"tag":499,"props":641,"children":642},{},[643,645,651,653,659,661,667],{"type":47,"value":644},"P2PKH ",{"type":41,"tag":92,"props":646,"children":648},{"className":647},[],[649],{"type":47,"value":650},"1...",{"type":47,"value":652},", P2SH ",{"type":41,"tag":92,"props":654,"children":656},{"className":655},[],[657],{"type":47,"value":658},"3...",{"type":47,"value":660},", or Bech32 ",{"type":41,"tag":92,"props":662,"children":664},{"className":663},[],[665],{"type":47,"value":666},"bc1...",{"type":47,"value":668}," — 25–62 chars",{"type":41,"tag":477,"props":670,"children":671},{},[672,677],{"type":41,"tag":499,"props":673,"children":674},{},[675],{"type":47,"value":676},"SOLANA",{"type":41,"tag":499,"props":678,"children":679},{},[680,682],{"type":47,"value":681},"Base58, 32–44 chars: ",{"type":41,"tag":92,"props":683,"children":685},{"className":684},[],[686],{"type":47,"value":687},"^[1-9A-HJ-NP-Za-km-z]{32,44}$",{"type":41,"tag":477,"props":689,"children":690},{},[691,696],{"type":41,"tag":499,"props":692,"children":693},{},[694],{"type":47,"value":695},"TRON",{"type":41,"tag":499,"props":697,"children":698},{},[699],{"type":41,"tag":92,"props":700,"children":702},{"className":701},[],[703],{"type":47,"value":704},"^T[1-9A-HJ-NP-Za-km-z]{33}$",{"type":41,"tag":477,"props":706,"children":707},{},[708,713],{"type":41,"tag":499,"props":709,"children":710},{},[711],{"type":47,"value":712},"TEZOS",{"type":41,"tag":499,"props":714,"children":715},{},[716],{"type":41,"tag":92,"props":717,"children":719},{"className":718},[],[720],{"type":47,"value":721},"^tz[123][1-9A-HJ-NP-Za-km-z]{33}$",{"type":41,"tag":477,"props":723,"children":724},{},[725,730],{"type":41,"tag":499,"props":726,"children":727},{},[728],{"type":47,"value":729},"SUI, APTOS",{"type":41,"tag":499,"props":731,"children":732},{},[733],{"type":41,"tag":92,"props":734,"children":736},{"className":735},[],[737],{"type":47,"value":738},"^0x[0-9a-fA-F]{62,64}$",{"type":41,"tag":477,"props":740,"children":741},{},[742,747],{"type":41,"tag":499,"props":743,"children":744},{},[745],{"type":47,"value":746},"STELLAR",{"type":41,"tag":499,"props":748,"children":749},{},[750,752,758],{"type":47,"value":751},"Starts with ",{"type":41,"tag":92,"props":753,"children":755},{"className":754},[],[756],{"type":47,"value":757},"G",{"type":47,"value":759},", 56 chars",{"type":41,"tag":477,"props":761,"children":762},{},[763,768],{"type":41,"tag":499,"props":764,"children":765},{},[766],{"type":47,"value":767},"RIPPLE",{"type":41,"tag":499,"props":769,"children":770},{},[771,772,778],{"type":47,"value":751},{"type":41,"tag":92,"props":773,"children":775},{"className":774},[],[776],{"type":47,"value":777},"r",{"type":47,"value":779},", 25–34 chars",{"type":41,"tag":477,"props":781,"children":782},{},[783,788],{"type":41,"tag":499,"props":784,"children":785},{},[786],{"type":47,"value":787},"CARDANO",{"type":41,"tag":499,"props":789,"children":790},{},[791,792,798],{"type":47,"value":751},{"type":41,"tag":92,"props":793,"children":795},{"className":794},[],[796],{"type":47,"value":797},"addr1",{"type":47,"value":799},", length > 50",{"type":41,"tag":477,"props":801,"children":802},{},[803,808],{"type":41,"tag":499,"props":804,"children":805},{},[806],{"type":47,"value":807},"NEAR",{"type":41,"tag":499,"props":809,"children":810},{},[811,813,819],{"type":47,"value":812},"Ends in ",{"type":41,"tag":92,"props":814,"children":816},{"className":815},[],[817],{"type":47,"value":818},".near",{"type":47,"value":820}," OR 64-char hex",{"type":41,"tag":477,"props":822,"children":823},{},[824,829],{"type":41,"tag":499,"props":825,"children":826},{},[827],{"type":47,"value":828},"TON",{"type":41,"tag":499,"props":830,"children":831},{},[832,833,839,841,847],{"type":47,"value":751},{"type":41,"tag":92,"props":834,"children":836},{"className":835},[],[837],{"type":47,"value":838},"EQ",{"type":47,"value":840}," or ",{"type":41,"tag":92,"props":842,"children":844},{"className":843},[],[845],{"type":47,"value":846},"UQ",{"type":47,"value":848},", 48 chars",{"type":41,"tag":477,"props":850,"children":851},{},[852,857],{"type":41,"tag":499,"props":853,"children":854},{},[855],{"type":47,"value":856},"ALGORAND",{"type":41,"tag":499,"props":858,"children":859},{},[860],{"type":47,"value":861},"58-char Base32 uppercase",{"type":41,"tag":215,"props":863,"children":865},{"id":864},"networkaddress-mismatch-detection",[866],{"type":47,"value":867},"Network–address mismatch detection",{"type":41,"tag":50,"props":869,"children":870},{},[871,873,879],{"type":47,"value":872},"Flag obvious mismatches (e.g. ",{"type":41,"tag":92,"props":874,"children":876},{"className":875},[],[877],{"type":47,"value":878},"0x...",{"type":47,"value":880}," address on SOLANA network, or Bitcoin address on ETHEREUM).",{"type":41,"tag":215,"props":882,"children":884},{"id":883},"duplicate-detection",[885],{"type":47,"value":886},"Duplicate detection",{"type":41,"tag":50,"props":888,"children":889},{},[890,895,897,903],{"type":41,"tag":69,"props":891,"children":892},{},[893],{"type":47,"value":894},"Within-batch duplicates:",{"type":47,"value":896},"\nFlag rows sharing the same ",{"type":41,"tag":92,"props":898,"children":900},{"className":899},[],[901],{"type":47,"value":902},"(identifier, parentPlatform)",{"type":47,"value":904}," pair. Mark both as errors.",{"type":41,"tag":50,"props":906,"children":907},{},[908],{"type":41,"tag":69,"props":909,"children":910},{},[911],{"type":47,"value":912},"Existing-wallet check against Tres (batches ≤ 200 wallets):",{"type":41,"tag":101,"props":914,"children":916},{"className":392,"code":915,"language":394,"meta":109,"style":109},"{\n  internalAccount(identifier_In: [\"addr1\", \"addr2\", ...]) {\n    results { id name identifier parentPlatform }\n  }\n}\n",[917],{"type":41,"tag":92,"props":918,"children":919},{"__ignoreMap":109},[920,928,936,945,954],{"type":41,"tag":133,"props":921,"children":922},{"class":401,"line":402},[923],{"type":41,"tag":133,"props":924,"children":925},{},[926],{"type":47,"value":927},"{\n",{"type":41,"tag":133,"props":929,"children":930},{"class":401,"line":411},[931],{"type":41,"tag":133,"props":932,"children":933},{},[934],{"type":47,"value":935},"  internalAccount(identifier_In: [\"addr1\", \"addr2\", ...]) {\n",{"type":41,"tag":133,"props":937,"children":939},{"class":401,"line":938},3,[940],{"type":41,"tag":133,"props":941,"children":942},{},[943],{"type":47,"value":944},"    results { id name identifier parentPlatform }\n",{"type":41,"tag":133,"props":946,"children":948},{"class":401,"line":947},4,[949],{"type":41,"tag":133,"props":950,"children":951},{},[952],{"type":47,"value":953},"  }\n",{"type":41,"tag":133,"props":955,"children":957},{"class":401,"line":956},5,[958],{"type":41,"tag":133,"props":959,"children":960},{},[961],{"type":47,"value":962},"}\n",{"type":41,"tag":50,"props":964,"children":965},{},[966,968],{"type":47,"value":967},"Build a lookup: ",{"type":41,"tag":92,"props":969,"children":971},{"className":970},[],[972],{"type":47,"value":973},"key = identifier.toLowerCase() + \"|\" + parentPlatform.toUpperCase()",{"type":41,"tag":113,"props":975,"children":976},{},[977,997],{"type":41,"tag":117,"props":978,"children":979},{},[980,982,987,989,995],{"type":47,"value":981},"Match → mark as ",{"type":41,"tag":69,"props":983,"children":984},{},[985],{"type":47,"value":986},"⚠️ warning",{"type":47,"value":988}," (yellow): ",{"type":41,"tag":92,"props":990,"children":992},{"className":991},[],[993],{"type":47,"value":994},"\"Exists (ID: XXXXX)\"",{"type":47,"value":996}," — API will update, not duplicate",{"type":41,"tag":117,"props":998,"children":999},{},[1000,1002],{"type":47,"value":1001},"Summary bar must show: ",{"type":41,"tag":92,"props":1003,"children":1005},{"className":1004},[],[1006],{"type":47,"value":1007},"X new | Y already exist | Z errors",{"type":41,"tag":50,"props":1009,"children":1010},{},[1011],{"type":47,"value":1012},"For batches > 200: skip the API check, show a note in the preview.",{"type":41,"tag":56,"props":1014,"children":1015},{},[],{"type":41,"tag":80,"props":1017,"children":1019},{"id":1018},"step-oc-5-show-text-preview",[1020],{"type":47,"value":1021},"Step OC-5 — Show Text Preview",{"type":41,"tag":60,"props":1023,"children":1024},{},[1025],{"type":41,"tag":50,"props":1026,"children":1027},{},[1028,1030,1035],{"type":47,"value":1029},"🚫 ",{"type":41,"tag":69,"props":1031,"children":1032},{},[1033],{"type":47,"value":1034},"HARD GATE:",{"type":47,"value":1036}," Do NOT render this preview until Step OC-4 (validation) AND the existing-wallet Tres API check are both fully complete. Showing the preview without the API check is a violation of this skill.",{"type":41,"tag":50,"props":1038,"children":1039},{},[1040,1044],{"type":41,"tag":69,"props":1041,"children":1042},{},[1043],{"type":47,"value":330},{"type":47,"value":1045}," Instead, present the wallet data as a clean markdown table in plain text so the user can review it:",{"type":41,"tag":101,"props":1047,"children":1050},{"className":1048,"code":1049,"language":47},[104],"| # | Name | Address | Network | Tags | Status |\n|---|------|---------|---------|------|--------|\n| 1 | Treasury Hot | 0xABCD...1234 | ETHEREUM | defi | ✅ New |\n| 2 | Cold Wallet | bc1q...xyz | BITCOIN | | ⚠️ Exists (ID: 12345) |\n| 3 | Bad Wallet | invalid-addr | SOLANA | | ❌ Invalid address |\n",[1051],{"type":41,"tag":92,"props":1052,"children":1053},{"__ignoreMap":109},[1054],{"type":47,"value":1049},{"type":41,"tag":113,"props":1056,"children":1057},{},[1058,1068,1082,1087,1099],{"type":41,"tag":117,"props":1059,"children":1060},{},[1061,1063],{"type":47,"value":1062},"Show a summary line: ",{"type":41,"tag":92,"props":1064,"children":1066},{"className":1065},[],[1067],{"type":47,"value":1007},{"type":41,"tag":117,"props":1069,"children":1070},{},[1071,1073],{"type":47,"value":1072},"List all errors below the table with row number and description:\n",{"type":41,"tag":101,"props":1074,"children":1077},{"className":1075,"code":1076,"language":47},[104],"Errors:\n- Row 3 (Bad Wallet): Invalid SOLANA address format\n",[1078],{"type":41,"tag":92,"props":1079,"children":1080},{"__ignoreMap":109},[1081],{"type":47,"value":1076},{"type":41,"tag":117,"props":1083,"children":1084},{},[1085],{"type":47,"value":1086},"If there are errors, tell the user to correct and re-paste the data before proceeding",{"type":41,"tag":117,"props":1088,"children":1089},{},[1090,1092,1097],{"type":47,"value":1091},"If there are only warnings (existing wallets), ask: \"Ready to upload? Existing wallets will be updated. Type ",{"type":41,"tag":69,"props":1093,"children":1094},{},[1095],{"type":47,"value":1096},"yes",{"type":47,"value":1098}," to confirm.\"",{"type":41,"tag":117,"props":1100,"children":1101},{},[1102,1104,1108],{"type":47,"value":1103},"If all rows are valid, ask: \"Ready to upload N wallets to Tres Finance. Type ",{"type":41,"tag":69,"props":1105,"children":1106},{},[1107],{"type":47,"value":1096},{"type":47,"value":1098},{"type":41,"tag":50,"props":1110,"children":1111},{},[1112],{"type":47,"value":1113},"When the user confirms → proceed to Step OC-6.",{"type":41,"tag":56,"props":1115,"children":1116},{},[],{"type":41,"tag":80,"props":1118,"children":1120},{"id":1119},"step-oc-6-final-confirmation",[1121],{"type":47,"value":1122},"Step OC-6 — Final Confirmation",{"type":41,"tag":50,"props":1124,"children":1125},{},[1126,1128,1134],{"type":47,"value":1127},"When Claude receives ",{"type":41,"tag":92,"props":1129,"children":1131},{"className":1130},[],[1132],{"type":47,"value":1133},"TRES_WALLET_UPLOAD_CONFIRMED:",{"type":47,"value":99},{"type":41,"tag":1136,"props":1137,"children":1138},"ol",{},[1139,1144,1158],{"type":41,"tag":117,"props":1140,"children":1141},{},[1142],{"type":47,"value":1143},"Parse the JSON payload",{"type":41,"tag":117,"props":1145,"children":1146},{},[1147,1149],{"type":47,"value":1148},"Present a plain-text summary:\n",{"type":41,"tag":101,"props":1150,"children":1153},{"className":1151,"code":1152,"language":47},[104],"About to upload N wallets to Tres Finance:\n- 3 ETHEREUM wallets\n- 2 SOLANA wallets\n- 1 TEZOS wallet (will update existing)\n\nShall I proceed?\n",[1154],{"type":41,"tag":92,"props":1155,"children":1156},{"__ignoreMap":109},[1157],{"type":47,"value":1152},{"type":41,"tag":117,"props":1159,"children":1160},{},[1161],{"type":47,"value":1162},"Wait for explicit user confirmation (\"yes\", \"confirm\", \"go ahead\")",{"type":41,"tag":56,"props":1164,"children":1165},{},[],{"type":41,"tag":80,"props":1167,"children":1169},{"id":1168},"step-oc-7-execute-batch-upload",[1170],{"type":47,"value":1171},"Step OC-7 — Execute Batch Upload",{"type":41,"tag":50,"props":1173,"children":1174},{},[1175,1177,1183],{"type":47,"value":1176},"Call ",{"type":41,"tag":92,"props":1178,"children":1180},{"className":1179},[],[1181],{"type":47,"value":1182},"updateBatchInternalAccounts",{"type":47,"value":1184}," via TRES MCP:",{"type":41,"tag":101,"props":1186,"children":1188},{"className":392,"code":1187,"language":394,"meta":109,"style":109},"mutation UpdateBatchInternalAccounts($internalAccounts: [InternalAccountInput]) {\n  updateBatchInternalAccounts(internalAccounts: $internalAccounts) {\n    internalAccounts {\n      id\n      name\n      identifier\n      parentPlatform\n      status\n    }\n    validationResults {\n      iaIdentifier\n      validationResult {\n        issueType\n        errorMessage\n      }\n    }\n  }\n}\n",[1189],{"type":41,"tag":92,"props":1190,"children":1191},{"__ignoreMap":109},[1192,1200,1208,1216,1224,1232,1241,1250,1259,1268,1277,1286,1295,1304,1313,1322,1330,1338],{"type":41,"tag":133,"props":1193,"children":1194},{"class":401,"line":402},[1195],{"type":41,"tag":133,"props":1196,"children":1197},{},[1198],{"type":47,"value":1199},"mutation UpdateBatchInternalAccounts($internalAccounts: [InternalAccountInput]) {\n",{"type":41,"tag":133,"props":1201,"children":1202},{"class":401,"line":411},[1203],{"type":41,"tag":133,"props":1204,"children":1205},{},[1206],{"type":47,"value":1207},"  updateBatchInternalAccounts(internalAccounts: $internalAccounts) {\n",{"type":41,"tag":133,"props":1209,"children":1210},{"class":401,"line":938},[1211],{"type":41,"tag":133,"props":1212,"children":1213},{},[1214],{"type":47,"value":1215},"    internalAccounts {\n",{"type":41,"tag":133,"props":1217,"children":1218},{"class":401,"line":947},[1219],{"type":41,"tag":133,"props":1220,"children":1221},{},[1222],{"type":47,"value":1223},"      id\n",{"type":41,"tag":133,"props":1225,"children":1226},{"class":401,"line":956},[1227],{"type":41,"tag":133,"props":1228,"children":1229},{},[1230],{"type":47,"value":1231},"      name\n",{"type":41,"tag":133,"props":1233,"children":1235},{"class":401,"line":1234},6,[1236],{"type":41,"tag":133,"props":1237,"children":1238},{},[1239],{"type":47,"value":1240},"      identifier\n",{"type":41,"tag":133,"props":1242,"children":1244},{"class":401,"line":1243},7,[1245],{"type":41,"tag":133,"props":1246,"children":1247},{},[1248],{"type":47,"value":1249},"      parentPlatform\n",{"type":41,"tag":133,"props":1251,"children":1253},{"class":401,"line":1252},8,[1254],{"type":41,"tag":133,"props":1255,"children":1256},{},[1257],{"type":47,"value":1258},"      status\n",{"type":41,"tag":133,"props":1260,"children":1262},{"class":401,"line":1261},9,[1263],{"type":41,"tag":133,"props":1264,"children":1265},{},[1266],{"type":47,"value":1267},"    }\n",{"type":41,"tag":133,"props":1269,"children":1271},{"class":401,"line":1270},10,[1272],{"type":41,"tag":133,"props":1273,"children":1274},{},[1275],{"type":47,"value":1276},"    validationResults {\n",{"type":41,"tag":133,"props":1278,"children":1280},{"class":401,"line":1279},11,[1281],{"type":41,"tag":133,"props":1282,"children":1283},{},[1284],{"type":47,"value":1285},"      iaIdentifier\n",{"type":41,"tag":133,"props":1287,"children":1289},{"class":401,"line":1288},12,[1290],{"type":41,"tag":133,"props":1291,"children":1292},{},[1293],{"type":47,"value":1294},"      validationResult {\n",{"type":41,"tag":133,"props":1296,"children":1298},{"class":401,"line":1297},13,[1299],{"type":41,"tag":133,"props":1300,"children":1301},{},[1302],{"type":47,"value":1303},"        issueType\n",{"type":41,"tag":133,"props":1305,"children":1307},{"class":401,"line":1306},14,[1308],{"type":41,"tag":133,"props":1309,"children":1310},{},[1311],{"type":47,"value":1312},"        errorMessage\n",{"type":41,"tag":133,"props":1314,"children":1316},{"class":401,"line":1315},15,[1317],{"type":41,"tag":133,"props":1318,"children":1319},{},[1320],{"type":47,"value":1321},"      }\n",{"type":41,"tag":133,"props":1323,"children":1325},{"class":401,"line":1324},16,[1326],{"type":41,"tag":133,"props":1327,"children":1328},{},[1329],{"type":47,"value":1267},{"type":41,"tag":133,"props":1331,"children":1333},{"class":401,"line":1332},17,[1334],{"type":41,"tag":133,"props":1335,"children":1336},{},[1337],{"type":47,"value":953},{"type":41,"tag":133,"props":1339,"children":1341},{"class":401,"line":1340},18,[1342],{"type":41,"tag":133,"props":1343,"children":1344},{},[1345],{"type":47,"value":962},{"type":41,"tag":50,"props":1347,"children":1348},{},[1349],{"type":47,"value":1350},"Variables per wallet:",{"type":41,"tag":101,"props":1352,"children":1356},{"className":1353,"code":1354,"language":1355,"meta":109,"style":109},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"name\": \"Treasury Hot\",\n  \"identifier\": \"0xABCD...\",\n  \"parentPlatform\": \"ETHEREUM\",\n  \"tags\": [\"defi\", \"treasury\"],\n  \"enforceCollectTransactions\": true\n}\n","json",[1357],{"type":41,"tag":92,"props":1358,"children":1359},{"__ignoreMap":109},[1360,1368,1410,1446,1482,1542,1567],{"type":41,"tag":133,"props":1361,"children":1362},{"class":401,"line":402},[1363],{"type":41,"tag":133,"props":1364,"children":1366},{"style":1365},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[1367],{"type":47,"value":927},{"type":41,"tag":133,"props":1369,"children":1370},{"class":401,"line":411},[1371,1376,1381,1386,1390,1395,1401,1405],{"type":41,"tag":133,"props":1372,"children":1373},{"style":1365},[1374],{"type":47,"value":1375},"  \"",{"type":41,"tag":133,"props":1377,"children":1379},{"style":1378},"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA",[1380],{"type":47,"value":250},{"type":41,"tag":133,"props":1382,"children":1383},{"style":1365},[1384],{"type":47,"value":1385},"\"",{"type":41,"tag":133,"props":1387,"children":1388},{"style":1365},[1389],{"type":47,"value":99},{"type":41,"tag":133,"props":1391,"children":1392},{"style":1365},[1393],{"type":47,"value":1394}," \"",{"type":41,"tag":133,"props":1396,"children":1398},{"style":1397},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[1399],{"type":47,"value":1400},"Treasury Hot",{"type":41,"tag":133,"props":1402,"children":1403},{"style":1365},[1404],{"type":47,"value":1385},{"type":41,"tag":133,"props":1406,"children":1407},{"style":1365},[1408],{"type":47,"value":1409},",\n",{"type":41,"tag":133,"props":1411,"children":1412},{"class":401,"line":938},[1413,1417,1421,1425,1429,1433,1438,1442],{"type":41,"tag":133,"props":1414,"children":1415},{"style":1365},[1416],{"type":47,"value":1375},{"type":41,"tag":133,"props":1418,"children":1419},{"style":1378},[1420],{"type":47,"value":266},{"type":41,"tag":133,"props":1422,"children":1423},{"style":1365},[1424],{"type":47,"value":1385},{"type":41,"tag":133,"props":1426,"children":1427},{"style":1365},[1428],{"type":47,"value":99},{"type":41,"tag":133,"props":1430,"children":1431},{"style":1365},[1432],{"type":47,"value":1394},{"type":41,"tag":133,"props":1434,"children":1435},{"style":1397},[1436],{"type":47,"value":1437},"0xABCD...",{"type":41,"tag":133,"props":1439,"children":1440},{"style":1365},[1441],{"type":47,"value":1385},{"type":41,"tag":133,"props":1443,"children":1444},{"style":1365},[1445],{"type":47,"value":1409},{"type":41,"tag":133,"props":1447,"children":1448},{"class":401,"line":947},[1449,1453,1457,1461,1465,1469,1474,1478],{"type":41,"tag":133,"props":1450,"children":1451},{"style":1365},[1452],{"type":47,"value":1375},{"type":41,"tag":133,"props":1454,"children":1455},{"style":1378},[1456],{"type":47,"value":538},{"type":41,"tag":133,"props":1458,"children":1459},{"style":1365},[1460],{"type":47,"value":1385},{"type":41,"tag":133,"props":1462,"children":1463},{"style":1365},[1464],{"type":47,"value":99},{"type":41,"tag":133,"props":1466,"children":1467},{"style":1365},[1468],{"type":47,"value":1394},{"type":41,"tag":133,"props":1470,"children":1471},{"style":1397},[1472],{"type":47,"value":1473},"ETHEREUM",{"type":41,"tag":133,"props":1475,"children":1476},{"style":1365},[1477],{"type":47,"value":1385},{"type":41,"tag":133,"props":1479,"children":1480},{"style":1365},[1481],{"type":47,"value":1409},{"type":41,"tag":133,"props":1483,"children":1484},{"class":401,"line":956},[1485,1489,1493,1497,1501,1506,1510,1515,1519,1524,1528,1533,1537],{"type":41,"tag":133,"props":1486,"children":1487},{"style":1365},[1488],{"type":47,"value":1375},{"type":41,"tag":133,"props":1490,"children":1491},{"style":1378},[1492],{"type":47,"value":288},{"type":41,"tag":133,"props":1494,"children":1495},{"style":1365},[1496],{"type":47,"value":1385},{"type":41,"tag":133,"props":1498,"children":1499},{"style":1365},[1500],{"type":47,"value":99},{"type":41,"tag":133,"props":1502,"children":1503},{"style":1365},[1504],{"type":47,"value":1505}," [",{"type":41,"tag":133,"props":1507,"children":1508},{"style":1365},[1509],{"type":47,"value":1385},{"type":41,"tag":133,"props":1511,"children":1512},{"style":1397},[1513],{"type":47,"value":1514},"defi",{"type":41,"tag":133,"props":1516,"children":1517},{"style":1365},[1518],{"type":47,"value":1385},{"type":41,"tag":133,"props":1520,"children":1521},{"style":1365},[1522],{"type":47,"value":1523},",",{"type":41,"tag":133,"props":1525,"children":1526},{"style":1365},[1527],{"type":47,"value":1394},{"type":41,"tag":133,"props":1529,"children":1530},{"style":1397},[1531],{"type":47,"value":1532},"treasury",{"type":41,"tag":133,"props":1534,"children":1535},{"style":1365},[1536],{"type":47,"value":1385},{"type":41,"tag":133,"props":1538,"children":1539},{"style":1365},[1540],{"type":47,"value":1541},"],\n",{"type":41,"tag":133,"props":1543,"children":1544},{"class":401,"line":1234},[1545,1549,1554,1558,1562],{"type":41,"tag":133,"props":1546,"children":1547},{"style":1365},[1548],{"type":47,"value":1375},{"type":41,"tag":133,"props":1550,"children":1551},{"style":1378},[1552],{"type":47,"value":1553},"enforceCollectTransactions",{"type":41,"tag":133,"props":1555,"children":1556},{"style":1365},[1557],{"type":47,"value":1385},{"type":41,"tag":133,"props":1559,"children":1560},{"style":1365},[1561],{"type":47,"value":99},{"type":41,"tag":133,"props":1563,"children":1564},{"style":1365},[1565],{"type":47,"value":1566}," true\n",{"type":41,"tag":133,"props":1568,"children":1569},{"class":401,"line":1243},[1570],{"type":41,"tag":133,"props":1571,"children":1572},{"style":1365},[1573],{"type":47,"value":962},{"type":41,"tag":50,"props":1575,"children":1576},{},[1577,1579,1585],{"type":47,"value":1578},"Note: ",{"type":41,"tag":92,"props":1580,"children":1582},{"className":1581},[],[1583],{"type":47,"value":1584},"platformKeys",{"type":47,"value":1586}," is not included for on-chain wallets.",{"type":41,"tag":215,"props":1588,"children":1590},{"id":1589},"chunking",[1591],{"type":47,"value":1592},"Chunking",{"type":41,"tag":50,"props":1594,"children":1595},{},[1596],{"type":47,"value":1597},"If batch > 100 wallets, split into chunks of 50 and call sequentially.",{"type":41,"tag":215,"props":1599,"children":1601},{"id":1600},"result-handling",[1602],{"type":47,"value":1603},"Result handling",{"type":41,"tag":113,"props":1605,"children":1606},{},[1607,1636,1641],{"type":41,"tag":117,"props":1608,"children":1609},{},[1610,1612,1618,1620,1626,1628,1634],{"type":47,"value":1611},"Parse ",{"type":41,"tag":92,"props":1613,"children":1615},{"className":1614},[],[1616],{"type":47,"value":1617},"validationResults",{"type":47,"value":1619}," — surface any ",{"type":41,"tag":92,"props":1621,"children":1623},{"className":1622},[],[1624],{"type":47,"value":1625},"issueType",{"type":47,"value":1627}," \u002F ",{"type":41,"tag":92,"props":1629,"children":1631},{"className":1630},[],[1632],{"type":47,"value":1633},"errorMessage",{"type":47,"value":1635}," to the user",{"type":41,"tag":117,"props":1637,"children":1638},{},[1639],{"type":47,"value":1640},"Show success count and any failures",{"type":41,"tag":117,"props":1642,"children":1643},{},[1644],{"type":47,"value":1645},"For failures, offer to retry just the failed wallets",{"type":41,"tag":56,"props":1647,"children":1648},{},[],{"type":41,"tag":56,"props":1650,"children":1651},{},[],{"type":41,"tag":42,"props":1653,"children":1655},{"id":1654},"exchange-flow",[1656],{"type":47,"value":157},{"type":41,"tag":56,"props":1658,"children":1659},{},[],{"type":41,"tag":80,"props":1661,"children":1663},{"id":1662},"step-ex-1-introduction-guide",[1664],{"type":47,"value":1665},"Step EX-1 — Introduction & Guide",{"type":41,"tag":50,"props":1667,"children":1668},{},[1669],{"type":47,"value":1670},"Show the user the integration guide link:",{"type":41,"tag":60,"props":1672,"children":1673},{},[1674],{"type":41,"tag":50,"props":1675,"children":1676},{},[1677,1679,1684,1686],{"type":47,"value":1678},"Before connecting an exchange, please review the ",{"type":41,"tag":69,"props":1680,"children":1681},{},[1682],{"type":47,"value":1683},"Tres Finance Exchange Integration Guide",{"type":47,"value":1685},":\n👉 ",{"type":41,"tag":1687,"props":1688,"children":1692},"a",{"href":1689,"rel":1690},"https:\u002F\u002Fhelp.tres.finance\u002Farticle\u002Fintegrating-your-exchange-accounts-with-tres-finance",[1691],"nofollow",[1693],{"type":47,"value":1689},{"type":41,"tag":50,"props":1695,"children":1696},{},[1697,1699,1704],{"type":47,"value":1698},"Then fetch the ",{"type":41,"tag":69,"props":1700,"children":1701},{},[1702],{"type":47,"value":1703},"live validated exchange list",{"type":47,"value":1705}," from TRES MCP — never hardcode it:",{"type":41,"tag":101,"props":1707,"children":1709},{"className":392,"code":1708,"language":394,"meta":109,"style":109},"query GetAllValidatedExchanges {\n  ledgerFilters {\n    allValidatedExchanges {\n      id\n      displayName\n    }\n  }\n}\n",[1710],{"type":41,"tag":92,"props":1711,"children":1712},{"__ignoreMap":109},[1713,1721,1729,1737,1744,1752,1759,1766],{"type":41,"tag":133,"props":1714,"children":1715},{"class":401,"line":402},[1716],{"type":41,"tag":133,"props":1717,"children":1718},{},[1719],{"type":47,"value":1720},"query GetAllValidatedExchanges {\n",{"type":41,"tag":133,"props":1722,"children":1723},{"class":401,"line":411},[1724],{"type":41,"tag":133,"props":1725,"children":1726},{},[1727],{"type":47,"value":1728},"  ledgerFilters {\n",{"type":41,"tag":133,"props":1730,"children":1731},{"class":401,"line":938},[1732],{"type":41,"tag":133,"props":1733,"children":1734},{},[1735],{"type":47,"value":1736},"    allValidatedExchanges {\n",{"type":41,"tag":133,"props":1738,"children":1739},{"class":401,"line":947},[1740],{"type":41,"tag":133,"props":1741,"children":1742},{},[1743],{"type":47,"value":1223},{"type":41,"tag":133,"props":1745,"children":1746},{"class":401,"line":956},[1747],{"type":41,"tag":133,"props":1748,"children":1749},{},[1750],{"type":47,"value":1751},"      displayName\n",{"type":41,"tag":133,"props":1753,"children":1754},{"class":401,"line":1234},[1755],{"type":41,"tag":133,"props":1756,"children":1757},{},[1758],{"type":47,"value":1267},{"type":41,"tag":133,"props":1760,"children":1761},{"class":401,"line":1243},[1762],{"type":41,"tag":133,"props":1763,"children":1764},{},[1765],{"type":47,"value":953},{"type":41,"tag":133,"props":1767,"children":1768},{"class":401,"line":1252},[1769],{"type":41,"tag":133,"props":1770,"children":1771},{},[1772],{"type":47,"value":962},{"type":41,"tag":50,"props":1774,"children":1775},{},[1776,1778,1784,1786,1792,1794,1799,1801,1807],{"type":47,"value":1777},"This returns the authoritative list of supported exchanges (47 as of writing, but always fetch live). Sort A-Z by ",{"type":41,"tag":92,"props":1779,"children":1781},{"className":1780},[],[1782],{"type":47,"value":1783},"displayName",{"type":47,"value":1785},". Present as a native ",{"type":41,"tag":92,"props":1787,"children":1789},{"className":1788},[],[1790],{"type":47,"value":1791},"\u003Cselect>",{"type":47,"value":1793}," dropdown using ",{"type":41,"tag":92,"props":1795,"children":1797},{"className":1796},[],[1798],{"type":47,"value":97},{"type":47,"value":1800}," or inline in a ",{"type":41,"tag":92,"props":1802,"children":1804},{"className":1803},[],[1805],{"type":47,"value":1806},"show_widget",{"type":47,"value":1808}," form, mirroring the Tres UI with a \"Connection Guidelines ↗\" link alongside the label.",{"type":41,"tag":56,"props":1810,"children":1811},{},[],{"type":41,"tag":80,"props":1813,"children":1815},{"id":1814},"step-ex-2-fetch-required-fields-for-the-selected-exchange",[1816],{"type":47,"value":1817},"Step EX-2 — Fetch Required Fields for the Selected Exchange",{"type":41,"tag":50,"props":1819,"children":1820},{},[1821,1823],{"type":47,"value":1822},"Once the user selects an exchange, fetch its credential fields. ",{"type":41,"tag":69,"props":1824,"children":1825},{},[1826,1828,1834,1836,1842],{"type":47,"value":1827},"Use the ",{"type":41,"tag":92,"props":1829,"children":1831},{"className":1830},[],[1832],{"type":47,"value":1833},"id",{"type":47,"value":1835}," value (lowercase) as the ",{"type":41,"tag":92,"props":1837,"children":1839},{"className":1838},[],[1840],{"type":47,"value":1841},"exchangeName",{"type":47,"value":99},{"type":41,"tag":101,"props":1844,"children":1846},{"className":392,"code":1845,"language":394,"meta":109,"style":109},"query ExchangeRequiredFields {\n  exchangeRequiredFields {\n    requiredFields(exchangeName: \"\u003Cexchange_id_lowercase>\") {\n      name\n      type\n      description\n      mapping\n    }\n  }\n}\n",[1847],{"type":41,"tag":92,"props":1848,"children":1849},{"__ignoreMap":109},[1850,1858,1866,1874,1881,1889,1897,1905,1912,1919],{"type":41,"tag":133,"props":1851,"children":1852},{"class":401,"line":402},[1853],{"type":41,"tag":133,"props":1854,"children":1855},{},[1856],{"type":47,"value":1857},"query ExchangeRequiredFields {\n",{"type":41,"tag":133,"props":1859,"children":1860},{"class":401,"line":411},[1861],{"type":41,"tag":133,"props":1862,"children":1863},{},[1864],{"type":47,"value":1865},"  exchangeRequiredFields {\n",{"type":41,"tag":133,"props":1867,"children":1868},{"class":401,"line":938},[1869],{"type":41,"tag":133,"props":1870,"children":1871},{},[1872],{"type":47,"value":1873},"    requiredFields(exchangeName: \"\u003Cexchange_id_lowercase>\") {\n",{"type":41,"tag":133,"props":1875,"children":1876},{"class":401,"line":947},[1877],{"type":41,"tag":133,"props":1878,"children":1879},{},[1880],{"type":47,"value":1231},{"type":41,"tag":133,"props":1882,"children":1883},{"class":401,"line":956},[1884],{"type":41,"tag":133,"props":1885,"children":1886},{},[1887],{"type":47,"value":1888},"      type\n",{"type":41,"tag":133,"props":1890,"children":1891},{"class":401,"line":1234},[1892],{"type":41,"tag":133,"props":1893,"children":1894},{},[1895],{"type":47,"value":1896},"      description\n",{"type":41,"tag":133,"props":1898,"children":1899},{"class":401,"line":1243},[1900],{"type":41,"tag":133,"props":1901,"children":1902},{},[1903],{"type":47,"value":1904},"      mapping\n",{"type":41,"tag":133,"props":1906,"children":1907},{"class":401,"line":1252},[1908],{"type":41,"tag":133,"props":1909,"children":1910},{},[1911],{"type":47,"value":1267},{"type":41,"tag":133,"props":1913,"children":1914},{"class":401,"line":1261},[1915],{"type":41,"tag":133,"props":1916,"children":1917},{},[1918],{"type":47,"value":953},{"type":41,"tag":133,"props":1920,"children":1921},{"class":401,"line":1270},[1922],{"type":41,"tag":133,"props":1923,"children":1924},{},[1925],{"type":47,"value":962},{"type":41,"tag":50,"props":1927,"children":1928},{},[1929,1934,1936,1942,1944,1950],{"type":41,"tag":69,"props":1930,"children":1931},{},[1932],{"type":47,"value":1933},"Important:",{"type":47,"value":1935}," Skip any field where ",{"type":41,"tag":92,"props":1937,"children":1939},{"className":1938},[],[1940],{"type":47,"value":1941},"mapping",{"type":47,"value":1943}," starts with ",{"type":41,"tag":92,"props":1945,"children":1947},{"className":1946},[],[1948],{"type":47,"value":1949},"https:\u002F\u002F",{"type":47,"value":1951}," — these are integration guide links, not credential inputs. Show them as a clickable link instead.",{"type":41,"tag":50,"props":1953,"children":1954},{},[1955],{"type":47,"value":1956},"Store the remaining fields. Each field has:",{"type":41,"tag":113,"props":1958,"children":1959},{},[1960,1970,1980,2005],{"type":41,"tag":117,"props":1961,"children":1962},{},[1963,1968],{"type":41,"tag":92,"props":1964,"children":1966},{"className":1965},[],[1967],{"type":47,"value":250},{"type":47,"value":1969}," — the credential field key",{"type":41,"tag":117,"props":1971,"children":1972},{},[1973,1978],{"type":41,"tag":92,"props":1974,"children":1976},{"className":1975},[],[1977],{"type":47,"value":296},{"type":47,"value":1979}," — the human-readable label to show the user",{"type":41,"tag":117,"props":1981,"children":1982},{},[1983,1988,1990,1995,1997,2003],{"type":41,"tag":92,"props":1984,"children":1986},{"className":1985},[],[1987],{"type":47,"value":1941},{"type":47,"value":1989}," — the key used when constructing ",{"type":41,"tag":92,"props":1991,"children":1993},{"className":1992},[],[1994],{"type":47,"value":1584},{"type":47,"value":1996}," (e.g. ",{"type":41,"tag":92,"props":1998,"children":2000},{"className":1999},[],[2001],{"type":47,"value":2002},"platform_keys.api_key",{"type":47,"value":2004},")",{"type":41,"tag":117,"props":2006,"children":2007},{},[2008,2014],{"type":41,"tag":92,"props":2009,"children":2011},{"className":2010},[],[2012],{"type":47,"value":2013},"type",{"type":47,"value":2015}," — use to determine input type",{"type":41,"tag":56,"props":2017,"children":2018},{},[],{"type":41,"tag":80,"props":2020,"children":2022},{"id":2021},"step-ex-3-collect-exchange-credentials-conversational",[2023],{"type":47,"value":2024},"Step EX-3 — Collect Exchange Credentials (Conversational)",{"type":41,"tag":50,"props":2026,"children":2027},{},[2028,2032],{"type":41,"tag":69,"props":2029,"children":2030},{},[2031],{"type":47,"value":330},{"type":47,"value":2033}," Instead, ask the user for credentials in plain conversational steps.",{"type":41,"tag":50,"props":2035,"children":2036},{},[2037],{"type":47,"value":2038},"First, show the integration guide link:",{"type":41,"tag":60,"props":2040,"children":2041},{},[2042],{"type":41,"tag":50,"props":2043,"children":2044},{},[2045,2047],{"type":47,"value":2046},"📖 Before connecting, review the guide: ",{"type":41,"tag":1687,"props":2048,"children":2050},{"href":1689,"rel":2049},[1691],[2051],{"type":47,"value":1689},{"type":41,"tag":50,"props":2053,"children":2054},{},[2055],{"type":47,"value":2056},"Then ask for the fields one by one (or all at once in a single prompt), clearly listing what is needed:",{"type":41,"tag":101,"props":2058,"children":2061},{"className":2059,"code":2060,"language":47},[104],"To connect \u003CExchange Name>, I need the following:\n\n**Account Name** (required) — a friendly name for this account in Tres\n**API Key** (required)\n**API Secret** (required, will be stored securely)\n**Tags** (optional) — comma-separated tags\n\nPlease provide these values. Keep API secrets private — do not share them in public channels.\n",[2062],{"type":41,"tag":92,"props":2063,"children":2064},{"__ignoreMap":109},[2065],{"type":47,"value":2060},{"type":41,"tag":113,"props":2067,"children":2068},{},[2069,2082,2093],{"type":41,"tag":117,"props":2070,"children":2071},{},[2072,2074,2080],{"type":47,"value":2073},"For fields where ",{"type":41,"tag":92,"props":2075,"children":2077},{"className":2076},[],[2078],{"type":47,"value":2079},"field.name",{"type":47,"value":2081}," contains \"secret\", \"private\", \"signing\", or \"passphrase\" — note they will be stored securely",{"type":41,"tag":117,"props":2083,"children":2084},{},[2085,2087],{"type":47,"value":2086},"For optional fields (e.g. OKX sub-account), label them clearly as ",{"type":41,"tag":92,"props":2088,"children":2090},{"className":2089},[],[2091],{"type":47,"value":2092},"(optional)",{"type":41,"tag":117,"props":2094,"children":2095},{},[2096,2098,2103,2104,2109],{"type":47,"value":2097},"Skip any field where ",{"type":41,"tag":92,"props":2099,"children":2101},{"className":2100},[],[2102],{"type":47,"value":1941},{"type":47,"value":1943},{"type":41,"tag":92,"props":2105,"children":2107},{"className":2106},[],[2108],{"type":47,"value":1949},{"type":47,"value":2110}," — show it as a link instead",{"type":41,"tag":215,"props":2112,"children":2114},{"id":2113},"mandatory-confirmations-ask-as-yesno-questions-before-proceeding",[2115],{"type":47,"value":2116},"Mandatory confirmations (ask as yes\u002Fno questions before proceeding)",{"type":41,"tag":50,"props":2118,"children":2119},{},[2120],{"type":47,"value":2121},"Before accepting the credentials, ask:",{"type":41,"tag":1136,"props":2123,"children":2124},{},[2125,2137],{"type":41,"tag":117,"props":2126,"children":2127},{},[2128,2130,2135],{"type":47,"value":2129},"\"Do you confirm the API key has ",{"type":41,"tag":69,"props":2131,"children":2132},{},[2133],{"type":47,"value":2134},"read-only permissions",{"type":47,"value":2136},"? (yes\u002Fno)\"",{"type":41,"tag":117,"props":2138,"children":2139},{},[2140,2142,2147],{"type":47,"value":2141},"\"Do you agree to the ",{"type":41,"tag":69,"props":2143,"children":2144},{},[2145],{"type":47,"value":2146},"Tres Finance Terms of Service",{"type":47,"value":2136},{"type":41,"tag":50,"props":2149,"children":2150},{},[2151],{"type":47,"value":2152},"Only proceed once both are confirmed.",{"type":41,"tag":50,"props":2154,"children":2155},{},[2156],{"type":47,"value":2157},"Once all credentials and confirmations are collected, store them in the queue format and proceed to Step EX-4.",{"type":41,"tag":56,"props":2159,"children":2160},{},[],{"type":41,"tag":80,"props":2162,"children":2164},{"id":2163},"step-ex-4-accumulate-exchange-accounts",[2165],{"type":47,"value":2166},"Step EX-4 — Accumulate Exchange Accounts",{"type":41,"tag":50,"props":2168,"children":2169},{},[2170],{"type":47,"value":2171},"After collecting credentials for an exchange:",{"type":41,"tag":1136,"props":2173,"children":2174},{},[2175,2180,2191,2205],{"type":41,"tag":117,"props":2176,"children":2177},{},[2178],{"type":47,"value":2179},"Parse and store the account data in a pending queue",{"type":41,"tag":117,"props":2181,"children":2182},{},[2183,2185],{"type":47,"value":2184},"Confirm: ",{"type":41,"tag":92,"props":2186,"children":2188},{"className":2187},[],[2189],{"type":47,"value":2190},"✅ \u003CaccountName> (\u003Cexchange>) added to queue",{"type":41,"tag":117,"props":2192,"children":2193},{},[2194,2196],{"type":47,"value":2195},"Display the running queue as a brief list:\n",{"type":41,"tag":101,"props":2197,"children":2200},{"className":2198,"code":2199,"language":47},[104],"Queued accounts:\n1. My Binance Account (BINANCE_EXCHANGE)\n",[2201],{"type":41,"tag":92,"props":2202,"children":2203},{"__ignoreMap":109},[2204],{"type":47,"value":2199},{"type":41,"tag":117,"props":2206,"children":2207},{},[2208,2210,2215,2216,2221],{"type":47,"value":2209},"Ask: \"Would you like to ",{"type":41,"tag":69,"props":2211,"children":2212},{},[2213],{"type":47,"value":2214},"add another exchange",{"type":47,"value":840},{"type":41,"tag":69,"props":2217,"children":2218},{},[2219],{"type":47,"value":2220},"proceed to upload",{"type":47,"value":2222},"?\"",{"type":41,"tag":50,"props":2224,"children":2225},{},[2226,2228,2233,2235,2240],{"type":47,"value":2227},"If user wants to add another → loop back to ",{"type":41,"tag":69,"props":2229,"children":2230},{},[2231],{"type":47,"value":2232},"Step EX-1",{"type":47,"value":2234}," (queued accounts are preserved).\nIf user wants to proceed → go to ",{"type":41,"tag":69,"props":2236,"children":2237},{},[2238],{"type":47,"value":2239},"Step EX-5",{"type":47,"value":2241},".",{"type":41,"tag":56,"props":2243,"children":2244},{},[],{"type":41,"tag":80,"props":2246,"children":2248},{"id":2247},"step-ex-5-final-review-confirmation",[2249],{"type":47,"value":2250},"Step EX-5 — Final Review & Confirmation",{"type":41,"tag":50,"props":2252,"children":2253},{},[2254],{"type":47,"value":2255},"Present a plain-text summary of all queued accounts:",{"type":41,"tag":101,"props":2257,"children":2260},{"className":2258,"code":2259,"language":47},[104],"Ready to connect the following exchange accounts to Tres Finance:\n\n1. My Binance Account (BINANCE_EXCHANGE)\n2. Kraken Main (KRAKEN)\n\nShall I proceed?\n",[2261],{"type":41,"tag":92,"props":2262,"children":2263},{"__ignoreMap":109},[2264],{"type":47,"value":2259},{"type":41,"tag":50,"props":2266,"children":2267},{},[2268],{"type":47,"value":2269},"Wait for explicit user confirmation (\"yes\", \"confirm\", \"go ahead\", etc.)",{"type":41,"tag":56,"props":2271,"children":2272},{},[],{"type":41,"tag":80,"props":2274,"children":2276},{"id":2275},"step-ex-6-execute-exchange-account-creation",[2277],{"type":47,"value":2278},"Step EX-6 — Execute Exchange Account Creation",{"type":41,"tag":50,"props":2280,"children":2281},{},[2282,2283,2288],{"type":47,"value":1176},{"type":41,"tag":92,"props":2284,"children":2286},{"className":2285},[],[2287],{"type":47,"value":1182},{"type":47,"value":2289}," via TRES MCP for all queued accounts:",{"type":41,"tag":101,"props":2291,"children":2292},{"className":392,"code":1187,"language":394,"meta":109,"style":109},[2293],{"type":41,"tag":92,"props":2294,"children":2295},{"__ignoreMap":109},[2296,2303,2310,2317,2324,2331,2338,2345,2352,2359,2366,2373,2380,2387,2394,2401,2408,2415],{"type":41,"tag":133,"props":2297,"children":2298},{"class":401,"line":402},[2299],{"type":41,"tag":133,"props":2300,"children":2301},{},[2302],{"type":47,"value":1199},{"type":41,"tag":133,"props":2304,"children":2305},{"class":401,"line":411},[2306],{"type":41,"tag":133,"props":2307,"children":2308},{},[2309],{"type":47,"value":1207},{"type":41,"tag":133,"props":2311,"children":2312},{"class":401,"line":938},[2313],{"type":41,"tag":133,"props":2314,"children":2315},{},[2316],{"type":47,"value":1215},{"type":41,"tag":133,"props":2318,"children":2319},{"class":401,"line":947},[2320],{"type":41,"tag":133,"props":2321,"children":2322},{},[2323],{"type":47,"value":1223},{"type":41,"tag":133,"props":2325,"children":2326},{"class":401,"line":956},[2327],{"type":41,"tag":133,"props":2328,"children":2329},{},[2330],{"type":47,"value":1231},{"type":41,"tag":133,"props":2332,"children":2333},{"class":401,"line":1234},[2334],{"type":41,"tag":133,"props":2335,"children":2336},{},[2337],{"type":47,"value":1240},{"type":41,"tag":133,"props":2339,"children":2340},{"class":401,"line":1243},[2341],{"type":41,"tag":133,"props":2342,"children":2343},{},[2344],{"type":47,"value":1249},{"type":41,"tag":133,"props":2346,"children":2347},{"class":401,"line":1252},[2348],{"type":41,"tag":133,"props":2349,"children":2350},{},[2351],{"type":47,"value":1258},{"type":41,"tag":133,"props":2353,"children":2354},{"class":401,"line":1261},[2355],{"type":41,"tag":133,"props":2356,"children":2357},{},[2358],{"type":47,"value":1267},{"type":41,"tag":133,"props":2360,"children":2361},{"class":401,"line":1270},[2362],{"type":41,"tag":133,"props":2363,"children":2364},{},[2365],{"type":47,"value":1276},{"type":41,"tag":133,"props":2367,"children":2368},{"class":401,"line":1279},[2369],{"type":41,"tag":133,"props":2370,"children":2371},{},[2372],{"type":47,"value":1285},{"type":41,"tag":133,"props":2374,"children":2375},{"class":401,"line":1288},[2376],{"type":41,"tag":133,"props":2377,"children":2378},{},[2379],{"type":47,"value":1294},{"type":41,"tag":133,"props":2381,"children":2382},{"class":401,"line":1297},[2383],{"type":41,"tag":133,"props":2384,"children":2385},{},[2386],{"type":47,"value":1303},{"type":41,"tag":133,"props":2388,"children":2389},{"class":401,"line":1306},[2390],{"type":41,"tag":133,"props":2391,"children":2392},{},[2393],{"type":47,"value":1312},{"type":41,"tag":133,"props":2395,"children":2396},{"class":401,"line":1315},[2397],{"type":41,"tag":133,"props":2398,"children":2399},{},[2400],{"type":47,"value":1321},{"type":41,"tag":133,"props":2402,"children":2403},{"class":401,"line":1324},[2404],{"type":41,"tag":133,"props":2405,"children":2406},{},[2407],{"type":47,"value":1267},{"type":41,"tag":133,"props":2409,"children":2410},{"class":401,"line":1332},[2411],{"type":41,"tag":133,"props":2412,"children":2413},{},[2414],{"type":47,"value":953},{"type":41,"tag":133,"props":2416,"children":2417},{"class":401,"line":1340},[2418],{"type":41,"tag":133,"props":2419,"children":2420},{},[2421],{"type":47,"value":962},{"type":41,"tag":50,"props":2423,"children":2424},{},[2425],{"type":47,"value":2426},"Variables per exchange account:",{"type":41,"tag":101,"props":2428,"children":2430},{"className":1353,"code":2429,"language":1355,"meta":109,"style":109},"{\n  \"name\": \"\u003CaccountName>\",\n  \"identifier\": \"\u003CaccountName>\",\n  \"parentPlatform\": \"\u003CEXCHANGE_ID_UPPERCASE>\",\n  \"tags\": [\"\u003Ctag1>\"],\n  \"enforceCollectTransactions\": true,\n  \"platformKeys\": \"{\\\"api_key\\\": \\\"...\\\", \\\"api_secret\\\": \\\"...\\\"}\"\n}\n",[2431],{"type":41,"tag":92,"props":2432,"children":2433},{"__ignoreMap":109},[2434,2441,2477,2512,2548,2588,2612,2716],{"type":41,"tag":133,"props":2435,"children":2436},{"class":401,"line":402},[2437],{"type":41,"tag":133,"props":2438,"children":2439},{"style":1365},[2440],{"type":47,"value":927},{"type":41,"tag":133,"props":2442,"children":2443},{"class":401,"line":411},[2444,2448,2452,2456,2460,2464,2469,2473],{"type":41,"tag":133,"props":2445,"children":2446},{"style":1365},[2447],{"type":47,"value":1375},{"type":41,"tag":133,"props":2449,"children":2450},{"style":1378},[2451],{"type":47,"value":250},{"type":41,"tag":133,"props":2453,"children":2454},{"style":1365},[2455],{"type":47,"value":1385},{"type":41,"tag":133,"props":2457,"children":2458},{"style":1365},[2459],{"type":47,"value":99},{"type":41,"tag":133,"props":2461,"children":2462},{"style":1365},[2463],{"type":47,"value":1394},{"type":41,"tag":133,"props":2465,"children":2466},{"style":1397},[2467],{"type":47,"value":2468},"\u003CaccountName>",{"type":41,"tag":133,"props":2470,"children":2471},{"style":1365},[2472],{"type":47,"value":1385},{"type":41,"tag":133,"props":2474,"children":2475},{"style":1365},[2476],{"type":47,"value":1409},{"type":41,"tag":133,"props":2478,"children":2479},{"class":401,"line":938},[2480,2484,2488,2492,2496,2500,2504,2508],{"type":41,"tag":133,"props":2481,"children":2482},{"style":1365},[2483],{"type":47,"value":1375},{"type":41,"tag":133,"props":2485,"children":2486},{"style":1378},[2487],{"type":47,"value":266},{"type":41,"tag":133,"props":2489,"children":2490},{"style":1365},[2491],{"type":47,"value":1385},{"type":41,"tag":133,"props":2493,"children":2494},{"style":1365},[2495],{"type":47,"value":99},{"type":41,"tag":133,"props":2497,"children":2498},{"style":1365},[2499],{"type":47,"value":1394},{"type":41,"tag":133,"props":2501,"children":2502},{"style":1397},[2503],{"type":47,"value":2468},{"type":41,"tag":133,"props":2505,"children":2506},{"style":1365},[2507],{"type":47,"value":1385},{"type":41,"tag":133,"props":2509,"children":2510},{"style":1365},[2511],{"type":47,"value":1409},{"type":41,"tag":133,"props":2513,"children":2514},{"class":401,"line":947},[2515,2519,2523,2527,2531,2535,2540,2544],{"type":41,"tag":133,"props":2516,"children":2517},{"style":1365},[2518],{"type":47,"value":1375},{"type":41,"tag":133,"props":2520,"children":2521},{"style":1378},[2522],{"type":47,"value":538},{"type":41,"tag":133,"props":2524,"children":2525},{"style":1365},[2526],{"type":47,"value":1385},{"type":41,"tag":133,"props":2528,"children":2529},{"style":1365},[2530],{"type":47,"value":99},{"type":41,"tag":133,"props":2532,"children":2533},{"style":1365},[2534],{"type":47,"value":1394},{"type":41,"tag":133,"props":2536,"children":2537},{"style":1397},[2538],{"type":47,"value":2539},"\u003CEXCHANGE_ID_UPPERCASE>",{"type":41,"tag":133,"props":2541,"children":2542},{"style":1365},[2543],{"type":47,"value":1385},{"type":41,"tag":133,"props":2545,"children":2546},{"style":1365},[2547],{"type":47,"value":1409},{"type":41,"tag":133,"props":2549,"children":2550},{"class":401,"line":956},[2551,2555,2559,2563,2567,2571,2575,2580,2584],{"type":41,"tag":133,"props":2552,"children":2553},{"style":1365},[2554],{"type":47,"value":1375},{"type":41,"tag":133,"props":2556,"children":2557},{"style":1378},[2558],{"type":47,"value":288},{"type":41,"tag":133,"props":2560,"children":2561},{"style":1365},[2562],{"type":47,"value":1385},{"type":41,"tag":133,"props":2564,"children":2565},{"style":1365},[2566],{"type":47,"value":99},{"type":41,"tag":133,"props":2568,"children":2569},{"style":1365},[2570],{"type":47,"value":1505},{"type":41,"tag":133,"props":2572,"children":2573},{"style":1365},[2574],{"type":47,"value":1385},{"type":41,"tag":133,"props":2576,"children":2577},{"style":1397},[2578],{"type":47,"value":2579},"\u003Ctag1>",{"type":41,"tag":133,"props":2581,"children":2582},{"style":1365},[2583],{"type":47,"value":1385},{"type":41,"tag":133,"props":2585,"children":2586},{"style":1365},[2587],{"type":47,"value":1541},{"type":41,"tag":133,"props":2589,"children":2590},{"class":401,"line":1234},[2591,2595,2599,2603,2607],{"type":41,"tag":133,"props":2592,"children":2593},{"style":1365},[2594],{"type":47,"value":1375},{"type":41,"tag":133,"props":2596,"children":2597},{"style":1378},[2598],{"type":47,"value":1553},{"type":41,"tag":133,"props":2600,"children":2601},{"style":1365},[2602],{"type":47,"value":1385},{"type":41,"tag":133,"props":2604,"children":2605},{"style":1365},[2606],{"type":47,"value":99},{"type":41,"tag":133,"props":2608,"children":2609},{"style":1365},[2610],{"type":47,"value":2611}," true,\n",{"type":41,"tag":133,"props":2613,"children":2614},{"class":401,"line":1243},[2615,2619,2623,2627,2631,2635,2640,2646,2651,2655,2660,2664,2669,2673,2677,2681,2686,2690,2694,2698,2702,2706,2711],{"type":41,"tag":133,"props":2616,"children":2617},{"style":1365},[2618],{"type":47,"value":1375},{"type":41,"tag":133,"props":2620,"children":2621},{"style":1378},[2622],{"type":47,"value":1584},{"type":41,"tag":133,"props":2624,"children":2625},{"style":1365},[2626],{"type":47,"value":1385},{"type":41,"tag":133,"props":2628,"children":2629},{"style":1365},[2630],{"type":47,"value":99},{"type":41,"tag":133,"props":2632,"children":2633},{"style":1365},[2634],{"type":47,"value":1394},{"type":41,"tag":133,"props":2636,"children":2637},{"style":1397},[2638],{"type":47,"value":2639},"{",{"type":41,"tag":133,"props":2641,"children":2643},{"style":2642},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[2644],{"type":47,"value":2645},"\\\"",{"type":41,"tag":133,"props":2647,"children":2648},{"style":1397},[2649],{"type":47,"value":2650},"api_key",{"type":41,"tag":133,"props":2652,"children":2653},{"style":2642},[2654],{"type":47,"value":2645},{"type":41,"tag":133,"props":2656,"children":2657},{"style":1397},[2658],{"type":47,"value":2659},": ",{"type":41,"tag":133,"props":2661,"children":2662},{"style":2642},[2663],{"type":47,"value":2645},{"type":41,"tag":133,"props":2665,"children":2666},{"style":1397},[2667],{"type":47,"value":2668},"...",{"type":41,"tag":133,"props":2670,"children":2671},{"style":2642},[2672],{"type":47,"value":2645},{"type":41,"tag":133,"props":2674,"children":2675},{"style":1397},[2676],{"type":47,"value":252},{"type":41,"tag":133,"props":2678,"children":2679},{"style":2642},[2680],{"type":47,"value":2645},{"type":41,"tag":133,"props":2682,"children":2683},{"style":1397},[2684],{"type":47,"value":2685},"api_secret",{"type":41,"tag":133,"props":2687,"children":2688},{"style":2642},[2689],{"type":47,"value":2645},{"type":41,"tag":133,"props":2691,"children":2692},{"style":1397},[2693],{"type":47,"value":2659},{"type":41,"tag":133,"props":2695,"children":2696},{"style":2642},[2697],{"type":47,"value":2645},{"type":41,"tag":133,"props":2699,"children":2700},{"style":1397},[2701],{"type":47,"value":2668},{"type":41,"tag":133,"props":2703,"children":2704},{"style":2642},[2705],{"type":47,"value":2645},{"type":41,"tag":133,"props":2707,"children":2708},{"style":1397},[2709],{"type":47,"value":2710},"}",{"type":41,"tag":133,"props":2712,"children":2713},{"style":1365},[2714],{"type":47,"value":2715},"\"\n",{"type":41,"tag":133,"props":2717,"children":2718},{"class":401,"line":1252},[2719],{"type":41,"tag":133,"props":2720,"children":2721},{"style":1365},[2722],{"type":47,"value":962},{"type":41,"tag":50,"props":2724,"children":2725},{},[2726],{"type":41,"tag":69,"props":2727,"children":2728},{},[2729],{"type":47,"value":1933},{"type":41,"tag":113,"props":2731,"children":2732},{},[2733,2743,2768,2800],{"type":41,"tag":117,"props":2734,"children":2735},{},[2736,2741],{"type":41,"tag":92,"props":2737,"children":2739},{"className":2738},[],[2740],{"type":47,"value":266},{"type":47,"value":2742}," = account name (no blockchain address for exchanges)",{"type":41,"tag":117,"props":2744,"children":2745},{},[2746,2751,2753,2758,2760,2766],{"type":41,"tag":92,"props":2747,"children":2749},{"className":2748},[],[2750],{"type":47,"value":1584},{"type":47,"value":2752}," = a ",{"type":41,"tag":69,"props":2754,"children":2755},{},[2756],{"type":47,"value":2757},"JSON string",{"type":47,"value":2759}," (not an object), built from ",{"type":41,"tag":92,"props":2761,"children":2763},{"className":2762},[],[2764],{"type":47,"value":2765},"field.mapping",{"type":47,"value":2767}," → value pairs collected in the form",{"type":41,"tag":117,"props":2769,"children":2770},{},[2771,2776,2778,2783,2785,2791,2793,2799],{"type":41,"tag":92,"props":2772,"children":2774},{"className":2773},[],[2775],{"type":47,"value":538},{"type":47,"value":2777}," = exchange ",{"type":41,"tag":92,"props":2779,"children":2781},{"className":2780},[],[2782],{"type":47,"value":1833},{"type":47,"value":2784}," uppercased (e.g. ",{"type":41,"tag":92,"props":2786,"children":2788},{"className":2787},[],[2789],{"type":47,"value":2790},"binance_exchange",{"type":47,"value":2792}," → ",{"type":41,"tag":92,"props":2794,"children":2796},{"className":2795},[],[2797],{"type":47,"value":2798},"BINANCE_EXCHANGE",{"type":47,"value":2004},{"type":41,"tag":117,"props":2801,"children":2802},{},[2803],{"type":47,"value":2804},"Process all accounts in a single batch call where possible",{"type":41,"tag":215,"props":2806,"children":2808},{"id":2807},"result-handling-1",[2809],{"type":47,"value":1603},{"type":41,"tag":113,"props":2811,"children":2812},{},[2813,2818,2837],{"type":41,"tag":117,"props":2814,"children":2815},{},[2816],{"type":47,"value":2817},"Show success\u002Ffailure per account",{"type":41,"tag":117,"props":2819,"children":2820},{},[2821,2823,2828,2830,2835],{"type":47,"value":2822},"Surface ",{"type":41,"tag":92,"props":2824,"children":2826},{"className":2825},[],[2827],{"type":47,"value":1625},{"type":47,"value":2829}," and ",{"type":41,"tag":92,"props":2831,"children":2833},{"className":2832},[],[2834],{"type":47,"value":1633},{"type":47,"value":2836}," for failures",{"type":41,"tag":117,"props":2838,"children":2839},{},[2840],{"type":47,"value":2841},"Offer to retry failed accounts",{"type":41,"tag":56,"props":2843,"children":2844},{},[],{"type":41,"tag":80,"props":2846,"children":2848},{"id":2847},"error-messages-recovery",[2849],{"type":47,"value":2850},"Error Messages & Recovery",{"type":41,"tag":469,"props":2852,"children":2853},{},[2854,2870],{"type":41,"tag":473,"props":2855,"children":2856},{},[2857],{"type":41,"tag":477,"props":2858,"children":2859},{},[2860,2865],{"type":41,"tag":481,"props":2861,"children":2862},{},[2863],{"type":47,"value":2864},"Situation",{"type":41,"tag":481,"props":2866,"children":2867},{},[2868],{"type":47,"value":2869},"What to do",{"type":41,"tag":492,"props":2871,"children":2872},{},[2873,2893,2913,2926,2939,2952,2965,2978,2991,3004,3023],{"type":41,"tag":477,"props":2874,"children":2875},{},[2876,2888],{"type":41,"tag":499,"props":2877,"children":2878},{},[2879,2881,2886],{"type":47,"value":2880},"CSV has no ",{"type":41,"tag":92,"props":2882,"children":2884},{"className":2883},[],[2885],{"type":47,"value":258},{"type":47,"value":2887}," column",{"type":41,"tag":499,"props":2889,"children":2890},{},[2891],{"type":47,"value":2892},"Ask user to map which column contains the wallet address",{"type":41,"tag":477,"props":2894,"children":2895},{},[2896,2901],{"type":41,"tag":499,"props":2897,"children":2898},{},[2899],{"type":47,"value":2900},"Unknown network name",{"type":41,"tag":499,"props":2902,"children":2903},{},[2904,2906,2911],{"type":47,"value":2905},"Fuzzy-match to nearest ",{"type":41,"tag":92,"props":2907,"children":2909},{"className":2908},[],[2910],{"type":47,"value":368},{"type":47,"value":2912}," enum value, show warning banner, ask user to confirm",{"type":41,"tag":477,"props":2914,"children":2915},{},[2916,2921],{"type":41,"tag":499,"props":2917,"children":2918},{},[2919],{"type":47,"value":2920},"Address format invalid",{"type":41,"tag":499,"props":2922,"children":2923},{},[2924],{"type":47,"value":2925},"Mark as error in preview; user must fix or remove the row before upload",{"type":41,"tag":477,"props":2927,"children":2928},{},[2929,2934],{"type":41,"tag":499,"props":2930,"children":2931},{},[2932],{"type":47,"value":2933},"Duplicate in batch",{"type":41,"tag":499,"props":2935,"children":2936},{},[2937],{"type":47,"value":2938},"Mark both rows as errors; user must remove or fix one",{"type":41,"tag":477,"props":2940,"children":2941},{},[2942,2947],{"type":41,"tag":499,"props":2943,"children":2944},{},[2945],{"type":47,"value":2946},"Wallet already exists in Tres",{"type":41,"tag":499,"props":2948,"children":2949},{},[2950],{"type":47,"value":2951},"Mark as ⚠️ warning (yellow); proceed — API will update it",{"type":41,"tag":477,"props":2953,"children":2954},{},[2955,2960],{"type":41,"tag":499,"props":2956,"children":2957},{},[2958],{"type":47,"value":2959},"No file and no wallets typed",{"type":41,"tag":499,"props":2961,"children":2962},{},[2963],{"type":47,"value":2964},"Prompt user to either upload a file or use the manual table",{"type":41,"tag":477,"props":2966,"children":2967},{},[2968,2973],{"type":41,"tag":499,"props":2969,"children":2970},{},[2971],{"type":47,"value":2972},"Batch > 200 wallets",{"type":41,"tag":499,"props":2974,"children":2975},{},[2976],{"type":47,"value":2977},"Skip existing-wallet API check; show informational note",{"type":41,"tag":477,"props":2979,"children":2980},{},[2981,2986],{"type":41,"tag":499,"props":2982,"children":2983},{},[2984],{"type":47,"value":2985},"MCP mutation returns error",{"type":41,"tag":499,"props":2987,"children":2988},{},[2989],{"type":47,"value":2990},"Show error per wallet; offer retry",{"type":41,"tag":477,"props":2992,"children":2993},{},[2994,2999],{"type":41,"tag":499,"props":2995,"children":2996},{},[2997],{"type":47,"value":2998},"Exchange credentials rejected",{"type":41,"tag":499,"props":3000,"children":3001},{},[3002],{"type":47,"value":3003},"Show the validation error and prompt user to re-enter credentials",{"type":41,"tag":477,"props":3005,"children":3006},{},[3007,3018],{"type":41,"tag":499,"props":3008,"children":3009},{},[3010,3016],{"type":41,"tag":92,"props":3011,"children":3013},{"className":3012},[],[3014],{"type":47,"value":3015},"exchangeRequiredFields",{"type":47,"value":3017}," returns empty",{"type":41,"tag":499,"props":3019,"children":3020},{},[3021],{"type":47,"value":3022},"Inform user that this exchange may need manual setup; link to the guide",{"type":41,"tag":477,"props":3024,"children":3025},{},[3026,3036],{"type":41,"tag":499,"props":3027,"children":3028},{},[3029,3035],{"type":41,"tag":92,"props":3030,"children":3032},{"className":3031},[],[3033],{"type":47,"value":3034},"allValidatedExchanges",{"type":47,"value":3017},{"type":41,"tag":499,"props":3037,"children":3038},{},[3039,3041],{"type":47,"value":3040},"Fall back to informing user and linking to ",{"type":41,"tag":1687,"props":3042,"children":3045},{"href":3043,"rel":3044},"https:\u002F\u002Fhelp.tres.finance",[1691],[3046],{"type":47,"value":3043},{"type":41,"tag":3048,"props":3049,"children":3050},"style",{},[3051],{"type":47,"value":3052},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":3054,"total":3156},[3055,3074,3093,3107,3119,3131,3143],{"slug":3056,"name":3056,"fn":3057,"description":3058,"org":3059,"tags":3060,"stars":23,"repoUrl":24,"updatedAt":3073},"quickdesign","generate AI media assets","Use the `quickdesign` CLI to generate AI media — UGC promo videos, image edits, product creatives, video upscales — through Seedance, Kling, Sora2, Nano Banana, and GPT Image. Invoke this skill whenever the user asks for a talking-avatar video, multi-segment ad \u002F promo \u002F explainer, image edit (object swap, angle change, state change), product photoshoot, or video upscale via QuickDesign.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3061,3064,3067,3070],{"name":3062,"slug":3063,"type":16},"Creative","creative",{"name":3065,"slug":3066,"type":16},"Image Generation","image-generation",{"name":3068,"slug":3069,"type":16},"Marketing","marketing",{"name":3071,"slug":3072,"type":16},"Video","video","2026-07-01T08:09:32.316182",{"slug":3075,"name":3075,"fn":3076,"description":3077,"org":3078,"tags":3079,"stars":23,"repoUrl":24,"updatedAt":3092},"testdino-audit","audit Playwright test code","Use only when the user explicitly asks for a TestDino audit of Playwright automated test code. Routes through the audit tools the TestDino MCP server exposes (get_audit_report + submit_audit_report, or the legacy test_audit). For generic code review or non-Playwright targets, do a normal review instead.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3080,3083,3086,3089],{"name":3081,"slug":3082,"type":16},"Audit","audit",{"name":3084,"slug":3085,"type":16},"Code Analysis","code-analysis",{"name":3087,"slug":3088,"type":16},"Playwright","playwright",{"name":3090,"slug":3091,"type":16},"Testing","testing","2026-07-02T07:37:17.341081",{"slug":3094,"name":3094,"fn":3095,"description":3096,"org":3097,"tags":3098,"stars":23,"repoUrl":24,"updatedAt":3106},"testdino-health","manage TestDino connection status","Use when the user wants to check TestDino connection status, validate their PAT, discover available organizations and projects, or find the right projectId. Always call this first when the project context is ambiguous before any other TestDino tool.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3099,3102,3105],{"name":3100,"slug":3101,"type":16},"Monitoring","monitoring",{"name":3103,"slug":3104,"type":16},"QA","qa",{"name":3090,"slug":3091,"type":16},"2026-07-02T07:37:18.566504",{"slug":3108,"name":3108,"fn":3109,"description":3110,"org":3111,"tags":3112,"stars":23,"repoUrl":24,"updatedAt":3118},"testdino-manual-runs","manage manual QA execution runs in TestDino","Use when the user wants to manage a manual execution run or update case-level results inside a run — listing runs, creating runs for a release, inspecting a run, assigning cases, or marking case results (passed\u002Ffailed\u002Fblocked\u002Fskipped\u002Fretest\u002Funtested). Accepts counter-style IDs like RUN-12 and TC-156.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3113,3116,3117],{"name":3114,"slug":3115,"type":16},"Operations","operations",{"name":3103,"slug":3104,"type":16},{"name":3090,"slug":3091,"type":16},"2026-07-02T07:37:23.446065",{"slug":3120,"name":3120,"fn":3121,"description":3122,"org":3123,"tags":3124,"stars":23,"repoUrl":24,"updatedAt":3130},"testdino-manual-tests","manage manual QA test cases in TestDino","Use when the user wants to create, update, or browse manual QA test cases and suites in TestDino — not execution runs. Covers list_manual_test_suites, list_manual_test_cases, get_manual_test_case, create_manual_test_case, update_manual_test_case, create_manual_test_suite.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3125,3128,3129],{"name":3126,"slug":3127,"type":16},"Documentation","documentation",{"name":3103,"slug":3104,"type":16},{"name":3090,"slug":3091,"type":16},"2026-07-02T07:37:22.247052",{"slug":3132,"name":3132,"fn":3133,"description":3134,"org":3135,"tags":3136,"stars":23,"repoUrl":24,"updatedAt":3142},"testdino-releases","manage TestDino releases and milestones","Use when the user wants to browse, inspect, create, or update releases\u002Fmilestones in a TestDino project. Covers list_releases, get_release, create_release, and update_release. Accepts counter-style IDs like MS-12.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3137,3140,3141],{"name":3138,"slug":3139,"type":16},"Project Management","project-management",{"name":3103,"slug":3104,"type":16},{"name":3090,"slug":3091,"type":16},"2026-07-02T07:37:19.793846",{"slug":3144,"name":3144,"fn":3145,"description":3146,"org":3147,"tags":3148,"stars":23,"repoUrl":24,"updatedAt":3155},"testdino-runs","inspect automated test runs","Use when the user wants to inspect automated test runs, list failed or flaky tests, debug a failing testcase with historical context, or filter runs by branch, commit, author, environment, browser, status, or tags. Includes list_testruns, get_run_details, list_testcase, get_testcase_details, and debug_testcase.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3149,3152,3153,3154],{"name":3150,"slug":3151,"type":16},"Debugging","debugging",{"name":3087,"slug":3088,"type":16},{"name":3103,"slug":3104,"type":16},{"name":3090,"slug":3091,"type":16},"2026-07-02T07:37:16.07175",30,{"items":3158,"total":3341},[3159,3178,3192,3204,3223,3234,3255,3275,3289,3304,3312,3325],{"slug":3160,"name":3160,"fn":3161,"description":3162,"org":3163,"tags":3164,"stars":3175,"repoUrl":3176,"updatedAt":3177},"algorithmic-art","create algorithmic art with p5.js","Creating algorithmic art using p5.js with seeded randomness and interactive parameter exploration. Use this when users request creating art using code, generative art, algorithmic art, flow fields, or particle systems. Create original algorithmic art rather than copying existing artists' work to avoid copyright violations.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3165,3166,3169,3172],{"name":3062,"slug":3063,"type":16},{"name":3167,"slug":3168,"type":16},"Design","design",{"name":3170,"slug":3171,"type":16},"Generative Art","generative-art",{"name":3173,"slug":3174,"type":16},"JavaScript","javascript",161831,"https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fskills","2026-04-06T17:56:15.455818",{"slug":3179,"name":3179,"fn":3180,"description":3181,"org":3182,"tags":3183,"stars":3175,"repoUrl":3176,"updatedAt":3191},"brand-guidelines","apply Anthropic brand colors and typography","Applies Anthropic's official brand colors and typography to any sort of artifact that may benefit from having Anthropic's look-and-feel. Use it when brand colors or style guidelines, visual formatting, or company design standards apply.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3184,3187,3188],{"name":3185,"slug":3186,"type":16},"Branding","branding",{"name":3167,"slug":3168,"type":16},{"name":3189,"slug":3190,"type":16},"Typography","typography","2026-04-06T17:56:05.042852",{"slug":3193,"name":3193,"fn":3194,"description":3195,"org":3196,"tags":3197,"stars":3175,"repoUrl":3176,"updatedAt":3203},"canvas-design","create posters and visual art as PNG or PDF","Create beautiful visual art in .png and .pdf documents using design philosophy. You should use this skill when the user asks to create a poster, piece of art, design, or other static piece. Create original visual designs, never copying existing artists' work to avoid copyright violations.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3198,3199,3200],{"name":3062,"slug":3063,"type":16},{"name":3167,"slug":3168,"type":16},{"name":3201,"slug":3202,"type":16},"PDF","pdf","2026-04-06T17:56:03.794732",{"slug":3205,"name":3205,"fn":3206,"description":3207,"org":3208,"tags":3209,"stars":3175,"repoUrl":3176,"updatedAt":3222},"claude-api","build apps with the Claude API","Reference for the Claude API \u002F Anthropic SDK — model ids, pricing, params, streaming, tool use, MCP, agents, caching, token counting, model migration.\nTRIGGER — read BEFORE opening the target file; don't skip because it \"looks like a one-liner\" — whenever: the prompt names Claude\u002FAnthropic in any form (Claude, Anthropic, Fable, Opus, Sonnet, Haiku, `anthropic`, `@anthropic-ai`, `claude-*`, `us.anthropic.*`, `[1m]`); the user asks about an LLM (pricing\u002Fmodel choice\u002Flimits\u002Fcaching) — never answer from memory; OR the task is LLM-shaped with provider unstated (agent\u002FMCP\u002Ftool-definition\u002Fmulti-agent\u002FRAG\u002FLLM-judge\u002Fcomputer-use; generate\u002Fsummarize\u002Fextract\u002Fclassify\u002Frewrite\u002Fconverse over NL; debugging refusals\u002Fcutoffs\u002Fstreaming\u002Ftool-calls\u002Ftokens).\nSKIP only when another provider is being worked on (overrides all triggers): OpenAI\u002FGPT\u002FGemini\u002FLlama\u002FMistral\u002FCohere\u002FOllama named in the query; OR `grep -rE 'openai|langchain_openai|google.generativeai|genai|mistralai|cohere|ollama'` over the project hits (run this grep FIRST if no provider named — don't Read the file).",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3210,3213,3214,3217,3219],{"name":3211,"slug":3212,"type":16},"Agents","agents",{"name":9,"slug":8,"type":16},{"name":3215,"slug":3216,"type":16},"Anthropic SDK","anthropic-sdk",{"name":3218,"slug":3205,"type":16},"Claude API",{"name":3220,"slug":3221,"type":16},"LLM","llm","2026-07-28T05:36:08.213335",{"slug":3224,"name":3224,"fn":3225,"description":3226,"org":3227,"tags":3228,"stars":3175,"repoUrl":3176,"updatedAt":3233},"doc-coauthoring","co-author documentation and technical specs","Guide users through a structured workflow for co-authoring documentation. Use when user wants to write documentation, proposals, technical specs, decision docs, or similar structured content. This workflow helps users efficiently transfer context, refine content through iteration, and verify the doc works for readers. Trigger when user mentions writing docs, creating proposals, drafting specs, or similar documentation tasks.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3229,3230],{"name":3126,"slug":3127,"type":16},{"name":3231,"slug":3232,"type":16},"Technical Writing","technical-writing","2026-04-06T17:56:14.18897",{"slug":3235,"name":3235,"fn":3236,"description":3237,"org":3238,"tags":3239,"stars":3175,"repoUrl":3176,"updatedAt":3254},"docx","create and edit Word documents","Use this skill whenever the user wants to create, read, edit, or manipulate Word documents (.docx files) or Word templates (.dotx files). Triggers include: any mention of 'Word doc', 'word document', '.docx', '.dotx', or requests to produce professional documents with formatting like tables of contents, headings, page numbers, or letterheads. Also use when extracting or reorganizing content from .docx or .dotx files, inserting or replacing images in documents, performing find-and-replace in Word files, working with tracked changes or comments, or converting content into a polished Word document. If the user asks for a 'report', 'memo', 'letter', 'template', or similar deliverable as a Word or .docx file, use this skill. Do NOT use for PDFs, spreadsheets, Google Docs, or general coding tasks unrelated to document generation.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3240,3243,3245,3248,3251],{"name":3241,"slug":3242,"type":16},"Documents","documents",{"name":3244,"slug":3235,"type":16},"DOCX",{"name":3246,"slug":3247,"type":16},"Office","office",{"name":3249,"slug":3250,"type":16},"Templates","templates",{"name":3252,"slug":3253,"type":16},"Word","word","2026-07-18T05:16:23.136271",{"slug":3256,"name":3256,"fn":3257,"description":3258,"org":3259,"tags":3260,"stars":3175,"repoUrl":3176,"updatedAt":3274},"frontend-design","design production-grade frontend interfaces","Guidance for distinctive, intentional visual design when building new UI or reshaping an existing one. Helps with aesthetic direction, typography, and making choices that don't read as templated defaults.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3261,3262,3265,3268,3271],{"name":3167,"slug":3168,"type":16},{"name":3263,"slug":3264,"type":16},"Frontend","frontend",{"name":3266,"slug":3267,"type":16},"React","react",{"name":3269,"slug":3270,"type":16},"Tailwind CSS","tailwind-css",{"name":3272,"slug":3273,"type":16},"UI Components","ui-components","2026-04-06T17:56:16.723469",{"slug":3276,"name":3276,"fn":3277,"description":3278,"org":3279,"tags":3280,"stars":3175,"repoUrl":3176,"updatedAt":3288},"internal-comms","write internal company communications","A set of resources to help me write all kinds of internal communications, using the formats that my company likes to use. Claude should use this skill whenever asked to write some sort of internal communications (status reports, leadership updates, 3P updates, company newsletters, FAQs, incident reports, project updates, etc.).",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3281,3284,3285],{"name":3282,"slug":3283,"type":16},"Communications","communications",{"name":3249,"slug":3250,"type":16},{"name":3286,"slug":3287,"type":16},"Writing","writing","2026-04-06T17:56:20.695522",{"slug":3290,"name":3290,"fn":3291,"description":3292,"org":3293,"tags":3294,"stars":3175,"repoUrl":3176,"updatedAt":3303},"mcp-builder","build MCP servers","Guide for creating high-quality MCP (Model Context Protocol) servers that enable LLMs to interact with external services through well-designed tools. Use when building MCP servers to integrate external APIs or services, whether in Python (FastMCP) or Node\u002FTypeScript (MCP SDK).",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3295,3296,3299,3300],{"name":3211,"slug":3212,"type":16},{"name":3297,"slug":3298,"type":16},"API Development","api-development",{"name":3220,"slug":3221,"type":16},{"name":3301,"slug":3302,"type":16},"MCP","mcp","2026-04-06T17:56:10.357665",{"slug":3202,"name":3202,"fn":3305,"description":3306,"org":3307,"tags":3308,"stars":3175,"repoUrl":3176,"updatedAt":3311},"read edit and manipulate PDF files","Use this skill whenever the user wants to do anything with PDF files. This includes reading or extracting text\u002Ftables from PDFs, combining or merging multiple PDFs into one, splitting PDFs apart, rotating pages, adding watermarks, creating new PDFs, filling PDF forms, encrypting\u002Fdecrypting PDFs, extracting images, and OCR on scanned PDFs to make them searchable. If the user mentions a .pdf file or asks to produce one, use this skill.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3309,3310],{"name":3241,"slug":3242,"type":16},{"name":3201,"slug":3202,"type":16},"2026-04-06T17:56:02.483316",{"slug":3313,"name":3313,"fn":3314,"description":3315,"org":3316,"tags":3317,"stars":3175,"repoUrl":3176,"updatedAt":3324},"pptx","create and edit PowerPoint presentations","Use this skill any time a .pptx or .potx file is involved in any way — as input, output, or both. This includes: creating slide decks, pitch decks, or presentations; reading, parsing, or extracting text from any .pptx or .potx file (even if the extracted content will be used elsewhere, like in an email or summary); editing, modifying, or updating existing presentations; combining or splitting slide files; working with templates (.potx), layouts, speaker notes, or comments. Trigger whenever the user mentions \"deck,\" \"slides,\" \"presentation,\" or references a .pptx or .potx filename, regardless of what they plan to do with the content afterward. If a .pptx or .potx file needs to be opened, created, or touched, use this skill.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3318,3321],{"name":3319,"slug":3320,"type":16},"PowerPoint","powerpoint",{"name":3322,"slug":3323,"type":16},"Presentations","presentations","2026-07-18T05:16:24.1471",{"slug":3326,"name":3326,"fn":3327,"description":3328,"org":3329,"tags":3330,"stars":3175,"repoUrl":3176,"updatedAt":3340},"skill-creator","create and optimize agent skills","Create new skills, modify and improve existing skills, and measure skill performance. Use when users want to create a skill from scratch, edit, or optimize an existing skill, run evals to test a skill, benchmark skill performance with variance analysis, or optimize a skill's description for better triggering accuracy.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3331,3332,3333,3336,3339],{"name":3211,"slug":3212,"type":16},{"name":3126,"slug":3127,"type":16},{"name":3334,"slug":3335,"type":16},"Evals","evals",{"name":3337,"slug":3338,"type":16},"Performance","performance",{"name":3231,"slug":3232,"type":16},"2026-04-19T06:45:40.804",490]