hermes-agent/scripts
ethernet 711f0b6d93 feat: nix builds the managed runtime dir from runtime-pins.json
nix/npm-12-0-2.nix pinned npm 12.0.2 with an SRI hash while
runtime-pins.json pinned the same npm with a hex digest, and nothing
connected them: two files to bump, and a devShell free to ship a
different npm than every user's install. Nix is now a consumer of the
pin table, not a second table.

Shape: one derivation per pinned tool, `extends` in the table becoming a
real Nix dependency (npm's derivation takes node's, so Nix orders the
builds and neither side restates "npm needs node"), and a bundle that
symlinks them into a runtime dir.

That bundle is not a set of specially-wrapped programs. It is the layout
runtime_registry.py already describes, and Nix does not reimplement any
of the knowledge about it: the build RUNS the real loaders and writes
what they return. runtimes.json comes from save_facts, path-dirs from
runtime_env.managed_path_dirs, tool-env from managed_tool_env. Nix reads
those three files. That is load-bearing, not tidiness — the layout is
per-tool, and a hand-rolled lib.makeBinPath silently dropped uv and
ripgrep, which keep their binary at the tree root rather than in bin/.

The devShell and the package therefore both ship the pinned toolchain:
node 26.7.0 (nixpkgs carried 26.5.0), npm 12.0.2, uv, git, gh, ripgrep,
each with the env its layout needs. `hermes doctor` on the built package
reports all six as managed at their pinned versions.

Sealed installs fail loudly on drift. A git checkout provisions on
demand, so a mismatch there is transient and raising would break the run
that fixes it; a nix/docker/desktop tree cannot provision at all, so a
mismatch means the artifact was assembled against a different pin table
than the code it ships. require_current_runtimes refuses at that point
and `hermes doctor` reports drift as an error rather than a warning,
both keyed off the existing runtime_tree Sealed/GitCheckout split.

Packaged installs locate the table through HERMES_RUNTIME_PINS and the
prebuilt tools through HERMES_RUNTIME_DIR, set by the package wrapper —
the same bare-data-dir treatment as HERMES_OPTIONAL_SKILLS and
HERMES_BUILD_INFO. The table is deliberately not wheel package-data: we
build wheels only for the Nix package, and package-data would put it in
every wheel anyone ever builds.

Evaluation stays free of import-from-derivation. The generated files are
read in build phases, never with builtins.readFile on a derivation, so
`nix flake check --no-build` and cross-system eval still work.

run_tests.sh forwards the git env vars alongside PATH. The devShell puts
a relocated git on PATH, and `env -i` kept PATH while dropping the env
that git needs — the two have to travel together.
2026-08-13 18:16:20 -04:00
..
ci fix(ci): don't report all-good before jobs start 2026-08-09 22:24:19 -04:00
observability
sandbox feat(dev-sandbox): support fake installer / fake main / git clones 2026-08-04 17:36:26 -04:00
tests test(install): exercise 8.3 normalization by running install.ps1, not by parsing it 2026-08-04 15:34:32 -06:00
toolperf_abeval feat(scripts): reproducible core-toolset A/B eval harness (toolperf_abeval) 2026-08-05 13:43:30 -07:00
whatsapp-bridge fix(deps): patch 31 known CVEs across Python and npm lockfiles 2026-08-08 14:06:48 -07:00
LIVETEST_README.md
add_contributor.py fix(scripts): accept legacy consecutive-hyphen GitHub logins in add_contributor 2026-07-24 22:40:15 -07:00
analyze_livetest.py
audit_pr_attribution.py feat(ci): auto-fixable contributor attribution — audit_pr_attribution.py + gate points at it 2026-08-02 15:26:59 -07:00
benchmark_browser_eval.py
build-bundled-desktop.mjs rip out old stuff 2026-08-11 23:39:11 -04:00
build_model_catalog.py
build_skills_index.py fix(skills-hub): include owner in ClawHub source URLs and add retry on 429 (#51236) 2026-07-31 22:33:11 -07:00
capture-cage-terminal.sh
check-windows-footguns.py feat(lint): close the fdopen + chained-call gaps in the encoding footgun gate 2026-08-08 12:32:23 -07:00
check_subprocess_stdin.py
contributor_audit.py chore: release v0.20.0 (2026.8.3) 2026-08-03 09:57:23 -07:00
desktop-update.ps1 fix(desktop): focus the update progress window, then hand focus to the relaunched Desktop 2026-08-09 02:01:57 -07:00
dev-minimal-sandbox.sh feat(tooling): minimal sandbox 2026-08-10 12:03:12 -04:00
dev-sandbox.sh feat(dev-sandbox): support fake installer / fake main / git clones 2026-08-04 17:36:26 -04:00
discord-voice-doctor.py
docker_config_migrate.py refactor: config auto-migration support floor at v12 + deprecated shim retirement 2026-07-29 16:44:31 -07:00
docker_rebootstrap_nous_session.py
generate_conformance_vectors.py feat(conformance): vector generator — native renderers as executable spec (#71666) 2026-07-26 16:52:25 +10:00
hermes-gateway
install.cmd
install.ps1 feat: manage npm 12 as a pinned runtime, ordered by `extends` 2026-08-13 14:00:32 -04:00
install.sh feat: manage npm 12 as a pinned runtime, ordered by `extends` 2026-08-13 14:00:32 -04:00
install_psutil_android.py
iso-certify.py
keystroke_diagnostic.py
kill_modal.sh
lint_diff.py
micro_compaction_report.py feat(agent): report context occupancy, not just tokens saved 2026-07-31 17:44:19 +05:30
profile-tui.py
release.py feat(release): publish releases as draft 2026-08-11 20:09:22 -04:00
run_tests.sh feat: nix builds the managed runtime dir from runtime-pins.json 2026-08-13 18:16:20 -04:00
run_tests_parallel.py ci: add macos and windows test lanes for the os-marked tests 2026-08-09 22:09:49 -04:00
sample_and_compress.py
smoke_nemo_relay_shared_metrics.py Merge updated client resource metrics into active-install metrics 2026-08-04 15:10:41 -07:00
tool_search_livetest.py bench: Unreal-scale live benchmark — Epic's real 830 UE 5.8 schemas replayed (Opus 4.8) 2026-07-26 08:26:09 -07:00
tool_search_livetest2.py fix(lint): encode remaining write_text calls in the tool_search livetest harness 2026-07-26 11:54:03 -07:00
tool_search_livetest_ue.py fix(lint): explicit encoding on probe-file open in UE harness (PLW1514 + windows-footguns) 2026-07-26 08:26:09 -07:00
tool_search_livetest_ue_disc.py bench: discovery-bound suite — paraphrase/absence/survey tasks isolate the listing's structural advantage 2026-07-26 08:26:09 -07:00
tool_search_livetest_ue_hard.py bench: adversarial 830-tool gauntlet — confusion clusters, type-aware error mocks, strict scoring 2026-07-26 08:26:09 -07:00
write_install_stamp.py nix: add desktop-light, move the linux .desktop file to electron-builder 2026-08-12 01:21:52 -04:00