Skip to content

Configuration

Host-Side Configuration

The host agent reads configuration from ~/.config/shed/extensions.yaml.

# shed-server URL
server: http://localhost:8080

ssh:
  # SSH backend: "agent-forward", "local-keys", or "" (auto-detect)
  # mode: ""

  # Touch ID / biometric approval
  approval:
    enabled: false
    # policy: per-session     # per-request | per-session | per-shed
    # session_ttl: 4h

aws:
  source_profile: default
  default_role: arn:aws:iam::123456789012:role/smartthings-dev
  session_duration: 1h
  cache_refresh_before: 5m

  # Per-shed role overrides
  sheds:
    my-service:
      role: arn:aws:iam::123456789012:role/smartthings-dev
    integration-tests:
      role: arn:aws:iam::123456789012:role/smartthings-staging-readonly

docker:
  registries:
    - us-docker.pkg.dev
    - ghcr.io
    - artifactory.corp.com
  # allow_all: true         # bypass allowlist
  # config_path: ~/.docker/config.json  # override Docker config location

# Audit logging
logging:
  enabled: true
  path: ~/.local/share/shed/extensions-audit.log

SSH Settings

Field Type Default Description
ssh.mode string "" (auto) SSH backend mode. Auto-detect selects agent-forward if SSH_AUTH_SOCK exists, falls back to local-keys.
ssh.approval.enabled bool false Enable Touch ID approval gate for sign operations
ssh.approval.policy string per-session Approval policy: per-request, per-session, per-shed
ssh.approval.session_ttl string 4h How long a session approval remains valid

AWS Settings

Field Type Default Description
aws.source_profile string default AWS credentials profile to use for AssumeRole
aws.default_role string IAM role ARN to assume (required if any shed needs AWS)
aws.session_duration string 1h STS session token lifetime
aws.cache_refresh_before string 5m Refresh cached credentials when less than this time remains
aws.sheds.<name>.role string Per-shed IAM role ARN override

Docker Settings

Field Type Default Description
docker.registries []string [] Registry hostnames to allow credential brokering for
docker.allow_all bool false Allow credentials for any registry (bypasses allowlist)
docker.config_path string (auto-detect) Override Docker config.json path. If unset, checks $DOCKER_CONFIG/config.json first, then ~/.docker/config.json

Logging Settings

Field Type Default Description
logging.enabled bool true Enable audit logging
logging.path string ~/.local/share/shed/extensions-audit.log Path to audit log file

Server Settings

Field Type Default Description
server string http://localhost:8080 shed-server URL

Guest-Side Configuration

None. The opinionated base image configures everything:

  • SSH_AUTH_SOCK=/run/shed-extensions/ssh-agent.sock via /etc/environment.d/shed-extensions.conf
  • AWS_CONTAINER_CREDENTIALS_FULL_URI=http://127.0.0.1:499/credentials via /etc/environment.d/shed-extensions.conf
  • shed-ext-ssh-agent and shed-ext-aws-credentials start via systemd at boot
  • docker-credential-shed available on PATH; ~/.docker/config.json configured with "credsStore": "shed"

CLI Flags

shed-host-agent

Flag Default Description
--config ~/.config/shed/extensions.yaml Path to config file

shed-ext-ssh-agent

Flag Default Description
--sock /run/shed-extensions/ssh-agent.sock Unix socket path
--publish-url http://127.0.0.1:498/v1/publish shed-agent publish endpoint

shed-ext-aws-credentials

Flag Default Description
--port 499 HTTP listen port
--publish-url http://127.0.0.1:498/v1/publish shed-agent publish endpoint

docker-credential-shed

Flag / Env Default Description
SHED_PUBLISH_URL http://127.0.0.1:498/v1/publish shed-agent publish endpoint (env var)

Commands: get (resolve credentials), list (list registries), store (rejected), erase (rejected), version.