v4.2.0
What's Changed
Features
- Local and OpenAI-compatible providers at $0: Run Ollama, LM Studio, vLLM, or any OpenAI-compatible endpoint as a first-class model source with
amicus provider add. Supportsprovider list|test|remove, all with--jsonoutput. Local models price at an explicit $0 tier, so budget gates and the default-model picker treat them as free. - Local inference completes instead of hanging: Local provider blocks now carry a 5-minute engine request timeout and a non-empty apiKey, so
amicus start,fanout, andcouncilagainst local servers complete successfully. Local models need about 32k context loaded (LM Studio's 16k default is insufficient) and are slower to first token (30-90s cold prefill is normal). - Bearer management for local providers:
amicus key <localId> <token>manages a local provider's bearer token, stored securely in the 0600.envfile rather than config.json. Local providers without a configured bearer use a placeholder instead. - amicus init for on-demand registration: Re-run skill install and MCP registration with
amicus init [--claude] [--desktop] [--json]for plugin-channel installs, failed postinstalls, or repairing deleted~/.claudestate. - Local provider reachability checks: The
amicus doctorcommand gains alocal-providerscheck (warn, never error) that validates configured local endpoints are reachable, plus a compact summary line when all checks pass. - Setup wizard support for local providers: Both the readline wizard and Electron GUI now offer to add a local provider during setup, with preset shortcuts for Ollama, LM Studio, and vLLM.
Improvements
- Flexible local endpoint configuration: Configure local providers with preset shortcuts (
--preset ollama|lmstudio|vllm) or explicit--urlfor any OpenAI-compatible endpoint. Optional bearer tokens and custom pricing are supported. - Per-flavor local provider hints: Route errors now include flavor-specific hints when a local provider is unreachable or missing a key, guiding users to provider-specific troubleshooting.
- Council respects local provider availability: Council members using local providers are never dropped from a bench on catalog absence, preserving them when the server is temporarily down so the actual error (unreachable) bubbles up at runtime.
- Local models excluded from network refresh filter: Local-only catalog rows no longer clobber a good OpenRouter cache during an offline refresh, keeping the two data sources cleanly separated.
- Landing page highlights local and headless modes: The website now foregrounds the three ways to run the council (Claude session, headless CI, local models) and emphasizes $0 local inference.
- Documentation and troubleshooting updates: Expanded docs cover local provider setup, honest expectations for local model performance, and updated troubleshooting checklist to reflect actual amicus doctor checks.
Infrastructure
- New CLI handler for provider management:
src/cli-handlers-provider.jsimplementsamicus provider add|list|test|removewith dependency injection for testability, mirroring the pattern used by doctor checks. - Split route-suggestions module: Extracted
buildSuggestionslogic into a newsrc/utils/route-suggestions.jsto keeproute-launch.jsunder the 300-line gate while adding local provider wiring. - Separate env-var store for local bearers: Created
src/utils/env-raw-store.jsto handle arbitrary environment variable writes to the.envfile, keepingapi-key-store.jsfocused and under size limits. - Local provider merge layer: New
src/utils/local-providers.jsprovidesgetLocalProviders(), bearer derivation, validation, and preset definitions as a single source of truth for provider configuration. - Scheme-aware local probing: New
src/utils/local-probe.jsimplements secure HTTP/HTTPS probing with redirect rejection, header redaction, and configurable timeouts for local endpoint reachability and model discovery. - Test coverage for local workflows: Added 15+ new test files covering local provider e2e, setup flows, routing, pricing, and error handling to verify the full local provider pipeline.
Full Changelog: v4.1.2...v4.2.0