This document defines the canonical configuration model for AWF (awf) and is intended for:
awfCLI runtime loading (--config)- tooling that compiles workflows to AWF invocations (including
gh-aw) - IDE/static validation via JSON Schema
The machine-readable schema is published at:
docs/awf-config.schema.json
The normative keywords in this document are to be interpreted as described in RFC 2119.
An AWF config document is conforming when:
- It is valid JSON or YAML.
- Its data model satisfies
docs/awf-config.schema.json. - Unknown properties are not present (closed-world schema).
- The user invokes
awf --config <path|-> -- <command>. - If
<path>is-, AWF reads configuration bytes from stdin. - If
<path>ends with.json, AWF parses as JSON. - If
<path>ends with.yamlor.yml, AWF parses as YAML. - Otherwise, AWF attempts JSON parse first, then YAML parse.
- AWF validates the parsed document and fails fast on validation errors.
- AWF maps config fields to CLI option semantics.
- CLI options MUST take precedence over config file values.
The effective configuration order is:
- AWF internal defaults
- Config file (
--config) - Explicit CLI flags
This precedence model allows reusable checked-in configs with environment-specific CLI overrides.
The root object MAY contain:
$schemanetworkapiProxysecuritycontainerenvironmentloggingrateLimiting
Section semantics and constraints are defined by docs/awf-config.schema.json.
Tools generating AWF invocations (such as gh-aw) SHOULD use this mapping:
network.allowDomains[]→--allow-domains <csv>network.blockDomains[]→--block-domains <csv>network.dnsServers[]→--dns-servers <csv>network.upstreamProxy→--upstream-proxyapiProxy.enabled→--enable-api-proxyapiProxy.targets.<provider>.host→--<provider>-api-targetapiProxy.targets.openai.basePath→--openai-api-base-pathapiProxy.targets.anthropic.basePath→--anthropic-api-base-pathapiProxy.targets.gemini.basePath→--gemini-api-base-pathsecurity.sslBump→--ssl-bumpsecurity.enableDlp→--enable-dlpsecurity.enableHostAccess→--enable-host-accesssecurity.allowHostPorts→--allow-host-portssecurity.allowHostServicePorts→--allow-host-service-portssecurity.difcProxy.host→--difc-proxy-hostsecurity.difcProxy.caCert→--difc-proxy-ca-certcontainer.memoryLimit→--memory-limitcontainer.agentTimeout→--agent-timeoutcontainer.enableDind→--enable-dindcontainer.workDir→--work-dircontainer.containerWorkDir→--container-workdircontainer.imageRegistry→--image-registrycontainer.imageTag→--image-tagcontainer.skipPull→--skip-pullcontainer.buildLocal→--build-localcontainer.agentImage→--agent-imagecontainer.tty→--ttycontainer.dockerHost→--docker-hostenvironment.envFile→--env-fileenvironment.envAll→--env-allenvironment.excludeEnv[]→ repeated--exclude-envlogging.logLevel→--log-levellogging.diagnosticLogs→--diagnostic-logslogging.auditDir→--audit-dirlogging.proxyLogsDir→--proxy-logs-dirlogging.sessionStateDir→--session-state-dirrateLimiting.enabled: false→--no-rate-limitrateLimiting.requestsPerMinute→--rate-limit-rpmrateLimiting.requestsPerHour→--rate-limit-rphrateLimiting.bytesPerMinute→--rate-limit-bytes-pm
AWF MUST support --config - for programmatic/pipeline scenarios.
On parse or validation failure, AWF MUST:
- exit non-zero
- print an error describing location and reason
- avoid partial execution