@camunda8/cli 3.3.0 → 3.4.0-alpha.2

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/README.md CHANGED
@@ -17,7 +17,7 @@ c8ctl (_pronounced: "cocktail"_) — a minimal-dependency CLI for Camunda 8 oper
17
17
  - **Watch Mode**: Monitors a folder for file changes and auto-redeploys (configurable extensions via `--extensions`)
18
18
  - **`.c8ignore` Support**: Filter deploy/watch file scanning with `.gitignore`-style patterns; `node_modules/`, `target/`, `.git/` ignored by default
19
19
  - **Open Applications**: Open Camunda web applications (Operate, Tasklist, Modeler, Optimize) in the browser directly from the CLI
20
- - **Search**: Powerful search across process definitions, process instances, user tasks, incidents, jobs, variables, and wait states with filter, wildcard, and case-insensitive support
20
+ - **Search**: Powerful search across process definitions, process instances, user tasks, incidents, jobs, and variables with filter, wildcard, and case-insensitive support
21
21
  - **Flexible Output**: Switch between human-readable text and JSON output modes
22
22
  - **Shell Completion**: Auto-install completions for bash, zsh, and fish with automatic refresh on upgrade
23
23
  - **Agent Flags**: `--dry-run` to preview API requests and `--fields` to filter output columns for AI agents and scripts
@@ -45,514 +45,49 @@ After installation, the CLI is available as `c8ctl` (or its alias `c8`).
45
45
 
46
46
  **Note**: The `c8` alias provides typing ergonomics for common keyboard layouts - the `c` key (left index finger) followed by `8` (right middle finger) makes for a comfortable typing experience on both QWERTY and QWERTZ keyboards.
47
47
 
48
- ## Usage
48
+ ## Documentation
49
49
 
50
- ### Getting Help
50
+ The full documentation is maintained in this repository under [`docs/`](docs/) and is published — and kept in sync — on [docs.camunda.io](https://docs.camunda.io/docs/next/apis-tools/c8ctl/getting-started/):
51
51
 
52
- ```bash
53
- # Show general help
54
- c8ctl help
55
-
56
- # Show detailed help for specific commands with all flags
57
- c8ctl help list # Shows all list resources and their flags
58
- c8ctl help get # Shows all get resources and their flags
59
- c8ctl help create # Shows all create resources and their flags
60
- c8ctl help complete # Shows all complete resources and their flags
61
- c8ctl help await # Shows await command with all flags
62
- c8ctl help search # Shows all search resources and their flags
63
- c8ctl help deploy # Shows deploy command with all flags
64
- c8ctl help run # Shows run command with all flags
65
- c8ctl help watch # Shows watch command with all flags
66
- c8ctl help open # Shows open command with all apps
67
- c8ctl help cancel # Shows cancel command with all flags
68
- c8ctl help resolve # Shows resolve command with all flags
69
- c8ctl help fail # Shows fail command with all flags
70
- c8ctl help activate # Shows activate command with all flags
71
- c8ctl help publish # Shows publish command with all flags
72
- c8ctl help correlate # Shows correlate command with all flags
73
- c8ctl help cluster # Shows local cluster management help
74
- c8ctl help profiles # Shows profile management help
75
- c8ctl help plugin # Shows plugin management help
76
-
77
- # Show version
78
- c8ctl --version
79
- ```
80
-
81
- ### Default Extensions
82
-
83
- When scanning directories, `deploy` and `watch` only include files with these extensions by default:
84
-
85
- `.bpmn`, `.dmn`, `.form`
86
-
87
- Explicitly named files bypass the extension allow-list (e.g. `c8 deploy my-doc.md`). Note that `.c8ignore` rules still apply.
88
-
89
- Use `--extensions` to add more types during directory discovery (merged with defaults):
90
-
91
- ```bash
92
- c8 deploy --extensions=.md,.txt
93
- c8 watch --extensions=.md
94
- ```
95
-
96
- Use `--all-extensions` to include all server-supported types (`.md`, `.txt`, `.xml`, `.rpa`, `.json`, `.config`, `.yml`, `.yaml`):
97
-
98
- ```bash
99
- c8 deploy --all-extensions
100
- ```
101
-
102
- Skipped files are logged to stderr with an actionable hint.
103
-
104
- ### Ignoring Files (`.c8ignore`)
105
-
106
- When scanning directories for deployment artifacts, c8ctl automatically ignores:
107
-
108
- - `node_modules/`
109
- - `target/`
110
- - `.git/`
111
-
112
- Create a `.c8ignore` file in your project root to add custom patterns (`.gitignore` syntax):
113
-
114
- ```gitignore
115
- # Ignore build output
116
- dist/
117
- build/
118
-
119
- # Ignore draft processes
120
- **/draft-*.bpmn
121
-
122
- # But keep this specific one
123
- !draft-approved.bpmn
124
- ```
125
-
126
- `.c8ignore` rules apply to both `deploy` (directory scan) and `watch` (file monitoring).
127
-
128
- For comprehensive examples of all commands and their flags, see [EXAMPLES.md](EXAMPLES.md).
129
-
130
- ### Shell Completion
131
-
132
- c8ctl supports shell completion for `bash`, `zsh`, and `fish`.
133
-
134
- #### Quick Install (recommended)
135
-
136
- ```bash
137
- # Auto-detect your shell and install completions
138
- c8ctl completion install
139
-
140
- # Or specify a shell explicitly
141
- c8ctl completion install --shell zsh
142
- ```
143
-
144
- This writes a completion script to the c8ctl data directory and wires it into your shell config (RC file for bash/zsh; completions directory for fish). Completions are **automatically refreshed** when c8ctl is upgraded — no manual re-install needed.
145
-
146
- #### Manual setup
147
-
148
- If you prefer to manage the completion script yourself, generate it with
149
- `c8ctl completion <shell>` (where `<shell>` is `bash`, `zsh`, or `fish`),
150
- then source or install it:
151
-
152
- ```bash
153
- # Bash
154
- c8ctl completion bash > ~/.c8ctl-completion.bash
155
- echo 'source ~/.c8ctl-completion.bash' >> ~/.bashrc
156
- source ~/.c8ctl-completion.bash
52
+ - [Getting started](docs/getting-started.md) — install, spin up a local cluster, credentials, profiles, output modes, and shell completion.
53
+ - [Cluster inspection and process management](docs/cluster-inspection.md) — list, search, get, and manage process instances, user tasks, incidents, jobs, variables, messages, and forms.
54
+ - [Identity management](docs/identity-management.md) — users, roles, groups, tenants, authorizations, and mapping rules.
55
+ - [Development workflows](docs/development-workflows.md) — deploy, run, watch, profiles, sessions, and the MCP proxy.
56
+ - [Plugins](docs/plugins.md) scaffold, install, and manage custom commands.
57
+ - [Command reference](docs/command-reference.md) every command, flag, resource, and alias.
157
58
 
158
- # Zsh
159
- c8ctl completion zsh > ~/.c8ctl-completion.zsh
160
- echo 'source ~/.c8ctl-completion.zsh' >> ~/.zshrc
161
- source ~/.c8ctl-completion.zsh
59
+ The `docs/` pages are the single source of truth. When you change CLI behavior, update the relevant page here; a workflow syncs them to camunda-docs.
162
60
 
163
- # Fish (auto-loaded on next start)
164
- c8ctl completion fish > ~/.config/fish/completions/c8ctl.fish
165
- ```
166
-
167
- ### Credential Resolution
168
-
169
- Credentials are resolved in the following order:
170
-
171
- 1. `--profile` flag (one-off override)
172
- 2. Active profile from session state (⚠ warns if `CAMUNDA_*` env vars are also present)
173
- 3. Environment variables (`CAMUNDA_*`)
174
- 4. Default `local` profile (`http://localhost:8080/v2`)
175
-
176
- **Note**: Credential configuration via environment variables follows the same conventions as the `@camunda8/orchestration-cluster-api` module.
61
+ ## Quick start
177
62
 
178
63
  ```bash
179
- # Using environment variables
180
- export CAMUNDA_BASE_URL=https://camunda.example.com
181
- export CAMUNDA_CLIENT_ID=your-client-id
182
- export CAMUNDA_CLIENT_SECRET=your-client-secret
183
- c8ctl list process-instances
184
-
185
- # Create a profile from a .env file
186
- c8ctl add profile staging --from-file .env.staging
187
-
188
- # Create a profile from current environment variables
189
- source .env.prod
190
- c8ctl add profile prod --from-env
191
-
192
- # Clear the active session profile (so env vars take effect)
193
- c8ctl use profile --none
194
-
195
- # Using profile override
196
- c8ctl list process-instances --profile prod
197
- ```
198
-
199
- ### Tenant Resolution
200
-
201
- Tenants are resolved in the following order:
64
+ # Install
65
+ npm install @camunda8/cli -g
202
66
 
203
- 1. Active tenant from session state
204
- 2. Default tenant from active profile
205
- 3. `CAMUNDA_DEFAULT_TENANT_ID` environment variable
206
- 4. `<default>` tenant
67
+ # Start a local Camunda 8 cluster (no Docker required)
68
+ c8ctl cluster start
207
69
 
208
- ```bash
209
- # Set active tenant for the session
210
- c8ctl use tenant my-tenant-id
70
+ # Deploy a process and start an instance
71
+ c8ctl deploy ./my-process.bpmn
72
+ c8ctl run my-process
211
73
 
212
- # Now all commands use this tenant
74
+ # Inspect running instances
213
75
  c8ctl list process-instances
214
- ```
215
-
216
- ### Profile Management
217
-
218
- c8ctl supports two types of profiles:
219
-
220
- 1. **c8ctl profiles**: Managed directly by c8ctl
221
- 2. **Camunda Modeler profiles**: Automatically imported from Camunda Modeler (with `modeler:` prefix)
222
-
223
- For profile-related commands and flags, run:
224
-
225
- ```bash
226
- c8ctl help profiles
227
- ```
228
76
 
229
- ```bash
230
- # Add a c8ctl profile
231
- c8 add profile prod --baseUrl=https://camunda.example.com --clientId=xxx --clientSecret=yyy
232
-
233
- # List all profiles (includes both c8ctl and modeler profiles)
234
- c8 list profiles
235
-
236
- # Set active profile (works with both types)
237
- c8 use profile prod
238
- c8 use profile "modeler:Local Dev"
239
-
240
- # Remove c8ctl profile (modeler profiles are read-only)
241
- c8 remove profile prod
242
- ```
243
-
244
- #### Camunda Modeler Integration
245
-
246
- c8ctl automatically reads profiles from Camunda Modeler's `profiles.json` file. These profiles are:
247
-
248
- - **Read-only**: Cannot be modified or deleted via c8ctl
249
- - **Prefixed**: Always displayed with `modeler:` prefix (e.g., `modeler:Local Dev`)
250
- - **Dynamic**: Loaded fresh on each command execution (no caching)
251
- - **Platform-specific locations**:
252
- - Linux: `~/.config/camunda-modeler/profiles.json`
253
- - macOS: `~/Library/Application Support/camunda-modeler/profiles.json`
254
- - Windows: `%APPDATA%\camunda-modeler\profiles.json`
255
-
256
- **Using modeler profiles:**
257
-
258
- ```bash
259
- # List includes modeler profiles with 'modeler:' prefix
260
- c8 list profiles
261
-
262
- # Use a modeler profile by name
263
- c8 use profile modeler:Local Dev
264
-
265
- # Use a modeler profile by cluster ID
266
- c8 use profile modeler:abc123-def456
267
-
268
- # One-off command with modeler profile
269
- c8 list pi --profile=modeler:Cloud Cluster
270
- ```
271
-
272
- **URL Construction:**
273
-
274
- - **Self-managed** (localhost): Appends `/v2` to the URL (e.g., `http://localhost:8080/v2`)
275
- - **Cloud**: Uses the cluster URL as-is (e.g., `https://abc123.region.zeebe.camunda.io`)
276
- - **Any port**: Supports any port number in the URL
277
-
278
- ### Session Management
279
-
280
- ```bash
281
- # Show current output mode
282
- c8ctl output
283
-
284
- # Switch to JSON output
285
- c8ctl output json
286
-
287
- # Switch back to text output
288
- c8ctl output text
289
- ```
290
-
291
- #### Per-invocation output override
292
-
293
- The persisted output mode (set by `c8ctl output json|text`) can be overridden for a single invocation without mutating `session.json`. This is useful for scripts, agent integrations, and one-off JSON capture without flipping global state.
294
-
295
- Precedence (highest first):
296
-
297
- 1. `--json` global flag — force JSON for this invocation only.
298
- 2. `C8CTL_OUTPUT_MODE` env var — accepts `json` or `text`. Other values (including unset or typos) fall through to the persisted mode without erroring.
299
- 3. Persisted `session.json` `outputMode`.
300
-
301
- ```bash
302
- # Force JSON for one command — session.json is not touched
303
- c8ctl --json list profile
304
-
305
- # Same effect via env var (handy for scoped shells / CI steps)
306
- C8CTL_OUTPUT_MODE=json c8ctl list profile
307
-
308
- # --json wins over the env var
309
- C8CTL_OUTPUT_MODE=text c8ctl --json list profile # → JSON
310
- ```
311
-
312
- ### Debug Mode
313
-
314
- Enable debug logging to see detailed information about plugin loading and other internal operations:
315
-
316
- ```bash
317
- # Enable debug mode with environment variable
318
- DEBUG=1 c8 <command>
319
-
320
- # Or use C8CTL_DEBUG
321
- C8CTL_DEBUG=true c8 <command>
322
-
323
- # Example: See plugin loading details
324
- DEBUG=1 c8 list plugins
325
- ```
326
-
327
- Debug output is written to stderr with timestamps and won't interfere with normal command output.
328
-
329
- ### Plugin Management
330
-
331
- c8ctl supports a global plugin system that allows extending the CLI with custom commands via npm packages. Plugins are installed globally to a user-specific directory and tracked in a registry file.
332
-
333
- **Plugin Storage Locations:**
334
-
335
- The plugin system uses OS-specific directories:
336
-
337
- | OS | Plugins Directory | Registry File |
338
- |----|-------------------|---------------|
339
- | **Linux** | `~/.config/c8ctl/plugins/node_modules` | `~/.config/c8ctl/plugins.json` |
340
- | **macOS** | `~/Library/Application Support/c8ctl/plugins/node_modules` | `~/Library/Application Support/c8ctl/plugins.json` |
341
- | **Windows** | `%APPDATA%\c8ctl\plugins\node_modules` | `%APPDATA%\c8ctl\plugins.json` |
342
-
343
- > **Note:** You can override the data directory with the `C8CTL_DATA_DIR` environment variable.
344
-
345
- ```bash
346
- # Create a new plugin from template
347
- c8ctl init plugin my-plugin
348
-
349
- # Load a plugin from npm registry
350
- c8ctl load plugin <package-name>
351
-
352
- # Load a plugin from a URL (including file URLs)
353
- c8ctl load plugin --from <url>
354
- c8ctl load plugin --from file:///path/to/plugin
355
- c8ctl load plugin --from https://github.com/user/repo
356
- c8ctl load plugin --from git://github.com/user/repo.git
357
-
358
- # Upgrade a plugin to latest or specific version
359
- c8ctl upgrade plugin <package-name>
360
- c8ctl upgrade plugin <package-name> 1.2.3
361
-
362
- # Downgrade a plugin to a specific version
363
- c8ctl downgrade plugin <package-name> 1.0.0
364
-
365
- # Unload a plugin
366
- c8ctl unload plugin <package-name>
367
-
368
- # List installed plugins (shows version and sync status)
369
- c8ctl list plugins
370
-
371
- # Synchronize plugins from registry
372
- # - First tries npm rebuild for installed plugins
373
- # - Falls back to fresh npm install if rebuild fails
374
- c8ctl sync plugins
375
-
376
- # View help including plugin commands
77
+ # Show help for any command
377
78
  c8ctl help
79
+ c8ctl help <command>
378
80
  ```
379
81
 
380
- **Global Plugin System:**
381
-
382
- - Plugins are installed to a global directory (OS-specific, see table above)
383
- - Plugin registry file (`plugins.json`) tracks all installed plugins
384
- - No local `package.json` is required in your working directory
385
- - Plugins are available globally from any directory
386
- - The registry serves as the source of truth for installed plugins
387
- - Default plugins are bundled with c8ctl and loaded automatically
388
- - **Plugin commands cannot override built-in commands** - built-in commands always take precedence
389
- - `c8ctl list plugins` shows plugin versions and sync status:
390
- - `✓ Installed` - Plugin is in registry and installed
391
- - `⚠ Not installed` - Plugin is in registry but not in global directory (run `sync`)
392
- - `⚠ Not in registry` - Plugin is installed but not tracked in registry
393
- - `c8ctl sync plugins` synchronizes plugins from the registry, rebuilding or reinstalling as needed
394
- - `c8ctl upgrade plugin <name> [version]` respects the plugin source from the registry:
395
- - without `version`: reinstalls the registered source as-is
396
- - npm package source with `version`: installs `<name>@<version>`
397
- - URL/git source with `version`: installs `<source>#<version>`
398
- - file source (`file://`) with `version`: version upgrade is not supported; use `load plugin --from` with the desired local plugin checkout
399
- - `c8ctl downgrade plugin <name> <version>` respects the plugin source from the registry:
400
- - npm package source: installs `<name>@<version>`
401
- - URL/git source: installs `<source>#<version>`
402
- - file source (`file://`): version downgrade is not supported; use `load plugin --from` with the desired local plugin checkout
403
-
404
- When plugins are loaded, their commands automatically appear in `c8ctl help` output.
405
-
406
- For plugin development (scaffolding, runtime API, flags, TypeScript support), see [PLUGIN-HELP.md](PLUGIN-HELP.md).
407
-
408
- ---
409
-
410
- ## Agent Usage (AI / Programmatic Consumption)
411
-
412
- c8ctl ships two flags designed specifically for AI agents and programmatic consumers.
413
- They appear in their own clearly labelled section in `c8ctl help`.
414
-
415
- > For a full machine-readable reference, see [`CONTEXT.md`](./CONTEXT.md).
416
-
417
- ### `--fields <comma-separated>`
418
-
419
- Filters output to only the specified field names. Applies to all `list`, `search`,
420
- and `get` commands. Field matching is **case-insensitive**.
421
-
422
- ```bash
423
- # Only return Key and State columns — reduces context window size
424
- c8ctl list pi --fields Key,State
425
- c8ctl search pd --fields Key,processDefinitionId,name
426
-
427
- # Works in both text and JSON modes
428
- c8ctl output json
429
- c8ctl list pi --fields Key,State,processDefinitionId | jq .
430
- ```
431
-
432
- ### `--dry-run`
433
-
434
- Previews the API request that **would** be sent without executing it.
435
- Works on **all commands**: queries (`list`, `search`, `get`) and mutations
436
- (`create`, `cancel`, `deploy`, `complete`, `fail`, `activate`, `resolve`,
437
- `publish`, `correlate`).
438
-
439
- Emits a JSON object to stdout and exits 0:
440
- ```json
441
- {
442
- "dryRun": true,
443
- "command": "create process-instance",
444
- "method": "POST",
445
- "url": "http://localhost:8080/v2/process-instances",
446
- "body": { "processDefinitionId": "my-process", "tenantId": "<default>" }
447
- }
448
- ```
449
-
450
- **Recommended agent workflow for mutations:**
451
- 1. Run with `--dry-run` and show the user the would-be API call
452
- 2. Wait for user confirmation
453
- 3. Re-run without `--dry-run` to execute
454
-
455
- ```bash
456
- # Preview before creating
457
- c8ctl create pi --id=my-process --dry-run
458
-
459
- # Preview a deployment
460
- c8ctl deploy ./my-process.bpmn --dry-run
461
-
462
- # Preview cancelling a process instance
463
- c8ctl cancel pi 2251799813685249 --dry-run
464
-
465
- # Debug a search query — see the filter body that would be sent
466
- c8ctl search pi --state ACTIVE --between 2024-01-01..2024-12-31 --dry-run
467
-
468
- # Inspect a list operation
469
- c8ctl list pd --dry-run
470
-
471
- # Preview a get request
472
- c8ctl get pi 12345 --dry-run
473
- ```
474
-
475
- ### Machine-Readable Help (JSON Mode)
476
-
477
- In JSON output mode, `c8ctl help` emits structured JSON containing the full
478
- command tree, flags (with types), and agent flags:
479
-
480
- ```bash
481
- c8ctl output json
482
- c8ctl help # → JSON with commands[], globalFlags[], agentFlags[], resourceAliases
483
- c8ctl help list # → JSON for specific command
484
- ```
485
-
486
- ---
487
-
488
- ### Local Cluster
489
-
490
- c8ctl includes a built-in `cluster` command for managing a local Camunda 8 instance (powered by a default plugin). No Docker or docker-compose required — it downloads and runs Camunda directly.
491
-
492
- ```bash
493
- # Start the latest stable version
494
- c8ctl cluster start
495
-
496
- # Start a specific version
497
- c8ctl cluster start 8.9
498
- c8ctl cluster start 8.9.0-alpha5
499
-
500
- # Stop the running cluster
501
- c8ctl cluster stop
502
-
503
- # Check cluster status
504
- c8ctl cluster status
505
-
506
- # Stream cluster logs
507
- c8ctl cluster logs
508
-
509
- # List locally cached versions
510
- c8ctl cluster list
511
-
512
- # List available remote versions
513
- c8ctl cluster list-remote
514
-
515
- # Pre-download a version without starting it
516
- c8ctl cluster install 8.9
517
-
518
- # Remove a cached version
519
- c8ctl cluster delete 8.9
520
-
521
- # Purge history and journal data for a version (binary stays intact)
522
- c8ctl cluster purge 8.9
523
-
524
- # Stop cluster and purge its runtime data in one step
525
- c8ctl cluster stop --purge
526
- ```
527
-
528
- #### Version Aliases
529
-
530
- Instead of an exact version number, you can use:
531
-
532
- - **`stable`** — the latest GA release (highest minor version that has shipped a `.0` release)
533
- - **`alpha`** — the latest alpha-train release (highest minor version overall, which may only have alpha builds)
534
- - **A major.minor pattern** like `8.9` — resolves to the latest patch/alpha within that minor
535
-
536
- `c8ctl cluster start` with no version argument defaults to `stable`.
537
-
538
- ```bash
539
- c8ctl cluster start stable
540
- c8ctl cluster start alpha
541
- c8ctl cluster start 8.9 # latest 8.9.x
542
- ```
543
-
544
- #### Online vs Offline Behaviour
82
+ For everything else, see the [documentation](#documentation) above.
545
83
 
546
- - **`cluster start`** prefers locally cached versions. If the requested version is already installed, it starts immediately without going online. A non-blocking background check runs to hint if a newer build is available, but never delays startup.
547
- - **`cluster install`** always checks the remote download server for the latest build. If a newer ETag is detected for an already-installed version, it re-downloads.
548
- - **`cluster list-remote`** fetches the full list of available versions from the download server.
549
- - **Offline fallback**: if the network is unavailable, alias resolution falls back to a locally cached mapping, then to a hardcoded default.
84
+ ## AI agents and scripting
550
85
 
551
- Run `c8ctl help cluster` for full details. See [EXAMPLES.md](EXAMPLES.md#local-cluster) for a complete local development workflow.
86
+ c8ctl ships flags built for AI agents and scripts — `--fields` (filter output columns), `--dry-run` (preview the API request without executing it), and machine-readable JSON help. They appear in their own section in `c8ctl help`.
552
87
 
553
- ---
88
+ See [Development workflows → AI agents and scripting](docs/development-workflows.md#ai-agents-and-scripting) for details and examples. For a full machine-readable reference intended for agents, see [CONTEXT.md](CONTEXT.md).
554
89
 
555
- ### Command Structure
90
+ ## Command Structure
556
91
 
557
92
  ```shell
558
93
  c8ctl <verb> <resource> [arguments] [flags]
@@ -614,26 +149,11 @@ c8ctl <verb> <resource> [arguments] [flags]
614
149
  - `CAMUNDA_CLIENT_SECRET`: OAuth client secret
615
150
  - `CAMUNDA_TOKEN_AUDIENCE`: OAuth token audience
616
151
  - `CAMUNDA_OAUTH_URL`: OAuth token endpoint
617
- - `CAMUNDA_OAUTH_SCOPE`: OAuth scope (space-separated), maps to the `--scope` flag on `c8ctl add profile`. Needed for IdPs such as Microsoft Entra ID that require an explicit scope (e.g. `api://<app-id>/.default`)
618
152
  - `CAMUNDA_DEFAULT_TENANT_ID`: Default tenant ID
619
- - `C8CTL_OUTPUT_MODE`: Per-invocation output mode override (`json` or `text`); does not persist. Lower precedence than `--json`. See [Per-invocation output override](#per-invocation-output-override).
153
+ - `C8CTL_OUTPUT_MODE`: Per-invocation output mode override (`json` or `text`); does not persist. Lower precedence than `--json`.
620
154
  - `C8CTL_DATA_DIR`: Override the OS-default data directory for plugins and session state.
621
155
  - `C8CTL_DEBUG` / `DEBUG`: Enable debug logging to stderr.
622
156
 
623
- ### Running behind a proxy
624
-
625
- c8ctl is a plain Node.js process, so outbound HTTP(S) requests (to the Camunda 8 REST API and OAuth token endpoint) follow Node's own proxy and TLS trust settings, not c8ctl-specific configuration. When running behind a corporate proxy, set these Node.js environment variables:
626
-
627
- - `NODE_USE_ENV_PROXY=1`: Makes Node's `fetch`/`http`/`https` respect the standard `HTTP_PROXY` / `HTTPS_PROXY` / `NO_PROXY` environment variables.
628
- - `NODE_USE_SYSTEM_CA=1`: Makes Node trust the OS-provided CA certificate store, in addition to its bundled CAs. Required when the proxy performs TLS interception with an internal/corporate root CA.
629
-
630
- ```bash
631
- export HTTP_PROXY=http://proxy.example.com:8080
632
- export HTTPS_PROXY=http://proxy.example.com:8080
633
- export NODE_USE_ENV_PROXY=1
634
- export NODE_USE_SYSTEM_CA=1
635
- ```
636
-
637
157
  ## Configuration Files
638
158
 
639
159
  ### c8ctl Configuration
@@ -669,1214 +189,15 @@ Modeler profiles are:
669
189
 
670
190
  ## Command Reference
671
191
 
672
- <!-- Auto-generated from COMMAND_REGISTRY. Do not edit manually.
192
+ <!-- Auto-generated pointer. Do not edit manually.
673
193
  Run: node --experimental-strip-types scripts/sync-readme-commands.ts -->
674
194
 
675
- ### Global Flags
676
-
677
- These flags are accepted by every command.
678
-
679
- | Flag | Type | Required | Description |
680
- |------|------|----------|-------------|
681
- | `--help` / `-h` | boolean | | Show help |
682
- | `--version` / `-v` | string | | Show CLI version, or filter by process definition version on supported commands |
683
- | `--profile` | string | | Use a specific profile |
684
- | `--dry-run` | boolean | | Preview the API request without executing |
685
- | `--verbose` | boolean | | Show verbose output |
686
- | `--fields` | string | | Comma-separated list of fields to display |
687
- | `--json` | boolean | | Force JSON output for this invocation (does not persist; overrides session state and C8CTL_OUTPUT_MODE) |
688
- | `--yes` / `-y` | boolean | | Skip confirmation prompts |
689
-
690
- ### Resource Aliases
691
-
692
- | Alias | Resource |
693
- |-------|----------|
694
- | `auth` | `authorization` |
695
- | `inc` | `incident` |
696
- | `mr` | `mapping-rule` |
697
- | `msg` | `message` |
698
- | `pd` | `process-definition` |
699
- | `pi` | `process-instance` |
700
- | `ut` | `user-task` |
701
- | `vars` | `variable` |
702
- | `var` | `variable` |
703
- | `ws` | `wait-state` |
704
-
705
- ### Search Flags
706
-
707
- These flags are available on `list` and `search` commands.
708
-
709
- | Flag | Type | Required | Description |
710
- |------|------|----------|-------------|
711
- | `--sortBy` | string | | Sort results by field |
712
- | `--asc` | boolean | | Sort ascending |
713
- | `--desc` | boolean | | Sort descending |
714
- | `--limit` | string | | Maximum number of results |
715
- | `--between` | string | | Date range filter (e.g. 2024-01-01..2024-12-31, ..2024-12-31, 2024-01-01..) |
716
- | `--dateField` | string | | Date field for --between filter |
717
-
718
- ### Commands
719
-
720
- #### `list`
721
-
722
- List resources
723
-
724
- **Resources:** pi (process-instance), pd (process-definition), ut (user-task), inc (incident), jobs, profiles (profile), plugins (plugin), users (user), roles (role), groups (group), tenants (tenant), auth (authorization), mapping-rules (mapping-rule)
725
-
726
- **Verb-level flags:**
727
-
728
- | Flag | Type | Required | Description |
729
- |------|------|----------|-------------|
730
- | `--all` | boolean | | List all (disable pagination limit) |
731
-
732
- **Resource-specific flags:**
733
-
734
- <details>
735
- <summary><code>process-definition</code> (<code>pd</code>)</summary>
736
-
737
- | Flag | Type | Required | Description |
738
- |------|------|----------|-------------|
739
- | `--bpmnProcessId` | string | | Filter by BPMN process ID |
740
- | `--id` | string | | Filter by BPMN process ID (alias) |
741
- | `--processDefinitionId` | string | | Filter by process definition ID |
742
- | `--name` | string | | Filter by name |
743
- | `--key` | string | | Filter by key |
744
- | `--iid` | string | | Case-insensitive filter by BPMN process ID |
745
- | `--iname` | string | | Case-insensitive filter by name |
746
-
747
- </details>
748
-
749
- <details>
750
- <summary><code>process-instance</code> (<code>pi</code>)</summary>
751
-
752
- | Flag | Type | Required | Description |
753
- |------|------|----------|-------------|
754
- | `--bpmnProcessId` | string | | Filter by BPMN process ID |
755
- | `--id` | string | | Filter by BPMN process ID (alias) |
756
- | `--processDefinitionId` | string | | Filter by process definition ID |
757
- | `--processDefinitionKey` | string | | Filter by process definition key |
758
- | `--state` | string | | Filter by state (ACTIVE, COMPLETED, etc) |
759
- | `--key` | string | | Filter by key |
760
- | `--parentProcessInstanceKey` | string | | Filter by parent process instance key |
761
- | `--iid` | string | | Case-insensitive filter by BPMN process ID |
762
-
763
- </details>
764
-
765
- <details>
766
- <summary><code>user-task</code> (<code>ut</code>)</summary>
767
-
768
- | Flag | Type | Required | Description |
769
- |------|------|----------|-------------|
770
- | `--state` | string | | Filter by state |
771
- | `--assignee` | string | | Filter by assignee |
772
- | `--processInstanceKey` | string | | Filter by process instance key |
773
- | `--processDefinitionKey` | string | | Filter by process definition key |
774
- | `--elementId` | string | | Filter by element ID |
775
- | `--iassignee` | string | | Case-insensitive filter by assignee |
776
-
777
- </details>
778
-
779
- <details>
780
- <summary><code>incident</code> (<code>inc</code>)</summary>
781
-
782
- | Flag | Type | Required | Description |
783
- |------|------|----------|-------------|
784
- | `--state` | string | | Filter by state |
785
- | `--processInstanceKey` | string | | Filter by process instance key |
786
- | `--processDefinitionKey` | string | | Filter by process definition key |
787
- | `--bpmnProcessId` | string | | Filter by BPMN process ID |
788
- | `--id` | string | | Filter by BPMN process ID (alias) |
789
- | `--processDefinitionId` | string | | Filter by process definition ID |
790
- | `--errorType` | string | | Filter by error type |
791
- | `--errorMessage` | string | | Filter by error message |
792
- | `--ierrorMessage` | string | | Case-insensitive filter by error message |
793
- | `--iid` | string | | Case-insensitive filter by BPMN process ID |
794
-
795
- </details>
796
-
797
- <details>
798
- <summary><code>jobs</code></summary>
799
-
800
- | Flag | Type | Required | Description |
801
- |------|------|----------|-------------|
802
- | `--state` | string | | Filter by state |
803
- | `--type` | string | | Filter by job type |
804
- | `--processInstanceKey` | string | | Filter by process instance key |
805
- | `--processDefinitionKey` | string | | Filter by process definition key |
806
- | `--itype` | string | | Case-insensitive filter by job type |
807
-
808
- </details>
809
-
810
- <details>
811
- <summary><code>user</code></summary>
812
-
813
- | Flag | Type | Required | Description |
814
- |------|------|----------|-------------|
815
- | `--username` | string | | Filter by username |
816
- | `--name` | string | | Filter by name |
817
- | `--email` | string | | Filter by email |
818
-
819
- </details>
820
-
821
- <details>
822
- <summary><code>role</code></summary>
823
-
824
- | Flag | Type | Required | Description |
825
- |------|------|----------|-------------|
826
- | `--roleId` | string | | Filter by role ID |
827
- | `--name` | string | | Filter by name |
828
-
829
- </details>
830
-
831
- <details>
832
- <summary><code>group</code></summary>
833
-
834
- | Flag | Type | Required | Description |
835
- |------|------|----------|-------------|
836
- | `--groupId` | string | | Filter by group ID |
837
- | `--name` | string | | Filter by name |
838
-
839
- </details>
840
-
841
- <details>
842
- <summary><code>tenant</code></summary>
843
-
844
- | Flag | Type | Required | Description |
845
- |------|------|----------|-------------|
846
- | `--tenantId` | string | | Filter by tenant ID |
847
- | `--name` | string | | Filter by name |
848
-
849
- </details>
850
-
851
- <details>
852
- <summary><code>authorization</code> (<code>auth</code>)</summary>
853
-
854
- | Flag | Type | Required | Description |
855
- |------|------|----------|-------------|
856
- | `--ownerId` | string | | Filter by owner ID |
857
- | `--ownerType` | string | | Filter by owner type |
858
- | `--resourceType` | string | | Filter by resource type |
859
- | `--resourceId` | string | | Filter by resource ID |
860
-
861
- </details>
862
-
863
- <details>
864
- <summary><code>mapping-rule</code> (<code>mr</code>)</summary>
865
-
866
- | Flag | Type | Required | Description |
867
- |------|------|----------|-------------|
868
- | `--mappingRuleId` | string | | Filter by mapping rule ID |
869
- | `--name` | string | | Filter by name |
870
- | `--claimName` | string | | Filter by claim name |
871
- | `--claimValue` | string | | Filter by claim value |
872
-
873
- </details>
874
-
875
- **Examples:**
876
-
877
- ```bash
878
- c8ctl list pi # List process instances
879
- c8ctl list pd # List process definitions
880
- c8ctl list users # List users
881
- ```
882
-
883
- ---
884
-
885
- #### `search`
886
-
887
- Search resources with filters (wildcards, date ranges, case-insensitive)
888
-
889
- **Resources:** pi (process-instance), pd (process-definition), ut (user-task), inc (incident), jobs, vars (variable), users (user), roles (role), groups (group), tenants (tenant), auth (authorization), mapping-rules (mapping-rule), wait-state
890
-
891
- **Resource-specific flags:**
892
-
893
- <details>
894
- <summary><code>process-definition</code> (<code>pd</code>)</summary>
895
-
896
- | Flag | Type | Required | Description |
897
- |------|------|----------|-------------|
898
- | `--bpmnProcessId` | string | | Filter by BPMN process ID |
899
- | `--id` | string | | Filter by BPMN process ID (alias) |
900
- | `--processDefinitionId` | string | | Filter by process definition ID |
901
- | `--name` | string | | Filter by name |
902
- | `--key` | string | | Filter by key |
903
- | `--iid` | string | | Case-insensitive filter by BPMN process ID |
904
- | `--iname` | string | | Case-insensitive filter by name |
905
-
906
- </details>
907
-
908
- <details>
909
- <summary><code>process-instance</code> (<code>pi</code>)</summary>
910
-
911
- | Flag | Type | Required | Description |
912
- |------|------|----------|-------------|
913
- | `--bpmnProcessId` | string | | Filter by BPMN process ID |
914
- | `--id` | string | | Filter by BPMN process ID (alias) |
915
- | `--processDefinitionId` | string | | Filter by process definition ID |
916
- | `--processDefinitionKey` | string | | Filter by process definition key |
917
- | `--state` | string | | Filter by state (ACTIVE, COMPLETED, etc) |
918
- | `--key` | string | | Filter by key |
919
- | `--parentProcessInstanceKey` | string | | Filter by parent process instance key |
920
- | `--iid` | string | | Case-insensitive filter by BPMN process ID |
921
-
922
- </details>
923
-
924
- <details>
925
- <summary><code>user-task</code> (<code>ut</code>)</summary>
926
-
927
- | Flag | Type | Required | Description |
928
- |------|------|----------|-------------|
929
- | `--state` | string | | Filter by state |
930
- | `--assignee` | string | | Filter by assignee |
931
- | `--processInstanceKey` | string | | Filter by process instance key |
932
- | `--processDefinitionKey` | string | | Filter by process definition key |
933
- | `--elementId` | string | | Filter by element ID |
934
- | `--iassignee` | string | | Case-insensitive filter by assignee |
935
-
936
- </details>
937
-
938
- <details>
939
- <summary><code>incident</code> (<code>inc</code>)</summary>
940
-
941
- | Flag | Type | Required | Description |
942
- |------|------|----------|-------------|
943
- | `--state` | string | | Filter by state |
944
- | `--processInstanceKey` | string | | Filter by process instance key |
945
- | `--processDefinitionKey` | string | | Filter by process definition key |
946
- | `--bpmnProcessId` | string | | Filter by BPMN process ID |
947
- | `--id` | string | | Filter by BPMN process ID (alias) |
948
- | `--processDefinitionId` | string | | Filter by process definition ID |
949
- | `--errorType` | string | | Filter by error type |
950
- | `--errorMessage` | string | | Filter by error message |
951
- | `--ierrorMessage` | string | | Case-insensitive filter by error message |
952
- | `--iid` | string | | Case-insensitive filter by BPMN process ID |
953
-
954
- </details>
955
-
956
- <details>
957
- <summary><code>jobs</code></summary>
958
-
959
- | Flag | Type | Required | Description |
960
- |------|------|----------|-------------|
961
- | `--state` | string | | Filter by state |
962
- | `--type` | string | | Filter by job type |
963
- | `--processInstanceKey` | string | | Filter by process instance key |
964
- | `--processDefinitionKey` | string | | Filter by process definition key |
965
- | `--itype` | string | | Case-insensitive filter by job type |
966
-
967
- </details>
968
-
969
- <details>
970
- <summary><code>variable</code> (<code>var</code>, <code>vars</code>)</summary>
971
-
972
- | Flag | Type | Required | Description |
973
- |------|------|----------|-------------|
974
- | `--name` | string | | Filter by variable name |
975
- | `--value` | string | | Filter by value |
976
- | `--processInstanceKey` | string | | Filter by process instance key |
977
- | `--scopeKey` | string | | Filter by scope key |
978
- | `--fullValue` | boolean | | Return full variable values (not truncated) |
979
- | `--iname` | string | | Case-insensitive filter by name |
980
- | `--ivalue` | string | | Case-insensitive filter by value |
195
+ A compact list of every verb and resource is in [Command Structure](#command-structure) above.
981
196
 
982
- </details>
983
-
984
- <details>
985
- <summary><code>user</code></summary>
986
-
987
- | Flag | Type | Required | Description |
988
- |------|------|----------|-------------|
989
- | `--username` | string | | Filter by username |
990
- | `--name` | string | | Filter by name |
991
- | `--email` | string | | Filter by email |
992
-
993
- </details>
994
-
995
- <details>
996
- <summary><code>role</code></summary>
997
-
998
- | Flag | Type | Required | Description |
999
- |------|------|----------|-------------|
1000
- | `--roleId` | string | | Filter by role ID |
1001
- | `--name` | string | | Filter by name |
1002
-
1003
- </details>
1004
-
1005
- <details>
1006
- <summary><code>group</code></summary>
1007
-
1008
- | Flag | Type | Required | Description |
1009
- |------|------|----------|-------------|
1010
- | `--groupId` | string | | Filter by group ID |
1011
- | `--name` | string | | Filter by name |
1012
-
1013
- </details>
1014
-
1015
- <details>
1016
- <summary><code>tenant</code></summary>
1017
-
1018
- | Flag | Type | Required | Description |
1019
- |------|------|----------|-------------|
1020
- | `--tenantId` | string | | Filter by tenant ID |
1021
- | `--name` | string | | Filter by name |
1022
-
1023
- </details>
1024
-
1025
- <details>
1026
- <summary><code>authorization</code> (<code>auth</code>)</summary>
1027
-
1028
- | Flag | Type | Required | Description |
1029
- |------|------|----------|-------------|
1030
- | `--ownerId` | string | | Filter by owner ID |
1031
- | `--ownerType` | string | | Filter by owner type |
1032
- | `--resourceType` | string | | Filter by resource type |
1033
- | `--resourceId` | string | | Filter by resource ID |
1034
-
1035
- </details>
1036
-
1037
- <details>
1038
- <summary><code>mapping-rule</code> (<code>mr</code>)</summary>
1039
-
1040
- | Flag | Type | Required | Description |
1041
- |------|------|----------|-------------|
1042
- | `--mappingRuleId` | string | | Filter by mapping rule ID |
1043
- | `--name` | string | | Filter by name |
1044
- | `--claimName` | string | | Filter by claim name |
1045
- | `--claimValue` | string | | Filter by claim value |
1046
-
1047
- </details>
1048
-
1049
- <details>
1050
- <summary><code>wait-state</code> (<code>ws</code>)</summary>
1051
-
1052
- | Flag | Type | Required | Description |
1053
- |------|------|----------|-------------|
1054
- | `--processInstanceKey` / `-k` | string | | Filter by process instance key |
1055
- | `--rootProcessInstanceKey` / `-r` | string | | Filter by root process instance key |
1056
- | `--elementInstanceKey` / `-e` | string | | Filter by element instance key |
1057
- | `--elementId` | string | | Filter by element ID (supports wildcards, e.g. `*Task*`) |
1058
- | `--elementType` | string | | Filter by BPMN element type (e.g. SERVICE_TASK, USER_TASK, CALL_ACTIVITY) |
1059
- | `--waitStateType` | string | | Filter by wait state type (JOB, MESSAGE, TIMER, CONDITION, USER_TASK, SIGNAL) |
1060
-
1061
- </details>
1062
-
1063
- **Examples:**
1064
-
1065
- ```bash
1066
- c8ctl search pi --state=ACTIVE # Search for active process instances
1067
- c8ctl search pd --bpmnProcessId=myProcess # Search process definitions by ID
1068
- c8ctl search pd --name='*main*' # Search process definitions with wildcard
1069
- c8ctl search ut --assignee=john # Search user tasks assigned to john
1070
- c8ctl search inc --state=ACTIVE # Search for active incidents
1071
- c8ctl search jobs --type=myJobType # Search jobs by type
1072
- c8ctl search jobs --type='*service*' # Search jobs with type containing "service"
1073
- c8ctl search variables --name=myVar # Search for variables by name
1074
- c8ctl search variables --value=foo # Search for variables by value
1075
- c8ctl search variables --processInstanceKey=123 --fullValue # Search variables with full values
1076
- c8ctl search pd --iname='*order*' # Case-insensitive search by name
1077
- c8ctl search ut --iassignee=John # Case-insensitive search by assignee
1078
- c8ctl search ws --waitStateType=JOB # Search wait states of type JOB
1079
- c8ctl search ws --elementType=SERVICE_TASK # Search wait states on service tasks
1080
- ```
1081
-
1082
- ---
1083
-
1084
- #### `get`
1085
-
1086
- Get a resource by key
1087
-
1088
- **Resources:** pi (process-instance), pd (process-definition), inc (incident), topology, form, user, role, group, tenant, auth (authorization), mapping-rule
1089
-
1090
- **Positional arguments:**
1091
-
1092
- - **process-definition:** `<key>` (required)
1093
- - **process-instance:** `<key>` (required)
1094
- - **incident:** `<key>` (required)
1095
- - **user:** `<username>` (required)
1096
- - **role:** `<roleId>` (required)
1097
- - **group:** `<groupId>` (required)
1098
- - **tenant:** `<tenantId>` (required)
1099
- - **authorization:** `<authorizationKey>` (required)
1100
- - **mapping-rule:** `<mappingRuleId>` (required)
1101
- - **form:** `<key>` (required)
1102
-
1103
- **Resource-specific flags:**
1104
-
1105
- <details>
1106
- <summary><code>process-definition</code> (<code>pd</code>)</summary>
1107
-
1108
- | Flag | Type | Required | Description |
1109
- |------|------|----------|-------------|
1110
- | `--xml` | boolean | | Get BPMN XML (process definitions) |
1111
-
1112
- </details>
1113
-
1114
- <details>
1115
- <summary><code>form</code></summary>
1116
-
1117
- | Flag | Type | Required | Description |
1118
- |------|------|----------|-------------|
1119
- | `--userTask` | boolean | | Get form for user task |
1120
- | `--ut` | boolean | | Alias for --userTask |
1121
- | `--processDefinition` | boolean | | Get form for process definition |
1122
- | `--pd` | boolean | | Alias for --processDefinition |
1123
-
1124
- </details>
1125
-
1126
- <details>
1127
- <summary><code>process-instance</code> (<code>pi</code>)</summary>
1128
-
1129
- | Flag | Type | Required | Description |
1130
- |------|------|----------|-------------|
1131
- | `--variables` | boolean | | Include variables in output |
1132
-
1133
- </details>
1134
-
1135
- **Examples:**
1136
-
1137
- ```bash
1138
- c8ctl get pi 123456 # Get process instance by key
1139
- c8ctl get pi 123456 --variables # Get process instance with variables
1140
- c8ctl get pd 123456 # Get process definition by key
1141
- c8ctl get pd 123456 --xml # Get process definition XML
1142
- c8ctl get form 123456 # Get form (searches both user task and process definition)
1143
- c8ctl get form 123456 --ut # Get form for user task only
1144
- c8ctl get form 123456 --pd # Get start form for process definition only
1145
- c8ctl get user john # Get user by username
1146
- ```
1147
-
1148
- ---
1149
-
1150
- #### `create`
1151
-
1152
- Create a resource (process instance, identity)
1153
-
1154
- **Resources:** pi (process-instance), user, role, group, tenant, auth (authorization), mapping-rule
1155
-
1156
- **Verb-level flags:**
1157
-
1158
- | Flag | Type | Required | Description |
1159
- |------|------|----------|-------------|
1160
- | `--processDefinitionId` | string | | Process definition ID (BPMN process ID) |
1161
- | `--id` | string | | Process definition ID (alias for --processDefinitionId) |
1162
- | `--bpmnProcessId` | string | | BPMN process ID (alias for --processDefinitionId) |
1163
- | `--variables` | string | | JSON variables |
1164
- | `--awaitCompletion` | boolean | | Wait for process to complete |
1165
- | `--fetchVariables` | boolean | | Fetch result variables on completion |
1166
- | `--requestTimeout` | string | | Await timeout in milliseconds |
1167
- | `--username` | string | | Username |
1168
- | `--name` | string | | Display name |
1169
- | `--email` | string | | Email address |
1170
- | `--password` | string | | Password |
1171
- | `--roleId` | string | | Role ID |
1172
- | `--groupId` | string | | Group ID |
1173
- | `--tenantId` | string | | Tenant ID |
1174
- | `--mappingRuleId` | string | | Mapping rule ID |
1175
- | `--claimName` | string | | Claim name |
1176
- | `--claimValue` | string | | Claim value |
1177
-
1178
- **Resource-specific flags:**
1179
-
1180
- <details>
1181
- <summary><code>authorization</code> (<code>auth</code>)</summary>
1182
-
1183
- | Flag | Type | Required | Description |
1184
- |------|------|----------|-------------|
1185
- | `--ownerId` | string | Yes | Authorization owner ID |
1186
- | `--ownerType` | string | Yes | Authorization owner type |
1187
- | `--resourceType` | string | Yes | Authorization resource type |
1188
- | `--resourceId` | string | Yes | Authorization resource ID |
1189
- | `--permissions` | string | Yes | Comma-separated permissions |
1190
-
1191
- </details>
1192
-
1193
- **Examples:**
1194
-
1195
- ```bash
1196
- c8ctl create pi --id=myProcess # Create a process instance
1197
- c8ctl create pi --id=myProcess --awaitCompletion # Create and await completion
1198
- c8ctl create user --username=john --name='John Doe' --email=john@example.com --password=secret # Create a user
1199
- ```
1200
-
1201
- ---
1202
-
1203
- #### `delete`
1204
-
1205
- Delete a resource by key
1206
-
1207
- **Usage:** `c8ctl delete <resource> <key>`
1208
-
1209
- **Resources:** user, role, group, tenant, auth (authorization), mapping-rule
1210
-
1211
- **Positional arguments:**
1212
-
1213
- - **user:** `<username>` (required)
1214
- - **role:** `<roleId>` (required)
1215
- - **group:** `<groupId>` (required)
1216
- - **tenant:** `<tenantId>` (required)
1217
- - **authorization:** `<authorizationKey>` (required)
1218
- - **mapping-rule:** `<mappingRuleId>` (required)
1219
-
1220
- **Examples:**
1221
-
1222
- ```bash
1223
- c8ctl delete user john # Delete user
1224
- ```
1225
-
1226
- ---
1227
-
1228
- #### `cancel`
1229
-
1230
- Cancel a process instance
1231
-
1232
- **Usage:** `c8ctl cancel <resource> <key>`
1233
-
1234
- **Resources:** pi (process-instance)
1235
-
1236
- **Positional arguments:**
1237
-
1238
- - **process-instance:** `<key>` (required)
1239
-
1240
- ---
1241
-
1242
- #### `await`
1243
-
1244
- Create and await process instance completion (server-side waiting)
1245
-
1246
- **Usage:** `c8ctl await <resource>`
1247
-
1248
- **Resources:** pi (process-instance)
1249
-
1250
- **Flags:**
1251
-
1252
- | Flag | Type | Required | Description |
1253
- |------|------|----------|-------------|
1254
- | `--processDefinitionId` | string | | Process definition ID (BPMN process ID) |
1255
- | `--id` | string | | Process definition ID (alias for --processDefinitionId) |
1256
- | `--bpmnProcessId` | string | | BPMN process ID (alias for --processDefinitionId) |
1257
- | `--variables` | string | | JSON variables |
1258
- | `--fetchVariables` | boolean | | Fetch result variables on completion |
1259
- | `--requestTimeout` | string | | Await timeout in milliseconds |
1260
-
1261
- **Examples:**
1262
-
1263
- ```bash
1264
- c8ctl await pi --id=myProcess # Create and wait for completion
1265
- ```
1266
-
1267
- ---
1268
-
1269
- #### `complete`
1270
-
1271
- Complete a user task or job
1272
-
1273
- **Usage:** `c8ctl complete <resource> <key>`
1274
-
1275
- **Resources:** ut (user-task), job
1276
-
1277
- **Positional arguments:**
1278
-
1279
- - **user-task:** `<key>` (required)
1280
- - **job:** `<key>` (required)
1281
-
1282
- **Flags:**
1283
-
1284
- | Flag | Type | Required | Description |
1285
- |------|------|----------|-------------|
1286
- | `--variables` | string | | JSON variables |
1287
-
1288
- ---
1289
-
1290
- #### `fail`
1291
-
1292
- Mark a job as failed with optional error message and retry count
1293
-
1294
- **Resources:** job
1295
-
1296
- **Positional arguments:**
1297
-
1298
- - **job:** `<key>` (required)
1299
-
1300
- **Flags:**
1301
-
1302
- | Flag | Type | Required | Description |
1303
- |------|------|----------|-------------|
1304
- | `--retries` | string | | Remaining retries |
1305
- | `--errorMessage` | string | | Error message |
1306
-
1307
- ---
1308
-
1309
- #### `update`
1310
-
1311
- Update the retries or timeout of a job. At least one of --retries or --timeout must be provided.
1312
-
1313
- **Resources:** job
1314
-
1315
- **Positional arguments:**
1316
-
1317
- - **job:** `<key>` (required)
1318
-
1319
- **Flags:**
1320
-
1321
- | Flag | Type | Required | Description |
1322
- |------|------|----------|-------------|
1323
- | `--retries` | string | | New number of retries for the job |
1324
- | `--timeout` | string | | New job timeout in milliseconds |
1325
- | `--operationReference` | string | | Optional operation reference (long integer) |
1326
-
1327
- **Examples:**
1328
-
1329
- ```bash
1330
- c8ctl update job 12345 --retries 3 # Set the retry count for a job
1331
- c8ctl update job 12345 --timeout 60000 # Set the job timeout to 60 seconds
1332
- ```
1333
-
1334
- ---
1335
-
1336
- #### `activate`
1337
-
1338
- Activate jobs of a specific type for processing
1339
-
1340
- **Resources:** jobs
1341
-
1342
- **Positional arguments:**
1343
-
1344
- - **jobs:** `<type>` (required)
1345
-
1346
- **Flags:**
1347
-
1348
- | Flag | Type | Required | Description |
1349
- |------|------|----------|-------------|
1350
- | `--maxJobsToActivate` | string | | Maximum number of jobs to activate |
1351
- | `--timeout` | string | | Job timeout in milliseconds |
1352
- | `--worker` | string | | Worker name |
1353
- | `--customHeaders` | boolean | | Include custom headers in output |
1354
- | `--fetchVariable` | string | | Comma-separated variable names to fetch from the server and include in output |
1355
-
1356
- ---
1357
-
1358
- #### `resolve`
1359
-
1360
- Resolve an incident (marks resolved, allows process to continue)
1361
-
1362
- **Resources:** inc (incident)
1363
-
1364
- **Positional arguments:**
1365
-
1366
- - **incident:** `<key>` (required)
1367
-
1368
- ---
1369
-
1370
- #### `publish`
1371
-
1372
- Publish a message for message correlation
1373
-
1374
- **Resources:** msg (message)
1375
-
1376
- **Positional arguments:**
1377
-
1378
- - **message:** `<name>` (required)
1379
-
1380
- **Flags:**
1381
-
1382
- | Flag | Type | Required | Description |
1383
- |------|------|----------|-------------|
1384
- | `--correlationKey` | string | | Correlation key |
1385
- | `--variables` | string | | JSON variables |
1386
- | `--timeToLive` | string | | Time to live in milliseconds |
1387
-
1388
- ---
1389
-
1390
- #### `correlate`
1391
-
1392
- Correlate a message to a specific process instance
1393
-
1394
- **Resources:** msg (message)
1395
-
1396
- **Positional arguments:**
1397
-
1398
- - **message:** `<name>` (required)
1399
-
1400
- **Flags:**
1401
-
1402
- | Flag | Type | Required | Description |
1403
- |------|------|----------|-------------|
1404
- | `--correlationKey` | string | Yes | Correlation key |
1405
- | `--variables` | string | | JSON variables |
1406
- | `--timeToLive` | string | | Time to live in milliseconds |
1407
-
1408
- ---
1409
-
1410
- #### `set`
1411
-
1412
- Set variables on an element instance (process instance or flow element scope). Variables are propagated to the outermost scope by default; use --local to restrict to the specified scope.
1413
-
1414
- **Usage:** `c8ctl set variable <key>`
1415
-
1416
- **Resources:** variable
1417
-
1418
- **Positional arguments:**
1419
-
1420
- - **variable:** `<key>` (required)
1421
-
1422
- **Flags:**
1423
-
1424
- | Flag | Type | Required | Description |
1425
- |------|------|----------|-------------|
1426
- | `--variables` | string | Yes | JSON object of variables to set (required) |
1427
- | `--local` | boolean | | Set variables in local scope only (default: propagate to outermost scope) |
1428
-
1429
- **Examples:**
1430
-
1431
- ```bash
1432
- c8ctl set variable 2251799813685249 --variables='{"status":"approved"}' # Set variables on a process instance
1433
- c8ctl set variable 2251799813685249 --variables='{"x":1}' --local # Set variables in local scope only
1434
- ```
1435
-
1436
- ---
1437
-
1438
- #### `deploy`
1439
-
1440
- Deploy files to Camunda (auto-discovers deployable files in directories). When deploying a directory that is inside a process application (a parent directory contains a .process-application marker), the entire application root is deployed. Explicit file paths are not expanded.
1441
-
1442
- **Usage:** `c8ctl deploy [path...]`
1443
-
1444
- **Flags:**
1445
-
1446
- | Flag | Type | Required | Description |
1447
- |------|------|----------|-------------|
1448
- | `--force` | boolean | | Deploy any file type, ignoring the default extension allow-list |
1449
- | `--extensions` | string | | Comma-separated list of additional file extensions to include when scanning directories (e.g. .md,.txt). Explicit file paths bypass the extension allow-list. |
1450
- | `--all-extensions` | boolean | | Include all server-supported file extensions during directory discovery |
1451
-
1452
- **Examples:**
1453
-
1454
- ```bash
1455
- c8ctl deploy ./my-process.bpmn # Deploy a BPMN file
1456
- c8ctl deploy # Deploy from current directory (detects process application root)
1457
- ```
1458
-
1459
- ---
1460
-
1461
- #### `run`
1462
-
1463
- Deploy and start a process instance from a BPMN file
1464
-
1465
- **Usage:** `c8ctl run <path>`
1466
-
1467
- **Flags:**
1468
-
1469
- | Flag | Type | Required | Description |
1470
- |------|------|----------|-------------|
1471
- | `--variables` | string | | JSON variables |
1472
- | `--force` | boolean | | Deploy any file type, ignoring the default extension allow-list |
1473
-
1474
- **Examples:**
1475
-
1476
- ```bash
1477
- c8ctl run ./my-process.bpmn # Deploy and start process
1478
- ```
1479
-
1480
- ---
1481
-
1482
- #### `assign`
1483
-
1484
- Assign a resource to a target (--to-user, --to-group, etc.)
1485
-
1486
- **Usage:** `c8ctl assign <resource> <id>`
1487
-
1488
- **Resources:** role, user, group, mapping-rule
1489
-
1490
- **Positional arguments:**
1491
-
1492
- - **role:** `<roleId>` (required)
1493
- - **user:** `<username>` (required)
1494
- - **group:** `<groupId>` (required)
1495
- - **mapping-rule:** `<mappingRuleId>` (required)
1496
-
1497
- **Flags:**
1498
-
1499
- | Flag | Type | Required | Description |
1500
- |------|------|----------|-------------|
1501
- | `--to-user` | string | | Target user ID |
1502
- | `--to-group` | string | | Target group ID |
1503
- | `--to-tenant` | string | | Target tenant ID |
1504
- | `--to-mapping-rule` | string | | Target mapping rule ID |
1505
-
1506
- **Examples:**
1507
-
1508
- ```bash
1509
- c8ctl assign role admin --to-user=john # Assign role to user
1510
- ```
1511
-
1512
- ---
1513
-
1514
- #### `unassign`
1515
-
1516
- Unassign a resource from a target (--from-user, --from-group, etc.)
1517
-
1518
- **Usage:** `c8ctl unassign <resource> <id>`
1519
-
1520
- **Resources:** role, user, group, mapping-rule
1521
-
1522
- **Positional arguments:**
1523
-
1524
- - **role:** `<roleId>` (required)
1525
- - **user:** `<username>` (required)
1526
- - **group:** `<groupId>` (required)
1527
- - **mapping-rule:** `<mappingRuleId>` (required)
1528
-
1529
- **Flags:**
1530
-
1531
- | Flag | Type | Required | Description |
1532
- |------|------|----------|-------------|
1533
- | `--from-user` | string | | Source user ID |
1534
- | `--from-group` | string | | Source group ID |
1535
- | `--from-tenant` | string | | Source tenant ID |
1536
- | `--from-mapping-rule` | string | | Source mapping rule ID |
1537
-
1538
- **Examples:**
1539
-
1540
- ```bash
1541
- c8ctl unassign role admin --from-user=john # Unassign role from user
1542
- ```
1543
-
1544
- ---
1545
-
1546
- #### `watch`
1547
-
1548
- Watch files for changes and auto-deploy
1549
-
1550
- **Usage:** `c8ctl watch [path...]`
1551
-
1552
- **Aliases:** `w`
1553
-
1554
- **Flags:**
1555
-
1556
- | Flag | Type | Required | Description |
1557
- |------|------|----------|-------------|
1558
- | `--force` | boolean | | Continue watching after all deployment errors |
1559
- | `--extensions` | string | | Comma-separated list of additional file extensions to watch (merged with defaults, e.g. .md,.txt) |
1560
- | `--all-extensions` | boolean | | Watch all server-supported file extensions |
1561
- | `--process-application` | boolean | | Watch and deploy the entire process application (requires .process-application marker) |
1562
- | `--pa` | boolean | | Alias for --process-application |
1563
-
1564
- **Examples:**
1565
-
1566
- ```bash
1567
- c8ctl watch ./src # Watch directory for changes
1568
- ```
1569
-
1570
- ---
1571
-
1572
- #### `open`
1573
-
1574
- Open Camunda web app in browser
1575
-
1576
- **Usage:** `c8ctl open <app>`
1577
-
1578
- **Resources:** operate, tasklist, modeler, optimize
1579
-
1580
- **Examples:**
1581
-
1582
- ```bash
1583
- c8ctl open operate # Open Camunda Operate in browser
1584
- c8ctl open tasklist # Open Camunda Tasklist in browser
1585
- c8ctl open operate --profile=prod # Open Operate using a specific profile
1586
- ```
1587
-
1588
- ---
1589
-
1590
- #### `add`
1591
-
1592
- Add a profile
1593
-
1594
- **Resources:** profile
1595
-
1596
- **Positional arguments:**
1597
-
1598
- - **profile:** `<name>` (required)
1599
-
1600
- **Flags:**
1601
-
1602
- | Flag | Type | Required | Description |
1603
- |------|------|----------|-------------|
1604
- | `--baseUrl` | string | | Cluster base URL |
1605
- | `--clientId` | string | | OAuth client ID |
1606
- | `--clientSecret` | string | | OAuth client secret |
1607
- | `--audience` | string | | OAuth audience |
1608
- | `--oAuthUrl` | string | | OAuth token URL |
1609
- | `--scope` | string | | OAuth scope (space-separated) |
1610
- | `--defaultTenantId` | string | | Default tenant ID |
1611
- | `--username` | string | | Basic auth username |
1612
- | `--password` | string | | Basic auth password |
1613
- | `--from-file` | string | | Import from .env file |
1614
- | `--from-env` | boolean | | Import from environment variables |
1615
-
1616
- ---
1617
-
1618
- #### `remove`
1619
-
1620
- Remove a profile (alias: rm)
1621
-
1622
- **Usage:** `c8ctl remove profile <name>`
1623
-
1624
- **Aliases:** `rm`
1625
-
1626
- **Resources:** profile
1627
-
1628
- **Positional arguments:**
1629
-
1630
- - **profile:** `<name>` (optional)
1631
-
1632
- **Flags:**
1633
-
1634
- | Flag | Type | Required | Description |
1635
- |------|------|----------|-------------|
1636
- | `--none` | boolean | | Clear active profile |
1637
-
1638
- ---
1639
-
1640
- #### `load`
1641
-
1642
- Load a c8ctl plugin (npm registry or URL)
1643
-
1644
- **Usage:** `c8ctl load plugin [name|--from url]`
1645
-
1646
- **Resources:** plugin
1647
-
1648
- **Positional arguments:**
1649
-
1650
- - **plugin:** `<package>` (optional)
1651
-
1652
- **Flags:**
1653
-
1654
- | Flag | Type | Required | Description |
1655
- |------|------|----------|-------------|
1656
- | `--from` | string | | Load plugin from URL |
1657
-
1658
- **Examples:**
1659
-
1660
- ```bash
1661
- c8ctl load plugin my-plugin # Load plugin from npm registry
1662
- c8ctl load plugin --from https://github.com/org/plugin # Load plugin from URL
1663
- ```
1664
-
1665
- ---
1666
-
1667
- #### `unload`
1668
-
1669
- Unload a c8ctl plugin (npm uninstall wrapper)
1670
-
1671
- **Usage:** `c8ctl unload plugin <name>`
1672
-
1673
- **Aliases:** `rm`
1674
-
1675
- **Resources:** plugin
1676
-
1677
- **Positional arguments:**
1678
-
1679
- - **plugin:** `<package>` (required)
1680
-
1681
- **Flags:**
1682
-
1683
- | Flag | Type | Required | Description |
1684
- |------|------|----------|-------------|
1685
- | `--force` | boolean | | Force unload without confirmation |
1686
-
1687
- ---
1688
-
1689
- #### `upgrade`
1690
-
1691
- Upgrade a plugin (respects source type)
1692
-
1693
- **Usage:** `c8ctl upgrade plugin <name> [version]`
1694
-
1695
- **Resources:** plugin
1696
-
1697
- **Positional arguments:**
1698
-
1699
- - **plugin:** `<package>` (required), `<version>` (optional)
1700
-
1701
- **Examples:**
1702
-
1703
- ```bash
1704
- c8ctl upgrade plugin my-plugin # Upgrade plugin to latest version
1705
- c8ctl upgrade plugin my-plugin 1.2.3 # Upgrade plugin to a specific version (source-aware)
1706
- ```
1707
-
1708
- ---
1709
-
1710
- #### `downgrade`
1711
-
1712
- Downgrade a plugin to a specific version
1713
-
1714
- **Usage:** `c8ctl downgrade plugin <name> <version>`
1715
-
1716
- **Resources:** plugin
1717
-
1718
- **Positional arguments:**
1719
-
1720
- - **plugin:** `<package>` (required), `<version>` (required)
1721
-
1722
- ---
1723
-
1724
- #### `sync`
1725
-
1726
- Synchronize plugins from registry (rebuild/reinstall)
1727
-
1728
- **Resources:** plugin
1729
-
1730
- **Examples:**
1731
-
1732
- ```bash
1733
- c8ctl sync plugin # Synchronize plugins
1734
- ```
1735
-
1736
- ---
1737
-
1738
- #### `init`
1739
-
1740
- Create a new plugin from TypeScript template
1741
-
1742
- **Resources:** plugin
1743
-
1744
- **Positional arguments:**
1745
-
1746
- - **plugin:** `<name>` (optional)
1747
-
1748
- **Examples:**
1749
-
1750
- ```bash
1751
- c8ctl init plugin my-plugin # Create new plugin from template (c8ctl-plugin-my-plugin)
1752
- ```
1753
-
1754
- ---
1755
-
1756
- #### `doctor`
1757
-
1758
- Surface plugin-loading collisions detected at startup (#363). Reports loaded plugins with their command names, and any first-registration-wins drops (plugin-name or command-name).
1759
-
1760
- **Resources:** plugin
1761
-
1762
- **Examples:**
1763
-
1764
- ```bash
1765
- c8ctl doctor plugin # List loaded plugins and any load-time collisions
1766
- c8ctl doctor plugin --json # Machine-readable doctor output
1767
- ```
1768
-
1769
- ---
1770
-
1771
- #### `use`
1772
-
1773
- Set active profile or tenant
1774
-
1775
- **Usage:** `c8ctl use profile|tenant`
1776
-
1777
- **Resources:** profile, tenant
1778
-
1779
- **Positional arguments:**
1780
-
1781
- - **profile:** `<name>` (optional)
1782
- - **tenant:** `<tenantId>` (required)
1783
-
1784
- **Flags:**
1785
-
1786
- | Flag | Type | Required | Description |
1787
- |------|------|----------|-------------|
1788
- | `--none` | boolean | | Clear active profile/tenant |
1789
-
1790
- **Examples:**
1791
-
1792
- ```bash
1793
- c8ctl use profile prod # Set active profile
1794
- ```
1795
-
1796
- ---
1797
-
1798
- #### `output`
1799
-
1800
- Show or set output format
1801
-
1802
- **Usage:** `c8ctl output [json|text]`
1803
-
1804
- **Resources:** json, text
1805
-
1806
- **Examples:**
1807
-
1808
- ```bash
1809
- c8ctl output json # Switch to JSON output
1810
- ```
1811
-
1812
- ---
1813
-
1814
- #### `completion`
1815
-
1816
- Generate shell completion script
1817
-
1818
- **Usage:** `c8ctl completion bash|zsh|fish|install`
1819
-
1820
- **Resources:** bash, zsh, fish, install
1821
-
1822
- **Resource-specific flags:**
1823
-
1824
- <details>
1825
- <summary><code>install</code></summary>
1826
-
1827
- | Flag | Type | Required | Description |
1828
- |------|------|----------|-------------|
1829
- | `--shell` | string | | Shell to install completions for (bash, zsh, fish) |
1830
-
1831
- </details>
1832
-
1833
- **Examples:**
1834
-
1835
- ```bash
1836
- c8ctl completion bash # Generate bash completion script
1837
- c8ctl completion install # Auto-detect shell and install completions (auto-refreshes on upgrade)
1838
- c8ctl completion install --shell zsh # Install completions for a specific shell
1839
- ```
1840
-
1841
- ---
1842
-
1843
- #### `mcp-proxy`
1844
-
1845
- Start a STDIO MCP proxy (bridges local MCP clients to remote Camunda 8)
1846
-
1847
- **Usage:** `c8ctl mcp-proxy [mcp-path]`
1848
-
1849
- ---
1850
-
1851
- #### `feedback`
1852
-
1853
- Open the feedback page to report issues or request features
1854
-
1855
- ---
1856
-
1857
- #### `help`
1858
-
1859
- Show help (run 'c8ctl help \<command>' for details)
1860
-
1861
- **Usage:** `c8ctl help [command]`
1862
-
1863
- **Aliases:** `menu`
1864
-
1865
- ---
1866
-
1867
- #### `which`
1868
-
1869
- Show active profile or output mode
1870
-
1871
- **Resources:** profile, output
1872
-
1873
- **Examples:**
1874
-
1875
- ```bash
1876
- c8ctl which profile # Show currently active profile
1877
- c8ctl which output # Show current output mode
1878
- ```
197
+ For the complete reference of every command, flag, resource, and alias, see:
1879
198
 
199
+ - [`docs/command-reference.md`](docs/command-reference.md) in this repository, or
200
+ - the [c8ctl command reference](https://docs.camunda.io/docs/next/apis-tools/c8ctl/command-reference/) on docs.camunda.io.
1880
201
 
1881
202
  <!-- command-reference:end -->
1882
203