{"id":85308,"plugin_id":"plugin_asdk_app_6acf94a9ca348191923b020538572b1d","kind":"skill","collection_source":"plugin_package","comparison_source":null,"observed_at":"2026-11-07T00:09:34.469Z","digest":"99a244cb6bd4e4dbcef148bdd70b1247c8b130602c3b8f10bd3ce2925e87cf2d","against":null,"payload":{"description":"Answer a question from your company's data with TextQL: run SQL or a governed TQL query into a Python sandbox, then aggregate, analyze or chart the result there. Use for numbers, trends, comparisons and charts.","included_files":[],"name":"query-data","skill_md_contents":"---\nname: query-data\ndescription: >-\n  Answer a question from your company's data with TextQL: run SQL or a\n  governed TQL query into a Python sandbox, then aggregate, analyze or chart\n  the result there. Use for numbers, trends, comparisons and charts.\n---\n\n# Query and analyze data\n\nFollow the `refinery` skill for tool details and limits.\n\n1. `refinery_workspace_context`. Use an existing definition or governed\n   model before writing raw SQL.\n2. If the table is unknown, find it first with the `explore-data` steps.\n3. `refinery_query` with `connector`, `sql` (one SELECT, in the\n   connector's dialect) or `tql`, and a `dataframe` name. Do the heavy\n   aggregation in SQL. `LIMIT` (sql) and `max_rows` (tql) bound the loaded\n   dataframe, not just the inline preview — use them for samples and\n   previews, and keep every row the analysis needs. Writes are refused\n   unless the connector allows write operations; send only SELECT statements unless\n   the user asked for a change.\n4. Keep the returned `sandbox_id` and pass it to every later call.\n5. `refinery_sandbox_python` with `code` and that `sandbox_id` for anything\n   SQL cannot do cleanly: joins across queries, statistics, charts. Print\n   only the summary, and set `max_output_chars` when output could be large.\n\nReport the answer first, then the query you ran and any caveat (filters,\ndate range, rows excluded). If a query fails or a table is refused, show the\nerror. Never fill gaps with invented numbers.\n"},"changes":[],"summary":"First saved snapshot. No earlier version is available for comparison.","summary_kind":"deterministic","summary_metadata":{}}