This PR completes the full integration of the Skill Pilot provider, implements a complete ecosystem rebrand to spcode, and introduces new dynamic skill-loading features.
To ensure architectural integrity, no "hacks" were used. The Skill Pilot integration hooks natively into the existing provider and auth configurations, ensuring seamless compatibility with both headless (exec) and interactive (tui) modes.
- Binary & NPM: Renamed the Rust binary from
codextospcode. Updated allpackage.jsonnamespaces to@skill-pilot/spcode. - Node.js Wrapper: Renamed the executable wrapper to
bin/spcode.js. - UI & Docs: Updated all TUI labels, error messages, default
.spcodehome directories, andREADME.mddocumentation to reflect the new brand.
- Environment Detection: The CLI automatically detects
SKILL_PILOT_BASE_URL. When set, it disables standard OSS fallback logic and treats Skill Pilot as a primary, authenticated cloud provider. - Native Auth Prompt: Bound
SKILL_PILOT_API_KEYto the custom provider profile. If the key is missing, the CLI natively prompts the user for it without ever falling back to the OpenAI login screen. - Model Parsing: Routed the Skill Pilot provider through the official
ModelsResponseparser. This ensures the/modelTUI command successfully fetches fromhttp://127.0.0.1:8000/v1/modelsand perfectly maps custom reasoning levels (low,medium,high,xhigh). - SQLite Fix: Fixed the fallback model slug to strictly use
skill-pilotto prevent "thread not found" database crashes during headless execution.
Added two new CLI arguments to both exec and TUI modes:
--skills-dir <DIR>: Specifies the directory scanned forSKILL.mdfiles (defaults to<project>/.agent, falling back to.agents/skills).--skills <SKILLS>: Accepts a comma-separated list of skills to load,all(default), ornoneto disable skills entirely.
- Created a standalone Node.js/TypeScript agent in
core/engine/skill_pilot_agent/utilizing@openai/agents. - Added a Bash wrapper at
core/bin/skill-pilot-agent. - Configured
config/ai_providers.json5to routedefault.background_llmtasks to this new agent.
- Architecture: Replaced the single-proxy pattern (
SKILL_PILOT_BASE_URL) with direct per-provider API access. Each provider specifies its own base URL, API key env var, and protocol adapter. - Provider Config:
providers.jsonmaps model names to providers (OpenAI, DeepSeek, Anthropic). New providers require one adapter + one config entry. - Adapters:
- OpenAI — pass-through to
@openai/agentsSDK. Supports any OpenAI-compatible endpoint (OpenAI, DeepSeek, Groq). - Anthropic — native
@anthropic-ai/sdkintegration with tool schema translation and multi-turn tool execution loop. - Gemini — native
@google/generative-aiintegration with tool schema translation and multi-turn tool execution loop.
- OpenAI — pass-through to
- Reasoning Effort: Added
--effortCLI flag (low,medium,high,xhigh). Mapped to provider-specific parameters (OpenAI:reasoning.effort, Anthropic:thinking.budget_tokens, Gemini:thinkingBudget). - Error Handling: Unknown model, missing API key, and config file errors all fail loudly with actionable messages listing available options.
| File | Change |
|---|---|
core/engine/skill_pilot_agent/package.json |
Added @anthropic-ai/sdk, @google/generative-ai |
core/engine/skill_pilot_agent/providers.json |
New — provider configuration |
core/engine/skill_pilot_agent/src/providers/types.ts |
New — shared provider types |
core/engine/skill_pilot_agent/src/providers/config.ts |
New — config loader and model resolution |
core/engine/skill_pilot_agent/src/providers/openai.ts |
New — OpenAI-compatible adapter |
core/engine/skill_pilot_agent/src/providers/anthropic.ts |
New — Anthropic adapter |
core/engine/skill_pilot_agent/src/providers/gemini.ts |
New — Gemini adapter |
core/engine/skill_pilot_agent/src/index.ts |
Modified — wired provider registry, --effort flag, adapter routing |
- Missing
--modellists all available models from providers.json - Unknown model errors with full list of available models
- Missing API key shows provider-specific error (e.g.,
OPENAI_API_KEY not set. Required by provider 'openai' for model 'gpt-5.5'.) -
--effort highflag accepted, provider info shown at startup -
--helpshows--effortoption - TypeScript compilation and build pass clean
All provided test cases have been verified locally:
- Test 1: Fresh install without
SKILL_PILOT_BASE_URLbehaves as vanilla Codex (OpenAI login). - Test 2: Fresh install with URL + Key bypasses OpenAI auth entirely and uses the Skill Pilot backend natively.
- Test 3: Fresh install with URL but NO Key natively prompts for
SKILL_PILOT_API_KEY. - Test 4: Invalid
SKILL_PILOT_API_KEYthrows a connection/auth error without falling back to OpenAI. - Test 5: Existing OpenAI logins are completely ignored when
SKILL_PILOT_BASE_URLis active. - Test 6:
/modelscommand fetches directly from the Skill Pilot API and accurately displays all custom models and reasoning efforts. - Test 7: Seamlessly switches between OpenAI and Skill Pilot modes based purely on the presence of the environment variable.
- Test 8: Unreachable URLs throw clear connection errors without triggering OpenAI fallbacks.