pi-updater

Codex-style auto-updater for pi. Checks pi and extension packages on startup and prompts to install updates.

Packages

Package details

extension

Install pi-updater from npm and Pi will load the resources declared by the package manifest.

$ pi install npm:pi-updater
Package
pi-updater
Version
0.4.1
Published
Jul 5, 2026
Downloads
645/mo · 89/wk
Author
tonze
License
MIT
Types
extension
Size
28.7 KB
Dependencies
0 dependencies · 1 peer
Pi manifest JSON
{
  "extensions": [
    "./index.ts"
  ],
  "image": "https://github.com/user-attachments/assets/b34ca10f-1baf-4f4c-9f14-414a5b814112"
}

Security note

Pi packages can execute code and influence agent behavior. Review the source before installing third-party packages.

README

pi-updater

pi-updater is a pi extension that turns pi's update notices into an interactive flow: it prompts you when a new pi version or extension package updates are available, installs them without leaving your session, and puts you right back where you were.

Why does this exist?

pi already checks for updates on startup — for itself and for installed extension packages — but all it does is print a notice telling you which command to run. The built-in flow is: see the notice, finish what you're doing, quit pi, run pi update, start pi again, run pi -c to get your session back. That's five steps for something that should be one keypress.

pi-updater collapses this into a prompt. Choose an update option and it installs the new versions and puts you back in your current session. You can also skip once, or skip a specific pi version so it stops asking until the next release.

The actual installation is delegated to pi's native pi update command. pi knows how it was installed (npm, pnpm, yarn, bun, or a standalone binary) and what extension packages you have configured; pi-updater deliberately does not reimplement any of that. This extension owns the interactive experience, nothing more.

Installation

pi install npm:pi-updater

Requires pi 0.74.0 or later (the @earendil-works package scope). On older installs the extension fails to load harmlessly; if you need it there, pin pi-updater@0.3.3.

Usage

There is nothing to configure. On startup, pi-updater checks both pi itself and your installed extension packages (the same check behind pi's "Package Updates Available" banner).

If only pi is outdated:

  • Update now — run pi update --self, then restart pi on the current session
  • Skip — ask again next session
  • Ignore <version> — don't ask again until a newer version appears

If both pi and extensions are outdated, a combined prompt appears:

  • Update all — run pi update --self --extensions, then restart
  • Update pi only — run pi update --self, then restart
  • Update extensions only — run pi update --extensions, then reload
  • Skip — ask again next session

Version dismissal ("Ignore") is only offered in the pi-only prompt; a dismissed pi version degrades the combined prompt to extensions-only.

If only extensions are outdated, you're offered pi update --extensions.

Choosing an update option is the only interaction: anything involving pi core restarts straight back into your current session, and extension-only updates are hot-reloaded in place (from the startup prompt, where extensions cannot trigger a reload, pi restarts into the session instead — same result). Either way you keep working where you left off.

You can also check manually at any time with /update.

Extension updates have no per-version skip; choosing Skip simply asks again next session. Pinned (@version / #ref) and local packages are excluded, matching pi's own update check.

In non-interactive modes, or if the restart fails, pi-updater falls back to a message telling you how to restart yourself. Ephemeral --no-session runs stay ephemeral across the restart.

How version checks work

Startup is never blocked. Both checks run in the background — pi's version against pi's update service, extension packages against their npm/git sources — and one consolidated prompt appears when they resolve, so you are never offered a partial update. If the version fetch fails, a previously cached result is used as fallback. After an update restarts pi, the startup check is skipped once so you're not immediately re-prompted for anything you just declined.

/update always fetches fresh. Cache and dismissed-version state live in pi's agent directory and respect PI_CODING_AGENT_DIR.

Disabling checks

pi's standard environment variables are respected:

export PI_SKIP_VERSION_CHECK=1   # disable automatic checks
export PI_OFFLINE=1              # offline mode, also disables checks

While pi-updater is active it suppresses pi's built-in update notice so you don't get prompted twice for the same release. pi's "Package Updates Available" banner cannot be suppressed the same way, so it may still appear alongside pi-updater's extension prompt.

Caveats

Because installation is delegated to pi, pi's limitations apply: standalone binary installs get download instructions instead of an automatic install, and Windows self-update covers npm and pnpm installs only. In those cases you'll see pi's own message explaining what to do.

Updating pi-updater itself

pi update npm:pi-updater

License

MIT