Two endpoints, one adapter
Gemini-Pippa has two paths. The supported one uses a paid provider API key from environment config and calls the public Gemini API directly, billed per use. The other rides the Gemini CLI's OAuth credentials into the CLI's backend endpoint in a Cloud Code Assist envelope. It is kept only as a manual diagnostic path now: Google ended consumer OAuth serving on 2026-06-18.
Runtime toggle
The path is chosen at runtime in the Admin Dashboard — same adapter, two code paths. When the legacy OAuth path is selected by hand and runs out of its retry budget, the adapter finishes that turn on the API key and says so with a warning in the stream. The next turn starts on the selected path again. There is no sticky state left to unstick; the fallback is per-turn runtime state, so no Council round can drift onto a different provider path without the turn itself saying it did.
Wire format quirks
thoughtSignaturemust be preserved in tool-loop continuations or you get a 400.- System prompt is
systemInstruction(camelCase), notsystem_instruction. - Model role is
'model', not'assistant'. - Thinking config is
thinkingLevel: 'HIGH'for 3.x models,thinkingBudget: Nfor 2.x.