Skip to main content

Pi

Pi resolves models against your own credentials, so Saggar asks it what it can reach rather than shipping a list. Its integration is a Saggar-owned extension file that Pi discovers on its own.

Commandpi
Installcurl -fsSL https://pi.dev/install.sh | sh
Hook configuration~/.pi/agent/extensions/saggar-presence.ts
Skill location~/.pi/agent/skills/saggar-cli/SKILL.md
Resumepi --session <id>, or pi --continue without an id

Launching

The default row launches pi with whatever model Pi is configured to use. The provider card runs pi --list-models and lets you pick which of the reported models get their own row. A pick is remembered per provider, so the same model picked under Pi and under OpenCode stays two separate rows. Pi takes no reasoning-effort flag.

Hooks

Installing hooks writes one TypeScript extension into Pi's extensions directory. Pi loads it automatically, so no configuration file of yours is edited, and removal deletes only that file. With it installed Saggar:

  • captures the native session id;
  • names the session from its first prompt;
  • follows turns and clean exits from Pi's lifecycle;
  • shows the active model in the terminal's chat info;
  • restores each session to its exact conversation.

Saggar replaces an older copy of its extension each time it starts. If the file on disk still doesn't match this build's copy, for example because it was edited, the provider card asks you to install again. Nothing is version gated.

Prompts and automatic approval

Pi doesn't expose a blocking permission event, so a waiting prompt is noticed from the screen and turns the session Needs you. Saggar has no dialog vocabulary for Pi, so automatic approval never types into a Pi session.

Resume

With a recorded id, restore runs pi --session <id>. Without one it runs pi --continue.

Further reading