This guide runs Kelvin with the first-party OpenRouter model plugin on the SDK path.
OPENROUTER_API_KEYset in your shell.- Installed plugin trust policy and plugin home (defaults are fine).
- CLI plugin installed (required preflight in
kelvin-sdkruntime composition).
Install the CLI plugin:
kelvin plugin install kelvin.cliInstall the OpenRouter model plugin:
kelvin plugin install kelvin.openrouterDefault index URL:
https://raw.githubusercontent.com/agentichighway/kelvinclaw-plugins/main/index.json
Both use KELVIN_PLUGIN_HOME and KELVIN_TRUST_POLICY_PATH if set.
export OPENROUTER_API_KEY="<your_key>"
cargo run -p kelvin-host -- \
--prompt "Summarize KelvinClaw in one sentence." \
--model-provider kelvin.openrouter \
--memory fallbackExpected behavior:
- runtime loads installed plugins through signature + manifest checks
- model provider is selected explicitly by plugin id (
kelvin.openrouter) - request executes through the generic
provider_profile_callguest ABI - host resolves the declarative
openrouter.chatprovider profile object - host normalizes the request through
openai_chat_completions
Run mock-backed SDK integration test:
cargo test -p kelvin-sdk --lib run_with_sdk_uses_installed_openrouter_model_plugin_via_mock_server -- --nocapture- missing plugin id or install path: typed configuration/load error
- missing
OPENROUTER_API_KEY: typed invalid-input error before outbound call - host not in allowlist: typed invalid-input error
- provider 4xx/5xx: typed backend error
- malformed plugin output: typed invalid-input error