Skill Tracer
Skills › Scientific Agent Skills › pi-agent › settings.md

settings.md

109 lines · skills/pi-agent/references/settings.md at 5f2bc03

Open on GitHub

Most marks come from matching words in the file, so treat them as pointers.

1# Settings
2
3Source: https://pi.dev/docs/latest/settings
4
5Reviewed against Pi 0.99.2 and the package versions listed in `../SKILL.md` on 2026-09-30.
6
7Pi uses JSON settings files. Project settings override global settings; nested objects merge key by key and resource arrays combine. Edit directly or use `/settings` for common options.
8
9| Location | Scope |
10|---|---|
11| `~/.pi/agent/settings.json` | Global |
12| `.pi/settings.json` | Project |
14Resource paths in the global file resolve relative to `~/.pi/agent`; in the project file relative to `.pi`. Absolute paths and `~` work.

Settings

Source: https://pi.dev/docs/latest/settings

Reviewed against Pi 0.99.2 and the package versions listed in ../SKILL.md on 2026-09-30.

Pi uses JSON settings files. Project settings override global settings; nested objects merge key by key and resource arrays combine. Edit directly or use /settings for common options.

LocationScope
~/.pi/agent/settings.jsonGlobal
.pi/settings.jsonProject

Resource paths in the global file resolve relative to ~/.pi/agent; in the project file relative to .pi. Absolute paths and ~ work.

Raw lines 1 to 15
16## Project Trust
18Interactive startup asks before trusting a project folder that has project-local settings, resources, or project `.agents/skills` and no saved decision for that folder or a parent in `~/.pi/agent/trust.json`. Non-interactive modes never prompt and use `defaultProjectTrust` (`"ask"` default, `"never"`, `"always"`); `--approve`/`-a` and `--no-approve`/`-na` override for one run. `/trust` saves a decision (including for the immediate parent folder) but does not reload the current session. `pi config` and package commands follow the same flow; `pi update` never prompts.

Project Trust

Interactive startup asks before trusting a project folder that has project-local settings, resources, or project .agents/skills and no saved decision for that folder or a parent in ~/.pi/agent/trust.json. Non-interactive modes never prompt and use defaultProjectTrust ("ask" default, "never", "always"); --approve/-a and --no-approve/-na override for one run. /trust saves a decision (including for the immediate parent folder) but does not reload the current session. pi config and package commands follow the same flow; pi update never prompts.

Raw lines 16 to 19
20## Model and Thinking
22| Setting | Default | Notes |
23|---|---|---|
24| `defaultProvider` | – | Provider id |
25| `defaultModel` | – | Model id |
26| `defaultThinkingLevel` | `"medium"` | `off`, `minimal`, `low`, `medium`, `high`, `xhigh`, `max` |
27| `hideThinkingBlock` | `false` | Hide thinking blocks in output |
28| `showCacheMissNotices` | `false` | Transcript notices for significant prompt-cache misses |
29| `thinkingBudgets` | – | Custom token budgets per thinking level |

Model and Thinking

SettingDefaultNotes
defaultProvider–Provider id
defaultModel–Model id
defaultThinkingLevel"medium"off, minimal, low, medium, high, xhigh, max
hideThinkingBlockfalseHide thinking blocks in output
showCacheMissNoticesfalseTranscript notices for significant prompt-cache misses
thinkingBudgets–Custom token budgets per thinking level
Raw lines 20 to 30
31## UI and Display
33`theme` (`"system"`), `externalEditor` (Ctrl+G command; takes precedence over `$VISUAL`/`$EDITOR` — use `"code --wait"` for VS Code), `quietStartup` (`false`), `defaultProjectTrust` (`"ask"`, global only), `collapseChangelog` (`false`), `enableInstallTelemetry` (`true`), `enableAnalytics` (`false`, only asked during experimental first-time setup with `PI_EXPERIMENTAL=1`), `trackingId`, `doubleEscapeAction` (`"tree"` | `"fork"` | `"none"`), `treeFilterMode` (`"default"` | `"no-tools"` | `"user-only"` | `"labeled-only"` | `"all"`), `editorPaddingX` (`0`, range 0–3), `outputPad` (`1`, 0 or 1), `autocompleteMaxVisible` (`5`, range 3–20), `showHardwareCursor` (`false`).
35Fullscreen TUI: `tuiMode` (`"regular"` default, or experimental `"fullscreen"`; `/settings` changes apply immediately and `--tui-mode` overrides at startup), `fullscreenExitOutput` (`"transcript"` prints the final transcript plus resume hint, `"resume-hint"` restores the previous screen and prints only the hint), `fullscreenScrollbar` (`"auto"` shows it while scrolling, `"always"` reserves the rightmost column, `"hidden"`). These have no effect in regular mode. `fullscreenCopyOnSelect` defaults to `true`; `fullscreenWheelScrollLines` is `"auto"` or 1–100.

UI and Display

theme ("system"), externalEditor (Ctrl+G command; takes precedence over $VISUAL/$EDITOR — use "code --wait" for VS Code), quietStartup (false), defaultProjectTrust ("ask", global only), collapseChangelog (false), enableInstallTelemetry (true), enableAnalytics (false, only asked during experimental first-time setup with PI_EXPERIMENTAL=1), trackingId, doubleEscapeAction ("tree" | "fork" | "none"), treeFilterMode ("default" | "no-tools" | "user-only" | "labeled-only" | "all"), editorPaddingX (0, range 0–3), outputPad (1, 0 or 1), autocompleteMaxVisible (5, range 3–20), showHardwareCursor (false).

Fullscreen TUI: tuiMode ("regular" default, or experimental "fullscreen"; /settings changes apply immediately and --tui-mode overrides at startup), fullscreenExitOutput ("transcript" prints the final transcript plus resume hint, "resume-hint" restores the previous screen and prints only the hint), fullscreenScrollbar ("auto" shows it while scrolling, "always" reserves the rightmost column, "hidden"). These have no effect in regular mode. fullscreenCopyOnSelect defaults to true; fullscreenWheelScrollLines is "auto" or 1–100.

Raw lines 31 to 36
37## Network, Warnings, Markdown
39`httpProxy` (applied as `HTTP_PROXY`/`HTTPS_PROXY`, global only). `warnings.anthropicExtraUsage` (`true`) warns when Anthropic subscription auth may use paid extra usage. `markdown.codeBlockIndent` (`" "`), `markdown.mermaid` (`"streaming"`, or `"final"` / `"off"`).

Network, Warnings, Markdown

httpProxy (applied as HTTP_PROXY/HTTPS_PROXY, global only). warnings.anthropicExtraUsage (true) warns when Anthropic subscription auth may use paid extra usage. markdown.codeBlockIndent (" "), markdown.mermaid ("streaming", or "final" / "off").

Raw lines 37 to 40
41## Compaction and Branch Summary
43`compaction.enabled` (`true`), `compaction.reserveTokens` (`16384`), `compaction.keepRecentTokens` (`20000`), and `compaction.modelOverrides` keyed by exact `provider/modelId` with independently resolved non-negative safe-integer budgets. `branchSummary.reserveTokens` (`16384`), `branchSummary.skipPrompt` (`false`, defaults to no summary).

Compaction and Branch Summary

compaction.enabled (true), compaction.reserveTokens (16384), compaction.keepRecentTokens (20000), and compaction.modelOverrides keyed by exact provider/modelId with independently resolved non-negative safe-integer budgets. branchSummary.reserveTokens (16384), branchSummary.skipPrompt (false, defaults to no summary).

Raw lines 41 to 44
45## Retry
47`retry.enabled` (`true`), `retry.maxRetries` (`3`), `retry.baseDelayMs` (`2000`, so 2s/4s/8s), `retry.maxAgentDelayMs` (`60000`), `retry.provider.timeoutMs` (`httpIdleTimeoutMs`), `retry.provider.maxRetries` (`0`), `retry.provider.maxRetryDelayMs` (`60000`; `0` disables the limit).
49Keep `retry.provider.maxRetries` at `0` unless provider-level retries are explicitly needed — above `0`, SDK retries can swallow out-of-usage-limit errors before Pi sees them and block the agent until quota resets. When a provider requests a delay longer than `maxRetryDelayMs`, the request fails immediately with an informative error instead of waiting silently.

Retry

retry.enabled (true), retry.maxRetries (3), retry.baseDelayMs (2000, so 2s/4s/8s), retry.maxAgentDelayMs (60000), retry.provider.timeoutMs (httpIdleTimeoutMs), retry.provider.maxRetries (0), retry.provider.maxRetryDelayMs (60000; 0 disables the limit).

Keep retry.provider.maxRetries at 0 unless provider-level retries are explicitly needed — above 0, SDK retries can swallow out-of-usage-limit errors before Pi sees them and block the agent until quota resets. When a provider requests a delay longer than maxRetryDelayMs, the request fails immediately with an informative error instead of waiting silently.

Raw lines 45 to 50
51## Message Delivery
53`steeringMode` / `followUpMode` (`"one-at-a-time"` or `"all"`), `transport` (`"auto"`, `"sse"`, `"websocket"`, `"websocket-cached"`), `httpIdleTimeoutMs` (`300000`, `0` disables), `websocketConnectTimeoutMs` (`15000`, `0` disables).

Message Delivery

steeringMode / followUpMode ("one-at-a-time" or "all"), transport ("auto", "sse", "websocket", "websocket-cached"), httpIdleTimeoutMs (300000, 0 disables), websocketConnectTimeoutMs (15000, 0 disables).

Raw lines 51 to 54
55## Terminal and Images
57`terminal.showImages` (`true`), `terminal.imageWidthCells` (`60`), `terminal.clearOnShrink` (`false`), `terminal.showTerminalProgress` (`false`), `terminal.hyperlinks` / `terminal.trueColor` (`"auto"` or boolean), `terminal.images` (`"auto"`, `"kitty"`, `"iterm2"`, or `false`), `images.autoResize` (`true`, 2000×2000 max; applies to `@file` attachments, `read`, and images returned by tools), `images.blockImages` (`false`).

Terminal and Images

terminal.showImages (true), terminal.imageWidthCells (60), terminal.clearOnShrink (false), terminal.showTerminalProgress (false), terminal.hyperlinks / terminal.trueColor ("auto" or boolean), terminal.images ("auto", "kitty", "iterm2", or false), images.autoResize (true, 2000×2000 max; applies to @file attachments, read, and images returned by tools), images.blockImages (false).

Raw lines 55 to 58
59## Tools
61`defaultTools` is a string array of built-in tools enabled at startup; omitting it uses Pi's standard defaults. Extension and SDK custom tools stay enabled, and an empty array starts with no built-ins while preserving them. `--tools` replaces this with a strict allowlist for all tools, `--no-tools` disables everything, `--no-builtin-tools` disables the built-in defaults, and `--exclude-tools` filters the result. Plain names replace the inherited selection. Lists of only `+name`/`-name` adjust it; project deltas apply over global defaults. For example `["+codemode"]` adds codemode, while `["-bash", "+powershell"]` selects native Windows PowerShell. `/reload` enables newly added defaults but does not deactivate removed tools or re-enable unchanged tools disabled at runtime. CLI tool overrides still win. `codemode.mode` is `"on"` or `"only"`; `codemode.inlineBudget` defaults to `3000` tokens.

Tools

defaultTools is a string array of built-in tools enabled at startup; omitting it uses Pi's standard defaults. Extension and SDK custom tools stay enabled, and an empty array starts with no built-ins while preserving them. --tools replaces this with a strict allowlist for all tools, --no-tools disables everything, --no-builtin-tools disables the built-in defaults, and --exclude-tools filters the result. Plain names replace the inherited selection. Lists of only +name/-name adjust it; project deltas apply over global defaults. For example ["+codemode"] adds codemode, while ["-bash", "+powershell"] selects native Windows PowerShell. /reload enables newly added defaults but does not deactivate removed tools or re-enable unchanged tools disabled at runtime. CLI tool overrides still win. codemode.mode is "on" or "only"; codemode.inlineBudget defaults to 3000 tokens.

Raw lines 59 to 62
63## Shell
65`shellPath` (supports leading `~`; Windows paths in JSON need forward slashes or escaped backslashes, e.g. `"C:/Program Files/Git/bin/bash.exe"`), `shellCommandPrefix` (prefix for every bash command), `npmCommand` (argv array, e.g. `["mise", "exec", "node@24", "--", "npm"]`). `npmCommand` covers all npm package-manager operations; user npm packages install under `~/.pi/agent/npm/`, project ones under `.pi/npm/`. When `npmCommand` is configured, git package dependency installs use plain `install` for wrapper compatibility.

Shell

shellPath (supports leading ~; Windows paths in JSON need forward slashes or escaped backslashes, e.g. "C:/Program Files/Git/bin/bash.exe"), shellCommandPrefix (prefix for every bash command), npmCommand (argv array, e.g. ["mise", "exec", "node@24", "--", "npm"]). npmCommand covers all npm package-manager operations; user npm packages install under ~/.pi/agent/npm/, project ones under .pi/npm/. When npmCommand is configured, git package dependency installs use plain install for wrapper compatibility.

Raw lines 63 to 66
Runs code bin/bash.exe :65
67## Sessions and Model Cycling
69`sessionDir` (absolute, relative, or `~`); precedence is `--session-dir`, then `PI_CODING_AGENT_SESSION_DIR`, then this setting. `enabledModels` is an array of patterns for Ctrl+P cycling, same format as `--models`.

Sessions and Model Cycling

sessionDir (absolute, relative, or ~); precedence is --session-dir, then PI_CODING_AGENT_SESSION_DIR, then this setting. enabledModels is an array of patterns for Ctrl+P cycling, same format as --models.

Raw lines 67 to 70
71## Resources
73`packages` (`[]`), `extensions` (`[]`), `skills` (`[]`), `prompts` (`[]`), `themes` (`[]`), `enableSkillCommands` (`true`, registers `/skill:name`).
75Arrays support glob patterns, `!pattern` to exclude, `+path` to force-include an exact path, and `-path` to force-exclude. `packages` accepts strings or objects that filter which resource types load:
77```json
79 "packages": [
80 "pi-skills",
81 { "source": "npm:my-package", "skills": ["brave-search"], "extensions": [] }
82 ]
84```

Resources

packages ([]), extensions ([]), skills ([]), prompts ([]), themes ([]), enableSkillCommands (true, registers /skill:name).

Arrays support glob patterns, !pattern to exclude, +path to force-include an exact path, and -path to force-exclude. packages accepts strings or objects that filter which resource types load:

{
  "packages": [
    "pi-skills",
    { "source": "npm:my-package", "skills": ["brave-search"], "extensions": [] }
  ]
}
Raw lines 71 to 85
86## Telemetry and Update Checks
88`enableInstallTelemetry` only controls the anonymous install/update ping to `https://pi.dev/api/report-install`. Opting out does not disable update checks, which fetch `https://pi.dev/api/latest-version`. `PI_SKIP_VERSION_CHECK=1` disables the version check; `--offline` or `PI_OFFLINE=1` disables all startup network operations including package update checks and telemetry.

Telemetry and Update Checks

enableInstallTelemetry only controls the anonymous install/update ping to https://pi.dev/api/report-install. Opting out does not disable update checks, which fetch https://pi.dev/api/latest-version. PI_SKIP_VERSION_CHECK=1 disables the version check; --offline or PI_OFFLINE=1 disables all startup network operations including package update checks and telemetry.

Raw lines 86 to 89
90## Example
92```json
94 "defaultProvider": "anthropic",
95 "defaultModel": "claude-sonnet-4-20250514",
96 "defaultThinkingLevel": "medium",
97 "theme": "dark",
98 "compaction": { "enabled": true, "reserveTokens": 16384, "keepRecentTokens": 20000 },
99 "retry": { "enabled": true, "maxRetries": 3 },
100 "enabledModels": ["claude-*", "gpt-4o"],
101 "warnings": { "anthropicExtraUsage": true },
102 "packages": ["pi-skills"]
104```
107`modelThinkingLevels` stores exact `provider/modelId` startup effort overrides. Global-only `cacheWarming` defaults to `"streaming"` (`"off"` and `"idle"` also exist). Eligible warming sends additional billable requests when estimated avoided cache-miss cost is at least $0.05; usage is recorded in session totals. Disable it for a strict no-extra-requests host.
109Built-in extensions can be disabled with `-builtin:mcp`, `-builtin:llama.cpp`, `-builtin:codemode`, or `-builtin:tool-search` in `extensions`; project `+builtin:`/`-builtin:` entries override user choices.

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"],
  "warnings": { "anthropicExtraUsage": true },
  "packages": ["pi-skills"]
}

modelThinkingLevels stores exact provider/modelId startup effort overrides. Global-only cacheWarming defaults to "streaming" ("off" and "idle" also exist). Eligible warming sends additional billable requests when estimated avoided cache-miss cost is at least $0.05; usage is recorded in session totals. Disable it for a strict no-extra-requests host.

Built-in extensions can be disabled with -builtin:mcp, -builtin:llama.cpp, -builtin:codemode, or -builtin:tool-search in extensions; project +builtin:/-builtin: entries override user choices.

Raw lines 90 to 109