@seclai/cli 1.4.0 → 1.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md ADDED
@@ -0,0 +1,168 @@
1
+ # Changelog
2
+
3
+ ## [1.5.0] - 2026-08-06
4
+
5
+ ### Changed
6
+
7
+ - Require `--step-type` on `agents ai history`. The API marks the parameter required and the command had no way to supply it, so every call answered 422 — the command could not succeed before and the requirement breaks nothing. `--step-id`, `--limit` and `--offset` are now accepted as well
8
+ - Deprecate `agents runs delete`. It never deleted anything — the endpoint it calls is the cancel endpoint, and the API has no delete-a-run operation — so it now warns on stderr and cancels. stdout stays `{"ok": true}`; use `agents runs cancel`, which prints the cancelled run
9
+ - Reject a `--page`, `--limit` or `--offset` that is not a non-negative whole number at parse time, instead of sending `NaN` and reporting the server's 422. Hex and exponent literals are rejected too: `--limit 0x10` used to be read as 16
10
+ - Split the installed skill into a short index plus per-domain references, so an agent loads a command map rather than every command. `skills install` now writes 12 files instead of 4, and the set is discovered from disk rather than hard-coded
11
+ - Generate the shell completion scripts from the command tree rather than three hand-maintained copies, so every command is offered at every depth in bash, zsh and fish
12
+ - Reject an empty `--api-key`, `--profile`, `--account-id` or `--config-dir` when a command builds a client, rather than for every command — `completion`, `skills install`, `mcp show` and `configure` resolve no identity and are unaffected
13
+ - Require `@seclai/sdk` 1.5.0
14
+
15
+ ### Added
16
+
17
+ - Add an `--api-version <date>` global option, sent as the `Seclai-Version` header, opting into dated API changes released on or before that date. Omitted by default, so upgrading the CLI alone never changes a command's output. `SECLAI_API_VERSION` sets it for a shell, and `--allow-unknown-api-version` permits a date this release was not built against. An empty value is warned about and ignored rather than silently adopting `SECLAI_API_VERSION`
18
+ - Add `api-version get`, `api-version set <date>` and `api-version clear` to read the version a request resolves to and to pin or clear the account's version. `set` rejects a version this release was not built against — the pin applies to every client on the account and nothing re-checks it afterwards, so it is held to the same standard as the `--api-version` header, with `--allow-unknown-api-version` as the same escape hatch
19
+ - Add the `email` command group covering agent email: `domains` (list, add, remove, verify, set-primary, use-shared, test-email, dmarc), `blocked` (list, add, remove, auto-block-mode), `inbound` (status, rejections, cancel-queued, resume) and `optouts` (list, remove)
20
+ - Add `agents disable` and `agents enable` to pause and resume an agent across every trigger path, and `agents callers` to list the live agents that call it via a `call_agent` step
21
+ - Add `agents triggers email-config` to set the alias, sender allowlist and inbound-handling flags on an `EMAIL_RECEIVED` trigger
22
+ - Add `me`, reporting the authenticated user's account ID and organization memberships
23
+ - Add `docs search` for keyword or semantic search over the Seclai documentation. `--mode` accepts `keyword` or `semantic` and rejects anything else at parse time
24
+ - Add `models tiers`, mapping each media-generation modality and tier to its model and cost
25
+ - Add `--supports-input-media` and `--supports-output-media` filters to `models list`
26
+ - Add `--paged` to every list whose shape is version-gated — `evals criteria list`, `alerts configs list`, `models alerts list` and `agents runs eval-results` — wrapping the results in `{data: [...]}` so `.data` reads the same whatever `--api-version` is in effect. Without it, opting into `2026-07-27` renames `configs` and `alerts` to `data` and a script reading the old key gets `null` with exit 0
27
+
28
+ ### Removed
29
+
30
+ - Remove `--severity` from `alerts list`. `GET /alerts` declares no such filter, so it never filtered — it returned unfiltered rows that looked filtered, and became a 422 once `--api-version` was `2026-07-27` or later. Filter client-side: `seclai alerts list | jq '[.data[] | select(.severity == "high")]'`
31
+
32
+ ### Fixed
33
+
34
+ - Reject an empty `--api-key`, `--profile`, `--account-id` or `--config-dir` instead of acting as an identity the caller never named. A shell expanding an unset variable passes `""`, which the SDK's credential chain discards, so each silently resolved elsewhere: `--api-key` to `SECLAI_API_KEY` and then a cached SSO session, `--config-dir` to another account's cached tokens, `--account-id` to the default org, `--profile` to the built-in SSO defaults. The command then exited 0, having read or written somewhere other than where it was pointed. Guard the flag rather than the value — `seclai ${KEY:+--api-key "$KEY"} …`
35
+ - Ship current skill content from `skills install`. The files it writes are string constants compiled into the CLI, regenerated by a script that nothing ran, so since March it had been installing a skill that documented a since-removed flag and none of the commands added after 1.1.0
36
+ - Cancel a run. `agents runs cancel` posted to a path the API has never exposed, so it failed in every release since 1.0.4 — including for callers following this release's advice to use it instead of `agents runs delete`
37
+ - Return results from `agents runs eval-results`, which decoded a shape the endpoint does not send and so returned nothing
38
+ - Paginate `models alerts list`. It sent a page parameter the endpoint does not accept, so every page after the first repeated page 1
39
+ - Complete the `auth` and `configure` groups and their subcommands, and `models list` / `models get`, in bash, zsh and fish. All were reachable but absent from the generated completion scripts — including `configure sso`, the first command a new user runs
40
+ - Offer `--profile`, `--account-id` and `--config-dir` in the zsh and fish completions. They have been accepted as global options since 1.2.0 but were never suggested
41
+
42
+ ## [1.4.0] - 2026-06-05
43
+
44
+ ### Added
45
+
46
+ - Add `agents attachment-references` to read an agent's static attachment-reference contract before staging uploads ([#9](https://github.com/seclai/seclai-cli/pull/9))
47
+ - Add `agents runs download-attachment` for a file emitted by a run step, writing to `--output` or streaming raw bytes to stdout ([#9](https://github.com/seclai/seclai-cli/pull/9))
48
+ - Add `models experiments delete` to soft-delete a model playground experiment ([#9](https://github.com/seclai/seclai-cli/pull/9))
49
+
50
+ ## [1.3.0] - 2026-05-22
51
+
52
+ ### Added
53
+
54
+ - Add `agents preview-import` to validate an agent definition without creating anything, reporting step, schedule, alert, criteria and policy counts plus any unresolved entity refs ([#8](https://github.com/seclai/seclai-cli/pull/8))
55
+
56
+ ## [1.2.2] - 2026-04-24
57
+
58
+ ### Added
59
+
60
+ - Add `models list` and `models get` for the model catalog ([#7](https://github.com/seclai/seclai-cli/pull/7))
61
+ - Add model playground commands `models experiments list`, `create`, `get` and `cancel` ([#7](https://github.com/seclai/seclai-cli/pull/7))
62
+
63
+ ## [1.2.1] - 2026-04-02
64
+
65
+ ### Added
66
+
67
+ - Add `agents export`, returning a portable JSON snapshot of an agent definition ([#6](https://github.com/seclai/seclai-cli/pull/6))
68
+
69
+ ## [1.2.0] - 2026-03-27
70
+
71
+ ### Added
72
+
73
+ - Add `auth login`, `logout`, `status` and `refresh` for browser-based OAuth2/PKCE SSO, with tokens cached locally and refreshed automatically. `login` takes `--no-browser` and `--port` ([#5](https://github.com/seclai/seclai-cli/pull/5))
74
+ - Add `configure sso` and `configure list` to create and inspect `~/.seclai/config` profiles ([#5](https://github.com/seclai/seclai-cli/pull/5))
75
+ - Add `--profile` and `--config-dir` global options, selecting the SSO profile and config directory ([#5](https://github.com/seclai/seclai-cli/pull/5))
76
+
77
+ ## [1.1.1] - 2026-03-24
78
+
79
+ ### Added
80
+
81
+ - Add `mcp configure` to write Seclai MCP server config into AI coding tool config files, and `mcp show` to print the snippet for manual setup ([#4](https://github.com/seclai/seclai-cli/pull/4))
82
+
83
+ ## [1.1.0] - 2026-03-24
84
+
85
+ ### Added
86
+
87
+ - Expand coverage from agents, sources and contents to knowledge bases, memory banks, source exports, embedding migrations, solutions, governance, evaluations, alerts, model alerts and the AI assistants ([#3](https://github.com/seclai/seclai-cli/pull/3))
88
+ - Add `agents run --events` to stream every SSE event as newline-delimited JSON, with `--event-filter` and `--output full|data|status`, and `--poll` to submit and poll until completion ([#3](https://github.com/seclai/seclai-cli/pull/3))
89
+ - Add `search` across all resource types in an account ([#3](https://github.com/seclai/seclai-cli/pull/3))
90
+ - Add `skills install` to install Seclai CLI skill files into AI coding tool directories ([#3](https://github.com/seclai/seclai-cli/pull/3))
91
+ - Add `completion bash|zsh|fish` to generate shell completion scripts ([#3](https://github.com/seclai/seclai-cli/pull/3))
92
+
93
+ ## [1.0.6] - 2026-01-30
94
+
95
+ ### Added
96
+
97
+ - Add `contents upload` to replace existing content with a file upload, taking `--title` and `--mime-type`
98
+ - Add `--metadata` and `--metadata-file` to the upload commands
99
+
100
+ ### Removed
101
+
102
+ - **Breaking:** Remove the `<agentId>` argument from the run-scoped commands. The API stopped requiring it in 1.0.4, where it was retained and ignored; pass the run ID alone
103
+
104
+ ## [1.0.5] - 2026-01-30
105
+
106
+ _Documentation only. Every command and option gained help text; there are no functional changes._
107
+
108
+ ## [1.0.4] - 2026-01-27
109
+
110
+ ### Added
111
+
112
+ - Accept a run ID alone in `agents runs get` and `agents runs cancel`. The agent ID argument is still accepted, and is removed in 1.0.6
113
+
114
+ ## [1.0.3] - 2026-01-20
115
+
116
+ ### Added
117
+
118
+ - Accept `source` as an alias for the `sources` command
119
+
120
+ ### Fixed
121
+
122
+ - Send requests to `https://api.seclai.com` by default rather than relying on the SDK's default, and honour `SECLAI_API_URL` when set
123
+ - Resolve the entrypoint through symlinks, so a globally installed `seclai` runs instead of exiting silently
124
+ - Report SDK errors with status, URL and response body instead of a bare message
125
+
126
+ ## [1.0.2] - 2026-01-13
127
+
128
+ ### Changed
129
+
130
+ - Require `@seclai/sdk` 1.0.3
131
+
132
+ ## [1.0.1] - 2026-01-13
133
+
134
+ ### Added
135
+
136
+ - Add `agents run --stream` to wait for a streaming run to complete and print the final result
137
+
138
+ ## [1.0.0] - 2026-01-12
139
+
140
+ _Stable release. No functional changes since 0.0.2._
141
+
142
+ ## [0.0.2] - 2026-01-12
143
+
144
+ ### Fixed
145
+
146
+ - Report the published version in the generated documentation instead of `0.0.0`
147
+
148
+ ## [0.0.1] - 2026-01-12
149
+
150
+ _Initial release._
151
+
152
+ [1.5.0]: https://github.com/seclai/seclai-cli/releases/tag/1.5.0
153
+ [1.4.0]: https://github.com/seclai/seclai-cli/releases/tag/1.4.0
154
+ [1.3.0]: https://github.com/seclai/seclai-cli/releases/tag/1.3.0
155
+ [1.2.2]: https://github.com/seclai/seclai-cli/releases/tag/1.2.2
156
+ [1.2.1]: https://github.com/seclai/seclai-cli/releases/tag/1.2.1
157
+ [1.2.0]: https://github.com/seclai/seclai-cli/releases/tag/1.2.0
158
+ [1.1.1]: https://github.com/seclai/seclai-cli/releases/tag/1.1.1
159
+ [1.1.0]: https://github.com/seclai/seclai-cli/releases/tag/1.1.0
160
+ [1.0.6]: https://github.com/seclai/seclai-cli/releases/tag/1.0.6
161
+ [1.0.5]: https://github.com/seclai/seclai-cli/releases/tag/1.0.5
162
+ [1.0.4]: https://github.com/seclai/seclai-cli/releases/tag/1.0.4
163
+ [1.0.3]: https://github.com/seclai/seclai-cli/releases/tag/1.0.3
164
+ [1.0.2]: https://github.com/seclai/seclai-cli/releases/tag/1.0.2
165
+ [1.0.1]: https://github.com/seclai/seclai-cli/releases/tag/1.0.1
166
+ [1.0.0]: https://github.com/seclai/seclai-cli/releases/tag/1.0.0
167
+ [0.0.2]: https://github.com/seclai/seclai-cli/releases/tag/0.0.2
168
+ [0.0.1]: https://github.com/seclai/seclai-cli/releases/tag/0.0.1
package/README.md CHANGED
@@ -42,7 +42,7 @@ npx add-mcp https://api.seclai.com/mcp --header "X-API-Key: $SECLAI_API_KEY" --n
42
42
 
43
43
  ## Documentation
44
44
 
45
- Command reference (latest): https://seclai.github.io/seclai-cli/1.4.0/
45
+ Command reference (latest): https://seclai.github.io/seclai-cli/1.6.0/
46
46
 
47
47
  ## Authentication
48
48
 
@@ -86,6 +86,16 @@ or set environment variables:
86
86
  | `SECLAI_SSO_CLIENT_ID` | Cognito app client ID | `4bgf8v9qmc5puivbaqon9n5lmr` |
87
87
  | `SECLAI_SSO_REGION` | AWS region | `us-west-2` |
88
88
 
89
+ Set profiles up interactively, and list the ones you have:
90
+
91
+ ```bash
92
+ # Prompts for domain, client ID, region, and account ID
93
+ seclai configure sso [--profile-name <name>]
94
+
95
+ # Show every configured profile
96
+ seclai configure list
97
+ ```
98
+
89
99
  Use a named profile with `--profile`:
90
100
 
91
101
  ```bash
@@ -102,6 +112,7 @@ Tokens are cached in `~/.seclai/sso/cache/` and auto-refreshed when expired.
102
112
  | `SECLAI_API_URL` | Override API base URL (default: `https://api.seclai.com`) |
103
113
  | `SECLAI_PROFILE` | Default SSO profile name (default: `default`) |
104
114
  | `SECLAI_CONFIG_DIR` | Config directory path (default: `~/.seclai`) |
115
+ | `SECLAI_API_VERSION` | Dated API version (alternative to `--api-version`) |
105
116
  | `SECLAI_SSO_DOMAIN` | Override SSO domain (default: `auth.seclai.com`) |
106
117
  | `SECLAI_SSO_CLIENT_ID` | Override SSO client ID (default: `4bgf8v9qmc5puivbaqon9n5lmr`) |
107
118
  | `SECLAI_SSO_REGION` | Override SSO region (default: `us-west-2`) |
@@ -114,11 +125,55 @@ Tokens are cached in `~/.seclai/sso/cache/` and auto-refreshed when expired.
114
125
  | `--profile <name>` | SSO profile name |
115
126
  | `--account-id <id>` | Account ID (`X-Account-Id` header) |
116
127
  | `--config-dir <path>` | Config directory path |
128
+ | `--api-version <date>` | Opt into dated API changes released on or before this `YYYY-MM-DD` |
129
+ | `--allow-unknown-api-version` | Send an `--api-version` this CLI was not built against |
117
130
  | `--compact` | Output compact (single-line) JSON |
118
131
  | `-V, --version` | Print version |
119
132
 
120
133
  ---
121
134
 
135
+ ## API Versions
136
+
137
+ The API is versioned by date. Responses can change shape between versions — a
138
+ bare array becoming a `{data, pagination}` envelope, for instance — so the CLI
139
+ sends **no version header by default**. Upgrading the CLI on its own never
140
+ changes what a command prints.
141
+
142
+ ```bash
143
+ # See which version a request resolves to
144
+ seclai api-version get
145
+
146
+ # Opt one invocation into the changes released up to a date
147
+ seclai --api-version 2026-07-27 alerts list
148
+
149
+ # Or for every client on the account, not just this CLI
150
+ seclai api-version set 2026-07-27
151
+ seclai api-version clear # revert to the default
152
+ ```
153
+
154
+ An `--api-version` this CLI was not built against is rejected, because a newer
155
+ version can reshape a response the CLI would then misread. Pass
156
+ `--allow-unknown-api-version` to send it anyway. `api-version set` is held to
157
+ the same standard — it rejects a version this release was not built against,
158
+ with the same override — because the pin applies to every client on the account
159
+ and nothing re-checks it afterwards.
160
+
161
+ `--api-key`, `--profile`, `--account-id` and `--config-dir` reject an empty
162
+ value. A shell expanding an unset variable passes `""`, which the SDK discards,
163
+ so `--api-key "$KEY"` with `KEY` unset would fall back to `SECLAI_API_KEY` or a
164
+ cached SSO session and run as a different identity — and `--account-id ""` would
165
+ act on the default org rather than the one you named. Guard the flag instead of
166
+ the value:
167
+
168
+ ```bash
169
+ seclai ${KEY:+--api-key "$KEY"} agents list
170
+ ```
171
+
172
+ An empty `--api-version` is still accepted, with a warning: it costs only the
173
+ version header. A future release will reject that too.
174
+
175
+ ---
176
+
122
177
  ## Commands
123
178
 
124
179
  ### Agents
@@ -129,6 +184,20 @@ seclai agents create --json '{"name":"My Agent"}'
129
184
  seclai agents get <agentId>
130
185
  seclai agents update <agentId> --json '{"name":"Renamed"}'
131
186
  seclai agents delete <agentId>
187
+
188
+ # Pause an agent across every trigger path, then resume it
189
+ seclai agents disable <agentId>
190
+ seclai agents enable <agentId>
191
+
192
+ # Which live agents call this one via a call_agent step?
193
+ seclai agents callers <agentId>
194
+ ```
195
+
196
+ #### Triggers
197
+
198
+ ```bash
199
+ # Alias, sender allowlist, and inbound-handling flags for an EMAIL_RECEIVED trigger
200
+ seclai agents triggers email-config <agentId> <triggerId> --json '{"alias":"support"}'
132
201
  ```
133
202
 
134
203
  #### Running Agents
@@ -158,10 +227,10 @@ seclai agents run <agentId> --json '{"input":"Hi"}' --poll --poll-interval-ms 20
158
227
  ```bash
159
228
  seclai agents runs list <agentId> [--page N] [--limit N]
160
229
  seclai agents runs get <runId> [--include-step-outputs]
161
- seclai agents runs delete <runId>
162
230
  seclai agents runs cancel <runId>
231
+ seclai agents runs delete <runId> # deprecated alias for `runs cancel`
163
232
  seclai agents runs search [--page N] [--limit N] [--json '...']
164
- seclai agents runs eval-results <agentId> <runId> [--page N] [--limit N]
233
+ seclai agents runs eval-results <agentId> <runId> [--page N] [--limit N] [--paged]
165
234
  # Download a file attachment emitted by a run step. attachmentId is the
166
235
  # URL-safe-base64 storage_key from run output manifests / webhooks.
167
236
  seclai agents runs download-attachment <runId> <attachmentId> [--download-name <name>] [--output <path>]
@@ -204,7 +273,8 @@ seclai agents input-status <agentId> <uploadId>
204
273
  ```bash
205
274
  seclai agents ai gen-steps <agentId> --user-input "Build a QA chatbot"
206
275
  seclai agents ai step-config <agentId> --user-input "Configure the search step"
207
- seclai agents ai history <agentId>
276
+ # --step-type is required: the API rejects the request without it.
277
+ seclai agents ai history <agentId> --step-type llm [--step-id <id>] [--limit N] [--offset N]
208
278
  seclai agents ai mark <agentId> <conversationId> --json '{"accepted":true}'
209
279
  ```
210
280
 
@@ -303,7 +373,7 @@ seclai memory ai accept <conversationId> --json '{"accepted":true}'
303
373
  #### Criteria
304
374
 
305
375
  ```bash
306
- seclai evals criteria list <agentId> [--page N] [--limit N]
376
+ seclai evals criteria list <agentId> [--page N] [--limit N] [--paged]
307
377
  seclai evals criteria create <agentId> --json '{"name":"Quality"}'
308
378
  seclai evals criteria get <criteriaId>
309
379
  seclai evals criteria update <criteriaId> --json '{"name":"Renamed"}'
@@ -311,6 +381,14 @@ seclai evals criteria delete <criteriaId>
311
381
  seclai evals criteria summary <criteriaId>
312
382
  ```
313
383
 
384
+ `--paged` wraps the results in `{"data": [...]}` instead of returning a bare
385
+ array, so `.data` is a stable path to read whatever `--api-version` is in
386
+ effect. The same flag is on `alerts configs list`, `models alerts list` and
387
+ `agents runs eval-results`, whose top-level keys (`configs`, `alerts`) also
388
+ become `data` from `2026-07-27`. Nothing is invented: the `pagination` block appears only once the API
389
+ sends one, from `--api-version 2026-07-27`. Migrate scripts to `.data` first,
390
+ then opt in to get `.pagination`.
391
+
314
392
  #### Results
315
393
 
316
394
  ```bash
@@ -375,7 +453,7 @@ seclai governance ai decline <conversationId>
375
453
  ### Alerts
376
454
 
377
455
  ```bash
378
- seclai alerts list [--page N] [--limit N] [--status open] [--severity high]
456
+ seclai alerts list [--page N] [--limit N] [--status open]
379
457
  seclai alerts get <alertId>
380
458
  seclai alerts status <alertId> --json '{"status":"resolved"}'
381
459
  seclai alerts comment <alertId> --json '{"comment":"Investigating"}'
@@ -383,6 +461,10 @@ seclai alerts subscribe <alertId>
383
461
  seclai alerts unsubscribe <alertId>
384
462
  ```
385
463
 
464
+ There is no `--severity`: `GET /alerts` declares no such filter, so it never
465
+ filtered — it returned unfiltered rows that looked filtered. Filter client-side:
466
+ `seclai alerts list | jq '[.data[] | select(.severity == "high")]'`.
467
+
386
468
  #### Alert Configurations
387
469
 
388
470
  ```bash
@@ -402,6 +484,15 @@ seclai alerts prefs update <organizationId> <alertType> --json '{"enabled":true}
402
484
 
403
485
  ### Models
404
486
 
487
+ ```bash
488
+ seclai models list [--provider <name>] [--supports-tool-use] [--supports-thinking]
489
+ seclai models list --supports-input-media image --supports-output-media video
490
+ seclai models get <modelId>
491
+
492
+ # Each media-generation modality and tier, with its model and cost
493
+ seclai models tiers
494
+ ```
495
+
405
496
  #### Model Alerts
406
497
 
407
498
  ```bash
@@ -431,6 +522,63 @@ seclai models experiments delete <experimentId> # soft-delete, preserves audit
431
522
 
432
523
  ```bash
433
524
  seclai search --query "deployment guide" [--limit N] [--entity-type agent|source|kb]
525
+
526
+ # Search the Seclai documentation
527
+ seclai docs search --query "memory banks" [--mode keyword|semantic] [--limit N]
528
+ ```
529
+
530
+ ### Account
531
+
532
+ ```bash
533
+ # The authenticated user's account ID and organization memberships
534
+ seclai me
535
+ ```
536
+
537
+ ### Email
538
+
539
+ Agent email: the domains agents send from, the inbound blocklist, inbound
540
+ health, and recipient opt-outs.
541
+
542
+ #### Domains
543
+
544
+ ```bash
545
+ seclai email domains list
546
+ seclai email domains add --kind custom --value mail.example.com [--delegated]
547
+ seclai email domains verify <domainId> # check DNS now
548
+ seclai email domains set-primary <domainId>
549
+ seclai email domains test-email <domainId> # send a test to the account owner
550
+ seclai email domains dmarc <domainId> [--days N] [--top-sources N]
551
+ seclai email domains remove <domainId>
552
+ seclai email domains use-shared # revert to agent.seclai.com
553
+ ```
554
+
555
+ `add` returns the DNS records to publish. Use `--delegated` when the domain's
556
+ DNS is delegated to Seclai, so those records are published for you.
557
+
558
+ #### Blocked Senders
559
+
560
+ ```bash
561
+ seclai email blocked list [--limit N] [--offset N]
562
+ seclai email blocked add --sender-email spam@example.com [--note "phishing"]
563
+ seclai email blocked add --sender-email example.com --match-type domain
564
+ seclai email blocked remove <blockedId>
565
+ seclai email blocked auto-block-mode disabled|input|input_and_output
566
+ ```
567
+
568
+ #### Inbound Health
569
+
570
+ ```bash
571
+ seclai email inbound status # quota, pause state, queued runs
572
+ seclai email inbound rejections [--agent-id <id>] [--limit N]
573
+ seclai email inbound cancel-queued # fail all over-quota parked runs
574
+ seclai email inbound resume # lift the account-wide pause
575
+ ```
576
+
577
+ #### Opt-outs
578
+
579
+ ```bash
580
+ seclai email optouts list [--agent-id <id>] [--limit N] [--offset N]
581
+ seclai email optouts remove <optoutId>
434
582
  ```
435
583
 
436
584
  ### AI Assistant