--- name: provider-integration description: Adds new AI providers to claude-council, configures provider API settings, troubleshoots provider connections, and documents the provider script interface. Covers creating provider shell scripts, setting API keys, and validating connectivity. Triggers on "add provider", "new AI agent", "provider not working", "API configuration", or "extend council". --- # Adding AI Providers to Claude Council ## Provider Script Interface Each provider is a shell script in `scripts/providers/` that: 1. Accepts a prompt as the first argument 2. Outputs the AI response to stdout 3. Exits 0 on success, non-zero on failure ## Quick Start 1. Create `scripts/providers/{name}.sh` (see `api-patterns.md` for templates) 2. `chmod +x scripts/providers/{name}.sh` 3. Set `{NAME}_API_KEY` environment variable 4. Test: `./scripts/providers/{name}.sh "Hello"` ## Current Providers | Provider | API Key Variable | Default Model | |----------|------------------|---------------| | Gemini | `GEMINI_API_KEY` | gemini-flash-latest | | OpenAI | `OPENAI_API_KEY` | gpt-6-astra | | Grok | `XAI_API_KEY` (or `GROK_API_KEY`) | grok-latest | | Perplexity | `PERPLEXITY_API_KEY` | sonar-reasoning-pro | | Kimi | `KIMI_API_KEY` | kimi-k3 | | Ollama | none (local) | first model `ollama list` shows | | OpenRouter | `OPENROUTER_API_KEY` | anthropic/claude-fable-5.1 (or one seat per `OPENROUTER_MODELS` entry) | CLI providers (`codex`, `antigravity`, `grok-cli`, `kimi-cli`, `cursor-cli`) need no key: they are discovered when their binary is on `PATH` and use that CLI's own login. `claude-cli` is the exception: `claude` is on every user's `PATH`, so it has no discovery arm and joins only when named in `--providers` or `COUNCIL_PROVIDERS`. See `scripts/providers/kimi-cli.sh` and `cursor-cli.sh` for the headless-run pattern: a read-only mode, a JSON output format the answer is parsed from, `--model` only on an explicit `*_CLI_MODEL` override, and `run_with_deadline` in place of the API providers' retry. A CLI that times out or fails reports through `cli_failure_message` in `scripts/lib/cli-stderr.sh`: the timeout, or the last 500 bytes of the CLI's stderr with colour codes stripped. ## Troubleshooting - **Not discovered**: Check API key is set and script is executable - **API errors**: Verify key, check rate limits, confirm model name - **Parse fails**: Add `echo "$RESPONSE"` to debug, check response format ## Reference For API patterns and code templates, see `api-patterns.md` in this directory.