WYRD/TOOLS

Tools / wyrwood / Configuration and policy

Configuration and policy

The per-user YAML file is Wyrwood’s durable source of truth. On Linux it is $XDG_CONFIG_HOME/wyrwood/config.yml, or ~/.config/wyrwood/config.yml when XDG_CONFIG_HOME is unset.

upstream: /run/user/1000/example-agent.sock
consumers:
  - name: teal
    socket: /run/user/1000/teal/agent.sock
    fingerprints:
      - SHA256:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
timeouts:
  connect: 5s
  list: 5s
  replay: 5s
  sign: 2m

Examples use placeholder paths and fingerprints. Select exact fingerprints from wyrwood keys before applying a real configuration.

Managed changes

configuration show returns the complete editable model and a revision derived from the exact persisted bytes. Mutations require that revision and fail on a stale value instead of overwriting another edit.

wyrwood configuration show
revision=$(wyrwood configuration show --output json |
  jq -r '.result.revision')
wyrwood configuration set-upstream --revision "$revision" \
  --socket /run/user/1000/example-agent.sock

revision=$(wyrwood configuration show --output json |
  jq -r '.result.revision')
wyrwood configuration set-timeouts --revision "$revision" \
  --connect 5s --list 5s --replay 5s --sign 2m

consumer put replaces the complete consumer value and fingerprint allowlist. Omit --id to create one; supply the opaque identifier returned by configuration show to replace one. Retire an existing consumer with its identifier:

revision=$(wyrwood configuration show --output json |
  jq -r '.result.revision')
wyrwood configuration show
read -r -p "Consumer ID to retire: " consumer_id
wyrwood consumer retire --revision "$revision" --id "$consumer_id"

The prompt keeps selection of the consumer deliberate; display names are not authorization identities.

Managed writes serialize canonical YAML and do not preserve comments or custom formatting. Direct file edits remain supported, but they also change the revision. Both paths require a separate wyrwood apply before the runtime policy changes.

Consumer filesystem access

Without access-group, Wyrwood gives the consumer directory mode 0700 and the socket mode 0600. Set a numeric supplementary group when the container must reach the endpoint through group access:

revision=$(wyrwood configuration show --output json |
  jq -r '.result.revision')
wyrwood configuration show
read -r -p "Consumer ID to replace: " consumer_id
wyrwood keys
read -r -p "Fingerprint to allow: " fingerprint

wyrwood consumer put --revision "$revision" --id "$consumer_id" \
  --name teal --socket /run/user/1000/teal/agent.sock \
  --access-group 1001 --fingerprint "$fingerprint"

The group must belong to the daemon user. A socket-path change creates a new consumer security principal and a new opaque identifier.

Timeouts

Connect, identity-list, and session-binding replay timeouts accept Go duration syntax from 100ms through 30s. Signing accepts 1s through 10m, allowing time for confirmation in the upstream agent without permitting an unbounded request.