Devtree 0.3.0: Native Tailscale proxy setup, interactive wizard, and YAML configuration
Devtree now manages the entire Tailscale proxy lifecycle natively. A new interactive setup wizard writes declarative YAML configuration, and Devtree owns the shared tailscale serve TCP mapping — so you no longer need manual tailscale serve commands, shell environment variables, or wrapper scripts to share a Caddy-backed dev server across your tailnet.
- Interactive setup wizard:
devtree setup --interactive(or-i) detects your Tailscale machine name and IPv4 address, asks for the shared development domain and port, previews the wildcard DNS record, and writes the configuration files for you. - Declarative YAML configuration: Shared settings go in committed
.devtree.yml; machine-specific values (like your developer namespace) go in git-ignored.devtree.local.yml. This replaces theDEVTREE_DEVELOPER_NAMESPACEandDEVTREE_PUBLIC_DOMAINenvironment variables. The TypeScriptrouting.hostnamecallback remains as an advanced escape hatch. - Native Tailscale Serve lifecycle:
setupanddevnow create and reconcile the shared raw TCP Serve mapping idempotently. One mapping serves every worktree on a machine, and unrelated Serve routes are preserved. A newtailscale.serve_portoption customizes the port. devtree tailscalecommand:tailscale statusinspects the live Serve route, ownership, and recorded worktrees;tailscale removesafely removes only the Devtree-owned mapping and refuses to touch external or conflicting routes.- Smarter
tailscale.modedefault: When left unset, proxy mode is now inferred automatically when using Caddy routing — no explicitmode: "proxy"needed. - Improved
infoanddoctor:infoprints the exact local and Tailscale application URLs, active Serve mapping, and ownership from persisted routing state.doctorvalidates Caddy, hostname resolution, Tailscale connectivity, and the Serve mapping, with--fixreconciling everything idempotently. Error messages are now actionable. - Prominent application URLs:
setupanddevprint the exact URL to open — including the Tailscale hostname and port — after startup. - No
sslip.iodependency: The standard naming pattern works withoutsslip.io. A newrouting.hostname_suffixoption supports custom wildcard suffixes for non-standard setups. - Updated skills and examples: Both Devtree skills are updated to
0.3.0, and thecaddy-hostsexample now uses the interactive wizard and YAML config.