@aaronkyriesenbach/pi-frozen-defaults
Pi extension that freezes defaultModel/defaultProvider/defaultThinkingLevel so they only change via a manual settings.json edit, never as a side effect of using pi.
Package details
Install @aaronkyriesenbach/pi-frozen-defaults from npm and Pi will load the resources declared by the package manifest.
$ pi install npm:@aaronkyriesenbach/pi-frozen-defaults- Package
@aaronkyriesenbach/pi-frozen-defaults- Version
0.4.1- Published
- Aug 2, 2026
- Downloads
- 583/mo · 36/wk
- Author
- aaronkyriesenbach
- License
- MIT
- Types
- extension
- Size
- 9.6 KB
- Dependencies
- 0 dependencies · 1 peer
Pi manifest JSON
{
"extensions": [
"./extensions/index.ts"
]
}Security note
Pi packages can execute code and influence agent behavior. Review the source before installing third-party packages.
README
pi-frozen-defaults
A pi extension package that makes defaultModel,
defaultProvider, and defaultThinkingLevel behave as static configuration.
Why
By default, pi writes defaultModel/defaultProvider/defaultThinkingLevel
to your global settings.json every time you switch models or thinking
levels (/model, Ctrl+P, /thinking), and reads them back as the starting
point for future sessions. That means switching models in one project quietly
changes the default for every other project.
This package freezes that persistence. With it installed:
- Switching your model or thinking level during a session only affects that
session — it never gets written back to
settings.json. defaultModel,defaultProvider, anddefaultThinkingLevelonly change when you editsettings.jsonyourself.- Everything else is unaffected: startup model resolution still reads
defaultModel/defaultProvider/defaultThinkingLevelnormally, and--model/--thinkingCLI flags work exactly as before.
See docs/adr/0001-freeze-defaults-via-prototype-patch.md
for how and why this works.
Install
pi install npm:@aaronkyriesenbach/pi-frozen-defaults
Or add it to .pi/settings.json / ~/.pi/agent/settings.json:
{
"packages": ["npm:@aaronkyriesenbach/pi-frozen-defaults"]
}
Compatibility
This works by patching four private SettingsManager methods
(setDefaultModel, setDefaultProvider, setDefaultModelAndProvider,
setDefaultThinkingLevel) into no-ops at load time. It checks that all four
still exist before patching and throws a loud error if pi's internals have
changed in a way it can no longer safely handle — see the ADR linked above
for why that's an acceptable failure mode for this package.
Development
bun install
bun run typecheck
bun run lint
bun run format:check
bun run test:coverage