Skip to content

Commit 076388f

Browse files
committed
document new commands
1 parent f47a796 commit 076388f

3 files changed

Lines changed: 182 additions & 63 deletions

File tree

command_tree.txt

Lines changed: 32 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -54,33 +54,34 @@ sodacli
5454
│ │ # returns datasource ID + discovery scan ID
5555
│ │ # after success, suggests next steps: sodacli datasource onboard <id> or sodacli dataset onboard <dataset-id>
5656
│ │
57-
│ ├── test-connection <config-file> # test connection via Soda Runner (async poll) 🔌 [CLI wired, API returns HTML]
57+
│ ├── test-connection <config-file> # test connection via Soda Runner (async poll)
5858
│ │ [--runner <runner-id>] # route through a specific runner (auto-detects if only one)
5959
│ │
6060
│ ├── list # list datasources ✅
6161
│ │
6262
│ ├── get <id> # show datasource details ✅
6363
│ │
64-
│ ├── update <id> # update a datasource 🔌 [CLI wired, API returns 404]
64+
│ ├── update <id> # update a datasource
6565
│ │ [--label <text>] # new label
6666
│ │ [--runner <runner-id>] # change runner
6767
│ │ [--config <file>] # update connection config
6868
│ │
69-
│ ├── diagnostics <id> # view or configure diagnostics warehouse
69+
│ ├── diagnostics <id> # view or configure diagnostics warehouse
7070
│ [--enable|--disable] # toggle diagnostics warehouse on/off
7171
│ [--warehouse same|<config-file>] # reuse datasource connection or provide a separate config
72-
│ [--schema <name>] # schema for diagnostic tables (default: soda_diagnostics)
73-
│ [--collect-results] # store check results and scan history
74-
│ [--no-collect-results]
75-
│ [--collect-failed-rows] # store failed rows
76-
│ [--no-collect-failed-rows]
77-
│ [--table-prefix <prefix>] # prefix for diagnostic table names
78-
│ [--table-suffix <suffix>] # suffix for diagnostic table names
79-
│ [--failed-rows-description <text>] # description shown in Cloud for failed rows storage context
80-
│ [--expose-failed-rows-query] # expose the failed rows SQL query in Cloud
81-
│ [--no-expose-failed-rows-query]
82-
│ [--failed-rows-cta] # show a call-to-action link to where failed rows can be found
83-
│ [--no-failed-rows-cta]
72+
│ [--table-template <tpl>] # table name template (e.g. {dataset_name})
73+
│ [--collect-results|--no-collect-results] # store check results and scan history
74+
│ [--collect-failed-rows|--no-collect-failed-rows] # store failed rows
75+
│ [--expose-failed-rows-query|--no-expose-failed-rows-query]
76+
│ [--max-failed-rows <n>] # max failed rows to store
77+
│ [--failed-rows-location <text>] # message about where failed rows can be found
78+
│ [--failed-rows-cta|--no-failed-rows-cta] # enable/disable CTA button in Cloud
79+
│ [--failed-rows-cta-title <text>] # CTA button title
80+
│ [--failed-rows-cta-url <url>] # CTA button URL
81+
│ [--failed-rows-strategy <type>] # useDefaultMaxRowCount|absolute|percentage
82+
│ [--failed-rows-threshold <n>] # threshold value (required for absolute|percentage, >= 1)
83+
│ [--failed-rows-threshold-condition <cond>] # greaterThan|lessThan (default: greaterThan)
84+
│ # uses read-modify-write: fetches current config, applies changes, posts back
8485
│ └── test-connection <id> # test the diagnostics warehouse connection ❌
8586
8687
│ └── delete <id> ✅
@@ -135,6 +136,7 @@ sodacli
135136
│ │ # sc_abc123 pg_prod orders contract ✗ failing 2026-03-05 08:12
136137
│ │ # sc_def456 pg_prod users monitor ✓ passing 2026-03-05 06:45
137138
│ │
139+
│ ├── status <id> # show scan/job status, checks, timing ✅
138140
│ ├── logs <id> [--follow] ✅
139141
│ └── cancel <id> # cancel a running scan 🔌 [CLI wired, API returns 404]
140142
@@ -166,6 +168,8 @@ sodacli
166168
│ │ # --owner takes a user ID (use `sodacli iam user list` to find it)
167169
│ ├── delete <id> ✅
168170
│ │
171+
│ ├── attributes <id> # list dataset attributes 🔌 [CLI wired, API documented but returns HTML on dev]
172+
│ │
169173
│ ├── time-partition <id> --column <col> ✅
170174
│ │ # affects both profiling and metric monitoring (anomaly detection window)
171175
│ │ # no --column → view current partition column (via GET /datasets/{id})
@@ -180,13 +184,6 @@ sodacli
180184
│ │ # no flags → show current settings (GET /api/v1/datasets/{id}/diagnosticsWarehouse)
181185
│ │ [--collect-results|--no-collect-results] # store check results and scan history ✅
182186
│ │ [--collect-failed-rows|--no-collect-failed-rows] ✅
183-
│ │ # flags below accepted but not yet in public API (silently ignored):
184-
│ │ [--schema <name>] ❌
185-
│ │ [--table-prefix <prefix>] ❌
186-
│ │ [--table-suffix <suffix>] ❌
187-
│ │ [--failed-rows-description <text>] ❌
188-
│ │ [--expose-failed-rows-query|--no-expose-failed-rows-query] ❌
189-
│ │ [--failed-rows-cta|--no-failed-rows-cta] ❌
190187
│ │
191188
│ ├── onboard <id> # guided setup for an existing dataset ✅
192189
│ │ [--monitoring] # enable default metric monitors ✅
@@ -246,9 +243,9 @@ sodacli
246243
│ # looks up monitor type from dataset config, then calls appropriate DELETE
247244
248245
├── incident
249-
│ ├── list [--status reported|investigating|fixing|resolved] [--dataset <id>] 🔌 [CLI wired, API returns HTML]
250-
│ ├── get <id> 🔌 [CLI wired, API returns HTML]
251-
│ └── update <id> 🔌 [CLI wired, API returns HTML]
246+
│ ├── list [--status reported|investigating|fixing|resolved] [--dataset <id>] 🔌 [CLI wired, API documented but returns HTML on dev]
247+
│ ├── get <id> 🔌
248+
│ └── update <id> 🔌
252249
│ [--title <text>]
253250
│ [--severity minor|major|critical]
254251
│ [--description <text>]
@@ -299,7 +296,7 @@ sodacli
299296
│ │
300297
│ ├── user
301298
│ │ ├── list ✅
302-
│ │ ├── invite --email <email> # invite user to org
299+
│ │ ├── invite --email <email> # invite user to org (repeatable, max 10) ✅
303300
│ │ ├── remove <user-id> # remove user from org ❌
304301
│ │ ├── assign <user-id> --role <role-id> ❌
305302
│ │ └── revoke <user-id> --role <role-id> ❌
@@ -326,8 +323,14 @@ sodacli
326323
│ └── delete <runner-id> ✅
327324
328325
├── secret
329-
│ ├── create --name <n> --value <v> ❌ [NOT YET IMPLEMENTABLE - API work required]
330-
│ ├── update <id> --value <v> ❌
331-
│ └── delete <id> ❌
326+
│ ├── list # list all secrets ✅
327+
│ ├── get <id> # show secret details ✅
328+
│ ├── create --name <n> [--value <v>] ✅
329+
│ │ # value encrypted client-side (AES-256-GCM + RSA-OAEP) before sending
330+
│ │ # --value omitted → masked interactive prompt (or pipe via stdin)
331+
│ │ # reference in configs: ${secret.NAME}
332+
│ ├── update <id> [--value <v>] ✅
333+
│ │ # same input methods as create: --value flag, stdin pipe, or masked prompt
334+
│ └── delete <id> ✅
332335
333336
└── completion bash|zsh|fish 🏠

skills/soda-cli/SKILL.md

Lines changed: 68 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
---
22
name: soda-cli
3-
description: How to use the Soda CLI for data quality management — authentication, datasources, datasets, contracts, monitors, results, permissions, and CI/CD integration. Use when working with Soda, data quality, or the sodacli command.
3+
description: How to use the Soda CLI for data quality management — authentication, datasources, datasets, contracts, monitors, results, secrets, permissions, and CI/CD integration. Use when working with Soda, data quality, or the sodacli command.
44
allowed-tools: Read, Bash(sodacli *), Bash(cat *), Glob, Grep
55
---
66

@@ -16,22 +16,21 @@ When calling `sodacli` from an agent, **always pass `--output json`** to get str
1616

1717
**Fully working (tested against live API):**
1818
- `auth` — login, logout, status, switch profiles
19-
- `datasource` — list, get, create, delete, onboard (full wizard)
20-
- `dataset` — list (with filters), update, profiling, diagnostics, permissions, onboard
19+
- `datasource` — list, get, create, update, delete, onboard (full wizard), test-connection, diagnostics
20+
- `dataset` — list (with filters), get, update, profiling, diagnostics, permissions, onboard
2121
- `contract` — list, push, pull, diff, lint (JSON schema validation), create (skeleton/copilot), verify (cloud or local via soda-core)
2222
- `monitor` — list, config, add (column/custom), update, delete
2323
- `results` — list (with all filters, sorting, date ranges)
24-
- `job` — logs
25-
- `runner` — list, create (returns API keys for Kubernetes deployment)
26-
- `iam` — user list, group CRUD, role list
24+
- `job` — status, logs
25+
- `runner` — list, get, create (returns API keys for Kubernetes deployment), delete
26+
- `iam` — user list, user invite, group CRUD, role list
27+
- `secret` — list, get, create, update, delete (client-side encrypted with AES-256-GCM + RSA-OAEP)
2728

2829
**Not yet available (API blocked):**
29-
- `incident` — list, get, update (API returns HTML)
30+
- `incident` — list, get, update (documented in OpenAPI spec but still returns HTML on dev)
31+
- `dataset attributes` — (documented in OpenAPI spec but still returns HTML on dev)
3032
- `notification` — rules and integrations
31-
- `secret` — CRUD
3233
- `job list`, `job cancel`
33-
- `dataset get` (API returns HTML instead of JSON)
34-
- `datasource update`, `datasource test-connection`
3534
- `contract proposal` — list, pull, push, close
3635
- `monitor add --type dataset` (dataset monitors exist by default, no write endpoint)
3736

@@ -69,18 +68,21 @@ Credentials stored in `~/.soda/credentials`. Generate API keys at https://docs.s
6968
# List datasources
7069
sodacli datasource list --output json
7170

71+
# Get datasource details
72+
sodacli datasource get <id> --output json
73+
7274
# List datasets (default limit: 10)
7375
sodacli dataset list --output json
7476
sodacli dataset list --datasource <name> --status onboarded --limit 50 --output json
7577

7678
# Filter datasets by name, date range, tag
7779
sodacli dataset list --filter "orders" --from 2026-01-01 --until 2026-12-31 --output json
7880

81+
# Get dataset details
82+
sodacli dataset get <dataset-id> --output json
83+
7984
# View profiling data (column stats, row count, missing %)
8085
sodacli dataset profiling <dataset-id> --output json
81-
82-
# NOTE: `sodacli dataset get <id>` is NOT available yet (API returns HTML).
83-
# Use `dataset list` with filters to find dataset details instead.
8486
```
8587

8688
### Onboard a datasource (end-to-end)
@@ -232,14 +234,64 @@ sodacli iam group update <id> --remove-member bob@co.com
232234
sodacli iam group delete <id>
233235
```
234236

235-
### Job logs
237+
### Jobs (scan status & logs)
236238

237239
```bash
240+
# Check scan/job status (shows state, timing, check summary)
241+
sodacli job status <scan-id> --output json
242+
243+
# View logs
238244
sodacli job logs <scan-id>
239245
sodacli job logs <scan-id> --follow # stream live
240246
```
241247

242-
### Profiling and diagnostics
248+
### Secrets (encrypted credentials)
249+
250+
```bash
251+
# List secrets
252+
sodacli secret list --output json
253+
254+
# Create — value is encrypted client-side (AES-256-GCM + RSA-OAEP) before sending
255+
sodacli secret create --name DB_PASSWORD # masked interactive prompt
256+
sodacli secret create --name DB_PASSWORD --value "s3cret" # via flag
257+
echo "s3cret" | sodacli secret create --name DB_PASSWORD # via stdin pipe
258+
259+
# Update value
260+
sodacli secret update <id> # masked prompt
261+
sodacli secret update <id> --value "new-value" # via flag
262+
263+
# Delete
264+
sodacli secret delete <id>
265+
266+
# Reference in datasource configs: ${secret.DB_PASSWORD}
267+
```
268+
269+
### User invite
270+
271+
```bash
272+
sodacli iam user invite --email alice@co.com --email bob@co.com # up to 10 per call
273+
```
274+
275+
### Datasource connection & diagnostics
276+
277+
```bash
278+
# Test a datasource connection (async via Runner)
279+
sodacli datasource test-connection config.yml
280+
281+
# Update datasource label, runner, or connection
282+
sodacli datasource update <id> --label "Production DW"
283+
284+
# View diagnostics warehouse config
285+
sodacli datasource diagnostics <id>
286+
287+
# Configure diagnostics warehouse
288+
sodacli datasource diagnostics <id> --enable --warehouse same --collect-results --collect-failed-rows
289+
sodacli datasource diagnostics <id> --max-failed-rows 5000 --expose-failed-rows-query
290+
sodacli datasource diagnostics <id> --table-template "soda_{dataset_name}"
291+
sodacli datasource diagnostics <id> --failed-rows-cta --failed-rows-cta-title "View in Snowflake" --failed-rows-cta-url "https://app.snowflake.com"
292+
```
293+
294+
### Profiling and dataset diagnostics
243295

244296
```bash
245297
# Enable profiling
@@ -251,7 +303,7 @@ sodacli dataset profiling <dataset-id> --output json
251303
# Set time-partition column
252304
sodacli dataset time-partition <dataset-id> --column created_at
253305

254-
# Configure diagnostics
306+
# Configure dataset-level diagnostics overrides
255307
sodacli dataset diagnostics <dataset-id> --collect-results --collect-failed-rows
256308
```
257309

0 commit comments

Comments
 (0)