Releases: Cliftonz/jarvy
Release list
v0.6.4
Features:
- npm-style lifecycle hooks for
jarvy run— ifpre<name>or
post<name>keys exist in[commands],jarvy run <name>runs them
around the main command with npm's exact semantics: a failing pre
aborts the run (its exit code propagates), post only runs after a
successful main, a failing post fails the run, and extra--args go
to the main command only. The more readable colon spelling works too
("pre:build"/"post:build", quoted — TOML bare keys can't
contain:); when both spellings are defined the colon form wins and
a note is printed. Hooks are ordinary entries: listed, directly
runnable, same safety guards. jarvy shell-init --apply— wires thejr(=jarvy run)
shorthand into your shell rc file with one command, whatever way you
installed jarvy (previously nothing did this automatically —
cargo installusers never gotjrwithout hand-editing their rc).
Idempotent; supports bash/zsh/sh/fish/PowerShell, and nushell via a
materialized~/.jarvy/init.nu(re-run--applyafter upgrading).- Bare
jarvy runwith no[commands]table now prints a real
getting-started guide (worked example, the three usage forms, cwd
rule,jrtip) instead of a one-line hint. - New docs page: Task runner
— npm-run-style documentation including a "Coming from npm?" mapping
table.
Fixes:
- Every jarvy invocation warned
plugin directory has insecure permissionsfor users who never created~/.jarvy/tools.d— the
permission probe conflated "directory doesn't exist" with "unsafe
permissions". An absent plugin directory is now a silent no-op; the
security gate still fires for directories that exist with loose
permissions.
Internal:
verify-release-assets.shaccepts the bare-basenameSHA256SUMS.txt
entries introduced in v0.6.3 (its listing regex previously required a
path separator before the name).- This repo's own
jarvy.tomlgained a[commands]table — jarvy's
development tasks now dogfoodjarvy run.
Full Changelog: v0.6.4-rc.2...v0.6.4
Installation
Quick Install (Unix)
curl -fsSL https://raw.githubusercontent.com/Cliftonz/jarvy/main/dist/scripts/install.sh | bashQuick Install (Windows PowerShell)
irm https://raw.githubusercontent.com/Cliftonz/jarvy/main/dist/scripts/install.ps1 | iexHomebrew
brew install Cliftonz/tap/jarvyCargo
cargo install jarvyEarly-Release Channel
Pre-release tags (-rc.N, -beta.N) are routed through the beta channel.
Opt in: JARVY_CHANNEL=beta on the install script, or jarvy update --channel beta.
See docs/release-testing.md.
See installation docs for more options.
Security
Verify Signatures
All release artifacts are signed with Sigstore keyless OIDC. Verify any artifact:
# Substitute a triple that matches your platform, e.g.
# aarch64-apple-darwin, x86_64-unknown-linux-musl,
# aarch64-unknown-linux-gnu, x86_64-pc-windows-msvc (.zip).
ARTIFACT=jarvy-v0.6.4-x86_64-unknown-linux-musl.tar.gz
BASE=https://github.com/Cliftonz/jarvy/releases/download/v0.6.4
curl -LO $BASE/$ARTIFACT
curl -LO $BASE/$ARTIFACT.sig
curl -LO $BASE/$ARTIFACT.pem
cosign verify-blob \
--signature $ARTIFACT.sig \
--certificate $ARTIFACT.pem \
--certificate-identity-regexp '^https://github\.com/Cliftonz/jarvy/\.github/workflows/release\.yml@refs/tags/v[0-9.]+(-[A-Za-z0-9.]+)?$' \
--certificate-oidc-issuer 'https://token.actions.githubusercontent.com' \
$ARTIFACTTag Signature
This release was cut from a signed git tag. Verify with:
git -c gpg.ssh.allowedSignersFile=.github/allowed_signers tag --verify v0.6.4SBOM
Software Bill of Materials in SPDX 2.3 (sbom.spdx.json) and CycloneDX 1.4 (sbom.cdx.json).
Checksums
SHA256 checksums for all artifacts are in SHA256SUMS.txt.
v0.6.4-rc.2
- fix(update): stronger visible Windows swap retry — Defender outlasted 3x backoff (12d57f1)
Full Changelog: v0.6.4-rc.1...v0.6.4-rc.2
Installation
Quick Install (Unix)
curl -fsSL https://raw.githubusercontent.com/Cliftonz/jarvy/main/dist/scripts/install.sh | bashQuick Install (Windows PowerShell)
irm https://raw.githubusercontent.com/Cliftonz/jarvy/main/dist/scripts/install.ps1 | iexHomebrew
brew install Cliftonz/tap/jarvyCargo
cargo install jarvyEarly-Release Channel
Pre-release tags (-rc.N, -beta.N) are routed through the beta channel.
Opt in: JARVY_CHANNEL=beta on the install script, or jarvy update --channel beta.
See docs/release-testing.md.
See installation docs for more options.
Security
Verify Signatures
All release artifacts are signed with Sigstore keyless OIDC. Verify any artifact:
# Substitute a triple that matches your platform, e.g.
# aarch64-apple-darwin, x86_64-unknown-linux-musl,
# aarch64-unknown-linux-gnu, x86_64-pc-windows-msvc (.zip).
ARTIFACT=jarvy-v0.6.4-rc.2-x86_64-unknown-linux-musl.tar.gz
BASE=https://github.com/Cliftonz/jarvy/releases/download/v0.6.4-rc.2
curl -LO $BASE/$ARTIFACT
curl -LO $BASE/$ARTIFACT.sig
curl -LO $BASE/$ARTIFACT.pem
cosign verify-blob \
--signature $ARTIFACT.sig \
--certificate $ARTIFACT.pem \
--certificate-identity-regexp '^https://github\.com/Cliftonz/jarvy/\.github/workflows/release\.yml@refs/tags/v[0-9.]+(-[A-Za-z0-9.]+)?$' \
--certificate-oidc-issuer 'https://token.actions.githubusercontent.com' \
$ARTIFACTTag Signature
This release was cut from a signed git tag. Verify with:
git -c gpg.ssh.allowedSignersFile=.github/allowed_signers tag --verify v0.6.4-rc.2SBOM
Software Bill of Materials in SPDX 2.3 (sbom.spdx.json) and CycloneDX 1.4 (sbom.cdx.json).
Checksums
SHA256 checksums for all artifacts are in SHA256SUMS.txt.
Soak window (24h): PASSED — see #68 for the audit trail.
v0.6.4-rc.1
- test(run): quote-tolerant extra-args assert — cmd.exe echoes quotes (f2fc56b)
- docs(changelog): v0.6.4 entry ahead of stable promotion (8b93315)
- chore(release): bump version to 0.6.4 (5beacfa)
- docs: propagate run-hooks + shell-init --apply across every doc surface (248acfe)
- feat(run): accept pre:name / post:name hook spelling alongside npm concatenation (10f4bdb)
- feat(run): npm-style pre/post lifecycle hooks (edae18f)
- docs(run): dedicated npm-run-style page for the jarvy run task runner (20e2c89)
- feat(shell-init): --apply wires the jr loader into the rc file directly (d107921)
- chore(dx): [commands] task runner for the repo itself (8babac2)
- fix(plugins): absent tools.d is a silent no-op, not a perms warning (bdd1900)
- feat(run): teach the empty-state message how to actually get started (74ce384)
- fix(scripts): verify-release accepts bare-basename SHA256SUMS entries (3d12fe2)
Full Changelog: v0.6.3...v0.6.4-rc.1
Installation
Quick Install (Unix)
curl -fsSL https://raw.githubusercontent.com/Cliftonz/jarvy/main/dist/scripts/install.sh | bashQuick Install (Windows PowerShell)
irm https://raw.githubusercontent.com/Cliftonz/jarvy/main/dist/scripts/install.ps1 | iexHomebrew
brew install Cliftonz/tap/jarvyCargo
cargo install jarvyEarly-Release Channel
Pre-release tags (-rc.N, -beta.N) are routed through the beta channel.
Opt in: JARVY_CHANNEL=beta on the install script, or jarvy update --channel beta.
See docs/release-testing.md.
See installation docs for more options.
Security
Verify Signatures
All release artifacts are signed with Sigstore keyless OIDC. Verify any artifact:
# Substitute a triple that matches your platform, e.g.
# aarch64-apple-darwin, x86_64-unknown-linux-musl,
# aarch64-unknown-linux-gnu, x86_64-pc-windows-msvc (.zip).
ARTIFACT=jarvy-v0.6.4-rc.1-x86_64-unknown-linux-musl.tar.gz
BASE=https://github.com/Cliftonz/jarvy/releases/download/v0.6.4-rc.1
curl -LO $BASE/$ARTIFACT
curl -LO $BASE/$ARTIFACT.sig
curl -LO $BASE/$ARTIFACT.pem
cosign verify-blob \
--signature $ARTIFACT.sig \
--certificate $ARTIFACT.pem \
--certificate-identity-regexp '^https://github\.com/Cliftonz/jarvy/\.github/workflows/release\.yml@refs/tags/v[0-9.]+(-[A-Za-z0-9.]+)?$' \
--certificate-oidc-issuer 'https://token.actions.githubusercontent.com' \
$ARTIFACTTag Signature
This release was cut from a signed git tag. Verify with:
git -c gpg.ssh.allowedSignersFile=.github/allowed_signers tag --verify v0.6.4-rc.1SBOM
Software Bill of Materials in SPDX 2.3 (sbom.spdx.json) and CycloneDX 1.4 (sbom.cdx.json).
Checksums
SHA256 checksums for all artifacts are in SHA256SUMS.txt.
v0.6.3
First release under the gate model (see docs/release-testing.md):
soaked as v0.6.3-rc.1 for the 24h patch window because it changes the
update chain.
Security:
install.sh/install.ps1checksum verification actually fires
now. Two stacked bugs meantcurl | bashand PowerShell installs
were silently skipping integrity verification:SHA256SUMS.txt
entries carry build paths that the lookup never matched, and under
PowerShell 7 the sums file arrived as raw bytes that never split into
lines. Both installers now match entries by basename and decode the
manifest explicitly — a tampered download aborts the install on every
platform. Caught by the new installer end-to-end suite on its first
run.SHA256SUMS.txtentries are also generated as bare asset names
going forward (the pathed entries likewise broke Chocolatey's publish
step on v0.6.1).
Fixes:
jarvy update --rollbackno longer fails withText file busyon
Linux — the restore path wrote over the running executable; it now
uses the same atomic temp-rename as the forward update. The consumed
backup also no longer leaves an orphaned file in~/.jarvy/backup/.- Windows binary updates retry the final swap (3× with backoff) when
Defender or an indexer briefly holds the freshly extracted binary
(Access is deniedflake). - Release binaries embed the exact release tag: an rc build reports
jarvy 0.6.3-rc.1from--versioninstead of the bare crate
version, and the update checker compares true prerelease versions —
beta-channel users were previously never offered the next rc. - Unknown subcommands (
jarvy rollback, typos) exit2in
non-interactive contexts instead of printing a menu prompt and
exiting0— scripts and CI can no longer mistake a typo for
success. Humans at a TTY still get the interactive menu.
Changed:
- Hooks run under
bash(orsh) on Unix instead of the user's
$SHELL. zsh's lack of word splitting silently broke POSIX-style
hooks depending on who ran them — the samejarvy.tomlnow behaves
identically for every developer. Opt back into a specific shell with
[hooks.config] shell = "zsh". - A pinned
nodeversion installs through nvm when nvm is configured
(nvm install <ver> && nvm alias default <ver>), sonode = "24"
is honored and a second package-manager node no longer shadows nvm's.
Ranges andlatestkeep the platform installer.
Known issues:
- Upgrading from v0.6.2 on Windows with
jarvy update --method binarycan intermittently fail withAccess is denied— the retry
fix ships in this release but the binary performing that upgrade is
v0.6.2's. Re-run the update or use the install script. Upgrades from
v0.6.3 onward retry automatically.
Internal:
- Release pipeline hardening after the v0.6.1 incident: a
draft-verification gate (checksums, cosign, SBOMs, and a binary
--versionsmoke) must pass before any release publishes; the
Cargo.toml↔tag guard refuses to build a mislabeled tag; and the
installer/package e2e suites now actually run on every release.
Soak-window automation is bump-kind aware and no longer labels
force-dispatched validation runs (#53).
Full Changelog: v0.6.3-rc.1...v0.6.3
Installation
Quick Install (Unix)
curl -fsSL https://raw.githubusercontent.com/Cliftonz/jarvy/main/dist/scripts/install.sh | bashQuick Install (Windows PowerShell)
irm https://raw.githubusercontent.com/Cliftonz/jarvy/main/dist/scripts/install.ps1 | iexHomebrew
brew install Cliftonz/tap/jarvyCargo
cargo install jarvyEarly-Release Channel
Pre-release tags (-rc.N, -beta.N) are routed through the beta channel.
Opt in: JARVY_CHANNEL=beta on the install script, or jarvy update --channel beta.
See docs/release-testing.md.
See installation docs for more options.
Security
Verify Signatures
All release artifacts are signed with Sigstore keyless OIDC. Verify any artifact:
# Substitute a triple that matches your platform, e.g.
# aarch64-apple-darwin, x86_64-unknown-linux-musl,
# aarch64-unknown-linux-gnu, x86_64-pc-windows-msvc (.zip).
ARTIFACT=jarvy-v0.6.3-x86_64-unknown-linux-musl.tar.gz
BASE=https://github.com/Cliftonz/jarvy/releases/download/v0.6.3
curl -LO $BASE/$ARTIFACT
curl -LO $BASE/$ARTIFACT.sig
curl -LO $BASE/$ARTIFACT.pem
cosign verify-blob \
--signature $ARTIFACT.sig \
--certificate $ARTIFACT.pem \
--certificate-identity-regexp '^https://github\.com/Cliftonz/jarvy/\.github/workflows/release\.yml@refs/tags/v[0-9.]+(-[A-Za-z0-9.]+)?$' \
--certificate-oidc-issuer 'https://token.actions.githubusercontent.com' \
$ARTIFACTTag Signature
This release was cut from a signed git tag. Verify with:
git -c gpg.ssh.allowedSignersFile=.github/allowed_signers tag --verify v0.6.3SBOM
Software Bill of Materials in SPDX 2.3 (sbom.spdx.json) and CycloneDX 1.4 (sbom.cdx.json).
Checksums
SHA256 checksums for all artifacts are in SHA256SUMS.txt.
v0.6.3-rc.1
- fix(release): basename-match SHA256SUMS entries in the draft gate (d3c758e)
- fix(release): enable globstar in the draft gate's artifact collection (db7d4c2)
- fix(release): draft gate verifies local artifacts + API asset cross-check (2515113)
- chore(release): bump version to 0.6.3 (cd46ab0)
- feat(release): gate model — verify the draft before publishing, rc only for update-chain changes (d0be5d2)
- fix(security): make the re-enabled security workflow actionable (2b9b1b9)
- feat(tools): route pinned node through nvm; deterministic hook shell; doc fixes (5a40713)
- fix(update): tag-aware version + Windows self-replace retry (c05c773)
- fix(ci): soak gate waits for the real bump-kind window before labeling (#53) (7ca3a81)
- fix(ci): repair four broken/dead automation paths (0b04dd9)
- fix(update): atomic temp-rename in rollback restore — ETXTBSY on Linux (9a44fe9)
- fix(cli): exit 2 on unknown command without a TTY; fix Path 4 rollback invocation (4cf3411)
- fix(ci): install cosign before release-paths Path 2 update step (4ec0f16)
Full Changelog: v0.6.2...v0.6.3-rc.1
Installation
Quick Install (Unix)
curl -fsSL https://raw.githubusercontent.com/Cliftonz/jarvy/main/dist/scripts/install.sh | bashQuick Install (Windows PowerShell)
irm https://raw.githubusercontent.com/Cliftonz/jarvy/main/dist/scripts/install.ps1 | iexHomebrew
brew install Cliftonz/tap/jarvyCargo
cargo install jarvyEarly-Release Channel
Pre-release tags (-rc.N, -beta.N) are routed through the beta channel.
Opt in: JARVY_CHANNEL=beta on the install script, or jarvy update --channel beta.
See docs/release-testing.md.
See installation docs for more options.
Security
Verify Signatures
All release artifacts are signed with Sigstore keyless OIDC. Verify any artifact:
# Substitute a triple that matches your platform, e.g.
# aarch64-apple-darwin, x86_64-unknown-linux-musl,
# aarch64-unknown-linux-gnu, x86_64-pc-windows-msvc (.zip).
ARTIFACT=jarvy-v0.6.3-rc.1-x86_64-unknown-linux-musl.tar.gz
BASE=https://github.com/Cliftonz/jarvy/releases/download/v0.6.3-rc.1
curl -LO $BASE/$ARTIFACT
curl -LO $BASE/$ARTIFACT.sig
curl -LO $BASE/$ARTIFACT.pem
cosign verify-blob \
--signature $ARTIFACT.sig \
--certificate $ARTIFACT.pem \
--certificate-identity-regexp '^https://github\.com/Cliftonz/jarvy/\.github/workflows/release\.yml@refs/tags/v[0-9.]+(-[A-Za-z0-9.]+)?$' \
--certificate-oidc-issuer 'https://token.actions.githubusercontent.com' \
$ARTIFACTTag Signature
This release was cut from a signed git tag. Verify with:
git -c gpg.ssh.allowedSignersFile=.github/allowed_signers tag --verify v0.6.3-rc.1SBOM
Software Bill of Materials in SPDX 2.3 (sbom.spdx.json) and CycloneDX 1.4 (sbom.cdx.json).
Checksums
SHA256 checksums for all artifacts are in SHA256SUMS.txt.
Soak window (24h): PASSED — see #65 for the audit trail.
v0.6.2
Corrected re-release of the withdrawn v0.6.1 — identical code plus the
version bump v0.6.1 was missing and a release-workflow guard that makes
the mistake impossible to repeat (the tag now refuses to build unless
Cargo.toml matches it).
Fixes:
- nvm is now detected via its filesystem marker
(${NVM_DIR:-$HOME/.nvm}/nvm.sh) instead of shell probes. nvm is a
shell function, not a binary, so the previous PATH lookup and
bash -lcprobes could never see it — everyjarvy setupwithnvm
in the config re-downloaded and re-ran the installer, and the version
check reported nvm as needing install forever. Detection now converges
after one install, andjarvy upgrade nodecorrectly suggests
nvm installwhen node is nvm-managed. (Windows is unaffected:
nvm-windows is a real binary.)
Internal:
- CI action bumps (Dependabot):
actions/checkout4→7,
actions/download-artifact7→8,actions/setup-java4→5,
azure/setup-helm4.3.0→5.0.1,docker/setup-buildx-action3→4.
The release-critical ones were smoke-validated by dispatch runs
before this release.
This is also the first release upgradable to via
jarvy update --method binary from v0.6.0 — the redirect fix shipped in
v0.6.0 makes the updater work going forward (upgrading from v0.5.x
still requires the install script or a package manager).
Full Changelog: v0.6.1...v0.6.2
Installation
Quick Install (Unix)
curl -fsSL https://raw.githubusercontent.com/Cliftonz/jarvy/main/dist/scripts/install.sh | bashQuick Install (Windows PowerShell)
irm https://raw.githubusercontent.com/Cliftonz/jarvy/main/dist/scripts/install.ps1 | iexHomebrew
brew install Cliftonz/tap/jarvyCargo
cargo install jarvyEarly-Release Channel
Pre-release tags (-rc.N, -beta.N) are routed through the beta channel.
Opt in: JARVY_CHANNEL=beta on the install script, or jarvy update --channel beta.
See docs/release-testing.md.
See installation docs for more options.
Security
Verify Signatures
All release artifacts are signed with Sigstore keyless OIDC. Verify any artifact:
# Substitute a triple that matches your platform, e.g.
# aarch64-apple-darwin, x86_64-unknown-linux-musl,
# aarch64-unknown-linux-gnu, x86_64-pc-windows-msvc (.zip).
ARTIFACT=jarvy-v0.6.2-x86_64-unknown-linux-musl.tar.gz
BASE=https://github.com/Cliftonz/jarvy/releases/download/v0.6.2
curl -LO $BASE/$ARTIFACT
curl -LO $BASE/$ARTIFACT.sig
curl -LO $BASE/$ARTIFACT.pem
cosign verify-blob \
--signature $ARTIFACT.sig \
--certificate $ARTIFACT.pem \
--certificate-identity-regexp '^https://github\.com/Cliftonz/jarvy/\.github/workflows/release\.yml@refs/tags/v[0-9.]+(-[A-Za-z0-9.]+)?$' \
--certificate-oidc-issuer 'https://token.actions.githubusercontent.com' \
$ARTIFACTTag Signature
This release was cut from a signed git tag. Verify with:
git -c gpg.ssh.allowedSignersFile=.github/allowed_signers tag --verify v0.6.2SBOM
Software Bill of Materials in SPDX 2.3 (sbom.spdx.json) and CycloneDX 1.4 (sbom.cdx.json).
Checksums
SHA256 checksums for all artifacts are in SHA256SUMS.txt.
v0.6.1
Caution
WITHDRAWN — do not install this release. The binaries and package
assets in v0.6.1 self-identify as 0.6.0 (the version bump commit was
missed before tagging), which breaks jarvy update with a perpetual
update loop. Use v0.6.2, the corrected re-release of exactly this
code: https://github.com/Cliftonz/jarvy/releases/tag/v0.6.2
Assets are left in place because releases are immutable by policy.
Fixes:
- nvm is now detected via its filesystem marker
(${NVM_DIR:-$HOME/.nvm}/nvm.sh) instead of shell probes. nvm is a
shell function, not a binary, so the previous PATH lookup and
bash -lcprobes could never see it — everyjarvy setupwithnvm
in the config re-downloaded and re-ran the installer, and the version
check reported nvm as needing install forever. Detection now converges
after one install, andjarvy upgrade nodecorrectly suggests
nvm installwhen node is nvm-managed. (Windows is unaffected:
nvm-windows is a real binary.)
Internal:
- CI action bumps (Dependabot):
actions/checkout4→7,
actions/download-artifact7→8,actions/setup-java4→5,
azure/setup-helm4.3.0→5.0.1,docker/setup-buildx-action3→4.
The release-critical ones were smoke-validated by dispatch runs
before this release.
This is also the first release upgradable to via
jarvy update --method binary from v0.6.0 — the redirect fix shipped in
v0.6.0 makes the updater work going forward (upgrading from v0.5.x
still requires the install script or a package manager).
Full Changelog: v0.6.0...v0.6.1
Installation
Quick Install (Unix)
curl -fsSL https://raw.githubusercontent.com/Cliftonz/jarvy/main/dist/scripts/install.sh | bashQuick Install (Windows PowerShell)
irm https://raw.githubusercontent.com/Cliftonz/jarvy/main/dist/scripts/install.ps1 | iexHomebrew
brew install Cliftonz/tap/jarvyCargo
cargo install jarvyEarly-Release Channel
Pre-release tags (-rc.N, -beta.N) are routed through the beta channel.
Opt in: JARVY_CHANNEL=beta on the install script, or jarvy update --channel beta.
See docs/release-testing.md.
See installation docs for more options.
Security
Verify Signatures
All release artifacts are signed with Sigstore keyless OIDC. Verify any artifact:
# Substitute a triple that matches your platform, e.g.
# aarch64-apple-darwin, x86_64-unknown-linux-musl,
# aarch64-unknown-linux-gnu, x86_64-pc-windows-msvc (.zip).
ARTIFACT=jarvy-v0.6.1-x86_64-unknown-linux-musl.tar.gz
BASE=https://github.com/Cliftonz/jarvy/releases/download/v0.6.1
curl -LO $BASE/$ARTIFACT
curl -LO $BASE/$ARTIFACT.sig
curl -LO $BASE/$ARTIFACT.pem
cosign verify-blob \
--signature $ARTIFACT.sig \
--certificate $ARTIFACT.pem \
--certificate-identity-regexp '^https://github\.com/Cliftonz/jarvy/\.github/workflows/release\.yml@refs/tags/v[0-9.]+(-[A-Za-z0-9.]+)?$' \
--certificate-oidc-issuer 'https://token.actions.githubusercontent.com' \
$ARTIFACTTag Signature
This release was cut from a signed git tag. Verify with:
git -c gpg.ssh.allowedSignersFile=.github/allowed_signers tag --verify v0.6.1SBOM
Software Bill of Materials in SPDX 2.3 (sbom.spdx.json) and CycloneDX 1.4 (sbom.cdx.json).
Checksums
SHA256 checksums for all artifacts are in SHA256SUMS.txt.
v0.6.0
Known issues:
- Upgrading from v0.5.x with
jarvy update --method binaryfails with
Checksum verification failed: the v0.5.x updater does not follow the
HTTP redirects GitHub now serves on release-asset downloads (fixed in
this release, but the fix cannot reach the old binary doing the
upgrade). Workaround: reinstall via the install script
(curl -fsSL https://raw.githubusercontent.com/Cliftonz/jarvy/main/dist/scripts/install.sh | bash)
or your package manager. Upgrades from v0.6.0 onward work.
Features:
jarvy run [name] [-- args]— npm-run-style command runner for a
[commands]table injarvy.toml. An explicitly named command is
treated as consent (shell chaining allowed; the command is printed
ANSI-stripped before exec), the child's exit code is propagated, and
the working directory is the config file's directory. Barejarvy run
lists the available commands; there is no implicitcargo run/cargo testfallback, and NUL-bearing (on Windows, also%-bearing)
-- argsare refused.jarvy shell-initemits a snippet definingjr
as shorthand, and shell-init/completions gain nushell support
alongside bash/zsh/fish/sh/powershell. Telemetry:run.command.*,
shell_init.generated,completions.generated.jarvy doctor --check <path,tools,hooks>— limit the health run to
specific categories (system info is always shown as context). Skips the
unselected probes entirely; an unknown category exits2with the valid
set. Composes with--toolsand--extended. Closes PRD-027.jarvy skills update [<name>]— re-fetch skills fromlibrary_sources,
compare the advertised version/sha against the installed sidecar per
agent, and reinstall only on divergence (no-op when unchanged; a pinned
[skills.install]version that no longer matches the library refuses
rather than silently drifting). PRD-049 phase 2.jarvy skills remove <name>— uninstallSKILL.md+ the
.jarvy-skill.jsonsidecar from every targeted agent. Idempotent:
removing an absent skill is a clean no-op. User-added companion files
next toSKILL.mdare preserved.- Ad-hoc
jarvy skills install <name>— a name absent from
[skills.install]now resolves from the configuredlibrary_sources
atlatestinstead of erroring (the--nameflag is replaced by a
positional argument). - All three subcommands accept
--format json(PRD-051), and emit
skills.updated/skills.removedtelemetry events (gated behind the
standard telemetry opt-in). jarvy setupobservability flags are now wired into the tracing
subscriber:-v/-vv/-vvvraise console verbosity,-qsuppresses all
but errors (without starvingjarvy.log/ OTLP),--log-format json,
--log-file <path>,--debug-filter <module>, and--profile/
--profile-output(phase-level timing report). These flags previously
parsed but were silently dropped.- 15 new tools:
allure,aws-sam-cli,cfn-lint,cypress,
goaccess,k3s,linkerd,locust,microk8s,playwright,
putty,structurizr,task,tmux,todoist.structurizris
the 2026 consolidated "software architecture models as code" tool
(C4 model) — installs via Homebrew / Linuxbrew (the old,
now-deprecatedstructurizr-cliformula is not used); no first-party
winget/choco, so Windows uses the.waror Docker image.k3sand
microk8scover single-node local Kubernetes: k3s is Linux-only and
installs from a commit-pinned, sha256-verified copy of the upstream
installer (no floatingget.k3s.iofetch); microk8s installs via snap
on Linux or Canonical's Multipass-backed Homebrew tap on macOS. [git]gains three capabilities (seedocs/git-config.md):[git.extra]— a free-form escape hatch for git config keys Jarvy
doesn't model as typed fields (core.fsmonitor,feature.manyFiles,
…), applied last so they override modeled fields. Each entry runs a
layered guard: dotted-grammar/flag-injection key validation, a
leading--value refusal (argv option-injection), an outright
refusal of keys whose value git executes (core.pager/editor/
sshCommand/askPass/hooksPath,pager.<cmd>,filter.*.clean,
*.textconv,merge.*.driver,remote.*.uploadpack,
init.templateDir, … — RCE the!-filter alone missed;
core.fsmonitor=true|falsestays allowed) overridable with
JARVY_ALLOW_GIT_EXEC_KEYS=1, a security-guardrail-downgrade check,
and a!-shell-value refusal (leading whitespace included). The
typededitor/credential_helperfields (which legitimately set
such keys) are value-guarded instead: a bare command/helper + flags
is allowed, a shell metacharacter /!/ program-path value is
refused. The dry-run preview runs the same gauntlet, so it shows
refusals rather than claiming a blocked key "would be set."os_defaults(default on;os_defaults = falseopts out) — writes
host-aware defaults for unset keys:core.autocrlf
(Windowstrue/ elseinput), Windowscore.longpaths, macOS
core.precomposeunicode, plus a cross-platform recommended set
(fetch.prune,rerere.enabled,merge.conflictStyle = zdiff3).
Explicit fields and[git.extra]always win; keys already matching
are skipped so re-runs don't re-write.- Security guardrail —
[git.extra]values that weaken a git defense
are refused (core.protectNTFS/protectHFS = false,
safe.directory = *(CVE-2022-24765),safe.bareRepository = all,
fsck.*/fetch.fsck.*/receive.fsck.* = ignore,
*.fsckObjects = false,http[.<url>].sslVerify = false) unless
JARVY_ALLOW_GIT_PROTECT_DOWNGRADE=1. - Trust boundary — a remote-origin config (
--from <url>) cannot apply
[git]unless it setsallow_remote = true, and even then writes are
forced to--localscope (never~/.gitconfig).jarvy setup --dry-runpreviews every OS-default and[git.extra]write. Full
git_config.*telemetry — lifecycle, adoption (extra_applied,
os_defaults_applied), and security refusals/overrides — all gated
behind the telemetry opt-out.
- Default post-install hooks for
rust(clippy/rustfmt + cargo env),
tmux(TPM plugin manager),kubectx(kctx/kns aliases), andnvim
(starterinit.lua). Unix-only where the tool also ships on Windows.
Added:
- Library manifests can now reference item bodies by URL instead of
inlining them (PRD-054 companion-fetch phase):ai_hookitems honor
bash_url/powershell_url(each requiring a matching*_sha256
pin), andskillitems install theircompanion_files(templates,
helper scripts) alongsideSKILL.md. Every companion fetch is
HTTPS-bounded, sha256-verified against the manifest pin (no
unverified fetch path), cached content-addressed under
~/.jarvy/library.d/companions/, and skill companion filenames are
path-safety validated so a hostile manifest cannot escape the skill
directory. New telemetry:library.companion.{fetched,sha_mismatch,fetch_failed,refused_filename}. - npm wrapper (
packages/npm/, PRD-021):jarvy-mcpnpm package that
downloads the platform-native jarvy release binary on install
(SHA256-verified against the releaseSHA256SUMS.txt, mirroring
install.sh) and exposesjarvy-mcp(runsjarvy mcp) andjarvy
bins.npx -y jarvy-mcpis now a zero-install MCP client command.
Not yet published to npm — maintainer action. - Docker image (
dist/docker/Dockerfile, PRD-021): multi-stage
Alpine image that builds jarvy from source, runs as a non-root user,
pinsJARVY_MCP_WORKSPACE=/workspace, and defaults to the MCP server
entrypoint..github/workflows/docker-publish.ymlbuilds
linux/amd64 + linux/arm64 toghcr.io/cliftonz/jarvy, gated on
release tags / manual dispatch only. - MCP registry submission prep (
dist/mcp-registry/, PRD-021):
server.jsonfor the official MCP registry
(io.github.cliftonz/jarvy, validated against the2025-12-11
schema) plus maintainer submission runbook. Ownership proofs are
pre-wired:mcpNamein the npm package.json and the
io.modelcontextprotocol.server.nameOCI label in the Dockerfile.
Not submitted — requires the maintainer to publish npm + ghcr first. - CI e2e coverage for Fedora, Arch, and Alpine via distro containers on
the free ubuntu runner (PRD-014). - Published GitHub Action (top-level
action.yml, PRD-017 phase 2):
installs jarvy (checksum-verified) and runs validate/setup/doctor, with
caching, outputs, and a problem matcher. Self-tested on
ubuntu/macos/windows. Referenceable asCliftonz/jarvy@v1once tagged. - VS Code extension (
editors/vscode/, PRD-017 phase 3): live
jarvy.tomldiagnostics, setup/doctor/validate commands, status bar,
and an unknown-tool quick fix. Compiles clean under stricttsc. - JetBrains/IntelliJ plugin (
editors/jetbrains/, PRD-017 phase 6):
Tools ▸ Jarvy actions + a TOML ExternalAnnotator driven by
jarvy validate. Builds via./gradlew buildPlugin(IntelliJ Platform
Gradle Plugin 2.x, JDK 21). - Consumable pre-commit hook (
.pre-commit-hooks.yaml) and devcontainer
feature (dist/devcontainer/jarvy/), PRD-017 phases 4–5.
Changed:
rustmigrated from a bespoke installer to thedefine_tool!macro
(so it can carry a default hook); removed a duplicaterustentry from
the tool index.- Removed ~1.3k LOC of unwired diagnostic surface: the
observability::{network_trace, bundle}modules (the latter duplicated
the wiredjarvy ticketbundler) and the per-tool/per-network arms of
the profiler.--profile-outputdurations now serialize as integer
*_ms, matching theduration_mstelemetry contract.
Fixes:
jarvy update --method binarynow follows HTTP redirects when
downloading release assets, fixingChecksum verification failedon
every binary self-up...
v0.6.0-rc.2
- fix(update): follow redirects when downloading release assets (64a3a1f)
Full Changelog: v0.6.0-rc.1...v0.6.0-rc.2
Installation
Quick Install (Unix)
curl -fsSL https://raw.githubusercontent.com/Cliftonz/jarvy/main/dist/scripts/install.sh | bashQuick Install (Windows PowerShell)
irm https://raw.githubusercontent.com/Cliftonz/jarvy/main/dist/scripts/install.ps1 | iexHomebrew
brew install Cliftonz/tap/jarvyCargo
cargo install jarvyEarly-Release Channel
Pre-release tags (-rc.N, -beta.N) are routed through the beta channel.
Opt in: JARVY_CHANNEL=beta on the install script, or jarvy update --channel beta.
See docs/release-testing.md.
See installation docs for more options.
Security
Verify Signatures
All release artifacts are signed with Sigstore keyless OIDC. Verify any artifact:
# Substitute a triple that matches your platform, e.g.
# aarch64-apple-darwin, x86_64-unknown-linux-musl,
# aarch64-unknown-linux-gnu, x86_64-pc-windows-msvc (.zip).
ARTIFACT=jarvy-v0.6.0-rc.2-x86_64-unknown-linux-musl.tar.gz
BASE=https://github.com/Cliftonz/jarvy/releases/download/v0.6.0-rc.2
curl -LO $BASE/$ARTIFACT
curl -LO $BASE/$ARTIFACT.sig
curl -LO $BASE/$ARTIFACT.pem
cosign verify-blob \
--signature $ARTIFACT.sig \
--certificate $ARTIFACT.pem \
--certificate-identity-regexp '^https://github\.com/Cliftonz/jarvy/\.github/workflows/release\.yml@refs/tags/v[0-9.]+(-[A-Za-z0-9.]+)?$' \
--certificate-oidc-issuer 'https://token.actions.githubusercontent.com' \
$ARTIFACTTag Signature
This release was cut from a signed git tag. Verify with:
git -c gpg.ssh.allowedSignersFile=.github/allowed_signers tag --verify v0.6.0-rc.2SBOM
Software Bill of Materials in SPDX 2.3 (sbom.spdx.json) and CycloneDX 1.4 (sbom.cdx.json).
Checksums
SHA256 checksums for all artifacts are in SHA256SUMS.txt.
24h soak: PASSED — see #52 for the audit trail.
v0.6.0-rc.1
- chore(release): bump version to 0.6.0 (6047101)
- feat(commands): add jarvy run command runner and nushell shell support (83af591)
- fix(cargo-jarvy): scaffold generated uncompilable module wiring (a7ae221)
- feat(tools): add k3s and microk8s local Kubernetes tools (72c4ce9)
- Merge chore/docs-remove-edit-button (16649c5)
- chore(docs): remove edit/view source buttons from doc pages (d148655)
- Merge feat/tools-directory (148b8a3)
- feat(docs): searchable tool directory with per-OS install commands (909ee6e)
- Merge perf/logging-allocations (5c0c47e)
- perf(logging): remove per-line allocations in log reading and stats (ec80d7a)
- Merge feat/tool-todoist (2a1f2da)
- feat(tools): add todoist CLI tool (8cc1a59)
- Merge chore/jetbrains-platform-2025.3 (3f90c45)
- chore(jetbrains): migrate to unified IntelliJ platform 2025.3 (2e666ae)
- Merge chore/jetbrains-platform-2025.2 (00af2fc)
- chore(jetbrains): build against IntelliJ platform 2025.2 (45e799f)
- Merge chore/vscode-dep-security (fc86997)
- chore(vscode): clear npm audit advisories in extension dev tooling (b6cfdc9)
- Merge fix/git-config-review-round2 (66e51eb)
- fix(git): round-2 hardening from parallel-review verification (87f931f)
- fix(ci): don't let jarvy doctor's health exit code fail the action e2e (a540068)
- test(e2e): headless VS Code integration + Action setup e2e (8501e93)
- fix(git): harden [git.extra] from parallel-review findings (b9b6810)
- ci(editors): PR-gated build/test workflows for the VS Code + JetBrains plugins (d4e5ba0)
- Merge feat/git-config-extra-os-defaults (b97ba1e)
- feat(git): [git.extra] escape hatch, OS-aware defaults, guardrails (47bad46)
- feat(tools): add structurizr tool (C4 architecture models as code) (8e7681c)
- docs: maintainer marketplace-publishing runbook (f307c11)
- Merge remote-tracking branch 'origin/feat/jetbrains-plugin' (86bac24)
- Merge remote-tracking branch 'origin/feat/vscode-extension' (95a642f)
- Merge remote-tracking branch 'origin/feat/gh-action' (e21f6fc)
- ci(jetbrains): marketplace publish workflow + signing config + release docs (1b2c0b4)
- ci(vscode): marketplace publish workflow + release docs (e049901)
- ci(action): independent action-vX version line + moving major tag (71c4b38)
- chore(tasks): PRD-017 all six phases built in-repo (b5bf8b3)
- feat(editor): JetBrains/IntelliJ plugin for jarvy (PRD-017 phase 6) (31d61ba)
- ci(action-selftest): authenticate install with github.token (b175d0a)
- Merge remote-tracking branch 'origin/main' into feat/gh-action (fb27bc8)
- fix(install): bash-3.2-safe empty-array expansion in gh_api_fetch (13c3c0b)
- Merge remote-tracking branch 'origin/main' into feat/gh-action (3179956)
- fix(install): stop exit-1-after-success + harden GitHub fetches (148ab31)
- feat(editor): VS Code extension for jarvy (PRD-017 phase 3) (dd02a3e)
- feat(ci): publishable GitHub Action for jarvy (PRD-017 phase 2) (893b9ee)
- feat(integration): consumable pre-commit hook + devcontainer feature (PRD-017) (67f7be6)
- feat(doctor): add --check category filter + observability integration tests (cbb600a)
- chore(tasks): reconcile PRD trackers with merged work (54c6889)
- fix(skills): reconcile update path with companion-fetch after merge (a65dea5)
- Merge branch 'feat/library-companion-fetch' (58b3f02)
- Merge branch 'feat/mcp-distribution' (35d79f6)
- Merge branch 'feat/skills-update-remove' (e2862f9)
- Merge branch 'feat/new-tools-batch' (57e7177)
- Merge branch 'chore/observability-cleanup' (27d6015)
- feat(library): companion file fetch for hook bodies + skill companions (PRD-054) (255478b)
- feat(dist): npm wrapper, Docker image, and MCP registry server.json (PRD-021) (40dc476)
- feat(skills): add jarvy skills update/remove + ad-hoc install (PRD-049 ph2) (15a603c)
- feat(tools): add 10 tools (testing, devops, network utilities) (5190ae3)
- docs(skill): note codex review --base cannot take a focus prompt (6d1171b)
- fix(observability): address parallel-review findings on the flag wiring (8bd1845)
- chore(ci): Bump gitleaks/gitleaks-action from 2 to 3 (#44) (98821f9)
- chore(ci): Bump codecov/codecov-action from 4 to 7 (#41) (e1aec49)
- chore(tasks): reconcile stale trackers against verified codebase state (ba804cf)
- ci(e2e): cover Fedora/Arch/Alpine via container jobs (PRD-014 T11) (bfbcf34)
- feat(tools): add default hooks for rust, tmux, kubectx, nvim (ede1958)
- fix(observability): wire setup logging/profiling flags; drop dead modules (661b759)
- chore(ci): Bump actions/github-script from 8 to 9 (#42) (3747f13)
- chore(ci): Bump anchore/sbom-action/download-syft from 0.17.9 to 0.24.0 (#40) (a9bf7ad)
- docs: add Fable 5 model-routing guidance and codex shell-out skills (4849be0)
- test(init): gate global-config tests behind test-bypass feature (d136a28)
- ci: upgrade first-party GitHub Actions to the Node 24 runtime (ce27ee6)
- docs(changelog): add Unreleased section for installer fixes (e3556b9)
- test(install): add installer unit tests + e2e/lint workflows (b42d0dc)
- fix(install): verify checksums and request the shipped Linux triple (257adc6)
- chore: update contributors (#45) (4322d8d)
- ci(release-paths): warn+skip binary-update when N-1/N-2 predates v0.5.2 (219e8a8)
Full Changelog: v0.5.2...v0.6.0-rc.1
Installation
Quick Install (Unix)
curl -fsSL https://raw.githubusercontent.com/Cliftonz/jarvy/main/dist/scripts/install.sh | bashQuick Install (Windows PowerShell)
irm https://raw.githubusercontent.com/Cliftonz/jarvy/main/dist/scripts/install.ps1 | iexHomebrew
brew install Cliftonz/tap/jarvyCargo
cargo install jarvyEarly-Release Channel
Pre-release tags (-rc.N, -beta.N) are routed through the beta channel.
Opt in: JARVY_CHANNEL=beta on the install script, or jarvy update --channel beta.
See docs/release-testing.md.
See installation docs for more options.
Security
Verify Signatures
All release artifacts are signed with Sigstore keyless OIDC. Verify any artifact:
# Substitute a triple that matches your platform, e.g.
# aarch64-apple-darwin, x86_64-unknown-linux-musl,
# aarch64-unknown-linux-gnu, x86_64-pc-windows-msvc (.zip).
ARTIFACT=jarvy-v0.6.0-rc.1-x86_64-unknown-linux-musl.tar.gz
BASE=https://github.com/Cliftonz/jarvy/releases/download/v0.6.0-rc.1
curl -LO $BASE/$ARTIFACT
curl -LO $BASE/$ARTIFACT.sig
curl -LO $BASE/$ARTIFACT.pem
cosign verify-blob \
--signature $ARTIFACT.sig \
--certificate $ARTIFACT.pem \
--certificate-identity-regexp '^https://github\.com/Cliftonz/jarvy/\.github/workflows/release\.yml@refs/tags/v[0-9.]+(-[A-Za-z0-9.]+)?$' \
--certificate-oidc-issuer 'https://token.actions.githubusercontent.com' \
$ARTIFACTTag Signature
This release was cut from a signed git tag. Verify with:
git -c gpg.ssh.allowedSignersFile=.github/allowed_signers tag --verify v0.6.0-rc.1SBOM
Software Bill of Materials in SPDX 2.3 (sbom.spdx.json) and CycloneDX 1.4 (sbom.cdx.json).
Checksums
SHA256 checksums for all artifacts are in SHA256SUMS.txt.
24h soak: PASSED — see #51 for the audit trail.