Skip to main content

Settings

Pi uses JSON settings files with project settings overriding global settings.

LocationScope
~/.pi/agent/settings.jsonGlobal (all projects)
.pi/settings.jsonProject (current directory)

Edit directly or use /settings for common options.

All Settings

Model & Thinking

SettingTypeDefaultDescription
defaultProviderstring-Default provider (e.g., "anthropic", "openai")
defaultModelstring-Default model ID
defaultThinkingLevelstring-"off", "minimal", "low", "medium", "high", "xhigh"
hideThinkingBlockbooleanfalseHide thinking blocks in output
thinkingBudgetsobject-Custom token budgets per thinking level

thinkingBudgets

{
"thinkingBudgets": {
"minimal": 1024,
"low": 4096,
"medium": 10240,
"high": 32768
}
}

UI & Display

SettingTypeDefaultDescription
themestring"dark"Theme name ("dark", "light", or custom)
quietStartupbooleanfalseHide startup header
collapseChangelogbooleanfalseShow condensed changelog after updates
doubleEscapeActionstring"tree"Action for double-escape: "tree", "fork", or "none"
editorPaddingXnumber0Horizontal padding for input editor (0-3)
autocompleteMaxVisiblenumber5Max visible items in autocomplete dropdown (3-20)
showHardwareCursorbooleanfalseShow terminal cursor

Compaction

SettingTypeDefaultDescription
compaction.enabledbooleantrueEnable auto-compaction
compaction.reserveTokensnumber16384Tokens reserved for LLM response
compaction.keepRecentTokensnumber20000Recent tokens to keep (not summarized)
{
"compaction": {
"enabled": true,
"reserveTokens": 16384,
"keepRecentTokens": 20000
}
}

Branch Summary

SettingTypeDefaultDescription
branchSummary.reserveTokensnumber16384Tokens reserved for branch summarization

Retry

SettingTypeDefaultDescription
retry.enabledbooleantrueEnable automatic retry on transient errors
retry.maxRetriesnumber3Maximum retry attempts
retry.baseDelayMsnumber2000Base delay for exponential backoff (2s, 4s, 8s)
retry.maxDelayMsnumber60000Max server-requested delay before failing (60s)

When a provider requests a retry delay longer than maxDelayMs (e.g., Google's "quota will reset after 5h"), the request fails immediately with an informative error instead of waiting silently. Set to 0 to disable the cap.

{
"retry": {
"enabled": true,
"maxRetries": 3,
"baseDelayMs": 2000,
"maxDelayMs": 60000
}
}

Message Delivery

SettingTypeDefaultDescription
steeringModestring"one-at-a-time"How steering messages are sent: "all" or "one-at-a-time"
followUpModestring"one-at-a-time"How follow-up messages are sent: "all" or "one-at-a-time"
transportstring"sse"Preferred transport for providers that support multiple transports: "sse", "websocket", or "auto"

Terminal & Images

SettingTypeDefaultDescription
terminal.showImagesbooleantrueShow images in terminal (if supported)
terminal.clearOnShrinkbooleanfalseClear empty rows when content shrinks (can cause flicker)
images.autoResizebooleantrueResize images to 2000x2000 max
images.blockImagesbooleanfalseBlock all images from being sent to LLM

Shell

SettingTypeDefaultDescription
shellPathstring-Custom shell path (e.g., for Cygwin on Windows)
shellCommandPrefixstring-Prefix for every bash command (e.g., "shopt -s expand_aliases")

Model Cycling

SettingTypeDefaultDescription
enabledModelsstring[]-Model patterns for Ctrl+P cycling (same format as --models CLI flag)
{
"enabledModels": ["claude-*", "gpt-4o", "gemini-2*"]
}

Markdown

SettingTypeDefaultDescription
markdown.codeBlockIndentstring" "Indentation for code blocks

Resources

These settings define where to load extensions, skills, prompts, and themes from.

Paths in ~/.pi/agent/settings.json resolve relative to ~/.pi/agent. Paths in .pi/settings.json resolve relative to .pi. Absolute paths and ~ are supported.

SettingTypeDefaultDescription
packagesarray[]npm/git packages to load resources from
extensionsstring[][]Local extension file paths or directories
skillsstring[][]Local skill file paths or directories
promptsstring[][]Local prompt template paths or directories
themesstring[][]Local theme file paths or directories
enableSkillCommandsbooleantrueRegister skills as /skill:name commands

Arrays support glob patterns and exclusions. Use !pattern to exclude. Use +path to force-include an exact path and -path to force-exclude an exact path.

packages

String form loads all resources from a package:

{
"packages": ["pi-skills", "@org/my-extension"]
}

Object form filters which resources to load:

{
"packages": [
{
"source": "pi-skills",
"skills": ["brave-search", "transcribe"],
"extensions": []
}
]
}

See packages.md for package management details.

Example

{
"defaultProvider": "anthropic",
"defaultModel": "claude-sonnet-4-20250514",
"defaultThinkingLevel": "medium",
"theme": "dark",
"compaction": {
"enabled": true,
"reserveTokens": 16384,
"keepRecentTokens": 20000
},
"retry": {
"enabled": true,
"maxRetries": 3
},
"enabledModels": ["claude-*", "gpt-4o"],
"packages": ["pi-skills"]
}

Project Overrides

Project settings (.pi/settings.json) override global settings. Nested objects are merged:

// ~/.pi/agent/settings.json (global)
{
"theme": "dark",
"compaction": { "enabled": true, "reserveTokens": 16384 }
}

// .pi/settings.json (project)
{
"compaction": { "reserveTokens": 8192 }
}

// Result
{
"theme": "dark",
"compaction": { "enabled": true, "reserveTokens": 8192 }
}