Your tools
Pi, opencode, Aider & others
| Field | Cloud | Local door |
|---|---|---|
| Base URL | https://api.conifer.build/v1 | http://127.0.0.1:8080/v1 |
| API key | $CONIFER_API_KEY | any non-empty string |
| Model | an id from the catalog | an installed model's name |
opencode
~/.config/opencode/opencode.json
{
"provider": {
"conifer": {
"npm": "@ai-sdk/openai-compatible",
"name": "Conifer",
"options": {
"baseURL": "https://api.conifer.build/v1",
"apiKey": "{env:CONIFER_API_KEY}"
},
"models": { "conifer-swift": {}, "conifer-grove": {}, "sibelius": {} }
}
}
}terminal
opencode run --model conifer/conifer-grove "add error handling to fetchUser"Pi
Register Conifer as a provider in Pi’s models config (base URL and key as in the table), then:
terminal
pi --provider conifer --model sibelius "review this diff for races"Aider
terminal
export OPENAI_API_BASE=https://api.conifer.build/v1
export OPENAI_API_KEY=$CONIFER_API_KEY
aider --model openai/conifer-swiftThe openai/ prefix tells Aider which client to use; the rest of the id is the catalog model.
Cursor, Continue, and everything else
Any tool with an OpenAI base-URL field takes the same three values. Against the local door there is no auth on loopback; the key field most clients refuse to leave empty is accepted and ignored. Set the tool’s model field to the model the door serves; other ids are refused by name (Serve an endpoint).