[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-anthropic-tres-asc845-swap-reprice-skill":3,"mdc--o971q2-key":34,"related-repo-anthropic-tres-asc845-swap-reprice-skill":1302,"related-org-anthropic-tres-asc845-swap-reprice-skill":1406},{"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-asc845-swap-reprice-skill","reprice swap transactions under ASC 845","Reprice swap transaction legs under ASC 845 (Nonmonetary Transactions) to ensure clearing accounts net to zero. Use this skill whenever the user wants to: reprice swaps, fix clearing account residuals, apply equal-value exchange to swap legs, run setBatchUseCounterpartyFiatValue, zero out a clearing account, apply ASC 845, fix swap pricing mismatches, ensure no gain\u002Floss on swaps, or close a month where a swaps\u002Ftrade clearing account has a residual balance. Also trigger when the user mentions \"counterparty fiat value\", \"swap repricing\", \"clearing account net to zero\", or \"equal value exchange\".\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},"Compliance","compliance","tag",{"name":18,"slug":19,"type":16},"Finance","finance",{"name":21,"slug":22,"type":16},"Accounting","accounting",294,"https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fclaude-plugins-community","2026-07-02T07:37:46.62018",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-asc845-swap-reprice-skill","---\nname: tres-asc845-swap-reprice-skill\ndescription: >\n  Reprice swap transaction legs under ASC 845 (Nonmonetary Transactions) to ensure clearing accounts\n  net to zero. Use this skill whenever the user wants to: reprice swaps, fix clearing account residuals,\n  apply equal-value exchange to swap legs, run setBatchUseCounterpartyFiatValue, zero out a clearing\n  account, apply ASC 845, fix swap pricing mismatches, ensure no gain\u002Floss on swaps, or close a month\n  where a swaps\u002Ftrade clearing account has a residual balance. Also trigger when the user mentions\n  \"counterparty fiat value\", \"swap repricing\", \"clearing account net to zero\", or \"equal value exchange\".\ncompatibility: \"Requires TRES Finance MCP connector\"\n---\n\n# ASC 845 Swap Repricing Skill\n\n## Purpose\n\nImplements **equal-value exchange under ASC 845 (Nonmonetary Transactions)** for swap transactions\nin TRES Finance. In a simultaneous swap, the fair value of the asset surrendered (outflow) is the\nbest evidence of the fair value of the asset received (inflow). This skill reprices inflow legs to\nmatch outflow legs so that clearing accounts net to zero.\n\n## When to Use\n\n- A swaps\u002Ftrade clearing account has a non-zero residual after month-end\n- User wants to apply ASC 845 to a population of swap transactions\n- User says \"setBatchUseCounterpartyFiatValue\" or similar\n\n## MCP Server\n\nAll GraphQL calls use the **`user-tres-finance`** MCP server (`execute` tool).\n\nVariable keys and nested input fields MUST use **camelCase** (e.g. `timestamp_Gte`, not `timestamp_gte`).\n\n## Prerequisites\n\n- TRES Finance MCP connection (`user-tres-finance`)\n- The user must specify:\n  1. **Target ERP account** — the clearing account to zero out (e.g. \"Swaps Clearing Account\", NS #818)\n  2. **Transaction scope** — either a date range (timestamp_Gte \u002F timestamp_Lte) or specific tx hashes\n  3. **Confirmation** — user must approve before mutations are executed\n\n## Workflow\n\n### Step 1: Gather Parameters\n\nAsk the user for:\n- Target ERP account name or ID (the clearing account)\n- Date range OR list of transaction hashes\n- **Activity tags** (optional) — filter to only transactions with specific classification activities\n  (e.g. \"STAKING LOCKUP\", \"SWAP\"). None, one, or many may be selected. If omitted, all activities\n  are included. Use `tx_Classification_Activity_In` on the TRES query.\n- Currency (default: USD)\n- Whether to run in **dry-run** (preview only) or **execute** mode\n\n### Step 2: Query Subtransactions\n\nUse the TRES `subTransaction` query to fetch all subtransactions in scope. Include these fields:\n```graphql\n{\n  id\n  amount\n  balanceFactor\n  timestamp\n  fiatValue\n  isManualFiatValue\n  belongsTo { id name }\n  asset { assetClass { symbol } }\n  tx { id identifier classification { activity } }\n  flowRule {\n    ruleName\n    integrationAccount { name value }\n  }\n}\n```\n\nIf activity tags were specified, pass them as `tx_Classification_Activity_In: [\"STAKING LOCKUP\", \"SWAP\"]`\non the query. Note: transactions with `classification: null` will be excluded when this filter is used,\nso only apply it when the user explicitly requests it.\n\nPaginate in batches of 50 (to avoid timeouts). Save the combined results to a JSON file for the orchestrator script.\n\n### Step 3: Run the Orchestrator Script\n\nFrom the skill `scripts\u002F` directory, run `orchestrate_reprice.py` (handles MCP response shapes, account filter, preview, and mutation JSON):\n\n```bash\ncd \"${CLAUDE_PLUGIN_ROOT}\u002Fskills\u002Ftres-asc845-swap-reprice-skill\u002Fscripts\" && \\\npython3 orchestrate_reprice.py \\\n  --input \u002Fpath\u002Fto\u002Fswap_reprice_input.json \\\n  --account-name \"Swaps Clearing Account\" \\\n  --output \u002Fpath\u002Fto\u002Freprice_plan.json \\\n  --mutations-output \u002Fpath\u002Fto\u002Freprice_mutations.json\n```\n\nUse `--account-value` instead of `--account-name` when filtering by ERP account number. Pass `--activity-tags SWAP \"STAKING LOCKUP\"` when the user requested activity filters.\n\nThe script prints a preview to stdout and writes:\n- `reprice_plan.json` — full plan with per-transaction adjustments\n- `reprice_mutations.json` — ready-to-execute `setManualFiatValue` variables\n\nFor lower-level repricing only (no orchestration), use `reprice_swaps.py` directly — see `scripts\u002Freprice_swaps.py` for flags.\n\n### Step 4: Repricing Logic (ASC 845)\n\nThe orchestrator implements the logic below. Read `scripts\u002Freprice_swaps.py` for the canonical implementation.\n\nThe core principle: calculate the **difference** between total outflow fiat and total inflow fiat,\nthen distribute that difference across inflows **in proportion to their token amounts**. This\npreserves the original pricing as a base and makes the minimum adjustment needed.\n\nFor each parent transaction:\n\n**Case 1: One outflow, one inflow**\n```\ninflow.newFiatValue = outflow.fiatValue\n```\n\n**Case 2: One outflow, many inflows**\n```\ndifference = outflow.fiatValue - sum(inflow.fiatValue for each inflow)\ntotalInflowTokens = sum(inflow.amount for each inflow)\nfor each inflow:\n    tokenProportion = inflow.amount \u002F totalInflowTokens\n    inflow.newFiatValue = inflow.fiatValue + (difference * tokenProportion)\n```\n\n**Case 3: Many outflows, one inflow**\n```\ninflow.newFiatValue = sum(outflow.fiatValue for each outflow)\n```\n\n**Case 4: Many outflows, many inflows**\n```\ntotalOutflowFiat = sum(outflow.fiatValue for each outflow)\ntotalInflowFiat = sum(inflow.fiatValue for each inflow)\ndifference = totalOutflowFiat - totalInflowFiat\ntotalInflowTokens = sum(inflow.amount for each inflow)\nfor each inflow:\n    tokenProportion = inflow.amount \u002F totalInflowTokens\n    inflow.newFiatValue = inflow.fiatValue + (difference * tokenProportion)\n```\n\n**Worked example (Case 2):**\n```\nBefore:  Outflow = 100 tokens @ $100 | Inflows = 25 tokens @ $25, 25 @ $25, 35 @ $35 (total $85)\n         Difference = $100 - $85 = $15 | Total inflow tokens = 85\n\nAfter:   Inflow 1: $25 + ($15 × 25\u002F85) = $25 + $4.41 = $29.41\n         Inflow 2: $25 + ($15 × 25\u002F85) = $25 + $4.41 = $29.41\n         Inflow 3: $35 + ($15 × 35\u002F85) = $35 + $6.18 = $41.18\n         Total inflows after = $100.00 ✓  (clearing account nets to zero)\n```\n\n**Edge cases:**\n- If `totalInflowTokens == 0`, distribute the difference equally across inflows\n- If a subtransaction already has `isManualFiatValue == true`, flag it for user review (it was already manually repriced)\n- Skip transactions with only outflows or only inflows (not a complete swap)\n- Last inflow in the group receives the remainder to absorb rounding (ensures exact match)\n\n### Step 5: Preview the Reprice Plan\n\nPresent the orchestrator stdout summary and\u002For the plan JSON to the user:\n\n```\nTX Identifier | Outflow Total | Inflow Before | Inflow After | Adjustment\n------------- | ------------- | ------------- | ------------ | ----------\n0xabc...      | $1,234.56     | $1,230.00     | $1,234.56    | +$4.56\n0xdef...      | $5,678.90     | $5,670.00     | $5,678.90    | +$8.90\n```\n\nAlso show aggregate stats:\n- Total transactions affected\n- Total outflow fiat\n- Total inflow fiat (before)\n- Total inflow fiat (after)\n- Net clearing account residual (before → after, should go to $0)\n- Count of already-manually-priced subtxs being overwritten\n\n### Step 6: Execute (with user confirmation)\n\n**Never run mutations without explicit user confirmation.**\n\nOnly after the user confirms, execute `setManualFiatValue` for each inflow subtransaction (use variables from `reprice_mutations.json`):\n\n```graphql\nmutation SetManualFiatValue($id: ID!, $newFiatValue: String!, $currency: String) {\n  setManualFiatValue(id: $id, newFiatValue: $newFiatValue, currency: $currency) {\n    subTransaction {\n      id\n      fiatValue\n      isManualFiatValue\n    }\n  }\n}\n```\n\nExecute one at a time (not batch) to handle locked-period errors gracefully.\nIf `setBatchManualFiatValue` is preferred for speed, group inflows by asset\nwhere a uniform per-unit price applies.\n\n**Important**: `setManualFiatValue` takes `newFiatValue` as a string.\n`setBatchManualFiatValue` takes `ids` (list) and `newUnitValue` (Float) and computes\n`newUnitValue * amount` — only use this if all subtxs in the batch should have the same unit price.\n\n### Step 7: Verify\n\nRe-query the subtransactions and re-aggregate to confirm the clearing account now nets to zero.\n\n## Error Handling\n\n- **Locked period**: If a subtransaction is in a locked period, warn the user. They must unlock\n  via `deleteLockedPeriod`, apply changes, then re-lock via `createLockedPeriod`.\n- **Missing fiat values**: If outflow fiatValue is null, skip the transaction and flag it.\n- **Zero-value legs**: If outflow total is $0, skip (nothing to propagate).\n- **Already manual**: Flag but still overwrite — only after the user confirmed the batch.\n\n## Script Reference\n\n| Script | Role |\n|--------|------|\n| `scripts\u002Forchestrate_reprice.py` | Primary entry — parse MCP JSON, filter, preview, write plan + mutations |\n| `scripts\u002Freprice_swaps.py` | Core ASC 845 repricing engine (imported by orchestrator; usable standalone) |\n",{"data":35,"body":37},{"name":4,"description":6,"compatibility":36},"Requires TRES Finance MCP connector",{"type":38,"children":39},"root",[40,49,56,70,76,96,102,127,155,161,215,221,228,233,287,293,306,454,475,480,486,507,654,683,688,721,742,748,760,779,784,792,802,810,819,827,836,844,853,861,870,878,917,923,928,937,942,975,981,989,1008,1085,1098,1153,1159,1164,1170,1229,1235,1296],{"type":41,"tag":42,"props":43,"children":45},"element","h1",{"id":44},"asc-845-swap-repricing-skill",[46],{"type":47,"value":48},"text","ASC 845 Swap Repricing Skill",{"type":41,"tag":50,"props":51,"children":53},"h2",{"id":52},"purpose",[54],{"type":47,"value":55},"Purpose",{"type":41,"tag":57,"props":58,"children":59},"p",{},[60,62,68],{"type":47,"value":61},"Implements ",{"type":41,"tag":63,"props":64,"children":65},"strong",{},[66],{"type":47,"value":67},"equal-value exchange under ASC 845 (Nonmonetary Transactions)",{"type":47,"value":69}," for swap transactions\nin TRES Finance. In a simultaneous swap, the fair value of the asset surrendered (outflow) is the\nbest evidence of the fair value of the asset received (inflow). This skill reprices inflow legs to\nmatch outflow legs so that clearing accounts net to zero.",{"type":41,"tag":50,"props":71,"children":73},{"id":72},"when-to-use",[74],{"type":47,"value":75},"When to Use",{"type":41,"tag":77,"props":78,"children":79},"ul",{},[80,86,91],{"type":41,"tag":81,"props":82,"children":83},"li",{},[84],{"type":47,"value":85},"A swaps\u002Ftrade clearing account has a non-zero residual after month-end",{"type":41,"tag":81,"props":87,"children":88},{},[89],{"type":47,"value":90},"User wants to apply ASC 845 to a population of swap transactions",{"type":41,"tag":81,"props":92,"children":93},{},[94],{"type":47,"value":95},"User says \"setBatchUseCounterpartyFiatValue\" or similar",{"type":41,"tag":50,"props":97,"children":99},{"id":98},"mcp-server",[100],{"type":47,"value":101},"MCP Server",{"type":41,"tag":57,"props":103,"children":104},{},[105,107,117,119,125],{"type":47,"value":106},"All GraphQL calls use the ",{"type":41,"tag":63,"props":108,"children":109},{},[110],{"type":41,"tag":111,"props":112,"children":114},"code",{"className":113},[],[115],{"type":47,"value":116},"user-tres-finance",{"type":47,"value":118}," MCP server (",{"type":41,"tag":111,"props":120,"children":122},{"className":121},[],[123],{"type":47,"value":124},"execute",{"type":47,"value":126}," tool).",{"type":41,"tag":57,"props":128,"children":129},{},[130,132,137,139,145,147,153],{"type":47,"value":131},"Variable keys and nested input fields MUST use ",{"type":41,"tag":63,"props":133,"children":134},{},[135],{"type":47,"value":136},"camelCase",{"type":47,"value":138}," (e.g. ",{"type":41,"tag":111,"props":140,"children":142},{"className":141},[],[143],{"type":47,"value":144},"timestamp_Gte",{"type":47,"value":146},", not ",{"type":41,"tag":111,"props":148,"children":150},{"className":149},[],[151],{"type":47,"value":152},"timestamp_gte",{"type":47,"value":154},").",{"type":41,"tag":50,"props":156,"children":158},{"id":157},"prerequisites",[159],{"type":47,"value":160},"Prerequisites",{"type":41,"tag":77,"props":162,"children":163},{},[164,176],{"type":41,"tag":81,"props":165,"children":166},{},[167,169,174],{"type":47,"value":168},"TRES Finance MCP connection (",{"type":41,"tag":111,"props":170,"children":172},{"className":171},[],[173],{"type":47,"value":116},{"type":47,"value":175},")",{"type":41,"tag":81,"props":177,"children":178},{},[179,181],{"type":47,"value":180},"The user must specify:\n",{"type":41,"tag":182,"props":183,"children":184},"ol",{},[185,195,205],{"type":41,"tag":81,"props":186,"children":187},{},[188,193],{"type":41,"tag":63,"props":189,"children":190},{},[191],{"type":47,"value":192},"Target ERP account",{"type":47,"value":194}," — the clearing account to zero out (e.g. \"Swaps Clearing Account\", NS #818)",{"type":41,"tag":81,"props":196,"children":197},{},[198,203],{"type":41,"tag":63,"props":199,"children":200},{},[201],{"type":47,"value":202},"Transaction scope",{"type":47,"value":204}," — either a date range (timestamp_Gte \u002F timestamp_Lte) or specific tx hashes",{"type":41,"tag":81,"props":206,"children":207},{},[208,213],{"type":41,"tag":63,"props":209,"children":210},{},[211],{"type":47,"value":212},"Confirmation",{"type":47,"value":214}," — user must approve before mutations are executed",{"type":41,"tag":50,"props":216,"children":218},{"id":217},"workflow",[219],{"type":47,"value":220},"Workflow",{"type":41,"tag":222,"props":223,"children":225},"h3",{"id":224},"step-1-gather-parameters",[226],{"type":47,"value":227},"Step 1: Gather Parameters",{"type":41,"tag":57,"props":229,"children":230},{},[231],{"type":47,"value":232},"Ask the user for:",{"type":41,"tag":77,"props":234,"children":235},{},[236,241,246,264,269],{"type":41,"tag":81,"props":237,"children":238},{},[239],{"type":47,"value":240},"Target ERP account name or ID (the clearing account)",{"type":41,"tag":81,"props":242,"children":243},{},[244],{"type":47,"value":245},"Date range OR list of transaction hashes",{"type":41,"tag":81,"props":247,"children":248},{},[249,254,256,262],{"type":41,"tag":63,"props":250,"children":251},{},[252],{"type":47,"value":253},"Activity tags",{"type":47,"value":255}," (optional) — filter to only transactions with specific classification activities\n(e.g. \"STAKING LOCKUP\", \"SWAP\"). None, one, or many may be selected. If omitted, all activities\nare included. Use ",{"type":41,"tag":111,"props":257,"children":259},{"className":258},[],[260],{"type":47,"value":261},"tx_Classification_Activity_In",{"type":47,"value":263}," on the TRES query.",{"type":41,"tag":81,"props":265,"children":266},{},[267],{"type":47,"value":268},"Currency (default: USD)",{"type":41,"tag":81,"props":270,"children":271},{},[272,274,279,281,285],{"type":47,"value":273},"Whether to run in ",{"type":41,"tag":63,"props":275,"children":276},{},[277],{"type":47,"value":278},"dry-run",{"type":47,"value":280}," (preview only) or ",{"type":41,"tag":63,"props":282,"children":283},{},[284],{"type":47,"value":124},{"type":47,"value":286}," mode",{"type":41,"tag":222,"props":288,"children":290},{"id":289},"step-2-query-subtransactions",[291],{"type":47,"value":292},"Step 2: Query Subtransactions",{"type":41,"tag":57,"props":294,"children":295},{},[296,298,304],{"type":47,"value":297},"Use the TRES ",{"type":41,"tag":111,"props":299,"children":301},{"className":300},[],[302],{"type":47,"value":303},"subTransaction",{"type":47,"value":305}," query to fetch all subtransactions in scope. Include these fields:",{"type":41,"tag":307,"props":308,"children":313},"pre",{"className":309,"code":310,"language":311,"meta":312,"style":312},"language-graphql shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  id\n  amount\n  balanceFactor\n  timestamp\n  fiatValue\n  isManualFiatValue\n  belongsTo { id name }\n  asset { assetClass { symbol } }\n  tx { id identifier classification { activity } }\n  flowRule {\n    ruleName\n    integrationAccount { name value }\n  }\n}\n","graphql","",[314],{"type":41,"tag":111,"props":315,"children":316},{"__ignoreMap":312},[317,328,337,346,355,364,373,382,391,400,409,418,427,436,445],{"type":41,"tag":318,"props":319,"children":322},"span",{"class":320,"line":321},"line",1,[323],{"type":41,"tag":318,"props":324,"children":325},{},[326],{"type":47,"value":327},"{\n",{"type":41,"tag":318,"props":329,"children":331},{"class":320,"line":330},2,[332],{"type":41,"tag":318,"props":333,"children":334},{},[335],{"type":47,"value":336},"  id\n",{"type":41,"tag":318,"props":338,"children":340},{"class":320,"line":339},3,[341],{"type":41,"tag":318,"props":342,"children":343},{},[344],{"type":47,"value":345},"  amount\n",{"type":41,"tag":318,"props":347,"children":349},{"class":320,"line":348},4,[350],{"type":41,"tag":318,"props":351,"children":352},{},[353],{"type":47,"value":354},"  balanceFactor\n",{"type":41,"tag":318,"props":356,"children":358},{"class":320,"line":357},5,[359],{"type":41,"tag":318,"props":360,"children":361},{},[362],{"type":47,"value":363},"  timestamp\n",{"type":41,"tag":318,"props":365,"children":367},{"class":320,"line":366},6,[368],{"type":41,"tag":318,"props":369,"children":370},{},[371],{"type":47,"value":372},"  fiatValue\n",{"type":41,"tag":318,"props":374,"children":376},{"class":320,"line":375},7,[377],{"type":41,"tag":318,"props":378,"children":379},{},[380],{"type":47,"value":381},"  isManualFiatValue\n",{"type":41,"tag":318,"props":383,"children":385},{"class":320,"line":384},8,[386],{"type":41,"tag":318,"props":387,"children":388},{},[389],{"type":47,"value":390},"  belongsTo { id name }\n",{"type":41,"tag":318,"props":392,"children":394},{"class":320,"line":393},9,[395],{"type":41,"tag":318,"props":396,"children":397},{},[398],{"type":47,"value":399},"  asset { assetClass { symbol } }\n",{"type":41,"tag":318,"props":401,"children":403},{"class":320,"line":402},10,[404],{"type":41,"tag":318,"props":405,"children":406},{},[407],{"type":47,"value":408},"  tx { id identifier classification { activity } }\n",{"type":41,"tag":318,"props":410,"children":412},{"class":320,"line":411},11,[413],{"type":41,"tag":318,"props":414,"children":415},{},[416],{"type":47,"value":417},"  flowRule {\n",{"type":41,"tag":318,"props":419,"children":421},{"class":320,"line":420},12,[422],{"type":41,"tag":318,"props":423,"children":424},{},[425],{"type":47,"value":426},"    ruleName\n",{"type":41,"tag":318,"props":428,"children":430},{"class":320,"line":429},13,[431],{"type":41,"tag":318,"props":432,"children":433},{},[434],{"type":47,"value":435},"    integrationAccount { name value }\n",{"type":41,"tag":318,"props":437,"children":439},{"class":320,"line":438},14,[440],{"type":41,"tag":318,"props":441,"children":442},{},[443],{"type":47,"value":444},"  }\n",{"type":41,"tag":318,"props":446,"children":448},{"class":320,"line":447},15,[449],{"type":41,"tag":318,"props":450,"children":451},{},[452],{"type":47,"value":453},"}\n",{"type":41,"tag":57,"props":455,"children":456},{},[457,459,465,467,473],{"type":47,"value":458},"If activity tags were specified, pass them as ",{"type":41,"tag":111,"props":460,"children":462},{"className":461},[],[463],{"type":47,"value":464},"tx_Classification_Activity_In: [\"STAKING LOCKUP\", \"SWAP\"]",{"type":47,"value":466},"\non the query. Note: transactions with ",{"type":41,"tag":111,"props":468,"children":470},{"className":469},[],[471],{"type":47,"value":472},"classification: null",{"type":47,"value":474}," will be excluded when this filter is used,\nso only apply it when the user explicitly requests it.",{"type":41,"tag":57,"props":476,"children":477},{},[478],{"type":47,"value":479},"Paginate in batches of 50 (to avoid timeouts). Save the combined results to a JSON file for the orchestrator script.",{"type":41,"tag":222,"props":481,"children":483},{"id":482},"step-3-run-the-orchestrator-script",[484],{"type":47,"value":485},"Step 3: Run the Orchestrator Script",{"type":41,"tag":57,"props":487,"children":488},{},[489,491,497,499,505],{"type":47,"value":490},"From the skill ",{"type":41,"tag":111,"props":492,"children":494},{"className":493},[],[495],{"type":47,"value":496},"scripts\u002F",{"type":47,"value":498}," directory, run ",{"type":41,"tag":111,"props":500,"children":502},{"className":501},[],[503],{"type":47,"value":504},"orchestrate_reprice.py",{"type":47,"value":506}," (handles MCP response shapes, account filter, preview, and mutation JSON):",{"type":41,"tag":307,"props":508,"children":512},{"className":509,"code":510,"language":511,"meta":312,"style":312},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","cd \"${CLAUDE_PLUGIN_ROOT}\u002Fskills\u002Ftres-asc845-swap-reprice-skill\u002Fscripts\" && \\\npython3 orchestrate_reprice.py \\\n  --input \u002Fpath\u002Fto\u002Fswap_reprice_input.json \\\n  --account-name \"Swaps Clearing Account\" \\\n  --output \u002Fpath\u002Fto\u002Freprice_plan.json \\\n  --mutations-output \u002Fpath\u002Fto\u002Freprice_mutations.json\n","bash",[513],{"type":41,"tag":111,"props":514,"children":515},{"__ignoreMap":312},[516,563,581,598,624,641],{"type":41,"tag":318,"props":517,"children":518},{"class":320,"line":321},[519,525,531,537,542,548,553,558],{"type":41,"tag":318,"props":520,"children":522},{"style":521},"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF",[523],{"type":47,"value":524},"cd",{"type":41,"tag":318,"props":526,"children":528},{"style":527},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[529],{"type":47,"value":530}," \"${",{"type":41,"tag":318,"props":532,"children":534},{"style":533},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[535],{"type":47,"value":536},"CLAUDE_PLUGIN_ROOT",{"type":41,"tag":318,"props":538,"children":539},{"style":527},[540],{"type":47,"value":541},"}",{"type":41,"tag":318,"props":543,"children":545},{"style":544},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[546],{"type":47,"value":547},"\u002Fskills\u002Ftres-asc845-swap-reprice-skill\u002Fscripts",{"type":41,"tag":318,"props":549,"children":550},{"style":527},[551],{"type":47,"value":552},"\"",{"type":41,"tag":318,"props":554,"children":555},{"style":527},[556],{"type":47,"value":557}," &&",{"type":41,"tag":318,"props":559,"children":560},{"style":533},[561],{"type":47,"value":562}," \\\n",{"type":41,"tag":318,"props":564,"children":565},{"class":320,"line":330},[566,572,577],{"type":41,"tag":318,"props":567,"children":569},{"style":568},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[570],{"type":47,"value":571},"python3",{"type":41,"tag":318,"props":573,"children":574},{"style":544},[575],{"type":47,"value":576}," orchestrate_reprice.py",{"type":41,"tag":318,"props":578,"children":579},{"style":533},[580],{"type":47,"value":562},{"type":41,"tag":318,"props":582,"children":583},{"class":320,"line":339},[584,589,594],{"type":41,"tag":318,"props":585,"children":586},{"style":544},[587],{"type":47,"value":588},"  --input",{"type":41,"tag":318,"props":590,"children":591},{"style":544},[592],{"type":47,"value":593}," \u002Fpath\u002Fto\u002Fswap_reprice_input.json",{"type":41,"tag":318,"props":595,"children":596},{"style":533},[597],{"type":47,"value":562},{"type":41,"tag":318,"props":599,"children":600},{"class":320,"line":348},[601,606,611,616,620],{"type":41,"tag":318,"props":602,"children":603},{"style":544},[604],{"type":47,"value":605},"  --account-name",{"type":41,"tag":318,"props":607,"children":608},{"style":527},[609],{"type":47,"value":610}," \"",{"type":41,"tag":318,"props":612,"children":613},{"style":544},[614],{"type":47,"value":615},"Swaps Clearing Account",{"type":41,"tag":318,"props":617,"children":618},{"style":527},[619],{"type":47,"value":552},{"type":41,"tag":318,"props":621,"children":622},{"style":533},[623],{"type":47,"value":562},{"type":41,"tag":318,"props":625,"children":626},{"class":320,"line":357},[627,632,637],{"type":41,"tag":318,"props":628,"children":629},{"style":544},[630],{"type":47,"value":631},"  --output",{"type":41,"tag":318,"props":633,"children":634},{"style":544},[635],{"type":47,"value":636}," \u002Fpath\u002Fto\u002Freprice_plan.json",{"type":41,"tag":318,"props":638,"children":639},{"style":533},[640],{"type":47,"value":562},{"type":41,"tag":318,"props":642,"children":643},{"class":320,"line":366},[644,649],{"type":41,"tag":318,"props":645,"children":646},{"style":544},[647],{"type":47,"value":648},"  --mutations-output",{"type":41,"tag":318,"props":650,"children":651},{"style":544},[652],{"type":47,"value":653}," \u002Fpath\u002Fto\u002Freprice_mutations.json\n",{"type":41,"tag":57,"props":655,"children":656},{},[657,659,665,667,673,675,681],{"type":47,"value":658},"Use ",{"type":41,"tag":111,"props":660,"children":662},{"className":661},[],[663],{"type":47,"value":664},"--account-value",{"type":47,"value":666}," instead of ",{"type":41,"tag":111,"props":668,"children":670},{"className":669},[],[671],{"type":47,"value":672},"--account-name",{"type":47,"value":674}," when filtering by ERP account number. Pass ",{"type":41,"tag":111,"props":676,"children":678},{"className":677},[],[679],{"type":47,"value":680},"--activity-tags SWAP \"STAKING LOCKUP\"",{"type":47,"value":682}," when the user requested activity filters.",{"type":41,"tag":57,"props":684,"children":685},{},[686],{"type":47,"value":687},"The script prints a preview to stdout and writes:",{"type":41,"tag":77,"props":689,"children":690},{},[691,702],{"type":41,"tag":81,"props":692,"children":693},{},[694,700],{"type":41,"tag":111,"props":695,"children":697},{"className":696},[],[698],{"type":47,"value":699},"reprice_plan.json",{"type":47,"value":701}," — full plan with per-transaction adjustments",{"type":41,"tag":81,"props":703,"children":704},{},[705,711,713,719],{"type":41,"tag":111,"props":706,"children":708},{"className":707},[],[709],{"type":47,"value":710},"reprice_mutations.json",{"type":47,"value":712}," — ready-to-execute ",{"type":41,"tag":111,"props":714,"children":716},{"className":715},[],[717],{"type":47,"value":718},"setManualFiatValue",{"type":47,"value":720}," variables",{"type":41,"tag":57,"props":722,"children":723},{},[724,726,732,734,740],{"type":47,"value":725},"For lower-level repricing only (no orchestration), use ",{"type":41,"tag":111,"props":727,"children":729},{"className":728},[],[730],{"type":47,"value":731},"reprice_swaps.py",{"type":47,"value":733}," directly — see ",{"type":41,"tag":111,"props":735,"children":737},{"className":736},[],[738],{"type":47,"value":739},"scripts\u002Freprice_swaps.py",{"type":47,"value":741}," for flags.",{"type":41,"tag":222,"props":743,"children":745},{"id":744},"step-4-repricing-logic-asc-845",[746],{"type":47,"value":747},"Step 4: Repricing Logic (ASC 845)",{"type":41,"tag":57,"props":749,"children":750},{},[751,753,758],{"type":47,"value":752},"The orchestrator implements the logic below. Read ",{"type":41,"tag":111,"props":754,"children":756},{"className":755},[],[757],{"type":47,"value":739},{"type":47,"value":759}," for the canonical implementation.",{"type":41,"tag":57,"props":761,"children":762},{},[763,765,770,772,777],{"type":47,"value":764},"The core principle: calculate the ",{"type":41,"tag":63,"props":766,"children":767},{},[768],{"type":47,"value":769},"difference",{"type":47,"value":771}," between total outflow fiat and total inflow fiat,\nthen distribute that difference across inflows ",{"type":41,"tag":63,"props":773,"children":774},{},[775],{"type":47,"value":776},"in proportion to their token amounts",{"type":47,"value":778},". This\npreserves the original pricing as a base and makes the minimum adjustment needed.",{"type":41,"tag":57,"props":780,"children":781},{},[782],{"type":47,"value":783},"For each parent transaction:",{"type":41,"tag":57,"props":785,"children":786},{},[787],{"type":41,"tag":63,"props":788,"children":789},{},[790],{"type":47,"value":791},"Case 1: One outflow, one inflow",{"type":41,"tag":307,"props":793,"children":797},{"className":794,"code":796,"language":47},[795],"language-text","inflow.newFiatValue = outflow.fiatValue\n",[798],{"type":41,"tag":111,"props":799,"children":800},{"__ignoreMap":312},[801],{"type":47,"value":796},{"type":41,"tag":57,"props":803,"children":804},{},[805],{"type":41,"tag":63,"props":806,"children":807},{},[808],{"type":47,"value":809},"Case 2: One outflow, many inflows",{"type":41,"tag":307,"props":811,"children":814},{"className":812,"code":813,"language":47},[795],"difference = outflow.fiatValue - sum(inflow.fiatValue for each inflow)\ntotalInflowTokens = sum(inflow.amount for each inflow)\nfor each inflow:\n    tokenProportion = inflow.amount \u002F totalInflowTokens\n    inflow.newFiatValue = inflow.fiatValue + (difference * tokenProportion)\n",[815],{"type":41,"tag":111,"props":816,"children":817},{"__ignoreMap":312},[818],{"type":47,"value":813},{"type":41,"tag":57,"props":820,"children":821},{},[822],{"type":41,"tag":63,"props":823,"children":824},{},[825],{"type":47,"value":826},"Case 3: Many outflows, one inflow",{"type":41,"tag":307,"props":828,"children":831},{"className":829,"code":830,"language":47},[795],"inflow.newFiatValue = sum(outflow.fiatValue for each outflow)\n",[832],{"type":41,"tag":111,"props":833,"children":834},{"__ignoreMap":312},[835],{"type":47,"value":830},{"type":41,"tag":57,"props":837,"children":838},{},[839],{"type":41,"tag":63,"props":840,"children":841},{},[842],{"type":47,"value":843},"Case 4: Many outflows, many inflows",{"type":41,"tag":307,"props":845,"children":848},{"className":846,"code":847,"language":47},[795],"totalOutflowFiat = sum(outflow.fiatValue for each outflow)\ntotalInflowFiat = sum(inflow.fiatValue for each inflow)\ndifference = totalOutflowFiat - totalInflowFiat\ntotalInflowTokens = sum(inflow.amount for each inflow)\nfor each inflow:\n    tokenProportion = inflow.amount \u002F totalInflowTokens\n    inflow.newFiatValue = inflow.fiatValue + (difference * tokenProportion)\n",[849],{"type":41,"tag":111,"props":850,"children":851},{"__ignoreMap":312},[852],{"type":47,"value":847},{"type":41,"tag":57,"props":854,"children":855},{},[856],{"type":41,"tag":63,"props":857,"children":858},{},[859],{"type":47,"value":860},"Worked example (Case 2):",{"type":41,"tag":307,"props":862,"children":865},{"className":863,"code":864,"language":47},[795],"Before:  Outflow = 100 tokens @ $100 | Inflows = 25 tokens @ $25, 25 @ $25, 35 @ $35 (total $85)\n         Difference = $100 - $85 = $15 | Total inflow tokens = 85\n\nAfter:   Inflow 1: $25 + ($15 × 25\u002F85) = $25 + $4.41 = $29.41\n         Inflow 2: $25 + ($15 × 25\u002F85) = $25 + $4.41 = $29.41\n         Inflow 3: $35 + ($15 × 35\u002F85) = $35 + $6.18 = $41.18\n         Total inflows after = $100.00 ✓  (clearing account nets to zero)\n",[866],{"type":41,"tag":111,"props":867,"children":868},{"__ignoreMap":312},[869],{"type":47,"value":864},{"type":41,"tag":57,"props":871,"children":872},{},[873],{"type":41,"tag":63,"props":874,"children":875},{},[876],{"type":47,"value":877},"Edge cases:",{"type":41,"tag":77,"props":879,"children":880},{},[881,894,907,912],{"type":41,"tag":81,"props":882,"children":883},{},[884,886,892],{"type":47,"value":885},"If ",{"type":41,"tag":111,"props":887,"children":889},{"className":888},[],[890],{"type":47,"value":891},"totalInflowTokens == 0",{"type":47,"value":893},", distribute the difference equally across inflows",{"type":41,"tag":81,"props":895,"children":896},{},[897,899,905],{"type":47,"value":898},"If a subtransaction already has ",{"type":41,"tag":111,"props":900,"children":902},{"className":901},[],[903],{"type":47,"value":904},"isManualFiatValue == true",{"type":47,"value":906},", flag it for user review (it was already manually repriced)",{"type":41,"tag":81,"props":908,"children":909},{},[910],{"type":47,"value":911},"Skip transactions with only outflows or only inflows (not a complete swap)",{"type":41,"tag":81,"props":913,"children":914},{},[915],{"type":47,"value":916},"Last inflow in the group receives the remainder to absorb rounding (ensures exact match)",{"type":41,"tag":222,"props":918,"children":920},{"id":919},"step-5-preview-the-reprice-plan",[921],{"type":47,"value":922},"Step 5: Preview the Reprice Plan",{"type":41,"tag":57,"props":924,"children":925},{},[926],{"type":47,"value":927},"Present the orchestrator stdout summary and\u002For the plan JSON to the user:",{"type":41,"tag":307,"props":929,"children":932},{"className":930,"code":931,"language":47},[795],"TX Identifier | Outflow Total | Inflow Before | Inflow After | Adjustment\n------------- | ------------- | ------------- | ------------ | ----------\n0xabc...      | $1,234.56     | $1,230.00     | $1,234.56    | +$4.56\n0xdef...      | $5,678.90     | $5,670.00     | $5,678.90    | +$8.90\n",[933],{"type":41,"tag":111,"props":934,"children":935},{"__ignoreMap":312},[936],{"type":47,"value":931},{"type":41,"tag":57,"props":938,"children":939},{},[940],{"type":47,"value":941},"Also show aggregate stats:",{"type":41,"tag":77,"props":943,"children":944},{},[945,950,955,960,965,970],{"type":41,"tag":81,"props":946,"children":947},{},[948],{"type":47,"value":949},"Total transactions affected",{"type":41,"tag":81,"props":951,"children":952},{},[953],{"type":47,"value":954},"Total outflow fiat",{"type":41,"tag":81,"props":956,"children":957},{},[958],{"type":47,"value":959},"Total inflow fiat (before)",{"type":41,"tag":81,"props":961,"children":962},{},[963],{"type":47,"value":964},"Total inflow fiat (after)",{"type":41,"tag":81,"props":966,"children":967},{},[968],{"type":47,"value":969},"Net clearing account residual (before → after, should go to $0)",{"type":41,"tag":81,"props":971,"children":972},{},[973],{"type":47,"value":974},"Count of already-manually-priced subtxs being overwritten",{"type":41,"tag":222,"props":976,"children":978},{"id":977},"step-6-execute-with-user-confirmation",[979],{"type":47,"value":980},"Step 6: Execute (with user confirmation)",{"type":41,"tag":57,"props":982,"children":983},{},[984],{"type":41,"tag":63,"props":985,"children":986},{},[987],{"type":47,"value":988},"Never run mutations without explicit user confirmation.",{"type":41,"tag":57,"props":990,"children":991},{},[992,994,999,1001,1006],{"type":47,"value":993},"Only after the user confirms, execute ",{"type":41,"tag":111,"props":995,"children":997},{"className":996},[],[998],{"type":47,"value":718},{"type":47,"value":1000}," for each inflow subtransaction (use variables from ",{"type":41,"tag":111,"props":1002,"children":1004},{"className":1003},[],[1005],{"type":47,"value":710},{"type":47,"value":1007},"):",{"type":41,"tag":307,"props":1009,"children":1011},{"className":309,"code":1010,"language":311,"meta":312,"style":312},"mutation SetManualFiatValue($id: ID!, $newFiatValue: String!, $currency: String) {\n  setManualFiatValue(id: $id, newFiatValue: $newFiatValue, currency: $currency) {\n    subTransaction {\n      id\n      fiatValue\n      isManualFiatValue\n    }\n  }\n}\n",[1012],{"type":41,"tag":111,"props":1013,"children":1014},{"__ignoreMap":312},[1015,1023,1031,1039,1047,1055,1063,1071,1078],{"type":41,"tag":318,"props":1016,"children":1017},{"class":320,"line":321},[1018],{"type":41,"tag":318,"props":1019,"children":1020},{},[1021],{"type":47,"value":1022},"mutation SetManualFiatValue($id: ID!, $newFiatValue: String!, $currency: String) {\n",{"type":41,"tag":318,"props":1024,"children":1025},{"class":320,"line":330},[1026],{"type":41,"tag":318,"props":1027,"children":1028},{},[1029],{"type":47,"value":1030},"  setManualFiatValue(id: $id, newFiatValue: $newFiatValue, currency: $currency) {\n",{"type":41,"tag":318,"props":1032,"children":1033},{"class":320,"line":339},[1034],{"type":41,"tag":318,"props":1035,"children":1036},{},[1037],{"type":47,"value":1038},"    subTransaction {\n",{"type":41,"tag":318,"props":1040,"children":1041},{"class":320,"line":348},[1042],{"type":41,"tag":318,"props":1043,"children":1044},{},[1045],{"type":47,"value":1046},"      id\n",{"type":41,"tag":318,"props":1048,"children":1049},{"class":320,"line":357},[1050],{"type":41,"tag":318,"props":1051,"children":1052},{},[1053],{"type":47,"value":1054},"      fiatValue\n",{"type":41,"tag":318,"props":1056,"children":1057},{"class":320,"line":366},[1058],{"type":41,"tag":318,"props":1059,"children":1060},{},[1061],{"type":47,"value":1062},"      isManualFiatValue\n",{"type":41,"tag":318,"props":1064,"children":1065},{"class":320,"line":375},[1066],{"type":41,"tag":318,"props":1067,"children":1068},{},[1069],{"type":47,"value":1070},"    }\n",{"type":41,"tag":318,"props":1072,"children":1073},{"class":320,"line":384},[1074],{"type":41,"tag":318,"props":1075,"children":1076},{},[1077],{"type":47,"value":444},{"type":41,"tag":318,"props":1079,"children":1080},{"class":320,"line":393},[1081],{"type":41,"tag":318,"props":1082,"children":1083},{},[1084],{"type":47,"value":453},{"type":41,"tag":57,"props":1086,"children":1087},{},[1088,1090,1096],{"type":47,"value":1089},"Execute one at a time (not batch) to handle locked-period errors gracefully.\nIf ",{"type":41,"tag":111,"props":1091,"children":1093},{"className":1092},[],[1094],{"type":47,"value":1095},"setBatchManualFiatValue",{"type":47,"value":1097}," is preferred for speed, group inflows by asset\nwhere a uniform per-unit price applies.",{"type":41,"tag":57,"props":1099,"children":1100},{},[1101,1106,1108,1113,1115,1121,1123,1128,1129,1135,1137,1143,1145,1151],{"type":41,"tag":63,"props":1102,"children":1103},{},[1104],{"type":47,"value":1105},"Important",{"type":47,"value":1107},": ",{"type":41,"tag":111,"props":1109,"children":1111},{"className":1110},[],[1112],{"type":47,"value":718},{"type":47,"value":1114}," takes ",{"type":41,"tag":111,"props":1116,"children":1118},{"className":1117},[],[1119],{"type":47,"value":1120},"newFiatValue",{"type":47,"value":1122}," as a string.\n",{"type":41,"tag":111,"props":1124,"children":1126},{"className":1125},[],[1127],{"type":47,"value":1095},{"type":47,"value":1114},{"type":41,"tag":111,"props":1130,"children":1132},{"className":1131},[],[1133],{"type":47,"value":1134},"ids",{"type":47,"value":1136}," (list) and ",{"type":41,"tag":111,"props":1138,"children":1140},{"className":1139},[],[1141],{"type":47,"value":1142},"newUnitValue",{"type":47,"value":1144}," (Float) and computes\n",{"type":41,"tag":111,"props":1146,"children":1148},{"className":1147},[],[1149],{"type":47,"value":1150},"newUnitValue * amount",{"type":47,"value":1152}," — only use this if all subtxs in the batch should have the same unit price.",{"type":41,"tag":222,"props":1154,"children":1156},{"id":1155},"step-7-verify",[1157],{"type":47,"value":1158},"Step 7: Verify",{"type":41,"tag":57,"props":1160,"children":1161},{},[1162],{"type":47,"value":1163},"Re-query the subtransactions and re-aggregate to confirm the clearing account now nets to zero.",{"type":41,"tag":50,"props":1165,"children":1167},{"id":1166},"error-handling",[1168],{"type":47,"value":1169},"Error Handling",{"type":41,"tag":77,"props":1171,"children":1172},{},[1173,1199,1209,1219],{"type":41,"tag":81,"props":1174,"children":1175},{},[1176,1181,1183,1189,1191,1197],{"type":41,"tag":63,"props":1177,"children":1178},{},[1179],{"type":47,"value":1180},"Locked period",{"type":47,"value":1182},": If a subtransaction is in a locked period, warn the user. They must unlock\nvia ",{"type":41,"tag":111,"props":1184,"children":1186},{"className":1185},[],[1187],{"type":47,"value":1188},"deleteLockedPeriod",{"type":47,"value":1190},", apply changes, then re-lock via ",{"type":41,"tag":111,"props":1192,"children":1194},{"className":1193},[],[1195],{"type":47,"value":1196},"createLockedPeriod",{"type":47,"value":1198},".",{"type":41,"tag":81,"props":1200,"children":1201},{},[1202,1207],{"type":41,"tag":63,"props":1203,"children":1204},{},[1205],{"type":47,"value":1206},"Missing fiat values",{"type":47,"value":1208},": If outflow fiatValue is null, skip the transaction and flag it.",{"type":41,"tag":81,"props":1210,"children":1211},{},[1212,1217],{"type":41,"tag":63,"props":1213,"children":1214},{},[1215],{"type":47,"value":1216},"Zero-value legs",{"type":47,"value":1218},": If outflow total is $0, skip (nothing to propagate).",{"type":41,"tag":81,"props":1220,"children":1221},{},[1222,1227],{"type":41,"tag":63,"props":1223,"children":1224},{},[1225],{"type":47,"value":1226},"Already manual",{"type":47,"value":1228},": Flag but still overwrite — only after the user confirmed the batch.",{"type":41,"tag":50,"props":1230,"children":1232},{"id":1231},"script-reference",[1233],{"type":47,"value":1234},"Script Reference",{"type":41,"tag":1236,"props":1237,"children":1238},"table",{},[1239,1258],{"type":41,"tag":1240,"props":1241,"children":1242},"thead",{},[1243],{"type":41,"tag":1244,"props":1245,"children":1246},"tr",{},[1247,1253],{"type":41,"tag":1248,"props":1249,"children":1250},"th",{},[1251],{"type":47,"value":1252},"Script",{"type":41,"tag":1248,"props":1254,"children":1255},{},[1256],{"type":47,"value":1257},"Role",{"type":41,"tag":1259,"props":1260,"children":1261},"tbody",{},[1262,1280],{"type":41,"tag":1244,"props":1263,"children":1264},{},[1265,1275],{"type":41,"tag":1266,"props":1267,"children":1268},"td",{},[1269],{"type":41,"tag":111,"props":1270,"children":1272},{"className":1271},[],[1273],{"type":47,"value":1274},"scripts\u002Forchestrate_reprice.py",{"type":41,"tag":1266,"props":1276,"children":1277},{},[1278],{"type":47,"value":1279},"Primary entry — parse MCP JSON, filter, preview, write plan + mutations",{"type":41,"tag":1244,"props":1281,"children":1282},{},[1283,1291],{"type":41,"tag":1266,"props":1284,"children":1285},{},[1286],{"type":41,"tag":111,"props":1287,"children":1289},{"className":1288},[],[1290],{"type":47,"value":739},{"type":41,"tag":1266,"props":1292,"children":1293},{},[1294],{"type":47,"value":1295},"Core ASC 845 repricing engine (imported by orchestrator; usable standalone)",{"type":41,"tag":1297,"props":1298,"children":1299},"style",{},[1300],{"type":47,"value":1301},"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":1303,"total":1405},[1304,1323,1342,1356,1368,1380,1392],{"slug":1305,"name":1305,"fn":1306,"description":1307,"org":1308,"tags":1309,"stars":23,"repoUrl":24,"updatedAt":1322},"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},[1310,1313,1316,1319],{"name":1311,"slug":1312,"type":16},"Creative","creative",{"name":1314,"slug":1315,"type":16},"Image Generation","image-generation",{"name":1317,"slug":1318,"type":16},"Marketing","marketing",{"name":1320,"slug":1321,"type":16},"Video","video","2026-07-01T08:09:32.316182",{"slug":1324,"name":1324,"fn":1325,"description":1326,"org":1327,"tags":1328,"stars":23,"repoUrl":24,"updatedAt":1341},"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},[1329,1332,1335,1338],{"name":1330,"slug":1331,"type":16},"Audit","audit",{"name":1333,"slug":1334,"type":16},"Code Analysis","code-analysis",{"name":1336,"slug":1337,"type":16},"Playwright","playwright",{"name":1339,"slug":1340,"type":16},"Testing","testing","2026-07-02T07:37:17.341081",{"slug":1343,"name":1343,"fn":1344,"description":1345,"org":1346,"tags":1347,"stars":23,"repoUrl":24,"updatedAt":1355},"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},[1348,1351,1354],{"name":1349,"slug":1350,"type":16},"Monitoring","monitoring",{"name":1352,"slug":1353,"type":16},"QA","qa",{"name":1339,"slug":1340,"type":16},"2026-07-02T07:37:18.566504",{"slug":1357,"name":1357,"fn":1358,"description":1359,"org":1360,"tags":1361,"stars":23,"repoUrl":24,"updatedAt":1367},"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},[1362,1365,1366],{"name":1363,"slug":1364,"type":16},"Operations","operations",{"name":1352,"slug":1353,"type":16},{"name":1339,"slug":1340,"type":16},"2026-07-02T07:37:23.446065",{"slug":1369,"name":1369,"fn":1370,"description":1371,"org":1372,"tags":1373,"stars":23,"repoUrl":24,"updatedAt":1379},"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},[1374,1377,1378],{"name":1375,"slug":1376,"type":16},"Documentation","documentation",{"name":1352,"slug":1353,"type":16},{"name":1339,"slug":1340,"type":16},"2026-07-02T07:37:22.247052",{"slug":1381,"name":1381,"fn":1382,"description":1383,"org":1384,"tags":1385,"stars":23,"repoUrl":24,"updatedAt":1391},"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},[1386,1389,1390],{"name":1387,"slug":1388,"type":16},"Project Management","project-management",{"name":1352,"slug":1353,"type":16},{"name":1339,"slug":1340,"type":16},"2026-07-02T07:37:19.793846",{"slug":1393,"name":1393,"fn":1394,"description":1395,"org":1396,"tags":1397,"stars":23,"repoUrl":24,"updatedAt":1404},"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},[1398,1401,1402,1403],{"name":1399,"slug":1400,"type":16},"Debugging","debugging",{"name":1336,"slug":1337,"type":16},{"name":1352,"slug":1353,"type":16},{"name":1339,"slug":1340,"type":16},"2026-07-02T07:37:16.07175",30,{"items":1407,"total":1590},[1408,1427,1441,1453,1472,1483,1504,1524,1538,1553,1561,1574],{"slug":1409,"name":1409,"fn":1410,"description":1411,"org":1412,"tags":1413,"stars":1424,"repoUrl":1425,"updatedAt":1426},"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},[1414,1415,1418,1421],{"name":1311,"slug":1312,"type":16},{"name":1416,"slug":1417,"type":16},"Design","design",{"name":1419,"slug":1420,"type":16},"Generative Art","generative-art",{"name":1422,"slug":1423,"type":16},"JavaScript","javascript",161831,"https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fskills","2026-04-06T17:56:15.455818",{"slug":1428,"name":1428,"fn":1429,"description":1430,"org":1431,"tags":1432,"stars":1424,"repoUrl":1425,"updatedAt":1440},"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},[1433,1436,1437],{"name":1434,"slug":1435,"type":16},"Branding","branding",{"name":1416,"slug":1417,"type":16},{"name":1438,"slug":1439,"type":16},"Typography","typography","2026-04-06T17:56:05.042852",{"slug":1442,"name":1442,"fn":1443,"description":1444,"org":1445,"tags":1446,"stars":1424,"repoUrl":1425,"updatedAt":1452},"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},[1447,1448,1449],{"name":1311,"slug":1312,"type":16},{"name":1416,"slug":1417,"type":16},{"name":1450,"slug":1451,"type":16},"PDF","pdf","2026-04-06T17:56:03.794732",{"slug":1454,"name":1454,"fn":1455,"description":1456,"org":1457,"tags":1458,"stars":1424,"repoUrl":1425,"updatedAt":1471},"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},[1459,1462,1463,1466,1468],{"name":1460,"slug":1461,"type":16},"Agents","agents",{"name":9,"slug":8,"type":16},{"name":1464,"slug":1465,"type":16},"Anthropic SDK","anthropic-sdk",{"name":1467,"slug":1454,"type":16},"Claude API",{"name":1469,"slug":1470,"type":16},"LLM","llm","2026-07-28T05:36:08.213335",{"slug":1473,"name":1473,"fn":1474,"description":1475,"org":1476,"tags":1477,"stars":1424,"repoUrl":1425,"updatedAt":1482},"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},[1478,1479],{"name":1375,"slug":1376,"type":16},{"name":1480,"slug":1481,"type":16},"Technical Writing","technical-writing","2026-04-06T17:56:14.18897",{"slug":1484,"name":1484,"fn":1485,"description":1486,"org":1487,"tags":1488,"stars":1424,"repoUrl":1425,"updatedAt":1503},"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},[1489,1492,1494,1497,1500],{"name":1490,"slug":1491,"type":16},"Documents","documents",{"name":1493,"slug":1484,"type":16},"DOCX",{"name":1495,"slug":1496,"type":16},"Office","office",{"name":1498,"slug":1499,"type":16},"Templates","templates",{"name":1501,"slug":1502,"type":16},"Word","word","2026-07-18T05:16:23.136271",{"slug":1505,"name":1505,"fn":1506,"description":1507,"org":1508,"tags":1509,"stars":1424,"repoUrl":1425,"updatedAt":1523},"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},[1510,1511,1514,1517,1520],{"name":1416,"slug":1417,"type":16},{"name":1512,"slug":1513,"type":16},"Frontend","frontend",{"name":1515,"slug":1516,"type":16},"React","react",{"name":1518,"slug":1519,"type":16},"Tailwind CSS","tailwind-css",{"name":1521,"slug":1522,"type":16},"UI Components","ui-components","2026-04-06T17:56:16.723469",{"slug":1525,"name":1525,"fn":1526,"description":1527,"org":1528,"tags":1529,"stars":1424,"repoUrl":1425,"updatedAt":1537},"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},[1530,1533,1534],{"name":1531,"slug":1532,"type":16},"Communications","communications",{"name":1498,"slug":1499,"type":16},{"name":1535,"slug":1536,"type":16},"Writing","writing","2026-04-06T17:56:20.695522",{"slug":1539,"name":1539,"fn":1540,"description":1541,"org":1542,"tags":1543,"stars":1424,"repoUrl":1425,"updatedAt":1552},"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},[1544,1545,1548,1549],{"name":1460,"slug":1461,"type":16},{"name":1546,"slug":1547,"type":16},"API Development","api-development",{"name":1469,"slug":1470,"type":16},{"name":1550,"slug":1551,"type":16},"MCP","mcp","2026-04-06T17:56:10.357665",{"slug":1451,"name":1451,"fn":1554,"description":1555,"org":1556,"tags":1557,"stars":1424,"repoUrl":1425,"updatedAt":1560},"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},[1558,1559],{"name":1490,"slug":1491,"type":16},{"name":1450,"slug":1451,"type":16},"2026-04-06T17:56:02.483316",{"slug":1562,"name":1562,"fn":1563,"description":1564,"org":1565,"tags":1566,"stars":1424,"repoUrl":1425,"updatedAt":1573},"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},[1567,1570],{"name":1568,"slug":1569,"type":16},"PowerPoint","powerpoint",{"name":1571,"slug":1572,"type":16},"Presentations","presentations","2026-07-18T05:16:24.1471",{"slug":1575,"name":1575,"fn":1576,"description":1577,"org":1578,"tags":1579,"stars":1424,"repoUrl":1425,"updatedAt":1589},"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},[1580,1581,1582,1585,1588],{"name":1460,"slug":1461,"type":16},{"name":1375,"slug":1376,"type":16},{"name":1583,"slug":1584,"type":16},"Evals","evals",{"name":1586,"slug":1587,"type":16},"Performance","performance",{"name":1480,"slug":1481,"type":16},"2026-04-19T06:45:40.804",490]