[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M71RH5K6VDAA8JKAEJC640K9":3,"skill-same:01M71RH5K6VDAA8JKAEJC640K9":104},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":39,"linkOnly":40,"markdownContent":41,"markdownBody":42,"frontMatter":43,"refName":44,"commitSha":45,"skillDirectory":46,"forksCount":47,"repositoryHtmlUrl":48,"repositoryHomepageUrl":49,"ownerHtmlUrl":50,"ownerBlogUrl":49,"ownerDescription":6,"updatedAt":51,"install":52,"resources":65},"01M71RH5K6VDAA8JKAEJC640K9","sigma-cli",null,"Drive the full Sigma Computing REST API surface from the local `sigma` binary (Sigma CLI) and its OpenAPI-generated command tree. Use whenever the user wants to call any Sigma endpoint from the command line, needs a uniform `--params` \u002F `--json` shape across resources, wants to install or configure the CLI, or asks about `sigma api …`, `sigma auth login`, `list-prefixes`, or `schema`. Prefer this skill over raw `curl` when the user has the `sigma` binary installed; fall back to `sigma-api` for OAuth fundamentals and direct HTTP.","sigmacomputing\u002Fsigma-agent-skills","sigmacomputing","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F7460687?v=4","01M71RGQ6AE5S9T049REJ3K4TH","Sigma Computing","01M71RGQ6Z8DH62Q715RZDC6FA",23,"Apache-2.0","https:\u002F\u002Fgithub.com\u002Fsigmacomputing\u002Fsigma-agent-skills\u002Fblob\u002Fmain\u002Fskills\u002Fsigma-cli\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38],"sigma cli","sigma","cli","back","needs","when","login","resources","line","full","local","across","install","generated","list","command","direct","configure","api","auth","2026-11-10 13:02:02",false,"---\nname: sigma-cli\ndescription: >-\n  Drive the full Sigma Computing REST API surface from the local `sigma`\n  binary (Sigma CLI) and its OpenAPI-generated command tree. Use whenever\n  the user wants to call any Sigma endpoint from the command line, needs a\n  uniform `--params` \u002F `--json` shape across resources, wants to install or\n  configure the CLI, or asks about `sigma api …`, `sigma auth login`,\n  `list-prefixes`, or `schema`. Prefer this skill over raw `curl` when the\n  user has the `sigma` binary installed; fall back to `sigma-api` for OAuth\n  fundamentals and direct HTTP.\n---\n\n# Sigma CLI (`sigma`)\n\nInstalling, authenticating, and driving the Sigma REST API through the local\n`sigma` binary — calling convention, discovery, output, and error handling.\nEvery operation in the published OpenAPI spec gets a corresponding\n`sigma api \u003Cgroup> [\u003Csub-group> …] \u003Coperation>` command, generated at runtime.\n\nNot in scope: raw HTTP and OAuth fundamentals (`sigma-api` — hand off if the\nuser wants `curl`), or spec-body authoring for data models (its own skill).\n\n## Sources of truth\n\nThe command tree is generated; this skill is commentary layered on top.\n**When they disagree, the spec wins.**\n\n- **What exists** → `sigma api list-prefixes`, `sigma api \u003Cgroup> --help`\n- **Method, path, parameters** → `sigma api schema \u003Ccommand-path…>`\n- **Request \u002F response body shape** → read the spec file directly (*Discovery\n  loop*, step 3).\n\n**Operation names, fields, and enum values here are illustrative, not\nexhaustive** — the API grows continuously. If you want a capability and don't\nsee it, assume it may exist and check. Report anything unrecognized verbatim;\nnever coerce it into a value you do recognize, never flag it as a bug.\n\n`sigma auth …` and the global flags are hand-written CLI surface, so what's\nlisted here is the whole set. Never present the generated `sigma api …` tree\nthat way — answer from `list-prefixes` or `--help` instead.\n\n## Topical reference index\n\n| Task | File |\n|------|------|\n| Find or list things by folder \u002F path, browse the document tree, move or rename files, scope a list to a location rather than a resource type | [`reference\u002Ffiles-and-folders.md`](reference\u002Ffiles-and-folders.md) |\n| Manage users and teams, assign user attributes, list account-type permissions, configure SAML | [`reference\u002Fidentity-and-access.md`](reference\u002Fidentity-and-access.md) |\n| Grant or revoke access on any resource (workbook \u002F workspace \u002F connection \u002F dataset), share workbooks across orgs, manage embed URLs, manage favorites | [`reference\u002Fpermissions-and-sharing.md`](reference\u002Fpermissions-and-sharing.md) |\n| Build \u002F inspect \u002F update workbooks (read and write their contents), list elements \u002F pages \u002F columns \u002F queries, manage bookmarks, version history, lineage | [`reference\u002Fworkbook-authoring.md`](reference\u002Fworkbook-authoring.md) |\n| Build \u002F inspect \u002F update data models (and migrate from datasets), spec CRUD, columns \u002F elements \u002F sources \u002F lineage | [`reference\u002Fdata-model-authoring.md`](reference\u002Fdata-model-authoring.md) |\n| Create \u002F list \u002F test connections, look up paths and tables, swap data sources on workbooks \u002F data-models \u002F templates, manage source-swap-policies | [`reference\u002Fconnections-and-sources.md`](reference\u002Fconnections-and-sources.md) |\n| One-off exports, scheduled exports, query download, webhook delivery | [`reference\u002Fdelivery-and-schedules.md`](reference\u002Fdelivery-and-schedules.md) |\n| Trigger and poll materializations, audit materialization schedules (schedules are authored via the workbook\u002Fdata-model spec) | [`reference\u002Fmaterializations.md`](reference\u002Fmaterializations.md) |\n| Multi-tenant orgs, deployment policies, templates \u002F shared templates, organization translations | [`reference\u002Ftenancy-and-deployments.md`](reference\u002Ftenancy-and-deployments.md) |\n\nOpen at most one topical file — `SKILL.md` plus that file is the whole context\nfor a normal workflow.\n\n## Setup — install and authenticate\n\nBoth are one-time. If `sigma auth status` already reports a validating\nprofile, skip to *Calling convention*.\n\n```sh\nbrew install sigmacomputing\u002Ftap\u002Fsigma-computing-cli   # brew upgrade to update\nsigma auth login\n```\n\n`sigma --version` verifies the install; if it's missing or resolves to another\ntool, see *Troubleshooting*.\n\nBare `auth login` opens a profile picker, or the create flow when no profiles\nexist. That flow asks which auth method to use — **OAuth** (browser sign-in,\npersonal accounts) or **API key** (client credentials, service accounts; create\nit in Sigma under **Administration → APIs & embed secrets** first) — then\nwalks an interactive prompt sequence. Credentials are stored encrypted, never\nin a plaintext config file; on systems without a usable OS keyring, set\n`SIGMA_CLI_KEYRING_BACKEND=file` to keep the encryption key under\n`~\u002F.sigma-cli` instead. `sigma auth --help` lists the rest (status, token,\nset-default, rename, delete).\n\n`auth login` is interactive — never attempt to drive it non-interactively. For\nheadless or CI use, set `SIGMA_BASE_URL`, `SIGMA_CLIENT_ID`, and\n`SIGMA_CLIENT_SECRET` instead; they take precedence over stored profiles. See\nthe `sigma-api` skill for what each variable means and where to find it.\n\nTwo seams matter when scripting against auth:\n\n- **`sigma auth token` prints a bare JWT on stdout** — not a JSON wrapper.\n  `TOKEN=$(sigma auth token)` is correct; piping it through `jq` empties it and\n  you get a 401 that looks like an expired credential.\n- **`sigma auth status` writes its report to stderr** and prints nothing on\n  stdout (`-f json` included), so parsing it needs `2>&1`. That report is how\n  you get the active profile's API host without hardcoding a hostname, which\n  a direct `curl` against an endpoint needs.\n\n## Calling convention\n\nEvery operation takes the same shape:\n\n```\nsigma api \u003Cgroup> [\u003Csub-group> …] \u003Coperation>\n        [--params '\u003CJSON>']     # path + query + header parameters\n        [--json   '\u003CJSON>']     # request body (create\u002Fupdate ops)\n        [-f json|table|yaml|csv]\n        [-p \u003Cprofile>]\n```\n\n`--params` is a single JSON object bundling **every** path, query, and header\nparameter for the operation. `--help` marks it required only when a *path*\nparameter is required — required query and header parameters aren't reflected\nthere, so read requiredness off `schema`, not `--help`.\n\n> **Keys the operation doesn't declare are silently forwarded as query\n> parameters — no error, exit 0.** A misspelled parameter name therefore\n> returns a plausible-looking wrong answer instead of failing. Confirm names\n> against `sigma api schema \u003Ccommand-path…>` before trusting a filtered,\n> paginated, or otherwise parameter-dependent result.\n\nThe `api` segment is optional, but use it — one spelling keeps every example\ncopy-pasteable as written.\n\n```sh\n# List — no parameters, so no --params\nsigma api workbooks list\n\n# Get — path id goes in --params\nsigma api workbooks get --params '{\"workbookId\":\"\u003CYOUR_WORKBOOK_ID>\"}'\n\n# Create — body in --json\nsigma api workbooks create --json '{\"name\":\"My Workbook\",\"folderId\":\"\u003CYOUR_FOLDER_ID>\"}'\n\n# Sub-resources nest under their parent, mirroring the API hierarchy\nsigma api connections paths grants list --params '{\"connectionPathId\":\"\u003CYOUR_CONNECTION_PATH_ID>\"}'\n```\n\nBoth flags take a literal JSON string, so substitute a file in the shell:\n`--json \"$(cat .\u002Fworkbook-spec.json)\"`. Check `--help` for a file-input flag\nbefore assuming that's the only way.\n\n**Mutating operations take effect on the live tenant as soon as they're\naccepted.** Before a `delete`, a `revoke`, or an `update` that replaces a spec,\nresolve the id to a name and confirm the target with the user — ids are\nopaque, so a wrong-but-valid one fails by succeeding on the wrong resource.\n\n## Discovery loop\n\nUse this whenever the user names a resource you haven't touched before, or\nwhenever a call returns a shape error. The three steps below run one task\nend to end — exporting a workbook.\n\n### 1 — Drill into a group\n\n`--help` at any depth enumerates that level's leaves and sub-groups; on a leaf\nit shows whether `--params` is required and whether `--json` is accepted.\n\n```sh\nsigma api workbooks --help\nsigma api workbooks elements columns --help    # sub-groups recurse\nsigma api workbooks export --help              # leaf: flags for one operation\n```\n\n### 2 — Inspect parameters\n\n`sigma api schema \u003Ccommand-path…>` prints the resolved operation's metadata —\nmethod, path template, summary, and parameters:\n\n```sh\nsigma api schema workbooks export\n```\n\nThe argument is **command segments, not an HTTP path** — `workbooks export`,\nnot `\u002Fv2\u002Fworkbooks\u002F{workbookId}\u002Fexport`, which fails with `no command at path`.\nThe HTTP path template it *reports* is what step 3 needs.\n\n`[path…]` is variadic and swallows trailing flags, so any flag must come\n**before** the path segments — `schema --resolve-refs workbooks export`, never\n`schema workbooks export --resolve-refs`.\n\n### 3 — Inspect request \u002F response body shape\n\n`sigma api schema` reports only *whether* an operation takes a body, never its\nshape — `--resolve-refs` inlines `$ref` pointers but still won't surface body\nproperties, so it doesn't substitute for reading the spec. For the shape, read\nthe same spec the CLI resolved against, using the method and path from step 2:\n\n```sh\nSPEC=\"${SIGMA_CLI_OPENAPI_SPEC:-$HOME\u002F.sigma-cli\u002Fcache\u002Fopenapi.json}\"\n\n# step 2 gave: .method \"POST\", .path \"\u002Fv2\u002Fworkbooks\u002F{workbookId}\u002Fexport\"\njq '.paths.\"\u002Fv2\u002Fworkbooks\u002F{workbookId}\u002Fexport\".post.requestBody.content.\"application\u002Fjson\".schema' \"$SPEC\"\njq '.paths.\"\u002Fv2\u002Fworkbooks\u002F{workbookId}\u002Fexport\".post.responses.\"200\".content.\"application\u002Fjson\".schema' \"$SPEC\"\n```\n\n**Bodies routinely compose with `allOf` \u002F `oneOf`.** Required fields and the\naccepted variants are spread across branches, and a field is often an object\nwhere a scalar looks natural (export's `format` is `{\"type\":\"csv\"}`, not\n`\"csv\"`). Read every branch before composing a body — don't stop at the first\n`properties` block.\n\nIf the cache file is missing, any `sigma api …` call repopulates it — it's the\nCLI's own runtime source, and outranks every other copy, this skill included.\n\nResolution order is `$SIGMA_CLI_OPENAPI_SPEC`, then\n`~\u002F.sigma-cli\u002Fcache\u002Fopenapi.json`, then `assets.sigmacomputing.com`. On an\nair-gapped or proxied machine, download the spec once and point the variable at\nit. The cache TTL is 60s, so a stale schema is rarely the cause of a shape\nerror; `--refresh-spec` forces a redownload if you need to rule it out.\n\n## Global flags\n\n`-f json|table|yaml|csv` — default `json`. `table` handles both shapes (rows\nfor a list, flattened key\u002Fvalue for a single object); `csv` only makes sense\non a list. `-p \u003Cname>` selects a profile; omitted, the profile marked default\nis used — *except* `sigma auth login`, where omitting `-p` starts the\ncreate-a-new-profile flow instead. `--refresh-spec` forces a spec redownload.\nAny `--help` prints the current set.\n\n`--yaml` is **not** `-f yaml`: it asks the *server* for YAML\n(`Accept: application\u002Fyaml`) and exits 3 if the endpoint can't produce it,\nwhereas `-f yaml` renders locally and always works.\n\nOutput goes to stdout, so it pipes cleanly:\n\n```sh\nsigma api workbooks list | jq '.entries[].name'\nsigma api workbooks get --params '{\"workbookId\":\"\u003CYOUR_WORKBOOK_ID>\"}' > workbook.json\n```\n\n## Paginating list results\n\n`page` is a **cursor token, not an offset** — read `nextPage` off the response\nand pass it back verbatim. Incrementing an integer is the most expensive\nmistake on this surface: the call succeeds and silently re-serves the same\nrows, so you get duplicates and no error. Treat the token as opaque; don't\nparse, decode, or synthesize it.\n\n**Stop when `nextPage` is absent**, not on a count. `total` and `hasMore`\naren't on every endpoint, and where `total` is present it sometimes counts the\ncurrent page rather than the collection.\n\n```sh\nPAGE=''\nwhile :; do\n  P=$(jq -cn --arg p \"$PAGE\" '{limit:500} + (if $p == \"\" then {} else {page:$p} end)')\n  RESP=$(sigma api files list --params \"$P\")\n  jq -r '.entries[] | [.id, .name] | @tsv' \u003C\u003C\u003C\"$RESP\"\n  PAGE=$(jq -r '.nextPage \u002F\u002F empty' \u003C\u003C\u003C\"$RESP\")\n  [ -n \"$PAGE\" ] || break\ndone\n```\n\nCollections can be far larger than they look — a single connection's path list\ncan run to tens of thousands of entries. Bound any sweep you don't need in\nfull, and say so when you stop early rather than presenting a partial list as\ncomplete.\n\nUse the largest `limit` the endpoint accepts; over-large values are clamped\nrather than rejected, and shrinking `limit` only multiplies the call count —\nwhich is how a sweep runs into throttling (*Troubleshooting*).\n\n## Polling async jobs\n\nSome operations return a job handle you poll rather than a result you read\ndirectly. Read the response schema (*Discovery loop*, step 3) to find the\nreadiness signal before writing a deadline-bounded loop; the topical files\ncarry worked loops and per-operation traps for the ones they cover.\n\n**Hardcode the *in-progress* set, not the terminal set,** and treat everything\nelse as terminal. Status fields are open strings, so a value you haven't seen\nwould otherwise fall into the keep-waiting branch, burn the whole deadline, and\nget misreported as a timeout. When a job is terminal but carries no success or\nfailure marker, report it as indeterminate rather than picking a side.\n\n## Troubleshooting\n\nErrors print as structured JSON on stdout, with a colored label on stderr. Read\nthe matching entry before retrying — several of these get worse on a blind\nretry. Treat any code not listed as failure and surface stderr verbatim.\n\n| Code | Meaning |\n|------|---------|\n| 0 | Success — see *A call succeeds but the answer looks wrong* |\n| 1 | API error (HTTP 4xx\u002F5xx) — three entries below, by what the message says |\n| 2 | Authentication error |\n| 3 | Local validation error, raised before any request is sent; the message names the cause |\n| 4 | Transport, spec fetch, or a response the CLI couldn't parse |\n\n### `command not found: sigma`\n\nSigmaHQ ships an unrelated tool with the same binary name; when it's present\nHomebrew won't link Sigma's. If a command name from older docs fails instead,\nthe binary was renamed — it's `sigma` now.\n\n```sh\nbrew link --overwrite sigma-computing-cli\n```\n\n### Exit 1 with 403 Forbidden\n\nThe credential authenticated but isn't permitted for this operation. Check the\nrole on the credential and the resource-level grants\n([`reference\u002Fpermissions-and-sharing.md`](reference\u002Fpermissions-and-sharing.md)).\n\n### Exit 1 with a 400 — the body is wrong\n\nBodies are validated server-side, so a bad field lands here rather than on 3.\nRe-read the request body schema (*Discovery loop*, step 3) and compare it\nagainst what you sent, checking **every** `allOf` \u002F `oneOf` branch — required\nfields and accepted variants are spread across them. One automated retry with\nthe corrected shape, then stop and report.\n\n### Exit 1 with an HTML body — you're being throttled\n\nA wall of HTML where a `message` field belongs is an edge\u002Fchallenge page, not a\nmalformed request: you're sending too many requests too fast. The CLI has no\nbackoff of its own, so an immediate retry makes it worse. Stop the loop, report\nhow far it got, and raise the page `limit` before any resume.\n\n### Exit 2 — authentication error\n\nThe profile's credentials are missing, expired, or rejected.\n\n```sh\nsigma auth status 2>&1          # active profile, its type, whether it validates\nsigma auth login -p \u003Cprofile>   # refresh it\n```\n\nIf an API-key profile still fails after a refresh, re-issue the credential in\nSigma under **Administration → APIs & embed secrets**. If no profile is set at\nall, `sigma auth login` creates one and `sigma auth set-default \u003Cname>` selects\nan existing one.\n\n### Exit 4 — transport, spec fetch, or unparseable response\n\nUsually the spec download — on an air-gapped or proxied machine, pin a local\ncopy (*Discovery loop*, step 3). It also covers a 2xx whose body isn't JSON; the\nmessage says which, and neither case improves on a retry.\n\n### A call succeeds but the answer looks wrong\n\nUndeclared `--params` keys (*Calling convention*) or integer-incremented\npagination (*Paginating list results*). Check parameter names against\n`sigma api schema \u003Ccommand-path…>` first — it's the cheaper of the two.\n\n### Debug logging\n\n```sh\nSIGMA_CLI_LOG=sigma_cli=debug sigma api connections list   # to stderr\nSIGMA_CLI_LOG_FILE=\u002Ftmp sigma api connections list         # daily rotating files\n```\n","# Sigma CLI (`sigma`)\n\nInstalling, authenticating, and driving the Sigma REST API through the local\n`sigma` binary — calling convention, discovery, output, and error handling.\nEvery operation in the published OpenAPI spec gets a corresponding\n`sigma api \u003Cgroup> [\u003Csub-group> …] \u003Coperation>` command, generated at runtime.\n\nNot in scope: raw HTTP and OAuth fundamentals (`sigma-api` — hand off if the\nuser wants `curl`), or spec-body authoring for data models (its own skill).\n\n## Sources of truth\n\nThe command tree is generated; this skill is commentary layered on top.\n**When they disagree, the spec wins.**\n\n- **What exists** → `sigma api list-prefixes`, `sigma api \u003Cgroup> --help`\n- **Method, path, parameters** → `sigma api schema \u003Ccommand-path…>`\n- **Request \u002F response body shape** → read the spec file directly (*Discovery\n  loop*, step 3).\n\n**Operation names, fields, and enum values here are illustrative, not\nexhaustive** — the API grows continuously. If you want a capability and don't\nsee it, assume it may exist and check. Report anything unrecognized verbatim;\nnever coerce it into a value you do recognize, never flag it as a bug.\n\n`sigma auth …` and the global flags are hand-written CLI surface, so what's\nlisted here is the whole set. Never present the generated `sigma api …` tree\nthat way — answer from `list-prefixes` or `--help` instead.\n\n## Topical reference index\n\n| Task | File |\n|------|------|\n| Find or list things by folder \u002F path, browse the document tree, move or rename files, scope a list to a location rather than a resource type | [`reference\u002Ffiles-and-folders.md`](reference\u002Ffiles-and-folders.md) |\n| Manage users and teams, assign user attributes, list account-type permissions, configure SAML | [`reference\u002Fidentity-and-access.md`](reference\u002Fidentity-and-access.md) |\n| Grant or revoke access on any resource (workbook \u002F workspace \u002F connection \u002F dataset), share workbooks across orgs, manage embed URLs, manage favorites | [`reference\u002Fpermissions-and-sharing.md`](reference\u002Fpermissions-and-sharing.md) |\n| Build \u002F inspect \u002F update workbooks (read and write their contents), list elements \u002F pages \u002F columns \u002F queries, manage bookmarks, version history, lineage | [`reference\u002Fworkbook-authoring.md`](reference\u002Fworkbook-authoring.md) |\n| Build \u002F inspect \u002F update data models (and migrate from datasets), spec CRUD, columns \u002F elements \u002F sources \u002F lineage | [`reference\u002Fdata-model-authoring.md`](reference\u002Fdata-model-authoring.md) |\n| Create \u002F list \u002F test connections, look up paths and tables, swap data sources on workbooks \u002F data-models \u002F templates, manage source-swap-policies | [`reference\u002Fconnections-and-sources.md`](reference\u002Fconnections-and-sources.md) |\n| One-off exports, scheduled exports, query download, webhook delivery | [`reference\u002Fdelivery-and-schedules.md`](reference\u002Fdelivery-and-schedules.md) |\n| Trigger and poll materializations, audit materialization schedules (schedules are authored via the workbook\u002Fdata-model spec) | [`reference\u002Fmaterializations.md`](reference\u002Fmaterializations.md) |\n| Multi-tenant orgs, deployment policies, templates \u002F shared templates, organization translations | [`reference\u002Ftenancy-and-deployments.md`](reference\u002Ftenancy-and-deployments.md) |\n\nOpen at most one topical file — `SKILL.md` plus that file is the whole context\nfor a normal workflow.\n\n## Setup — install and authenticate\n\nBoth are one-time. If `sigma auth status` already reports a validating\nprofile, skip to *Calling convention*.\n\n```sh\nbrew install sigmacomputing\u002Ftap\u002Fsigma-computing-cli   # brew upgrade to update\nsigma auth login\n```\n\n`sigma --version` verifies the install; if it's missing or resolves to another\ntool, see *Troubleshooting*.\n\nBare `auth login` opens a profile picker, or the create flow when no profiles\nexist. That flow asks which auth method to use — **OAuth** (browser sign-in,\npersonal accounts) or **API key** (client credentials, service accounts; create\nit in Sigma under **Administration → APIs & embed secrets** first) — then\nwalks an interactive prompt sequence. Credentials are stored encrypted, never\nin a plaintext config file; on systems without a usable OS keyring, set\n`SIGMA_CLI_KEYRING_BACKEND=file` to keep the encryption key under\n`~\u002F.sigma-cli` instead. `sigma auth --help` lists the rest (status, token,\nset-default, rename, delete).\n\n`auth login` is interactive — never attempt to drive it non-interactively. For\nheadless or CI use, set `SIGMA_BASE_URL`, `SIGMA_CLIENT_ID`, and\n`SIGMA_CLIENT_SECRET` instead; they take precedence over stored profiles. See\nthe `sigma-api` skill for what each variable means and where to find it.\n\nTwo seams matter when scripting against auth:\n\n- **`sigma auth token` prints a bare JWT on stdout** — not a JSON wrapper.\n  `TOKEN=$(sigma auth token)` is correct; piping it through `jq` empties it and\n  you get a 401 that looks like an expired credential.\n- **`sigma auth status` writes its report to stderr** and prints nothing on\n  stdout (`-f json` included), so parsing it needs `2>&1`. That report is how\n  you get the active profile's API host without hardcoding a hostname, which\n  a direct `curl` against an endpoint needs.\n\n## Calling convention\n\nEvery operation takes the same shape:\n\n```\nsigma api \u003Cgroup> [\u003Csub-group> …] \u003Coperation>\n        [--params '\u003CJSON>']     # path + query + header parameters\n        [--json   '\u003CJSON>']     # request body (create\u002Fupdate ops)\n        [-f json|table|yaml|csv]\n        [-p \u003Cprofile>]\n```\n\n`--params` is a single JSON object bundling **every** path, query, and header\nparameter for the operation. `--help` marks it required only when a *path*\nparameter is required — required query and header parameters aren't reflected\nthere, so read requiredness off `schema`, not `--help`.\n\n> **Keys the operation doesn't declare are silently forwarded as query\n> parameters — no error, exit 0.** A misspelled parameter name therefore\n> returns a plausible-looking wrong answer instead of failing. Confirm names\n> against `sigma api schema \u003Ccommand-path…>` before trusting a filtered,\n> paginated, or otherwise parameter-dependent result.\n\nThe `api` segment is optional, but use it — one spelling keeps every example\ncopy-pasteable as written.\n\n```sh\n# List — no parameters, so no --params\nsigma api workbooks list\n\n# Get — path id goes in --params\nsigma api workbooks get --params '{\"workbookId\":\"\u003CYOUR_WORKBOOK_ID>\"}'\n\n# Create — body in --json\nsigma api workbooks create --json '{\"name\":\"My Workbook\",\"folderId\":\"\u003CYOUR_FOLDER_ID>\"}'\n\n# Sub-resources nest under their parent, mirroring the API hierarchy\nsigma api connections paths grants list --params '{\"connectionPathId\":\"\u003CYOUR_CONNECTION_PATH_ID>\"}'\n```\n\nBoth flags take a literal JSON string, so substitute a file in the shell:\n`--json \"$(cat .\u002Fworkbook-spec.json)\"`. Check `--help` for a file-input flag\nbefore assuming that's the only way.\n\n**Mutating operations take effect on the live tenant as soon as they're\naccepted.** Before a `delete`, a `revoke`, or an `update` that replaces a spec,\nresolve the id to a name and confirm the target with the user — ids are\nopaque, so a wrong-but-valid one fails by succeeding on the wrong resource.\n\n## Discovery loop\n\nUse this whenever the user names a resource you haven't touched before, or\nwhenever a call returns a shape error. The three steps below run one task\nend to end — exporting a workbook.\n\n### 1 — Drill into a group\n\n`--help` at any depth enumerates that level's leaves and sub-groups; on a leaf\nit shows whether `--params` is required and whether `--json` is accepted.\n\n```sh\nsigma api workbooks --help\nsigma api workbooks elements columns --help    # sub-groups recurse\nsigma api workbooks export --help              # leaf: flags for one operation\n```\n\n### 2 — Inspect parameters\n\n`sigma api schema \u003Ccommand-path…>` prints the resolved operation's metadata —\nmethod, path template, summary, and parameters:\n\n```sh\nsigma api schema workbooks export\n```\n\nThe argument is **command segments, not an HTTP path** — `workbooks export`,\nnot `\u002Fv2\u002Fworkbooks\u002F{workbookId}\u002Fexport`, which fails with `no command at path`.\nThe HTTP path template it *reports* is what step 3 needs.\n\n`[path…]` is variadic and swallows trailing flags, so any flag must come\n**before** the path segments — `schema --resolve-refs workbooks export`, never\n`schema workbooks export --resolve-refs`.\n\n### 3 — Inspect request \u002F response body shape\n\n`sigma api schema` reports only *whether* an operation takes a body, never its\nshape — `--resolve-refs` inlines `$ref` pointers but still won't surface body\nproperties, so it doesn't substitute for reading the spec. For the shape, read\nthe same spec the CLI resolved against, using the method and path from step 2:\n\n```sh\nSPEC=\"${SIGMA_CLI_OPENAPI_SPEC:-$HOME\u002F.sigma-cli\u002Fcache\u002Fopenapi.json}\"\n\n# step 2 gave: .method \"POST\", .path \"\u002Fv2\u002Fworkbooks\u002F{workbookId}\u002Fexport\"\njq '.paths.\"\u002Fv2\u002Fworkbooks\u002F{workbookId}\u002Fexport\".post.requestBody.content.\"application\u002Fjson\".schema' \"$SPEC\"\njq '.paths.\"\u002Fv2\u002Fworkbooks\u002F{workbookId}\u002Fexport\".post.responses.\"200\".content.\"application\u002Fjson\".schema' \"$SPEC\"\n```\n\n**Bodies routinely compose with `allOf` \u002F `oneOf`.** Required fields and the\naccepted variants are spread across branches, and a field is often an object\nwhere a scalar looks natural (export's `format` is `{\"type\":\"csv\"}`, not\n`\"csv\"`). Read every branch before composing a body — don't stop at the first\n`properties` block.\n\nIf the cache file is missing, any `sigma api …` call repopulates it — it's the\nCLI's own runtime source, and outranks every other copy, this skill included.\n\nResolution order is `$SIGMA_CLI_OPENAPI_SPEC`, then\n`~\u002F.sigma-cli\u002Fcache\u002Fopenapi.json`, then `assets.sigmacomputing.com`. On an\nair-gapped or proxied machine, download the spec once and point the variable at\nit. The cache TTL is 60s, so a stale schema is rarely the cause of a shape\nerror; `--refresh-spec` forces a redownload if you need to rule it out.\n\n## Global flags\n\n`-f json|table|yaml|csv` — default `json`. `table` handles both shapes (rows\nfor a list, flattened key\u002Fvalue for a single object); `csv` only makes sense\non a list. `-p \u003Cname>` selects a profile; omitted, the profile marked default\nis used — *except* `sigma auth login`, where omitting `-p` starts the\ncreate-a-new-profile flow instead. `--refresh-spec` forces a spec redownload.\nAny `--help` prints the current set.\n\n`--yaml` is **not** `-f yaml`: it asks the *server* for YAML\n(`Accept: application\u002Fyaml`) and exits 3 if the endpoint can't produce it,\nwhereas `-f yaml` renders locally and always works.\n\nOutput goes to stdout, so it pipes cleanly:\n\n```sh\nsigma api workbooks list | jq '.entries[].name'\nsigma api workbooks get --params '{\"workbookId\":\"\u003CYOUR_WORKBOOK_ID>\"}' > workbook.json\n```\n\n## Paginating list results\n\n`page` is a **cursor token, not an offset** — read `nextPage` off the response\nand pass it back verbatim. Incrementing an integer is the most expensive\nmistake on this surface: the call succeeds and silently re-serves the same\nrows, so you get duplicates and no error. Treat the token as opaque; don't\nparse, decode, or synthesize it.\n\n**Stop when `nextPage` is absent**, not on a count. `total` and `hasMore`\naren't on every endpoint, and where `total` is present it sometimes counts the\ncurrent page rather than the collection.\n\n```sh\nPAGE=''\nwhile :; do\n  P=$(jq -cn --arg p \"$PAGE\" '{limit:500} + (if $p == \"\" then {} else {page:$p} end)')\n  RESP=$(sigma api files list --params \"$P\")\n  jq -r '.entries[] | [.id, .name] | @tsv' \u003C\u003C\u003C\"$RESP\"\n  PAGE=$(jq -r '.nextPage \u002F\u002F empty' \u003C\u003C\u003C\"$RESP\")\n  [ -n \"$PAGE\" ] || break\ndone\n```\n\nCollections can be far larger than they look — a single connection's path list\ncan run to tens of thousands of entries. Bound any sweep you don't need in\nfull, and say so when you stop early rather than presenting a partial list as\ncomplete.\n\nUse the largest `limit` the endpoint accepts; over-large values are clamped\nrather than rejected, and shrinking `limit` only multiplies the call count —\nwhich is how a sweep runs into throttling (*Troubleshooting*).\n\n## Polling async jobs\n\nSome operations return a job handle you poll rather than a result you read\ndirectly. Read the response schema (*Discovery loop*, step 3) to find the\nreadiness signal before writing a deadline-bounded loop; the topical files\ncarry worked loops and per-operation traps for the ones they cover.\n\n**Hardcode the *in-progress* set, not the terminal set,** and treat everything\nelse as terminal. Status fields are open strings, so a value you haven't seen\nwould otherwise fall into the keep-waiting branch, burn the whole deadline, and\nget misreported as a timeout. When a job is terminal but carries no success or\nfailure marker, report it as indeterminate rather than picking a side.\n\n## Troubleshooting\n\nErrors print as structured JSON on stdout, with a colored label on stderr. Read\nthe matching entry before retrying — several of these get worse on a blind\nretry. Treat any code not listed as failure and surface stderr verbatim.\n\n| Code | Meaning |\n|------|---------|\n| 0 | Success — see *A call succeeds but the answer looks wrong* |\n| 1 | API error (HTTP 4xx\u002F5xx) — three entries below, by what the message says |\n| 2 | Authentication error |\n| 3 | Local validation error, raised before any request is sent; the message names the cause |\n| 4 | Transport, spec fetch, or a response the CLI couldn't parse |\n\n### `command not found: sigma`\n\nSigmaHQ ships an unrelated tool with the same binary name; when it's present\nHomebrew won't link Sigma's. If a command name from older docs fails instead,\nthe binary was renamed — it's `sigma` now.\n\n```sh\nbrew link --overwrite sigma-computing-cli\n```\n\n### Exit 1 with 403 Forbidden\n\nThe credential authenticated but isn't permitted for this operation. Check the\nrole on the credential and the resource-level grants\n([`reference\u002Fpermissions-and-sharing.md`](reference\u002Fpermissions-and-sharing.md)).\n\n### Exit 1 with a 400 — the body is wrong\n\nBodies are validated server-side, so a bad field lands here rather than on 3.\nRe-read the request body schema (*Discovery loop*, step 3) and compare it\nagainst what you sent, checking **every** `allOf` \u002F `oneOf` branch — required\nfields and accepted variants are spread across them. One automated retry with\nthe corrected shape, then stop and report.\n\n### Exit 1 with an HTML body — you're being throttled\n\nA wall of HTML where a `message` field belongs is an edge\u002Fchallenge page, not a\nmalformed request: you're sending too many requests too fast. The CLI has no\nbackoff of its own, so an immediate retry makes it worse. Stop the loop, report\nhow far it got, and raise the page `limit` before any resume.\n\n### Exit 2 — authentication error\n\nThe profile's credentials are missing, expired, or rejected.\n\n```sh\nsigma auth status 2>&1          # active profile, its type, whether it validates\nsigma auth login -p \u003Cprofile>   # refresh it\n```\n\nIf an API-key profile still fails after a refresh, re-issue the credential in\nSigma under **Administration → APIs & embed secrets**. If no profile is set at\nall, `sigma auth login` creates one and `sigma auth set-default \u003Cname>` selects\nan existing one.\n\n### Exit 4 — transport, spec fetch, or unparseable response\n\nUsually the spec download — on an air-gapped or proxied machine, pin a local\ncopy (*Discovery loop*, step 3). It also covers a 2xx whose body isn't JSON; the\nmessage says which, and neither case improves on a retry.\n\n### A call succeeds but the answer looks wrong\n\nUndeclared `--params` keys (*Calling convention*) or integer-incremented\npagination (*Paginating list results*). Check parameter names against\n`sigma api schema \u003Ccommand-path…>` first — it's the cheaper of the two.\n\n### Debug logging\n\n```sh\nSIGMA_CLI_LOG=sigma_cli=debug sigma api connections list   # to stderr\nSIGMA_CLI_LOG_FILE=\u002Ftmp sigma api connections list         # daily rotating files\n```\n",{"name":5,"description":7},"main","234c4c30e9d45319a33d2ef1a26cc89ad10aeb2a","skills\u002Fsigma-cli",8,"https:\u002F\u002Fgithub.com\u002Fsigmacomputing\u002Fsigma-agent-skills","https:\u002F\u002Fsigmacomputing.com","https:\u002F\u002Fgithub.com\u002Fsigmacomputing","2026-11-10 04:54:22",{"source":8,"skillName":5,"commands":53,"prompt":63,"zipAvailable":64},[54,57,60],{"tool":55,"command":56},"npx","npx skills add sigmacomputing\u002Fsigma-agent-skills --skill sigma-cli",{"tool":58,"command":59},"bunx","bunx skills add sigmacomputing\u002Fsigma-agent-skills --skill sigma-cli",{"tool":61,"command":62},"pnpm","pnpm dlx skills add sigmacomputing\u002Fsigma-agent-skills --skill sigma-cli","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fsigmacomputing\u002Fsigma-agent-skills\u002Fblob\u002Fmain\u002Fskills\u002Fsigma-cli\u002FSKILL.md",true,[66,72,76,80,84,88,92,96,100],{"path":67,"resourceType":68,"resourceTypeDesc":69,"sizeBytes":70,"sourceHtmlUrl":71},"reference\u002Fconnections-and-sources.md","REFERENCE","参考文档",5418,"https:\u002F\u002Fgithub.com\u002Fsigmacomputing\u002Fsigma-agent-skills\u002Fblob\u002Fmain\u002Fskills\u002Fsigma-cli\u002Freference\u002Fconnections-and-sources.md",{"path":73,"resourceType":68,"resourceTypeDesc":69,"sizeBytes":74,"sourceHtmlUrl":75},"reference\u002Fdata-model-authoring.md",3574,"https:\u002F\u002Fgithub.com\u002Fsigmacomputing\u002Fsigma-agent-skills\u002Fblob\u002Fmain\u002Fskills\u002Fsigma-cli\u002Freference\u002Fdata-model-authoring.md",{"path":77,"resourceType":68,"resourceTypeDesc":69,"sizeBytes":78,"sourceHtmlUrl":79},"reference\u002Fdelivery-and-schedules.md",6050,"https:\u002F\u002Fgithub.com\u002Fsigmacomputing\u002Fsigma-agent-skills\u002Fblob\u002Fmain\u002Fskills\u002Fsigma-cli\u002Freference\u002Fdelivery-and-schedules.md",{"path":81,"resourceType":68,"resourceTypeDesc":69,"sizeBytes":82,"sourceHtmlUrl":83},"reference\u002Ffiles-and-folders.md",4862,"https:\u002F\u002Fgithub.com\u002Fsigmacomputing\u002Fsigma-agent-skills\u002Fblob\u002Fmain\u002Fskills\u002Fsigma-cli\u002Freference\u002Ffiles-and-folders.md",{"path":85,"resourceType":68,"resourceTypeDesc":69,"sizeBytes":86,"sourceHtmlUrl":87},"reference\u002Fidentity-and-access.md",5050,"https:\u002F\u002Fgithub.com\u002Fsigmacomputing\u002Fsigma-agent-skills\u002Fblob\u002Fmain\u002Fskills\u002Fsigma-cli\u002Freference\u002Fidentity-and-access.md",{"path":89,"resourceType":68,"resourceTypeDesc":69,"sizeBytes":90,"sourceHtmlUrl":91},"reference\u002Fmaterializations.md",7017,"https:\u002F\u002Fgithub.com\u002Fsigmacomputing\u002Fsigma-agent-skills\u002Fblob\u002Fmain\u002Fskills\u002Fsigma-cli\u002Freference\u002Fmaterializations.md",{"path":93,"resourceType":68,"resourceTypeDesc":69,"sizeBytes":94,"sourceHtmlUrl":95},"reference\u002Fpermissions-and-sharing.md",8413,"https:\u002F\u002Fgithub.com\u002Fsigmacomputing\u002Fsigma-agent-skills\u002Fblob\u002Fmain\u002Fskills\u002Fsigma-cli\u002Freference\u002Fpermissions-and-sharing.md",{"path":97,"resourceType":68,"resourceTypeDesc":69,"sizeBytes":98,"sourceHtmlUrl":99},"reference\u002Ftenancy-and-deployments.md",6309,"https:\u002F\u002Fgithub.com\u002Fsigmacomputing\u002Fsigma-agent-skills\u002Fblob\u002Fmain\u002Fskills\u002Fsigma-cli\u002Freference\u002Ftenancy-and-deployments.md",{"path":101,"resourceType":68,"resourceTypeDesc":69,"sizeBytes":102,"sourceHtmlUrl":103},"reference\u002Fworkbook-authoring.md",7617,"https:\u002F\u002Fgithub.com\u002Fsigmacomputing\u002Fsigma-agent-skills\u002Fblob\u002Fmain\u002Fskills\u002Fsigma-cli\u002Freference\u002Fworkbook-authoring.md",[105,136,167,190,211,216],{"skillNo":106,"name":107,"nameZh":6,"description":108,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":109,"categories":110,"keywords":116,"publishedAt":39},"01M71RHSZVP0RQSQHX92K459NP","sigma-workbooks","Build, edit, and iterate on Sigma workbook specs — the JSON definition you send as `contents` in a POST to \u002Fv2\u002Fworkbooks, covering pages, layout, controls, charts, KPIs, tables, formulas, and sources. The Sigma OpenAPI is the source of truth for every shape and field; this skill adds navigation, style guidance, and proven recipes for effective dashboards and operational apps. Use when the user wants to construct a dashboard from a spec, generate a Sigma app (planning, approval, allocation, or exception), reproduce a screenshot\u002Fmockup\u002FClaude design artifact as a native Sigma app, add or modify pages \u002F elements \u002F controls \u002F formulas, validate a spec before submission, or work through the workbook spec lifecycle programmatically. Requires an SIGMA_API_TOKEN — obtain via the sigma-api skill first.","https:\u002F\u002Fgithub.com\u002Fsigmacomputing\u002Fsigma-agent-skills\u002Fblob\u002Fmain\u002Fskills\u002Fsigma-workbooks\u002FSKILL.md",[111],{"categoryNo":112,"categoryName":113,"taxonomyType":114,"taxonomyTypeDesc":115},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[117,20,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135],"sigma workbooks","design","modify","allocation","generate","screenshot","send","definition","Charts","edit","artifact","as","for","app","recipes","apps","you","formulas","tables",{"skillNo":137,"name":138,"nameZh":6,"description":139,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":140,"categories":141,"keywords":150,"publishedAt":39},"01M71RHDYSG56QM7R693SGWG8V","sigma-reports","Build, validate, retrieve, and safely update Sigma report code representations through \u002Fv2\u002Freports. Use for fixed-layout or pixel-perfect reports, executive board packets, wide operational tables, invoices, statements, regulatory documents, and PDF delivery. Covers reusable report scaffolds, report pages, absolute pixel layout, header\u002Ffooter panels, common elements, verification, full-contents replacement, and workbook conversion to reports. Do not use for responsive dashboards; use sigma-workbooks instead. Requires SIGMA_API_TOKEN from the sigma-api skill.","https:\u002F\u002Fgithub.com\u002Fsigmacomputing\u002Fsigma-agent-skills\u002Fblob\u002Fmain\u002Fskills\u002Fsigma-reports\u002FSKILL.md",[142,145],{"categoryNo":143,"categoryName":144,"taxonomyType":114,"taxonomyTypeDesc":115},"01JBSEEDCAT000000000000002","文档处理",{"categoryNo":146,"categoryName":147,"taxonomyType":148,"taxonomyTypeDesc":149},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[151,152,20,37,153,154,155,156,157,158,28,159,160,161,162,135,163,164,165,166],"sigma reports","reports","dashboards","common","conversion","code","pixel","delivery","token","responsive","layout","panels","update","documents","PDF","verification",{"skillNo":168,"name":169,"nameZh":6,"description":170,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":171,"categories":172,"keywords":176,"publishedAt":39},"01M71RH9RGX6RKXJW8E0ENZJFJ","sigma-data-models","Create, retrieve, or modify a Sigma data model spec (the JSON\u002FYAML semantic-layer definition with sources, columns, metrics, relationships, filters, controls, folder groupings, and column-level security) by calling the Sigma REST API directly. Use when the user wants to author a new data model from a description, export\u002Finspect\u002Fdownload an existing model's spec, edit columns or metrics, change a model's source, add relationships or row-level filters, or otherwise round-trip a data model through code. Requires an SIGMA_API_TOKEN — obtain via the sigma-api skill first.","https:\u002F\u002Fgithub.com\u002Fsigmacomputing\u002Fsigma-agent-skills\u002Fblob\u002Fmain\u002Fskills\u002Fsigma-data-models\u002FSKILL.md",[173],{"categoryNo":174,"categoryName":175,"taxonomyType":148,"taxonomyTypeDesc":149},"01JBSEEDCAT000000000000033","数据分析师",[177,178,20,179,37,156,180,181,182,183,184,24,124,185,186,187,159,188,189,126],"sigma data models","models","data","create","change","model","layer","new","inspect","columns","sources","filters","export",{"skillNo":191,"name":192,"nameZh":6,"description":193,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":194,"categories":195,"keywords":200,"publishedAt":39},"01M71RH1VNAXTYYYV9DKV057A4","sigma-api","Authenticate against the Sigma Computing REST API and obtain a bearer token. Use whenever the user wants to call the Sigma API directly with curl\u002FHTTP, exchange OAuth client credentials for an access token, sign in interactively via a browser OAuth login (authorization-code + PKCE), configure SIGMA_BASE_URL \u002F SIGMA_CLIENT_ID \u002F SIGMA_CLIENT_SECRET, troubleshoot 401\u002F403 responses, or pick the right Sigma API hostname for their cloud. Use as a prerequisite when another Sigma skill needs an SIGMA_API_TOKEN.","https:\u002F\u002Fgithub.com\u002Fsigmacomputing\u002Fsigma-agent-skills\u002Fblob\u002Fmain\u002Fskills\u002Fsigma-api\u002FSKILL.md",[196,199],{"categoryNo":197,"categoryName":198,"taxonomyType":114,"taxonomyTypeDesc":115},"01JBSEEDCAT000000000000010","后端与接口",{"categoryNo":146,"categoryName":147,"taxonomyType":148,"taxonomyTypeDesc":149},[201,20,37,202,24,203,23,204,205,129,25,206,207,128,159,208,36,209,156,210],"sigma api","troubleshoot","credentials","responses","secret","URL","hostname","pick","access","browser",{"skillNo":212,"name":107,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":213,"categories":214,"keywords":215,"publishedAt":39},"01M71RGZTNJ2YQJTZ57BARBYM6","https:\u002F\u002Fgithub.com\u002Fsigmacomputing\u002Fsigma-agent-skills\u002Fblob\u002Fmain\u002F.cortex\u002Fskills\u002Fsigma-workbooks\u002FSKILL.md",[],[117,20],{"skillNo":217,"name":138,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":218,"categories":219,"keywords":220,"publishedAt":39},"01M71RGY6ZWV700RA2XCJDK912","https:\u002F\u002Fgithub.com\u002Fsigmacomputing\u002Fsigma-agent-skills\u002Fblob\u002Fmain\u002F.cortex\u002Fskills\u002Fsigma-reports\u002FSKILL.md",[],[152,20,151]]