Repository navigation
Make the AI Control Center easy to set up and honest about what works - #3
Merged
Merged
Conversation
The old page showed a green "everything stays on this computer" banner and "On-device" badges while Ollama wasn't even running, and asked users to assign models before they had anywhere to run them. Backend - GET /api/ai/health: live per-task check (runtime up, model downloaded, key present and accepted, Local-only blocking, tool support, provider embedding support), each problem with one fix action. Listings cached 20 s. - Ollama: detect installed-but-stopped vs not installed, POST /local/start launches it, free disk space reported and checked before downloads. - API keys: cleaned up on paste (quotes, Bearer, NAME= lines), wrong-provider keys caught, and verified with the provider before they're stored; rejected keys are never saved, offline saves need an explicit skipVerify. - POST /quick-setup/cloud: provider's recommended model for chat and background tasks, provider embeddings or keyword search (no Ollama dependency), Local-only off. quick-setup/local accepts a chosen model. - classifyLlmError: auth / quota / rate-limit / model-missing / local-down / offline / timeout, reading fetch's error cause; messages no longer say "fetch failed" or "restart the backend". Frontend - Status card replaces PrivacyCard: real state per task, one fix button per cause, Local-only switch with confirmations. - Guided setup: "On this computer" (Ollama, model fit for RAM/disk, optional document search, resumable downloads) or "Cloud provider" (key check, model list with fallback, explicit consent before data can leave). - Per-task models, downloads, keys and custom servers move under Advanced settings, with confirms for removing in-use models/keys and custom ids that can't collide with built-in providers. - App banner uses the health check, so it also warns when AI is configured but broken. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why
The AI Control Center showed a green "Everything stays on this computer" banner and "On-device" badges on every task while Ollama wasn't running, so nothing AI-related worked and the only hint was a small "Couldn't list models: fetch failed". It also asked people to assign models to tasks before they had any way to run one.
What changes
Status first. A new
GET /api/ai/healthchecks each task for real: is the runtime up, is the model downloaded, is the key present and accepted, is Local-only mode blocking it, can the model use tools, does the provider support embeddings. The page's top card shows the result in plain words, with one fix button per cause (Start Ollama, Download, Add key, Allow cloud AI, Change model). The app-wide banner uses the same check, so it also warns when AI is configured but broken.Guided setup. Choose "On this computer" or "Cloud provider":
Bearer,NAME=lines), checked against the right provider ("This key looks like it's for OpenAI, not Anthropic"), and verified with the provider before it's stored. A rejected key is never saved; when you're offline you can save without the check. The model list comes from your account with a recommended default, and there's a text fallback if the list fails to load. Finishing requires explicit consent to what leaves the computer, and turns Local-only off. Document search uses the provider's embeddings, or keyword search for Anthropic, Groq and OpenRouter, with no Ollama dependency.Advanced settings (collapsed) keeps the per-task model picker, model downloads, API keys and custom servers, with:
custom-so a server named "OpenAI" can't overwrite the built-in preset.Errors.
classifyLlmErrorsorts failures into auth / quota / rate-limit / model-missing / local-down / offline / timeout, and reads the cause on Node fetch errors. Messages no longer say "fetch failed" or "restart the backend".Testing
main.🤖 Generated with Claude Code