Skip to content

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).

When you provide a key, both config:set and config:get route it based on its first segment:

First segment matchesBehaviorExample key
Writable root keyWrites/reads directly at the workspace rootcontrol_plane.sync_interval
Pack config keyWrites/reads under the pack’s config block, validated against the pack schemasoftware_delivery.gates.minCoverage
Managed root keyError with guidance: “use <command> instead”packs, lanes, security
Unknown keyError with did-you-mean suggestion if possiblegates.minCoverage

These keys can be written directly without a dedicated command:

  • control_plane — Control plane connection and sync settings
  • memory_namespace — Memory layer namespace
  • event_namespace — Event stream namespace

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.

These keys require dedicated CLI commands:

KeyCommand
idworkspace-init
nameworkspace-init
packspack:install
laneslane:edit
policiespolicy:set
securitysecurity:set

If you use an unqualified key that matches a known pack sub-key, the error includes a suggestion:

[config:set] Unknown root key "gates".
  Did you mean "software_delivery.gates.minCoverage"?

Safely updates a value in workspace.yaml.

pnpm config:set --key <dotpath> --value <value>
FlagRequiredDescription
--keyYesFully qualified config key in dot notation (e.g., software_delivery.gates.minCoverage)
--valueYesValue to set (comma-separated for array append)
--helpNoShow usage information
# Set methodology testing mode
pnpm config:set --key software_delivery.methodology.testing --value test-after

# Set minimum coverage threshold
pnpm config:set --key software_delivery.gates.minCoverage --value 85

# Disable coverage gate
pnpm config:set --key software_delivery.gates.enableCoverage --value false

# Set experimental feature
pnpm config:set --key software_delivery.experimental.context_validation --value true

config:set automatically coerces string values based on context:

Input ValueExisting TypeCoerced To
"true"anytrue (boolean)
"false"anyfalse (boolean)
"42"number42 (number)
"A,B,C"arrayappend A, B, C
"hello"string"hello" (string)

If the value fails Zod schema validation, the command exits with a descriptive error and no changes are written:

[config:set] Validation failed for software_delivery.methodology.testing=invalid-value:
  Invalid enum value. Expected 'tdd' | 'test-after' | 'none', received 'invalid-value'

If you use an unqualified key, you get a routing error:

[config:set] Unknown root key "gates".
  Did you mean "software_delivery.gates.minCoverage"?

If you try to write a managed key:

[config:set] Key "packs" is managed by a dedicated command. Use `pnpm pack:install` instead.

Reads and displays a value from workspace.yaml. Uses the same routing logic as config:set.

pnpm config:get --key <dotpath>
FlagRequiredDescription
--keyYesFully qualified config key in dot notation (e.g., software_delivery.methodology.testing)
--helpNoShow usage information
# Read a pack config value
pnpm config:get --key software_delivery.methodology.testing
# Output: tdd

# Read a numeric value
pnpm config:get --key software_delivery.gates.minCoverage
# Output: 90

# Read an object (outputs as YAML)
pnpm config:get --key software_delivery.methodology
# Output:
#   testing: tdd
#   architecture: hexagonal

# Read a writable root key
pnpm config:get --key control_plane
# Output:
#   sync_interval: 60
#   endpoint: https://api.lumenflow.dev

# Read a missing key
pnpm config:get --key software_delivery.nonexistent.key
# Output: [config:get] Key "software_delivery.nonexistent.key" is not set (undefined)

Software Delivery pack (software_delivery.*)

Section titled “Software Delivery pack (software_delivery.*)”
DotpathTypeValues
software_delivery.methodology.testingenumtdd, test-after, none
software_delivery.methodology.architectureenumhexagonal, layered, none
software_delivery.gates.minCoveragenumber0-100
software_delivery.gates.enableCoveragebooleantrue, false
software_delivery.gates.maxEslintWarningsnumberNon-negative integer
software_delivery.experimental.context_validationbooleantrue, false
software_delivery.experimental.validation_modeenumoff, warn, error
software_delivery.git.requireRemotebooleantrue, false
software_delivery.cleanup.triggerenumon_done, on_init, manual
software_delivery.agents.methodology.principlesstring[]Array of methodology names
DotpathTypeDescription
control_plane.sync_intervalnumberSeconds between control plane syncs
control_plane.endpointstringControl plane API URL
memory_namespacestringNamespace for memory layer isolation
event_namespacestringNamespace for kernel event stream