[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-anthropic-tres-rollup-review":3,"mdc--bc004e-key":34,"related-repo-anthropic-tres-rollup-review":1756,"related-org-anthropic-tres-rollup-review":1860},{"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-rollup-review","review TRES Finance rollup rule impact","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.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},"anthropic","Anthropic","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fanthropic.png","anthropics",[13,17,20],{"name":14,"slug":15,"type":16},"Finance","finance","tag",{"name":18,"slug":19,"type":16},"Accounting","accounting",{"name":21,"slug":22,"type":16},"Data Analysis","data-analysis",294,"https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fclaude-plugins-community","2026-07-02T07:37:47.834538",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-rollup-review","---\nname: tres-rollup-review\ndescription: >\n  Compute the EXACT sub-transaction impact of a rollup rule in TRES Finance — every\n  filter applied — and flag genuine problems (zero matches, overlap, config mistakes)\n  before the rule is created. Two modes. Mode A: a pre-create quality gate invoked by\n  the tres-rollup-rules skill to vet proposed candidate rules. Mode B: standalone review\n  of a rule someone submitted or of existing PENDING rules. Trigger this skill when the\n  user says \"review this rollup rule\", \"what would this rollup rule actually match\",\n  \"preview the rollup impact\", \"how many transactions would this rule catch\", \"is this\n  rollup rule valid\", \"validate my rollup rule\", \"check my pending rollup rules\", or\n  \"review the rollup requests\". Do NOT use this to design or propose new rollups — that\n  is tres-rollup-rules. This skill only measures impact and flags issues; it never\n  executes mutations.\ncompatibility: \"Requires TRES Finance MCP connector\"\n---\n\n# TRES Finance — Rollup Review\n\nTake a fully-specified rollup rule and compute **exactly** which sub-transactions it\nwill claim — with every one of its filters applied — then flag genuine problems. You\ndo NOT design new rollups and you do NOT execute mutations.\n\nAll GraphQL runs through the **TRES Finance MCP connector** (`execute` tool). All\nvariable keys and nested input fields MUST use **camelCase**, never snake_case.\n\n---\n\n## What this adds over tres-rollup-rules\n\nThe `tres-rollup-rules` discovery step groups sub-txs only at the\n(wallet, asset, direction) level — it never applies a single candidate's *full* filter\ncombination (fees + method_ids + subtx_type + amount bounds + counterparty +\nexcludeRollups together). This skill does exactly that, per rule, via the\n`subTransactionRollupRulePreview` query (which runs the engine's real\n`query_sub_transactions`), giving:\n\n- the **exact** match count → the **zero-match gate** (a rule that matches nothing must\n  not be created), and\n- pre-create **overlap awareness**, so the user only ever sees viable proposals.\n\nIt is also usable **standalone** to review a rule someone submitted (Mode B) — a case\nthe discovery skill doesn't cover.\n\n---\n\n## Two modes\n\n### Mode A — pre-create gate (invoked by `tres-rollup-rules`)\n\nWhen `tres-rollup-rules` invokes this skill (via the Skill tool), these instructions\nload into the **same** context that already holds the candidate rule objects — they\nare not passed as arguments, they are already in the conversation above. Iterate those\ncandidates **one at a time**; for each, run the checks below and emit exactly one\nverdict:\n\n- **PASS** — clean, ready to propose (include the exact sub-tx + parent-tx count).\n- **DROP** — matches 0 sub-txs; must not be created.\n- **FIX** — a config problem with the exact change (e.g. \"minAmount > maxAmount\",\n  \"recipientIdentifier on an INFLOW rule — should be senderIdentifier\").\n\nOverlaps are reported as **notes**, not DROP\u002FFIX (see Check 2). Produce one verdict line\nper candidate, then control returns to `tres-rollup-rules` Step 2.5.\n\n### Mode B — standalone review (when asked to review submitted\u002Fpending rules)\n\nFetch pending rules and review each; produce a per-rule findings summary.\n\n```graphql\nquery PendingRollupRules {\n  subTransactionRollupRule(status: \"Pending\", limit: 50) {\n    totalCount\n    results { id name interval startDate endDate status rule createdBy createdAt }\n  }\n}\n```\n\nThe status filter is title-case (`\"Pending\"`, `\"Active\"`, `\"Disabled\"`). If\n`totalCount` is 0, say \"No pending rollup requests in this org\" and stop.\n\n---\n\n## Ground truth — how a rule selects sub-transactions\n\nA rule claims sub-transactions matching ALL of (this mirrors the engine's\n`query_sub_transactions`):\n\n- `belongsTo_In: [internal_account_id]`, `asset_In: [asset_id]` (the asset KEY),\n  `platform` matches, `balanceFactor` matches `balance_factor`\n- already-rolled-up (`excludeRollups`) and derived\u002Flocked\u002Fsynced sub-txs excluded\n- `fees`: `EXCLUDE` drops GAS\u002FFEE, `ONLY` keeps only GAS\u002FFEE, `INCLUDE` keeps all\n- optional narrowing: `method_ids`, `min_amount`\u002F`max_amount`, `subtx_type`,\n  `sender_identifier`\u002F`recipient_identifier`,\n  `original_sender_prefix`\u002F`original_recipient_prefix`\n\nThe rule JSON (as stored \u002F returned) uses snake_case. `balance_factor = -1` is\n**OUTFLOW**, `+1` is **INFLOW** — get this right or every direction check is backwards.\n\n### Verified subTransaction filter names\n\n| Intent | Filter |\n|---|---|\n| Wallet | `belongsTo_In: [ID]` |\n| Asset by key | `asset_In: [ID]` |\n| Direction | `balanceFactor: Float` (-1 \u002F 1) |\n| Min \u002F max amount | `amount_Gte` \u002F `amount_Lte` |\n| Sender \u002F recipient | `sender_Identifier_In: [String]` \u002F `recipient_Identifier_In: [String]` |\n| Method id | `tx_MethodId: String` (single) \u002F `tx_Classification_MethodId_In: [String]` |\n| Sub-tx type | `type: String` \u002F `type_In: [String]` (lowercase FinancialAction value) |\n| Exclude already-rolled-up | `excludeRollups: true` |\n| Exclude gas\u002Ffee | `excludeGasFees: true` |\n| Dates | `timestamp_Gte` \u002F `timestamp_Lte` (DateTime) |\n\n`type` \u002F `type_In` take the **lowercase** FinancialAction value (`\"gas\"`, `\"fee\"`,\n`\"reward\"`, …) — opposite casing from the rule's UPPERCASE `subtxType` enum. So\n`subtx_type` is countable exactly (`type: \"\u003Cvalue>\"`) and `fees: ONLY` ≈\n`type_In: [\"gas\", \"fee\"]`.\n\n> Gotcha: `fees: ONLY` already selects GAS+FEE, so a gas\u002Ffee rollup needs `fees: ONLY`\n> alone — adding `subtxType: GAS` on top is redundant (and narrows to GAS, dropping FEE).\n\n**`typeId` is NOT a rule filter here.** `type_id` is only the rollup rule's id **when\npaired with** `type_In: [\"rollup\", \"rollup_fee\"]`. On other types it means something\nelse entirely. To inspect what an existing rollup rule produced, query\n`type_In: [\"rollup\",\"rollup_fee\"], typeId: \"\u003Crule_id>\"` — never `typeId` alone.\n\n**Sentinel dates (operational note):** if `startDate == \"0001-01-01\"` or\n`endDate == \"9999-12-31\"`, omit that bound (don't pass the sentinel — it may not parse).\nUnbounded dates are normal and preferred; they are NOT a finding.\n\n**Evidence:** the on-chain hash is `tx.identifier` (sub-select `tx { identifier }`),\nnever `typeId`. For examples also pull `amount`, `sender { identifier }`,\n`recipient { identifier }`, `asset { symbol key }`.\n\n---\n\n## Scope — DISABLED rules are out of scope\n\nOnly **Active** and **Pending** rules are live. Never query, compare against, or flag\nDISABLED rules (they're superseded versions).\n\n---\n\n## The checks\n\n### Check 1 — Exact impact (the core; always run)\n\nGet the ground-truth count straight from the engine via the\n`subTransactionRollupRulePreview` query — it runs the real `query_sub_transactions`\nwith **all** of the rule's filters applied server-side, so you never reconstruct\nfilters by hand:\n\n```graphql\nquery RollupPreview($rule: RollupRuleInputType!, $startDate: Date, $endDate: Date, $interval: Interval) {\n  subTransactionRollupRulePreview(rule: $rule, startDate: $startDate, endDate: $endDate, interval: $interval) {\n    subTransactionCount\n    transactionCount\n  }\n}\n```\n\nPass the candidate's rule object verbatim as `$rule` — the **same camelCase shape as the\ncreate mutation** (`internalAccountId`, `assetId`, `platform` + `balanceFactor` + `fees`\nas enum NAMES like `OUTFLOW`\u002F`ONLY`, plus any\n`methodIds`\u002F`subtxType`\u002F`minAmount`\u002F`maxAmount`\u002Fidentifiers). **Always pass `$interval`**\n= the candidate's interval (`DAY` or `MONTH`); it governs how the eligibility-window\nboundary is normalized, so a MONTH rule and a DAY rule over the same data can return\ndifferent counts. `startDate`\u002F`endDate` are optional `YYYY-MM-DD` — omit for the rule's\nfull unbounded range.\n\nThe count is **what the rule would actually roll up on its next run**, not raw all-time\nmatches: the engine funnels the window through its own eligibility logic, so the\n**current incomplete period and the unsynced\u002Fbuffer tail are excluded**.\n`transactionCount` is the distinct parent-tx count. (Already-rolled-up sub-txs are also\nexcluded — for what an *existing* rule has already produced, see the existing-rule\nsection below.)\n\n- **subTransactionCount == 0 → DROP (Mode A) \u002F blocking flag (Mode B):** \"matches 0\n  sub-txs as configured\" — name the filters that zero it out (common culprits:\n  `minAmount > maxAmount`, an identifier on the wrong direction, or an inverted date\n  range). The reason is the useful part.\n\n> **If `subTransactionRollupRulePreview` is not in this org's MCP schema** (confirm with\n> `validate_query` or `introspect`), fall back to a fully-filtered count query: a single\n> `subTransaction(... excludeRollups: true ...)` that applies every one of the rule's\n> filters using the verified filter-name table above, selecting only `totalCount`. This\n> is slightly less precise than the engine preview (it does not exclude the incomplete\n> period \u002F buffer tail) — say so when you report the number, and keep the `~` prefix.\n\n### Check 2 — Overlap (informational, NOT a hard limit)\n\nAnother **Active\u002FPending** rule (or another candidate) on the same `internalAccountId` +\n`assetId` + `platform` + `balanceFactor` with intersecting dates and non-disjoint\nfilters can claim some of the same sub-txs. This is **not** blocking: the engine\nprocesses rules one-by-one ordered by id (PK), so a sub-tx matching multiple rules is\nalways claimed by the same rule consistently. Surface it as a note (other rule name + id,\nup to 3 example tx hashes) so the user is aware — never DROP or force a split for overlap\nalone.\n\n**No separate config-validation check.** Date-order, identifier-on-wrong-direction,\nmutually-exclusive prefixes, and bad `cutoffTime` are enforced by the create mutation\n(returned as blocking `validationIssues`) — don't re-validate them here. A start date set\nto clear a locked period is a **good** use, not a flag (leave the end date open).\n\n### Existing-rule impact (Mode B — reviewing an Active\u002FPending rule)\n\nDo NOT call an existing rule useless because Check 1 returns a low count. A running rule\nhas already rolled up its pool, and those rollups are excluded from Check 1 — so a rule\nthat has been doing its job shows only the few recent un-rolled sub-txs. Also count what\nit **produced**:\n`subTransaction(type_In: [\"rollup\",\"rollup_fee\"], typeId: \"\u003Crule_id>\") { totalCount }`.\nReport both — \"currently matches N new sub-txs; has already produced M rollups\". A rule\nis only ineffective if it has produced ~nothing **and** matches ~nothing now. (If its\nfilter looks stale — e.g. a `methodId` that no longer matches new txs — say *that*, with\nthe produced-vs-current numbers, rather than \"useless\".)\n\n---\n\n## Output\n\n**Mode A:** one line per candidate back to `tres-rollup-rules`:\n`\u003C#> \u003Cname>: PASS (\u003Csubtx>\u002F\u003Ctx> sub-txs)` \u002F `DROP — \u003Creason>` \u002F `FIX — \u003Cchange>`, plus any\noverlap notes.\n\n**Mode B:** one findings block per rule. Flat bullet list, each bullet with concrete\nevidence; omit a check that found nothing. Always include the impact line. If clean:\n\"Reviewed *\u003Cname>* (id \u003Cid>) — matches ~\u003Ccount> sub-txs across ~\u003Ctx count> txs. No\nissues.\"\n\n---\n\n## Rules\n\n- Never query, compare against, or flag DISABLED rules.\n- Never propose new rollups or optimizations — that's `tres-rollup-rules`. You only\n  compute impact and flag problems.\n- Never execute mutations.\n- Every flag carries evidence (a count, a date, a config value, or a tx hash).\n",{"data":35,"body":37},{"name":4,"description":6,"compatibility":36},"Requires TRES Finance MCP connector",{"type":38,"children":39},"root",[40,49,63,91,95,102,139,175,187,190,196,210,236,269,288,294,299,366,402,405,411,423,576,610,616,857,943,974,1027,1053,1114,1117,1123,1142,1145,1151,1157,1183,1236,1382,1416,1437,1495,1501,1546,1579,1585,1627,1630,1636,1674,1711,1714,1720,1750],{"type":41,"tag":42,"props":43,"children":45},"element","h1",{"id":44},"tres-finance-rollup-review",[46],{"type":47,"value":48},"text","TRES Finance — Rollup Review",{"type":41,"tag":50,"props":51,"children":52},"p",{},[53,55,61],{"type":47,"value":54},"Take a fully-specified rollup rule and compute ",{"type":41,"tag":56,"props":57,"children":58},"strong",{},[59],{"type":47,"value":60},"exactly",{"type":47,"value":62}," which sub-transactions it\nwill claim — with every one of its filters applied — then flag genuine problems. You\ndo NOT design new rollups and you do NOT execute mutations.",{"type":41,"tag":50,"props":64,"children":65},{},[66,68,73,75,82,84,89],{"type":47,"value":67},"All GraphQL runs through the ",{"type":41,"tag":56,"props":69,"children":70},{},[71],{"type":47,"value":72},"TRES Finance MCP connector",{"type":47,"value":74}," (",{"type":41,"tag":76,"props":77,"children":79},"code",{"className":78},[],[80],{"type":47,"value":81},"execute",{"type":47,"value":83}," tool). All\nvariable keys and nested input fields MUST use ",{"type":41,"tag":56,"props":85,"children":86},{},[87],{"type":47,"value":88},"camelCase",{"type":47,"value":90},", never snake_case.",{"type":41,"tag":92,"props":93,"children":94},"hr",{},[],{"type":41,"tag":96,"props":97,"children":99},"h2",{"id":98},"what-this-adds-over-tres-rollup-rules",[100],{"type":47,"value":101},"What this adds over tres-rollup-rules",{"type":41,"tag":50,"props":103,"children":104},{},[105,107,113,115,121,123,129,131,137],{"type":47,"value":106},"The ",{"type":41,"tag":76,"props":108,"children":110},{"className":109},[],[111],{"type":47,"value":112},"tres-rollup-rules",{"type":47,"value":114}," discovery step groups sub-txs only at the\n(wallet, asset, direction) level — it never applies a single candidate's ",{"type":41,"tag":116,"props":117,"children":118},"em",{},[119],{"type":47,"value":120},"full",{"type":47,"value":122}," filter\ncombination (fees + method_ids + subtx_type + amount bounds + counterparty +\nexcludeRollups together). This skill does exactly that, per rule, via the\n",{"type":41,"tag":76,"props":124,"children":126},{"className":125},[],[127],{"type":47,"value":128},"subTransactionRollupRulePreview",{"type":47,"value":130}," query (which runs the engine's real\n",{"type":41,"tag":76,"props":132,"children":134},{"className":133},[],[135],{"type":47,"value":136},"query_sub_transactions",{"type":47,"value":138},"), giving:",{"type":41,"tag":140,"props":141,"children":142},"ul",{},[143,163],{"type":41,"tag":144,"props":145,"children":146},"li",{},[147,149,154,156,161],{"type":47,"value":148},"the ",{"type":41,"tag":56,"props":150,"children":151},{},[152],{"type":47,"value":153},"exact",{"type":47,"value":155}," match count → the ",{"type":41,"tag":56,"props":157,"children":158},{},[159],{"type":47,"value":160},"zero-match gate",{"type":47,"value":162}," (a rule that matches nothing must\nnot be created), and",{"type":41,"tag":144,"props":164,"children":165},{},[166,168,173],{"type":47,"value":167},"pre-create ",{"type":41,"tag":56,"props":169,"children":170},{},[171],{"type":47,"value":172},"overlap awareness",{"type":47,"value":174},", so the user only ever sees viable proposals.",{"type":41,"tag":50,"props":176,"children":177},{},[178,180,185],{"type":47,"value":179},"It is also usable ",{"type":41,"tag":56,"props":181,"children":182},{},[183],{"type":47,"value":184},"standalone",{"type":47,"value":186}," to review a rule someone submitted (Mode B) — a case\nthe discovery skill doesn't cover.",{"type":41,"tag":92,"props":188,"children":189},{},[],{"type":41,"tag":96,"props":191,"children":193},{"id":192},"two-modes",[194],{"type":47,"value":195},"Two modes",{"type":41,"tag":197,"props":198,"children":200},"h3",{"id":199},"mode-a-pre-create-gate-invoked-by-tres-rollup-rules",[201,203,208],{"type":47,"value":202},"Mode A — pre-create gate (invoked by ",{"type":41,"tag":76,"props":204,"children":206},{"className":205},[],[207],{"type":47,"value":112},{"type":47,"value":209},")",{"type":41,"tag":50,"props":211,"children":212},{},[213,215,220,222,227,229,234],{"type":47,"value":214},"When ",{"type":41,"tag":76,"props":216,"children":218},{"className":217},[],[219],{"type":47,"value":112},{"type":47,"value":221}," invokes this skill (via the Skill tool), these instructions\nload into the ",{"type":41,"tag":56,"props":223,"children":224},{},[225],{"type":47,"value":226},"same",{"type":47,"value":228}," context that already holds the candidate rule objects — they\nare not passed as arguments, they are already in the conversation above. Iterate those\ncandidates ",{"type":41,"tag":56,"props":230,"children":231},{},[232],{"type":47,"value":233},"one at a time",{"type":47,"value":235},"; for each, run the checks below and emit exactly one\nverdict:",{"type":41,"tag":140,"props":237,"children":238},{},[239,249,259],{"type":41,"tag":144,"props":240,"children":241},{},[242,247],{"type":41,"tag":56,"props":243,"children":244},{},[245],{"type":47,"value":246},"PASS",{"type":47,"value":248}," — clean, ready to propose (include the exact sub-tx + parent-tx count).",{"type":41,"tag":144,"props":250,"children":251},{},[252,257],{"type":41,"tag":56,"props":253,"children":254},{},[255],{"type":47,"value":256},"DROP",{"type":47,"value":258}," — matches 0 sub-txs; must not be created.",{"type":41,"tag":144,"props":260,"children":261},{},[262,267],{"type":41,"tag":56,"props":263,"children":264},{},[265],{"type":47,"value":266},"FIX",{"type":47,"value":268}," — a config problem with the exact change (e.g. \"minAmount > maxAmount\",\n\"recipientIdentifier on an INFLOW rule — should be senderIdentifier\").",{"type":41,"tag":50,"props":270,"children":271},{},[272,274,279,281,286],{"type":47,"value":273},"Overlaps are reported as ",{"type":41,"tag":56,"props":275,"children":276},{},[277],{"type":47,"value":278},"notes",{"type":47,"value":280},", not DROP\u002FFIX (see Check 2). Produce one verdict line\nper candidate, then control returns to ",{"type":41,"tag":76,"props":282,"children":284},{"className":283},[],[285],{"type":47,"value":112},{"type":47,"value":287}," Step 2.5.",{"type":41,"tag":197,"props":289,"children":291},{"id":290},"mode-b-standalone-review-when-asked-to-review-submittedpending-rules",[292],{"type":47,"value":293},"Mode B — standalone review (when asked to review submitted\u002Fpending rules)",{"type":41,"tag":50,"props":295,"children":296},{},[297],{"type":47,"value":298},"Fetch pending rules and review each; produce a per-rule findings summary.",{"type":41,"tag":300,"props":301,"children":306},"pre",{"className":302,"code":303,"language":304,"meta":305,"style":305},"language-graphql shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","query PendingRollupRules {\n  subTransactionRollupRule(status: \"Pending\", limit: 50) {\n    totalCount\n    results { id name interval startDate endDate status rule createdBy createdAt }\n  }\n}\n","graphql","",[307],{"type":41,"tag":76,"props":308,"children":309},{"__ignoreMap":305},[310,321,330,339,348,357],{"type":41,"tag":311,"props":312,"children":315},"span",{"class":313,"line":314},"line",1,[316],{"type":41,"tag":311,"props":317,"children":318},{},[319],{"type":47,"value":320},"query PendingRollupRules {\n",{"type":41,"tag":311,"props":322,"children":324},{"class":313,"line":323},2,[325],{"type":41,"tag":311,"props":326,"children":327},{},[328],{"type":47,"value":329},"  subTransactionRollupRule(status: \"Pending\", limit: 50) {\n",{"type":41,"tag":311,"props":331,"children":333},{"class":313,"line":332},3,[334],{"type":41,"tag":311,"props":335,"children":336},{},[337],{"type":47,"value":338},"    totalCount\n",{"type":41,"tag":311,"props":340,"children":342},{"class":313,"line":341},4,[343],{"type":41,"tag":311,"props":344,"children":345},{},[346],{"type":47,"value":347},"    results { id name interval startDate endDate status rule createdBy createdAt }\n",{"type":41,"tag":311,"props":349,"children":351},{"class":313,"line":350},5,[352],{"type":41,"tag":311,"props":353,"children":354},{},[355],{"type":47,"value":356},"  }\n",{"type":41,"tag":311,"props":358,"children":360},{"class":313,"line":359},6,[361],{"type":41,"tag":311,"props":362,"children":363},{},[364],{"type":47,"value":365},"}\n",{"type":41,"tag":50,"props":367,"children":368},{},[369,371,377,379,385,386,392,394,400],{"type":47,"value":370},"The status filter is title-case (",{"type":41,"tag":76,"props":372,"children":374},{"className":373},[],[375],{"type":47,"value":376},"\"Pending\"",{"type":47,"value":378},", ",{"type":41,"tag":76,"props":380,"children":382},{"className":381},[],[383],{"type":47,"value":384},"\"Active\"",{"type":47,"value":378},{"type":41,"tag":76,"props":387,"children":389},{"className":388},[],[390],{"type":47,"value":391},"\"Disabled\"",{"type":47,"value":393},"). If\n",{"type":41,"tag":76,"props":395,"children":397},{"className":396},[],[398],{"type":47,"value":399},"totalCount",{"type":47,"value":401}," is 0, say \"No pending rollup requests in this org\" and stop.",{"type":41,"tag":92,"props":403,"children":404},{},[],{"type":41,"tag":96,"props":406,"children":408},{"id":407},"ground-truth-how-a-rule-selects-sub-transactions",[409],{"type":47,"value":410},"Ground truth — how a rule selects sub-transactions",{"type":41,"tag":50,"props":412,"children":413},{},[414,416,421],{"type":47,"value":415},"A rule claims sub-transactions matching ALL of (this mirrors the engine's\n",{"type":41,"tag":76,"props":417,"children":419},{"className":418},[],[420],{"type":47,"value":136},{"type":47,"value":422},"):",{"type":41,"tag":140,"props":424,"children":425},{},[426,466,479,514],{"type":41,"tag":144,"props":427,"children":428},{},[429,435,436,442,444,450,452,458,460],{"type":41,"tag":76,"props":430,"children":432},{"className":431},[],[433],{"type":47,"value":434},"belongsTo_In: [internal_account_id]",{"type":47,"value":378},{"type":41,"tag":76,"props":437,"children":439},{"className":438},[],[440],{"type":47,"value":441},"asset_In: [asset_id]",{"type":47,"value":443}," (the asset KEY),\n",{"type":41,"tag":76,"props":445,"children":447},{"className":446},[],[448],{"type":47,"value":449},"platform",{"type":47,"value":451}," matches, ",{"type":41,"tag":76,"props":453,"children":455},{"className":454},[],[456],{"type":47,"value":457},"balanceFactor",{"type":47,"value":459}," matches ",{"type":41,"tag":76,"props":461,"children":463},{"className":462},[],[464],{"type":47,"value":465},"balance_factor",{"type":41,"tag":144,"props":467,"children":468},{},[469,471,477],{"type":47,"value":470},"already-rolled-up (",{"type":41,"tag":76,"props":472,"children":474},{"className":473},[],[475],{"type":47,"value":476},"excludeRollups",{"type":47,"value":478},") and derived\u002Flocked\u002Fsynced sub-txs excluded",{"type":41,"tag":144,"props":480,"children":481},{},[482,488,490,496,498,504,506,512],{"type":41,"tag":76,"props":483,"children":485},{"className":484},[],[486],{"type":47,"value":487},"fees",{"type":47,"value":489},": ",{"type":41,"tag":76,"props":491,"children":493},{"className":492},[],[494],{"type":47,"value":495},"EXCLUDE",{"type":47,"value":497}," drops GAS\u002FFEE, ",{"type":41,"tag":76,"props":499,"children":501},{"className":500},[],[502],{"type":47,"value":503},"ONLY",{"type":47,"value":505}," keeps only GAS\u002FFEE, ",{"type":41,"tag":76,"props":507,"children":509},{"className":508},[],[510],{"type":47,"value":511},"INCLUDE",{"type":47,"value":513}," keeps all",{"type":41,"tag":144,"props":515,"children":516},{},[517,519,525,526,532,534,540,541,547,549,555,556,562,563,569,570],{"type":47,"value":518},"optional narrowing: ",{"type":41,"tag":76,"props":520,"children":522},{"className":521},[],[523],{"type":47,"value":524},"method_ids",{"type":47,"value":378},{"type":41,"tag":76,"props":527,"children":529},{"className":528},[],[530],{"type":47,"value":531},"min_amount",{"type":47,"value":533},"\u002F",{"type":41,"tag":76,"props":535,"children":537},{"className":536},[],[538],{"type":47,"value":539},"max_amount",{"type":47,"value":378},{"type":41,"tag":76,"props":542,"children":544},{"className":543},[],[545],{"type":47,"value":546},"subtx_type",{"type":47,"value":548},",\n",{"type":41,"tag":76,"props":550,"children":552},{"className":551},[],[553],{"type":47,"value":554},"sender_identifier",{"type":47,"value":533},{"type":41,"tag":76,"props":557,"children":559},{"className":558},[],[560],{"type":47,"value":561},"recipient_identifier",{"type":47,"value":548},{"type":41,"tag":76,"props":564,"children":566},{"className":565},[],[567],{"type":47,"value":568},"original_sender_prefix",{"type":47,"value":533},{"type":41,"tag":76,"props":571,"children":573},{"className":572},[],[574],{"type":47,"value":575},"original_recipient_prefix",{"type":41,"tag":50,"props":577,"children":578},{},[579,581,587,589,594,595,601,603,608],{"type":47,"value":580},"The rule JSON (as stored \u002F returned) uses snake_case. ",{"type":41,"tag":76,"props":582,"children":584},{"className":583},[],[585],{"type":47,"value":586},"balance_factor = -1",{"type":47,"value":588}," is\n",{"type":41,"tag":56,"props":590,"children":591},{},[592],{"type":47,"value":593},"OUTFLOW",{"type":47,"value":378},{"type":41,"tag":76,"props":596,"children":598},{"className":597},[],[599],{"type":47,"value":600},"+1",{"type":47,"value":602}," is ",{"type":41,"tag":56,"props":604,"children":605},{},[606],{"type":47,"value":607},"INFLOW",{"type":47,"value":609}," — get this right or every direction check is backwards.",{"type":41,"tag":197,"props":611,"children":613},{"id":612},"verified-subtransaction-filter-names",[614],{"type":47,"value":615},"Verified subTransaction filter names",{"type":41,"tag":617,"props":618,"children":619},"table",{},[620,639],{"type":41,"tag":621,"props":622,"children":623},"thead",{},[624],{"type":41,"tag":625,"props":626,"children":627},"tr",{},[628,634],{"type":41,"tag":629,"props":630,"children":631},"th",{},[632],{"type":47,"value":633},"Intent",{"type":41,"tag":629,"props":635,"children":636},{},[637],{"type":47,"value":638},"Filter",{"type":41,"tag":640,"props":641,"children":642},"tbody",{},[643,661,678,697,722,746,771,797,814,831],{"type":41,"tag":625,"props":644,"children":645},{},[646,652],{"type":41,"tag":647,"props":648,"children":649},"td",{},[650],{"type":47,"value":651},"Wallet",{"type":41,"tag":647,"props":653,"children":654},{},[655],{"type":41,"tag":76,"props":656,"children":658},{"className":657},[],[659],{"type":47,"value":660},"belongsTo_In: [ID]",{"type":41,"tag":625,"props":662,"children":663},{},[664,669],{"type":41,"tag":647,"props":665,"children":666},{},[667],{"type":47,"value":668},"Asset by key",{"type":41,"tag":647,"props":670,"children":671},{},[672],{"type":41,"tag":76,"props":673,"children":675},{"className":674},[],[676],{"type":47,"value":677},"asset_In: [ID]",{"type":41,"tag":625,"props":679,"children":680},{},[681,686],{"type":41,"tag":647,"props":682,"children":683},{},[684],{"type":47,"value":685},"Direction",{"type":41,"tag":647,"props":687,"children":688},{},[689,695],{"type":41,"tag":76,"props":690,"children":692},{"className":691},[],[693],{"type":47,"value":694},"balanceFactor: Float",{"type":47,"value":696}," (-1 \u002F 1)",{"type":41,"tag":625,"props":698,"children":699},{},[700,705],{"type":41,"tag":647,"props":701,"children":702},{},[703],{"type":47,"value":704},"Min \u002F max amount",{"type":41,"tag":647,"props":706,"children":707},{},[708,714,716],{"type":41,"tag":76,"props":709,"children":711},{"className":710},[],[712],{"type":47,"value":713},"amount_Gte",{"type":47,"value":715}," \u002F ",{"type":41,"tag":76,"props":717,"children":719},{"className":718},[],[720],{"type":47,"value":721},"amount_Lte",{"type":41,"tag":625,"props":723,"children":724},{},[725,730],{"type":41,"tag":647,"props":726,"children":727},{},[728],{"type":47,"value":729},"Sender \u002F recipient",{"type":41,"tag":647,"props":731,"children":732},{},[733,739,740],{"type":41,"tag":76,"props":734,"children":736},{"className":735},[],[737],{"type":47,"value":738},"sender_Identifier_In: [String]",{"type":47,"value":715},{"type":41,"tag":76,"props":741,"children":743},{"className":742},[],[744],{"type":47,"value":745},"recipient_Identifier_In: [String]",{"type":41,"tag":625,"props":747,"children":748},{},[749,754],{"type":41,"tag":647,"props":750,"children":751},{},[752],{"type":47,"value":753},"Method id",{"type":41,"tag":647,"props":755,"children":756},{},[757,763,765],{"type":41,"tag":76,"props":758,"children":760},{"className":759},[],[761],{"type":47,"value":762},"tx_MethodId: String",{"type":47,"value":764}," (single) \u002F ",{"type":41,"tag":76,"props":766,"children":768},{"className":767},[],[769],{"type":47,"value":770},"tx_Classification_MethodId_In: [String]",{"type":41,"tag":625,"props":772,"children":773},{},[774,779],{"type":41,"tag":647,"props":775,"children":776},{},[777],{"type":47,"value":778},"Sub-tx type",{"type":41,"tag":647,"props":780,"children":781},{},[782,788,789,795],{"type":41,"tag":76,"props":783,"children":785},{"className":784},[],[786],{"type":47,"value":787},"type: String",{"type":47,"value":715},{"type":41,"tag":76,"props":790,"children":792},{"className":791},[],[793],{"type":47,"value":794},"type_In: [String]",{"type":47,"value":796}," (lowercase FinancialAction value)",{"type":41,"tag":625,"props":798,"children":799},{},[800,805],{"type":41,"tag":647,"props":801,"children":802},{},[803],{"type":47,"value":804},"Exclude already-rolled-up",{"type":41,"tag":647,"props":806,"children":807},{},[808],{"type":41,"tag":76,"props":809,"children":811},{"className":810},[],[812],{"type":47,"value":813},"excludeRollups: true",{"type":41,"tag":625,"props":815,"children":816},{},[817,822],{"type":41,"tag":647,"props":818,"children":819},{},[820],{"type":47,"value":821},"Exclude gas\u002Ffee",{"type":41,"tag":647,"props":823,"children":824},{},[825],{"type":41,"tag":76,"props":826,"children":828},{"className":827},[],[829],{"type":47,"value":830},"excludeGasFees: true",{"type":41,"tag":625,"props":832,"children":833},{},[834,839],{"type":41,"tag":647,"props":835,"children":836},{},[837],{"type":47,"value":838},"Dates",{"type":41,"tag":647,"props":840,"children":841},{},[842,848,849,855],{"type":41,"tag":76,"props":843,"children":845},{"className":844},[],[846],{"type":47,"value":847},"timestamp_Gte",{"type":47,"value":715},{"type":41,"tag":76,"props":850,"children":852},{"className":851},[],[853],{"type":47,"value":854},"timestamp_Lte",{"type":47,"value":856}," (DateTime)",{"type":41,"tag":50,"props":858,"children":859},{},[860,866,867,873,875,880,882,888,889,895,896,902,904,910,912,917,919,925,927,933,935,941],{"type":41,"tag":76,"props":861,"children":863},{"className":862},[],[864],{"type":47,"value":865},"type",{"type":47,"value":715},{"type":41,"tag":76,"props":868,"children":870},{"className":869},[],[871],{"type":47,"value":872},"type_In",{"type":47,"value":874}," take the ",{"type":41,"tag":56,"props":876,"children":877},{},[878],{"type":47,"value":879},"lowercase",{"type":47,"value":881}," FinancialAction value (",{"type":41,"tag":76,"props":883,"children":885},{"className":884},[],[886],{"type":47,"value":887},"\"gas\"",{"type":47,"value":378},{"type":41,"tag":76,"props":890,"children":892},{"className":891},[],[893],{"type":47,"value":894},"\"fee\"",{"type":47,"value":548},{"type":41,"tag":76,"props":897,"children":899},{"className":898},[],[900],{"type":47,"value":901},"\"reward\"",{"type":47,"value":903},", …) — opposite casing from the rule's UPPERCASE ",{"type":41,"tag":76,"props":905,"children":907},{"className":906},[],[908],{"type":47,"value":909},"subtxType",{"type":47,"value":911}," enum. So\n",{"type":41,"tag":76,"props":913,"children":915},{"className":914},[],[916],{"type":47,"value":546},{"type":47,"value":918}," is countable exactly (",{"type":41,"tag":76,"props":920,"children":922},{"className":921},[],[923],{"type":47,"value":924},"type: \"\u003Cvalue>\"",{"type":47,"value":926},") and ",{"type":41,"tag":76,"props":928,"children":930},{"className":929},[],[931],{"type":47,"value":932},"fees: ONLY",{"type":47,"value":934}," ≈\n",{"type":41,"tag":76,"props":936,"children":938},{"className":937},[],[939],{"type":47,"value":940},"type_In: [\"gas\", \"fee\"]",{"type":47,"value":942},".",{"type":41,"tag":944,"props":945,"children":946},"blockquote",{},[947],{"type":41,"tag":50,"props":948,"children":949},{},[950,952,957,959,964,966,972],{"type":47,"value":951},"Gotcha: ",{"type":41,"tag":76,"props":953,"children":955},{"className":954},[],[956],{"type":47,"value":932},{"type":47,"value":958}," already selects GAS+FEE, so a gas\u002Ffee rollup needs ",{"type":41,"tag":76,"props":960,"children":962},{"className":961},[],[963],{"type":47,"value":932},{"type":47,"value":965},"\nalone — adding ",{"type":41,"tag":76,"props":967,"children":969},{"className":968},[],[970],{"type":47,"value":971},"subtxType: GAS",{"type":47,"value":973}," on top is redundant (and narrows to GAS, dropping FEE).",{"type":41,"tag":50,"props":975,"children":976},{},[977,988,990,996,998,1003,1004,1010,1012,1018,1020,1025],{"type":41,"tag":56,"props":978,"children":979},{},[980,986],{"type":41,"tag":76,"props":981,"children":983},{"className":982},[],[984],{"type":47,"value":985},"typeId",{"type":47,"value":987}," is NOT a rule filter here.",{"type":47,"value":989}," ",{"type":41,"tag":76,"props":991,"children":993},{"className":992},[],[994],{"type":47,"value":995},"type_id",{"type":47,"value":997}," is only the rollup rule's id ",{"type":41,"tag":56,"props":999,"children":1000},{},[1001],{"type":47,"value":1002},"when\npaired with",{"type":47,"value":989},{"type":41,"tag":76,"props":1005,"children":1007},{"className":1006},[],[1008],{"type":47,"value":1009},"type_In: [\"rollup\", \"rollup_fee\"]",{"type":47,"value":1011},". On other types it means something\nelse entirely. To inspect what an existing rollup rule produced, query\n",{"type":41,"tag":76,"props":1013,"children":1015},{"className":1014},[],[1016],{"type":47,"value":1017},"type_In: [\"rollup\",\"rollup_fee\"], typeId: \"\u003Crule_id>\"",{"type":47,"value":1019}," — never ",{"type":41,"tag":76,"props":1021,"children":1023},{"className":1022},[],[1024],{"type":47,"value":985},{"type":47,"value":1026}," alone.",{"type":41,"tag":50,"props":1028,"children":1029},{},[1030,1035,1037,1043,1045,1051],{"type":41,"tag":56,"props":1031,"children":1032},{},[1033],{"type":47,"value":1034},"Sentinel dates (operational note):",{"type":47,"value":1036}," if ",{"type":41,"tag":76,"props":1038,"children":1040},{"className":1039},[],[1041],{"type":47,"value":1042},"startDate == \"0001-01-01\"",{"type":47,"value":1044}," or\n",{"type":41,"tag":76,"props":1046,"children":1048},{"className":1047},[],[1049],{"type":47,"value":1050},"endDate == \"9999-12-31\"",{"type":47,"value":1052},", omit that bound (don't pass the sentinel — it may not parse).\nUnbounded dates are normal and preferred; they are NOT a finding.",{"type":41,"tag":50,"props":1054,"children":1055},{},[1056,1061,1063,1069,1071,1077,1079,1084,1086,1092,1093,1099,1100,1106,1107,1113],{"type":41,"tag":56,"props":1057,"children":1058},{},[1059],{"type":47,"value":1060},"Evidence:",{"type":47,"value":1062}," the on-chain hash is ",{"type":41,"tag":76,"props":1064,"children":1066},{"className":1065},[],[1067],{"type":47,"value":1068},"tx.identifier",{"type":47,"value":1070}," (sub-select ",{"type":41,"tag":76,"props":1072,"children":1074},{"className":1073},[],[1075],{"type":47,"value":1076},"tx { identifier }",{"type":47,"value":1078},"),\nnever ",{"type":41,"tag":76,"props":1080,"children":1082},{"className":1081},[],[1083],{"type":47,"value":985},{"type":47,"value":1085},". For examples also pull ",{"type":41,"tag":76,"props":1087,"children":1089},{"className":1088},[],[1090],{"type":47,"value":1091},"amount",{"type":47,"value":378},{"type":41,"tag":76,"props":1094,"children":1096},{"className":1095},[],[1097],{"type":47,"value":1098},"sender { identifier }",{"type":47,"value":548},{"type":41,"tag":76,"props":1101,"children":1103},{"className":1102},[],[1104],{"type":47,"value":1105},"recipient { identifier }",{"type":47,"value":378},{"type":41,"tag":76,"props":1108,"children":1110},{"className":1109},[],[1111],{"type":47,"value":1112},"asset { symbol key }",{"type":47,"value":942},{"type":41,"tag":92,"props":1115,"children":1116},{},[],{"type":41,"tag":96,"props":1118,"children":1120},{"id":1119},"scope-disabled-rules-are-out-of-scope",[1121],{"type":47,"value":1122},"Scope — DISABLED rules are out of scope",{"type":41,"tag":50,"props":1124,"children":1125},{},[1126,1128,1133,1135,1140],{"type":47,"value":1127},"Only ",{"type":41,"tag":56,"props":1129,"children":1130},{},[1131],{"type":47,"value":1132},"Active",{"type":47,"value":1134}," and ",{"type":41,"tag":56,"props":1136,"children":1137},{},[1138],{"type":47,"value":1139},"Pending",{"type":47,"value":1141}," rules are live. Never query, compare against, or flag\nDISABLED rules (they're superseded versions).",{"type":41,"tag":92,"props":1143,"children":1144},{},[],{"type":41,"tag":96,"props":1146,"children":1148},{"id":1147},"the-checks",[1149],{"type":47,"value":1150},"The checks",{"type":41,"tag":197,"props":1152,"children":1154},{"id":1153},"check-1-exact-impact-the-core-always-run",[1155],{"type":47,"value":1156},"Check 1 — Exact impact (the core; always run)",{"type":41,"tag":50,"props":1158,"children":1159},{},[1160,1162,1167,1169,1174,1176,1181],{"type":47,"value":1161},"Get the ground-truth count straight from the engine via the\n",{"type":41,"tag":76,"props":1163,"children":1165},{"className":1164},[],[1166],{"type":47,"value":128},{"type":47,"value":1168}," query — it runs the real ",{"type":41,"tag":76,"props":1170,"children":1172},{"className":1171},[],[1173],{"type":47,"value":136},{"type":47,"value":1175},"\nwith ",{"type":41,"tag":56,"props":1177,"children":1178},{},[1179],{"type":47,"value":1180},"all",{"type":47,"value":1182}," of the rule's filters applied server-side, so you never reconstruct\nfilters by hand:",{"type":41,"tag":300,"props":1184,"children":1186},{"className":302,"code":1185,"language":304,"meta":305,"style":305},"query RollupPreview($rule: RollupRuleInputType!, $startDate: Date, $endDate: Date, $interval: Interval) {\n  subTransactionRollupRulePreview(rule: $rule, startDate: $startDate, endDate: $endDate, interval: $interval) {\n    subTransactionCount\n    transactionCount\n  }\n}\n",[1187],{"type":41,"tag":76,"props":1188,"children":1189},{"__ignoreMap":305},[1190,1198,1206,1214,1222,1229],{"type":41,"tag":311,"props":1191,"children":1192},{"class":313,"line":314},[1193],{"type":41,"tag":311,"props":1194,"children":1195},{},[1196],{"type":47,"value":1197},"query RollupPreview($rule: RollupRuleInputType!, $startDate: Date, $endDate: Date, $interval: Interval) {\n",{"type":41,"tag":311,"props":1199,"children":1200},{"class":313,"line":323},[1201],{"type":41,"tag":311,"props":1202,"children":1203},{},[1204],{"type":47,"value":1205},"  subTransactionRollupRulePreview(rule: $rule, startDate: $startDate, endDate: $endDate, interval: $interval) {\n",{"type":41,"tag":311,"props":1207,"children":1208},{"class":313,"line":332},[1209],{"type":41,"tag":311,"props":1210,"children":1211},{},[1212],{"type":47,"value":1213},"    subTransactionCount\n",{"type":41,"tag":311,"props":1215,"children":1216},{"class":313,"line":341},[1217],{"type":41,"tag":311,"props":1218,"children":1219},{},[1220],{"type":47,"value":1221},"    transactionCount\n",{"type":41,"tag":311,"props":1223,"children":1224},{"class":313,"line":350},[1225],{"type":41,"tag":311,"props":1226,"children":1227},{},[1228],{"type":47,"value":356},{"type":41,"tag":311,"props":1230,"children":1231},{"class":313,"line":359},[1232],{"type":41,"tag":311,"props":1233,"children":1234},{},[1235],{"type":47,"value":365},{"type":41,"tag":50,"props":1237,"children":1238},{},[1239,1241,1247,1249,1254,1255,1261,1262,1268,1269,1274,1276,1281,1282,1287,1289,1294,1295,1300,1302,1308,1309,1314,1315,1321,1322,1328,1330,1341,1343,1349,1351,1357,1359,1365,1366,1372,1374,1380],{"type":47,"value":1240},"Pass the candidate's rule object verbatim as ",{"type":41,"tag":76,"props":1242,"children":1244},{"className":1243},[],[1245],{"type":47,"value":1246},"$rule",{"type":47,"value":1248}," — the ",{"type":41,"tag":56,"props":1250,"children":1251},{},[1252],{"type":47,"value":1253},"same camelCase shape as the\ncreate mutation",{"type":47,"value":74},{"type":41,"tag":76,"props":1256,"children":1258},{"className":1257},[],[1259],{"type":47,"value":1260},"internalAccountId",{"type":47,"value":378},{"type":41,"tag":76,"props":1263,"children":1265},{"className":1264},[],[1266],{"type":47,"value":1267},"assetId",{"type":47,"value":378},{"type":41,"tag":76,"props":1270,"children":1272},{"className":1271},[],[1273],{"type":47,"value":449},{"type":47,"value":1275}," + ",{"type":41,"tag":76,"props":1277,"children":1279},{"className":1278},[],[1280],{"type":47,"value":457},{"type":47,"value":1275},{"type":41,"tag":76,"props":1283,"children":1285},{"className":1284},[],[1286],{"type":47,"value":487},{"type":47,"value":1288},"\nas enum NAMES like ",{"type":41,"tag":76,"props":1290,"children":1292},{"className":1291},[],[1293],{"type":47,"value":593},{"type":47,"value":533},{"type":41,"tag":76,"props":1296,"children":1298},{"className":1297},[],[1299],{"type":47,"value":503},{"type":47,"value":1301},", plus any\n",{"type":41,"tag":76,"props":1303,"children":1305},{"className":1304},[],[1306],{"type":47,"value":1307},"methodIds",{"type":47,"value":533},{"type":41,"tag":76,"props":1310,"children":1312},{"className":1311},[],[1313],{"type":47,"value":909},{"type":47,"value":533},{"type":41,"tag":76,"props":1316,"children":1318},{"className":1317},[],[1319],{"type":47,"value":1320},"minAmount",{"type":47,"value":533},{"type":41,"tag":76,"props":1323,"children":1325},{"className":1324},[],[1326],{"type":47,"value":1327},"maxAmount",{"type":47,"value":1329},"\u002Fidentifiers). ",{"type":41,"tag":56,"props":1331,"children":1332},{},[1333,1335],{"type":47,"value":1334},"Always pass ",{"type":41,"tag":76,"props":1336,"children":1338},{"className":1337},[],[1339],{"type":47,"value":1340},"$interval",{"type":47,"value":1342},"\n= the candidate's interval (",{"type":41,"tag":76,"props":1344,"children":1346},{"className":1345},[],[1347],{"type":47,"value":1348},"DAY",{"type":47,"value":1350}," or ",{"type":41,"tag":76,"props":1352,"children":1354},{"className":1353},[],[1355],{"type":47,"value":1356},"MONTH",{"type":47,"value":1358},"); it governs how the eligibility-window\nboundary is normalized, so a MONTH rule and a DAY rule over the same data can return\ndifferent counts. ",{"type":41,"tag":76,"props":1360,"children":1362},{"className":1361},[],[1363],{"type":47,"value":1364},"startDate",{"type":47,"value":533},{"type":41,"tag":76,"props":1367,"children":1369},{"className":1368},[],[1370],{"type":47,"value":1371},"endDate",{"type":47,"value":1373}," are optional ",{"type":41,"tag":76,"props":1375,"children":1377},{"className":1376},[],[1378],{"type":47,"value":1379},"YYYY-MM-DD",{"type":47,"value":1381}," — omit for the rule's\nfull unbounded range.",{"type":41,"tag":50,"props":1383,"children":1384},{},[1385,1387,1392,1394,1399,1401,1407,1409,1414],{"type":47,"value":1386},"The count is ",{"type":41,"tag":56,"props":1388,"children":1389},{},[1390],{"type":47,"value":1391},"what the rule would actually roll up on its next run",{"type":47,"value":1393},", not raw all-time\nmatches: the engine funnels the window through its own eligibility logic, so the\n",{"type":41,"tag":56,"props":1395,"children":1396},{},[1397],{"type":47,"value":1398},"current incomplete period and the unsynced\u002Fbuffer tail are excluded",{"type":47,"value":1400},".\n",{"type":41,"tag":76,"props":1402,"children":1404},{"className":1403},[],[1405],{"type":47,"value":1406},"transactionCount",{"type":47,"value":1408}," is the distinct parent-tx count. (Already-rolled-up sub-txs are also\nexcluded — for what an ",{"type":41,"tag":116,"props":1410,"children":1411},{},[1412],{"type":47,"value":1413},"existing",{"type":47,"value":1415}," rule has already produced, see the existing-rule\nsection below.)",{"type":41,"tag":140,"props":1417,"children":1418},{},[1419],{"type":41,"tag":144,"props":1420,"children":1421},{},[1422,1427,1429,1435],{"type":41,"tag":56,"props":1423,"children":1424},{},[1425],{"type":47,"value":1426},"subTransactionCount == 0 → DROP (Mode A) \u002F blocking flag (Mode B):",{"type":47,"value":1428}," \"matches 0\nsub-txs as configured\" — name the filters that zero it out (common culprits:\n",{"type":41,"tag":76,"props":1430,"children":1432},{"className":1431},[],[1433],{"type":47,"value":1434},"minAmount > maxAmount",{"type":47,"value":1436},", an identifier on the wrong direction, or an inverted date\nrange). The reason is the useful part.",{"type":41,"tag":944,"props":1438,"children":1439},{},[1440],{"type":41,"tag":50,"props":1441,"children":1442},{},[1443,1455,1457,1463,1464,1470,1472,1478,1480,1485,1487,1493],{"type":41,"tag":56,"props":1444,"children":1445},{},[1446,1448,1453],{"type":47,"value":1447},"If ",{"type":41,"tag":76,"props":1449,"children":1451},{"className":1450},[],[1452],{"type":47,"value":128},{"type":47,"value":1454}," is not in this org's MCP schema",{"type":47,"value":1456}," (confirm with\n",{"type":41,"tag":76,"props":1458,"children":1460},{"className":1459},[],[1461],{"type":47,"value":1462},"validate_query",{"type":47,"value":1350},{"type":41,"tag":76,"props":1465,"children":1467},{"className":1466},[],[1468],{"type":47,"value":1469},"introspect",{"type":47,"value":1471},"), fall back to a fully-filtered count query: a single\n",{"type":41,"tag":76,"props":1473,"children":1475},{"className":1474},[],[1476],{"type":47,"value":1477},"subTransaction(... excludeRollups: true ...)",{"type":47,"value":1479}," that applies every one of the rule's\nfilters using the verified filter-name table above, selecting only ",{"type":41,"tag":76,"props":1481,"children":1483},{"className":1482},[],[1484],{"type":47,"value":399},{"type":47,"value":1486},". This\nis slightly less precise than the engine preview (it does not exclude the incomplete\nperiod \u002F buffer tail) — say so when you report the number, and keep the ",{"type":41,"tag":76,"props":1488,"children":1490},{"className":1489},[],[1491],{"type":47,"value":1492},"~",{"type":47,"value":1494}," prefix.",{"type":41,"tag":197,"props":1496,"children":1498},{"id":1497},"check-2-overlap-informational-not-a-hard-limit",[1499],{"type":47,"value":1500},"Check 2 — Overlap (informational, NOT a hard limit)",{"type":41,"tag":50,"props":1502,"children":1503},{},[1504,1506,1511,1513,1518,1520,1525,1526,1531,1532,1537,1539,1544],{"type":47,"value":1505},"Another ",{"type":41,"tag":56,"props":1507,"children":1508},{},[1509],{"type":47,"value":1510},"Active\u002FPending",{"type":47,"value":1512}," rule (or another candidate) on the same ",{"type":41,"tag":76,"props":1514,"children":1516},{"className":1515},[],[1517],{"type":47,"value":1260},{"type":47,"value":1519}," +\n",{"type":41,"tag":76,"props":1521,"children":1523},{"className":1522},[],[1524],{"type":47,"value":1267},{"type":47,"value":1275},{"type":41,"tag":76,"props":1527,"children":1529},{"className":1528},[],[1530],{"type":47,"value":449},{"type":47,"value":1275},{"type":41,"tag":76,"props":1533,"children":1535},{"className":1534},[],[1536],{"type":47,"value":457},{"type":47,"value":1538}," with intersecting dates and non-disjoint\nfilters can claim some of the same sub-txs. This is ",{"type":41,"tag":56,"props":1540,"children":1541},{},[1542],{"type":47,"value":1543},"not",{"type":47,"value":1545}," blocking: the engine\nprocesses rules one-by-one ordered by id (PK), so a sub-tx matching multiple rules is\nalways claimed by the same rule consistently. Surface it as a note (other rule name + id,\nup to 3 example tx hashes) so the user is aware — never DROP or force a split for overlap\nalone.",{"type":41,"tag":50,"props":1547,"children":1548},{},[1549,1554,1556,1562,1564,1570,1572,1577],{"type":41,"tag":56,"props":1550,"children":1551},{},[1552],{"type":47,"value":1553},"No separate config-validation check.",{"type":47,"value":1555}," Date-order, identifier-on-wrong-direction,\nmutually-exclusive prefixes, and bad ",{"type":41,"tag":76,"props":1557,"children":1559},{"className":1558},[],[1560],{"type":47,"value":1561},"cutoffTime",{"type":47,"value":1563}," are enforced by the create mutation\n(returned as blocking ",{"type":41,"tag":76,"props":1565,"children":1567},{"className":1566},[],[1568],{"type":47,"value":1569},"validationIssues",{"type":47,"value":1571},") — don't re-validate them here. A start date set\nto clear a locked period is a ",{"type":41,"tag":56,"props":1573,"children":1574},{},[1575],{"type":47,"value":1576},"good",{"type":47,"value":1578}," use, not a flag (leave the end date open).",{"type":41,"tag":197,"props":1580,"children":1582},{"id":1581},"existing-rule-impact-mode-b-reviewing-an-activepending-rule",[1583],{"type":47,"value":1584},"Existing-rule impact (Mode B — reviewing an Active\u002FPending rule)",{"type":41,"tag":50,"props":1586,"children":1587},{},[1588,1590,1595,1597,1603,1605,1610,1612,1618,1620,1625],{"type":47,"value":1589},"Do NOT call an existing rule useless because Check 1 returns a low count. A running rule\nhas already rolled up its pool, and those rollups are excluded from Check 1 — so a rule\nthat has been doing its job shows only the few recent un-rolled sub-txs. Also count what\nit ",{"type":41,"tag":56,"props":1591,"children":1592},{},[1593],{"type":47,"value":1594},"produced",{"type":47,"value":1596},":\n",{"type":41,"tag":76,"props":1598,"children":1600},{"className":1599},[],[1601],{"type":47,"value":1602},"subTransaction(type_In: [\"rollup\",\"rollup_fee\"], typeId: \"\u003Crule_id>\") { totalCount }",{"type":47,"value":1604},".\nReport both — \"currently matches N new sub-txs; has already produced M rollups\". A rule\nis only ineffective if it has produced ~nothing ",{"type":41,"tag":56,"props":1606,"children":1607},{},[1608],{"type":47,"value":1609},"and",{"type":47,"value":1611}," matches ~nothing now. (If its\nfilter looks stale — e.g. a ",{"type":41,"tag":76,"props":1613,"children":1615},{"className":1614},[],[1616],{"type":47,"value":1617},"methodId",{"type":47,"value":1619}," that no longer matches new txs — say ",{"type":41,"tag":116,"props":1621,"children":1622},{},[1623],{"type":47,"value":1624},"that",{"type":47,"value":1626},", with\nthe produced-vs-current numbers, rather than \"useless\".)",{"type":41,"tag":92,"props":1628,"children":1629},{},[],{"type":41,"tag":96,"props":1631,"children":1633},{"id":1632},"output",[1634],{"type":47,"value":1635},"Output",{"type":41,"tag":50,"props":1637,"children":1638},{},[1639,1644,1646,1651,1652,1658,1659,1665,1666,1672],{"type":41,"tag":56,"props":1640,"children":1641},{},[1642],{"type":47,"value":1643},"Mode A:",{"type":47,"value":1645}," one line per candidate back to ",{"type":41,"tag":76,"props":1647,"children":1649},{"className":1648},[],[1650],{"type":47,"value":112},{"type":47,"value":1596},{"type":41,"tag":76,"props":1653,"children":1655},{"className":1654},[],[1656],{"type":47,"value":1657},"\u003C#> \u003Cname>: PASS (\u003Csubtx>\u002F\u003Ctx> sub-txs)",{"type":47,"value":715},{"type":41,"tag":76,"props":1660,"children":1662},{"className":1661},[],[1663],{"type":47,"value":1664},"DROP — \u003Creason>",{"type":47,"value":715},{"type":41,"tag":76,"props":1667,"children":1669},{"className":1668},[],[1670],{"type":47,"value":1671},"FIX — \u003Cchange>",{"type":47,"value":1673},", plus any\noverlap notes.",{"type":41,"tag":50,"props":1675,"children":1676},{},[1677,1682,1684,1691,1693],{"type":41,"tag":56,"props":1678,"children":1679},{},[1680],{"type":47,"value":1681},"Mode B:",{"type":47,"value":1683}," one findings block per rule. Flat bullet list, each bullet with concrete\nevidence; omit a check that found nothing. Always include the impact line. If clean:\n\"Reviewed ",{"type":41,"tag":116,"props":1685,"children":1686},{},[1687],{"type":41,"tag":1688,"props":1689,"children":1690},"name",{},[],{"type":47,"value":1692}," (id ",{"type":41,"tag":1694,"props":1695,"children":1696},"id",{},[1697,1699],{"type":47,"value":1698},") — matches ~",{"type":41,"tag":1700,"props":1701,"children":1702},"count",{},[1703,1705],{"type":47,"value":1704}," sub-txs across ~",{"type":41,"tag":1706,"props":1707,"children":1708},"tx",{"count":305},[1709],{"type":47,"value":1710}," txs. No\nissues.\"",{"type":41,"tag":92,"props":1712,"children":1713},{},[],{"type":41,"tag":96,"props":1715,"children":1717},{"id":1716},"rules",[1718],{"type":47,"value":1719},"Rules",{"type":41,"tag":140,"props":1721,"children":1722},{},[1723,1728,1740,1745],{"type":41,"tag":144,"props":1724,"children":1725},{},[1726],{"type":47,"value":1727},"Never query, compare against, or flag DISABLED rules.",{"type":41,"tag":144,"props":1729,"children":1730},{},[1731,1733,1738],{"type":47,"value":1732},"Never propose new rollups or optimizations — that's ",{"type":41,"tag":76,"props":1734,"children":1736},{"className":1735},[],[1737],{"type":47,"value":112},{"type":47,"value":1739},". You only\ncompute impact and flag problems.",{"type":41,"tag":144,"props":1741,"children":1742},{},[1743],{"type":47,"value":1744},"Never execute mutations.",{"type":41,"tag":144,"props":1746,"children":1747},{},[1748],{"type":47,"value":1749},"Every flag carries evidence (a count, a date, a config value, or a tx hash).",{"type":41,"tag":1751,"props":1752,"children":1753},"style",{},[1754],{"type":47,"value":1755},"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":1757,"total":1859},[1758,1777,1796,1810,1822,1834,1846],{"slug":1759,"name":1759,"fn":1760,"description":1761,"org":1762,"tags":1763,"stars":23,"repoUrl":24,"updatedAt":1776},"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},[1764,1767,1770,1773],{"name":1765,"slug":1766,"type":16},"Creative","creative",{"name":1768,"slug":1769,"type":16},"Image Generation","image-generation",{"name":1771,"slug":1772,"type":16},"Marketing","marketing",{"name":1774,"slug":1775,"type":16},"Video","video","2026-07-01T08:09:32.316182",{"slug":1778,"name":1778,"fn":1779,"description":1780,"org":1781,"tags":1782,"stars":23,"repoUrl":24,"updatedAt":1795},"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},[1783,1786,1789,1792],{"name":1784,"slug":1785,"type":16},"Audit","audit",{"name":1787,"slug":1788,"type":16},"Code Analysis","code-analysis",{"name":1790,"slug":1791,"type":16},"Playwright","playwright",{"name":1793,"slug":1794,"type":16},"Testing","testing","2026-07-02T07:37:17.341081",{"slug":1797,"name":1797,"fn":1798,"description":1799,"org":1800,"tags":1801,"stars":23,"repoUrl":24,"updatedAt":1809},"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},[1802,1805,1808],{"name":1803,"slug":1804,"type":16},"Monitoring","monitoring",{"name":1806,"slug":1807,"type":16},"QA","qa",{"name":1793,"slug":1794,"type":16},"2026-07-02T07:37:18.566504",{"slug":1811,"name":1811,"fn":1812,"description":1813,"org":1814,"tags":1815,"stars":23,"repoUrl":24,"updatedAt":1821},"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},[1816,1819,1820],{"name":1817,"slug":1818,"type":16},"Operations","operations",{"name":1806,"slug":1807,"type":16},{"name":1793,"slug":1794,"type":16},"2026-07-02T07:37:23.446065",{"slug":1823,"name":1823,"fn":1824,"description":1825,"org":1826,"tags":1827,"stars":23,"repoUrl":24,"updatedAt":1833},"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},[1828,1831,1832],{"name":1829,"slug":1830,"type":16},"Documentation","documentation",{"name":1806,"slug":1807,"type":16},{"name":1793,"slug":1794,"type":16},"2026-07-02T07:37:22.247052",{"slug":1835,"name":1835,"fn":1836,"description":1837,"org":1838,"tags":1839,"stars":23,"repoUrl":24,"updatedAt":1845},"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},[1840,1843,1844],{"name":1841,"slug":1842,"type":16},"Project Management","project-management",{"name":1806,"slug":1807,"type":16},{"name":1793,"slug":1794,"type":16},"2026-07-02T07:37:19.793846",{"slug":1847,"name":1847,"fn":1848,"description":1849,"org":1850,"tags":1851,"stars":23,"repoUrl":24,"updatedAt":1858},"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},[1852,1855,1856,1857],{"name":1853,"slug":1854,"type":16},"Debugging","debugging",{"name":1790,"slug":1791,"type":16},{"name":1806,"slug":1807,"type":16},{"name":1793,"slug":1794,"type":16},"2026-07-02T07:37:16.07175",30,{"items":1861,"total":2044},[1862,1881,1895,1907,1926,1937,1958,1978,1992,2007,2015,2028],{"slug":1863,"name":1863,"fn":1864,"description":1865,"org":1866,"tags":1867,"stars":1878,"repoUrl":1879,"updatedAt":1880},"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},[1868,1869,1872,1875],{"name":1765,"slug":1766,"type":16},{"name":1870,"slug":1871,"type":16},"Design","design",{"name":1873,"slug":1874,"type":16},"Generative Art","generative-art",{"name":1876,"slug":1877,"type":16},"JavaScript","javascript",161831,"https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fskills","2026-04-06T17:56:15.455818",{"slug":1882,"name":1882,"fn":1883,"description":1884,"org":1885,"tags":1886,"stars":1878,"repoUrl":1879,"updatedAt":1894},"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},[1887,1890,1891],{"name":1888,"slug":1889,"type":16},"Branding","branding",{"name":1870,"slug":1871,"type":16},{"name":1892,"slug":1893,"type":16},"Typography","typography","2026-04-06T17:56:05.042852",{"slug":1896,"name":1896,"fn":1897,"description":1898,"org":1899,"tags":1900,"stars":1878,"repoUrl":1879,"updatedAt":1906},"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},[1901,1902,1903],{"name":1765,"slug":1766,"type":16},{"name":1870,"slug":1871,"type":16},{"name":1904,"slug":1905,"type":16},"PDF","pdf","2026-04-06T17:56:03.794732",{"slug":1908,"name":1908,"fn":1909,"description":1910,"org":1911,"tags":1912,"stars":1878,"repoUrl":1879,"updatedAt":1925},"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},[1913,1916,1917,1920,1922],{"name":1914,"slug":1915,"type":16},"Agents","agents",{"name":9,"slug":8,"type":16},{"name":1918,"slug":1919,"type":16},"Anthropic SDK","anthropic-sdk",{"name":1921,"slug":1908,"type":16},"Claude API",{"name":1923,"slug":1924,"type":16},"LLM","llm","2026-07-28T05:36:08.213335",{"slug":1927,"name":1927,"fn":1928,"description":1929,"org":1930,"tags":1931,"stars":1878,"repoUrl":1879,"updatedAt":1936},"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},[1932,1933],{"name":1829,"slug":1830,"type":16},{"name":1934,"slug":1935,"type":16},"Technical Writing","technical-writing","2026-04-06T17:56:14.18897",{"slug":1938,"name":1938,"fn":1939,"description":1940,"org":1941,"tags":1942,"stars":1878,"repoUrl":1879,"updatedAt":1957},"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},[1943,1946,1948,1951,1954],{"name":1944,"slug":1945,"type":16},"Documents","documents",{"name":1947,"slug":1938,"type":16},"DOCX",{"name":1949,"slug":1950,"type":16},"Office","office",{"name":1952,"slug":1953,"type":16},"Templates","templates",{"name":1955,"slug":1956,"type":16},"Word","word","2026-07-18T05:16:23.136271",{"slug":1959,"name":1959,"fn":1960,"description":1961,"org":1962,"tags":1963,"stars":1878,"repoUrl":1879,"updatedAt":1977},"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},[1964,1965,1968,1971,1974],{"name":1870,"slug":1871,"type":16},{"name":1966,"slug":1967,"type":16},"Frontend","frontend",{"name":1969,"slug":1970,"type":16},"React","react",{"name":1972,"slug":1973,"type":16},"Tailwind CSS","tailwind-css",{"name":1975,"slug":1976,"type":16},"UI Components","ui-components","2026-04-06T17:56:16.723469",{"slug":1979,"name":1979,"fn":1980,"description":1981,"org":1982,"tags":1983,"stars":1878,"repoUrl":1879,"updatedAt":1991},"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},[1984,1987,1988],{"name":1985,"slug":1986,"type":16},"Communications","communications",{"name":1952,"slug":1953,"type":16},{"name":1989,"slug":1990,"type":16},"Writing","writing","2026-04-06T17:56:20.695522",{"slug":1993,"name":1993,"fn":1994,"description":1995,"org":1996,"tags":1997,"stars":1878,"repoUrl":1879,"updatedAt":2006},"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},[1998,1999,2002,2003],{"name":1914,"slug":1915,"type":16},{"name":2000,"slug":2001,"type":16},"API Development","api-development",{"name":1923,"slug":1924,"type":16},{"name":2004,"slug":2005,"type":16},"MCP","mcp","2026-04-06T17:56:10.357665",{"slug":1905,"name":1905,"fn":2008,"description":2009,"org":2010,"tags":2011,"stars":1878,"repoUrl":1879,"updatedAt":2014},"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},[2012,2013],{"name":1944,"slug":1945,"type":16},{"name":1904,"slug":1905,"type":16},"2026-04-06T17:56:02.483316",{"slug":2016,"name":2016,"fn":2017,"description":2018,"org":2019,"tags":2020,"stars":1878,"repoUrl":1879,"updatedAt":2027},"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},[2021,2024],{"name":2022,"slug":2023,"type":16},"PowerPoint","powerpoint",{"name":2025,"slug":2026,"type":16},"Presentations","presentations","2026-07-18T05:16:24.1471",{"slug":2029,"name":2029,"fn":2030,"description":2031,"org":2032,"tags":2033,"stars":1878,"repoUrl":1879,"updatedAt":2043},"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},[2034,2035,2036,2039,2042],{"name":1914,"slug":1915,"type":16},{"name":1829,"slug":1830,"type":16},{"name":2037,"slug":2038,"type":16},"Evals","evals",{"name":2040,"slug":2041,"type":16},"Performance","performance",{"name":1934,"slug":1935,"type":16},"2026-04-19T06:45:40.804",490]