config:set & config:get
CLI commands for safely reading and modifying workspace.yaml with Zod schema validation. Both commands use the same key routing logic: all keys must be fully qualified from the workspace root (e.g., software_delivery.gates.minCoverage, not gates.minCoverage).
Key Routing
Section titled “Key Routing”When you provide a key, both config:set and config:get route it based on its first segment:
| First segment matches | Behavior | Example key |
|---|---|---|
| Writable root key | Writes/reads directly at the workspace root | control_plane.sync_interval |
| Pack config key | Writes/reads under the pack’s config block, validated against the pack schema | software_delivery.gates.minCoverage |
| Managed root key | Error with guidance: “use <command> instead” | packs, lanes, security |
| Unknown key | Error with did-you-mean suggestion if possible | gates.minCoverage |
Writable root keys
Section titled “Writable root keys”These keys can be written directly without a dedicated command:
control_plane— Control plane connection and sync settingsmemory_namespace— Memory layer namespaceevent_namespace— Event stream namespace
Pack config keys
Section titled “Pack config keys”Pack config keys are declared by domain packs in their manifest.yaml via the config_key field. For example, the Software Delivery pack declares config_key: software_delivery, making all software_delivery.* paths writable via config:set.
Writes to pack config keys are validated against the pack’s config schema if one is provided.
Managed root keys
Section titled “Managed root keys”These keys require dedicated CLI commands:
| Key | Command |
|---|---|
id | workspace-init |
name | workspace-init |
packs | pack:install |
lanes | lane:edit |
policies | policy:set |
security | security:set |
Did-you-mean suggestions
Section titled “Did-you-mean suggestions”If you use an unqualified key that matches a known pack sub-key, the error includes a suggestion:
config:set
Section titled “config:set”Safely updates a value in workspace.yaml.
Arguments
Section titled “Arguments”| Flag | Required | Description |
|---|---|---|
--key | Yes | Fully qualified config key in dot notation (e.g., software_delivery.gates.minCoverage) |
--value | Yes | Value to set (comma-separated for array append) |
--help | No | Show usage information |
Examples
Section titled “Examples”Comma-separated values are appended to existing array fields.
Value Coercion
Section titled “Value Coercion”config:set automatically coerces string values based on context:
| Input Value | Existing Type | Coerced To |
|---|---|---|
"true" | any | true (boolean) |
"false" | any | false (boolean) |
"42" | number | 42 (number) |
"A,B,C" | array | append A, B, C |
"hello" | string | "hello" (string) |
Error Handling
Section titled “Error Handling”If the value fails Zod schema validation, the command exits with a descriptive error and no changes are written:
If you use an unqualified key, you get a routing error:
If you try to write a managed key:
config:get
Section titled “config:get”Reads and displays a value from workspace.yaml. Uses the same routing logic as config:set.
Arguments
Section titled “Arguments”| Flag | Required | Description |
|---|---|---|
--key | Yes | Fully qualified config key in dot notation (e.g., software_delivery.methodology.testing) |
--help | No | Show usage information |
Examples
Section titled “Examples”Common Dotpaths
Section titled “Common Dotpaths”Software Delivery pack (software_delivery.*)
Section titled “Software Delivery pack (software_delivery.*)”| Dotpath | Type | Values |
|---|---|---|
software_delivery.methodology.testing | enum | tdd, test-after, none |
software_delivery.methodology.architecture | enum | hexagonal, layered, none |
software_delivery.gates.minCoverage | number | 0-100 |
software_delivery.gates.enableCoverage | boolean | true, false |
software_delivery.gates.maxEslintWarnings | number | Non-negative integer |
software_delivery.experimental.context_validation | boolean | true, false |
software_delivery.experimental.validation_mode | enum | off, warn, error |
software_delivery.git.requireRemote | boolean | true, false |
software_delivery.cleanup.trigger | enum | on_done, on_init, manual |
software_delivery.agents.methodology.principles | string[] | Array of methodology names |
Kernel root keys
Section titled “Kernel root keys”| Dotpath | Type | Description |
|---|---|---|
control_plane.sync_interval | number | Seconds between control plane syncs |
control_plane.endpoint | string | Control plane API URL |
memory_namespace | string | Namespace for memory layer isolation |
event_namespace | string | Namespace for kernel event stream |