Release history for veil
Adds self-update, self-installation, and feedback. Veil now implements four of the six agent-first CLI specs.
veil update [--check|--force] — self-update from GitHub releases. Downloads, verifies sha256, smoke-tests, atomic swap with .bak rollback. cli-update-spec conformant.veil install [--prefix DIR] — copy the running binary to ~/.local/bin (default). Idempotent, never sudo. uninstall is a no-op success if not there.veil uninstall [--prefix DIR] — remove the binary. Never touches config/data.veil feedback "<msg>" [-kind bug|idea|praise|note] — relay-only dual-write to feedback.intrane.fr. Never fails the caller. FEEDBACK_RELAY=off disables. cli-feedback-spec conformant.help-jsonveil guide embedded mental modelveil update, install, uninstallveil feedback relay-onlyFixes two critical leaks found in non-interactive agent testing. 15/15 regression tests pass.
exec no longer puts secrets in the command line (was visible in ps//proc). Now uses a temp env file (0600) that's deleted before the child runs./proc/environ, arbitrary transforms, set -v argv leakClean-room reimplementation of the Phoenix Secrets concept in machin/MFL. Fixes three critical security flaws found in the Phoenix audit.
veil exec captures child stdout/stderr and replaces every known secret with *** before emitting. Phoenix's exec used syscall.Exec with no interception, leaking secrets in child output. → The key fix.veil get refuses to print to stdout without --raw (debug) or -o <file>. veil resolve returns opaque sealed tokens. Phoenix's resolve and get printed raw values.veil resolve always returns VEIL_SEALED:... tokens. Phoenix defaulted to plaintext MCP responses unless sealed mode was explicitly configured.veil agent create/list with per-agent permissionsveil set --stdin avoids secrets in argv/process listingsguide, help-json, semantic exit codes, JSON output (cli-output-spec v1.0)veil init # Initialize ~/.veil veil set <path> -v <value> # Store a secret veil set <path> --stdin # Store from stdin veil get <path> -o <file> # Retrieve to file veil list [prefix] # List secret paths veil delete <path> # Delete a secret veil exec --env K=veil://path -- cmd # Run with env + scrubbing veil resolve veil://path # Get sealed token veil seal-keygen # Generate X25519 key pair veil agent create|list # Manage agents veil backup push|pull # Backup via lume veil guide # Mental model veil help-json # Command catalog veil version # Version
machin build --race-safe){ or }while or for k, v := rangeinterface{} — use map[string]string + string concatenation for heterogeneous JSONnil comparisons — use len(x) == 0var x []string without initializer is invalid — use x := []string{}