{"id":13537,"plugin_id":"plugin_asdk_app_6a8c88f806c08191ab0ae925be246c65","kind":"skill","collection_source":null,"comparison_source":null,"observed_at":"2026-09-30T23:07:40.711Z","digest":"8932098371b335c3e1314133cdba1d65969ed447443af156145c4a06bf2aa8ad","against":null,"payload":{"description":"Unify DataTables: page through the rows of result tables produced by Unify agent runs with load_datatable. Use when a run's final answer references a DataTable or table ID and you need the actual rows, columns, or metadata.","included_files":[],"name":"data-tables","skill_md_contents":"---\nname: data-tables\ndescription: \"Unify DataTables: page through the rows of result tables produced by Unify agent runs with load_datatable. Use when a run's final answer references a DataTable or table ID and you need the actual rows, columns, or metadata.\"\n---\n\n# Unify DataTables\n\nDataTables are the durable artifact of list-building and enrichment runs. When\n`read_agent_results` references a table, fetch it directly; don't start another\nrun just to see rows you already have.\n\n> **Not the same as Bulk API results.** A DataTable is an **agent run** artifact,\n> paged here with `load_datatable` (cursor-based, pinned to a `versionId`). The\n> public **Bulk API** returns query-job results paged by `get_<resource>_query_job_results`\n> (`page` / `page_size`). If you have a `job_id` rather than a `tableId` +\n> `versionId`, use the public Bulk API tools, not this skill.\n\n## `load_datatable({ tableId, versionId, limit?, cursor? })`\n\n- `tableId` + `versionId`: **both required**; take them from the DataTable\n  reference in the run result's structured content. Loads pin an exact table\n  version, so pages are consistent even if the table keeps changing.\n- `limit`: rows per page, default 100.\n- `cursor`: pass the previous page's `nextCursor` to continue; it is bound to\n  the same table and version.\n\nReturns `{ tableId, versionId, metadata, columns, rows, nextCursor }`. Each row\nis a map of column key → JSON value. `nextCursor: null` means you have the last\npage. `metadata.currentWorkingVersionId` tells you whether a newer working\nversion exists than the one you loaded.\n\n## Paging pattern\n\n1. First call with `tableId` + `versionId` (and a smaller `limit` if you only need a sample).\n2. Loop while `nextCursor` is non-null, passing it as `cursor`.\n3. For large tables, ask your user before pulling everything; summarize from the\n   first page plus `metadata` row counts when that answers the question.\n\n## Notes\n\n- Tables are visible only to the user who owns them in the workspace; \"DataTable\n  not found\" usually means a table from another user or session, not a bug.\n  \"DataTable version not found\" means a stale `versionId`; re-read the run\n  result (or ask the agent for the current version).\n- \"Invalid DataTable cursor\" → restart paging from the first page.\n- To add data to an existing table (more columns, more rows), start a new\n  `run_agent` brief that names the table ID and describes the addition.\n"},"changes":[],"summary":"First saved snapshot. No earlier version is available for comparison.","summary_kind":"deterministic","summary_metadata":{}}