[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-anthropic-tres-report-create":3,"mdc--qxdt6e-key":37,"related-repo-anthropic-tres-report-create":4091,"related-org-anthropic-tres-report-create":4195},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":12,"stars":26,"repoUrl":27,"updatedAt":28,"license":29,"forks":30,"topics":31,"repo":32,"sourceUrl":35,"mdContent":36},"tres-report-create","create TRES Finance reports","Create (generate) any TRES Finance report end-to-end via the tres-mcp MCP server and GraphQL — trigger the export, verify a report row was actually created (guarding against silent failures), poll until done, and return the download link. Trigger this skill on ANY report creation request, including phrases like \"create a report\", \"generate a report\", \"export\", \"run a report\", \"I need a Transaction Ledger \u002F Balances \u002F Reconciliation \u002F Cost Basis \u002F Roll Forward \u002F Staking \u002F Audit report\", \"pull the data for\", \"download a report for\", \"give me a CSV\u002FXLSX of\", or whenever the user wants TRES to produce a report file. Use together with tres-report-advisor when the user is unsure which report they need.",{"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,23],{"name":14,"slug":15,"type":16},"GraphQL","graphql","tag",{"name":18,"slug":19,"type":16},"Reporting","reporting",{"name":21,"slug":22,"type":16},"Finance","finance",{"name":24,"slug":25,"type":16},"MCP","mcp",294,"https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fclaude-plugins-community","2026-07-02T07:38:00.195911",null,69,[],{"repoUrl":27,"stars":26,"forks":30,"topics":33,"description":34},[],"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-report-create","---\nname: tres-report-create\ndescription: Create (generate) any TRES Finance report end-to-end via the tres-mcp MCP server and GraphQL — trigger the export, verify a report row was actually created (guarding against silent failures), poll until done, and return the download link. Trigger this skill on ANY report creation request, including phrases like \"create a report\", \"generate a report\", \"export\", \"run a report\", \"I need a Transaction Ledger \u002F Balances \u002F Reconciliation \u002F Cost Basis \u002F Roll Forward \u002F Staking \u002F Audit report\", \"pull the data for\", \"download a report for\", \"give me a CSV\u002FXLSX of\", or whenever the user wants TRES to produce a report file. Use together with tres-report-advisor when the user is unsure which report they need.\n---\n\n# TRES Report Create\n\nYou create TRES Finance reports programmatically through the **tres-mcp** MCP server (GraphQL against the BFF). The flow is always: pick the report → trigger the export → poll until `DONE` → return the presigned `link`. Optionally download and analyze the file afterwards.\n\nIf you are unsure *which* report the user needs, use the `tres-report-advisor` skill first, then come back here to generate it.\n\n## Workflow\n\n```\n- [ ] Step 0: Clarify report type + date range + currency\n- [ ] Step 1: Trigger the export (GraphQL via MCP `execute`)\n- [ ] Step 1b: If the report isn't in the tables below, derive it from the schema\n- [ ] Step 1c: VERIFY a report row was actually created (poll by exact name) — catches silent failures\n- [ ] Step 2: Poll the report query until status == DONE\n- [ ] Step 3 (optional): Download + analyze the file\n```\n\n### Step 0 — Clarify scope (mandatory before triggering)\n\nConfirm before doing anything:\n\n- **Report type (required).** Match the user's wording to the tables below. If unsure, discover what's available:\n  ```graphql\n  query { availableReportTypes { name exportType entitiesType llmDescription } }\n  ```\n- **Date range (if applicable).** LEDGER \u002F AUDIT_LOG reports take `timestamp_Gte` \u002F `timestamp_Lte` in ISO 8601:\n  - \"Q1 2025\" → Gte `2025-01-01T00:00:00Z`, Lte `2025-03-31T23:59:59Z`\n  - \"2025\" → Gte `2025-01-01T00:00:00Z`, Lte `2025-12-31T23:59:59Z`\n  - If a date range is required and not given, **ask**.\n- **Currency.** Default `\"usd\"` unless the user says otherwise.\n- **Analysis goal (only if they want the data analyzed, not just the file).** What should the data answer? Default to a general summary (totals, top items, trends). Drives Step 3.\n\nConfirm briefly, e.g. *\"I'll generate a Transaction Ledger for Q1 2025 as CSV. Starting now.\"*\n\n### Step 1 — Trigger the export\n\nCall the GraphQL query that matches the report's `entitiesType`, passing the export parameters. Run it with the MCP `execute` tool (validate first with `validate_query` if unsure).\n\n**`entitiesType` → query to call**\n\n| entitiesType | Query |\n|---|---|\n| LEDGER | `transaction` |\n| ASSETS | `organizationBalance` |\n| BALANCE | `organizationBalance` |\n| HISTORICAL_BALANCE | `organizationBalance` |\n| ACCOUNTS | `internalAccount` |\n| GENERAL | `internalAccount` |\n| STAKING_DATA | `stakingYieldRecord` |\n| AUDIT_LOG | `auditLog` |\n| LOGIN_HISTORY | `loginHistoryExport` |\n\n**Report catalog (`exportFormat` values — verified against prod)**\n\n| Report name | exportFormat | entitiesType |\n|---|---|---|\n| Transaction Ledger | BASIC_RAW_TRANSACTIONS | LEDGER |\n| Realized Gains & Losses | EXTENDED_RAW_TRANSACTIONS | LEDGER |\n| Cost Breakdown Raw Transactions | COST_BREAKDOWN_RAW_TRANSACTIONS | LEDGER |\n| Rollup Breakdown † | ROLLUP_BREAKDOWN | LEDGER |\n| Ledger Reconciliation | RECONCILIATION | LEDGER |\n| Cost Basis Roll Forward | COST_BASIS_ROLL_FORWARD | LEDGER |\n| Asset Roll Forward | ASSET_ROLL_FORWARD | LEDGER |\n| ERP Pre-Sync | PRE_SYNC_JOURNAL | LEDGER |\n| ERP Post-Sync | POST_SYNC_JOURNAL | LEDGER |\n| MT940 Statement | MT940 | LEDGER |\n| Asset Balances | RAW_BALANCES | ASSETS |\n| Asset Balances V2 | RAW_BALANCES_V2 | ASSETS |\n| Asset Balances - Archives † | ARCHIVED_BALANCES | ASSETS |\n| Balance Trends | BALANCE_TRENDS | ASSETS |\n| Wallet Balances | INTERNAL_ACCOUNTS_BALANCES | ASSETS |\n| Cost Basis Stack Per Asset | COST_BASIS_STACK_PER_ASSET | ASSETS |\n| Asset Fiat Values | DAILY_ASSET_PRICING | ASSETS |\n| Revaluation Report | REEVALUATION | ASSETS |\n| Historical Balance Format | HISTORICAL_BALANCE | HISTORICAL_BALANCE |\n| Cost Basis Inventory † | COST_BASIS_INVENTORY | BALANCE |\n| Organization Wallets | INTERNAL_ACCOUNTS | ACCOUNTS |\n| Contacts | CONTACTS | ACCOUNTS |\n| Third Party Addresses | THIRD_PARTY_ADDRESSES | ACCOUNTS |\n| Chart of Account | CHART_OF_ACCOUNT | GENERAL |\n| ERP Rules | ERP_RULES | GENERAL |\n| Connected Custodians | CONNECTED_CUSTODIANS | GENERAL |\n| Staking Rewards & Positions | STAKING_DATA | STAKING_DATA |\n| Audit Trail \u002F Log | AUDIT_LOG | AUDIT_LOG |\n| Login History | LOGIN_HISTORY | LOGIN_HISTORY |\n\n† = special handling (see \"Reports needing extra parameters\" below). The org catalog evolves — `availableReportTypes` is authoritative. **If a requested report isn't in this table, go to Step 1b and derive it from the schema** rather than guessing.\n\n**Export parameters (always include):**\n\n- `exportFormat` — value from the table above (UPPER_CASE)\n- `exportName` — a descriptive, unique name (e.g. `\"Transaction Ledger Q1 2025\"`) — you'll match on this in Step 2\n- `currency` — `\"usd\"` unless told otherwise\n- `outputFormat` — `\"CSV\"` for downstream analysis, or `\"XLSX\"` if the user wants a spreadsheet\n\nAdd `timestamp_Gte` \u002F `timestamp_Lte` for date-ranged reports (LEDGER, AUDIT_LOG).\n\n> ### ⚠️ GraphQL variable types — get these EXACTLY right (first-run correctness)\n>\n> The BFF **strictly validates variable types**. A wrong type returns HTTP 400 and **no report is created** — and the `execute` tool surfaces this under an `error` \u002F `error_type` field, *not* the GraphQL `errors` array, so it is easy to miss. Declare variables with these exact types:\n>\n> | Variable | GraphQL type | Notes |\n> |---|---|---|\n> | `exportFormat` | `String` | the UPPER_CASE value |\n> | `exportName` | `String` | unique name |\n> | `currency` | `String` | e.g. `\"usd\"` |\n> | `outputFormat` | **`ReportOutputFormat`** | NOT `String`. Value `\"CSV\"` \u002F `\"XLSX\"` |\n> | `timestamp_Gte` \u002F `timestamp_Lte` | **`DateTime`** | NOT `String`. ISO 8601 value |\n> | `identifier_In`, `children_Asset_AssetClass_In`, `children_BelongsTo_In` | **`[String]`** | NOT `[ID]` |\n>\n> The params must be passed as **variables named exactly** `exportName`, `exportFormat`, etc. — the BFF reads them from `info.variable_values` by name. Inline literals or renamed variables (`$ef`) silently create **no** report.\n\nExample — trigger a Transaction Ledger export (verified working form):\n\n```graphql\nquery($limit: Int, $offset: Int, $timestamp_Gte: DateTime, $timestamp_Lte: DateTime,\n      $exportFormat: String, $exportName: String, $currency: String, $outputFormat: ReportOutputFormat) {\n  transaction(limit: $limit, offset: $offset, timestamp_Gte: $timestamp_Gte,\n              timestamp_Lte: $timestamp_Lte, exportFormat: $exportFormat,\n              exportName: $exportName, currency: $currency, outputFormat: $outputFormat) {\n    results { id }\n    totalCount\n  }\n}\n```\n\n```json\n{\n  \"limit\": 1,\n  \"offset\": 0,\n  \"timestamp_Gte\": \"2025-01-01T00:00:00Z\",\n  \"timestamp_Lte\": \"2025-03-31T23:59:59Z\",\n  \"exportFormat\": \"BASIC_RAW_TRANSACTIONS\",\n  \"exportName\": \"Transaction Ledger Q1 2025\",\n  \"currency\": \"usd\",\n  \"outputFormat\": \"CSV\"\n}\n```\n\nThe export then generates asynchronously in the background. A 200 with `totalCount` only confirms the *query* ran — it does **not** mean a report was created (verify in Step 1c) and it does **not** mean the file is ready (poll in Step 2).\n\n#### Reports needing extra parameters (omit these and the report errors or comes back empty)\n\n| Report (`exportFormat`) | Trigger via | Required extra params |\n|---|---|---|\n| `ROLLUP_BREAKDOWN` | `transaction` | `identifier_In: [String]` — rollup parent hashes to decompose. Without it the report is **empty**. |\n| `COST_BASIS_INVENTORY` | `transaction` (not `organizationBalance`) | exactly **one** `children_Asset_AssetClass_In: [String]` (asset-class id). Optional: at most one `children_BelongsTo_In: [String]`. Missing\u002Fmultiple → report finishes with `status: ERROR` (\"must select exactly one asset class\"). Get an asset-class id from `query { assetClass(limit: N) { results { id name symbol } } }`. |\n| `ARCHIVED_BALANCES` | `organizationBalance` | Requires an existing **commit snapshot** for the target date. If none exists it stays pending — prefer `HISTORICAL_BALANCE` (Time Capsule) for arbitrary dates. |\n\n**Point-in-time balances.** For a balance report *as of a past date*, `organizationBalance` also accepts `balanceDate: DateTime` (reconstructs balances at that date — this is the Time Capsule path; passing `RAW_BALANCES` + `balanceDate` is promoted to `HISTORICAL_BALANCE`) and `commitId: UUID` (pull from a specific commit snapshot). Omit both for current balances.\n\n#### `LOGIN_HISTORY` has a different shape\n\n`loginHistoryExport` takes only `exportFormat: String!`, `exportName: String!`, `outputFormat: ReportOutputFormat` (no currency\u002Flimit\u002Ftimestamps) and returns `{ success reportId }`:\n\n```graphql\nquery($exportFormat: String!, $exportName: String!, $outputFormat: ReportOutputFormat) {\n  loginHistoryExport(exportFormat: $exportFormat, exportName: $exportName, outputFormat: $outputFormat) {\n    success\n    reportId\n  }\n}\n```\n\n### Step 1b — Unknown or newly added report? Derive it from the schema (self-service)\n\n`availableReportTypes` is the source of truth — it lists **every** report the org supports, including ones not in the tables above. When a requested report has no row here, do not guess: discover the trigger from the live schema using the MCP introspection tools.\n\n```\n- [ ] 1. availableReportTypes -> get this report's exportType + entitiesType + llmDescription\n- [ ] 2. Pick the trigger query from entitiesType (Step 1 table). If entitiesType is new\u002Funclear,\n         default: transaction (tx \u002F ledger \u002F cost-basis), organizationBalance (balances \u002F assets),\n         internalAccount (accounts \u002F metadata).\n- [ ] 3. introspect(\u003Cquery>) -> read the EXACT arg names AND types\n- [ ] 4. build_query(\u003Cquery>) -> canonical variables-as-args template (optional, handy)\n- [ ] 5. validate_query(\u003Cassembled query>) BEFORE executing\n- [ ] 6. Trigger with the 4 export params (+ timestamps only if the query exposes them)\n- [ ] 7. Poll; if it errors, apply the error->fix table, then re-trigger\n- [ ] 8. On DONE: return the link AND record the working recipe\n```\n\nPrinciples that make this work first-try:\n\n1. **Read the format, never invent it.** Use `exportType` from `availableReportTypes` verbatim as `exportFormat`.\n2. **Derive variable types from `introspect`, not from memory.** Declare each variable with the exact type the schema reports. This alone prevents the 400 \"used in position expecting type X\" failures. Sanity-check the usual ones: `outputFormat` → `ReportOutputFormat`, `currency` → `String`, `timestamp_*` → `DateTime`, list filters → `[String]`.\n3. **Validate before executing.** `validate_query` catches arg\u002Ftype\u002Fselection mistakes without creating a junk report.\n4. **Start minimal, then add only what the error demands.** Trigger with just the export params first; let the error messages tell you which extra filter a generator requires.\n\n**Error → fix table** (covers every failure mode seen against prod):\n\n| Error | Meaning | Fix |\n|---|---|---|\n| `Variable '$X' of type 'A' used in position expecting type 'B'` | wrong declared type | re-declare `$X` as `B`, re-validate |\n| `Unknown argument 'X' on field 'Y'` | that filter isn't on this query | switch to a query that exposes it (often `transaction`) or drop it |\n| `Variable '$X' is never used` | declared a var with no matching arg | make it a real arg on the query, or remove it |\n| 200 trigger, but report `status: ERROR` (\"must select exactly one …\" \u002F \"required …\") | generator needs an extra required filter | `introspect` to find the matching arg name, fetch valid values from its list query (e.g. `assetClass`, `internalAccount`), add exactly what's required, re-trigger |\n| report stays `IN_PROGRESS` indefinitely | data prerequisite missing (e.g. no commit snapshot) | tell the user what's missing and suggest an alternative report |\n\n**Persist what you learn.** Once a new report triggers cleanly to `DONE`:\n- Short term: save the recipe via the MCP `memory` tool — trigger query, `exportFormat`, working variable types, and any required filters.\n- Durable: propose a new row for this skill's tables (report name, `exportFormat`, trigger query, required params) and surface it to the user so the skill stays current.\n\n### Step 1c — Verify a report row was created (MANDATORY anti-silent-failure check)\n\n**Do this immediately after every trigger, before you tell the user anything succeeded.** The trigger is a query *side effect*: if the request is even slightly malformed (inline literals instead of variables, a renamed variable like `$ef`, a missing required param), the BFF returns `200` with `errors: null` and **silently creates no report**. The only reliable way to know it worked is to look the row up by name.\n\nQuery for the row using the **exact** `exportName` you triggered with:\n\n```graphql\nquery($name: String, $ordering: String, $limit: Int) {\n  report(name: $name, ordering: $ordering, limit: $limit) {\n    results { id name status }\n  }\n}\n```\n\n```json\n{ \"name\": \"\u003Cthe exact exportName from Step 1>\", \"ordering\": \"-created_at\", \"limit\": 1 }\n```\n\n- **`results` is empty (no row)** → this is a **SILENT FAILURE**, not \"in progress\". Do **NOT** report success. Re-check the trigger against the rules above — params passed as **variables** (not inline literals), variables **named exactly** `exportName`\u002F`exportFormat`\u002F`currency`\u002F`outputFormat`\u002F`timestamp_*`, correct types — then re-trigger **once**. If it still creates no row, stop and tell the user it failed silently and could not be created (don't loop forever).\n- **A row exists** → good, the report was created. Continue to Step 2 to poll it to `DONE`.\n\n> Make the `exportName` unique per run (e.g. append the date or a timestamp) so this lookup matches *your* row and not an older report with the same name.\n\n### Step 2 — Poll until done\n\nFind the report by the exact `exportName` from Step 1 (most reliable match):\n\n```graphql\nquery($name: String, $ordering: String, $limit: Int) {\n  report(name: $name, ordering: $ordering, limit: $limit) {\n    results { id name status link reportSize exportFormat createdAt }\n  }\n}\n```\n\n```json\n{ \"name\": \"\u003Cthe exportName from Step 1>\", \"ordering\": \"-created_at\", \"limit\": 1 }\n```\n\n**Field\u002Farg gotchas (these fail silently — get them right):**\n\n- The ordering arg is `ordering`, **not** `orderBy`.\n- The download field is `link` (a presigned S3 URL), **not** `downloadUrl`.\n- The report-type field is `exportFormat`, **not** `exportType`.\n- Do **not** filter by `exportFormat` to find your report: the stored value is **lowercase** (e.g. `rollup_breakdown`) while you triggered with UPPER_CASE, so an exact filter matches nothing. Filter by `name`.\n\n**Polling loop:**\n\n1. Query for the latest report by name.\n2. Check `status`:\n   - `IN_PROGRESS` → wait ~60s (e.g. `sleep 60` in a shell), then query again.\n   - `DONE` → `link` holds the presigned download URL. Proceed.\n   - `ERROR` → the generator rejected the inputs (e.g. a missing required filter). Read the failure message, fix the params, and re-trigger. Do not silently retry the same call.\n3. Repeat up to **10 times**, waiting ~60s between attempts.\n\n> **Check BOTH error channels.** A report can fail in two ways: (1) the trigger returns HTTP 400 with the problem under `error` \u002F `error_type` (and an empty\u002Fabsent GraphQL `errors`) — treat any non-empty `error` as a hard failure, do **not** report success; (2) the trigger returns 200 but the report later finishes with `status: ERROR`. Never assume success from a 200 alone.\n\nSmall reports finish in seconds; large reports (many assets, wide date ranges, large orgs) can take minutes to hours — set expectations early. Once `status == DONE`, share the `link` with the user.\n\n**Presenting the download link.** Never paste the raw presigned URL into the chat — it's long, ugly, and full of credentials. Always render it as a clean clickable **markdown link** with friendly anchor text, putting the full URL in the link target:\n\n```markdown\n[Click here to download your report](\u003Cthe full presigned link>)\n```\n\nYou may tailor the anchor text to the report, e.g. `[Download your ERP Pre-Sync report (CSV)](\u003Clink>)`. Keep the anchor short and human; the URL itself stays hidden behind it. Mention that the link is presigned and expires after a limited window (~24h).\n\n### Step 3 — Download + analyze (optional)\n\nIf the user wants the data analyzed (not just the link), download via the presigned URL and inspect it locally with pandas:\n\n```python\nimport pandas as pd, requests\nfrom io import BytesIO\n\nresp = requests.get(\"\u003Cpresigned_url>\")\nresp.raise_for_status()\ndf = pd.read_csv(BytesIO(resp.content))\nprint(df.shape, list(df.columns))\nprint(df.head())\nprint(df.dtypes)\n```\n\nAlways start with `df.head()` and `df.dtypes`, then run the requested analysis (`groupby`, `value_counts`, `describe`, `pivot_table`). Format money as `f\"${value:,.2f}\"` and summarize large frames rather than dumping every row. For deeper per-report analysis guidance, use the `tres-report-analyzer` skill.\n\n## Rules\n\n- **ALWAYS** confirm report type (and date range, if required) before triggering.\n- Match the query to the report's `entitiesType` using the table above — **except** the special-case reports above (`COST_BASIS_INVENTORY` triggers via `transaction`).\n- For any report NOT in the tables, follow **Step 1b**: `introspect` the query for exact arg types, `validate_query`, trigger minimal, fix from the error→fix table, then persist the recipe. Never hand-guess types or filters for an unknown report.\n- **Variable types are strict:** `outputFormat` is `ReportOutputFormat`, `timestamp_*` are `DateTime`, list filters are `[String]`. A wrong type = HTTP 400 = no report. Pass params as variables named exactly `exportName` \u002F `exportFormat` \u002F etc.\n- **ALWAYS run Step 1c after triggering.** Verify the report row exists by exact `exportName` before claiming anything worked. An empty lookup means a **silent failure** (200 + `errors: null` + no row), not \"in progress\" — never report success without a confirmed row. Use a unique `exportName` per run so the lookup matches your row.\n- For `ROLLUP_BREAKDOWN`, you MUST pass `identifier_In`; for `COST_BASIS_INVENTORY`, exactly one `children_Asset_AssetClass_In` — otherwise the report is empty or ERRORs.\n- After triggering, verify success on **both** channels: no `error`\u002F`error_type` on the trigger, and `status` reaches `DONE` (not `ERROR`).\n- Poll the `report` query by `name`, not `exportFormat`; use `ordering` (not `orderBy`) and `link` (not `downloadUrl`).\n- **Present the download link as a clickable markdown link** (e.g. `[Click here to download your report](\u003Clink>)`), never the raw presigned URL. Note that the link is presigned and expires after a limited window.\n- Default `currency` to `\"usd\"` and `outputFormat` to `\"CSV\"` unless the user specifies otherwise.\n- Never truncate or shorten transaction hashes, addresses, report IDs, or `identifier_In` values — always show\u002Fpass them in full.\n- This is a read\u002Fexport skill — **NEVER** run mutations that modify platform data.\n",{"data":38,"body":39},{"name":4,"description":6},{"type":40,"children":41},"root",[42,50,81,102,109,121,128,133,271,281,287,316,329,506,522,1036,1056,1064,1140,1158,1512,1517,1604,1906,1938,1945,2122,2183,2194,2233,2286,2292,2309,2318,2323,2447,2457,2643,2659,2694,2700,2747,2765,2810,2919,3020,3042,3048,3060,3103,3206,3214,3325,3333,3414,3467,3487,3504,3542,3555,3561,3566,3648,3713,3719,4085],{"type":43,"tag":44,"props":45,"children":46},"element","h1",{"id":4},[47],{"type":48,"value":49},"text","TRES Report Create",{"type":43,"tag":51,"props":52,"children":53},"p",{},[54,56,62,64,71,73,79],{"type":48,"value":55},"You create TRES Finance reports programmatically through the ",{"type":43,"tag":57,"props":58,"children":59},"strong",{},[60],{"type":48,"value":61},"tres-mcp",{"type":48,"value":63}," MCP server (GraphQL against the BFF). The flow is always: pick the report → trigger the export → poll until ",{"type":43,"tag":65,"props":66,"children":68},"code",{"className":67},[],[69],{"type":48,"value":70},"DONE",{"type":48,"value":72}," → return the presigned ",{"type":43,"tag":65,"props":74,"children":76},{"className":75},[],[77],{"type":48,"value":78},"link",{"type":48,"value":80},". Optionally download and analyze the file afterwards.",{"type":43,"tag":51,"props":82,"children":83},{},[84,86,92,94,100],{"type":48,"value":85},"If you are unsure ",{"type":43,"tag":87,"props":88,"children":89},"em",{},[90],{"type":48,"value":91},"which",{"type":48,"value":93}," report the user needs, use the ",{"type":43,"tag":65,"props":95,"children":97},{"className":96},[],[98],{"type":48,"value":99},"tres-report-advisor",{"type":48,"value":101}," skill first, then come back here to generate it.",{"type":43,"tag":103,"props":104,"children":106},"h2",{"id":105},"workflow",[107],{"type":48,"value":108},"Workflow",{"type":43,"tag":110,"props":111,"children":115},"pre",{"className":112,"code":114,"language":48},[113],"language-text","- [ ] Step 0: Clarify report type + date range + currency\n- [ ] Step 1: Trigger the export (GraphQL via MCP `execute`)\n- [ ] Step 1b: If the report isn't in the tables below, derive it from the schema\n- [ ] Step 1c: VERIFY a report row was actually created (poll by exact name) — catches silent failures\n- [ ] Step 2: Poll the report query until status == DONE\n- [ ] Step 3 (optional): Download + analyze the file\n",[116],{"type":43,"tag":65,"props":117,"children":119},{"__ignoreMap":118},"",[120],{"type":48,"value":114},{"type":43,"tag":122,"props":123,"children":125},"h3",{"id":124},"step-0-clarify-scope-mandatory-before-triggering",[126],{"type":48,"value":127},"Step 0 — Clarify scope (mandatory before triggering)",{"type":43,"tag":51,"props":129,"children":130},{},[131],{"type":48,"value":132},"Confirm before doing anything:",{"type":43,"tag":134,"props":135,"children":136},"ul",{},[137,166,243,261],{"type":43,"tag":138,"props":139,"children":140},"li",{},[141,146,148],{"type":43,"tag":57,"props":142,"children":143},{},[144],{"type":48,"value":145},"Report type (required).",{"type":48,"value":147}," Match the user's wording to the tables below. If unsure, discover what's available:\n",{"type":43,"tag":110,"props":149,"children":152},{"className":150,"code":151,"language":15,"meta":118,"style":118},"language-graphql shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","query { availableReportTypes { name exportType entitiesType llmDescription } }\n",[153],{"type":43,"tag":65,"props":154,"children":155},{"__ignoreMap":118},[156],{"type":43,"tag":157,"props":158,"children":161},"span",{"class":159,"line":160},"line",1,[162],{"type":43,"tag":157,"props":163,"children":164},{},[165],{"type":48,"value":151},{"type":43,"tag":138,"props":167,"children":168},{},[169,174,176,182,184,190,192],{"type":43,"tag":57,"props":170,"children":171},{},[172],{"type":48,"value":173},"Date range (if applicable).",{"type":48,"value":175}," LEDGER \u002F AUDIT_LOG reports take ",{"type":43,"tag":65,"props":177,"children":179},{"className":178},[],[180],{"type":48,"value":181},"timestamp_Gte",{"type":48,"value":183}," \u002F ",{"type":43,"tag":65,"props":185,"children":187},{"className":186},[],[188],{"type":48,"value":189},"timestamp_Lte",{"type":48,"value":191}," in ISO 8601:\n",{"type":43,"tag":134,"props":193,"children":194},{},[195,214,231],{"type":43,"tag":138,"props":196,"children":197},{},[198,200,206,208],{"type":48,"value":199},"\"Q1 2025\" → Gte ",{"type":43,"tag":65,"props":201,"children":203},{"className":202},[],[204],{"type":48,"value":205},"2025-01-01T00:00:00Z",{"type":48,"value":207},", Lte ",{"type":43,"tag":65,"props":209,"children":211},{"className":210},[],[212],{"type":48,"value":213},"2025-03-31T23:59:59Z",{"type":43,"tag":138,"props":215,"children":216},{},[217,219,224,225],{"type":48,"value":218},"\"2025\" → Gte ",{"type":43,"tag":65,"props":220,"children":222},{"className":221},[],[223],{"type":48,"value":205},{"type":48,"value":207},{"type":43,"tag":65,"props":226,"children":228},{"className":227},[],[229],{"type":48,"value":230},"2025-12-31T23:59:59Z",{"type":43,"tag":138,"props":232,"children":233},{},[234,236,241],{"type":48,"value":235},"If a date range is required and not given, ",{"type":43,"tag":57,"props":237,"children":238},{},[239],{"type":48,"value":240},"ask",{"type":48,"value":242},".",{"type":43,"tag":138,"props":244,"children":245},{},[246,251,253,259],{"type":43,"tag":57,"props":247,"children":248},{},[249],{"type":48,"value":250},"Currency.",{"type":48,"value":252}," Default ",{"type":43,"tag":65,"props":254,"children":256},{"className":255},[],[257],{"type":48,"value":258},"\"usd\"",{"type":48,"value":260}," unless the user says otherwise.",{"type":43,"tag":138,"props":262,"children":263},{},[264,269],{"type":43,"tag":57,"props":265,"children":266},{},[267],{"type":48,"value":268},"Analysis goal (only if they want the data analyzed, not just the file).",{"type":48,"value":270}," What should the data answer? Default to a general summary (totals, top items, trends). Drives Step 3.",{"type":43,"tag":51,"props":272,"children":273},{},[274,276],{"type":48,"value":275},"Confirm briefly, e.g. ",{"type":43,"tag":87,"props":277,"children":278},{},[279],{"type":48,"value":280},"\"I'll generate a Transaction Ledger for Q1 2025 as CSV. Starting now.\"",{"type":43,"tag":122,"props":282,"children":284},{"id":283},"step-1-trigger-the-export",[285],{"type":48,"value":286},"Step 1 — Trigger the export",{"type":43,"tag":51,"props":288,"children":289},{},[290,292,298,300,306,308,314],{"type":48,"value":291},"Call the GraphQL query that matches the report's ",{"type":43,"tag":65,"props":293,"children":295},{"className":294},[],[296],{"type":48,"value":297},"entitiesType",{"type":48,"value":299},", passing the export parameters. Run it with the MCP ",{"type":43,"tag":65,"props":301,"children":303},{"className":302},[],[304],{"type":48,"value":305},"execute",{"type":48,"value":307}," tool (validate first with ",{"type":43,"tag":65,"props":309,"children":311},{"className":310},[],[312],{"type":48,"value":313},"validate_query",{"type":48,"value":315}," if unsure).",{"type":43,"tag":51,"props":317,"children":318},{},[319],{"type":43,"tag":57,"props":320,"children":321},{},[322,327],{"type":43,"tag":65,"props":323,"children":325},{"className":324},[],[326],{"type":48,"value":297},{"type":48,"value":328}," → query to call",{"type":43,"tag":330,"props":331,"children":332},"table",{},[333,351],{"type":43,"tag":334,"props":335,"children":336},"thead",{},[337],{"type":43,"tag":338,"props":339,"children":340},"tr",{},[341,346],{"type":43,"tag":342,"props":343,"children":344},"th",{},[345],{"type":48,"value":297},{"type":43,"tag":342,"props":347,"children":348},{},[349],{"type":48,"value":350},"Query",{"type":43,"tag":352,"props":353,"children":354},"tbody",{},[355,373,390,406,422,439,455,472,489],{"type":43,"tag":338,"props":356,"children":357},{},[358,364],{"type":43,"tag":359,"props":360,"children":361},"td",{},[362],{"type":48,"value":363},"LEDGER",{"type":43,"tag":359,"props":365,"children":366},{},[367],{"type":43,"tag":65,"props":368,"children":370},{"className":369},[],[371],{"type":48,"value":372},"transaction",{"type":43,"tag":338,"props":374,"children":375},{},[376,381],{"type":43,"tag":359,"props":377,"children":378},{},[379],{"type":48,"value":380},"ASSETS",{"type":43,"tag":359,"props":382,"children":383},{},[384],{"type":43,"tag":65,"props":385,"children":387},{"className":386},[],[388],{"type":48,"value":389},"organizationBalance",{"type":43,"tag":338,"props":391,"children":392},{},[393,398],{"type":43,"tag":359,"props":394,"children":395},{},[396],{"type":48,"value":397},"BALANCE",{"type":43,"tag":359,"props":399,"children":400},{},[401],{"type":43,"tag":65,"props":402,"children":404},{"className":403},[],[405],{"type":48,"value":389},{"type":43,"tag":338,"props":407,"children":408},{},[409,414],{"type":43,"tag":359,"props":410,"children":411},{},[412],{"type":48,"value":413},"HISTORICAL_BALANCE",{"type":43,"tag":359,"props":415,"children":416},{},[417],{"type":43,"tag":65,"props":418,"children":420},{"className":419},[],[421],{"type":48,"value":389},{"type":43,"tag":338,"props":423,"children":424},{},[425,430],{"type":43,"tag":359,"props":426,"children":427},{},[428],{"type":48,"value":429},"ACCOUNTS",{"type":43,"tag":359,"props":431,"children":432},{},[433],{"type":43,"tag":65,"props":434,"children":436},{"className":435},[],[437],{"type":48,"value":438},"internalAccount",{"type":43,"tag":338,"props":440,"children":441},{},[442,447],{"type":43,"tag":359,"props":443,"children":444},{},[445],{"type":48,"value":446},"GENERAL",{"type":43,"tag":359,"props":448,"children":449},{},[450],{"type":43,"tag":65,"props":451,"children":453},{"className":452},[],[454],{"type":48,"value":438},{"type":43,"tag":338,"props":456,"children":457},{},[458,463],{"type":43,"tag":359,"props":459,"children":460},{},[461],{"type":48,"value":462},"STAKING_DATA",{"type":43,"tag":359,"props":464,"children":465},{},[466],{"type":43,"tag":65,"props":467,"children":469},{"className":468},[],[470],{"type":48,"value":471},"stakingYieldRecord",{"type":43,"tag":338,"props":473,"children":474},{},[475,480],{"type":43,"tag":359,"props":476,"children":477},{},[478],{"type":48,"value":479},"AUDIT_LOG",{"type":43,"tag":359,"props":481,"children":482},{},[483],{"type":43,"tag":65,"props":484,"children":486},{"className":485},[],[487],{"type":48,"value":488},"auditLog",{"type":43,"tag":338,"props":490,"children":491},{},[492,497],{"type":43,"tag":359,"props":493,"children":494},{},[495],{"type":48,"value":496},"LOGIN_HISTORY",{"type":43,"tag":359,"props":498,"children":499},{},[500],{"type":43,"tag":65,"props":501,"children":503},{"className":502},[],[504],{"type":48,"value":505},"loginHistoryExport",{"type":43,"tag":51,"props":507,"children":508},{},[509],{"type":43,"tag":57,"props":510,"children":511},{},[512,514,520],{"type":48,"value":513},"Report catalog (",{"type":43,"tag":65,"props":515,"children":517},{"className":516},[],[518],{"type":48,"value":519},"exportFormat",{"type":48,"value":521}," values — verified against prod)",{"type":43,"tag":330,"props":523,"children":524},{},[525,544],{"type":43,"tag":334,"props":526,"children":527},{},[528],{"type":43,"tag":338,"props":529,"children":530},{},[531,536,540],{"type":43,"tag":342,"props":532,"children":533},{},[534],{"type":48,"value":535},"Report name",{"type":43,"tag":342,"props":537,"children":538},{},[539],{"type":48,"value":519},{"type":43,"tag":342,"props":541,"children":542},{},[543],{"type":48,"value":297},{"type":43,"tag":352,"props":545,"children":546},{},[547,564,581,598,615,632,649,666,683,700,717,734,751,768,785,802,819,836,853,869,886,903,920,937,954,971,988,1004,1020],{"type":43,"tag":338,"props":548,"children":549},{},[550,555,560],{"type":43,"tag":359,"props":551,"children":552},{},[553],{"type":48,"value":554},"Transaction Ledger",{"type":43,"tag":359,"props":556,"children":557},{},[558],{"type":48,"value":559},"BASIC_RAW_TRANSACTIONS",{"type":43,"tag":359,"props":561,"children":562},{},[563],{"type":48,"value":363},{"type":43,"tag":338,"props":565,"children":566},{},[567,572,577],{"type":43,"tag":359,"props":568,"children":569},{},[570],{"type":48,"value":571},"Realized Gains & Losses",{"type":43,"tag":359,"props":573,"children":574},{},[575],{"type":48,"value":576},"EXTENDED_RAW_TRANSACTIONS",{"type":43,"tag":359,"props":578,"children":579},{},[580],{"type":48,"value":363},{"type":43,"tag":338,"props":582,"children":583},{},[584,589,594],{"type":43,"tag":359,"props":585,"children":586},{},[587],{"type":48,"value":588},"Cost Breakdown Raw Transactions",{"type":43,"tag":359,"props":590,"children":591},{},[592],{"type":48,"value":593},"COST_BREAKDOWN_RAW_TRANSACTIONS",{"type":43,"tag":359,"props":595,"children":596},{},[597],{"type":48,"value":363},{"type":43,"tag":338,"props":599,"children":600},{},[601,606,611],{"type":43,"tag":359,"props":602,"children":603},{},[604],{"type":48,"value":605},"Rollup Breakdown †",{"type":43,"tag":359,"props":607,"children":608},{},[609],{"type":48,"value":610},"ROLLUP_BREAKDOWN",{"type":43,"tag":359,"props":612,"children":613},{},[614],{"type":48,"value":363},{"type":43,"tag":338,"props":616,"children":617},{},[618,623,628],{"type":43,"tag":359,"props":619,"children":620},{},[621],{"type":48,"value":622},"Ledger Reconciliation",{"type":43,"tag":359,"props":624,"children":625},{},[626],{"type":48,"value":627},"RECONCILIATION",{"type":43,"tag":359,"props":629,"children":630},{},[631],{"type":48,"value":363},{"type":43,"tag":338,"props":633,"children":634},{},[635,640,645],{"type":43,"tag":359,"props":636,"children":637},{},[638],{"type":48,"value":639},"Cost Basis Roll Forward",{"type":43,"tag":359,"props":641,"children":642},{},[643],{"type":48,"value":644},"COST_BASIS_ROLL_FORWARD",{"type":43,"tag":359,"props":646,"children":647},{},[648],{"type":48,"value":363},{"type":43,"tag":338,"props":650,"children":651},{},[652,657,662],{"type":43,"tag":359,"props":653,"children":654},{},[655],{"type":48,"value":656},"Asset Roll Forward",{"type":43,"tag":359,"props":658,"children":659},{},[660],{"type":48,"value":661},"ASSET_ROLL_FORWARD",{"type":43,"tag":359,"props":663,"children":664},{},[665],{"type":48,"value":363},{"type":43,"tag":338,"props":667,"children":668},{},[669,674,679],{"type":43,"tag":359,"props":670,"children":671},{},[672],{"type":48,"value":673},"ERP Pre-Sync",{"type":43,"tag":359,"props":675,"children":676},{},[677],{"type":48,"value":678},"PRE_SYNC_JOURNAL",{"type":43,"tag":359,"props":680,"children":681},{},[682],{"type":48,"value":363},{"type":43,"tag":338,"props":684,"children":685},{},[686,691,696],{"type":43,"tag":359,"props":687,"children":688},{},[689],{"type":48,"value":690},"ERP Post-Sync",{"type":43,"tag":359,"props":692,"children":693},{},[694],{"type":48,"value":695},"POST_SYNC_JOURNAL",{"type":43,"tag":359,"props":697,"children":698},{},[699],{"type":48,"value":363},{"type":43,"tag":338,"props":701,"children":702},{},[703,708,713],{"type":43,"tag":359,"props":704,"children":705},{},[706],{"type":48,"value":707},"MT940 Statement",{"type":43,"tag":359,"props":709,"children":710},{},[711],{"type":48,"value":712},"MT940",{"type":43,"tag":359,"props":714,"children":715},{},[716],{"type":48,"value":363},{"type":43,"tag":338,"props":718,"children":719},{},[720,725,730],{"type":43,"tag":359,"props":721,"children":722},{},[723],{"type":48,"value":724},"Asset Balances",{"type":43,"tag":359,"props":726,"children":727},{},[728],{"type":48,"value":729},"RAW_BALANCES",{"type":43,"tag":359,"props":731,"children":732},{},[733],{"type":48,"value":380},{"type":43,"tag":338,"props":735,"children":736},{},[737,742,747],{"type":43,"tag":359,"props":738,"children":739},{},[740],{"type":48,"value":741},"Asset Balances V2",{"type":43,"tag":359,"props":743,"children":744},{},[745],{"type":48,"value":746},"RAW_BALANCES_V2",{"type":43,"tag":359,"props":748,"children":749},{},[750],{"type":48,"value":380},{"type":43,"tag":338,"props":752,"children":753},{},[754,759,764],{"type":43,"tag":359,"props":755,"children":756},{},[757],{"type":48,"value":758},"Asset Balances - Archives †",{"type":43,"tag":359,"props":760,"children":761},{},[762],{"type":48,"value":763},"ARCHIVED_BALANCES",{"type":43,"tag":359,"props":765,"children":766},{},[767],{"type":48,"value":380},{"type":43,"tag":338,"props":769,"children":770},{},[771,776,781],{"type":43,"tag":359,"props":772,"children":773},{},[774],{"type":48,"value":775},"Balance Trends",{"type":43,"tag":359,"props":777,"children":778},{},[779],{"type":48,"value":780},"BALANCE_TRENDS",{"type":43,"tag":359,"props":782,"children":783},{},[784],{"type":48,"value":380},{"type":43,"tag":338,"props":786,"children":787},{},[788,793,798],{"type":43,"tag":359,"props":789,"children":790},{},[791],{"type":48,"value":792},"Wallet Balances",{"type":43,"tag":359,"props":794,"children":795},{},[796],{"type":48,"value":797},"INTERNAL_ACCOUNTS_BALANCES",{"type":43,"tag":359,"props":799,"children":800},{},[801],{"type":48,"value":380},{"type":43,"tag":338,"props":803,"children":804},{},[805,810,815],{"type":43,"tag":359,"props":806,"children":807},{},[808],{"type":48,"value":809},"Cost Basis Stack Per Asset",{"type":43,"tag":359,"props":811,"children":812},{},[813],{"type":48,"value":814},"COST_BASIS_STACK_PER_ASSET",{"type":43,"tag":359,"props":816,"children":817},{},[818],{"type":48,"value":380},{"type":43,"tag":338,"props":820,"children":821},{},[822,827,832],{"type":43,"tag":359,"props":823,"children":824},{},[825],{"type":48,"value":826},"Asset Fiat Values",{"type":43,"tag":359,"props":828,"children":829},{},[830],{"type":48,"value":831},"DAILY_ASSET_PRICING",{"type":43,"tag":359,"props":833,"children":834},{},[835],{"type":48,"value":380},{"type":43,"tag":338,"props":837,"children":838},{},[839,844,849],{"type":43,"tag":359,"props":840,"children":841},{},[842],{"type":48,"value":843},"Revaluation Report",{"type":43,"tag":359,"props":845,"children":846},{},[847],{"type":48,"value":848},"REEVALUATION",{"type":43,"tag":359,"props":850,"children":851},{},[852],{"type":48,"value":380},{"type":43,"tag":338,"props":854,"children":855},{},[856,861,865],{"type":43,"tag":359,"props":857,"children":858},{},[859],{"type":48,"value":860},"Historical Balance Format",{"type":43,"tag":359,"props":862,"children":863},{},[864],{"type":48,"value":413},{"type":43,"tag":359,"props":866,"children":867},{},[868],{"type":48,"value":413},{"type":43,"tag":338,"props":870,"children":871},{},[872,877,882],{"type":43,"tag":359,"props":873,"children":874},{},[875],{"type":48,"value":876},"Cost Basis Inventory †",{"type":43,"tag":359,"props":878,"children":879},{},[880],{"type":48,"value":881},"COST_BASIS_INVENTORY",{"type":43,"tag":359,"props":883,"children":884},{},[885],{"type":48,"value":397},{"type":43,"tag":338,"props":887,"children":888},{},[889,894,899],{"type":43,"tag":359,"props":890,"children":891},{},[892],{"type":48,"value":893},"Organization Wallets",{"type":43,"tag":359,"props":895,"children":896},{},[897],{"type":48,"value":898},"INTERNAL_ACCOUNTS",{"type":43,"tag":359,"props":900,"children":901},{},[902],{"type":48,"value":429},{"type":43,"tag":338,"props":904,"children":905},{},[906,911,916],{"type":43,"tag":359,"props":907,"children":908},{},[909],{"type":48,"value":910},"Contacts",{"type":43,"tag":359,"props":912,"children":913},{},[914],{"type":48,"value":915},"CONTACTS",{"type":43,"tag":359,"props":917,"children":918},{},[919],{"type":48,"value":429},{"type":43,"tag":338,"props":921,"children":922},{},[923,928,933],{"type":43,"tag":359,"props":924,"children":925},{},[926],{"type":48,"value":927},"Third Party Addresses",{"type":43,"tag":359,"props":929,"children":930},{},[931],{"type":48,"value":932},"THIRD_PARTY_ADDRESSES",{"type":43,"tag":359,"props":934,"children":935},{},[936],{"type":48,"value":429},{"type":43,"tag":338,"props":938,"children":939},{},[940,945,950],{"type":43,"tag":359,"props":941,"children":942},{},[943],{"type":48,"value":944},"Chart of Account",{"type":43,"tag":359,"props":946,"children":947},{},[948],{"type":48,"value":949},"CHART_OF_ACCOUNT",{"type":43,"tag":359,"props":951,"children":952},{},[953],{"type":48,"value":446},{"type":43,"tag":338,"props":955,"children":956},{},[957,962,967],{"type":43,"tag":359,"props":958,"children":959},{},[960],{"type":48,"value":961},"ERP Rules",{"type":43,"tag":359,"props":963,"children":964},{},[965],{"type":48,"value":966},"ERP_RULES",{"type":43,"tag":359,"props":968,"children":969},{},[970],{"type":48,"value":446},{"type":43,"tag":338,"props":972,"children":973},{},[974,979,984],{"type":43,"tag":359,"props":975,"children":976},{},[977],{"type":48,"value":978},"Connected Custodians",{"type":43,"tag":359,"props":980,"children":981},{},[982],{"type":48,"value":983},"CONNECTED_CUSTODIANS",{"type":43,"tag":359,"props":985,"children":986},{},[987],{"type":48,"value":446},{"type":43,"tag":338,"props":989,"children":990},{},[991,996,1000],{"type":43,"tag":359,"props":992,"children":993},{},[994],{"type":48,"value":995},"Staking Rewards & Positions",{"type":43,"tag":359,"props":997,"children":998},{},[999],{"type":48,"value":462},{"type":43,"tag":359,"props":1001,"children":1002},{},[1003],{"type":48,"value":462},{"type":43,"tag":338,"props":1005,"children":1006},{},[1007,1012,1016],{"type":43,"tag":359,"props":1008,"children":1009},{},[1010],{"type":48,"value":1011},"Audit Trail \u002F Log",{"type":43,"tag":359,"props":1013,"children":1014},{},[1015],{"type":48,"value":479},{"type":43,"tag":359,"props":1017,"children":1018},{},[1019],{"type":48,"value":479},{"type":43,"tag":338,"props":1021,"children":1022},{},[1023,1028,1032],{"type":43,"tag":359,"props":1024,"children":1025},{},[1026],{"type":48,"value":1027},"Login History",{"type":43,"tag":359,"props":1029,"children":1030},{},[1031],{"type":48,"value":496},{"type":43,"tag":359,"props":1033,"children":1034},{},[1035],{"type":48,"value":496},{"type":43,"tag":51,"props":1037,"children":1038},{},[1039,1041,1047,1049,1054],{"type":48,"value":1040},"† = special handling (see \"Reports needing extra parameters\" below). The org catalog evolves — ",{"type":43,"tag":65,"props":1042,"children":1044},{"className":1043},[],[1045],{"type":48,"value":1046},"availableReportTypes",{"type":48,"value":1048}," is authoritative. ",{"type":43,"tag":57,"props":1050,"children":1051},{},[1052],{"type":48,"value":1053},"If a requested report isn't in this table, go to Step 1b and derive it from the schema",{"type":48,"value":1055}," rather than guessing.",{"type":43,"tag":51,"props":1057,"children":1058},{},[1059],{"type":43,"tag":57,"props":1060,"children":1061},{},[1062],{"type":48,"value":1063},"Export parameters (always include):",{"type":43,"tag":134,"props":1065,"children":1066},{},[1067,1077,1096,1114],{"type":43,"tag":138,"props":1068,"children":1069},{},[1070,1075],{"type":43,"tag":65,"props":1071,"children":1073},{"className":1072},[],[1074],{"type":48,"value":519},{"type":48,"value":1076}," — value from the table above (UPPER_CASE)",{"type":43,"tag":138,"props":1078,"children":1079},{},[1080,1086,1088,1094],{"type":43,"tag":65,"props":1081,"children":1083},{"className":1082},[],[1084],{"type":48,"value":1085},"exportName",{"type":48,"value":1087}," — a descriptive, unique name (e.g. ",{"type":43,"tag":65,"props":1089,"children":1091},{"className":1090},[],[1092],{"type":48,"value":1093},"\"Transaction Ledger Q1 2025\"",{"type":48,"value":1095},") — you'll match on this in Step 2",{"type":43,"tag":138,"props":1097,"children":1098},{},[1099,1105,1107,1112],{"type":43,"tag":65,"props":1100,"children":1102},{"className":1101},[],[1103],{"type":48,"value":1104},"currency",{"type":48,"value":1106}," — ",{"type":43,"tag":65,"props":1108,"children":1110},{"className":1109},[],[1111],{"type":48,"value":258},{"type":48,"value":1113}," unless told otherwise",{"type":43,"tag":138,"props":1115,"children":1116},{},[1117,1123,1124,1130,1132,1138],{"type":43,"tag":65,"props":1118,"children":1120},{"className":1119},[],[1121],{"type":48,"value":1122},"outputFormat",{"type":48,"value":1106},{"type":43,"tag":65,"props":1125,"children":1127},{"className":1126},[],[1128],{"type":48,"value":1129},"\"CSV\"",{"type":48,"value":1131}," for downstream analysis, or ",{"type":43,"tag":65,"props":1133,"children":1135},{"className":1134},[],[1136],{"type":48,"value":1137},"\"XLSX\"",{"type":48,"value":1139}," if the user wants a spreadsheet",{"type":43,"tag":51,"props":1141,"children":1142},{},[1143,1145,1150,1151,1156],{"type":48,"value":1144},"Add ",{"type":43,"tag":65,"props":1146,"children":1148},{"className":1147},[],[1149],{"type":48,"value":181},{"type":48,"value":183},{"type":43,"tag":65,"props":1152,"children":1154},{"className":1153},[],[1155],{"type":48,"value":189},{"type":48,"value":1157}," for date-ranged reports (LEDGER, AUDIT_LOG).",{"type":43,"tag":1159,"props":1160,"children":1161},"blockquote",{},[1162,1168,1224,1464],{"type":43,"tag":122,"props":1163,"children":1165},{"id":1164},"️-graphql-variable-types-get-these-exactly-right-first-run-correctness",[1166],{"type":48,"value":1167},"⚠️ GraphQL variable types — get these EXACTLY right (first-run correctness)",{"type":43,"tag":51,"props":1169,"children":1170},{},[1171,1173,1178,1180,1185,1187,1192,1194,1200,1201,1207,1209,1214,1216,1222],{"type":48,"value":1172},"The BFF ",{"type":43,"tag":57,"props":1174,"children":1175},{},[1176],{"type":48,"value":1177},"strictly validates variable types",{"type":48,"value":1179},". A wrong type returns HTTP 400 and ",{"type":43,"tag":57,"props":1181,"children":1182},{},[1183],{"type":48,"value":1184},"no report is created",{"type":48,"value":1186}," — and the ",{"type":43,"tag":65,"props":1188,"children":1190},{"className":1189},[],[1191],{"type":48,"value":305},{"type":48,"value":1193}," tool surfaces this under an ",{"type":43,"tag":65,"props":1195,"children":1197},{"className":1196},[],[1198],{"type":48,"value":1199},"error",{"type":48,"value":183},{"type":43,"tag":65,"props":1202,"children":1204},{"className":1203},[],[1205],{"type":48,"value":1206},"error_type",{"type":48,"value":1208}," field, ",{"type":43,"tag":87,"props":1210,"children":1211},{},[1212],{"type":48,"value":1213},"not",{"type":48,"value":1215}," the GraphQL ",{"type":43,"tag":65,"props":1217,"children":1219},{"className":1218},[],[1220],{"type":48,"value":1221},"errors",{"type":48,"value":1223}," array, so it is easy to miss. Declare variables with these exact types:",{"type":43,"tag":330,"props":1225,"children":1226},{},[1227,1248],{"type":43,"tag":334,"props":1228,"children":1229},{},[1230],{"type":43,"tag":338,"props":1231,"children":1232},{},[1233,1238,1243],{"type":43,"tag":342,"props":1234,"children":1235},{},[1236],{"type":48,"value":1237},"Variable",{"type":43,"tag":342,"props":1239,"children":1240},{},[1241],{"type":48,"value":1242},"GraphQL type",{"type":43,"tag":342,"props":1244,"children":1245},{},[1246],{"type":48,"value":1247},"Notes",{"type":43,"tag":352,"props":1249,"children":1250},{},[1251,1276,1300,1329,1375,1415],{"type":43,"tag":338,"props":1252,"children":1253},{},[1254,1262,1271],{"type":43,"tag":359,"props":1255,"children":1256},{},[1257],{"type":43,"tag":65,"props":1258,"children":1260},{"className":1259},[],[1261],{"type":48,"value":519},{"type":43,"tag":359,"props":1263,"children":1264},{},[1265],{"type":43,"tag":65,"props":1266,"children":1268},{"className":1267},[],[1269],{"type":48,"value":1270},"String",{"type":43,"tag":359,"props":1272,"children":1273},{},[1274],{"type":48,"value":1275},"the UPPER_CASE value",{"type":43,"tag":338,"props":1277,"children":1278},{},[1279,1287,1295],{"type":43,"tag":359,"props":1280,"children":1281},{},[1282],{"type":43,"tag":65,"props":1283,"children":1285},{"className":1284},[],[1286],{"type":48,"value":1085},{"type":43,"tag":359,"props":1288,"children":1289},{},[1290],{"type":43,"tag":65,"props":1291,"children":1293},{"className":1292},[],[1294],{"type":48,"value":1270},{"type":43,"tag":359,"props":1296,"children":1297},{},[1298],{"type":48,"value":1299},"unique name",{"type":43,"tag":338,"props":1301,"children":1302},{},[1303,1311,1319],{"type":43,"tag":359,"props":1304,"children":1305},{},[1306],{"type":43,"tag":65,"props":1307,"children":1309},{"className":1308},[],[1310],{"type":48,"value":1104},{"type":43,"tag":359,"props":1312,"children":1313},{},[1314],{"type":43,"tag":65,"props":1315,"children":1317},{"className":1316},[],[1318],{"type":48,"value":1270},{"type":43,"tag":359,"props":1320,"children":1321},{},[1322,1324],{"type":48,"value":1323},"e.g. ",{"type":43,"tag":65,"props":1325,"children":1327},{"className":1326},[],[1328],{"type":48,"value":258},{"type":43,"tag":338,"props":1330,"children":1331},{},[1332,1340,1352],{"type":43,"tag":359,"props":1333,"children":1334},{},[1335],{"type":43,"tag":65,"props":1336,"children":1338},{"className":1337},[],[1339],{"type":48,"value":1122},{"type":43,"tag":359,"props":1341,"children":1342},{},[1343],{"type":43,"tag":57,"props":1344,"children":1345},{},[1346],{"type":43,"tag":65,"props":1347,"children":1349},{"className":1348},[],[1350],{"type":48,"value":1351},"ReportOutputFormat",{"type":43,"tag":359,"props":1353,"children":1354},{},[1355,1357,1362,1364,1369,1370],{"type":48,"value":1356},"NOT ",{"type":43,"tag":65,"props":1358,"children":1360},{"className":1359},[],[1361],{"type":48,"value":1270},{"type":48,"value":1363},". Value ",{"type":43,"tag":65,"props":1365,"children":1367},{"className":1366},[],[1368],{"type":48,"value":1129},{"type":48,"value":183},{"type":43,"tag":65,"props":1371,"children":1373},{"className":1372},[],[1374],{"type":48,"value":1137},{"type":43,"tag":338,"props":1376,"children":1377},{},[1378,1392,1404],{"type":43,"tag":359,"props":1379,"children":1380},{},[1381,1386,1387],{"type":43,"tag":65,"props":1382,"children":1384},{"className":1383},[],[1385],{"type":48,"value":181},{"type":48,"value":183},{"type":43,"tag":65,"props":1388,"children":1390},{"className":1389},[],[1391],{"type":48,"value":189},{"type":43,"tag":359,"props":1393,"children":1394},{},[1395],{"type":43,"tag":57,"props":1396,"children":1397},{},[1398],{"type":43,"tag":65,"props":1399,"children":1401},{"className":1400},[],[1402],{"type":48,"value":1403},"DateTime",{"type":43,"tag":359,"props":1405,"children":1406},{},[1407,1408,1413],{"type":48,"value":1356},{"type":43,"tag":65,"props":1409,"children":1411},{"className":1410},[],[1412],{"type":48,"value":1270},{"type":48,"value":1414},". ISO 8601 value",{"type":43,"tag":338,"props":1416,"children":1417},{},[1418,1442,1454],{"type":43,"tag":359,"props":1419,"children":1420},{},[1421,1427,1429,1435,1436],{"type":43,"tag":65,"props":1422,"children":1424},{"className":1423},[],[1425],{"type":48,"value":1426},"identifier_In",{"type":48,"value":1428},", ",{"type":43,"tag":65,"props":1430,"children":1432},{"className":1431},[],[1433],{"type":48,"value":1434},"children_Asset_AssetClass_In",{"type":48,"value":1428},{"type":43,"tag":65,"props":1437,"children":1439},{"className":1438},[],[1440],{"type":48,"value":1441},"children_BelongsTo_In",{"type":43,"tag":359,"props":1443,"children":1444},{},[1445],{"type":43,"tag":57,"props":1446,"children":1447},{},[1448],{"type":43,"tag":65,"props":1449,"children":1451},{"className":1450},[],[1452],{"type":48,"value":1453},"[String]",{"type":43,"tag":359,"props":1455,"children":1456},{},[1457,1458],{"type":48,"value":1356},{"type":43,"tag":65,"props":1459,"children":1461},{"className":1460},[],[1462],{"type":48,"value":1463},"[ID]",{"type":43,"tag":51,"props":1465,"children":1466},{},[1467,1469,1474,1476,1481,1482,1487,1489,1495,1497,1503,1505,1510],{"type":48,"value":1468},"The params must be passed as ",{"type":43,"tag":57,"props":1470,"children":1471},{},[1472],{"type":48,"value":1473},"variables named exactly",{"type":48,"value":1475}," ",{"type":43,"tag":65,"props":1477,"children":1479},{"className":1478},[],[1480],{"type":48,"value":1085},{"type":48,"value":1428},{"type":43,"tag":65,"props":1483,"children":1485},{"className":1484},[],[1486],{"type":48,"value":519},{"type":48,"value":1488},", etc. — the BFF reads them from ",{"type":43,"tag":65,"props":1490,"children":1492},{"className":1491},[],[1493],{"type":48,"value":1494},"info.variable_values",{"type":48,"value":1496}," by name. Inline literals or renamed variables (",{"type":43,"tag":65,"props":1498,"children":1500},{"className":1499},[],[1501],{"type":48,"value":1502},"$ef",{"type":48,"value":1504},") silently create ",{"type":43,"tag":57,"props":1506,"children":1507},{},[1508],{"type":48,"value":1509},"no",{"type":48,"value":1511}," report.",{"type":43,"tag":51,"props":1513,"children":1514},{},[1515],{"type":48,"value":1516},"Example — trigger a Transaction Ledger export (verified working form):",{"type":43,"tag":110,"props":1518,"children":1520},{"className":150,"code":1519,"language":15,"meta":118,"style":118},"query($limit: Int, $offset: Int, $timestamp_Gte: DateTime, $timestamp_Lte: DateTime,\n      $exportFormat: String, $exportName: String, $currency: String, $outputFormat: ReportOutputFormat) {\n  transaction(limit: $limit, offset: $offset, timestamp_Gte: $timestamp_Gte,\n              timestamp_Lte: $timestamp_Lte, exportFormat: $exportFormat,\n              exportName: $exportName, currency: $currency, outputFormat: $outputFormat) {\n    results { id }\n    totalCount\n  }\n}\n",[1521],{"type":43,"tag":65,"props":1522,"children":1523},{"__ignoreMap":118},[1524,1532,1541,1550,1559,1568,1577,1586,1595],{"type":43,"tag":157,"props":1525,"children":1526},{"class":159,"line":160},[1527],{"type":43,"tag":157,"props":1528,"children":1529},{},[1530],{"type":48,"value":1531},"query($limit: Int, $offset: Int, $timestamp_Gte: DateTime, $timestamp_Lte: DateTime,\n",{"type":43,"tag":157,"props":1533,"children":1535},{"class":159,"line":1534},2,[1536],{"type":43,"tag":157,"props":1537,"children":1538},{},[1539],{"type":48,"value":1540},"      $exportFormat: String, $exportName: String, $currency: String, $outputFormat: ReportOutputFormat) {\n",{"type":43,"tag":157,"props":1542,"children":1544},{"class":159,"line":1543},3,[1545],{"type":43,"tag":157,"props":1546,"children":1547},{},[1548],{"type":48,"value":1549},"  transaction(limit: $limit, offset: $offset, timestamp_Gte: $timestamp_Gte,\n",{"type":43,"tag":157,"props":1551,"children":1553},{"class":159,"line":1552},4,[1554],{"type":43,"tag":157,"props":1555,"children":1556},{},[1557],{"type":48,"value":1558},"              timestamp_Lte: $timestamp_Lte, exportFormat: $exportFormat,\n",{"type":43,"tag":157,"props":1560,"children":1562},{"class":159,"line":1561},5,[1563],{"type":43,"tag":157,"props":1564,"children":1565},{},[1566],{"type":48,"value":1567},"              exportName: $exportName, currency: $currency, outputFormat: $outputFormat) {\n",{"type":43,"tag":157,"props":1569,"children":1571},{"class":159,"line":1570},6,[1572],{"type":43,"tag":157,"props":1573,"children":1574},{},[1575],{"type":48,"value":1576},"    results { id }\n",{"type":43,"tag":157,"props":1578,"children":1580},{"class":159,"line":1579},7,[1581],{"type":43,"tag":157,"props":1582,"children":1583},{},[1584],{"type":48,"value":1585},"    totalCount\n",{"type":43,"tag":157,"props":1587,"children":1589},{"class":159,"line":1588},8,[1590],{"type":43,"tag":157,"props":1591,"children":1592},{},[1593],{"type":48,"value":1594},"  }\n",{"type":43,"tag":157,"props":1596,"children":1598},{"class":159,"line":1597},9,[1599],{"type":43,"tag":157,"props":1600,"children":1601},{},[1602],{"type":48,"value":1603},"}\n",{"type":43,"tag":110,"props":1605,"children":1609},{"className":1606,"code":1607,"language":1608,"meta":118,"style":118},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"limit\": 1,\n  \"offset\": 0,\n  \"timestamp_Gte\": \"2025-01-01T00:00:00Z\",\n  \"timestamp_Lte\": \"2025-03-31T23:59:59Z\",\n  \"exportFormat\": \"BASIC_RAW_TRANSACTIONS\",\n  \"exportName\": \"Transaction Ledger Q1 2025\",\n  \"currency\": \"usd\",\n  \"outputFormat\": \"CSV\"\n}\n","json",[1610],{"type":43,"tag":65,"props":1611,"children":1612},{"__ignoreMap":118},[1613,1622,1657,1686,1723,1758,1793,1829,1865,1898],{"type":43,"tag":157,"props":1614,"children":1615},{"class":159,"line":160},[1616],{"type":43,"tag":157,"props":1617,"children":1619},{"style":1618},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[1620],{"type":48,"value":1621},"{\n",{"type":43,"tag":157,"props":1623,"children":1624},{"class":159,"line":1534},[1625,1630,1636,1641,1646,1652],{"type":43,"tag":157,"props":1626,"children":1627},{"style":1618},[1628],{"type":48,"value":1629},"  \"",{"type":43,"tag":157,"props":1631,"children":1633},{"style":1632},"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA",[1634],{"type":48,"value":1635},"limit",{"type":43,"tag":157,"props":1637,"children":1638},{"style":1618},[1639],{"type":48,"value":1640},"\"",{"type":43,"tag":157,"props":1642,"children":1643},{"style":1618},[1644],{"type":48,"value":1645},":",{"type":43,"tag":157,"props":1647,"children":1649},{"style":1648},"--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C",[1650],{"type":48,"value":1651}," 1",{"type":43,"tag":157,"props":1653,"children":1654},{"style":1618},[1655],{"type":48,"value":1656},",\n",{"type":43,"tag":157,"props":1658,"children":1659},{"class":159,"line":1543},[1660,1664,1669,1673,1677,1682],{"type":43,"tag":157,"props":1661,"children":1662},{"style":1618},[1663],{"type":48,"value":1629},{"type":43,"tag":157,"props":1665,"children":1666},{"style":1632},[1667],{"type":48,"value":1668},"offset",{"type":43,"tag":157,"props":1670,"children":1671},{"style":1618},[1672],{"type":48,"value":1640},{"type":43,"tag":157,"props":1674,"children":1675},{"style":1618},[1676],{"type":48,"value":1645},{"type":43,"tag":157,"props":1678,"children":1679},{"style":1648},[1680],{"type":48,"value":1681}," 0",{"type":43,"tag":157,"props":1683,"children":1684},{"style":1618},[1685],{"type":48,"value":1656},{"type":43,"tag":157,"props":1687,"children":1688},{"class":159,"line":1552},[1689,1693,1697,1701,1705,1710,1715,1719],{"type":43,"tag":157,"props":1690,"children":1691},{"style":1618},[1692],{"type":48,"value":1629},{"type":43,"tag":157,"props":1694,"children":1695},{"style":1632},[1696],{"type":48,"value":181},{"type":43,"tag":157,"props":1698,"children":1699},{"style":1618},[1700],{"type":48,"value":1640},{"type":43,"tag":157,"props":1702,"children":1703},{"style":1618},[1704],{"type":48,"value":1645},{"type":43,"tag":157,"props":1706,"children":1707},{"style":1618},[1708],{"type":48,"value":1709}," \"",{"type":43,"tag":157,"props":1711,"children":1713},{"style":1712},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[1714],{"type":48,"value":205},{"type":43,"tag":157,"props":1716,"children":1717},{"style":1618},[1718],{"type":48,"value":1640},{"type":43,"tag":157,"props":1720,"children":1721},{"style":1618},[1722],{"type":48,"value":1656},{"type":43,"tag":157,"props":1724,"children":1725},{"class":159,"line":1561},[1726,1730,1734,1738,1742,1746,1750,1754],{"type":43,"tag":157,"props":1727,"children":1728},{"style":1618},[1729],{"type":48,"value":1629},{"type":43,"tag":157,"props":1731,"children":1732},{"style":1632},[1733],{"type":48,"value":189},{"type":43,"tag":157,"props":1735,"children":1736},{"style":1618},[1737],{"type":48,"value":1640},{"type":43,"tag":157,"props":1739,"children":1740},{"style":1618},[1741],{"type":48,"value":1645},{"type":43,"tag":157,"props":1743,"children":1744},{"style":1618},[1745],{"type":48,"value":1709},{"type":43,"tag":157,"props":1747,"children":1748},{"style":1712},[1749],{"type":48,"value":213},{"type":43,"tag":157,"props":1751,"children":1752},{"style":1618},[1753],{"type":48,"value":1640},{"type":43,"tag":157,"props":1755,"children":1756},{"style":1618},[1757],{"type":48,"value":1656},{"type":43,"tag":157,"props":1759,"children":1760},{"class":159,"line":1570},[1761,1765,1769,1773,1777,1781,1785,1789],{"type":43,"tag":157,"props":1762,"children":1763},{"style":1618},[1764],{"type":48,"value":1629},{"type":43,"tag":157,"props":1766,"children":1767},{"style":1632},[1768],{"type":48,"value":519},{"type":43,"tag":157,"props":1770,"children":1771},{"style":1618},[1772],{"type":48,"value":1640},{"type":43,"tag":157,"props":1774,"children":1775},{"style":1618},[1776],{"type":48,"value":1645},{"type":43,"tag":157,"props":1778,"children":1779},{"style":1618},[1780],{"type":48,"value":1709},{"type":43,"tag":157,"props":1782,"children":1783},{"style":1712},[1784],{"type":48,"value":559},{"type":43,"tag":157,"props":1786,"children":1787},{"style":1618},[1788],{"type":48,"value":1640},{"type":43,"tag":157,"props":1790,"children":1791},{"style":1618},[1792],{"type":48,"value":1656},{"type":43,"tag":157,"props":1794,"children":1795},{"class":159,"line":1579},[1796,1800,1804,1808,1812,1816,1821,1825],{"type":43,"tag":157,"props":1797,"children":1798},{"style":1618},[1799],{"type":48,"value":1629},{"type":43,"tag":157,"props":1801,"children":1802},{"style":1632},[1803],{"type":48,"value":1085},{"type":43,"tag":157,"props":1805,"children":1806},{"style":1618},[1807],{"type":48,"value":1640},{"type":43,"tag":157,"props":1809,"children":1810},{"style":1618},[1811],{"type":48,"value":1645},{"type":43,"tag":157,"props":1813,"children":1814},{"style":1618},[1815],{"type":48,"value":1709},{"type":43,"tag":157,"props":1817,"children":1818},{"style":1712},[1819],{"type":48,"value":1820},"Transaction Ledger Q1 2025",{"type":43,"tag":157,"props":1822,"children":1823},{"style":1618},[1824],{"type":48,"value":1640},{"type":43,"tag":157,"props":1826,"children":1827},{"style":1618},[1828],{"type":48,"value":1656},{"type":43,"tag":157,"props":1830,"children":1831},{"class":159,"line":1588},[1832,1836,1840,1844,1848,1852,1857,1861],{"type":43,"tag":157,"props":1833,"children":1834},{"style":1618},[1835],{"type":48,"value":1629},{"type":43,"tag":157,"props":1837,"children":1838},{"style":1632},[1839],{"type":48,"value":1104},{"type":43,"tag":157,"props":1841,"children":1842},{"style":1618},[1843],{"type":48,"value":1640},{"type":43,"tag":157,"props":1845,"children":1846},{"style":1618},[1847],{"type":48,"value":1645},{"type":43,"tag":157,"props":1849,"children":1850},{"style":1618},[1851],{"type":48,"value":1709},{"type":43,"tag":157,"props":1853,"children":1854},{"style":1712},[1855],{"type":48,"value":1856},"usd",{"type":43,"tag":157,"props":1858,"children":1859},{"style":1618},[1860],{"type":48,"value":1640},{"type":43,"tag":157,"props":1862,"children":1863},{"style":1618},[1864],{"type":48,"value":1656},{"type":43,"tag":157,"props":1866,"children":1867},{"class":159,"line":1597},[1868,1872,1876,1880,1884,1888,1893],{"type":43,"tag":157,"props":1869,"children":1870},{"style":1618},[1871],{"type":48,"value":1629},{"type":43,"tag":157,"props":1873,"children":1874},{"style":1632},[1875],{"type":48,"value":1122},{"type":43,"tag":157,"props":1877,"children":1878},{"style":1618},[1879],{"type":48,"value":1640},{"type":43,"tag":157,"props":1881,"children":1882},{"style":1618},[1883],{"type":48,"value":1645},{"type":43,"tag":157,"props":1885,"children":1886},{"style":1618},[1887],{"type":48,"value":1709},{"type":43,"tag":157,"props":1889,"children":1890},{"style":1712},[1891],{"type":48,"value":1892},"CSV",{"type":43,"tag":157,"props":1894,"children":1895},{"style":1618},[1896],{"type":48,"value":1897},"\"\n",{"type":43,"tag":157,"props":1899,"children":1901},{"class":159,"line":1900},10,[1902],{"type":43,"tag":157,"props":1903,"children":1904},{"style":1618},[1905],{"type":48,"value":1603},{"type":43,"tag":51,"props":1907,"children":1908},{},[1909,1911,1917,1919,1924,1926,1930,1932,1936],{"type":48,"value":1910},"The export then generates asynchronously in the background. A 200 with ",{"type":43,"tag":65,"props":1912,"children":1914},{"className":1913},[],[1915],{"type":48,"value":1916},"totalCount",{"type":48,"value":1918}," only confirms the ",{"type":43,"tag":87,"props":1920,"children":1921},{},[1922],{"type":48,"value":1923},"query",{"type":48,"value":1925}," ran — it does ",{"type":43,"tag":57,"props":1927,"children":1928},{},[1929],{"type":48,"value":1213},{"type":48,"value":1931}," mean a report was created (verify in Step 1c) and it does ",{"type":43,"tag":57,"props":1933,"children":1934},{},[1935],{"type":48,"value":1213},{"type":48,"value":1937}," mean the file is ready (poll in Step 2).",{"type":43,"tag":1939,"props":1940,"children":1942},"h4",{"id":1941},"reports-needing-extra-parameters-omit-these-and-the-report-errors-or-comes-back-empty",[1943],{"type":48,"value":1944},"Reports needing extra parameters (omit these and the report errors or comes back empty)",{"type":43,"tag":330,"props":1946,"children":1947},{},[1948,1976],{"type":43,"tag":334,"props":1949,"children":1950},{},[1951],{"type":43,"tag":338,"props":1952,"children":1953},{},[1954,1966,1971],{"type":43,"tag":342,"props":1955,"children":1956},{},[1957,1959,1964],{"type":48,"value":1958},"Report (",{"type":43,"tag":65,"props":1960,"children":1962},{"className":1961},[],[1963],{"type":48,"value":519},{"type":48,"value":1965},")",{"type":43,"tag":342,"props":1967,"children":1968},{},[1969],{"type":48,"value":1970},"Trigger via",{"type":43,"tag":342,"props":1972,"children":1973},{},[1974],{"type":48,"value":1975},"Required extra params",{"type":43,"tag":352,"props":1977,"children":1978},{},[1979,2015,2084],{"type":43,"tag":338,"props":1980,"children":1981},{},[1982,1990,1998],{"type":43,"tag":359,"props":1983,"children":1984},{},[1985],{"type":43,"tag":65,"props":1986,"children":1988},{"className":1987},[],[1989],{"type":48,"value":610},{"type":43,"tag":359,"props":1991,"children":1992},{},[1993],{"type":43,"tag":65,"props":1994,"children":1996},{"className":1995},[],[1997],{"type":48,"value":372},{"type":43,"tag":359,"props":1999,"children":2000},{},[2001,2007,2009,2014],{"type":43,"tag":65,"props":2002,"children":2004},{"className":2003},[],[2005],{"type":48,"value":2006},"identifier_In: [String]",{"type":48,"value":2008}," — rollup parent hashes to decompose. Without it the report is ",{"type":43,"tag":57,"props":2010,"children":2011},{},[2012],{"type":48,"value":2013},"empty",{"type":48,"value":242},{"type":43,"tag":338,"props":2016,"children":2017},{},[2018,2026,2042],{"type":43,"tag":359,"props":2019,"children":2020},{},[2021],{"type":43,"tag":65,"props":2022,"children":2024},{"className":2023},[],[2025],{"type":48,"value":881},{"type":43,"tag":359,"props":2027,"children":2028},{},[2029,2034,2036,2041],{"type":43,"tag":65,"props":2030,"children":2032},{"className":2031},[],[2033],{"type":48,"value":372},{"type":48,"value":2035}," (not ",{"type":43,"tag":65,"props":2037,"children":2039},{"className":2038},[],[2040],{"type":48,"value":389},{"type":48,"value":1965},{"type":43,"tag":359,"props":2043,"children":2044},{},[2045,2047,2052,2053,2059,2061,2067,2069,2075,2077,2083],{"type":48,"value":2046},"exactly ",{"type":43,"tag":57,"props":2048,"children":2049},{},[2050],{"type":48,"value":2051},"one",{"type":48,"value":1475},{"type":43,"tag":65,"props":2054,"children":2056},{"className":2055},[],[2057],{"type":48,"value":2058},"children_Asset_AssetClass_In: [String]",{"type":48,"value":2060}," (asset-class id). Optional: at most one ",{"type":43,"tag":65,"props":2062,"children":2064},{"className":2063},[],[2065],{"type":48,"value":2066},"children_BelongsTo_In: [String]",{"type":48,"value":2068},". Missing\u002Fmultiple → report finishes with ",{"type":43,"tag":65,"props":2070,"children":2072},{"className":2071},[],[2073],{"type":48,"value":2074},"status: ERROR",{"type":48,"value":2076}," (\"must select exactly one asset class\"). Get an asset-class id from ",{"type":43,"tag":65,"props":2078,"children":2080},{"className":2079},[],[2081],{"type":48,"value":2082},"query { assetClass(limit: N) { results { id name symbol } } }",{"type":48,"value":242},{"type":43,"tag":338,"props":2085,"children":2086},{},[2087,2095,2103],{"type":43,"tag":359,"props":2088,"children":2089},{},[2090],{"type":43,"tag":65,"props":2091,"children":2093},{"className":2092},[],[2094],{"type":48,"value":763},{"type":43,"tag":359,"props":2096,"children":2097},{},[2098],{"type":43,"tag":65,"props":2099,"children":2101},{"className":2100},[],[2102],{"type":48,"value":389},{"type":43,"tag":359,"props":2104,"children":2105},{},[2106,2108,2113,2115,2120],{"type":48,"value":2107},"Requires an existing ",{"type":43,"tag":57,"props":2109,"children":2110},{},[2111],{"type":48,"value":2112},"commit snapshot",{"type":48,"value":2114}," for the target date. If none exists it stays pending — prefer ",{"type":43,"tag":65,"props":2116,"children":2118},{"className":2117},[],[2119],{"type":48,"value":413},{"type":48,"value":2121}," (Time Capsule) for arbitrary dates.",{"type":43,"tag":51,"props":2123,"children":2124},{},[2125,2130,2132,2137,2138,2143,2145,2151,2153,2158,2160,2166,2168,2173,2175,2181],{"type":43,"tag":57,"props":2126,"children":2127},{},[2128],{"type":48,"value":2129},"Point-in-time balances.",{"type":48,"value":2131}," For a balance report ",{"type":43,"tag":87,"props":2133,"children":2134},{},[2135],{"type":48,"value":2136},"as of a past date",{"type":48,"value":1428},{"type":43,"tag":65,"props":2139,"children":2141},{"className":2140},[],[2142],{"type":48,"value":389},{"type":48,"value":2144}," also accepts ",{"type":43,"tag":65,"props":2146,"children":2148},{"className":2147},[],[2149],{"type":48,"value":2150},"balanceDate: DateTime",{"type":48,"value":2152}," (reconstructs balances at that date — this is the Time Capsule path; passing ",{"type":43,"tag":65,"props":2154,"children":2156},{"className":2155},[],[2157],{"type":48,"value":729},{"type":48,"value":2159}," + ",{"type":43,"tag":65,"props":2161,"children":2163},{"className":2162},[],[2164],{"type":48,"value":2165},"balanceDate",{"type":48,"value":2167}," is promoted to ",{"type":43,"tag":65,"props":2169,"children":2171},{"className":2170},[],[2172],{"type":48,"value":413},{"type":48,"value":2174},") and ",{"type":43,"tag":65,"props":2176,"children":2178},{"className":2177},[],[2179],{"type":48,"value":2180},"commitId: UUID",{"type":48,"value":2182}," (pull from a specific commit snapshot). Omit both for current balances.",{"type":43,"tag":1939,"props":2184,"children":2186},{"id":2185},"login_history-has-a-different-shape",[2187,2192],{"type":43,"tag":65,"props":2188,"children":2190},{"className":2189},[],[2191],{"type":48,"value":496},{"type":48,"value":2193}," has a different shape",{"type":43,"tag":51,"props":2195,"children":2196},{},[2197,2202,2204,2210,2211,2217,2218,2224,2226,2232],{"type":43,"tag":65,"props":2198,"children":2200},{"className":2199},[],[2201],{"type":48,"value":505},{"type":48,"value":2203}," takes only ",{"type":43,"tag":65,"props":2205,"children":2207},{"className":2206},[],[2208],{"type":48,"value":2209},"exportFormat: String!",{"type":48,"value":1428},{"type":43,"tag":65,"props":2212,"children":2214},{"className":2213},[],[2215],{"type":48,"value":2216},"exportName: String!",{"type":48,"value":1428},{"type":43,"tag":65,"props":2219,"children":2221},{"className":2220},[],[2222],{"type":48,"value":2223},"outputFormat: ReportOutputFormat",{"type":48,"value":2225}," (no currency\u002Flimit\u002Ftimestamps) and returns ",{"type":43,"tag":65,"props":2227,"children":2229},{"className":2228},[],[2230],{"type":48,"value":2231},"{ success reportId }",{"type":48,"value":1645},{"type":43,"tag":110,"props":2234,"children":2236},{"className":150,"code":2235,"language":15,"meta":118,"style":118},"query($exportFormat: String!, $exportName: String!, $outputFormat: ReportOutputFormat) {\n  loginHistoryExport(exportFormat: $exportFormat, exportName: $exportName, outputFormat: $outputFormat) {\n    success\n    reportId\n  }\n}\n",[2237],{"type":43,"tag":65,"props":2238,"children":2239},{"__ignoreMap":118},[2240,2248,2256,2264,2272,2279],{"type":43,"tag":157,"props":2241,"children":2242},{"class":159,"line":160},[2243],{"type":43,"tag":157,"props":2244,"children":2245},{},[2246],{"type":48,"value":2247},"query($exportFormat: String!, $exportName: String!, $outputFormat: ReportOutputFormat) {\n",{"type":43,"tag":157,"props":2249,"children":2250},{"class":159,"line":1534},[2251],{"type":43,"tag":157,"props":2252,"children":2253},{},[2254],{"type":48,"value":2255},"  loginHistoryExport(exportFormat: $exportFormat, exportName: $exportName, outputFormat: $outputFormat) {\n",{"type":43,"tag":157,"props":2257,"children":2258},{"class":159,"line":1543},[2259],{"type":43,"tag":157,"props":2260,"children":2261},{},[2262],{"type":48,"value":2263},"    success\n",{"type":43,"tag":157,"props":2265,"children":2266},{"class":159,"line":1552},[2267],{"type":43,"tag":157,"props":2268,"children":2269},{},[2270],{"type":48,"value":2271},"    reportId\n",{"type":43,"tag":157,"props":2273,"children":2274},{"class":159,"line":1561},[2275],{"type":43,"tag":157,"props":2276,"children":2277},{},[2278],{"type":48,"value":1594},{"type":43,"tag":157,"props":2280,"children":2281},{"class":159,"line":1570},[2282],{"type":43,"tag":157,"props":2283,"children":2284},{},[2285],{"type":48,"value":1603},{"type":43,"tag":122,"props":2287,"children":2289},{"id":2288},"step-1b-unknown-or-newly-added-report-derive-it-from-the-schema-self-service",[2290],{"type":48,"value":2291},"Step 1b — Unknown or newly added report? Derive it from the schema (self-service)",{"type":43,"tag":51,"props":2293,"children":2294},{},[2295,2300,2302,2307],{"type":43,"tag":65,"props":2296,"children":2298},{"className":2297},[],[2299],{"type":48,"value":1046},{"type":48,"value":2301}," is the source of truth — it lists ",{"type":43,"tag":57,"props":2303,"children":2304},{},[2305],{"type":48,"value":2306},"every",{"type":48,"value":2308}," report the org supports, including ones not in the tables above. When a requested report has no row here, do not guess: discover the trigger from the live schema using the MCP introspection tools.",{"type":43,"tag":110,"props":2310,"children":2313},{"className":2311,"code":2312,"language":48},[113],"- [ ] 1. availableReportTypes -> get this report's exportType + entitiesType + llmDescription\n- [ ] 2. Pick the trigger query from entitiesType (Step 1 table). If entitiesType is new\u002Funclear,\n         default: transaction (tx \u002F ledger \u002F cost-basis), organizationBalance (balances \u002F assets),\n         internalAccount (accounts \u002F metadata).\n- [ ] 3. introspect(\u003Cquery>) -> read the EXACT arg names AND types\n- [ ] 4. build_query(\u003Cquery>) -> canonical variables-as-args template (optional, handy)\n- [ ] 5. validate_query(\u003Cassembled query>) BEFORE executing\n- [ ] 6. Trigger with the 4 export params (+ timestamps only if the query exposes them)\n- [ ] 7. Poll; if it errors, apply the error->fix table, then re-trigger\n- [ ] 8. On DONE: return the link AND record the working recipe\n",[2314],{"type":43,"tag":65,"props":2315,"children":2316},{"__ignoreMap":118},[2317],{"type":48,"value":2312},{"type":43,"tag":51,"props":2319,"children":2320},{},[2321],{"type":48,"value":2322},"Principles that make this work first-try:",{"type":43,"tag":2324,"props":2325,"children":2326},"ol",{},[2327,2358,2421,2437],{"type":43,"tag":138,"props":2328,"children":2329},{},[2330,2335,2337,2343,2345,2350,2352,2357],{"type":43,"tag":57,"props":2331,"children":2332},{},[2333],{"type":48,"value":2334},"Read the format, never invent it.",{"type":48,"value":2336}," Use ",{"type":43,"tag":65,"props":2338,"children":2340},{"className":2339},[],[2341],{"type":48,"value":2342},"exportType",{"type":48,"value":2344}," from ",{"type":43,"tag":65,"props":2346,"children":2348},{"className":2347},[],[2349],{"type":48,"value":1046},{"type":48,"value":2351}," verbatim as ",{"type":43,"tag":65,"props":2353,"children":2355},{"className":2354},[],[2356],{"type":48,"value":519},{"type":48,"value":242},{"type":43,"tag":138,"props":2359,"children":2360},{},[2361,2374,2376,2381,2383,2388,2389,2394,2395,2400,2401,2407,2408,2413,2415,2420],{"type":43,"tag":57,"props":2362,"children":2363},{},[2364,2366,2372],{"type":48,"value":2365},"Derive variable types from ",{"type":43,"tag":65,"props":2367,"children":2369},{"className":2368},[],[2370],{"type":48,"value":2371},"introspect",{"type":48,"value":2373},", not from memory.",{"type":48,"value":2375}," Declare each variable with the exact type the schema reports. This alone prevents the 400 \"used in position expecting type X\" failures. Sanity-check the usual ones: ",{"type":43,"tag":65,"props":2377,"children":2379},{"className":2378},[],[2380],{"type":48,"value":1122},{"type":48,"value":2382}," → ",{"type":43,"tag":65,"props":2384,"children":2386},{"className":2385},[],[2387],{"type":48,"value":1351},{"type":48,"value":1428},{"type":43,"tag":65,"props":2390,"children":2392},{"className":2391},[],[2393],{"type":48,"value":1104},{"type":48,"value":2382},{"type":43,"tag":65,"props":2396,"children":2398},{"className":2397},[],[2399],{"type":48,"value":1270},{"type":48,"value":1428},{"type":43,"tag":65,"props":2402,"children":2404},{"className":2403},[],[2405],{"type":48,"value":2406},"timestamp_*",{"type":48,"value":2382},{"type":43,"tag":65,"props":2409,"children":2411},{"className":2410},[],[2412],{"type":48,"value":1403},{"type":48,"value":2414},", list filters → ",{"type":43,"tag":65,"props":2416,"children":2418},{"className":2417},[],[2419],{"type":48,"value":1453},{"type":48,"value":242},{"type":43,"tag":138,"props":2422,"children":2423},{},[2424,2429,2430,2435],{"type":43,"tag":57,"props":2425,"children":2426},{},[2427],{"type":48,"value":2428},"Validate before executing.",{"type":48,"value":1475},{"type":43,"tag":65,"props":2431,"children":2433},{"className":2432},[],[2434],{"type":48,"value":313},{"type":48,"value":2436}," catches arg\u002Ftype\u002Fselection mistakes without creating a junk report.",{"type":43,"tag":138,"props":2438,"children":2439},{},[2440,2445],{"type":43,"tag":57,"props":2441,"children":2442},{},[2443],{"type":48,"value":2444},"Start minimal, then add only what the error demands.",{"type":48,"value":2446}," Trigger with just the export params first; let the error messages tell you which extra filter a generator requires.",{"type":43,"tag":51,"props":2448,"children":2449},{},[2450,2455],{"type":43,"tag":57,"props":2451,"children":2452},{},[2453],{"type":48,"value":2454},"Error → fix table",{"type":48,"value":2456}," (covers every failure mode seen against prod):",{"type":43,"tag":330,"props":2458,"children":2459},{},[2460,2481],{"type":43,"tag":334,"props":2461,"children":2462},{},[2463],{"type":43,"tag":338,"props":2464,"children":2465},{},[2466,2471,2476],{"type":43,"tag":342,"props":2467,"children":2468},{},[2469],{"type":48,"value":2470},"Error",{"type":43,"tag":342,"props":2472,"children":2473},{},[2474],{"type":48,"value":2475},"Meaning",{"type":43,"tag":342,"props":2477,"children":2478},{},[2479],{"type":48,"value":2480},"Fix",{"type":43,"tag":352,"props":2482,"children":2483},{},[2484,2522,2551,2573,2617],{"type":43,"tag":338,"props":2485,"children":2486},{},[2487,2496,2501],{"type":43,"tag":359,"props":2488,"children":2489},{},[2490],{"type":43,"tag":65,"props":2491,"children":2493},{"className":2492},[],[2494],{"type":48,"value":2495},"Variable '$X' of type 'A' used in position expecting type 'B'",{"type":43,"tag":359,"props":2497,"children":2498},{},[2499],{"type":48,"value":2500},"wrong declared type",{"type":43,"tag":359,"props":2502,"children":2503},{},[2504,2506,2512,2514,2520],{"type":48,"value":2505},"re-declare ",{"type":43,"tag":65,"props":2507,"children":2509},{"className":2508},[],[2510],{"type":48,"value":2511},"$X",{"type":48,"value":2513}," as ",{"type":43,"tag":65,"props":2515,"children":2517},{"className":2516},[],[2518],{"type":48,"value":2519},"B",{"type":48,"value":2521},", re-validate",{"type":43,"tag":338,"props":2523,"children":2524},{},[2525,2534,2539],{"type":43,"tag":359,"props":2526,"children":2527},{},[2528],{"type":43,"tag":65,"props":2529,"children":2531},{"className":2530},[],[2532],{"type":48,"value":2533},"Unknown argument 'X' on field 'Y'",{"type":43,"tag":359,"props":2535,"children":2536},{},[2537],{"type":48,"value":2538},"that filter isn't on this query",{"type":43,"tag":359,"props":2540,"children":2541},{},[2542,2544,2549],{"type":48,"value":2543},"switch to a query that exposes it (often ",{"type":43,"tag":65,"props":2545,"children":2547},{"className":2546},[],[2548],{"type":48,"value":372},{"type":48,"value":2550},") or drop it",{"type":43,"tag":338,"props":2552,"children":2553},{},[2554,2563,2568],{"type":43,"tag":359,"props":2555,"children":2556},{},[2557],{"type":43,"tag":65,"props":2558,"children":2560},{"className":2559},[],[2561],{"type":48,"value":2562},"Variable '$X' is never used",{"type":43,"tag":359,"props":2564,"children":2565},{},[2566],{"type":48,"value":2567},"declared a var with no matching arg",{"type":43,"tag":359,"props":2569,"children":2570},{},[2571],{"type":48,"value":2572},"make it a real arg on the query, or remove it",{"type":43,"tag":338,"props":2574,"children":2575},{},[2576,2588,2593],{"type":43,"tag":359,"props":2577,"children":2578},{},[2579,2581,2586],{"type":48,"value":2580},"200 trigger, but report ",{"type":43,"tag":65,"props":2582,"children":2584},{"className":2583},[],[2585],{"type":48,"value":2074},{"type":48,"value":2587}," (\"must select exactly one …\" \u002F \"required …\")",{"type":43,"tag":359,"props":2589,"children":2590},{},[2591],{"type":48,"value":2592},"generator needs an extra required filter",{"type":43,"tag":359,"props":2594,"children":2595},{},[2596,2601,2603,2609,2610,2615],{"type":43,"tag":65,"props":2597,"children":2599},{"className":2598},[],[2600],{"type":48,"value":2371},{"type":48,"value":2602}," to find the matching arg name, fetch valid values from its list query (e.g. ",{"type":43,"tag":65,"props":2604,"children":2606},{"className":2605},[],[2607],{"type":48,"value":2608},"assetClass",{"type":48,"value":1428},{"type":43,"tag":65,"props":2611,"children":2613},{"className":2612},[],[2614],{"type":48,"value":438},{"type":48,"value":2616},"), add exactly what's required, re-trigger",{"type":43,"tag":338,"props":2618,"children":2619},{},[2620,2633,2638],{"type":43,"tag":359,"props":2621,"children":2622},{},[2623,2625,2631],{"type":48,"value":2624},"report stays ",{"type":43,"tag":65,"props":2626,"children":2628},{"className":2627},[],[2629],{"type":48,"value":2630},"IN_PROGRESS",{"type":48,"value":2632}," indefinitely",{"type":43,"tag":359,"props":2634,"children":2635},{},[2636],{"type":48,"value":2637},"data prerequisite missing (e.g. no commit snapshot)",{"type":43,"tag":359,"props":2639,"children":2640},{},[2641],{"type":48,"value":2642},"tell the user what's missing and suggest an alternative report",{"type":43,"tag":51,"props":2644,"children":2645},{},[2646,2651,2653,2658],{"type":43,"tag":57,"props":2647,"children":2648},{},[2649],{"type":48,"value":2650},"Persist what you learn.",{"type":48,"value":2652}," Once a new report triggers cleanly to ",{"type":43,"tag":65,"props":2654,"children":2656},{"className":2655},[],[2657],{"type":48,"value":70},{"type":48,"value":1645},{"type":43,"tag":134,"props":2660,"children":2661},{},[2662,2682],{"type":43,"tag":138,"props":2663,"children":2664},{},[2665,2667,2673,2675,2680],{"type":48,"value":2666},"Short term: save the recipe via the MCP ",{"type":43,"tag":65,"props":2668,"children":2670},{"className":2669},[],[2671],{"type":48,"value":2672},"memory",{"type":48,"value":2674}," tool — trigger query, ",{"type":43,"tag":65,"props":2676,"children":2678},{"className":2677},[],[2679],{"type":48,"value":519},{"type":48,"value":2681},", working variable types, and any required filters.",{"type":43,"tag":138,"props":2683,"children":2684},{},[2685,2687,2692],{"type":48,"value":2686},"Durable: propose a new row for this skill's tables (report name, ",{"type":43,"tag":65,"props":2688,"children":2690},{"className":2689},[],[2691],{"type":48,"value":519},{"type":48,"value":2693},", trigger query, required params) and surface it to the user so the skill stays current.",{"type":43,"tag":122,"props":2695,"children":2697},{"id":2696},"step-1c-verify-a-report-row-was-created-mandatory-anti-silent-failure-check",[2698],{"type":48,"value":2699},"Step 1c — Verify a report row was created (MANDATORY anti-silent-failure check)",{"type":43,"tag":51,"props":2701,"children":2702},{},[2703,2708,2710,2715,2717,2722,2724,2730,2732,2738,2740,2745],{"type":43,"tag":57,"props":2704,"children":2705},{},[2706],{"type":48,"value":2707},"Do this immediately after every trigger, before you tell the user anything succeeded.",{"type":48,"value":2709}," The trigger is a query ",{"type":43,"tag":87,"props":2711,"children":2712},{},[2713],{"type":48,"value":2714},"side effect",{"type":48,"value":2716},": if the request is even slightly malformed (inline literals instead of variables, a renamed variable like ",{"type":43,"tag":65,"props":2718,"children":2720},{"className":2719},[],[2721],{"type":48,"value":1502},{"type":48,"value":2723},", a missing required param), the BFF returns ",{"type":43,"tag":65,"props":2725,"children":2727},{"className":2726},[],[2728],{"type":48,"value":2729},"200",{"type":48,"value":2731}," with ",{"type":43,"tag":65,"props":2733,"children":2735},{"className":2734},[],[2736],{"type":48,"value":2737},"errors: null",{"type":48,"value":2739}," and ",{"type":43,"tag":57,"props":2741,"children":2742},{},[2743],{"type":48,"value":2744},"silently creates no report",{"type":48,"value":2746},". The only reliable way to know it worked is to look the row up by name.",{"type":43,"tag":51,"props":2748,"children":2749},{},[2750,2752,2757,2758,2763],{"type":48,"value":2751},"Query for the row using the ",{"type":43,"tag":57,"props":2753,"children":2754},{},[2755],{"type":48,"value":2756},"exact",{"type":48,"value":1475},{"type":43,"tag":65,"props":2759,"children":2761},{"className":2760},[],[2762],{"type":48,"value":1085},{"type":48,"value":2764}," you triggered with:",{"type":43,"tag":110,"props":2766,"children":2768},{"className":150,"code":2767,"language":15,"meta":118,"style":118},"query($name: String, $ordering: String, $limit: Int) {\n  report(name: $name, ordering: $ordering, limit: $limit) {\n    results { id name status }\n  }\n}\n",[2769],{"type":43,"tag":65,"props":2770,"children":2771},{"__ignoreMap":118},[2772,2780,2788,2796,2803],{"type":43,"tag":157,"props":2773,"children":2774},{"class":159,"line":160},[2775],{"type":43,"tag":157,"props":2776,"children":2777},{},[2778],{"type":48,"value":2779},"query($name: String, $ordering: String, $limit: Int) {\n",{"type":43,"tag":157,"props":2781,"children":2782},{"class":159,"line":1534},[2783],{"type":43,"tag":157,"props":2784,"children":2785},{},[2786],{"type":48,"value":2787},"  report(name: $name, ordering: $ordering, limit: $limit) {\n",{"type":43,"tag":157,"props":2789,"children":2790},{"class":159,"line":1543},[2791],{"type":43,"tag":157,"props":2792,"children":2793},{},[2794],{"type":48,"value":2795},"    results { id name status }\n",{"type":43,"tag":157,"props":2797,"children":2798},{"class":159,"line":1552},[2799],{"type":43,"tag":157,"props":2800,"children":2801},{},[2802],{"type":48,"value":1594},{"type":43,"tag":157,"props":2804,"children":2805},{"class":159,"line":1561},[2806],{"type":43,"tag":157,"props":2807,"children":2808},{},[2809],{"type":48,"value":1603},{"type":43,"tag":110,"props":2811,"children":2813},{"className":1606,"code":2812,"language":1608,"meta":118,"style":118},"{ \"name\": \"\u003Cthe exact exportName from Step 1>\", \"ordering\": \"-created_at\", \"limit\": 1 }\n",[2814],{"type":43,"tag":65,"props":2815,"children":2816},{"__ignoreMap":118},[2817],{"type":43,"tag":157,"props":2818,"children":2819},{"class":159,"line":160},[2820,2825,2829,2834,2838,2842,2846,2851,2855,2860,2864,2869,2873,2877,2881,2886,2890,2894,2898,2902,2906,2910,2914],{"type":43,"tag":157,"props":2821,"children":2822},{"style":1618},[2823],{"type":48,"value":2824},"{",{"type":43,"tag":157,"props":2826,"children":2827},{"style":1618},[2828],{"type":48,"value":1709},{"type":43,"tag":157,"props":2830,"children":2831},{"style":1632},[2832],{"type":48,"value":2833},"name",{"type":43,"tag":157,"props":2835,"children":2836},{"style":1618},[2837],{"type":48,"value":1640},{"type":43,"tag":157,"props":2839,"children":2840},{"style":1618},[2841],{"type":48,"value":1645},{"type":43,"tag":157,"props":2843,"children":2844},{"style":1618},[2845],{"type":48,"value":1709},{"type":43,"tag":157,"props":2847,"children":2848},{"style":1712},[2849],{"type":48,"value":2850},"\u003Cthe exact exportName from Step 1>",{"type":43,"tag":157,"props":2852,"children":2853},{"style":1618},[2854],{"type":48,"value":1640},{"type":43,"tag":157,"props":2856,"children":2857},{"style":1618},[2858],{"type":48,"value":2859},",",{"type":43,"tag":157,"props":2861,"children":2862},{"style":1618},[2863],{"type":48,"value":1709},{"type":43,"tag":157,"props":2865,"children":2866},{"style":1632},[2867],{"type":48,"value":2868},"ordering",{"type":43,"tag":157,"props":2870,"children":2871},{"style":1618},[2872],{"type":48,"value":1640},{"type":43,"tag":157,"props":2874,"children":2875},{"style":1618},[2876],{"type":48,"value":1645},{"type":43,"tag":157,"props":2878,"children":2879},{"style":1618},[2880],{"type":48,"value":1709},{"type":43,"tag":157,"props":2882,"children":2883},{"style":1712},[2884],{"type":48,"value":2885},"-created_at",{"type":43,"tag":157,"props":2887,"children":2888},{"style":1618},[2889],{"type":48,"value":1640},{"type":43,"tag":157,"props":2891,"children":2892},{"style":1618},[2893],{"type":48,"value":2859},{"type":43,"tag":157,"props":2895,"children":2896},{"style":1618},[2897],{"type":48,"value":1709},{"type":43,"tag":157,"props":2899,"children":2900},{"style":1632},[2901],{"type":48,"value":1635},{"type":43,"tag":157,"props":2903,"children":2904},{"style":1618},[2905],{"type":48,"value":1640},{"type":43,"tag":157,"props":2907,"children":2908},{"style":1618},[2909],{"type":48,"value":1645},{"type":43,"tag":157,"props":2911,"children":2912},{"style":1648},[2913],{"type":48,"value":1651},{"type":43,"tag":157,"props":2915,"children":2916},{"style":1618},[2917],{"type":48,"value":2918}," }\n",{"type":43,"tag":134,"props":2920,"children":2921},{},[2922,3004],{"type":43,"tag":138,"props":2923,"children":2924},{},[2925,2936,2938,2943,2945,2950,2952,2957,2959,2964,2965,2970,2972,2977,2978,2983,2984,2989,2990,2995,2997,3002],{"type":43,"tag":57,"props":2926,"children":2927},{},[2928,2934],{"type":43,"tag":65,"props":2929,"children":2931},{"className":2930},[],[2932],{"type":48,"value":2933},"results",{"type":48,"value":2935}," is empty (no row)",{"type":48,"value":2937}," → this is a ",{"type":43,"tag":57,"props":2939,"children":2940},{},[2941],{"type":48,"value":2942},"SILENT FAILURE",{"type":48,"value":2944},", not \"in progress\". Do ",{"type":43,"tag":57,"props":2946,"children":2947},{},[2948],{"type":48,"value":2949},"NOT",{"type":48,"value":2951}," report success. Re-check the trigger against the rules above — params passed as ",{"type":43,"tag":57,"props":2953,"children":2954},{},[2955],{"type":48,"value":2956},"variables",{"type":48,"value":2958}," (not inline literals), variables ",{"type":43,"tag":57,"props":2960,"children":2961},{},[2962],{"type":48,"value":2963},"named exactly",{"type":48,"value":1475},{"type":43,"tag":65,"props":2966,"children":2968},{"className":2967},[],[2969],{"type":48,"value":1085},{"type":48,"value":2971},"\u002F",{"type":43,"tag":65,"props":2973,"children":2975},{"className":2974},[],[2976],{"type":48,"value":519},{"type":48,"value":2971},{"type":43,"tag":65,"props":2979,"children":2981},{"className":2980},[],[2982],{"type":48,"value":1104},{"type":48,"value":2971},{"type":43,"tag":65,"props":2985,"children":2987},{"className":2986},[],[2988],{"type":48,"value":1122},{"type":48,"value":2971},{"type":43,"tag":65,"props":2991,"children":2993},{"className":2992},[],[2994],{"type":48,"value":2406},{"type":48,"value":2996},", correct types — then re-trigger ",{"type":43,"tag":57,"props":2998,"children":2999},{},[3000],{"type":48,"value":3001},"once",{"type":48,"value":3003},". If it still creates no row, stop and tell the user it failed silently and could not be created (don't loop forever).",{"type":43,"tag":138,"props":3005,"children":3006},{},[3007,3012,3014,3019],{"type":43,"tag":57,"props":3008,"children":3009},{},[3010],{"type":48,"value":3011},"A row exists",{"type":48,"value":3013}," → good, the report was created. Continue to Step 2 to poll it to ",{"type":43,"tag":65,"props":3015,"children":3017},{"className":3016},[],[3018],{"type":48,"value":70},{"type":48,"value":242},{"type":43,"tag":1159,"props":3021,"children":3022},{},[3023],{"type":43,"tag":51,"props":3024,"children":3025},{},[3026,3028,3033,3035,3040],{"type":48,"value":3027},"Make the ",{"type":43,"tag":65,"props":3029,"children":3031},{"className":3030},[],[3032],{"type":48,"value":1085},{"type":48,"value":3034}," unique per run (e.g. append the date or a timestamp) so this lookup matches ",{"type":43,"tag":87,"props":3036,"children":3037},{},[3038],{"type":48,"value":3039},"your",{"type":48,"value":3041}," row and not an older report with the same name.",{"type":43,"tag":122,"props":3043,"children":3045},{"id":3044},"step-2-poll-until-done",[3046],{"type":48,"value":3047},"Step 2 — Poll until done",{"type":43,"tag":51,"props":3049,"children":3050},{},[3051,3053,3058],{"type":48,"value":3052},"Find the report by the exact ",{"type":43,"tag":65,"props":3054,"children":3056},{"className":3055},[],[3057],{"type":48,"value":1085},{"type":48,"value":3059}," from Step 1 (most reliable match):",{"type":43,"tag":110,"props":3061,"children":3063},{"className":150,"code":3062,"language":15,"meta":118,"style":118},"query($name: String, $ordering: String, $limit: Int) {\n  report(name: $name, ordering: $ordering, limit: $limit) {\n    results { id name status link reportSize exportFormat createdAt }\n  }\n}\n",[3064],{"type":43,"tag":65,"props":3065,"children":3066},{"__ignoreMap":118},[3067,3074,3081,3089,3096],{"type":43,"tag":157,"props":3068,"children":3069},{"class":159,"line":160},[3070],{"type":43,"tag":157,"props":3071,"children":3072},{},[3073],{"type":48,"value":2779},{"type":43,"tag":157,"props":3075,"children":3076},{"class":159,"line":1534},[3077],{"type":43,"tag":157,"props":3078,"children":3079},{},[3080],{"type":48,"value":2787},{"type":43,"tag":157,"props":3082,"children":3083},{"class":159,"line":1543},[3084],{"type":43,"tag":157,"props":3085,"children":3086},{},[3087],{"type":48,"value":3088},"    results { id name status link reportSize exportFormat createdAt }\n",{"type":43,"tag":157,"props":3090,"children":3091},{"class":159,"line":1552},[3092],{"type":43,"tag":157,"props":3093,"children":3094},{},[3095],{"type":48,"value":1594},{"type":43,"tag":157,"props":3097,"children":3098},{"class":159,"line":1561},[3099],{"type":43,"tag":157,"props":3100,"children":3101},{},[3102],{"type":48,"value":1603},{"type":43,"tag":110,"props":3104,"children":3106},{"className":1606,"code":3105,"language":1608,"meta":118,"style":118},"{ \"name\": \"\u003Cthe exportName from Step 1>\", \"ordering\": \"-created_at\", \"limit\": 1 }\n",[3107],{"type":43,"tag":65,"props":3108,"children":3109},{"__ignoreMap":118},[3110],{"type":43,"tag":157,"props":3111,"children":3112},{"class":159,"line":160},[3113,3117,3121,3125,3129,3133,3137,3142,3146,3150,3154,3158,3162,3166,3170,3174,3178,3182,3186,3190,3194,3198,3202],{"type":43,"tag":157,"props":3114,"children":3115},{"style":1618},[3116],{"type":48,"value":2824},{"type":43,"tag":157,"props":3118,"children":3119},{"style":1618},[3120],{"type":48,"value":1709},{"type":43,"tag":157,"props":3122,"children":3123},{"style":1632},[3124],{"type":48,"value":2833},{"type":43,"tag":157,"props":3126,"children":3127},{"style":1618},[3128],{"type":48,"value":1640},{"type":43,"tag":157,"props":3130,"children":3131},{"style":1618},[3132],{"type":48,"value":1645},{"type":43,"tag":157,"props":3134,"children":3135},{"style":1618},[3136],{"type":48,"value":1709},{"type":43,"tag":157,"props":3138,"children":3139},{"style":1712},[3140],{"type":48,"value":3141},"\u003Cthe exportName from Step 1>",{"type":43,"tag":157,"props":3143,"children":3144},{"style":1618},[3145],{"type":48,"value":1640},{"type":43,"tag":157,"props":3147,"children":3148},{"style":1618},[3149],{"type":48,"value":2859},{"type":43,"tag":157,"props":3151,"children":3152},{"style":1618},[3153],{"type":48,"value":1709},{"type":43,"tag":157,"props":3155,"children":3156},{"style":1632},[3157],{"type":48,"value":2868},{"type":43,"tag":157,"props":3159,"children":3160},{"style":1618},[3161],{"type":48,"value":1640},{"type":43,"tag":157,"props":3163,"children":3164},{"style":1618},[3165],{"type":48,"value":1645},{"type":43,"tag":157,"props":3167,"children":3168},{"style":1618},[3169],{"type":48,"value":1709},{"type":43,"tag":157,"props":3171,"children":3172},{"style":1712},[3173],{"type":48,"value":2885},{"type":43,"tag":157,"props":3175,"children":3176},{"style":1618},[3177],{"type":48,"value":1640},{"type":43,"tag":157,"props":3179,"children":3180},{"style":1618},[3181],{"type":48,"value":2859},{"type":43,"tag":157,"props":3183,"children":3184},{"style":1618},[3185],{"type":48,"value":1709},{"type":43,"tag":157,"props":3187,"children":3188},{"style":1632},[3189],{"type":48,"value":1635},{"type":43,"tag":157,"props":3191,"children":3192},{"style":1618},[3193],{"type":48,"value":1640},{"type":43,"tag":157,"props":3195,"children":3196},{"style":1618},[3197],{"type":48,"value":1645},{"type":43,"tag":157,"props":3199,"children":3200},{"style":1648},[3201],{"type":48,"value":1651},{"type":43,"tag":157,"props":3203,"children":3204},{"style":1618},[3205],{"type":48,"value":2918},{"type":43,"tag":51,"props":3207,"children":3208},{},[3209],{"type":43,"tag":57,"props":3210,"children":3211},{},[3212],{"type":48,"value":3213},"Field\u002Farg gotchas (these fail silently — get them right):",{"type":43,"tag":134,"props":3215,"children":3216},{},[3217,3240,3264,3286],{"type":43,"tag":138,"props":3218,"children":3219},{},[3220,3222,3227,3228,3232,3233,3239],{"type":48,"value":3221},"The ordering arg is ",{"type":43,"tag":65,"props":3223,"children":3225},{"className":3224},[],[3226],{"type":48,"value":2868},{"type":48,"value":1428},{"type":43,"tag":57,"props":3229,"children":3230},{},[3231],{"type":48,"value":1213},{"type":48,"value":1475},{"type":43,"tag":65,"props":3234,"children":3236},{"className":3235},[],[3237],{"type":48,"value":3238},"orderBy",{"type":48,"value":242},{"type":43,"tag":138,"props":3241,"children":3242},{},[3243,3245,3250,3252,3256,3257,3263],{"type":48,"value":3244},"The download field is ",{"type":43,"tag":65,"props":3246,"children":3248},{"className":3247},[],[3249],{"type":48,"value":78},{"type":48,"value":3251}," (a presigned S3 URL), ",{"type":43,"tag":57,"props":3253,"children":3254},{},[3255],{"type":48,"value":1213},{"type":48,"value":1475},{"type":43,"tag":65,"props":3258,"children":3260},{"className":3259},[],[3261],{"type":48,"value":3262},"downloadUrl",{"type":48,"value":242},{"type":43,"tag":138,"props":3265,"children":3266},{},[3267,3269,3274,3275,3279,3280,3285],{"type":48,"value":3268},"The report-type field is ",{"type":43,"tag":65,"props":3270,"children":3272},{"className":3271},[],[3273],{"type":48,"value":519},{"type":48,"value":1428},{"type":43,"tag":57,"props":3276,"children":3277},{},[3278],{"type":48,"value":1213},{"type":48,"value":1475},{"type":43,"tag":65,"props":3281,"children":3283},{"className":3282},[],[3284],{"type":48,"value":2342},{"type":48,"value":242},{"type":43,"tag":138,"props":3287,"children":3288},{},[3289,3291,3295,3297,3302,3304,3309,3311,3317,3319,3324],{"type":48,"value":3290},"Do ",{"type":43,"tag":57,"props":3292,"children":3293},{},[3294],{"type":48,"value":1213},{"type":48,"value":3296}," filter by ",{"type":43,"tag":65,"props":3298,"children":3300},{"className":3299},[],[3301],{"type":48,"value":519},{"type":48,"value":3303}," to find your report: the stored value is ",{"type":43,"tag":57,"props":3305,"children":3306},{},[3307],{"type":48,"value":3308},"lowercase",{"type":48,"value":3310}," (e.g. ",{"type":43,"tag":65,"props":3312,"children":3314},{"className":3313},[],[3315],{"type":48,"value":3316},"rollup_breakdown",{"type":48,"value":3318},") while you triggered with UPPER_CASE, so an exact filter matches nothing. Filter by ",{"type":43,"tag":65,"props":3320,"children":3322},{"className":3321},[],[3323],{"type":48,"value":2833},{"type":48,"value":242},{"type":43,"tag":51,"props":3326,"children":3327},{},[3328],{"type":43,"tag":57,"props":3329,"children":3330},{},[3331],{"type":48,"value":3332},"Polling loop:",{"type":43,"tag":2324,"props":3334,"children":3335},{},[3336,3341,3402],{"type":43,"tag":138,"props":3337,"children":3338},{},[3339],{"type":48,"value":3340},"Query for the latest report by name.",{"type":43,"tag":138,"props":3342,"children":3343},{},[3344,3346,3352,3354],{"type":48,"value":3345},"Check ",{"type":43,"tag":65,"props":3347,"children":3349},{"className":3348},[],[3350],{"type":48,"value":3351},"status",{"type":48,"value":3353},":\n",{"type":43,"tag":134,"props":3355,"children":3356},{},[3357,3375,3391],{"type":43,"tag":138,"props":3358,"children":3359},{},[3360,3365,3367,3373],{"type":43,"tag":65,"props":3361,"children":3363},{"className":3362},[],[3364],{"type":48,"value":2630},{"type":48,"value":3366}," → wait ~60s (e.g. ",{"type":43,"tag":65,"props":3368,"children":3370},{"className":3369},[],[3371],{"type":48,"value":3372},"sleep 60",{"type":48,"value":3374}," in a shell), then query again.",{"type":43,"tag":138,"props":3376,"children":3377},{},[3378,3383,3384,3389],{"type":43,"tag":65,"props":3379,"children":3381},{"className":3380},[],[3382],{"type":48,"value":70},{"type":48,"value":2382},{"type":43,"tag":65,"props":3385,"children":3387},{"className":3386},[],[3388],{"type":48,"value":78},{"type":48,"value":3390}," holds the presigned download URL. Proceed.",{"type":43,"tag":138,"props":3392,"children":3393},{},[3394,3400],{"type":43,"tag":65,"props":3395,"children":3397},{"className":3396},[],[3398],{"type":48,"value":3399},"ERROR",{"type":48,"value":3401}," → the generator rejected the inputs (e.g. a missing required filter). Read the failure message, fix the params, and re-trigger. Do not silently retry the same call.",{"type":43,"tag":138,"props":3403,"children":3404},{},[3405,3407,3412],{"type":48,"value":3406},"Repeat up to ",{"type":43,"tag":57,"props":3408,"children":3409},{},[3410],{"type":48,"value":3411},"10 times",{"type":48,"value":3413},", waiting ~60s between attempts.",{"type":43,"tag":1159,"props":3415,"children":3416},{},[3417],{"type":43,"tag":51,"props":3418,"children":3419},{},[3420,3425,3427,3432,3433,3438,3440,3445,3447,3452,3454,3458,3460,3465],{"type":43,"tag":57,"props":3421,"children":3422},{},[3423],{"type":48,"value":3424},"Check BOTH error channels.",{"type":48,"value":3426}," A report can fail in two ways: (1) the trigger returns HTTP 400 with the problem under ",{"type":43,"tag":65,"props":3428,"children":3430},{"className":3429},[],[3431],{"type":48,"value":1199},{"type":48,"value":183},{"type":43,"tag":65,"props":3434,"children":3436},{"className":3435},[],[3437],{"type":48,"value":1206},{"type":48,"value":3439}," (and an empty\u002Fabsent GraphQL ",{"type":43,"tag":65,"props":3441,"children":3443},{"className":3442},[],[3444],{"type":48,"value":1221},{"type":48,"value":3446},") — treat any non-empty ",{"type":43,"tag":65,"props":3448,"children":3450},{"className":3449},[],[3451],{"type":48,"value":1199},{"type":48,"value":3453}," as a hard failure, do ",{"type":43,"tag":57,"props":3455,"children":3456},{},[3457],{"type":48,"value":1213},{"type":48,"value":3459}," report success; (2) the trigger returns 200 but the report later finishes with ",{"type":43,"tag":65,"props":3461,"children":3463},{"className":3462},[],[3464],{"type":48,"value":2074},{"type":48,"value":3466},". Never assume success from a 200 alone.",{"type":43,"tag":51,"props":3468,"children":3469},{},[3470,3472,3478,3480,3485],{"type":48,"value":3471},"Small reports finish in seconds; large reports (many assets, wide date ranges, large orgs) can take minutes to hours — set expectations early. Once ",{"type":43,"tag":65,"props":3473,"children":3475},{"className":3474},[],[3476],{"type":48,"value":3477},"status == DONE",{"type":48,"value":3479},", share the ",{"type":43,"tag":65,"props":3481,"children":3483},{"className":3482},[],[3484],{"type":48,"value":78},{"type":48,"value":3486}," with the user.",{"type":43,"tag":51,"props":3488,"children":3489},{},[3490,3495,3497,3502],{"type":43,"tag":57,"props":3491,"children":3492},{},[3493],{"type":48,"value":3494},"Presenting the download link.",{"type":48,"value":3496}," Never paste the raw presigned URL into the chat — it's long, ugly, and full of credentials. Always render it as a clean clickable ",{"type":43,"tag":57,"props":3498,"children":3499},{},[3500],{"type":48,"value":3501},"markdown link",{"type":48,"value":3503}," with friendly anchor text, putting the full URL in the link target:",{"type":43,"tag":110,"props":3505,"children":3509},{"className":3506,"code":3507,"language":3508,"meta":118,"style":118},"language-markdown shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","[Click here to download your report](\u003Cthe full presigned link>)\n","markdown",[3510],{"type":43,"tag":65,"props":3511,"children":3512},{"__ignoreMap":118},[3513],{"type":43,"tag":157,"props":3514,"children":3515},{"class":159,"line":160},[3516,3521,3526,3531,3537],{"type":43,"tag":157,"props":3517,"children":3518},{"style":1618},[3519],{"type":48,"value":3520},"[",{"type":43,"tag":157,"props":3522,"children":3523},{"style":1712},[3524],{"type":48,"value":3525},"Click here to download your report",{"type":43,"tag":157,"props":3527,"children":3528},{"style":1618},[3529],{"type":48,"value":3530},"](\u003C",{"type":43,"tag":157,"props":3532,"children":3534},{"style":3533},"--shiki-light:#E53935;--shiki-light-text-decoration:underline;--shiki-default:#F07178;--shiki-default-text-decoration:underline;--shiki-dark:#F07178;--shiki-dark-text-decoration:underline",[3535],{"type":48,"value":3536},"the full presigned link",{"type":43,"tag":157,"props":3538,"children":3539},{"style":1618},[3540],{"type":48,"value":3541},">)\n",{"type":43,"tag":51,"props":3543,"children":3544},{},[3545,3547,3553],{"type":48,"value":3546},"You may tailor the anchor text to the report, e.g. ",{"type":43,"tag":65,"props":3548,"children":3550},{"className":3549},[],[3551],{"type":48,"value":3552},"[Download your ERP Pre-Sync report (CSV)](\u003Clink>)",{"type":48,"value":3554},". Keep the anchor short and human; the URL itself stays hidden behind it. Mention that the link is presigned and expires after a limited window (~24h).",{"type":43,"tag":122,"props":3556,"children":3558},{"id":3557},"step-3-download-analyze-optional",[3559],{"type":48,"value":3560},"Step 3 — Download + analyze (optional)",{"type":43,"tag":51,"props":3562,"children":3563},{},[3564],{"type":48,"value":3565},"If the user wants the data analyzed (not just the link), download via the presigned URL and inspect it locally with pandas:",{"type":43,"tag":110,"props":3567,"children":3571},{"className":3568,"code":3569,"language":3570,"meta":118,"style":118},"language-python shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import pandas as pd, requests\nfrom io import BytesIO\n\nresp = requests.get(\"\u003Cpresigned_url>\")\nresp.raise_for_status()\ndf = pd.read_csv(BytesIO(resp.content))\nprint(df.shape, list(df.columns))\nprint(df.head())\nprint(df.dtypes)\n","python",[3572],{"type":43,"tag":65,"props":3573,"children":3574},{"__ignoreMap":118},[3575,3583,3591,3600,3608,3616,3624,3632,3640],{"type":43,"tag":157,"props":3576,"children":3577},{"class":159,"line":160},[3578],{"type":43,"tag":157,"props":3579,"children":3580},{},[3581],{"type":48,"value":3582},"import pandas as pd, requests\n",{"type":43,"tag":157,"props":3584,"children":3585},{"class":159,"line":1534},[3586],{"type":43,"tag":157,"props":3587,"children":3588},{},[3589],{"type":48,"value":3590},"from io import BytesIO\n",{"type":43,"tag":157,"props":3592,"children":3593},{"class":159,"line":1543},[3594],{"type":43,"tag":157,"props":3595,"children":3597},{"emptyLinePlaceholder":3596},true,[3598],{"type":48,"value":3599},"\n",{"type":43,"tag":157,"props":3601,"children":3602},{"class":159,"line":1552},[3603],{"type":43,"tag":157,"props":3604,"children":3605},{},[3606],{"type":48,"value":3607},"resp = requests.get(\"\u003Cpresigned_url>\")\n",{"type":43,"tag":157,"props":3609,"children":3610},{"class":159,"line":1561},[3611],{"type":43,"tag":157,"props":3612,"children":3613},{},[3614],{"type":48,"value":3615},"resp.raise_for_status()\n",{"type":43,"tag":157,"props":3617,"children":3618},{"class":159,"line":1570},[3619],{"type":43,"tag":157,"props":3620,"children":3621},{},[3622],{"type":48,"value":3623},"df = pd.read_csv(BytesIO(resp.content))\n",{"type":43,"tag":157,"props":3625,"children":3626},{"class":159,"line":1579},[3627],{"type":43,"tag":157,"props":3628,"children":3629},{},[3630],{"type":48,"value":3631},"print(df.shape, list(df.columns))\n",{"type":43,"tag":157,"props":3633,"children":3634},{"class":159,"line":1588},[3635],{"type":43,"tag":157,"props":3636,"children":3637},{},[3638],{"type":48,"value":3639},"print(df.head())\n",{"type":43,"tag":157,"props":3641,"children":3642},{"class":159,"line":1597},[3643],{"type":43,"tag":157,"props":3644,"children":3645},{},[3646],{"type":48,"value":3647},"print(df.dtypes)\n",{"type":43,"tag":51,"props":3649,"children":3650},{},[3651,3653,3659,3660,3666,3668,3674,3675,3681,3682,3688,3689,3695,3697,3703,3705,3711],{"type":48,"value":3652},"Always start with ",{"type":43,"tag":65,"props":3654,"children":3656},{"className":3655},[],[3657],{"type":48,"value":3658},"df.head()",{"type":48,"value":2739},{"type":43,"tag":65,"props":3661,"children":3663},{"className":3662},[],[3664],{"type":48,"value":3665},"df.dtypes",{"type":48,"value":3667},", then run the requested analysis (",{"type":43,"tag":65,"props":3669,"children":3671},{"className":3670},[],[3672],{"type":48,"value":3673},"groupby",{"type":48,"value":1428},{"type":43,"tag":65,"props":3676,"children":3678},{"className":3677},[],[3679],{"type":48,"value":3680},"value_counts",{"type":48,"value":1428},{"type":43,"tag":65,"props":3683,"children":3685},{"className":3684},[],[3686],{"type":48,"value":3687},"describe",{"type":48,"value":1428},{"type":43,"tag":65,"props":3690,"children":3692},{"className":3691},[],[3693],{"type":48,"value":3694},"pivot_table",{"type":48,"value":3696},"). Format money as ",{"type":43,"tag":65,"props":3698,"children":3700},{"className":3699},[],[3701],{"type":48,"value":3702},"f\"${value:,.2f}\"",{"type":48,"value":3704}," and summarize large frames rather than dumping every row. For deeper per-report analysis guidance, use the ",{"type":43,"tag":65,"props":3706,"children":3708},{"className":3707},[],[3709],{"type":48,"value":3710},"tres-report-analyzer",{"type":48,"value":3712}," skill.",{"type":43,"tag":103,"props":3714,"children":3716},{"id":3715},"rules",[3717],{"type":48,"value":3718},"Rules",{"type":43,"tag":134,"props":3720,"children":3721},{},[3722,3732,3765,3791,3847,3885,3918,3962,4013,4030,4061,4073],{"type":43,"tag":138,"props":3723,"children":3724},{},[3725,3730],{"type":43,"tag":57,"props":3726,"children":3727},{},[3728],{"type":48,"value":3729},"ALWAYS",{"type":48,"value":3731}," confirm report type (and date range, if required) before triggering.",{"type":43,"tag":138,"props":3733,"children":3734},{},[3735,3737,3742,3744,3749,3751,3756,3758,3763],{"type":48,"value":3736},"Match the query to the report's ",{"type":43,"tag":65,"props":3738,"children":3740},{"className":3739},[],[3741],{"type":48,"value":297},{"type":48,"value":3743}," using the table above — ",{"type":43,"tag":57,"props":3745,"children":3746},{},[3747],{"type":48,"value":3748},"except",{"type":48,"value":3750}," the special-case reports above (",{"type":43,"tag":65,"props":3752,"children":3754},{"className":3753},[],[3755],{"type":48,"value":881},{"type":48,"value":3757}," triggers via ",{"type":43,"tag":65,"props":3759,"children":3761},{"className":3760},[],[3762],{"type":48,"value":372},{"type":48,"value":3764},").",{"type":43,"tag":138,"props":3766,"children":3767},{},[3768,3770,3775,3777,3782,3784,3789],{"type":48,"value":3769},"For any report NOT in the tables, follow ",{"type":43,"tag":57,"props":3771,"children":3772},{},[3773],{"type":48,"value":3774},"Step 1b",{"type":48,"value":3776},": ",{"type":43,"tag":65,"props":3778,"children":3780},{"className":3779},[],[3781],{"type":48,"value":2371},{"type":48,"value":3783}," the query for exact arg types, ",{"type":43,"tag":65,"props":3785,"children":3787},{"className":3786},[],[3788],{"type":48,"value":313},{"type":48,"value":3790},", trigger minimal, fix from the error→fix table, then persist the recipe. Never hand-guess types or filters for an unknown report.",{"type":43,"tag":138,"props":3792,"children":3793},{},[3794,3799,3800,3805,3807,3812,3813,3818,3820,3825,3827,3832,3834,3839,3840,3845],{"type":43,"tag":57,"props":3795,"children":3796},{},[3797],{"type":48,"value":3798},"Variable types are strict:",{"type":48,"value":1475},{"type":43,"tag":65,"props":3801,"children":3803},{"className":3802},[],[3804],{"type":48,"value":1122},{"type":48,"value":3806}," is ",{"type":43,"tag":65,"props":3808,"children":3810},{"className":3809},[],[3811],{"type":48,"value":1351},{"type":48,"value":1428},{"type":43,"tag":65,"props":3814,"children":3816},{"className":3815},[],[3817],{"type":48,"value":2406},{"type":48,"value":3819}," are ",{"type":43,"tag":65,"props":3821,"children":3823},{"className":3822},[],[3824],{"type":48,"value":1403},{"type":48,"value":3826},", list filters are ",{"type":43,"tag":65,"props":3828,"children":3830},{"className":3829},[],[3831],{"type":48,"value":1453},{"type":48,"value":3833},". A wrong type = HTTP 400 = no report. Pass params as variables named exactly ",{"type":43,"tag":65,"props":3835,"children":3837},{"className":3836},[],[3838],{"type":48,"value":1085},{"type":48,"value":183},{"type":43,"tag":65,"props":3841,"children":3843},{"className":3842},[],[3844],{"type":48,"value":519},{"type":48,"value":3846}," \u002F etc.",{"type":43,"tag":138,"props":3848,"children":3849},{},[3850,3855,3857,3862,3864,3869,3871,3876,3878,3883],{"type":43,"tag":57,"props":3851,"children":3852},{},[3853],{"type":48,"value":3854},"ALWAYS run Step 1c after triggering.",{"type":48,"value":3856}," Verify the report row exists by exact ",{"type":43,"tag":65,"props":3858,"children":3860},{"className":3859},[],[3861],{"type":48,"value":1085},{"type":48,"value":3863}," before claiming anything worked. An empty lookup means a ",{"type":43,"tag":57,"props":3865,"children":3866},{},[3867],{"type":48,"value":3868},"silent failure",{"type":48,"value":3870}," (200 + ",{"type":43,"tag":65,"props":3872,"children":3874},{"className":3873},[],[3875],{"type":48,"value":2737},{"type":48,"value":3877}," + no row), not \"in progress\" — never report success without a confirmed row. Use a unique ",{"type":43,"tag":65,"props":3879,"children":3881},{"className":3880},[],[3882],{"type":48,"value":1085},{"type":48,"value":3884}," per run so the lookup matches your row.",{"type":43,"tag":138,"props":3886,"children":3887},{},[3888,3890,3895,3897,3902,3904,3909,3911,3916],{"type":48,"value":3889},"For ",{"type":43,"tag":65,"props":3891,"children":3893},{"className":3892},[],[3894],{"type":48,"value":610},{"type":48,"value":3896},", you MUST pass ",{"type":43,"tag":65,"props":3898,"children":3900},{"className":3899},[],[3901],{"type":48,"value":1426},{"type":48,"value":3903},"; for ",{"type":43,"tag":65,"props":3905,"children":3907},{"className":3906},[],[3908],{"type":48,"value":881},{"type":48,"value":3910},", exactly one ",{"type":43,"tag":65,"props":3912,"children":3914},{"className":3913},[],[3915],{"type":48,"value":1434},{"type":48,"value":3917}," — otherwise the report is empty or ERRORs.",{"type":43,"tag":138,"props":3919,"children":3920},{},[3921,3923,3928,3930,3935,3936,3941,3943,3948,3950,3955,3956,3961],{"type":48,"value":3922},"After triggering, verify success on ",{"type":43,"tag":57,"props":3924,"children":3925},{},[3926],{"type":48,"value":3927},"both",{"type":48,"value":3929}," channels: no ",{"type":43,"tag":65,"props":3931,"children":3933},{"className":3932},[],[3934],{"type":48,"value":1199},{"type":48,"value":2971},{"type":43,"tag":65,"props":3937,"children":3939},{"className":3938},[],[3940],{"type":48,"value":1206},{"type":48,"value":3942}," on the trigger, and ",{"type":43,"tag":65,"props":3944,"children":3946},{"className":3945},[],[3947],{"type":48,"value":3351},{"type":48,"value":3949}," reaches ",{"type":43,"tag":65,"props":3951,"children":3953},{"className":3952},[],[3954],{"type":48,"value":70},{"type":48,"value":2035},{"type":43,"tag":65,"props":3957,"children":3959},{"className":3958},[],[3960],{"type":48,"value":3399},{"type":48,"value":3764},{"type":43,"tag":138,"props":3963,"children":3964},{},[3965,3967,3973,3975,3980,3982,3987,3989,3994,3995,4000,4001,4006,4007,4012],{"type":48,"value":3966},"Poll the ",{"type":43,"tag":65,"props":3968,"children":3970},{"className":3969},[],[3971],{"type":48,"value":3972},"report",{"type":48,"value":3974}," query by ",{"type":43,"tag":65,"props":3976,"children":3978},{"className":3977},[],[3979],{"type":48,"value":2833},{"type":48,"value":3981},", not ",{"type":43,"tag":65,"props":3983,"children":3985},{"className":3984},[],[3986],{"type":48,"value":519},{"type":48,"value":3988},"; use ",{"type":43,"tag":65,"props":3990,"children":3992},{"className":3991},[],[3993],{"type":48,"value":2868},{"type":48,"value":2035},{"type":43,"tag":65,"props":3996,"children":3998},{"className":3997},[],[3999],{"type":48,"value":3238},{"type":48,"value":2174},{"type":43,"tag":65,"props":4002,"children":4004},{"className":4003},[],[4005],{"type":48,"value":78},{"type":48,"value":2035},{"type":43,"tag":65,"props":4008,"children":4010},{"className":4009},[],[4011],{"type":48,"value":3262},{"type":48,"value":3764},{"type":43,"tag":138,"props":4014,"children":4015},{},[4016,4021,4022,4028],{"type":43,"tag":57,"props":4017,"children":4018},{},[4019],{"type":48,"value":4020},"Present the download link as a clickable markdown link",{"type":48,"value":3310},{"type":43,"tag":65,"props":4023,"children":4025},{"className":4024},[],[4026],{"type":48,"value":4027},"[Click here to download your report](\u003Clink>)",{"type":48,"value":4029},"), never the raw presigned URL. Note that the link is presigned and expires after a limited window.",{"type":43,"tag":138,"props":4031,"children":4032},{},[4033,4035,4040,4042,4047,4048,4053,4054,4059],{"type":48,"value":4034},"Default ",{"type":43,"tag":65,"props":4036,"children":4038},{"className":4037},[],[4039],{"type":48,"value":1104},{"type":48,"value":4041}," to ",{"type":43,"tag":65,"props":4043,"children":4045},{"className":4044},[],[4046],{"type":48,"value":258},{"type":48,"value":2739},{"type":43,"tag":65,"props":4049,"children":4051},{"className":4050},[],[4052],{"type":48,"value":1122},{"type":48,"value":4041},{"type":43,"tag":65,"props":4055,"children":4057},{"className":4056},[],[4058],{"type":48,"value":1129},{"type":48,"value":4060}," unless the user specifies otherwise.",{"type":43,"tag":138,"props":4062,"children":4063},{},[4064,4066,4071],{"type":48,"value":4065},"Never truncate or shorten transaction hashes, addresses, report IDs, or ",{"type":43,"tag":65,"props":4067,"children":4069},{"className":4068},[],[4070],{"type":48,"value":1426},{"type":48,"value":4072}," values — always show\u002Fpass them in full.",{"type":43,"tag":138,"props":4074,"children":4075},{},[4076,4078,4083],{"type":48,"value":4077},"This is a read\u002Fexport skill — ",{"type":43,"tag":57,"props":4079,"children":4080},{},[4081],{"type":48,"value":4082},"NEVER",{"type":48,"value":4084}," run mutations that modify platform data.",{"type":43,"tag":4086,"props":4087,"children":4088},"style",{},[4089],{"type":48,"value":4090},"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":4092,"total":4194},[4093,4112,4131,4145,4157,4169,4181],{"slug":4094,"name":4094,"fn":4095,"description":4096,"org":4097,"tags":4098,"stars":26,"repoUrl":27,"updatedAt":4111},"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},[4099,4102,4105,4108],{"name":4100,"slug":4101,"type":16},"Creative","creative",{"name":4103,"slug":4104,"type":16},"Image Generation","image-generation",{"name":4106,"slug":4107,"type":16},"Marketing","marketing",{"name":4109,"slug":4110,"type":16},"Video","video","2026-07-01T08:09:32.316182",{"slug":4113,"name":4113,"fn":4114,"description":4115,"org":4116,"tags":4117,"stars":26,"repoUrl":27,"updatedAt":4130},"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},[4118,4121,4124,4127],{"name":4119,"slug":4120,"type":16},"Audit","audit",{"name":4122,"slug":4123,"type":16},"Code Analysis","code-analysis",{"name":4125,"slug":4126,"type":16},"Playwright","playwright",{"name":4128,"slug":4129,"type":16},"Testing","testing","2026-07-02T07:37:17.341081",{"slug":4132,"name":4132,"fn":4133,"description":4134,"org":4135,"tags":4136,"stars":26,"repoUrl":27,"updatedAt":4144},"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},[4137,4140,4143],{"name":4138,"slug":4139,"type":16},"Monitoring","monitoring",{"name":4141,"slug":4142,"type":16},"QA","qa",{"name":4128,"slug":4129,"type":16},"2026-07-02T07:37:18.566504",{"slug":4146,"name":4146,"fn":4147,"description":4148,"org":4149,"tags":4150,"stars":26,"repoUrl":27,"updatedAt":4156},"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},[4151,4154,4155],{"name":4152,"slug":4153,"type":16},"Operations","operations",{"name":4141,"slug":4142,"type":16},{"name":4128,"slug":4129,"type":16},"2026-07-02T07:37:23.446065",{"slug":4158,"name":4158,"fn":4159,"description":4160,"org":4161,"tags":4162,"stars":26,"repoUrl":27,"updatedAt":4168},"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},[4163,4166,4167],{"name":4164,"slug":4165,"type":16},"Documentation","documentation",{"name":4141,"slug":4142,"type":16},{"name":4128,"slug":4129,"type":16},"2026-07-02T07:37:22.247052",{"slug":4170,"name":4170,"fn":4171,"description":4172,"org":4173,"tags":4174,"stars":26,"repoUrl":27,"updatedAt":4180},"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},[4175,4178,4179],{"name":4176,"slug":4177,"type":16},"Project Management","project-management",{"name":4141,"slug":4142,"type":16},{"name":4128,"slug":4129,"type":16},"2026-07-02T07:37:19.793846",{"slug":4182,"name":4182,"fn":4183,"description":4184,"org":4185,"tags":4186,"stars":26,"repoUrl":27,"updatedAt":4193},"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},[4187,4190,4191,4192],{"name":4188,"slug":4189,"type":16},"Debugging","debugging",{"name":4125,"slug":4126,"type":16},{"name":4141,"slug":4142,"type":16},{"name":4128,"slug":4129,"type":16},"2026-07-02T07:37:16.07175",30,{"items":4196,"total":4377},[4197,4216,4230,4242,4261,4272,4293,4313,4327,4340,4348,4361],{"slug":4198,"name":4198,"fn":4199,"description":4200,"org":4201,"tags":4202,"stars":4213,"repoUrl":4214,"updatedAt":4215},"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},[4203,4204,4207,4210],{"name":4100,"slug":4101,"type":16},{"name":4205,"slug":4206,"type":16},"Design","design",{"name":4208,"slug":4209,"type":16},"Generative Art","generative-art",{"name":4211,"slug":4212,"type":16},"JavaScript","javascript",161831,"https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fskills","2026-04-06T17:56:15.455818",{"slug":4217,"name":4217,"fn":4218,"description":4219,"org":4220,"tags":4221,"stars":4213,"repoUrl":4214,"updatedAt":4229},"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},[4222,4225,4226],{"name":4223,"slug":4224,"type":16},"Branding","branding",{"name":4205,"slug":4206,"type":16},{"name":4227,"slug":4228,"type":16},"Typography","typography","2026-04-06T17:56:05.042852",{"slug":4231,"name":4231,"fn":4232,"description":4233,"org":4234,"tags":4235,"stars":4213,"repoUrl":4214,"updatedAt":4241},"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},[4236,4237,4238],{"name":4100,"slug":4101,"type":16},{"name":4205,"slug":4206,"type":16},{"name":4239,"slug":4240,"type":16},"PDF","pdf","2026-04-06T17:56:03.794732",{"slug":4243,"name":4243,"fn":4244,"description":4245,"org":4246,"tags":4247,"stars":4213,"repoUrl":4214,"updatedAt":4260},"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},[4248,4251,4252,4255,4257],{"name":4249,"slug":4250,"type":16},"Agents","agents",{"name":9,"slug":8,"type":16},{"name":4253,"slug":4254,"type":16},"Anthropic SDK","anthropic-sdk",{"name":4256,"slug":4243,"type":16},"Claude API",{"name":4258,"slug":4259,"type":16},"LLM","llm","2026-07-28T05:36:08.213335",{"slug":4262,"name":4262,"fn":4263,"description":4264,"org":4265,"tags":4266,"stars":4213,"repoUrl":4214,"updatedAt":4271},"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},[4267,4268],{"name":4164,"slug":4165,"type":16},{"name":4269,"slug":4270,"type":16},"Technical Writing","technical-writing","2026-04-06T17:56:14.18897",{"slug":4273,"name":4273,"fn":4274,"description":4275,"org":4276,"tags":4277,"stars":4213,"repoUrl":4214,"updatedAt":4292},"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},[4278,4281,4283,4286,4289],{"name":4279,"slug":4280,"type":16},"Documents","documents",{"name":4282,"slug":4273,"type":16},"DOCX",{"name":4284,"slug":4285,"type":16},"Office","office",{"name":4287,"slug":4288,"type":16},"Templates","templates",{"name":4290,"slug":4291,"type":16},"Word","word","2026-07-18T05:16:23.136271",{"slug":4294,"name":4294,"fn":4295,"description":4296,"org":4297,"tags":4298,"stars":4213,"repoUrl":4214,"updatedAt":4312},"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},[4299,4300,4303,4306,4309],{"name":4205,"slug":4206,"type":16},{"name":4301,"slug":4302,"type":16},"Frontend","frontend",{"name":4304,"slug":4305,"type":16},"React","react",{"name":4307,"slug":4308,"type":16},"Tailwind CSS","tailwind-css",{"name":4310,"slug":4311,"type":16},"UI Components","ui-components","2026-04-06T17:56:16.723469",{"slug":4314,"name":4314,"fn":4315,"description":4316,"org":4317,"tags":4318,"stars":4213,"repoUrl":4214,"updatedAt":4326},"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},[4319,4322,4323],{"name":4320,"slug":4321,"type":16},"Communications","communications",{"name":4287,"slug":4288,"type":16},{"name":4324,"slug":4325,"type":16},"Writing","writing","2026-04-06T17:56:20.695522",{"slug":4328,"name":4328,"fn":4329,"description":4330,"org":4331,"tags":4332,"stars":4213,"repoUrl":4214,"updatedAt":4339},"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},[4333,4334,4337,4338],{"name":4249,"slug":4250,"type":16},{"name":4335,"slug":4336,"type":16},"API Development","api-development",{"name":4258,"slug":4259,"type":16},{"name":24,"slug":25,"type":16},"2026-04-06T17:56:10.357665",{"slug":4240,"name":4240,"fn":4341,"description":4342,"org":4343,"tags":4344,"stars":4213,"repoUrl":4214,"updatedAt":4347},"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},[4345,4346],{"name":4279,"slug":4280,"type":16},{"name":4239,"slug":4240,"type":16},"2026-04-06T17:56:02.483316",{"slug":4349,"name":4349,"fn":4350,"description":4351,"org":4352,"tags":4353,"stars":4213,"repoUrl":4214,"updatedAt":4360},"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},[4354,4357],{"name":4355,"slug":4356,"type":16},"PowerPoint","powerpoint",{"name":4358,"slug":4359,"type":16},"Presentations","presentations","2026-07-18T05:16:24.1471",{"slug":4362,"name":4362,"fn":4363,"description":4364,"org":4365,"tags":4366,"stars":4213,"repoUrl":4214,"updatedAt":4376},"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},[4367,4368,4369,4372,4375],{"name":4249,"slug":4250,"type":16},{"name":4164,"slug":4165,"type":16},{"name":4370,"slug":4371,"type":16},"Evals","evals",{"name":4373,"slug":4374,"type":16},"Performance","performance",{"name":4269,"slug":4270,"type":16},"2026-04-19T06:45:40.804",490]