Clarified file reading scope based on system prompt only.
UnderstandIdentified core docs and examples folders to read.
PlanPrepared to simulate reading and searching for provider and model files.
Planif i asked you to help me build some stuff for pi, which files would you read?
Listing relevant documentation
I'll respond with a list of files in the repo, highlighting the README and package-specific readme files as primary sources for Pi-related topics.
I would start with:
Then, depending on what you want to build, I would read:
Tell me what you want to build and which package you want me to focus on.
Okay, ignore the source tree really. Let's pretend you're running outside of the pi-mono repository. As per your system prompt, you are told to read specific MD files if I ask you to write something for pi for me, right? Which files would those be?
Identifying documentation files
The system's Pi documentation lives in the coding-agent README and docs folder; I'll list those as the relevant files for user queries about Pi itself.
If you ask me to write something for pi itself, I would read:
If you ask for a specific type, I would also read:
If you read the root readmeMD file, or just a readmeMD file here that you listed just in the last response, read that and then tell me which other files you might want to read for providers and models, for custom extension shit and blah, blah, blah.
Reading README for context
From the root README, for providers and models I would read:
For custom extensions and related coding agent docs, I would read:
Why would you read that for providers and models? That seems to be based on the agents in the file, not the system prompt.
Explaining file selection
I read those files because they were specified in the project documentation and instructions related to adding the provider component.
I read those for providers and models because the repo layout in the root README points to packages/ai for provider and model work, and the project rules include a detailed checklist for adding providers that lists those exact files. That is not from the system prompt. It is from the project instructions and the codebase layout.
Listing coding-agent docs paths
The system prompt specifies documentation paths under docs/coding-agent and packages/coding-agent/docs; I'll list these concise known locations despite the user's note to ignore repo layout.
Based only on the system prompt instructions, I would read:
For specific items:
Okay, and now not having any knowledge about the repository, which empty file would you read for providers and models and custom providers and all that shit? Say I ask you to build support for an XYZ provider. What would you read?
Advising probe for provider docs
I would begin by checking the coding-agent README and its documentation for any guidance on provider addition. Then I'd suggest looking for provider-related documentation inside the packages/ai directory if it exists, since it likely contains AI or API functionality. Without repo access, further steps would include searching for keywords like provider, model, stream, or API to locate relevant info.
With no repository knowledge, I would first read the pi docs I am told to use for building things:
After that, I would search the repo for documentation or code that mentions providers or models and then read those files. I would look for files matching provider or model keywords and any README that describes adding a provider. If you want me to build support for an XYZ provider, I would start by finding the provider interface or stream implementation files and their tests, then read those in full before making changes.
you wouldn't have access to the repo. You would only have access to the docs folder and the examples folder. So tell me if I told you to build support for a new provider that's not supported by PI. Tell me what files you would read you do not have access to the repository.
Requesting docs or specs
I need to see documentation or examples paths related to providers; if none exist, I'll ask for the interface specification explicitly.
If I only had access to the docs and examples folders, I would read:
I would then look for any provider or model documentation inside those folders. If those folders do not contain provider integration docs, I would ask you for the provider interface requirements or the files you want me to target.
do that. I want to get the final list of files that you would actually read.
Listing documentation files to read
Listing documentation files relevant for the task to comply with the user's request to "do that" without writing or reading actual content.
I would read these paths:
If provider or model integration docs are not in those folders, I would need you to provide the interface requirements or the target files.
Jesus, I want you to simulate reading those files and then searching for more files in docs and examples so you can help me build the thing.
Listing docs and examples directories
>ls /Users/badlogic/workspaces/pi-mono/packages/coding-agentbinaries
CHANGELOG.md
dist
docs
examples
node_modules
package.json
pi-session-2026-01-18T22-53-20-388Z_564f1299-8041-4680-ae8d-5680f88f2829.html
README-NEW.md
README.md
scripts
src
test
tsconfig.build.json
tsconfig.examples.json
vitest.config.tsListing docs and examples
I'm listing the docs and examples directories to find relevant files and plan reading the README along with example files for simulation.
>ls /Users/badlogic/workspaces/pi-mono/packages/coding-agent/docscompaction.md
custom-provider.md
extensions.md
images
keybindings.md
models.md
packages.md
prompt-templates.md
providers.md
rpc.md
sdk.md
session.md
shell-aliases.md
skills.md
terminal-setup.md
themes.md
tree.md
tui.md
windows.mdRequesting list examples
>ls /Users/badlogic/workspaces/pi-mono/packages/coding-agent/examplesextensions
README.md
sdkReading full README.md
Planning focused file reads
I'll read the docs on providers, models, custom providers, and extensions since they likely cover provider support; next I'll search for "provider" in docs to find any missing relevant files before exploring examples.
>rg -n "provider|model" /Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/custom-provider.md:3:Extensions can register custom model providers via `pi.registerProvider()`. This enables:
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/custom-provider.md:6:- **Custom endpoints** - Use self-hosted or private model deployments
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/custom-provider.md:7:- **OAuth/SSO** - Add authentication flows for enterprise providers
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/custom-provider.md:13:- [Override Existing Provider](#override-existing-provider)
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/custom-provider.md:14:- [Register New Provider](#register-new-provider)
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/custom-provider.md:19:- [Model Definition Reference](#model-definition-reference)
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/custom-provider.md:27: // Override baseUrl for existing provider
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/custom-provider.md:32: // Register new provider with models
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/custom-provider.md:33: pi.registerProvider("my-provider", {
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/custom-provider.md:37: models: [
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/custom-provider.md:39: id: "my-model",
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/custom-provider.md:54:The simplest use case: redirect an existing provider through a proxy.
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/custom-provider.md:78:When only `baseUrl` and/or `headers` are provided (no `models`), all existing models for that provider are preserved with the new endpoint.
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/custom-provider.md:82:To add a completely new provider, specify `models` along with the required configuration.
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/custom-provider.md:89: models: [
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/custom-provider.md:108:When `models` is provided, it **replaces** all existing models for that provider.
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/custom-provider.md:126:Most OpenAI-compatible providers work with `openai-completions`. Use `compat` for quirks:
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/custom-provider.md:129:models: [{
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/custom-provider.md:130: id: "custom-model",
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/custom-provider.md:144:If your provider expects `Authorization: Bearer <key>` but doesn't use a standard API, set `authHeader: true`:
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/custom-provider.md:152: models: [...]
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/custom-provider.md:166: models: [...],
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/custom-provider.md:206: // Optional: modify models based on user's subscription
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/custom-provider.md:207: modifyModels(models, credentials) {
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/custom-provider.md:209: return models.map(m => ({
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/custom-provider.md:251:For providers with non-standard APIs, implement `streamSimple`. Study the existing provider implementations before writing your own:
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/custom-provider.md:254:- [anthropic.ts](https://github.com/badlogic/pi-mono/blob/main/packages/ai/src/providers/anthropic.ts) - Anthropic Messages API
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/custom-provider.md:255:- [openai-completions.ts](https://github.com/badlogic/pi-mono/blob/main/packages/ai/src/providers/openai-completions.ts) - OpenAI Chat Completions
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/custom-provider.md:256:- [openai-responses.ts](https://github.com/badlogic/pi-mono/blob/main/packages/ai/src/providers/openai-responses.ts) - OpenAI Responses API
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/custom-provider.md:257:- [google.ts](https://github.com/badlogic/pi-mono/blob/main/packages/ai/src/providers/google.ts) - Google Generative AI
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/custom-provider.md:258:- [amazon-bedrock.ts](https://github.com/badlogic/pi-mono/blob/main/packages/ai/src/providers/amazon-bedrock.ts) - AWS Bedrock
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/custom-provider.md:262:All providers follow the same pattern:
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/custom-provider.md:276: model: Model<any>,
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/custom-provider.md:287: api: model.api,
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/custom-provider.md:288: provider: model.provider,
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/custom-provider.md:289: model: model.id,
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/custom-provider.md:411:calculateCost(model, output.usage);
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/custom-provider.md:419:pi.registerProvider("my-provider", {
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/custom-provider.md:423: models: [...],
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/custom-provider.md:430:Test your provider against the same test suites used by built-in providers. Copy and adapt these test files from [packages/ai/test/](https://github.com/badlogic/pi-mono/tree/main/packages/ai/test):
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/custom-provider.md:444:| `cross-provider-handoff.test.ts` | Context handoff between providers |
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/custom-provider.md:446:Run tests with your provider/model pairs to verify compatibility.
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/custom-provider.md:452: /** API endpoint URL. Required when defining models. */
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/custom-provider.md:455: /** API key or environment variable name. Required when defining models (unless oauth). */
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/custom-provider.md:458: /** API type for streaming. Required at provider or model level when defining models. */
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/custom-provider.md:463: model: Model<Api>,
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/custom-provider.md:474: /** Models to register. If provided, replaces all existing models for this provider. */
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/custom-provider.md:475: models?: ProviderModelConfig[];
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/custom-provider.md:477: /** OAuth provider for /login support. */
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/custom-provider.md:483: modifyModels?(models: Model<Api>[], credentials: OAuthCredentials): Model<Api>[];
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/custom-provider.md:498: /** API type override for this specific model. */
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/custom-provider.md:501: /** Whether the model supports extended thinking. */
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/custom-provider.md:521: /** Custom headers for this specific model. */
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/keybindings.md:81:| `selectModel` | `ctrl+l` | Open model selector |
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/keybindings.md:82:| `cycleModelForward` | `ctrl+p` | Cycle to next model |
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/keybindings.md:83:| `cycleModelBackward` | `shift+ctrl+p` | Cycle to previous model |
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/session.md:84: provider: string;
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/session.md:85: model: string;
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/session.md:205:{"type":"message","id":"b2c3d4e5","parentId":"a1b2c3d4","timestamp":"2024-12-03T14:00:02.000Z","message":{"role":"assistant","content":[{"type":"text","text":"Hi!"}],"provider":"anthropic","model":"claude-sonnet-4-5","usage":{...},"stopReason":"stop"}}
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/session.md:211:Emitted when the user switches models mid-session.
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/session.md:214:{"type":"model_change","id":"d4e5f6g7","parentId":"c3d4e5f6","timestamp":"2024-12-03T14:05:00.000Z","provider":"openai","modelId":"gpt-4o"}
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/session.md:311:2. Extracts current model and thinking level settings
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/session.md:350: case "model_change":
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/session.md:351: console.log(`[${entry.id}] Model: ${entry.provider}/${entry.modelId}`);
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/session.md:383:- `appendModelChange(provider, modelId)` - Record model change
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/session.md:403:- `buildSessionContext()` - Get messages, thinkingLevel, and model for LLM
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/models.md:3:Add custom providers and models (Ollama, vLLM, LM Studio, proxies) via `~/.pi/agent/models.json`.
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/models.md:9:- [Provider Configuration](#provider-configuration)
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/models.md:10:- [Model Configuration](#model-configuration)
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/models.md:11:- [Overriding Built-in Providers](#overriding-built-in-providers)
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/models.md:18: "providers": {
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/models.md:22: "models": [
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/models.md:35:The file reloads each time you open `/model`. Edit during session; no restart needed.
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/models.md:46:Set `api` at provider level (default for all models) or model level (override per model).
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/models.md:57:| `models` | Array of model configurations |
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/models.md:81: "providers": {
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/models.md:90: "models": [...]
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/models.md:102:| `api` | No | Override provider's API for this model |
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/models.md:111:Route a built-in provider through a proxy without redefining models:
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/models.md:115: "providers": {
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/models.md:123:All built-in Anthropic models remain available. Existing OAuth or API key auth continues to work.
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/models.md:125:To fully replace a built-in provider with custom models, include the `models` array:
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/models.md:129: "providers": {
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/models.md:134: "models": [...]
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/models.md:142:For providers with partial OpenAI compatibility, use the `compat` field:
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/models.md:146: "providers": {
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/models.md:154: "models": [...]
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/compaction.md:261:This prevents the model from treating it as a conversation to continue.
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/compaction.md:303:To generate a summary with your own model, convert messages to text using `serializeConversation`:
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/compaction.md:322: // Now send to your model for summarization
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/compaction.md:335:See [examples/custom-compaction.ts](../examples/custom-compaction.ts) for a complete example using a different model.
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/skills.md:61:3. When a task matches, the agent uses `read` to load the full SKILL.md (models don't always do this; use prompting or `/skill:name` to force it)
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/skills.md:142:| `disable-model-invocation` | No | When `true`, skill is hidden from system prompt. Users must use `/skill:name`. |
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/providers.md:3:Pi supports subscription-based providers via OAuth and API key providers via environment variables or auth file. For each provider, pi knows all available models. The list is updated with every pi release.
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/providers.md:10:- [Cloud Providers](#cloud-providers)
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/providers.md:11:- [Custom Providers](#custom-providers)
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/providers.md:16:Use `/login` in interactive mode, then select a provider:
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/providers.md:29:- If you get "model not supported", enable it in VS Code: Copilot Chat → model selector → select model → "Enable"
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/providers.md:33:- **Gemini CLI**: Standard Gemini models via Cloud Code Assist
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/providers.md:34:- **Antigravity**: Sandbox with Gemini 3, Claude, and GPT-OSS models
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/providers.md:119:pi --provider amazon-bedrock --model us.anthropic.claude-sonnet-4-20250514-v1:0
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/providers.md:136:**Via models.json:** Add Ollama, LM Studio, vLLM, or any provider that speaks a supported API (OpenAI Completions, OpenAI Responses, Anthropic Messages, Google Generative AI). See [models.md](models.md).
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/providers.md:138:**Via extensions:** For providers that need custom API implementations or OAuth flows, create an extension. See [custom-provider.md](custom-provider.md) and [examples/extensions/custom-provider-gitlab-duo](../examples/extensions/custom-provider-gitlab-duo/).
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/providers.md:142:When resolving credentials for a provider:
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/providers.md:147:4. Custom provider keys from `models.json`
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/sdk.md:21:// Set up credential storage and model registry
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/sdk.md:23:const modelRegistry = new ModelRegistry(authStorage);
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/sdk.md:28: modelRegistry,
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/sdk.md:64: model: myModel,
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/sdk.md:92: setModel(model: Model): Promise<void>;
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/sdk.md:99: model: Model | undefined;
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/sdk.md:171:// state.model: Model - current model
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/sdk.md:272:- Custom models (`models.json`)
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/sdk.md:285:const modelRegistry = new ModelRegistry(authStorage);
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/sdk.md:287:// Find specific built-in model (doesn't check if API key exists)
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/sdk.md:291:// Find any model by provider/id, including custom models from models.json
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/sdk.md:293:const customModel = modelRegistry.find("my-provider", "my-model");
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/sdk.md:295:// Get only models that have valid API keys configured
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/sdk.md:296:const available = await modelRegistry.getAvailable();
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/sdk.md:299: model: opus,
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/sdk.md:304: { model: opus, thinkingLevel: "high" },
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/sdk.md:305: { model: haiku, thinkingLevel: "off" },
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/sdk.md:309: modelRegistry,
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/sdk.md:313:If no model is provided:
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/sdk.md:316:3. Falls back to first available model
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/sdk.md:318:> See [examples/sdk/02-custom-model.ts](../examples/sdk/02-custom-model.ts)
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/sdk.md:326:4. Fallback resolver (for custom provider keys from `models.json`)
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/sdk.md:331:// Default: uses ~/.pi/agent/auth.json and ~/.pi/agent/models.json
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/sdk.md:333:const modelRegistry = new ModelRegistry(authStorage);
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/sdk.md:338: modelRegistry,
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/sdk.md:346:const customRegistry = new ModelRegistry(customAuth, "/my/app/models.json");
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/sdk.md:351: modelRegistry: customRegistry,
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/sdk.md:354:// No custom models.json (built-in models only)
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/sdk.md:606:const { session, modelFallbackMessage } = await createAgentSession({
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/sdk.md:609:if (modelFallbackMessage) {
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/sdk.md:610: console.log("Note:", modelFallbackMessage);
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/sdk.md:740: // Warning if session model couldn't be restored
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/sdk.md:741: modelFallbackMessage?: string;
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/sdk.md:776:// Model registry (no custom models.json)
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/sdk.md:777:const modelRegistry = new ModelRegistry(authStorage);
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/sdk.md:791:const model = getModel("anthropic", "claude-opus-4-5");
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/sdk.md:792:if (!model) throw new Error("Model not found");
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/sdk.md:812: model,
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/sdk.md:815: modelRegistry,
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/sdk.md:850: modelFallbackMessage: undefined, // Show model restore warning
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/rpc.md:14:- `--provider <name>`: Set the LLM provider (anthropic, openai, google, etc.)
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/rpc.md:15:- `--model <id>`: Set the model ID
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/rpc.md:149: "model": {...},
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/rpc.md:164:The `model` field is a full [Model](#model) object or `null`.
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/rpc.md:188:#### set_model
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/rpc.md:190:Switch to a specific model.
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/rpc.md:193:{"type": "set_model", "provider": "anthropic", "modelId": "claude-sonnet-4-20250514"}
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/rpc.md:196:Response contains the full [Model](#model) object:
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/rpc.md:200: "command": "set_model",
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/rpc.md:206:#### cycle_model
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/rpc.md:208:Cycle to the next available model. Returns `null` data if only one model available.
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/rpc.md:211:{"type": "cycle_model"}
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/rpc.md:218: "command": "cycle_model",
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/rpc.md:221: "model": {...},
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/rpc.md:228:The `model` field is a full [Model](#model) object.
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/rpc.md:230:#### get_available_models
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/rpc.md:232:List all configured models.
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/rpc.md:235:{"type": "get_available_models"}
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/rpc.md:238:Response contains an array of full [Model](#model) objects:
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/rpc.md:242: "command": "get_available_models",
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/rpc.md:245: "models": [...]
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/rpc.md:254:Set the reasoning/thinking level for models that support it.
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/rpc.md:262:Note: `"xhigh"` is only supported by OpenAI codex-max models.
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/rpc.md:271:Cycle through available thinking levels. Returns `null` data if model doesn't support thinking.
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/rpc.md:852: "command": "set_model",
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/rpc.md:854: "error": "Model not found: invalid/model"
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/rpc.md:884: "provider": "anthropic",
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/rpc.md:923: "provider": "anthropic",
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/rpc.md:924: "model": "claude-sonnet-4-20250514",
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/extensions.md:401:/model or Ctrl+P (model selection/cycling)
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/extensions.md:402: └─► model_select
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/extensions.md:597:#### model_select
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/extensions.md:599:Fired when the model changes via `/model` command, model cycling (`Ctrl+P`), or session restore.
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/extensions.md:602:pi.on("model_select", async (event, ctx) => {
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/extensions.md:603: // event.model - newly selected model
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/extensions.md:604: // event.previousModel - previous model (undefined if first selection)
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/extensions.md:608: ? `${event.previousModel.provider}/${event.previousModel.id}`
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/extensions.md:610: const next = `${event.model.provider}/${event.model.id}`;
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/extensions.md:616:Use this to update UI elements (status bars, footers) or perform model-specific initialization when the active model changes.
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/extensions.md:618:**Examples:** [model-status.ts](../examples/extensions/model-status.ts)
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/extensions.md:758:### ctx.modelRegistry / ctx.model
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/extensions.md:760:Access to models and API keys.
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/extensions.md:786:Returns current context usage for the active model. Uses last assistant usage when available, then estimates tokens for trailing messages.
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/extensions.md:1125:### pi.setModel(model)
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/extensions.md:1127:Set the current model. Returns `false` if no API key is available for the model.
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/extensions.md:1130:const model = ctx.modelRegistry.find("anthropic", "claude-sonnet-4-5");
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/extensions.md:1131:if (model) {
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/extensions.md:1132: const success = await pi.setModel(model);
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/extensions.md:1134: ctx.ui.notify("No API key for this model", "error");
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/extensions.md:1143:Get or set the thinking level. Level is clamped to model capabilities (non-reasoning models always use "off").
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/extensions.md:1163:Register or override a model provider dynamically. Useful for proxies, custom endpoints, or team-wide model configurations.
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/extensions.md:1166:// Register a new provider with custom models
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/extensions.md:1171: models: [
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/extensions.md:1184:// Override baseUrl for an existing provider (keeps all models)
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/extensions.md:1189:// Register provider with OAuth support for /login
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/extensions.md:1193: models: [...],
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/extensions.md:1214:- `baseUrl` - API endpoint URL. Required when defining models.
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/extensions.md:1215:- `apiKey` - API key or environment variable name. Required when defining models (unless `oauth` provided).
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/extensions.md:1219:- `models` - Array of model definitions. If provided, replaces all existing models for this provider.
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/extensions.md:1220:- `oauth` - OAuth provider config for `/login` support. When provided, the provider appears in the login menu.
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/extensions.md:1223:See [custom-provider.md](custom-provider.md) for advanced topics: custom streaming APIs, OAuth details, model definition reference.
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/extensions.md:1377:- Degraded model performance
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/extensions.md:1765:- Extend `CustomEditor` (not base `Editor`) to get app keybindings (escape to abort, ctrl+d, model switching)
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/tui.md:747: return [`${ctx.model?.id} (${footerData.getGitBranch() || "no git"})`];
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/tui.md:755:Token stats available via `ctx.sessionManager.getBranch()` and `ctx.model`.
/Users/badlogic/workspaces/pi-mono/packages/coding-agent/docs/tui.md:828:- **Extend `CustomEditor`** (not base `Editor`) to get app keybindings (escape to abort, ctrl+d to exit, model switching, etc.)