v0.20.0
Highlights
Airut-managed Claude Code installation — The gateway now downloads, verifies, and caches Claude Code binaries on the host, bind-mounting them read-only into containers. This eliminates the need to install Claude Code in Dockerfiles, producing smaller and faster-to-build container images — especially beneficial for airut-sandbox and sandbox-action CI sandboxing where Claude Code isn't needed at all. Per-repo version pinning is available via the claude_version config field (supports semver, "latest", "stable"), shareable across repos with !var config variables. An integration test validates compatibility with the upstream install.sh distribution. (#373, #444, #445)
Configurable Dockerfile path — New container_path repo setting lets Airut use an existing project Dockerfile (e.g., .devcontainer/) instead of requiring .airut/container/Dockerfile. Combined with managed Claude Code installation, this enables adopting Airut in repositories that already have a working Dockerfile — no .airut/container/ directory needed. (#439)
Config schema cleanup and migration tooling — Email config fields have been restructured from 18 flat prefixed fields into nested subsections (imap, smtp, account, auth), and global resource_limits replaced with !var variable references. Duplicated schema documentation removed from specs in favor of the canonical airut.example.yaml. A new airut migrate command applies pending schema migrations automatically, and airut check now reports schema version status. Five schema versions (v1→v5) are chained with full migration support. (#440, #442, #447, #448, #453)
Bug Fixes
- Numeric
!var/!envfields in config editor — Fixed!varand!envreferences onint/floatfields (e.g.,resource_limits.timeout) rendering as empty in the config editor. HTML5<input type="number">silently rejected non-numeric values; the editor now usestype="text"for variable/env sources. (#443)
Other Changes
- Config editor scroll preservation — Variable add/remove/rename and channel add/remove now use in-place HTMX swaps instead of full-page redirects, preserving scroll position. (#452)
- Hidden test-only fields —
container_command(test-only; production requires podman) is now hidden from the config editor and generated example configs via a newhiddenmetadata flag. (#441) - Documentation refresh — Fixed stale content across security, sandboxing, deployment, and onboarding docs; replaced all "restart the service" instructions with live config reload; flattened YAML examples to match current schema; documented
airut migrate. (#449, #450, #451, #454) - Screenshot generator README — Added documentation for the dashboard screenshot generator with sandbox-specific instructions. (#446)