Repository navigation
Hyperloom v1.1.1
Hyperloom v1.1.1
This is a patch release on top of 1.1.0. The session record does not move, so a session recorded by 1.1.0 resumes on this build.
Most of it is the Recipe knowledge base telling the truth: the prior work a session had actually earned was not reaching the model at all — an exact warm-start hit printed "first session for this workload/hw", and the lessons and pitfalls sections rendered (none) no matter how much a prior session had learned. The other corrections are in agent-backend selection, which three places answered differently, and in the supervisor watchdog, whose restarts are now resumable and bounded.
The command line and the environment contract do move: one optimizer option, one console script and eight environment variables that 1.1.0 accepted are gone, one variable's accepted values narrow, and one option is added. The ones that need a plan before upgrading are listed under Breaking changes; the full per-change list is in CHANGELOG.md.
Highlights
1. The warm-start block, the KB's lessons, and its pitfalls reach the model again
All three read field shapes no writer produces. An exact hit carrying a full config printed (no recipe text — first session for this workload/hw), and sections 5b and 5c rendered (none) regardless of what a prior session had recorded (#1466, #1464). The block now renders warm_start_context, the view recipe_kb_t0 already persists on every anchor, and a borrowed config is labelled with the model it came from. No recorded knowledge was lost; until now none of it was being shown. A losing operator's progress is also banked rather than discarded, and a warm start is picked by measurement (#1448).
2. One rule picks the agent backend across both packages
A configured credential first, then an installed SDK, with Claude ahead of Codex. Four places answered this and three disagreed, so forge-loop on an OpenAI-only host could resolve to Claude and then fail to authenticate (#1472). The Robustness Agent's RCA engine follows the same precedence instead of checking the OpenAI side unconditionally. One consequence worth naming: a deployment whose runtime is logged in by other means is no longer refused up front — forge-fuse dropped its --agent-backend auto usage error and forge-fusion dropped the llm_provider_unconfigured result, leaving the real authentication failure to the preflight that can see it.
Forge also stops naming its own settings: it reads Hyperloom's environment contract (CLAUDE_MODEL / CODEX_MODEL) and nothing above it, and reasoning effort falls back to the project-wide HYPERLOOM_REASONING_EFFORT (#1442). One reasoning-effort ladder now covers both surfaces — see Breaking changes.
3. Supervisor watchdog restarts are resumable and bounded
A wedged coordinator takes SIGHUP and keeps its interrupted phase segment rather than recording a session outcome; three restart attempts, counted durably before the signal goes out, make the wedge terminal (#1462). Separately, the robustness monitor now reads the real stop-reason vocabulary — it had been importing a module that does not exist and silently falling back to a subset missing 16 terminal reasons, so a finished session could be relaunched. Long executor subprocesses also move off the event loop (#1471).
4. --extend-hours grants a resumed session more budget
Elapsed time is summed forward across every leg and never reset, so this is the only way to continue a run that has already spent its budget. The grant is applied on --resume-from and recorded in the session state with its reason; it defaults to 0.0, so an invocation that does not pass it behaves as before.
5. The collective lane becomes part of the rewrite controller
A communication operator and a dense operator are the same rewrite job; the only thing separating them was the measurement harness, which belongs to a task's driver rather than to a lane of its own (#1424). The entry gate, apply checkpoint, recovery module, SharedState campaign ledger and breakdown section go with it, along with five environment variables (see Breaking changes). The nccl_summary extractor stays, and the row it produces remains in kernel_candidates.json for opportunity analysis to read like any other candidate. The rewrite lane itself is fixed to reach an operator, measure it and land it (#1420), on one speedup metric against one baseline (#1497).
6. Forge token spend is attributed, then cut
The run's token spend is published at one fixed path (#1479), the nested forge-loop ledger is recovered or reported as partial rather than silently short (#1477), FlyDSL rewrite LLM usage is reported complete (#1474), and the context itself is cut once the spend is attributable (#1443).
7. Bare-metal vllm default is 0.29.0+rocm723, up from 0.27.1
install_baremetal.sh, the compatibility matrix, the install guide, the example SKILL.md recipes, and assets/slurm/models.tsv all name it (#1476, #1510), with v2 runner patches for vLLM 29 (#1487) and the matching TraceLens profiler-config patch verified to apply against the upstream tag. VLLM_VERSION and VLLM_ROCM_VARIANT override it as before. The bare-metal framework install also works on pip-packaged ROCm (#1503), and an unknown GPU arch is no longer reported as MI300X (#1460).
8. Dead surfaces are removed
The pre-rename KernelForge console script kept as an alias since v1.0.0b2, superseded by kernelforge; and its learning/ tuning database with the tracker's superseded scoring layer and a closed fusion reachability island — about 1.4k lines of production code whose writes had already been disabled (#1439). The one observable difference: a forge-loop run no longer writes lesson markdown under the writable knowledge base's learned/ directory and no longer prints Lessons learned: N. Nothing read that directory.
Breaking changes
An operator upgrading from 1.1.0 has to plan for these. The removed option is refused loudly; everything else on this list is silent.
--breakdown-include-transcriptsis removed, along with the exportedspecialist_runssection it inlined into. Recording the breakdown at author time retired that section outright (#1455), so there is nothing left for the option to inline. The parser is strict, so a launch or resume command that still carries it exits withunrecognized argumentsbefore the session starts. Transcripts are unaffected: they are still written to disk and travel astranscript_path, which is what a reader of the exported breakdown follows instead.- The deprecated
kernel-agentsconsole script is gone. The rename tokernelforgeshipped in v1.0.0b2 and the alias was kept for one release. A script invoking it fails withcommand not found. Thekernel_agents.agent_providersentry-point group stays — it is how third-party provider plugins published before the rename are still discovered, and it is not a CLI surface. - Eight environment variables 1.1.0 read are gone, and nothing refuses them. A box that still exports them starts normally and behaves as though they were never set, so they have to be found by reading launch scripts and
.envrather than by watching a run fail.FORGE_CLAUDE_MODEL,FORGE_CODEX_MODEL,FORGE_AGENT_MODEL— setCLAUDE_MODEL/CODEX_MODELinstead. A box left on the old names falls through to the provider default.HYPERLOOM_SKIP_COLLECTIVE,HYPERLOOM_COLLECTIVE_ONLY,HYPERLOOM_COLLECTIVE_KEEP_PCT,FORGE_COLLECTIVE_TIMEOUT,FORGE_COLLECTIVE_AGENT_TIMEOUT— delete them. They steered the collective optimization lane, which is now part of the rewrite controller; communication operators are picked up as ordinary rewrite candidates and need no separate switches.
HYPERLOOM_REASONING_EFFORTno longer takesminimalornone. The ladder islow | medium | high | xhigh | max, and the two sides that read it disagree about a value outside it: Forge refuses at startup ('minimal' is not a reasoning effort), while Hyperloom's ownchat.completionsdrops the field and takes the gateway default — deeper and more expensive thanminimalwas. A deployment sitting on either value has to move tolowby hand, and only one half of the run will say so.- KernelForge's same-provider model fallback is removed (#1437), and the Codex default no longer names a deployment the gateway does not serve.
What's included
Recipe knowledge base and warm start
- fix(state): stop the warm-start block claiming a cold start on a KB hit - #1466
- fix(prompts): render locally recorded lessons and pitfalls - #1464
- fix(kb): bank a losing operator's progress, and pick a warm start by measurement - #1448
Agent backend, models and reasoning effort
- fix(agents): unify agent backend selection on credentials, then SDK - #1472
- Forge takes its model and effort from the runtime, and Hyperloom's env names - #1442
- Remove KernelForge same-provider model fallback - #1437
Supervisor and session lifecycle
- fix(supervisor): make a watchdog restart resumable, bounded, and sized by the backend it interrupts - #1462
- fix(orchestrator): run long executor subprocesses off the event loop - #1471
- [Stepping] Stateless orchestration: one full projection per turn - #1410
- [Refactor] Rework the enablement / bring-up round lifecycle - #1409
- [Stepping] Make the source scope advisory, not a permission set - #1418
- Fix/controller patch integration and pump liveness - #1501
Kernel optimization: rewrite lane and GEMM tuning
- refactor(kernel): merge the collective lane into the rewrite controller - #1424
- fix(kernel): make the rewrite lane able to reach an operator, measure it, and land it - #1420
- Rewrite layer: one speedup metric, one baseline, and KB ports admitted on evidence - #1497
- gemm-tune: actually open the tier3 path, and let it reach fused MoE - #1452
- fix(gemm-tune): stop the demand ranking from deciding whether decode is tuned - #1454
- fix(aiter): rebuild serving .so when tuned CSV kernels miss the JIT registry - #1457
- Retain validated GEAK changes through recheck, sweep and export - #1428
- Publish the AgentX workload identity in the GEAK handoff - #1365
- [FIX] KernelForge: exempt the loop's own aiter cache from the workspace guard - #1412
Forge token accounting
- Forge token efficiency: attribute the spend, then cut the context - #1443
- feat(forge): publish the run's token spend at one fixed path - #1479
- fix(forge): recover the nested forge-loop token ledger, or say it is partial - #1477
- fix(forge): report complete FlyDSL rewrite LLM usage - #1474
- fix(forge): let a hookless provider run concurrent lanes - #1473
Agentic replay (AgentX)
- [Feat] Grade AgentX on the axis InferenceX ranks - #1444
- fix(agentx): align Hyperloom measurement and integration contracts - #1447
- feat(agentx): support cross-GPU reference comparisons - #1484
- fix(agentx): isolate aiperf in a compatible Python environment - #1441
Measurement and telemetry
- fix(telemetry): record each round's GPU telemetry instead of losing it to a name mismatch - #1445
- feat(kv): collect KV cache occupancy and pressure from the engine - #1446
- fix(profile): recognize SGLang graph capture directories - #1488
- Remove Trace Analysis Routes that Replicates TraceLens Features - #1368
- Honor --no-eval on Magpie explore rematerialization - #1438
Session Breakdown
- refactor(breakdown): record the Session Breakdown at author time, and retire the read side it replaced - #1455
- fix(sbd-v6): name the copies an enablement round left in the archive - #1415
Dead-surface removal
- refactor(kernelforge): remove three superseded subsystems (-1.4k production lines) - #1439
- refactor: compact Python comments and docstrings - #1421
Framework and deployment coverage
- chore(vllm): bump bare-metal default to 0.29.0 - #1510
- feat(baremetal): bump vLLM default to 0.28.0 with glibc gate - #1476
- Feat/vllm v29 patch - #1487
- Make the bare-metal framework install work on pip-packaged ROCm - #1503
- Move TraceLens SHA - #1463
- fix(sglang): stop forcing --moe-runner-backend, let sglang auto pick it - #1459
- Stop reporting unknown GPU archs as MI300X (baremetal) - #1460
- minor fix for NODE_EXTRA_CA_CERTS and NODE_TLS_REJECT_UNAUTHORIZED - #1500
CI
- ci: balance six test shards and remove redundant coverage work - #1475
- fix(ci): overwrite stale shard artifacts on reruns - #1502
- ci(e2e): let one PR opt into a different runner, instead of all of them - #1485
- ci: let the e2e job name its runner pool - #1453
Release
- chore(release): cut 1.1.1 - #1519
Three changes that merged during this cycle were reverted before the cut and are not in this release: #1520 (sbd-v6 grading axis, reverted by #1523), #1511 (roofline capture-failure classification, reverted by #1524) and #1495 (KB partition-key guard, reverted by #1525).
Requirements
ROCm platform with a supported AMD Instinct GPU (MI355X / MI325X / MI300X; MI308X detection); Docker with AMD ROCm support, Kubernetes with AMD GPU nodes, or the supported bare-metal setup; Claude Code IDE with Remote SSH; an Anthropic API key or compatible Anthropic gateway, or an OpenAI-compatible gateway; tmux, jq, Node.js >= 18, and Claude CLI.
The recommended stack uses the official upstream images: lmsysorg/sglang-rocm:v0.5.18-rocm724-mi30x-20260825 and lmsysorg/sglang-rocm:v0.5.18-rocm724-mi35x-20260825 for SGLang, and vllm/vllm-openai-rocm:v0.29.0 for vLLM. The vLLM image entrypoint is vllm serve, so a long-running Hyperloom container has to override it (for example --entrypoint tail).
Validated component versions are listed in the compatibility matrix: TraceLens 1.0.0, GEAK 4.0.0, IntelliKit 0.1.1, AgentKernelArena 0.2.0, Magpie 0.2.0.
The wheel is published on PyPI:
pip install hyperloom-inference-optimizer==1.1.1 --target .Bare-metal installs read HYPERLOOM_WHEEL_TAG, which now defaults to v1.1.1, so this release must carry the rocm-profiler-hotfix-libs.tar.gz asset.
Stability
v1.1.1 is a patch release under semantic versioning. Nothing in the session record moves, so a 1.1.0 session resumes on this build. The breaking changes listed above are confined to the CLI surface and the environment contract; the wheel's public Python API and the installation workflow are unchanged.