@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.

Packages

Package details

extension

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, and defaultThinkingLevel only change when you edit settings.json yourself.
  • Everything else is unaffected: startup model resolution still reads defaultModel/defaultProvider/defaultThinkingLevel normally, and --model/--thinking CLI 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