ClaudeForge 2026.3.715
Downloads
| Platform | Architecture | File |
|---|---|---|
| Windows | x64 | ClaudeForge-win-x64.zip |
| Windows | ARM64 | ClaudeForge-win-arm64.zip |
| Linux | x64 | ClaudeForge-linux-x64.tar.gz |
| Linux | ARM64 | ClaudeForge-linux-arm64.tar.gz |
| macOS (Intel) | x64 | ClaudeForge-osx-x64.tar.gz |
| macOS (Apple Silicon) | ARM64 | ClaudeForge-osx-arm64.tar.gz |
The version (2026.3.715) is encoded in the release tag rather than in
the archive filenames — publish.ps1 produces unversioned artefact names
so local dev builds and CI builds share one filename pattern.
Linux: Extract, then run the bundled linux-setup.sh to install a per-user .desktop entry so Wayland compositors render the window icon correctly:
tar -xzf ClaudeForge-linux-x64.tar.gz -C ~/ClaudeForge
cd ~/ClaudeForge
./linux-setup.sh
./ClaudeForgemacOS: The binary is unsigned. Use the bundled allow-app-to-run.sh to strip the Gatekeeper quarantine xattr from every file in the extracted directory:
tar -xzf ClaudeForge-osx-arm64.tar.gz -C ~/ClaudeForge
cd ~/ClaudeForge
./allow-app-to-run.sh
./ClaudeForge✨ New & improved
One model picker, everywhere. Essentials and Model & Effort had two different
controls — Essentials had fuzzy, friendly suggestions but looked like a bare text box;
Model & Effort had the drop-down chevron but listed raw hyphenated ids. They're now a
single shared ModelPicker: friendly brand names ("Opus 4.8") over the dim raw id, fuzzy
matching (typing Opus finds opus, claude-opus-4-8, opus[1m]), and the chevron
that drops the full list. A custom id can still be typed by hand.
Environment page: env is now browsable. Its ~305 declared variables render as
collapsible, virtualized categories grouped by name prefix — CLAUDE · 159, OTEL · 30,
ANTHROPIC · 40, … plus Other — with headers in the page accent colour. Previously a
single flat wall of editors.
theme is a real picker. It's schema-defined as a string (a fixed enum or a
custom:<slug> reference), but was falling through to the raw-JSON box. It now renders as
a value picker with the 7 theme names as suggestions and free-form typing for
custom:<slug> — which also makes the old, baffling "Value matches none of the 2
permitted variants" error impossible to hit.
Smarter raw-JSON editor for settings with no structured editor: a Format button
(parse + pretty-print) and live structural validation — a wrong root kind ("expects a JSON
array, but the value is an object") or a missing required property now surfaces inline as
an amber advisory, distinct from the red hard parse error.
Loading is no longer easy to miss. App load (which can take several seconds, while the
window is still painting) now shows a centered progress card over a dimmed content area,
replacing the 100×4 bar tucked into the status bar's bottom-right corner.
Richer schema-validation banner — reports the offending value, the scope that defines
it, and the permitted values, and stays selectable/copyable.
Memory → User Memory renders front-matter richly, matching Agents & Skills.
JSON tooltips + formatted-JSON popups are now consistent across the grids and the
Effective tabs (previously only some surfaces had them).
Deep-link filters are visibly marked — navigating from a search result injects a
property filter, and the filter box now carries an orange frame matching the deep-link
Back button, which clears the moment you edit or clear the filter.
🐛 Fixes
- Diagnostics windows crashed on re-open. Closing the F12 log window (or the Shift+F12
config-events window) with the OS ✕ destroyed it, so the next toggle threw
Cannot re-show a closed window. They now hide on close instead. - The Essentials model editor rendered blank (title and description, no input). A
subclassedAutoCompleteBoxtakes its own type as style key, so it matched no
ControlThemeand got no template. - The deep-link orange filter frame never appeared — for any deep link, not just
search. Two Avalonia traps stacked: the style was scoped to the element it targeted
(a control'sStylesapply to descendants, not itself), and the element also set
BorderBrushas an attribute — a LocalValue, which outranks every Style setter. - Claude Desktop → Version Information: "Open Config" and "Show in files" were disabled.
⚡ Performance
Environment properties page: ~4.4s → instant. The env object rendered its ~305
children eagerly through a non-virtualized nested list, realizing 306 property-editor
rows on every visit. (The page's top-level list was virtualizing correctly all along —
Advanced, with 94 top-level editors, only ever realized 7. The cost was nesting, not
count.) Large objects now render as collapsed categories whose children aren't built until
expanded, and each expanded section is bounded and virtualized.
Mid-sized objects (e.g. sandbox, 35 children) are untouched and still render inline —
the accordion is reserved for the pathological case (>150 children).
🔭 Diagnostics
[Editor.Rebuild] group=… editors=N elapsedMs=Tand[Editor.Activate] … rebuilt=…—
shows whether a slow page is a view-model rebuild or view realization.[PropView.Realized] group=… wrappers=N sinceCtorMs=T— a standing perf guard. A healthy
page realizes a screenful; a count in the hundreds means something is eagerly building a
subtree again (this is what localized the Environment regression).
📚 Docs
docs/AVALONIA-GOTCHAS.md— three new sections: Styling / theming (LocalValue
outranks every Style setter; a control'sStylesapply to descendants, not itself — and
both traps can mask each other), Templates / controls (DataTemplates match in
declaration order, so a subclass template must precede the base;ItemFiltersupersedes
FilterMode), and Virtualization / perf (virtualization is per items-host and needs a
bounded viewport;IsVisible="False"still realizes a subtree).AGENTS.md— the same rules added to the agent rules table and topic index.