Pi runs every command without asking. This makes it ask.
A set of extensions on top of Pi, in one install: they ask before a command runs, and they ask you when the model would otherwise guess.
pi install npm:@adeildo/pi-harness
A session: the start card, what you asked, what the model ran, and what it cost.
Every command says who let it run. A small model reads it first. When it is sure the command is fine it runs and says how sure it was; when it is not, the command comes to you with the reason it is asking.
One dialog answers both. A permission ask and a question from the model look the same and take the same keys: yes, always yes or no, with a note you can leave on any answer. Saying no to npm install with "use pnpm instead" reaches the model.
The line you type on never moves. The time, the cost and how fast the model writes change around it, every answer can be undone, and Alt+S shows what each piece is set to.
| Piece | What it does |
|---|---|
| Permission | Asks before a command runs. A model answers the easy ones for you, with the reason on the command, and the ones it is not sure about come to you |
| Questions | The model asks instead of guessing, with options, a preview of what each one leads to, and a note on any of them |
| Tasks | Keeps what the session is doing, what it did and with what result, what waits on you, and what was decided. The judge reads it as your intent |
| Compact | Hides old tool output once the context passes 150k tokens, which cut a week of real sessions' cost by a third. pi's compaction summary comes from the tasks |
| Peers | Agents in the same folder see each other's tasks and what they ran, talk in a room, hear what you tell everyone, and split what you ask anyone |
| Skill calls | Call the skills you already have from anywhere in a message, several at once. The model reads each in full, and the chat shows a chip |
| Look | The start screen, the editor with the branch and the model on its borders, and a box around each command with its output and how long it took |
| Providers | Bills Anthropic requests to the Claude plan you already pay for, keeps several accounts with a switch to the next one when a limit hits, and keeps the prompt cache warm while you are likely to come back |
Both dialogs open in the same frame and take the same keys, and a note on any answer reaches the model.
The permission ask and a question from the model: the two dialogs that need you.
@adeildo/pi-harness brings every piece, and pi config turns any of them off. Each piece is also its own package: pi install npm:@adeildo/pi-look brings the screen and nothing else.
There is no fork. Everything installs on top of Pi, and pi remove puts Pi back the way it was.
| You want | Read |
|---|---|
| Use a piece | The page of the piece, linked in the table above |
| Look up a setting or a key | The piece's own docs/reference.md, where it has one |
| Know what is planned | ROADMAP.md |
| Know what changed | CHANGELOG.md |
| Build a piece, or send a change | CONTRIBUTING.md |
The pieces borrow from other people's work, and each page names where. In one line: pi-open-tui and oh-my-pi for the screen, rpiv-ask-user-question for the questions, pi-claude-max for the Claude plan billing, and pi-multiprovider for pooling accounts of one provider.
Brought to you by adeildo.dev