Skip to content

Configuration

awa can be configured via a .awa.toml file, CLI flags, or both. CLI arguments always override config file values.

Place .awa.toml in your project root (or specify a path with --config).

# Output directory for generated files
output = ".github/agents"
# Template source (local path or Git repo)
template = "owner/repo"
# Feature flags to enable
features = ["copilot", "claude"]
# Overlay directory paths applied over base template
overlay = ["./overlays/company", "./overlays/project"]
# Overwrite existing files without prompting
force = false
# Preview changes without writing
dry-run = false
# Apply deletions from _delete.txt
delete = false
# Re-fetch cached remote templates
refresh = false
# Include target-only files in diff output
list-unknown = false
# Named preset definitions
[presets]
full = ["copilot", "claude", "cursor", "windsurf", "kilocode", "opencode", "gemini", "roo", "qwen", "codex", "agy", "agents-md"]
lite = ["copilot", "claude"]
# Update check configuration
[update-check]
enabled = true # set to false to disable update checks
interval = 86400 # seconds between checks (default: 1 day)
KeyTypeDefaultDescription
outputstringOutput directory for generated files
templatestringbundled defaultTemplate source — local path or Git repo
featuresstring[][]Feature flags to enable
overlaystring[][]Overlay directory paths applied over base template
forcebooleanfalseOverwrite existing files without prompting
dry-runbooleanfalsePreview changes without writing files
deletebooleanfalseApply deletions from _delete.txt
refreshbooleanfalseForce re-fetch of cached remote templates
list-unknownbooleanfalseInclude target-only files in awa template diff output
KeyTypeDefaultDescription
spec-globsstring[](see example below)Glob patterns for spec, task, plan, and align files
code-globsstring[]["**/*.{ts,js,...,zig}"]Glob patterns for source files
extra-spec-globsstring[][".awa/**/*"]Additional globs for files to update during ID propagation (renumber/recode/merge)
extra-spec-ignorestring[][".awa/.agent/**"]Patterns to exclude from extra spec file scanning
markersstring[]["@awa-impl", "@awa-test", "@awa-component"]Marker names to scan for
spec-ignorestring[][]Glob patterns to exclude from spec file scanning
code-ignorestring[]["node_modules/**", "dist/**", ...]Glob patterns to exclude from code file scanning
ignore-markersstring[][]Marker IDs to exclude from orphan checks
formatstring"text"Output format (text or json)
id-patternstring(regex)Regex for valid traceability IDs
cross-ref-patternsstring[]["IMPLEMENTS:", "VALIDATES:"]Keywords for spec cross-references
schema-dirstring".awa/.agent/schemas"Directory containing *.schema.yaml schema rule files
schema-enabledbooleantrueEnable/disable schema structural validation
allow-warningsbooleanfalseAllow warnings without failing (when false, warnings are promoted to errors)
spec-onlybooleanfalseRun only spec-level checks; skip code-to-spec traceability
KeyTypeDefaultDescription
enabledbooleantrueEnable/disable automatic update checks
intervalnumber86400Minimum seconds between checks (default: 1 day)

awa periodically checks the npm registry for newer versions and prints a warning after command output. The check runs asynchronously and does not slow down CLI startup.

The warning is suppressed when --json or --summary flags are active, stdout is not a TTY, or the NO_UPDATE_NOTIFIER=1 environment variable is set.

Results are cached in ~/.cache/awa/update-check.json. Network failures are silent.

Define named bundles of feature flags in [presets]:

[presets]
full = ["copilot", "claude", "cursor", "windsurf"]
lite = ["copilot", "claude"]

Use presets from the CLI:

Terminal window
awa init . --preset full
awa init . --preset full --remove-features windsurf

CLI arguments take precedence over config file values:

Terminal window
# Even if .awa.toml has force = false, this will force overwrite
awa init . --force
# Even if .awa.toml has features = ["copilot"], this replaces it
awa init . --features claude cursor

Define [targets.<name>] sections to generate different agent configurations in a single command:

template = "./templates/awa"
features = ["architect", "code"]
[targets.claude]
output = "."
features = ["claude", "architect", "code"]
[targets.copilot]
output = "."
features = ["copilot", "code", "vibe"]

Each target section can specify: output, template, features, preset, remove-features. Unspecified fields inherit from the root config. Target features replaces root features entirely (same as CLI override behavior).

Terminal window
awa init --all-targets # process all targets
awa init --target claude # process one target
awa template diff --all-targets # diff all targets
awa template diff --target copilot # diff one target

Behavior notes:

  • --all-targets and --target suppress interactive prompting (non-interactive batch mode)
  • --all-targets ignores the CLI positional [output] argument; --target allows CLI positional to override
  • --force, --dry-run, and --delete apply globally to all targets when using --all-targets
  • Boolean flags (force, dry-run, delete, refresh) are NOT per-target — they apply globally from root/CLI
Terminal window
# Default: .awa.toml in current directory
awa init .
# Custom path
awa init . --config ./configs/my-project.toml

When --config is omitted, awa searches upward from the current working directory for .awa.toml and stops at the repository root (.git).

For values loaded from config (output, local template, local overlay, and target-level output/template), relative paths are resolved relative to the config file location, not the current working directory.

output = ".github/agents"
features = ["copilot"]
output = ".github/agents"
template = "myorg/awa-templates"
features = ["copilot", "claude", "cursor"]
output = ".github/agents"
template = "myorg/awa-templates"
delete = true
[presets]
full = ["copilot", "claude", "cursor", "windsurf"]
[check]
spec-globs = [
".awa/specs/ARCHITECTURE.md",
".awa/specs/FEAT-*.md",
".awa/specs/REQ-*.md",
".awa/specs/DESIGN-*.md",
".awa/specs/EXAMPLE-*.md",
".awa/specs/API-*.tsp",
".awa/tasks/TASK-*.md",
".awa/plans/PLAN-*.md",
".awa/align/ALIGN-*.md",
]
code-globs = ["**/*.{ts,js,tsx,jsx,mts,mjs,cjs,py,go,rs,java,kt,kts,cs,c,h,cpp,cc,cxx,hpp,hxx,swift,rb,php,scala,ex,exs,dart,lua,zig}"]
markers = ["@awa-impl", "@awa-test", "@awa-component"]
spec-ignore = []
code-ignore = ["node_modules/**", "dist/**", "vendor/**", "target/**", "build/**", "out/**", ".awa/**"]
ignore-markers = []
format = "text"
schema-dir = ".awa/.agent/schemas"
schema-enabled = true
allow-warnings = false
spec-only = false
[update-check]
enabled = true
interval = 86400
output = ".github/agents"
template = "myorg/awa-templates"
overlay = ["./overlays/company", "./overlays/project"]
features = ["copilot", "claude"]
template = "./templates/awa"
features = ["architect", "code"]
[targets.claude]
output = "."
features = ["claude", "architect", "code"]
[targets.copilot]
output = "."
features = ["copilot", "code", "vibe"]
[presets]
full = ["copilot", "claude", "cursor", "windsurf"]