Configuration Guide
Wave uses a single wave.yaml file as the source of truth for all configuration.
Manifest Structure
yaml
apiVersion: v1
kind: WaveManifest
metadata:
name: string # Required
description: string # Optional
repo: string # Optional
adapters: # Required
<adapter-name>:
binary: string # Required - CLI binary name
mode: string # Required - "headless"
output_format: string # Optional - Default "json"
project_files: [] # Optional - Files to project
default_permissions: {} # Optional - Default tool perms
hooks_template: string # Optional - Hook script dir
personas: # Required
<persona-name>:
adapter: string # Required - References adapters.<name>
description: string # Optional
system_prompt_file: string # Required - Path to prompt file
temperature: float # Optional - 0.0-1.0
permissions: {} # Optional - Override adapter perms
hooks: {} # Optional - Pre/Post hooks
runtime: # Required
workspace_root: string # Optional - Default ".wave/workspaces"
max_concurrent_workers: int # Optional - Default 5
default_timeout_minutes: int # Optional - Default 5
relay: {} # Optional - Relay config
audit: {} # Optional - Audit config
meta_pipeline: {} # Optional - Meta pipeline limits
skills: {} # Optional - Named skill configurationsAdapters
Adapters wrap LLM CLIs for Wave to use.
Claude Code Adapter
yaml
adapters:
claude:
binary: claude
mode: headless
output_format: json
project_files:
- CLAUDE.md
- .claude/settings.json
default_permissions:
allowed_tools: ["Read", "Write", "Bash"]
deny: []Personas
Personas define how agents behave.
Navigator Persona
yaml
personas:
navigator:
adapter: claude
system_prompt_file: .wave/personas/navigator.md
temperature: 0.1
permissions:
allowed_tools: ["Read", "Bash(git log, git status)"]
deny: ["Write(*)", "Bash(git commit, git push)"]
hooks:
PreToolUse:
- matcher: "Bash(rm -rf)"
command: "echo 'DANGER: Destructive command blocked'"Craftsman Persona
yaml
personas:
craftsman:
adapter: claude
system_prompt_file: .wave/personas/craftsman.md
temperature: 0.7
permissions:
allowed_tools: ["Read", "Write", "Bash"]
hooks:
PostToolUse:
- matcher: "Bash(git commit)"
command: "npm test"Runtime Configuration
Workspace Management
yaml
runtime:
workspace_root: .wave/workspaces
max_concurrent_workers: 3
default_timeout_minutes: 30Context Relay
yaml
runtime:
relay:
token_threshold_percent: 80
strategy: "summarize_to_checkpoint"Auditing
yaml
runtime:
audit:
log_dir: .wave/traces/
log_all_tool_calls: true
log_all_file_operations: falseMeta Pipeline Limits
yaml
runtime:
meta_pipeline:
max_depth: 2
max_total_steps: 20
max_total_tokens: 500000
timeout_minutes: 60Skills
Declare external skills with install, check, and provisioning commands:
yaml
skills:
speckit:
install: "npm install -g @anthropic/speckit"
check: "speckit --version"
golangci-lint:
install: "go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest"
check: "golangci-lint --version"Validation Rules
Wave validates:
- Every persona must reference a defined adapter
- All
system_prompt_filepaths must exist - All hook script paths must exist
- Adapter binaries must be on PATH (warning only)
- No circular persona references
- Required fields must be present
- Types must be valid (string, int, float, array)
Common Patterns
Project-Specific Configuration
yaml
# For a React TypeScript project
metadata:
name: "my-react-app"
description: "React TypeScript application"
adapters:
claude:
project_files:
- "src/**/*.{ts,tsx}"
- "package.json"
- "tsconfig.json"
runtime:
default_timeout_minutes: 45 # Longer timeout for build stepsEnvironment-Specific Overrides
yaml
# Development
runtime:
workspace_root: ./wave-workspaces
audit:
log_all_tool_calls: false
# Production
runtime:
workspace_root: .wave/workspaces
audit:
log_all_tool_calls: true
log_all_file_operations: true