← UnifyCONTENT HISTORYWHAT CHANGED · RULE-BASED ANALYSIS
Update to Unify
Snapshot Sep 30, 2026 · 23:07 UTC · version 1.0.0
Collection source: not recorded for this historical snapshot.
First saved snapshot
No earlier snapshot is available to establish a change.
Compare saved observations
Download comparison JSONFull technical diff · 0 changed fields
Full snapshot data
{
"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"
}SHA-256 of public snapshot: 8932098371b335c3e1314133cdba1d65969ed447443af156145c4a06bf2aa8ad