`rebuild --backend <name>` uses a configured backend of that name as it is, and registers an installed agent whose name matches when it is not added yet; an unknown name adds nothing. Follow-up to #819 (R5.5).
`rebuild` looks for and saves a coding agent only when no enabled AI can build, so a run with an API backend no longer adds Claude Code to the settings; a refused command changes nothing (R5.5).
Tests for both start-panic decisions (passed through, turned into a start error before the window showed, resumed after), now in a module CI runs on every platform. An early panic is reported as an internal error rather than a graphics failure, since it can be any bug in the first moments. Follow-up to #786.
On macOS the system menu bar has the app's actions with the usual Mac shortcuts (Settings ⌘, · New project ⌘N · Open ⌘O · Command palette ⌘K · Quit ⌘Q, the Simple/Advanced and Clean room/Deep choices, and Help links to this repository), through muda. Other systems are unchanged.
Supersedes #791.
Co-authored-by: sanketdofe <46375884+sanketdofe@users.noreply.github.com>
When the Claude desktop app is installed but Claude Code isn't, the setup card and ai detect say so and how to install Claude Code (refs #259).
Supersedes #781.
Co-authored-by: FuryNocturn <28540819+FuryNocturn@users.noreply.github.com>
When the graphics can't start the window, the app shows why in the start-failure dialog instead of crashing: a panic before the first frames were shown is reported like any other start failure.
The window opens on Macs whose Metal compiler rejects the shader language version wgpu takes from the macOS version: a patched wgpu-hal 30.0.1 (identical to the released crate except for this probe) compiles a tiny kernel with each version up to the OS's and keeps the first one accepted. A lost device on a Mac no longer points at the Windows-only software renderer setting (fixes#742).
Each Claude Code AI can have its own folder (CLAUDE_CONFIG_DIR) in Settings → AI or with craft-anything-cli ai folder, so each can use a different account; the sign-in check, runs and sessions use that folder.
GitHub Copilot CLI can be a coding agent over ACP, with its models chosen through the shared agent model catalogue; options that could bypass the app's tool restrictions are refused, and agents share investigation findings safely.
On Linux a switched-off screen (a closed laptop lid) no longer counts as the one the GPU drives, and PCI ids pick a card only when no other card shares them (follow-up to #659).
On Linux the window is drawn on the GPU that drives the screen (the built-in panel's, or the only one with displays), so laptops with two GPUs open fast and don't lag; WGPU_ADAPTER_NAME and WGPU_POWER_PREF still decide (fixes#571). Replays #578.
Co-authored-by: Thân Minh Nghĩa <thanminhnghia3@gmail.com>
Replays #576, #577, #581, #589, #624, #625 and #628. Builder steps stop after 25 failed builds in a row, OpenRouter tool requests ask for a provider that supports tools, a start that never opened a window draws in software next time, spinners stop redrawing every frame, local builders get a lean tool list, lldb call observation works and reports failures, and LM Studio is found on other ports.
Co-authored-by: Fábio Soares <fabiodev1123@gmail.com>
Supersedes #216. A prompt brought back with Up keeps the pictures it was sent with. feed.json moves to version 3: a User item with pictures is saved as {text, pictures}, one without stays a plain string, so older files read as before. Picture paths are absolute, so they don't come back after the project is moved.
Co-authored-by: muraa-p <muraa-p@users.noreply.github.com>
runtime_captures_compare's left and right parameters are declared as a string or an object instead of a boolean schema, which made Claude Code drop every tool from the MCP server; on the command line a JSON object passed to them stays an object.
Fixes#522. On Windows the app draws with the DX12 shader compiler that ships with Windows (FXC) unless WGPU_DX12_COMPILER says otherwise, and a lost graphics device says how to draw without the graphics card (CRAFT_ANYTHING_RENDERER=software).
On Windows the app starts only DX12 by default, since starting Vulkan crashed on some Intel drivers before any window opened; WGPU_BACKEND still picks others. Fixes#394.
Claude's effort goes up to xhigh and max. A model without a level gets the nearest one below it. The level is chosen in Settings → AI or with craft-anything-cli ai effort, and over SSH it reaches the other computer. R2.9.
`craft-anything-cli capabilities` lists each tool with `available`, `needs_target` and `reason`. To show target tools as usable before anything is open, it marked every target tool available and dropped its reason. That also covered tools Clean room refuses, so in Clean room `native_function_pseudocode` read as available with no reason, though the engine refuses it.
Only the "nothing is open yet" refusal is waived now. A target tool the mode refuses keeps `available: false` and its Clean room reason, with `needs_target: true` as before. In Deep mode nothing changes.
**Verified:** a new CLI test runs `capabilities` in Clean room (the tool is unavailable with a reason) and with `--deep` (available, no reason). `cargo test -p craft-anything-cli` and clippy pass.
Fixes#249
The adapter ranking is (GL last, fastest device first, DX12 before Vulkan), so a GPU offered over both backends starts on DX12, out of reach of Vulkan overlays, while a real Vulkan GPU still beats Windows' software renderer.
eframe starts every wgpu backend before an adapter is picked, and starting GL loads the system's OpenGL driver; Intel's ig9icd64.dll crashed in it (0xc0000005), so the app vanished with no window or error box. Windows now starts the primary backends only (DX12 with WARP, Vulkan); WGPU_BACKEND still decides when set.
Fixes#196
When the window can't start, the app shows an error box with the reason, a hint to update the graphics driver and where desktop.log is, instead of exiting with nothing on screen. For #166, #104, #74 and #33.
Settings → AI shows each AI's model with Change…, listing the API's own models or Claude's models for Claude Code; craft-anything-cli ai model <name> [model] lists or sets it. Fixes#123 and #127.
Settings → AI gets an Add an AI by its address form; AiHub::add_server asks the server for its models before adding it and picks one that can chat when none is named; ai add --kind openai_compatible --base-url without --model does the same. Fixes#54, #98 and #128.
On macOS the window gets an empty icon, which keeps the bundle's icon (padded to Apple's icon grid) instead of replacing it with the full tile. Fixes#102.
Each local agent app in Settings → AI shows which program runs it, with Choose… and Find it automatically; craft-anything-cli ai program <name> [path] does the same. The not-installed errors point there instead of a setting that didn't exist.
engines_list, doctor, capabilities and Requires::Engine share Settings::engine_path, which honours the Ghidra folder setting, and locate() finds an engine unpacked into a versioned sub-folder.
In a VMware Windows VM the virtual GPU is reached through GL, which drew a black window, while
Windows' software renderer (WARP, over DX12) works. The desktop app now picks its graphics adapter
itself on Windows: GL comes after every other adapter, WARP included, and otherwise the fastest
device first, as before. GL stays the last resort when it's all there is, WGPU_BACKEND still
narrows the choice, and the adapter used is written to desktop.log.
Fixes#27
The status row names the command or file under way instead of only counting
actions. "More detail" opens the latest lines: stages, every command and file
with how it ended, what the builder said, and what programs printed outside the
conversation. Everything is kept in build-activity.log, with secrets hidden, and
the rebuild_activity_show tool and the CLI read the same.
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Claude Code's figure is its own guess at API prices, which a subscription
isn't charged. The project page now says "AI cost (estimate)" with a note
saying so, and the title bar says "(estimate)". What an API key was charged
is kept apart in usage.json; older files count as estimates.
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
* Stop deadlocks as they form and watch every lock for one that never lets go
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Give the stuck-lock banner's test a program of its own
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
* Explain failed agent runs, keep a log to open, and stop offering git servers as computers
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Fix a lock-up: the build's agent setup took the session lock twice in one statement
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
A native, pure-Rust app that shows anyone how a piece of software works, with
evidence-backed answers, then helps them rebuild it. It ships a desktop app, a
CLI and an MCP server, all driven by one engine.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>