cargo-storage
Work with the data inside a Cargo workspace — models (Companies, Contacts, Deals…), datasets, columns, relationships, records, and SQL over workspace storage. Triggers: "what models do I have", "show me the schema", "add a column for", "how many contacts do I have", "SELECT … FROM", "query my companies table", "join contacts to companies", "what is the DDL", "set up a webhook-fed model", "where does this field live", "import this into a model", "unify these models", "merge duplicate accounts", "link contacts to companies", "set up a relationship between". Skip when: querying run or batch telemetry rather than business data — use cargo-orchestration; naming a reusable filtered audience — use cargo-segmentation.
Rank
62
Safety
84
Downloads
1.3k
Updated
Oct 10, 2026
Version
1.2.3
Source
CLAWHUB
About
What it does, and when to use it.
Capability contract not published. No trust telemetry is available yet. 1.3K downloads reported by the source. Last updated 10/10/2026.
Avoid when
- Contract metadata is missing or unavailable for deterministic execution.
Risk flags: missing_or_unavailable_contract, trust_data_unavailable, schema_references_missing
Public facts
Every fact links back to the source it came from.
- Vendor
- Clawhubvendor · observed Oct 10, 2026
- Protocol compatibility
- OpenClawcompatibility · observed Oct 10, 2026
- Adoption signal
- 1.3K downloadsadoption · observed Oct 10, 2026
- Latest release
- 1.2.3release · observed Sep 24, 2026
- Handshake status
- UNKNOWNsecurity
Install and run
Setup complexity: low.
clawhub skill install s178dcd9wkfn0a2fqrygmt3jzn87j9e1:cargo-storage- Install using `clawhub skill install s178dcd9wkfn0a2fqrygmt3jzn87j9e1:cargo-storage` in an isolated environment before connecting it to live workloads.
- No published capability contract is available yet, so validate auth and request/response behavior manually.
- Review the upstream CLAWHUB listing at https://clawhub.ai/cargo-ai/cargo-storage before using production credentials.
Contract: missing
curl -s "https://www.xpersona.co/api/v1/agents/clawhub-cargo-ai-cargo-storage/snapshot"
Documentation
CLAWHUB
147,039 characters of source documentation, loaded on request.
Extracted files
5 files captured from the source.
SKILL.md
---
name: cargo-storage
description: "Work with the data inside a Cargo workspace — models (Companies, Contacts, Deals…), datasets, columns, relationships, records, and SQL over workspace storage. Triggers: \"what models do I have\", \"show me the schema\", \"add a column for\", \"how many contacts do I have\", \"SELECT … FROM\", \"query my companies table\", \"join contacts to companies\", \"what is the DDL\", \"set up a webhook-fed model\", \"where does this field live\", \"import this into a model\", \"unify these models\", \"merge duplicate accounts\", \"link contacts to companies\", \"set up a relationship between\". Skip when: querying run or batch telemetry rather than business data — use cargo-orchestration; naming a reusable filtered audience — use cargo-segmentation."
version: "1.2.3"
compatibility: Requires @cargo-ai/cli (npm). Sign in or create an account with `cargo-ai login --email` (emailed code, no browser), `--oauth`, or an API token
homepage: https://github.com/getcargohq/cargo-skills
metadata:
author: getcargo
openclaw:
requires:
bins:
- cargo-ai
install:
- kind: node
package: "@cargo-ai/cli@latest"
bins:
- cargo-ai
homepage: https://github.com/getcargohq/cargo-skills
---
# Cargo CLI — Storage
Data layer management: inspecting and modifying models, datasets, columns, relationships, unification, and records, and running SQL queries against workspace storage.
> See `references/response-shapes.md` for full JSON response structures.
> See `references/troubleshooting.md` for common errors and how to fix them.
> See `references/examples/models.md` for model CRUD, DDL inspection, and schema discovery examples.
> See `references/examples/datasets.md` for dataset listing and navigation examples.
> See `references/examples/columns.md` for column creation and management examples.
> See `references/examples/queries.md` for `storage query execute` / `storage query download` SQL examples (WHERE, aggregations, joins, pagination, exports).
> See `references/examples/ingest-webhook.md` for ingest (webhook-fed) models — deriving the webhook URL and POSTing records.
## Bootstrap
Already signed in (`cargo-ai whoami` returns a workspace)? Skip to the next section.
```bash
npm install -g @cargo-ai/cli # no global install? prefix every command with `npx @cargo-ai/cli`
cargo-ai login --email [email protected] # emailed code, no browser; creates the account on first use
# alternatives: --oauth (browser) · --token <api-token> (CI)
cargo-ai whoami # confirm the active workspace before any write
```
Every command prints JSON to stdout; failures exit non-zero with `{"errorMessage": "..."}`. Anything that creates a run or a batch is async — pass `--wait-until-finished` or poll the matching `get`. When the full skill bundle is installed, [`../cargo/references/prerequisites.md`](../cargo/references/prerequisites.md) ad_meta.json
{
"ownerId": "kn7by8t6yt9yghbxtxz6hv0bts87k6bq",
"slug": "cargo-storage",
"version": "1.2.3",
"publishedAt": 1790278850493
}references/examples/columns.md
# Column examples
## List columns for a model
```bash
cargo-ai storage column list --model-uuid <uuid>
```
Response includes `uuid`, `slug`, `type`, `label`, and `position` for each column.
## Create a string column
```bash
cargo-ai storage column create \
--model-uuid <uuid> \
--column '{"slug":"website_url","type":"string","label":"Website URL","kind":"custom"}'
```
## Create a number column
```bash
cargo-ai storage column create \
--model-uuid <uuid> \
--column '{"slug":"arr","type":"number","label":"Annual Recurring Revenue","kind":"custom"}'
```
## Create a date column
```bash
cargo-ai storage column create \
--model-uuid <uuid> \
--column '{"slug":"last_contacted_at","type":"date","label":"Last Contacted At","kind":"custom"}'
```
## Create a boolean column
```bash
cargo-ai storage column create \
--model-uuid <uuid> \
--column '{"slug":"is_customer","type":"boolean","label":"Is Customer","kind":"custom"}'
```
## Create a computed column
Computed columns derive their value from an expression over other columns.
```bash
cargo-ai storage column create \
--model-uuid <uuid> \
--column '{"slug":"full_name","type":"string","label":"Full Name","kind":"computed","expression":{"kind":"jsExpression","expression":"{{record.first_name}} {{record.last_name}}","instructTo":"none","fromRecipe":false},"columnsUsed":["first_name","last_name"]}'
```
`columnsUsed` is optional but recommended for dependency tracking.
## Create a metric column
Metric columns aggregate data from a related model via a relationship.
```bash
cargo-ai storage column create \
--model-uuid <uuid> \
--column '{"slug":"total_deals","type":"number","label":"Total Deals","kind":"metric","relationshipUuid":"<relationship-uuid>","aggregation":{"function":"count","columnSlug":"uuid"}}'
```
With an optional filter:
```bash
cargo-ai storage column create \
--model-uuid <uuid> \
--column '{"slug":"open_deals","type":"number","label":"Open Deals","kind":"metric","relationshipUuid":"<relationship-uuid>","aggregation":{"function":"count","columnSlug":"uuid"},"filter":{"conjonction":"and","groups":[{"conjonction":"and","conditions":[{"kind":"string","slug":"status","operator":"is","value":"open"}]}]}}'
```
## Create a lookup column
Lookup columns pull a field value from a related model via a join.
```bash
cargo-ai storage column create \
--model-uuid <uuid> \
--column '{"slug":"company_name","type":"string","label":"Company Name","kind":"lookup","join":{"toModelUuid":"<company-model-uuid>","fromColumnSlug":"company_uuid","toColumnSlug":"uuid"},"extractColumnSlug":"name"}'
```
With an optional filter:
```bash
cargo-ai storage column create \
--model-uuid <uuid> \
--column '{"slug":"primary_contact_email","type":"string","label":"Primary Contact Email","kind":"lookup","join":{"toModelUuid":"<contacts-model-uuid>","fromColumnSlug":"uuid","toColumnSlug":"company_uuid"},"extractColumnSlug":"email","filter":{"conjonction":"and","groups":[{"conjreferences/examples/datasets.md
# Dataset examples
## List all datasets
Datasets group related models together.
```bash
cargo-ai storage dataset list
```
Response includes `uuid`, `name`, and `slug` for each dataset.
## Get a specific dataset
```bash
cargo-ai storage dataset get <dataset-uuid>
```
## List models in a dataset
`storage model list` takes **no options** — it always returns every model in the
workspace. Each one carries a `datasetUuid`, so narrow it client-side:
```bash
cargo-ai storage model list | jq '[.models[] | select(.datasetUuid == "<dataset-uuid>")]'
```
## Discover workspace data structure
Full flow to understand how data is organized:
```bash
# 1. List all datasets
cargo-ai storage dataset list
# → Note the dataset UUIDs and slugs
# 2. Group the models by dataset (one call — `model list` has no filter flag)
cargo-ai storage model list | jq 'group_by(.datasetUuid) | map({datasetUuid: .[0].datasetUuid, models: map(.slug)})'
# → See which models (tables) belong to each dataset
# 3. Inspect a model's columns
cargo-ai storage model get <model-uuid>
# → See column slugs and types for each model
```
The dataset `slug` appears in DDL table names (e.g. `datasets_default` for the dataset with slug `default`).references/examples/ingest-webhook.md
# Ingest models — get the webhook URL and POST records
Some models are fed by **pushing** records to Cargo instead of Cargo pulling them.
Their extractor has `mode.kind === "ingest"` — the canonical one is the `http`
integration's `listenHook` ("Listen webhook"), but the same mechanism backs
`storeleads.listenList`, `rb2b.listenProfiles`, `albacross.listenWebsiteVisits`,
and others.
The app shows a **Webhook URL** on the model's settings screen. There is **no CLI
command and no API field that returns it** — the app builds the string client-side.
You can build the exact same string from data the CLI already exposes.
## The URL
```
<baseUrl>/v1/models/<model-uuid>/records/ingest?token=<api-token>
```
- `<baseUrl>` — `cargo-ai whoami` → `.baseUrl` (e.g. `https://api.getcargo.io`).
Note the path is `/v1/models/...`, **not** `/v1/storage/models/...`.
- `<model-uuid>` — the ingest model's UUID.
- `<api-token>` — any workspace API token. The token may carry **zero
permissions**; this route is explicitly allowed for permission-less tokens so
the URL can be handed to a third-party system safely. The app auto-creates one
named `Quick access` for exactly this.
`token` can also be sent as an `Authorization: Basic <token>` header instead of a
query param — preferable when the receiving system supports custom headers, since
a query param lands in logs.
## Derive it
```bash
# 1. Find the model and confirm it is an ingest model
cargo-ai storage model get <model-uuid> | jq '{uuid, slug, extractorSlug, kind, connectorUuid}'
# 2. Confirm the extractor's mode is "ingest" (and NOT autoIngest — see below)
cargo-ai connection integration get http | jq -c '.integration.extractors.listenHook.mode'
# → {"kind":"ingest"}
# 3. Pick or create a token (the raw value is on the list response)
cargo-ai workspaceManagement token list | jq -r '.tokens[0].token'
cargo-ai workspaceManagement token create --name "Webhook — <model-slug>" | jq -r '.token.token'
```
One-liner that assembles it:
```bash
MODEL_UUID=<model-uuid>
BASE=$(cargo-ai whoami | jq -r '.baseUrl')
TOKEN=$(cargo-ai workspaceManagement token list | jq -r '.tokens[0].token')
echo "$BASE/v1/models/$MODEL_UUID/records/ingest?token=$TOKEN"
```
> Token values are secrets. Print the URL for the user to copy; don't write it
> into a file, a commit, or a report.
## Skip models where Cargo owns the hook
Some ingest extractors set `autoIngest: true` — Cargo registers the webhook with
the provider itself during setup (calendly, smartlead, instantlyV2, heyReach,
and cargo's own signal extractors). The app **hides** the URL for
those, and handing it out is wrong: the provider is already pointed at it.
Check before showing anything:
```bash
cargo-ai connection integration get <integration-slug> \
| jq -c '.integration.extractors["<extractor-slug>"].mode'
# {"kind":"ingest"} → manual: show the URL
# {"kind":"ingest","autoIngest":true} → Cargo owns it: don't show the URL
# anything else AionUi
Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!
activepieces
AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents
cherry-studio
AI productivity studio with smart chat, autonomous agents, and 300+ assistants.
CopilotKit
The Frontend for Agents & Generative UI. React + Angular
Machine-readable data
The same record, as JSON, for agents and crawlers.
{
"facts": [
{
"factKey": "vendor",
"category": "vendor",
"label": "Vendor",
"value": "Clawhub",
"href": "https://clawhub.ai/cargo-ai/skills/cargo-storage",
"sourceUrl": "https://clawhub.ai/cargo-ai/skills/cargo-storage",
"sourceType": "profile",
"confidence": "medium",
"observedAt": "2026-10-10T16:51:36.500Z",
"isPublic": true
},
{
"factKey": "protocols",
"category": "compatibility",
"label": "Protocol compatibility",
"value": "OpenClaw",
"href": "https://www.xpersona.co/api/v1/agents/clawhub-cargo-ai-cargo-storage/contract",
"sourceUrl": "https://www.xpersona.co/api/v1/agents/clawhub-cargo-ai-cargo-storage/contract",
"sourceType": "contract",
"confidence": "medium",
"observedAt": "2026-10-10T16:51:36.500Z",
"isPublic": true
},
{
"factKey": "traction",
"category": "adoption",
"label": "Adoption signal",
"value": "1.3K downloads",
"href": "https://clawhub.ai/cargo-ai/cargo-storage",
"sourceUrl": "https://clawhub.ai/cargo-ai/cargo-storage",
"sourceType": "profile",
"confidence": "medium",
"observedAt": "2026-10-10T16:51:36.500Z",
"isPublic": true
},
{
"factKey": "latest_release",
"category": "release",
"label": "Latest release",
"value": "1.2.3",
"href": "https://clawhub.ai/cargo-ai/cargo-storage",
"sourceUrl": "https://clawhub.ai/cargo-ai/cargo-storage",
"sourceType": "release",
"confidence": "medium",
"observedAt": "2026-09-24T19:40:50.493Z",
"isPublic": true
},
{
"factKey": "handshake_status",
"category": "security",
"label": "Handshake status",
"value": "UNKNOWN",
"href": "https://www.xpersona.co/api/v1/agents/clawhub-cargo-ai-cargo-storage/trust",
"sourceUrl": "https://www.xpersona.co/api/v1/agents/clawhub-cargo-ai-cargo-storage/trust",
"sourceType": "trust",
"confidence": "medium",
"observedAt": null,
"isPublic": true
}
],
"events": [
{
"eventType": "release",
"title": "Release 1.2.3",
"description": "cargo-storage 1.2.3 - Updated documentation in SKILL.md with clarified guidance on webhook usage for ingest models. - Added explicit note that webhooks are not for workflows; recommended using native actions for internal Cargo workflows. - Removed the obsolete skill-card.md file.",
"href": "https://clawhub.ai/cargo-ai/cargo-storage",
"sourceUrl": "https://clawhub.ai/cargo-ai/cargo-storage",
"sourceType": "release",
"confidence": "medium",
"observedAt": "2026-09-24T19:40:50.493Z",
"isPublic": true
}
]
}Record generated Oct 10, 2026.
