[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M718G1F3DBWTX5H9RWPHHB4F":3,"skill-same:01M718G1F3DBWTX5H9RWPHHB4F":71},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":23,"publishedAt":44,"linkOnly":45,"markdownContent":46,"markdownBody":47,"frontMatter":48,"refName":49,"commitSha":50,"skillDirectory":51,"forksCount":52,"repositoryHtmlUrl":53,"repositoryHomepageUrl":6,"ownerHtmlUrl":54,"ownerBlogUrl":55,"ownerDescription":6,"updatedAt":56,"install":57,"resources":70},"01M718G1F3DBWTX5H9RWPHHB4F","tres-tx-story",null,"Analyze a blockchain transaction by its hash using TRES Finance MCP and generate a visual flow diagram showing all asset movements, followed by a plain-language explanation of what happened. Use this skill whenever the user provides a transaction hash and asks to \"analyze\", \"explain\", \"visualize\", \"diagram\", \"show me what happened in\", or \"tell the story of\" a transaction. Also trigger when the user pastes a tx hash (long hex string starting with 0x) and asks anything about it. Always use this skill for transaction hash analysis — do not attempt to answer from memory alone.","anthropics\u002Fclaude-plugins-community","anthropics","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F76263028?v=4","01M697XGDPXJAVQ8391V2BCYTE","Anthropic","01M718C1RS4JJFM9KNJMTCAYJG",4856,"Apache-2.0","https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fclaude-plugins-community\u002Fblob\u002Fmain\u002Ftres-finance-plugin\u002Fskills\u002Ftres-tx-story\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],"Story","tres tx story","for","visualize","do","STRING","blockchain","asset","flow","generate","diagram","me","analyze","analysis","show me","when","MCP","hex","memory","show","2026-11-10 10:12:30",false,"---\nname: tres-tx-story\ndescription: >\n  Analyze a blockchain transaction by its hash using TRES Finance MCP and generate\n  a visual flow diagram showing all asset movements, followed by a plain-language\n  explanation of what happened. Use this skill whenever the user provides a\n  transaction hash and asks to \"analyze\", \"explain\", \"visualize\", \"diagram\",\n  \"show me what happened in\", or \"tell the story of\" a transaction. Also trigger\n  when the user pastes a tx hash (long hex string starting with 0x) and asks\n  anything about it. Always use this skill for transaction hash analysis — do not\n  attempt to answer from memory alone.\n---\n\n# TRES Transaction Story\n\nFetch a transaction by hash from TRES Finance, render a flow diagram of all asset\nmovements, and explain in plain English what happened.\n\n## MCP Server\nAll calls use the `TRES Finance MCP` server (URL: `https:\u002F\u002Fai.tres.finance\u002Fmcp`).\n\n---\n\n## Step 1 — Authenticate\nCall `get_viewer` (no arguments) to verify the session.\n\n---\n\n## Step 2 — Fetch the Transaction\n\nQuery the transaction using its hash as the `identifier`:\n\n```graphql\nquery GetTransactionByHash($hash: String!, $currency: String) {\n  transaction(identifier: $hash, currency: $currency, limit: 1) {\n    results {\n      id\n      identifier\n      platform\n      timestamp\n      success\n      decodedFunctionName\n      methodId\n      fromAddress { identifier displayName isInternal customAccountName }\n      toAddress   { identifier displayName isInternal customAccountName }\n      contract    { identifier contractName protocols applications }\n      classification { activity action functionName }\n      ledgerSummary\n      applications\n      protocols\n      internalAccounts { id name }\n      children {\n        id\n        amount\n        balanceFactor\n        platform\n        type\n        fiatValue\n        nonTaxableType\n        isInternalTransfer\n        financialActionGroup\n        belongsTo { id name identifier }\n        sender    { identifier displayName isInternal customAccountName }\n        recipient { identifier displayName isInternal customAccountName }\n        asset {\n          identifier\n          symbol: key\n          assetClass { id symbol verificationStatus }\n        }\n      }\n    }\n  }\n}\n```\n\nVariables: `{ \"hash\": \"\u003Cuser_provided_hash>\", \"currency\": \"usd\" }`\n\n> **Fallback**: If `identifier` returns 0 results, retry with `identifier_Contains`\n> using the last 20 characters of the hash. Hashes on some chains may be stored\n> without the `0x` prefix — strip it and retry if still empty.\n\n---\n\n## Step 3 — Parse the Data\n\nFrom the result, extract:\n\n| Field | Purpose |\n|---|---|\n| `identifier` | The tx hash |\n| `platform` | Blockchain (ETHEREUM, SOLANA, etc.) |\n| `timestamp` | Date\u002Ftime |\n| `success` | Did it succeed? |\n| `decodedFunctionName` | What smart-contract function was called |\n| `fromAddress` \u002F `toAddress` | Top-level sender → receiver |\n| `contract.contractName` | Smart contract involved (if any) |\n| `classification.activity` + `.action` | TRES classification label |\n| `children[]` | Each sub-transaction (individual token movement) |\n\nFor each child sub-transaction, extract:\n- `asset.assetClass.symbol` — the token symbol (e.g. ETH, USDC)\n- `amount` — quantity moved\n- `fiatValue` — USD equivalent\n- `balanceFactor` — `1` = inflow, `-1` = outflow\n- `belongsTo.name` — which internal wallet this belongs to\n- `sender.identifier` \u002F `recipient.identifier` — counterparties\n- `type` — GAS, TOKEN_TRANSFER, etc.\n\n---\n\n## Step 4 — Render the Diagram\n\nUse the `show_widget` tool (Visualizer) to render an HTML widget containing an inline SVG diagram.\n\n---\n\n### PRE-RENDER CHECKLIST — do this before writing a single SVG element\n\n**A. Prepare all label strings first**\n\nFor every arrow label (token amount + symbol), apply these formatting rules:\n1. Format the amount:\n   - amount ≥ 1,000,000 → `\"1.2M\"` style (1 decimal)\n   - amount ≥ 1,000 → `\"264K\"` or `\"12,233\"` (comma-separated integer)\n   - amount ≥ 1 → round to 2 decimal places max\n   - amount \u003C 1 → keep up to 4 significant figures (e.g. `\"0.033\"`)\n2. Truncate the symbol:\n   - symbol ≤ 6 chars → use as-is (ETH, USDC, DAI, CRV)\n   - symbol 7–10 chars → use as-is only if the full label fits (see step 3)\n   - symbol > 10 chars OR contains `+` OR is a compound LP token → replace with `\"LP tokens\"`\n3. Measure the full label: `label = amount + \" \" + symbol`. Count characters. Multiply by 7. That's the pixel width.\n4. The available space for a label = the arrow's x-span minus 20px safety margin.\n   - Left gap (wallet→contract): x goes from 136 to 248 → span = 112px → max label = 13 chars\n   - Right gap (contract→wallet): x goes from 408 to 504 → span = 96px → max label = 11 chars\n5. If `label_px_width > available_space`, shorten further: abbreviate amount to 1 sig fig, or use symbol-only if still too wide.\n\n**B. Count the arrows and calculate SVG height**\n\n- Count non-gas arrows (outflows + inflows). Call this `N`.\n- Each arrow row occupies 34px of vertical space.\n- Base node centre Y = 50 + (N × 34) \u002F 2 (so arrows fan symmetrically around the node centre).\n- Gas arrow hangs 60px below the bottom of the left wallet circle.\n- SVG height = node_centre_y + node_radius + 80 (gas arrow + label + padding).\n- Minimum SVG height = 230px.\n\n**C. Lay out arrow Y positions**\n\n- Space arrows evenly, 34px apart, centred on `node_centre_y`.\n- First arrow y = node_centre_y - ((N-1) × 34) \u002F 2\n- Each subsequent arrow y += 34\n- Outflow arrows (wallet → contract) use left half of diagram.\n- Inflow arrows (contract → wallet) use right half.\n- If there is exactly 1 inflow and multiple outflows, centre the inflow arrow at `node_centre_y`.\n\n---\n\n### Fixed node positions (do not change these)\n\n```\nViewBox width: 640\nLeft wallet circle:    cx=90,  cy=node_centre_y, r=46\nContract rect:         x=248,  y=node_centre_y-55, width=160, height=110, rx=12\nRight wallet circle:   cx=550, cy=node_centre_y, r=46\n\nArrow x coordinates:\n  Outflow (left→centre): x1=136, x2=246   midpoint_x=191\n  Inflow (centre→right): x1=410, x2=504   midpoint_x=457\n  Gas (downward):        x1=x2=90, y1=node_centre_y+46\n```\n\nThese x values are derived from the node edges and must not be adjusted. They guarantee labels always fall in the clear gap between nodes.\n\n---\n\n### Arrow label placement rules (no exceptions)\n\n```\nLabel x = midpoint_x of arrow (191 for outflows, 457 for inflows)\nLabel y = arrow_y - 12\ntext-anchor = \"middle\"\nfont-size = 10.5px\nfont-weight = 500\n```\n\n**Never** place a label at the same y as another label. If two arrows are only 34px apart, their labels (at y-12) are 34px apart — that is sufficient. Never stack two labels at the same y coordinate.\n\n**Never** use `text-anchor=\"start\"` for labels that fall near node edges — always `\"middle\"` anchored at the midpoint x.\n\n---\n\n### Node internal text rules\n\nWallet circle (r=46, so usable text band = ±36px from centre):\n```\nLine 1 (name):    y = cy - 8,  font-size=11, font-weight=500\nLine 2 (address): y = cy + 7,  font-size=9.5, font-family=monospace\nLine 3 (role):    y = cy + 21, font-size=9\n```\nThree lines maximum. Each line must fit within the circle width (chord at that y ≈ 80px = ~11 chars at 9px, ~9 chars at 10px). Truncate wallet names longer than 10 chars.\n\nContract rect (width=160, height=110):\n```\nLine 1 (name):     y = rect_top + 28, font-size=11, font-weight=500\nLine 2 (subname):  y = rect_top + 44, font-size=10\nLine 3 (function): y = rect_top + 60, font-size=9.5\nLine 4 (address):  y = rect_top + 76, font-size=9, font-family=monospace\nLine 5 (type):     y = rect_top + 92, font-size=9\n```\nMaximum 5 lines. Each line centred at x=328. Lines must fit within 152px (160 - 8px padding each side) → max ~21 chars at 9px. Truncate anything longer.\n\n---\n\n### Gas arrow rules\n\n- Always vertical, pointing down from the bottom of the left wallet circle.\n- x1 = x2 = 90 (same as wallet cx)\n- y1 = node_centre_y + 46 + 2 (2px gap below circle edge)\n- y2 = y1 + 55\n- Label: placed to the RIGHT of the line — `x=98, y=(y1+y2)\u002F2, text-anchor=\"start\"`\n- Below the arrow tip, add a small pill: rect with label \"network fee\", centred at x=90.\n- Gas label max length: `\"0.033 ETH gas\"` = 13 chars. Always fits.\n\n---\n\n### Color coding\n\n| Element | Fill | Stroke\u002FColor |\n|---|---|---|\n| Internal wallet (sender) | `#EAF3DE` | `#639922` |\n| Internal wallet (receiver) | `#dcfce7` | `#16a34a` |\n| Smart contract | `#EEEDFE` | `#7F77DD` |\n| Outflow arrow | — | `#dc2626` |\n| Inflow arrow | — | `#16a34a` |\n| Gas arrow | — | `#ea580c` |\n| Outflow label text | — | `#dc2626` |\n| Inflow label text | — | `#16a34a` |\n| Gas label text | — | `#ea580c` |\n\n---\n\n### Animation\n\n```css\n@keyframes flowDash { to { stroke-dashoffset: -40; } }\n@keyframes fadeUp   { from { opacity:0; transform:translateY(14px); } to { opacity:1; transform:translateY(0); } }\n\nOutflow arrows: stroke-dasharray:8 5; animation: flowDash 1.1s linear infinite;\nInflow arrows:  stroke-dasharray:8 5; animation: flowDash 1.1s linear infinite;\nGas arrow:      stroke-dasharray:4 4; animation: flowDash 1.7s linear infinite;\nCards\u002Fsections: opacity:0; animation: fadeUp .5s ease forwards; (staggered delays)\n```\n\n---\n\n### Header\n\nSingle line of plain text, no pill badges:\n```\n[hash-pill: 0xABCD...1234]   Chain · Date · function() · ✓ success\n```\nHash pill style: monospace, 11px, bg-secondary, border, border-radius 6px, padding 4px 10px.\nEverything else: 12px, color-text-secondary. Success mark: color-text-success, font-weight 500.\n\n---\n\n### Stat cards (below diagram)\n\n3-column grid, one card per: total sent (red), total received (green), gas paid (orange).\nFormat values as: `−$272,910` \u002F `264K LP` \u002F `0.127 ETH`. Keep under 12 chars.\nSublabel: 11px, muted, shows token breakdown if multiple assets.\n\n---\n\n### Footer route card\n\n`[function() badge]  via ContractName  · [protocol tag] [protocol tag]  [Explain X ↗ button]`\nFunction badge: yellow bg `#FEF9C3`, text `#854d0e`, border-radius 6px.\nProtocol tags: bg-secondary, border, border-radius 4px, 11px.\nButton: calls `sendPrompt('How does [ContractName\u002Fprotocol] work?')`\n\n---\n\n## Step 5 — Plain-Language Explanation\n\nAfter the diagram, write a short explanation (3–6 sentences) in simple, non-technical\nlanguage. Cover:\n\n1. **What happened**: The core action (swap, transfer, deposit, stake, etc.)\n2. **Who was involved**: Wallets and contracts in plain terms\n3. **What moved**: Which assets changed hands and in what direction\n4. **Net result**: What the org's wallets ended up with \u002F paid out\n\n**Tone**: Imagine explaining to someone who understands crypto but not accounting.\nAvoid jargon like \"balanceFactor\", \"sub-transaction\", \"FIFO\". Say \"sent\", \"received\",\n\"paid as gas\", \"swapped X for Y\", etc.\n\n**Example**:\n> This was a token swap on Uniswap. Your wallet (Main Treasury) sent 1,000 USDC to\n> the Uniswap V3 router contract, which in turn sent back 0.412 ETH (worth ~$1,020).\n> You also paid 0.003 ETH (~$7.40) in gas fees to the Ethereum network.\n> Net result: you traded stablecoins for ETH at roughly $2,476 per ETH.\n\n---\n\n## Error Handling\n\n| Situation | Action |\n|---|---|\n| Transaction not found | Tell user the hash wasn't found in TRES. Ask if they want to check the hash or try a different one. |\n| No children (empty sub-txs) | Show header only; note \"No asset movements recorded — the tx may be a failed or contract-only interaction.\" |\n| Missing fiat values | Show amounts without USD; note \"USD value unavailable for some assets.\" |\n| Auth failure | Tell user to check TRES connection and re-authenticate. |\n","# TRES Transaction Story\n\nFetch a transaction by hash from TRES Finance, render a flow diagram of all asset\nmovements, and explain in plain English what happened.\n\n## MCP Server\nAll calls use the `TRES Finance MCP` server (URL: `https:\u002F\u002Fai.tres.finance\u002Fmcp`).\n\n---\n\n## Step 1 — Authenticate\nCall `get_viewer` (no arguments) to verify the session.\n\n---\n\n## Step 2 — Fetch the Transaction\n\nQuery the transaction using its hash as the `identifier`:\n\n```graphql\nquery GetTransactionByHash($hash: String!, $currency: String) {\n  transaction(identifier: $hash, currency: $currency, limit: 1) {\n    results {\n      id\n      identifier\n      platform\n      timestamp\n      success\n      decodedFunctionName\n      methodId\n      fromAddress { identifier displayName isInternal customAccountName }\n      toAddress   { identifier displayName isInternal customAccountName }\n      contract    { identifier contractName protocols applications }\n      classification { activity action functionName }\n      ledgerSummary\n      applications\n      protocols\n      internalAccounts { id name }\n      children {\n        id\n        amount\n        balanceFactor\n        platform\n        type\n        fiatValue\n        nonTaxableType\n        isInternalTransfer\n        financialActionGroup\n        belongsTo { id name identifier }\n        sender    { identifier displayName isInternal customAccountName }\n        recipient { identifier displayName isInternal customAccountName }\n        asset {\n          identifier\n          symbol: key\n          assetClass { id symbol verificationStatus }\n        }\n      }\n    }\n  }\n}\n```\n\nVariables: `{ \"hash\": \"\u003Cuser_provided_hash>\", \"currency\": \"usd\" }`\n\n> **Fallback**: If `identifier` returns 0 results, retry with `identifier_Contains`\n> using the last 20 characters of the hash. Hashes on some chains may be stored\n> without the `0x` prefix — strip it and retry if still empty.\n\n---\n\n## Step 3 — Parse the Data\n\nFrom the result, extract:\n\n| Field | Purpose |\n|---|---|\n| `identifier` | The tx hash |\n| `platform` | Blockchain (ETHEREUM, SOLANA, etc.) |\n| `timestamp` | Date\u002Ftime |\n| `success` | Did it succeed? |\n| `decodedFunctionName` | What smart-contract function was called |\n| `fromAddress` \u002F `toAddress` | Top-level sender → receiver |\n| `contract.contractName` | Smart contract involved (if any) |\n| `classification.activity` + `.action` | TRES classification label |\n| `children[]` | Each sub-transaction (individual token movement) |\n\nFor each child sub-transaction, extract:\n- `asset.assetClass.symbol` — the token symbol (e.g. ETH, USDC)\n- `amount` — quantity moved\n- `fiatValue` — USD equivalent\n- `balanceFactor` — `1` = inflow, `-1` = outflow\n- `belongsTo.name` — which internal wallet this belongs to\n- `sender.identifier` \u002F `recipient.identifier` — counterparties\n- `type` — GAS, TOKEN_TRANSFER, etc.\n\n---\n\n## Step 4 — Render the Diagram\n\nUse the `show_widget` tool (Visualizer) to render an HTML widget containing an inline SVG diagram.\n\n---\n\n### PRE-RENDER CHECKLIST — do this before writing a single SVG element\n\n**A. Prepare all label strings first**\n\nFor every arrow label (token amount + symbol), apply these formatting rules:\n1. Format the amount:\n   - amount ≥ 1,000,000 → `\"1.2M\"` style (1 decimal)\n   - amount ≥ 1,000 → `\"264K\"` or `\"12,233\"` (comma-separated integer)\n   - amount ≥ 1 → round to 2 decimal places max\n   - amount \u003C 1 → keep up to 4 significant figures (e.g. `\"0.033\"`)\n2. Truncate the symbol:\n   - symbol ≤ 6 chars → use as-is (ETH, USDC, DAI, CRV)\n   - symbol 7–10 chars → use as-is only if the full label fits (see step 3)\n   - symbol > 10 chars OR contains `+` OR is a compound LP token → replace with `\"LP tokens\"`\n3. Measure the full label: `label = amount + \" \" + symbol`. Count characters. Multiply by 7. That's the pixel width.\n4. The available space for a label = the arrow's x-span minus 20px safety margin.\n   - Left gap (wallet→contract): x goes from 136 to 248 → span = 112px → max label = 13 chars\n   - Right gap (contract→wallet): x goes from 408 to 504 → span = 96px → max label = 11 chars\n5. If `label_px_width > available_space`, shorten further: abbreviate amount to 1 sig fig, or use symbol-only if still too wide.\n\n**B. Count the arrows and calculate SVG height**\n\n- Count non-gas arrows (outflows + inflows). Call this `N`.\n- Each arrow row occupies 34px of vertical space.\n- Base node centre Y = 50 + (N × 34) \u002F 2 (so arrows fan symmetrically around the node centre).\n- Gas arrow hangs 60px below the bottom of the left wallet circle.\n- SVG height = node_centre_y + node_radius + 80 (gas arrow + label + padding).\n- Minimum SVG height = 230px.\n\n**C. Lay out arrow Y positions**\n\n- Space arrows evenly, 34px apart, centred on `node_centre_y`.\n- First arrow y = node_centre_y - ((N-1) × 34) \u002F 2\n- Each subsequent arrow y += 34\n- Outflow arrows (wallet → contract) use left half of diagram.\n- Inflow arrows (contract → wallet) use right half.\n- If there is exactly 1 inflow and multiple outflows, centre the inflow arrow at `node_centre_y`.\n\n---\n\n### Fixed node positions (do not change these)\n\n```\nViewBox width: 640\nLeft wallet circle:    cx=90,  cy=node_centre_y, r=46\nContract rect:         x=248,  y=node_centre_y-55, width=160, height=110, rx=12\nRight wallet circle:   cx=550, cy=node_centre_y, r=46\n\nArrow x coordinates:\n  Outflow (left→centre): x1=136, x2=246   midpoint_x=191\n  Inflow (centre→right): x1=410, x2=504   midpoint_x=457\n  Gas (downward):        x1=x2=90, y1=node_centre_y+46\n```\n\nThese x values are derived from the node edges and must not be adjusted. They guarantee labels always fall in the clear gap between nodes.\n\n---\n\n### Arrow label placement rules (no exceptions)\n\n```\nLabel x = midpoint_x of arrow (191 for outflows, 457 for inflows)\nLabel y = arrow_y - 12\ntext-anchor = \"middle\"\nfont-size = 10.5px\nfont-weight = 500\n```\n\n**Never** place a label at the same y as another label. If two arrows are only 34px apart, their labels (at y-12) are 34px apart — that is sufficient. Never stack two labels at the same y coordinate.\n\n**Never** use `text-anchor=\"start\"` for labels that fall near node edges — always `\"middle\"` anchored at the midpoint x.\n\n---\n\n### Node internal text rules\n\nWallet circle (r=46, so usable text band = ±36px from centre):\n```\nLine 1 (name):    y = cy - 8,  font-size=11, font-weight=500\nLine 2 (address): y = cy + 7,  font-size=9.5, font-family=monospace\nLine 3 (role):    y = cy + 21, font-size=9\n```\nThree lines maximum. Each line must fit within the circle width (chord at that y ≈ 80px = ~11 chars at 9px, ~9 chars at 10px). Truncate wallet names longer than 10 chars.\n\nContract rect (width=160, height=110):\n```\nLine 1 (name):     y = rect_top + 28, font-size=11, font-weight=500\nLine 2 (subname):  y = rect_top + 44, font-size=10\nLine 3 (function): y = rect_top + 60, font-size=9.5\nLine 4 (address):  y = rect_top + 76, font-size=9, font-family=monospace\nLine 5 (type):     y = rect_top + 92, font-size=9\n```\nMaximum 5 lines. Each line centred at x=328. Lines must fit within 152px (160 - 8px padding each side) → max ~21 chars at 9px. Truncate anything longer.\n\n---\n\n### Gas arrow rules\n\n- Always vertical, pointing down from the bottom of the left wallet circle.\n- x1 = x2 = 90 (same as wallet cx)\n- y1 = node_centre_y + 46 + 2 (2px gap below circle edge)\n- y2 = y1 + 55\n- Label: placed to the RIGHT of the line — `x=98, y=(y1+y2)\u002F2, text-anchor=\"start\"`\n- Below the arrow tip, add a small pill: rect with label \"network fee\", centred at x=90.\n- Gas label max length: `\"0.033 ETH gas\"` = 13 chars. Always fits.\n\n---\n\n### Color coding\n\n| Element | Fill | Stroke\u002FColor |\n|---|---|---|\n| Internal wallet (sender) | `#EAF3DE` | `#639922` |\n| Internal wallet (receiver) | `#dcfce7` | `#16a34a` |\n| Smart contract | `#EEEDFE` | `#7F77DD` |\n| Outflow arrow | — | `#dc2626` |\n| Inflow arrow | — | `#16a34a` |\n| Gas arrow | — | `#ea580c` |\n| Outflow label text | — | `#dc2626` |\n| Inflow label text | — | `#16a34a` |\n| Gas label text | — | `#ea580c` |\n\n---\n\n### Animation\n\n```css\n@keyframes flowDash { to { stroke-dashoffset: -40; } }\n@keyframes fadeUp   { from { opacity:0; transform:translateY(14px); } to { opacity:1; transform:translateY(0); } }\n\nOutflow arrows: stroke-dasharray:8 5; animation: flowDash 1.1s linear infinite;\nInflow arrows:  stroke-dasharray:8 5; animation: flowDash 1.1s linear infinite;\nGas arrow:      stroke-dasharray:4 4; animation: flowDash 1.7s linear infinite;\nCards\u002Fsections: opacity:0; animation: fadeUp .5s ease forwards; (staggered delays)\n```\n\n---\n\n### Header\n\nSingle line of plain text, no pill badges:\n```\n[hash-pill: 0xABCD...1234]   Chain · Date · function() · ✓ success\n```\nHash pill style: monospace, 11px, bg-secondary, border, border-radius 6px, padding 4px 10px.\nEverything else: 12px, color-text-secondary. Success mark: color-text-success, font-weight 500.\n\n---\n\n### Stat cards (below diagram)\n\n3-column grid, one card per: total sent (red), total received (green), gas paid (orange).\nFormat values as: `−$272,910` \u002F `264K LP` \u002F `0.127 ETH`. Keep under 12 chars.\nSublabel: 11px, muted, shows token breakdown if multiple assets.\n\n---\n\n### Footer route card\n\n`[function() badge]  via ContractName  · [protocol tag] [protocol tag]  [Explain X ↗ button]`\nFunction badge: yellow bg `#FEF9C3`, text `#854d0e`, border-radius 6px.\nProtocol tags: bg-secondary, border, border-radius 4px, 11px.\nButton: calls `sendPrompt('How does [ContractName\u002Fprotocol] work?')`\n\n---\n\n## Step 5 — Plain-Language Explanation\n\nAfter the diagram, write a short explanation (3–6 sentences) in simple, non-technical\nlanguage. Cover:\n\n1. **What happened**: The core action (swap, transfer, deposit, stake, etc.)\n2. **Who was involved**: Wallets and contracts in plain terms\n3. **What moved**: Which assets changed hands and in what direction\n4. **Net result**: What the org's wallets ended up with \u002F paid out\n\n**Tone**: Imagine explaining to someone who understands crypto but not accounting.\nAvoid jargon like \"balanceFactor\", \"sub-transaction\", \"FIFO\". Say \"sent\", \"received\",\n\"paid as gas\", \"swapped X for Y\", etc.\n\n**Example**:\n> This was a token swap on Uniswap. Your wallet (Main Treasury) sent 1,000 USDC to\n> the Uniswap V3 router contract, which in turn sent back 0.412 ETH (worth ~$1,020).\n> You also paid 0.003 ETH (~$7.40) in gas fees to the Ethereum network.\n> Net result: you traded stablecoins for ETH at roughly $2,476 per ETH.\n\n---\n\n## Error Handling\n\n| Situation | Action |\n|---|---|\n| Transaction not found | Tell user the hash wasn't found in TRES. Ask if they want to check the hash or try a different one. |\n| No children (empty sub-txs) | Show header only; note \"No asset movements recorded — the tx may be a failed or contract-only interaction.\" |\n| Missing fiat values | Show amounts without USD; note \"USD value unavailable for some assets.\" |\n| Auth failure | Tell user to check TRES connection and re-authenticate. |\n",{"name":5,"description":7},"main","163301d1904c0a994539f5226ce0fcd65b8652bf","tres-finance-plugin\u002Fskills\u002Ftres-tx-story",357,"https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fclaude-plugins-community","https:\u002F\u002Fgithub.com\u002Fanthropics","https:\u002F\u002Fanthropic.com","2026-11-10 15:47:08",{"source":8,"skillName":5,"commands":58,"prompt":68,"zipAvailable":69},[59,62,65],{"tool":60,"command":61},"npx","npx skills add anthropics\u002Fclaude-plugins-community --skill tres-tx-story",{"tool":63,"command":64},"bunx","bunx skills add anthropics\u002Fclaude-plugins-community --skill tres-tx-story",{"tool":66,"command":67},"pnpm","pnpm dlx skills add anthropics\u002Fclaude-plugins-community --skill tres-tx-story","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fclaude-plugins-community\u002Fblob\u002Fmain\u002Ftres-finance-plugin\u002Fskills\u002Ftres-tx-story\u002FSKILL.md",true,[],[72,107,130,154,178,198],{"skillNo":73,"name":74,"nameZh":6,"description":75,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":76,"categories":77,"keywords":87,"publishedAt":44},"01M718G9QZ4B2DJVEB3MAW5ZB1","tres-wallets-upload","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\".","https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fclaude-plugins-community\u002Fblob\u002Fmain\u002Ftres-finance-plugin\u002Fskills\u002Ftres-wallets-upload\u002FSKILL.md",[78,81,82],{"categoryNo":79,"categoryName":80,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000004","电子表格",{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":83,"categoryName":84,"taxonomyType":85,"taxonomyTypeDesc":86},"01JBSEEDCAT000000000000040","财务","PROFESSION","适用职业",[88,89,90,91,92,93,94,95,96,97,40,98,99,100,101,102,103,104,105,106],"wallets","tres wallets upload","upload","typing","ingestion","Wallet","chain","creation","xlsx","selection","confirmation","connect","collection","preview","api","batch","guides","on-chain","request",{"skillNo":108,"name":109,"nameZh":6,"description":110,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":111,"categories":112,"keywords":113,"publishedAt":44},"01M718G5RD9064Z574RQ4SEY38","tres-upload-tx-header-validation","The exact column header names required by the TRES Finance bulk transaction CSV upload. Use whenever building, fixing, or validating the header row of a TRES manual transaction or sub-transaction upload CSV — especially after an upload fails with \"Missing required column(s): ...\". Trigger phrases include: 'fix my CSV headers', 'bulk transaction upload failed', 'missing required columns', 'validate TRES upload CSV', 'transaction CSV template headers'. This skill is ONLY about the header naming convention; it does not cover row values or upload workflow. Do NOT trigger for contacts import CSV (use tres-import-contacts), wallet upload CSV (use tres-wallets-upload), or general CSV parsing unrelated to bulk TX upload headers.","https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fclaude-plugins-community\u002Fblob\u002Fmain\u002Ftres-finance-plugin\u002Fskills\u002Ftres-upload-tx-header-validation\u002FSKILL.md",[],[114,90,115,116,28,117,93,118,26,119,120,121,122,123,124,125,126,127,128,129],"tres upload tx header validation","validation","bulk","import","parsing","manual","trigger","fix","missing","general","only","use","workflow","csv","contacts","with",{"skillNo":131,"name":132,"nameZh":6,"description":133,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":134,"categories":135,"keywords":137,"publishedAt":44},"01M718FW5ST9J56WY4TJ5G5A7X","tres-settings-management","Manage Organization Settings and Platform Settings via the TRES MCP GraphQL API. Use when users ask about org settings, platform settings, configuration, feature flags, enable\u002Fdisable platforms, balance diff, commit strategy, cost basis, ERP, pricing, sync boundaries, or any setting read\u002Fwrite operation. Trigger phrases include \"get settings\", \"show settings\", \"update settings\", \"change settings\", \"enable platform\", \"disable platform\", \"balance diff\", \"commit strategy\", \"cost basis strategy\", \"set min sync date\", \"configure\", \"turn on\", \"turn off\".","https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fclaude-plugins-community\u002Fblob\u002Fmain\u002Ftres-finance-plugin\u002Fskills\u002Ftres-settings-management\u002FSKILL.md",[136],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[138,139,140,141,43,142,40,39,143,144,145,102,146,147,148,149,150,151,152,153],"tres settings management","settings","management","SET","get","configure","ask","commit","change","organization","update","read","write","sync","mcp graphql","flags",{"skillNo":155,"name":156,"nameZh":6,"description":157,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":158,"categories":159,"keywords":162,"publishedAt":44},"01M718FND35X9DPTNR7JTX2YX8","tres-rollup-rules","Analyze an organization's sub-transaction patterns in TRES Finance, identify groups of repetitive transactions, and propose data-driven rollup rules that consolidate them into one aggregated entry per interval (daily or monthly) for cleaner ERP integration. Also lists and deletes rollup rules. Trigger this skill whenever the user asks about rollup rules, transaction aggregation, consolidating transactions, reducing transaction noise, rolling up gas fees, rolling up staking rewards, rolling up micro-transactions, or collapsing many small ledger entries into fewer summary entries. Also trigger on \"create a rollup rule\", \"suggest rollup rules\", \"what should I roll up\", \"show my rollup rules\", \"delete a rollup rule\", \"aggregate transactions\", \"too many transactions\", \"reduce transaction count\", \"roll up fees\", \"daily rollup\", \"monthly rollup\". If a wallet has too many transactions, high-frequency activity, or noisy ledger entries, proactively suggest rollup rules. For computing the EXACT impact of a single already-specified rule or reviewing submitted\u002Fpending rules, use the tres-rollup-review skill instead.","https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fclaude-plugins-community\u002Fblob\u002Fmain\u002Ftres-finance-plugin\u002Fskills\u002Ftres-rollup-rules\u002FSKILL.md",[160,161],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":83,"categoryName":84,"taxonomyType":85,"taxonomyTypeDesc":86},[163,164,165,43,166,93,167,40,168,169,170,171,172,36,173,174,175,176,147,177],"tres rollup rules","Rules","rollup","gas","up","impact","reduce","Connector","review","consolidate","create","transactions","delete","data-driven","activity",{"skillNo":179,"name":180,"nameZh":6,"description":181,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":182,"categories":183,"keywords":186,"publishedAt":44},"01M718FFX3KV2JRFVS2RCM719D","tres-rollup-review","Compute the EXACT sub-transaction impact of a rollup rule in TRES Finance — every filter applied — and flag genuine problems (zero matches, overlap, config mistakes) before the rule is created. Two modes. Mode A: a pre-create quality gate invoked by the tres-rollup-rules skill to vet proposed candidate rules. Mode B: standalone review of a rule someone submitted or of existing PENDING rules. Trigger this skill when the user says \"review this rollup rule\", \"what would this rollup rule actually match\", \"preview the rollup impact\", \"how many transactions would this rule catch\", \"is this rollup rule valid\", \"validate my rollup rule\", \"check my pending rollup rules\", or \"review the rollup requests\". Do NOT use this to design or propose new rollups — that is tres-rollup-rules. This skill only measures impact and flags issues; it never executes mutations.","https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fclaude-plugins-community\u002Fblob\u002Fmain\u002Ftres-finance-plugin\u002Fskills\u002Ftres-rollup-review\u002FSKILL.md",[184,185],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":83,"categoryName":84,"taxonomyType":85,"taxonomyTypeDesc":86},[171,187,165,188,189,190,191,192,124,193,40,168,39,101,194,170,195,196,173,197],"tres rollup review","standalone","never","mode","issues","design","new","candidate","filter","valid","catch",{"skillNo":199,"name":200,"nameZh":6,"description":201,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":202,"categories":203,"keywords":205,"publishedAt":44},"01M718F9C31MH0XFSZ29Z4X7WD","tres-request-skill-update","Submit feedback about the TRES Claude plugin — bug reports, feature requests, skill improvements, new skill ideas, MCP issues, workflow friction, or positive feedback about what's working well. Use this skill whenever the user wants to share any kind of feedback about the plugin, its skills, or the TRES MCP. Trigger phrases include: \"submit feedback\", \"report a bug\", \"request a feature\", \"suggest an improvement\", \"I have an idea\", \"something is broken\", \"the skill isn't working\", \"I love this skill\", \"this worked great\", \"the MCP is returning wrong data\", \"the flow is confusing\", \"can you fix the skill\", \"file a skill request\", \"give feedback\", \"this could be better\". Also trigger proactively when the conversation appears to be wrapping up — e.g. the user says \"thanks\", \"that's all\", \"looks good\", \"we're done\", \"nothing else\", or any other signal that the task is complete. In that case, offer a brief feedback prompt instead of launching the full guided flow. Do NOT trigger for general questions about how a skill works — only when the user wants to submit feedback or the conversation is ending.","https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fclaude-plugins-community\u002Fblob\u002Fmain\u002Ftres-finance-plugin\u002Fskills\u002Ftres-request-skill-update\u002FSKILL.md",[204],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[206,106,148,207,208,209,210,211,212,167,121,191,213,124,193,214,40,39,126,215],"skill update","tres request skill update","conversation","brief","broken","submit","re","good","give feedback","you"]