| title | Installation sources and updates |
|---|
The public installer is a committed PEP 723 uv --script file generated from Envman's standard-library release protocol. It has no third-party runtime dependencies. It downloads release-manifest-v2.json through GitHub's releases/latest route, then downloads only the immutable assets named by that manifest. The legacy release-manifest.json remains wheel-and-constraints-only so immutable pre-skill installers can continue updating; the immutable v0.1.5 installer still uses that legacy manifest.
The installer accepts a manifest only when all of these checks pass:
- The document is bounded, UTF-8 JSON with the exact
envman.release-manifestschema and schema version. - The repository is exactly
CruxExperts/envman, the version is strictMAJOR.MINOR.PATCHSemVer, and each asset URL is the immutablehttps://github.com/CruxExperts/envman/releases/download/vVERSION/...URL for that version. - The wheel and
runtime-constraints.txtassets have bounded sizes, matching SHA-256 digests, matching byte lengths, safe basenames, and the expected filenames. - The constraints file contains only exact package pins and includes
cryptography. The wheel is inspected as a ZIP without extracting untrusted members, and its Envman metadata must match the manifest version. - Downloads use HTTPS and accept only GitHub-controlled hosts and redirects. Credentials and fragments are rejected.
- The host is Linux x86_64 with CPython
>=3.12,<3.13, and the invokeduvreports a version>=0.11; newer uv releases are supported. - After installation, the command path is resolved from
uv tool dir --binand that exact executable must report the manifest version. Verification never falls back to a differentenvmanfound throughPATH.
The installer trusts the local uv executable and selected Python runtime, GitHub release hosting and its controlled asset redirects, and PyPI over TLS for the exact packages in the verified constraints projection. It does not claim a hermetic dependency install. --no-build prevents source builds while installing the verified wheel.
The optional skill installer uses the LocalSetup 4.49.2 agent catalog embedded in the release protocol. Its canonical write roots come from LocalSetup's generated platform projection, while supported native and historical roots are recognized for safe refresh. Repository and global boundaries reject traversal and symlink components. Existing unmarked skills are preserved rather than adopted.
The installer does not silently generate or replace the encrypted-backup key. Key setup is deferred to first runtime or the explicit envman key --generate --approve-key-generation command, which requires approval; --yes and --force are not approval.
After a verified install, the installer creates ${XDG_STATE_HOME:-$HOME/.local/state}/envman/install.json. A missing state directory is created with mode 0700; an existing non-symlink directory keeps its current mode. The receipt is written atomically with mode 0600, refuses symlinks, and has the exact envman.install-receipt schema. It records:
- installed version and installation time;
- provider (
github-release-wheel) and repository; - manifest URL;
- verified wheel and runtime-constraints asset metadata;
- installer version (
1.0.0for receipts created by the 1.0.0 installer; older receipts retain their original installer provenance) anduvversions.
envman update reads that receipt and supports only its recorded provider. A standard public receipt points at GitHub's latest-release manifest. The updater fetches that source, rejects a candidate that is older than the recorded version, and reports current without reinstalling an equal tool version. --check stops after reporting availability. --install-skill can still install or refresh the equal release's verified skill for any supported scope and agent target. A tool update downloads and verifies the new assets, prefetches the prior assets, and writes the new receipt only after the replacement succeeds.
If replacement fails, the installer attempts to uninstall the partially replaced envman tool, reinstalls the previously verified wheel and constraints, and restores the previous receipt. If rollback itself fails, it reports both failures rather than claiming success.
There is no envman uninstall command. To remove only the uv tool, run:
uv tool uninstall envmanThat command does not remove managed values, backups, shell-loader files, or the receipt. A deliberately abandoned installation should remove the stale receipt at ${XDG_STATE_HOME:-$HOME/.local/state}/envman/install.json before a fresh install; otherwise the installer will reject the mismatch between an existing receipt and an absent Envman tool. See storage and shell loading for the data that remains outside the tool installation.