{"id":46744956,"url":"https://github.com/grafvonb/c8volt","last_synced_at":"2026-05-09T09:27:51.055Z","repository":{"id":321910870,"uuid":"1087571627","full_name":"grafvonb/c8volt","owner":"grafvonb","description":"c8volt is a Camunda CLI for Camunda 8 operations.","archived":false,"fork":false,"pushed_at":"2026-04-23T16:01:20.000Z","size":15772,"stargazers_count":7,"open_issues_count":5,"forks_count":1,"subscribers_count":0,"default_branch":"develop","last_synced_at":"2026-04-23T18:03:15.041Z","etag":null,"topics":["camunda","cli"],"latest_commit_sha":null,"homepage":"https://c8volt.info","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/grafvonb.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":"COPYRIGHT","agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2025-11-01T07:19:17.000Z","updated_at":"2026-04-23T15:41:41.000Z","dependencies_parsed_at":null,"dependency_job_id":"ecc23bb7-b667-4a01-b56d-3bc9c00be6f2","html_url":"https://github.com/grafvonb/c8volt","commit_stats":null,"previous_names":["grafvonb/c8volt"],"tags_count":37,"template":false,"template_full_name":null,"purl":"pkg:github/grafvonb/c8volt","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/grafvonb%2Fc8volt","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/grafvonb%2Fc8volt/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/grafvonb%2Fc8volt/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/grafvonb%2Fc8volt/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/grafvonb","download_url":"https://codeload.github.com/grafvonb/c8volt/tar.gz/refs/heads/develop","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/grafvonb%2Fc8volt/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32297900,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-26T09:34:17.070Z","status":"ssl_error","status_checked_at":"2026-04-26T09:34:00.993Z","response_time":129,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["camunda","cli"],"created_at":"2026-03-09T19:38:34.536Z","updated_at":"2026-05-09T09:27:51.040Z","avatar_url":"https://github.com/grafvonb.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cimg src=\"./docs/logo/c8volt_logo_transparent_w_shadow_400x244_dim.png\" alt=\"c8volt logo\" /\u003e\n\n# c8volt Camunda 8 CLI\n\n**Operator-grade Camunda 8 control for people and pipelines. 8.9-ready, script-safe, and built to finish the job.**\n\n\u003e **done is done**\n\u003e\n\u003e If an action needs retries, waiting, tree traversal, state checks, cleanup, or deterministic machine output before it is truly finished, `c8volt` should do that work for you.\n\n`c8volt` is a Camunda 8 CLI for teams that care about outcomes, not just accepted requests. It is built for operators, developers, support engineers, CI pipelines, and AI agents that need one reliable command line for setup, inspection, recovery, and cleanup.\n\n## Why c8volt\n\nCamunda operations rarely end when an API accepts a request. `c8volt` is shaped around the questions operators ask next:\n\n- Did the process instance actually reach `ACTIVE`?\n- Which incident or variable explains the current state?\n- What else is in the same process tree?\n- Did the cancellation hit the root that really matters?\n- Did deletion remove the whole family, not just one visible node?\n- Can scripts and agents discover the command contract without scraping help text?\n- Can unattended runs fail clearly without hanging on prompts?\n\nThat is the gap `c8volt` closes.\n\n## At A Glance\n\n- deploy BPMN and start using it immediately\n- run process instances and confirm they become active\n- update process-instance-scope variables and confirm visibility\n- inspect process trees with incidents and variables in context\n- preview, cancel, and delete process-instance families safely\n- wait for state or incident conditions in scripts\n- search, page, count, and batch process-instance results\n- work by profile and tenant on shared clusters\n- validate config and test real Camunda connectivity\n- discover the public command surface with `capabilities --json`\n- run supported commands non-interactively with `--automation`\n\n## Fast Start\n\nFrom zero to a real Camunda read in a few minutes. Download the matching archive from [c8volt Releases](https://github.com/grafvonb/c8volt/releases), unpack it, then:\n\n```bash\n# 1. Install: make sure the unpacked binary runs.\n./c8volt version\n\n# 2. Create a config next to the binary.\ncp config.example.yaml config.yaml\n\n# 3. Edit only the essentials:\n#    app.camunda_version: \"8.9\"\n#    apis.camunda_api.base_url: \"http://localhost:8080\"\n#    auth.mode: \"none\"\n#\n#    Use auth.mode: \"oauth2\" for protected clusters and fill the oauth2 block.\n./c8volt config validate\n\n# 4. Test the real connection.\n./c8volt config test-connection\n\n# 5. Run the first safe command.\n./c8volt get cluster version\n```\n\nWhen `config.yaml` sits next to the `c8volt` executable, it is loaded automatically. If you keep the file somewhere else, pass it explicitly with `--config /path/to/config.yaml`.\n\nFor a source checkout, the starter file lives at `config/templates/config.example.yaml`:\n\n```bash\ncp config/templates/config.example.yaml config.yaml\n```\n\nThe smallest local/dev config is this:\n\n```yaml\napp:\n  camunda_version: \"8.9\"\napis:\n  camunda_api:\n    base_url: \"http://localhost:8080\"\nauth:\n  mode: \"none\"\n```\n\nOnce that works, look around:\n\n```bash\n./c8volt get cluster topology\n./c8volt get pd --latest\n```\n\nNeed something runnable in an empty dev cluster? Deploy the bundled BPMN examples:\n\n```bash\n./c8volt embed deploy --all --run\n```\n\nFor scripts or CI, add `--json` when stdout should be data and logs should stay on stderr:\n\n```bash\n./c8volt config test-connection --json\n```\n\nAfter the first command, jump to [Configuration Notes](#configuration-notes) for profiles, OAuth, tenants, and precedence.\n\n## Supported Camunda Versions\n\n`c8volt` supports Camunda `8.7`, `8.8`, and `8.9`.\n\n`8.9` is a first-class runtime target. The everyday operator loop is covered: cluster metadata, definitions, resources, process-instance search, wait, walk, run, cancel, delete, tenant handling, and JSON output for automation.\n\n`8.8` remains the established baseline. Process-instance variable updates and `get job`/`update job` commands are supported on Camunda `8.8` and `8.9`; Camunda `8.7` returns an unsupported-version error for those state-changing job and variable update commands. `8.7` remains supported with known upstream limitations where tenant-safe direct keyed process-instance behavior is not available.\n\n## Core Workflows\n\n### Start And Confirm\n\n```bash\n./c8volt get pd --latest\n./c8volt run pi -b C88_SimpleUserTask_Process\n```\n\nBy default, `c8volt` waits until the process instance is actually active. If you explicitly want asynchronous behavior:\n\n```bash\n./c8volt run pi -b C88_SimpleUserTask_Process --no-wait\n```\n\nFor batch execution:\n\n```bash\n./c8volt run pi -b C88_SimpleUserTask_Process -n 100 --workers 8\n```\n\n### Update Runtime Variables\n\n```bash\n./c8volt update pi --key 2251799813711967 --vars '{\"customerTier\":\"gold\"}'\n./c8volt update process-instance --key 2251799813711967 --vars '{\"customerTier\":\"gold\"}'\nprintf '%s\\n' 2251799813711967 2251799813711968 | ./c8volt update pi - --vars '{\"customerTier\":\"gold\"}'\n```\n\nBy default, `update pi` submits the variable mutation and waits until the requested process-instance-scope values are visible through the same lookup path used by `get pi --with-vars`. The `--vars` value must be a JSON object; repeated `--key` flags and stdin `-` keys are merged and deduplicated before the same variable map is applied to each target.\n\nUse `--no-wait` when accepted/submitted output is enough:\n\n```bash\n./c8volt update pi --key 2251799813711967 --vars '{\"customerTier\":\"gold\"}' --no-wait\n```\n\nProcess-instance variable updates are available on Camunda `8.8` and `8.9`. Camunda `8.7` fails before mutation with an unsupported-version error.\n\n### Inspect And Update Jobs\n\n```bash\n./c8volt get job --key 2251799813711967\n./c8volt --json get job --key 2251799813711967\n./c8volt update job --key 2251799813711967 --retries 3 --dry-run\n./c8volt update job --key 2251799813711967 --retries 3 --auto-confirm\n./c8volt update job --key 2251799813711967 --timeout 5m --auto-confirm\n./c8volt update job --key 2251799813711967 --retries 3 --no-wait --auto-confirm\n```\n\nUse `get job` with the `jobKey` from incident-aware process-instance output to inspect the matching runtime job directly. Human job output keeps the full error message by default; use `--error-message-limit` when terminal output should be shortened. `update job` supports retry and timeout changes on Camunda `8.8` and `8.9`; retry changes are confirmed by reading the job by key by default, while timeout changes report submitted milliseconds without claiming deadline confirmation. Use `--dry-run` to preview the plan without mutation, `--auto-confirm` or `--automation` for unattended mutations, and `--no-wait` when accepted/submitted output is enough.\n\n### Walk Before You Change\n\n```bash\n./c8volt walk pi --key 2251799813711967\n./c8volt walk pi --key 2251799813711967 --with-incidents\n./c8volt walk pi --key 2251799813711967 --with-vars --with-incidents\n./c8volt walk pi --key 2251799813711967 --flat\n```\n\nUse `walk pi` before a risky action. It shows the process-instance family tree, which is usually where the real cancellation or deletion scope becomes obvious.\n\nFor diagnosis, add `--with-incidents` and/or `--with-vars`. Human output stays compact; `--json` gives scripts the full structured details.\n\n### Cancel Safely\n\nCamunda may reject direct cancellation of a child instance when the real action must happen at the root.\n\n```bash\n./c8volt cancel pi --key 2251799813711977\n./c8volt cancel pi --key 2251799813711977 --dry-run\n./c8volt cancel pi --key 2251799813711977 --force\n./c8volt cancel pi --state active --start-date-before 2026-03-31\n./c8volt cancel pi --state active --start-date-newer-days 30\n```\n\nWith `--dry-run`, `c8volt` previews the selected process instances, process-instance trees to cancel, process instances in scope, selected instances already in final state, and any partial-scope details without submitting cancellation. With `--force`, `c8volt` escalates from the selected child to the root process instance and waits for the family-level outcome.\n\n### Delete Thoroughly\n\n```bash\n./c8volt delete pi --key 2251799813711967 --dry-run\n./c8volt delete pi --key 2251799813711967 --force\n./c8volt delete pi --state completed --end-date-after 2026-01-01 --end-date-before 2026-01-31 --auto-confirm\n./c8volt get pi --state completed --keys-only | ./c8volt delete pi --auto-confirm -\n```\n\nDeletion in real environments often means preview the family scope, cancel-first when needed, then remove, then verify. `--dry-run` shows selected instances already in final state and process instances not in final state. Delete is all-or-nothing for the affected scope: if any selected or dependency-expanded process instance is not in a final state, c8volt refuses the whole delete batch before submitting any delete request. Use `--force` when the affected scope must be canceled first and then deleted.\n\n### Wait For A Known State Or Incident\n\n```bash\n./c8volt expect pi --key \u003cprocess-instance-key\u003e --state active\n./c8volt expect pi --key \u003cprocess-instance-key\u003e --incident true\n./c8volt expect pi --key \u003cprocess-instance-key\u003e --state active --incident false\n./c8volt expect pi --key \u003cprocess-instance-key\u003e --state completed --state absent\n./c8volt expect pi --key \u003cprocess-instance-key\u003e --state canceled\n./c8volt get pi --key \u003cprocess-instance-key\u003e --keys-only | ./c8volt expect pi --incident true -\n```\n\n`expect` waits for `active`, `completed`, `canceled`, `terminated`, or `absent`; it can also wait for `--incident true|false`, alone or with `--state`. Piped keys work for bulk verification flows.\n\n### Search And Page Process Instances\n\n```bash\n./c8volt get pi --state active\n./c8volt get pi --state active --total\n./c8volt get pi --state active --batch-size 250 --limit 25\n./c8volt cancel pi --state active --batch-size 250 --limit 25 --dry-run\n./c8volt cancel pi --state active --batch-size 250 --limit 25\n./c8volt delete pi --state completed --batch-size 250 --limit 25 --dry-run\n./c8volt delete pi --state completed --batch-size 250 --limit 25 --auto-confirm\n```\n\nSearch-based `get pi`, `cancel pi`, and `delete pi` work page by page instead of silently stopping at the first large result set. Human-oriented modes prompt before continuing unless `--auto-confirm` or `--json` is set. JSON mode consumes remaining pages and returns one aggregated result.\n\nFor bulk work, check the batch first, then act:\n\n```bash\n./c8volt get pi --bpmn-process-id \u003cbpmn-process-id\u003e --state active --total\n./c8volt cancel pi --bpmn-process-id \u003cbpmn-process-id\u003e --state active --dry-run\n./c8volt cancel pi --bpmn-process-id \u003cbpmn-process-id\u003e --state active --auto-confirm\n```\n\nUse `--batch-size` or `-n` to control how many process instances each backend page may fetch. Use `--limit` or `-l` to cap the total number of matched process instances returned or processed across all pages.\n\nWhen a script only needs the count of matching process instances, `./c8volt get pi --total` prints only the numeric total. If Camunda reports a capped search total, c8volt keeps paging and counts the matching process instances instead of returning the capped lower bound.\n\n### Resolve From User Task Keys\n\n```bash\n./c8volt get pi --has-user-tasks \u003cuser-task-key\u003e\n./c8volt get pi --has-user-tasks \u003cuser-task-key\u003e --has-user-tasks \u003canother-user-task-key\u003e\n./c8volt get pi --has-user-tasks \u003cuser-task-key\u003e --json\n```\n\n`--has-user-tasks` resolves owning process instances through tenant-aware Camunda v2 user-task search first, then renders the process instances through the same keyed path as `get pi --key \u003cprocess-instance-key\u003e`. Human output, JSON output, `--keys-only`, tenant handling, and process-instance not-found behavior therefore stay aligned with direct keyed lookup.\n\nOn Camunda `8.8` and `8.9`, a not-found v2 user-task result falls back to deprecated Tasklist V1 lookup for legacy user-task compatibility. Camunda `8.7` remains unsupported for `--has-user-tasks`, and non-not-found lookup failures are surfaced instead of being retried as fallback misses.\n\n### Pull Exact Artifacts\n\n```bash\n./c8volt get pd --key \u003cprocess-definition-key\u003e --xml\n./c8volt get pd --bpmn-process-id C88_SimpleUserTask_Process --latest --stat\n./c8volt get resource --id \u003cresource-key\u003e\n```\n\nFor `get pd --stat`, Camunda `8.8` and `8.9` report process-instance counts for the exact process-definition version: `ac:\u003ccount\u003e` for active, `cp:\u003ccount\u003e` for completed, `cx:\u003ccount\u003e` for canceled, and `inc:\u003ccount\u003e` for process instances having at least one incident. Camunda `8.7` rejects statistics because the generated client surface does not provide the same native statistics endpoints.\n\n### Narrow Process Instances\n\n```bash\n./c8volt get pi --state active --incidents-only\n./c8volt get pi --incidents-only --with-incidents\n./c8volt get pi --with-incidents --incident-message-limit 80\n./c8volt get pi --key \u003cprocess-instance-key\u003e --with-incidents\n./c8volt get pi --key \u003cprocess-instance-key\u003e --with-incidents --json\n./c8volt get pi --with-vars\n./c8volt get pi --key \u003cprocess-instance-key\u003e --with-vars\n./c8volt get pi --key \u003cprocess-instance-key\u003e --with-vars --with-incidents\n./c8volt get pi --key \u003cprocess-instance-key\u003e --with-vars --var-value-limit 120\n./c8volt get pi --key \u003cprocess-instance-key\u003e --with-vars --json\n./c8volt get pi --roots-only\n./c8volt get pi --children-only\n./c8volt get pi --orphan-children-only\n./c8volt get pi --start-date-after 2026-01-01 --start-date-before 2026-01-31\n./c8volt get pi --start-date-older-days 7 --start-date-newer-days 30\n./c8volt get pi --end-date-before 2026-03-31 --state completed\n```\n\nHuman process-instance lists mark only incident-bearing instances with `inc!`; instances without incidents omit the incident marker to keep long lists scannable.\n\nUse `--json` when a script needs stable fields and `--keys-only` when piping process-instance keys into another command. Human list output is optimized for scanning; walk output remains tree- or path-oriented.\n\nFor incident diagnosis, add `--with-incidents` to keyed or list/search `get pi` output. Direct incident keys and messages appear beneath the matching process-instance row. If the row only tells you there is an incident somewhere in the tree, jump to `walk pi --key \u003ckey\u003e --with-incidents`. Add `--incident-message-limit \u003cchars\u003e` for terminal-friendly output; JSON keeps full messages.\n\nWhen incident output includes `jobKey`, use `get job --key \u003cjob-key\u003e` for direct job details. To remediate job retries or timeout, preview with `update job --dry-run`, then submit with `--auto-confirm` or `--automation`; use `--no-wait` when your script will verify later.\n\nFor variable inspection, add `--with-vars` to keyed or list/search `get pi` output, or to keyed `walk pi` output. Combine it with `--with-incidents` when you need runtime data and failure context in one view. Human values are full by default; add `--var-value-limit \u003cchars\u003e` for noisy payloads. JSON keeps received values and metadata intact.\n\nThe `--start-date-*` and `--end-date-*` flags are inclusive `YYYY-MM-DD` bounds for search/list usage. Relative day filters use `--*-date-older-days N` for `N` days old or older and `--*-date-newer-days N` for `N` days old or newer.\n\n## Configuration Notes\n\n### Precedence\n\n`c8volt` resolves config-backed settings with one shared order:\n\n```text\nflag \u003e env \u003e profile \u003e base config \u003e default\n```\n\nThat applies to root persistent flags such as `--tenant` and `--profile`, command-local config-backed flags, API base URLs, auth mode, and auth credentials/scopes. When `c8volt` cannot determine a safe winner, it fails explicitly instead of guessing.\n\nUse `./c8volt config show` to inspect the effective configuration that a command will use. Prefer `./c8volt config validate` for local validation, `./c8volt config template` for a starter file, and `./c8volt config test-connection` before running changes against a cluster.\n\n### Configuration Flow\n\nUse the setup commands as three small gates:\n\n```bash\n# 1. Shape: is config.yaml valid YAML with supported values?\n./c8volt config validate\n\n# 2. Effective config: what will c8volt actually use after flags/env/profiles?\n./c8volt config show\n\n# 3. Network: can c8volt reach Camunda with that exact config?\n./c8volt config test-connection\n```\n\nWhen the network gate succeeds, `config test-connection` reports the selected profile, the tested Camunda base URL, and the cluster gateway version. If the configured Camunda version and gateway version differ by major/minor version, fix the config unless you have a very good reason not to; Camunda APIs can differ between versions.\n\nFor automation:\n\n```bash\n./c8volt config test-connection --json\n```\n\n### Process-Instance Page Size\n\nSearch-based `get pi`, `cancel pi`, and `delete pi` use the backend maximum of `1000` when no page size is configured. Set a lower default when you want smaller, steadier batches:\n\n```yaml\napp:\n  process_instance_page_size: 250\n```\n\n`--batch-size` overrides this for one command run. `C8VOLT_APP_PROCESS_INSTANCE_PAGE_SIZE` provides the same setting through the environment.\n\n### Tenant Handling\n\n`c8volt` supports tenant-aware operations through:\n\n- `app.tenant` in the config file\n- the global `--tenant` flag for per-command override\n\nCommands that create tenant-owned data, including `deploy pd`, `embed deploy`, `deploy pd --run`, and `run pi`, use Camunda's `\u003cdefault\u003e` tenant when the effective tenant is empty. Read/search commands preserve an empty tenant as an unscoped visible-tenants query unless `--tenant` is provided.\n\n```yaml\napp:\n  tenant: \"tenant-a\"\n```\n\n```bash\n./c8volt --tenant tenant-a run pi -b C88_SimpleUserTask_Process\n./c8volt --tenant tenant-a embed deploy --file processdefinitions/C88_SimpleUserTaskProcess.bpmn\n./c8volt --tenant tenant-a get pd --latest\n```\n\n### OAuth\n\nUse this pattern when one OAuth token is enough for the operations you run:\n\n```yaml\napp:\n  camunda_version: \"8.9\"\napis:\n  camunda_api:\n    base_url: \"https://camunda.example.com\"\nauth:\n  mode: oauth2\n  oauth2:\n    token_url: \"https://login.example.com/oauth/token\"\n    client_id: \"c8volt\"\n    client_secret: \"${set via env}\"\nlog:\n  level: info\n```\n\nSensitive values are safer in environment variables than in committed config files:\n\n```bash\nexport C8VOLT_AUTH_OAUTH2_CLIENT_SECRET='super-secret'\nexport C8VOLT_AUTH_OAUTH2_CLIENT_ID='c8volt'\n./c8volt --profile prod config validate\n```\n\nUse profiles when you need to switch environments without copying files:\n\n```yaml\nactive_profile: local\n\napp:\n  camunda_version: \"8.9\"\n\nprofiles:\n  local:\n    apis:\n      camunda_api:\n        base_url: \"http://localhost:8080\"\n    auth:\n      mode: none\n\n  prod:\n    app:\n      tenant: \"tenant-a\"\n    apis:\n      camunda_api:\n        base_url: \"https://camunda.example.com\"\n    auth:\n      mode: oauth2\n      oauth2:\n        token_url: \"https://login.example.com/oauth/token\"\n        client_id: \"c8volt\"\n```\n\n```bash\n./c8volt --profile local get cluster topology\n./c8volt --profile prod get cluster topology\n./c8volt --profile prod get cluster version --with-brokers\n```\n\n## Automation And Pipelines\n\nHuman-first discovery:\n\n```bash\n./c8volt --help\n./c8volt get --help\n./c8volt run process-instance --help\n```\n\nMachine-first discovery:\n\n```bash\n./c8volt capabilities --json\n```\n\nThe discovery document reports public command paths, visible flags, output modes, mutation behavior, contract support, and whether a command explicitly supports `--automation`.\nOperational commands that support `--json` return one shared result envelope with `outcome`, `command`, and command-specific `payload` fields.\n\nFor supported command paths, combine `--automation` with `--json` when you need deterministic unattended execution and machine-readable stdout:\n\n```bash\n./c8volt capabilities --json\n./c8volt --automation --json run pi -b C88_SimpleUserTask_Process\n./c8volt --automation --json run pi -b C88_SimpleUserTask_Process --no-wait\n./c8volt --automation --json update pi --key \u003cprocess-instance-key\u003e --vars '{\"customerTier\":\"gold\"}' --no-wait\n./c8volt --automation --json update job --key \u003cjob-key\u003e --retries 3 --auto-confirm\n./c8volt --automation --json get pi --bpmn-process-id C88_SimpleUserTask_Process --state active\n```\n\nUseful pipeline controls:\n\n- `--json` for structured output\n- `--keys-only` for command chaining\n- `--automation` for non-interactive mode on supported commands\n- `--auto-confirm` for bulk flows that should continue without repeated prompts\n- `--workers` for controlled concurrency\n- `--fail-fast` when one error should stop the next wave of work\n- `--timeout` for per-invocation HTTP request timeout control\n- `--quiet` and `--verbose` for different execution contexts\n- `--profile` and `--config` for environment switching\n\nExamples:\n\n```bash\n./c8volt get pi --key \u003cprocess-instance-key\u003e --keys-only | ./c8volt cancel pi --auto-confirm --no-wait -\n./c8volt get pi --state active --keys-only | ./c8volt update pi - --vars '{\"priority\":\"high\"}' --no-wait\n./c8volt get job --key \u003cjob-key\u003e\n./c8volt update job --key \u003cjob-key\u003e --retries 3 --dry-run\n./c8volt update job --key \u003cjob-key\u003e --retries 3 --no-wait --auto-confirm\n./c8volt get pd --bpmn-process-id C88_SimpleUserTask_Process --latest --keys-only | ./c8volt delete pd --allow-inconsistent --auto-confirm --no-wait -\n```\n\n## Command Map\n\n```text\nc8volt\n|-- embed                     Work with bundled BPMN fixtures\n|   |-- list                  List bundled BPMN assets\n|   |-- deploy                Deploy bundled fixtures\n|   `-- export                Export bundled fixtures\n|-- deploy                    Deploy resources from files or stdin\n|   `-- pd                    Deploy BPMN process definitions\n|-- run                       Start runnable resources\n|   `-- pi                    Start process instances and confirm activation by default\n|-- update                    Update existing resources\n|   |-- pi                    Update process-instance variables and confirm visibility by default\n|   `-- job                   Update job retries and timeout by key\n|-- walk                      Inspect parent/child relationships\n|   `-- pi                    Walk ancestors, descendants, or full family trees\n|-- cancel                    Cancel resources and wait for confirmation\n|   `-- pi                    Cancel process instances, including root escalation with --force\n|-- delete                    Delete resources, optionally forcing cleanup first\n|   |-- pi                    Delete process instance trees\n|   `-- pd                    Delete process definitions with safety warnings\n|-- expect                    Wait until resources reach a target state\n|   `-- pi                    Wait for state or incident conditions\n|-- get                       Read state, metadata, and resources\n|   |-- cluster topology      Show connected Camunda cluster topology as a tree\n|   |-- cluster version       Show gateway and optional broker versions\n|   |-- cluster license       Show cluster license details\n|   |-- process-definition    List definitions, fetch latest versions, or retrieve XML\n|   |-- process-instance      List, fetch, and enrich process instances\n|   |-- job                   Inspect a job by key\n|   |-- tenant                List, filter, or fetch visible tenants\n|   `-- resource              Fetch a single resource by id\n|-- capabilities              Describe the public CLI contract for automation and discovery\n|-- completion                Generate shell completion scripts\n|-- config                    Inspect and validate c8volt configuration\n|   |-- show                  Show effective configuration\n|   |-- validate              Validate effective configuration\n|   |-- template              Print a blank configuration template\n|   `-- test-connection       Test configured Camunda connection\n`-- version                   Print build and compatibility information\n```\n\n## Everyday Commands\n\nThese are the commands most teams reach for during normal development,\nsupport, and operations loops: deploy something, start it, find the affected\ninstances, inspect the tree, wait for the outcome, and clean up safely.\n\n```bash\n# Deploy or redeploy BPMN, then verify the latest definition Camunda sees.\n./c8volt deploy pd --file \u003cprocess.bpmn\u003e\n./c8volt deploy pd --file \u003cprocess.bpmn\u003e --run\n./c8volt get pd --bpmn-process-id \u003cbpmn-process-id\u003e --latest --stat\n\n# Local fixture loop for quick smoke tests.\n./c8volt embed deploy --file processdefinitions/C88_SimpleUserTaskProcess.bpmn --run\n\n# Start process instances from the latest version.\n./c8volt run pi -b \u003cbpmn-process-id\u003e --vars '{\"customerId\":\"1234\"}'\n./c8volt run pi -b \u003cbpmn-process-id\u003e -n 25 --workers 5\n\n# Update process-instance-scope variables.\n./c8volt update pi --key \u003cprocess-instance-key\u003e --vars '{\"customerTier\":\"gold\"}'\n./c8volt get pi --state active --keys-only | ./c8volt update pi - --vars '{\"priority\":\"high\"}' --no-wait\n\n# Inspect and update jobs from incident job keys.\n./c8volt get job --key \u003cjob-key\u003e\n./c8volt update job --key \u003cjob-key\u003e --retries 3 --dry-run\n./c8volt update job --key \u003cjob-key\u003e --timeout 5m --auto-confirm\n./c8volt update job --key \u003cjob-key\u003e --retries 3 --no-wait --auto-confirm\n\n# Find active work, incidents, and exact instance details.\n./c8volt get pi --bpmn-process-id \u003cbpmn-process-id\u003e --state active\n./c8volt --automation --json get pi --bpmn-process-id \u003cbpmn-process-id\u003e --state active\n./c8volt get pi --state active --incidents-only\n./c8volt get pi --key \u003cprocess-instance-key\u003e --with-incidents\n./c8volt get pi --state active --with-vars\n./c8volt get pi --key \u003cprocess-instance-key\u003e --with-vars --with-incidents\n./c8volt get pi --state active --total\n\n# Inspect parent/child relationships before taking action.\n./c8volt walk pi --key \u003cprocess-instance-key\u003e\n./c8volt walk pi --key \u003cprocess-instance-key\u003e --with-incidents\n./c8volt walk pi --key \u003cprocess-instance-key\u003e --with-vars --with-incidents\n./c8volt walk pi --key \u003cprocess-instance-key\u003e --flat\n\n# Wait for automation-visible outcomes.\n./c8volt expect pi --key \u003cprocess-instance-key\u003e --state active\n./c8volt expect pi --key \u003cprocess-instance-key\u003e --incident true\n./c8volt expect pi --key \u003cprocess-instance-key\u003e --state active --incident false\n./c8volt expect pi --key \u003cprocess-instance-key\u003e --state completed --state absent\n\n# Preview and perform cancellation.\n./c8volt cancel pi --key \u003cprocess-instance-key\u003e --dry-run\n./c8volt cancel pi --key \u003cprocess-instance-key\u003e --force\n./c8volt get pi --state active --keys-only | ./c8volt cancel pi --auto-confirm --no-wait -\n\n# Preview and perform cleanup of completed instances.\n./c8volt delete pi --state completed --end-date-older-days 7 --limit 25 --dry-run\n./c8volt delete pi --state completed --end-date-older-days 7 --auto-confirm\n./c8volt expect pi --key \u003cprocess-instance-key\u003e --state absent\n```\n\n## Documentation\n\n- Project site: [c8volt.info](https://c8volt.info)\n- Generated CLI reference: [c8volt.info/cli](https://c8volt.info/cli/)\n- Releases: [github.com/grafvonb/c8volt/releases](https://github.com/grafvonb/c8volt/releases)\n\n## Project Governance\n\n- License and copyright: [LICENSE](./LICENSE), [COPYRIGHT](./COPYRIGHT), and [NOTICE.md](./NOTICE.md)\n- Trademark policy: [TRADEMARKS.md](./TRADEMARKS.md)\n- Contributing and DCO sign-off: [CONTRIBUTING.md](./CONTRIBUTING.md)\n- Security reporting: [SECURITY.md](./SECURITY.md)\n\n## Copyright\n\n(c) 2026 Adam Bogdan Boczek | \u003ca href=\"https://boczek.info\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eboczek.info\u003c/a\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgrafvonb%2Fc8volt","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgrafvonb%2Fc8volt","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgrafvonb%2Fc8volt/lists"}