Skip to content

Instantly share code, notes, and snippets.

@ttimasdf
Last active August 27, 2026 02:54
Show Gist options
  • Select an option

  • Save ttimasdf/32edb41c4a8e4c445e65a451db4e954b to your computer and use it in GitHub Desktop.

Select an option

Save ttimasdf/32edb41c4a8e4c445e65a451db4e954b to your computer and use it in GitHub Desktop.
Pi Coding Agent Schema JSONs

Usage

Add to ~/.pi/agent/settings.json

{
  "$schema": "https://gist.githubusercontent.com/ttimasdf/32edb41c4a8e4c445e65a451db4e954b/raw/pi-settings.schema.json",
  // ...

Add to ~/.pi/agent/models.json

{
  "$schema": "https://gist.githubusercontent.com/ttimasdf/32edb41c4a8e4c445e65a451db4e954b/raw/pi-models.schema.json",
  // ...

Current schema version

based on pi agent source code 0.84.0

{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "Pi coding agent models",
"description": "Local JSON Schema for @earendil-works/pi-coding-agent models.json, matching Pi 0.84.0. Custom provider/model definitions merged over the built-in catalog.",
"type": "object",
"properties": {
"$schema": {
"type": "string",
"description": "Path or URL to the JSON Schema used by editors. Pi ignores this metadata property."
},
"providers": {
"type": "object",
"description": "Custom providers keyed by provider ID.",
"additionalProperties": {
"$ref": "#/$defs/provider"
}
}
},
"$defs": {
"resourceHeaders": {
"type": "object",
"description": "Extra HTTP headers sent with every request.",
"additionalProperties": {
"type": "string"
}
},
"provider": {
"type": "object",
"additionalProperties": false,
"properties": {
"name": {
"type": "string",
"minLength": 1,
"description": "Display name shown in the UI."
},
"baseUrl": {
"type": "string",
"minLength": 1,
"description": "Base URL of the OpenAI-compatible endpoint, such as https://example.com/v1."
},
"apiKey": {
"type": "string",
"minLength": 1,
"description": "API key sent as Authorization Bearer. Prefer auth.json or an environment variable for secrets."
},
"api": {
"type": "string",
"minLength": 1,
"description": "API protocol adapter. Commonly \"openai-completions\", \"openai-responses\", or \"anthropic-messages\"; other registered APIs such as \"google-generative-ai\" also work.",
"examples": ["openai-completions", "openai-responses", "anthropic-messages", "google-generative-ai"]
},
"oauth": {
"const": "radius",
"description": "Use Radius OAuth authentication for this provider."
},
"headers": {
"$ref": "#/$defs/resourceHeaders"
},
"compat": {
"$ref": "#/$defs/compat"
},
"authHeader": {
"type": "boolean",
"description": "Require a resolved API key; requests fail with \"No API key found\" when none is configured."
},
"models": {
"type": "array",
"description": "Models offered by this provider. Overrides built-in entries with the same IDs.",
"items": {
"$ref": "#/$defs/model"
}
},
"modelOverrides": {
"type": "object",
"description": "Field patches applied onto cataloged or listed models, keyed by model ID.",
"additionalProperties": {
"$ref": "#/$defs/modelOverride"
}
}
}
},
"model": {
"type": "object",
"additionalProperties": false,
"required": ["id"],
"properties": {
"id": {
"type": "string",
"minLength": 1,
"description": "Model ID used in API requests and <provider>/<id> selectors."
},
"name": {
"type": "string",
"minLength": 1,
"description": "Display name shown in the UI."
},
"api": {
"type": "string",
"minLength": 1,
"description": "API protocol adapter overriding the provider default, such as \"openai-completions\" or \"anthropic-messages\".",
"examples": ["openai-completions", "openai-responses", "anthropic-messages"]
},
"baseUrl": {
"type": "string",
"minLength": 1,
"description": "Endpoint URL overriding the provider baseUrl."
},
"reasoning": {
"type": "boolean",
"description": "Whether the model supports thinking/reasoning output."
},
"thinkingLevelMap": {
"$ref": "#/$defs/thinkingLevelMap"
},
"input": {
"type": "array",
"description": "Supported input modalities.",
"items": {
"enum": ["text", "image"]
}
},
"cost": {
"$ref": "#/$defs/cost"
},
"contextWindow": {
"type": "integer",
"minimum": 1,
"description": "Maximum total context size in tokens; drives compaction thresholds."
},
"maxTokens": {
"type": "integer",
"minimum": 1,
"description": "Maximum output tokens per response."
},
"samplingParams": {
"type": "object",
"description": "Extra sampling parameters merged into request bodies, such as top_p or temperature."
},
"headers": {
"$ref": "#/$defs/resourceHeaders"
},
"compat": {
"$ref": "#/$defs/compat"
}
}
},
"modelOverride": {
"type": "object",
"description": "Patch applied onto an existing model definition.",
"additionalProperties": false,
"properties": {
"name": {
"type": "string",
"minLength": 1,
"description": "Replacement display name."
},
"reasoning": {
"type": "boolean",
"description": "Whether the model supports thinking/reasoning output."
},
"thinkingLevelMap": {
"$ref": "#/$defs/thinkingLevelMap"
},
"input": {
"type": "array",
"description": "Replaces supported input modalities.",
"items": {
"enum": ["text", "image"]
}
},
"cost": {
"$ref": "#/$defs/partialCost"
},
"contextWindow": {
"type": "integer",
"minimum": 1,
"description": "Replacement maximum total context size in tokens."
},
"maxTokens": {
"type": "integer",
"minimum": 1,
"description": "Replacement maximum output tokens."
},
"samplingParams": {
"type": "object",
"description": "Extra sampling parameters merged into request bodies."
},
"headers": {
"$ref": "#/$defs/resourceHeaders"
},
"compat": {
"$ref": "#/$defs/compat"
}
}
},
"cost": {
"type": "object",
"description": "Per-million-token USD pricing.",
"additionalProperties": false,
"required": ["input", "output", "cacheRead", "cacheWrite"],
"properties": {
"input": {
"type": "number",
"minimum": 0,
"description": "USD per million input tokens."
},
"output": {
"type": "number",
"minimum": 0,
"description": "USD per million output tokens."
},
"cacheRead": {
"type": "number",
"minimum": 0,
"description": "USD per million cached-input tokens."
},
"cacheWrite": {
"type": "number",
"minimum": 0,
"description": "USD per million cache-write tokens."
},
"tiers": {
"type": "array",
"description": "Volume pricing applied above token-count thresholds.",
"items": {
"type": "object",
"additionalProperties": false,
"required": ["inputTokensAbove", "input", "output", "cacheRead", "cacheWrite"],
"properties": {
"inputTokensAbove": {
"type": "number",
"description": "Threshold in input tokens above which this tier applies."
},
"input": {
"type": "number",
"minimum": 0
},
"output": {
"type": "number",
"minimum": 0
},
"cacheRead": {
"type": "number",
"minimum": 0
},
"cacheWrite": {
"type": "number",
"minimum": 0
}
}
}
}
}
},
"partialCost": {
"type": "object",
"description": "Cost patch; unspecified fields keep existing values.",
"additionalProperties": false,
"properties": {
"input": {
"type": "number",
"minimum": 0,
"description": "USD per million input tokens."
},
"output": {
"type": "number",
"minimum": 0,
"description": "USD per million output tokens."
},
"cacheRead": {
"type": "number",
"minimum": 0,
"description": "USD per million cached-input tokens."
},
"cacheWrite": {
"type": "number",
"minimum": 0,
"description": "USD per million cache-write tokens."
},
"tiers": {
"$ref": "#/$defs/cost/properties/tiers"
}
}
},
"thinkingLevelMap": {
"type": "object",
"description": "Maps Pi thinking levels to provider-specific effort names; null disables the level.",
"additionalProperties": false,
"properties": {
"off": {
"$ref": "#/$defs/thinkingLevelMapValue"
},
"minimal": {
"$ref": "#/$defs/thinkingLevelMapValue"
},
"low": {
"$ref": "#/$defs/thinkingLevelMapValue"
},
"medium": {
"$ref": "#/$defs/thinkingLevelMapValue"
},
"high": {
"$ref": "#/$defs/thinkingLevelMapValue"
},
"xhigh": {
"$ref": "#/$defs/thinkingLevelMapValue"
},
"max": {
"$ref": "#/$defs/thinkingLevelMapValue"
}
}
},
"thinkingLevelMapValue": {
"type": ["string", "null"]
},
"chatTemplateKwarg": {
"description": "Scalar value, or a variable substituted with a Pi-controlled thinking value at request time.",
"anyOf": [
{
"type": ["string", "number", "boolean", "null"]
},
{
"type": "object",
"additionalProperties": false,
"required": ["$var"],
"properties": {
"$var": {
"enum": ["thinking.enabled", "thinking.effort"]
},
"omitWhenOff": {
"type": "boolean",
"description": "Omit this kwarg entirely while thinking is off."
}
}
}
]
},
"percentileCutoffs": {
"type": "object",
"additionalProperties": false,
"properties": {
"p50": {
"type": "number"
},
"p75": {
"type": "number"
},
"p90": {
"type": "number"
},
"p99": {
"type": "number"
}
}
},
"openRouterRouting": {
"type": "object",
"description": "OpenRouter-compatible routing preferences sent as the `provider` request field.",
"additionalProperties": false,
"properties": {
"allow_fallbacks": {
"type": "boolean",
"description": "Allow backup providers to serve requests."
},
"require_parameters": {
"type": "boolean",
"description": "Only route to providers supporting every requested parameter."
},
"data_collection": {
"enum": ["deny", "allow"],
"description": "\"deny\" excludes providers that may train on data."
},
"zdr": {
"type": "boolean",
"description": "Restrict routing to zero-data-retention endpoints."
},
"enforce_distillable_text": {
"type": "boolean"
},
"order": {
"type": "array",
"items": {
"type": "string"
},
"description": "Preferred provider order."
},
"only": {
"type": "array",
"items": {
"type": "string"
},
"description": "Allowlist of provider slugs."
},
"ignore": {
"type": "array",
"items": {
"type": "string"
},
"description": "Blocklist of provider slugs."
},
"quantizations": {
"type": "array",
"items": {
"type": "string"
}
},
"sort": {
"anyOf": [
{
"type": "string"
},
{
"type": "object",
"additionalProperties": false,
"properties": {
"by": {
"type": "string"
},
"partition": {
"type": ["string", "null"]
}
}
}
]
},
"max_price": {
"type": "object",
"additionalProperties": false,
"properties": {
"prompt": {
"type": ["number", "string"]
},
"completion": {
"type": ["number", "string"]
},
"image": {
"type": ["number", "string"]
},
"audio": {
"type": ["number", "string"]
},
"request": {
"type": ["number", "string"]
}
}
},
"preferred_min_throughput": {
"anyOf": [
{
"type": "number"
},
{
"$ref": "#/$defs/percentileCutoffs"
}
]
},
"preferred_max_latency": {
"anyOf": [
{
"type": "number"
},
{
"$ref": "#/$defs/percentileCutoffs"
}
]
}
}
},
"vercelGatewayRouting": {
"type": "object",
"description": "Vercel AI Gateway routing preferences; used only when baseUrl points at the gateway.",
"additionalProperties": false,
"properties": {
"only": {
"type": "array",
"items": {
"type": "string"
}
},
"order": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
"compat": {
"type": "object",
"description": "Protocol compatibility overrides. Fields are grouped by API family; each only takes effect on matching APIs. Unknown fields pass through unvalidated by Pi.",
"additionalProperties": false,
"properties": {
"supportsStore": {
"type": "boolean",
"description": "[completions] Supports the `store` field. Default: auto-detected from URL."
},
"supportsDeveloperRole": {
"type": "boolean",
"description": "[completions/responses] Accepts the `developer` role instead of `system`. Default: auto-detected."
},
"supportsReasoningEffort": {
"type": "boolean",
"description": "[completions] Supports `reasoning_effort`. Default: auto-detected."
},
"supportsUsageInStreaming": {
"type": "boolean",
"description": "[completions] Supports stream_options include_usage. Default: true."
},
"supportsFinishReason": {
"type": "boolean",
"description": "[completions] Streamed chunks include finish_reason. When false Pi infers stop/toolUse. Default: true."
},
"maxTokensField": {
"enum": ["max_completion_tokens", "max_tokens"],
"description": "[completions] Request field carrying the max-token cap. Default: auto-detected."
},
"requiresToolResultName": {
"type": "boolean",
"description": "[completions] Tool results must repeat the tool `name`. Default: auto-detected."
},
"requiresAssistantAfterToolResult": {
"type": "boolean",
"description": "[completions] An assistant message must follow tool results before the next user message. Default: auto-detected."
},
"requiresThinkingAsText": {
"type": "boolean",
"description": "[completions] Thinking blocks must be replayed as text delimited by <thinking>. Default: auto-detected."
},
"requiresReasoningContentOnAssistantMessages": {
"type": "boolean",
"description": "[completions] Replayed assistant messages need an empty reasoning_content while reasoning is enabled. Default: auto-detected."
},
"thinkingFormat": {
"enum": [
"openai",
"openrouter",
"together",
"baseten",
"deepseek",
"zai",
"qwen",
"chat-template",
"qwen-chat-template",
"string-thinking",
"ant-ling"
],
"description": "[completions] Wire format used to express thinking effort. Default: openai."
},
"chatTemplateKwargs": {
"type": "object",
"description": "[completions] Sent as chat_template_kwargs; used by thinkingFormat chat-template/qwen-chat-template.",
"additionalProperties": {
"$ref": "#/$defs/chatTemplateKwarg"
}
},
"chatTemplateArgs": {
"type": "object",
"description": "[completions] Sent as chat_template_args; used by thinkingFormat baseten.",
"additionalProperties": {
"$ref": "#/$defs/chatTemplateKwarg"
}
},
"zaiToolStream": {
"type": "boolean",
"description": "[completions] Sends z.ai's top-level tool_stream for streaming tool deltas. Default: false."
},
"thinkingTokenBudgetField": {
"enum": ["thinking_token_budget", "thinking_budget", "thinking_budget_tokens"],
"description": "[completions] Top-level field capping reasoning tokens from thinkingBudgets. vLLM/Qwen-DashScope-SGLang/llama.cpp respectively. Default: off."
},
"supportsThinkingTokenBudget": {
"type": "boolean",
"description": "[completions] Alias for thinkingTokenBudgetField: \"thinking_token_budget\". Prefer thinkingTokenBudgetField."
},
"supportsOpenAIGrammarTools": {
"type": "boolean",
"description": "[completions/responses] Supports OpenAI custom tools with Lark/regex grammar formats. Default: false."
},
"supportsStrictMode": {
"type": "boolean",
"description": "[completions/responses] Accepts `strict` in tool definitions. Default: true (completions), API-specific (responses)."
},
"cacheControlFormat": {
"const": "anthropic",
"description": "[completions] Applies Anthropic-style cache_control markers for prompt caching."
},
"sendSessionAffinityHeaders": {
"type": "boolean",
"description": "[completions/anthropic-messages] Sends x-session-affinity/session headers derived from options.sessionId for prompt-cache routing. Default: false."
},
"deferredToolsMode": {
"const": "kimi",
"description": "[completions] Kimi-compatible serialization for deferred tools."
},
"sessionAffinityFormat": {
"enum": ["openai", "openai-nosession", "openrouter"],
"description": "[completions/responses] Which session-affinity header set to send. Default: auto-detected."
},
"supportsLongCacheRetention": {
"type": "boolean",
"description": "[completions/responses/anthropic-messages] Supports 24h prompt_cache_retention or Anthropic cache_control ttl 1h. Default: true."
},
"openRouterRouting": {
"$ref": "#/$defs/openRouterRouting"
},
"vercelGatewayRouting": {
"$ref": "#/$defs/vercelGatewayRouting"
},
"supportsAdditionalTools": {
"type": "boolean",
"description": "[responses] Model accepts message-anchored additional_tools input items. Default: false."
},
"supportsToolSearch": {
"type": "boolean",
"description": "[responses] Model supports client-executed tool search for deferred tools. Default: false."
},
"supportsExplicitPromptCacheMode": {
"type": "boolean",
"description": "[responses] Accepts prompt_cache_options (GPT-5.6+ explicit prompt caching); older OpenAI models reject it. Default: false."
},
"supportsEagerToolInputStreaming": {
"type": "boolean",
"description": "[anthropic-messages] Accepts per-tool eager_input_streaming; false sends the legacy beta header. Default: true."
},
"supportsCacheControlOnTools": {
"type": "boolean",
"description": "[anthropic-messages] Accepts cache_control on tool definitions; some compatible providers reject it. Default: true."
},
"supportsTemperature": {
"type": "boolean",
"description": "[anthropic-messages] Accepts the temperature field; Claude Opus 4.7+ rejects non-default values. Default: true."
},
"forceAdaptiveThinking": {
"type": "boolean",
"description": "[anthropic-messages] Forces thinking.type adaptive plus output_config.effort regardless of model id. Default: false."
},
"allowEmptySignature": {
"type": "boolean",
"description": "[anthropic-messages] Replays empty thinking signatures as signature:\"\" instead of converting to text. Default: false."
},
"supportsStrictTools": {
"type": "boolean",
"description": "[anthropic-messages] Supports strict tool schemas. Default: false."
},
"supportsToolReferences": {
"type": "boolean",
"description": "[anthropic-messages] Supports deferred tools loaded via tool_reference blocks. Default varies by model family."
},
"allowedFallbackModels": {
"type": "array",
"description": "[anthropic-messages] Models permitted in server-side refusal fallbacks, with pricing metadata.",
"items": {
"type": "object",
"additionalProperties": false,
"required": ["provider", "model", "cost"],
"properties": {
"provider": {
"type": "string"
},
"model": {
"type": "string"
},
"cost": {
"$ref": "#/$defs/cost"
}
}
}
}
}
}
}
}
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "Pi coding agent settings",
"description": "Local JSON Schema for @earendil-works/pi-coding-agent settings.json, generated for Pi 0.84.0.",
"type": "object",
"additionalProperties": false,
"properties": {
"$schema": {
"type": "string",
"description": "Path or URL to the JSON Schema used by editors. Pi preserves this metadata property."
},
"lastChangelogVersion": {
"type": "string",
"description": "Last Pi changelog version shown. Normally managed by Pi."
},
"defaultProvider": {
"type": "string",
"description": "Default model provider, such as anthropic or openai."
},
"defaultModel": {
"type": "string",
"description": "Default model ID."
},
"defaultThinkingLevel": {
"description": "Default reasoning effort.",
"enum": ["off", "minimal", "low", "medium", "high", "xhigh", "max"]
},
"transport": {
"description": "Preferred provider transport.",
"default": "auto",
"enum": ["sse", "websocket", "websocket-cached", "auto"]
},
"steeringMode": {
"description": "How queued steering messages are delivered.",
"default": "one-at-a-time",
"enum": ["all", "one-at-a-time"]
},
"followUpMode": {
"description": "How queued follow-up messages are delivered.",
"default": "one-at-a-time",
"enum": ["all", "one-at-a-time"]
},
"theme": {
"type": "string",
"description": "Built-in theme name, custom theme name, or theme path.",
"default": "dark"
},
"compaction": {
"$ref": "#/$defs/compaction"
},
"branchSummary": {
"$ref": "#/$defs/branchSummary"
},
"retry": {
"$ref": "#/$defs/retry"
},
"hideThinkingBlock": {
"type": "boolean",
"description": "Hide model thinking blocks in output.",
"default": false
},
"showCacheMissNotices": {
"type": "boolean",
"description": "Show transcript notices for significant prompt-cache misses.",
"default": false
},
"externalEditor": {
"type": "string",
"description": "Command used by Ctrl+G. For VS Code, use code --wait."
},
"shellPath": {
"type": "string",
"description": "Custom shell executable path. A leading ~ is supported."
},
"quietStartup": {
"type": "boolean",
"description": "Hide the startup header.",
"default": false
},
"defaultProjectTrust": {
"description": "Fallback project trust behavior. Valid only in global settings.",
"default": "ask",
"enum": ["ask", "always", "never"]
},
"shellCommandPrefix": {
"type": "string",
"description": "Prefix prepended to every bash command."
},
"npmCommand": {
"type": "array",
"description": "Command argv used for npm package operations.",
"items": {
"type": "string"
},
"examples": [["mise", "exec", "node@20", "--", "npm"]]
},
"collapseChangelog": {
"type": "boolean",
"description": "Show a condensed changelog after updates.",
"default": false
},
"enableInstallTelemetry": {
"type": "boolean",
"description": "Enable anonymous install/update telemetry and optional provider attribution headers.",
"default": true
},
"enableAnalytics": {
"type": "boolean",
"description": "Opt in to analytics data sharing.",
"default": false
},
"trackingId": {
"type": "string",
"description": "Analytics tracking identifier. Normally managed by Pi."
},
"packages": {
"type": "array",
"description": "npm or git Pi packages from which resources are loaded.",
"items": {
"$ref": "#/$defs/packageSource"
}
},
"extensions": {
"$ref": "#/$defs/resourcePaths",
"description": "Local extension files, directories, glob patterns, and exclusions."
},
"skills": {
"$ref": "#/$defs/resourcePaths",
"description": "Local skill files, directories, glob patterns, and exclusions."
},
"prompts": {
"$ref": "#/$defs/resourcePaths",
"description": "Local prompt template files, directories, glob patterns, and exclusions."
},
"themes": {
"$ref": "#/$defs/resourcePaths",
"description": "Local theme files, directories, glob patterns, and exclusions."
},
"enableSkillCommands": {
"type": "boolean",
"description": "Register skills as /skill:name commands.",
"default": true
},
"terminal": {
"$ref": "#/$defs/terminal"
},
"images": {
"$ref": "#/$defs/images"
},
"enabledModels": {
"type": "array",
"description": "Model patterns included in Ctrl+P cycling.",
"items": {
"type": "string"
}
},
"doubleEscapeAction": {
"description": "Action performed when Escape is pressed twice with an empty editor.",
"default": "tree",
"enum": ["fork", "tree", "none"]
},
"treeFilterMode": {
"description": "Default filter used by the session tree.",
"default": "default",
"enum": ["default", "no-tools", "user-only", "labeled-only", "all"]
},
"thinkingBudgets": {
"$ref": "#/$defs/thinkingBudgets"
},
"editorPaddingX": {
"type": "integer",
"description": "Horizontal input editor padding in cells.",
"default": 0,
"minimum": 0,
"maximum": 3
},
"outputPad": {
"type": "integer",
"description": "Horizontal padding for transcript messages.",
"default": 1,
"enum": [0, 1]
},
"autocompleteMaxVisible": {
"type": "integer",
"description": "Maximum visible autocomplete entries.",
"default": 5,
"minimum": 3,
"maximum": 20
},
"showHardwareCursor": {
"type": "boolean",
"description": "Show the terminal cursor while the TUI positions it for IME support.",
"default": false
},
"markdown": {
"$ref": "#/$defs/markdown"
},
"warnings": {
"$ref": "#/$defs/warnings"
},
"sessionDir": {
"type": "string",
"description": "Custom session storage directory. Absolute, relative, and ~ paths are supported."
},
"httpProxy": {
"type": "string",
"description": "Proxy URL applied to HTTP_PROXY and HTTPS_PROXY. Valid only in global settings."
},
"httpIdleTimeoutMs": {
"type": "integer",
"description": "HTTP header/body idle timeout in milliseconds. Set to 0 to disable.",
"default": 300000,
"minimum": 0
},
"websocketConnectTimeoutMs": {
"type": "integer",
"description": "WebSocket connect/open timeout in milliseconds. Set to 0 to disable.",
"default": 15000,
"minimum": 0
},
"tuiMode": {
"description": "Interactive terminal UI mode.",
"default": "regular",
"enum": ["regular", "fullscreen"]
},
"fullscreenScrollbar": {
"description": "Scrollbar behavior in fullscreen TUI mode.",
"default": "auto",
"enum": ["auto", "always", "hidden"]
}
},
"$defs": {
"resourcePaths": {
"type": "array",
"items": {
"type": "string"
}
},
"packageSource": {
"oneOf": [
{
"type": "string"
},
{
"type": "object",
"additionalProperties": false,
"required": ["source"],
"properties": {
"source": {
"type": "string",
"description": "npm or git package source."
},
"autoload": {
"type": "boolean",
"description": "When false, start with no package resources and apply only explicit patterns."
},
"extensions": {
"$ref": "#/$defs/resourcePaths"
},
"skills": {
"$ref": "#/$defs/resourcePaths"
},
"prompts": {
"$ref": "#/$defs/resourcePaths"
},
"themes": {
"$ref": "#/$defs/resourcePaths"
}
}
}
]
},
"compaction": {
"type": "object",
"additionalProperties": false,
"properties": {
"enabled": {
"type": "boolean",
"description": "Enable automatic context compaction.",
"default": true
},
"reserveTokens": {
"type": "integer",
"description": "Tokens reserved for the model response.",
"default": 16384,
"minimum": 0
},
"keepRecentTokens": {
"type": "integer",
"description": "Recent tokens retained without summarization.",
"default": 20000,
"minimum": 0
}
}
},
"branchSummary": {
"type": "object",
"additionalProperties": false,
"properties": {
"reserveTokens": {
"type": "integer",
"description": "Tokens reserved for branch summarization.",
"default": 16384,
"minimum": 0
},
"skipPrompt": {
"type": "boolean",
"description": "Skip the branch summarization prompt and default to no summary.",
"default": false
}
}
},
"retry": {
"type": "object",
"additionalProperties": false,
"properties": {
"enabled": {
"type": "boolean",
"description": "Enable automatic agent-level retries for transient errors.",
"default": true
},
"maxRetries": {
"type": "integer",
"description": "Maximum agent-level retry attempts.",
"default": 3,
"minimum": 0
},
"baseDelayMs": {
"type": "integer",
"description": "Base delay for exponential retry backoff.",
"default": 2000,
"minimum": 0
},
"provider": {
"type": "object",
"additionalProperties": false,
"properties": {
"timeoutMs": {
"type": "integer",
"description": "Provider request timeout in milliseconds.",
"minimum": 0
},
"maxRetries": {
"type": "integer",
"description": "Provider/SDK retry attempts.",
"default": 0,
"minimum": 0
},
"maxRetryDelayMs": {
"type": "integer",
"description": "Maximum server-requested retry delay. Set to 0 to disable the limit.",
"default": 60000,
"minimum": 0
}
}
}
}
},
"terminal": {
"type": "object",
"additionalProperties": false,
"properties": {
"showImages": {
"type": "boolean",
"description": "Show inline images when supported by the terminal.",
"default": true
},
"imageWidthCells": {
"type": "integer",
"description": "Preferred inline image width in terminal cells.",
"default": 60,
"minimum": 1
},
"clearOnShrink": {
"type": "boolean",
"description": "Clear empty rows when terminal content shrinks.",
"default": false
},
"showTerminalProgress": {
"type": "boolean",
"description": "Emit OSC 9;4 terminal progress indicators.",
"default": false
}
}
},
"images": {
"type": "object",
"additionalProperties": false,
"properties": {
"autoResize": {
"type": "boolean",
"description": "Resize images to fit within 2000x2000 before sending them to a model.",
"default": true
},
"blockImages": {
"type": "boolean",
"description": "Prevent all images from being sent to model providers.",
"default": false
}
}
},
"thinkingBudgets": {
"type": "object",
"additionalProperties": false,
"properties": {
"minimal": {
"type": "integer",
"minimum": 0
},
"low": {
"type": "integer",
"minimum": 0
},
"medium": {
"type": "integer",
"minimum": 0
},
"high": {
"type": "integer",
"minimum": 0
}
}
},
"markdown": {
"type": "object",
"additionalProperties": false,
"properties": {
"codeBlockIndent": {
"type": "string",
"description": "Indentation prepended to rendered code blocks.",
"default": " "
},
"mermaid": {
"description": "Mermaid diagram rendering mode.",
"default": "streaming",
"enum": ["off", "final", "streaming"]
}
}
},
"warnings": {
"type": "object",
"additionalProperties": false,
"properties": {
"anthropicExtraUsage": {
"type": "boolean",
"description": "Warn when Anthropic subscription authentication may use paid extra usage.",
"default": true
}
}
}
},
"examples": [
{
"$schema": "./pi-settings.schema.json",
"defaultProvider": "anthropic",
"defaultModel": "claude-sonnet-4-20250514",
"defaultThinkingLevel": "medium",
"theme": "dark"
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment