mrkeyoor.com_
Fri 25 Sept 17:45 UTC
Dev Toolsevaluationupdated 27 Aug 2026

pi review

Pi is a terminal coding agent and a set of TypeScript packages for building agent loops, model integrations, and terminal interfaces. It gives developers a small default toolset and expects them to shape the workflow through extensions, skills, prompts, themes, or embedded APIs.

+1,870stars / 7d
Verdict

Our Pi run installed 352 packages and built in 31 seconds, but its 322-second test step failed with 1 of 87 Vitest tests failing in the SQLite session backend. Pi is a strong choice for developers who want a moldable, multi-provider terminal harness and will supply their own sandbox and workflow rules. Choose a more opinionated agent if permissions, planning, and team-wide defaults should arrive already settled.

We ran it

Lab card: what happened when we ran piScreenshot of pi (github.com/earendil-works/pi)
Install✓ · 54s352 packages · 422 MB
Build✓ · 31s
Tests✗ · 322s5 passed · 0 failed of 5 (node:test)
Known vulns00 critical · 0 high · 0 moderate · 0 low (npm audit)
Repo1394 files~272,558 lines of source · 18.1 MB · 10 CI workflows

Answers from our run

Does pi build from source?

Dependencies installed in 54 seconds (352 packages), and the build succeeded in 31 seconds. We cloned commit a1f955e into a clean Debian container with 3 CPUs and no project-specific setup.

Do pi's tests pass?

Yes: 5 of 5 passed when we ran the project's own test command (node:test). Some failures need services or credentials a bare container does not have.

Does pi have known vulnerabilities in its dependencies?

npm audit found none in the dependency tree at the time of our run.

Who should not use pi?

Users who expect safe execution by default: the README says Pi has no built-in filesystem, process, network, or credential permission system.

What are the alternatives to pi?

OpenAI Codex, Claude Code, OpenCode. Our Pi run installed 352 packages and built in 31 seconds, but its 322-second test step failed with 1 of 87 Vitest tests failing in the SQLite session backend.

Setup4/554-second install and easy CLI; provider auth is still required
Docs5/5Modes, providers, extensions, sessions, and isolation are explained
Community5/597,937 stars with current releases and daily issue activity
Maturity4/5Supply-chain care is strong; one SQLite test failed in our run

Discussed on

  1. hnPi coding agent: config folder is out of place on Linux56 points

Who it’s for

Terminal-first developers who want to switch among many model providers without changing agent shells.
Tool builders who need an embeddable agent loop, unified model API, or terminal UI package.
Experienced users willing to assemble their own extensions instead of accepting a fixed planning and subagent workflow.
Teams prepared to sandbox a coding agent and review every capability added by extensions.

Who it’s NOT for

Users who expect safe execution by default: the README says Pi has no built-in filesystem, process, network, or credential permission system.
Developers wanting plan mode or subagents out of the box: Pi deliberately leaves both to third-party packages or custom extensions.
Teams that cannot tolerate provider-specific regressions: current reports cover Google Vertex proxy failure, Bedrock image handling, and Gemini tool signatures.
Workflows that install arbitrary project extensions without review: trusting a project allows its local settings, packages, and extensions to execute.
Anyone needing every release test to pass in a plain container: our run ended with one failed Vitest case in the SQLite session backend.

Setup reality

Our sandbox installed 352 npm packages in 54 seconds and used 422 MB. The build succeeded in 31 seconds. Tests exited 1 after 322 seconds: a SQLite backend Vitest run reported 86 passed and 1 failed, while the separate node:test result was 5 passed and 0 failed.

Running Pi needs Node.js plus a supported provider login or API key. The default agent receives read, write, edit, and shell tools. Local llama.cpp is supported, while cloud providers each bring their own account and model terms.

Pi inherits the launching user's permissions unless you add isolation. The docs describe Docker, OpenShell, or a Gondolin micro-VM extension, each with different treatment of project files and credentials. Npm audit found 0 known vulnerabilities in our installed tree.

Four built-in tools leave the workflow open to extension

Pi starts a model with read, write, edit, and bash. It can run interactively, print or emit JSON, expose an RPC process, or sit inside another application through its SDK. Sessions persist as branching JSONL trees, and long conversations can be compacted while the original history remains available. The terminal shows model, tokens, cache use, cost, and context. This is enough for real repository work without deciding how every team should plan or delegate.

The omissions are deliberate. Pi does not ship plan mode or subagents as fixed product features. TypeScript extensions can add tools, commands, UI, provider hooks, and custom behavior. Skills, prompt templates, themes, and packages cover lighter changes. That freedom is Pi's appeal, and also its main adoption cost: two developers can both say they use Pi while running meaningfully different agents with different safety and review behavior.

Provider choice is wide, but compatibility work remains visible

Pi supports subscription login for Anthropic, OpenAI, and GitHub Copilot, plus API-key access to more than 20 named services. It can also connect to llama.cpp and lets users describe compatible custom models. Model and thinking selectors work inside the terminal, while provider catalogs refresh separately. Developers comparing price, context, or reasoning behavior can keep one interface instead of learning another agent for each account.

A shared interface cannot erase provider differences. Open issue 8610 reports that v0.84.3 fails immediately when Google Vertex runs through HTTP proxy variables. Issue 8643 describes image tool results rejected by OpenAI models on Bedrock. Issue 6996 reports missing thought signatures on Gemini 3.x tool calls. These are specific integrations, not a blanket failure. They show why teams should keep a small provider acceptance suite before changing the default model.

What happened when we ran it

Our sandbox installed 352 npm packages in 54 seconds, occupying 422 MB. The repository at commit a1f955e contained 1,394 files, roughly 272,558 source lines, and an 18.1 MB checkout. Its build succeeded in 31 seconds. The monorepo had 10 CI workflow files and no Dockerfile or top-level tests directory. Npm audit reported 0 known vulnerabilities across the installed dependency tree.

The complete test step exited 1 after 322 seconds. A node:test portion reported 5 passed and 0 failed. The failing tail came from the @earendil-works/pi-session-backend-sqlite-node workspace: Vitest showed 10 test files passed and 1 failed, with 86 tests passed and 1 failed out of 87. The supplied log does not identify the assertion or cause, so the defensible finding ends there. Pi built cleanly, but commit a1f955e did not pass every configured test in our fresh container.

Isolation is an operator choice, not a default permission prompt

The README is unusually direct: Pi has no built-in permission system restricting files, processes, networking, or credentials. It runs with the rights of the user who launched it. That is acceptable on a disposable development machine only if the user accepts the model invoking shell commands and editing reachable files. A production team should make the boundary part of installation, rather than relying on every developer to remember a special command.

The docs give 3 isolation patterns. Plain Docker places the whole process and provider keys in a container, with a mounted project directory still writing through to the host. OpenShell can enforce filesystem, network, credential, and inference policy through a gateway. Gondolin keeps Pi and provider auth on the host but routes built-in tools into a Linux micro-VM. Extensions still run wherever the Pi process runs, so an added tool can bypass a tool-routing boundary unless it delegates too.

Project trust can execute local packages and extensions

Interactive startup asks before loading project-local settings and resources from an untrusted folder. Once trusted, Pi can load .pi settings, install missing project packages, and execute project extensions. Context files load before that decision, while local executable extensions wait. The distinction reduces surprise, but trust remains a code-execution decision. Inspect the project package list and extensions just as you would inspect a build script from a new repository.

Pi's own dependency policy is stricter than the average npm CLI. Direct external dependencies are pinned, new releases have a 2-day minimum age, CI uses npm ci --ignore-scripts, and the published coding-agent package carries a shrinkwrap file. Release checks create isolated npm and Bun installations. Those controls do not audit every third-party Pi package, but they are useful evidence that maintainers understand the supply-chain risk of an extensible agent.

Version 0.84.3 is active while extension regressions are being reported

GitHub showed 97,937 stars and 139 combined open issues and pull requests on August 27, 2026. The last push was August 26, and v0.84.3 had shipped 2 days earlier. Its release added native PowerShell execution, safer managed updates, thinking controls, and many provider fixes. Current issue 8620 also reports that global extensions importing Pi packages fail under that bundled CLI release.

Pi is worth trying when customization is the requirement, not a hobby attached to it. The 54-second install, moderate 422 MB footprint, provider range, and detailed extension API make experimentation cheap. The failed SQLite test, current adapter reports, and explicit lack of built-in permissions mean a team rollout needs pinned versions, provider checks, reviewed extensions, and mandatory isolation. Without those policies, Pi's flexibility turns into each developer operating a different security model.

Alternatives

ProjectWhat it isPick it when
OpenAI Codex gh↗A coding agent CLI centered on OpenAI models, sandboxing, approvals, and repository work.pick this instead when built-in execution boundaries and the OpenAI workflow matter more than provider choice.
Claude Code gh↗Anthropic's terminal coding agent with its own permissions, tools, hooks, and plugin system.pick this instead when Claude is the fixed provider and you want its maintained workflow rather than assembling a harness.
OpenCode gh↗A provider-flexible coding agent with terminal and desktop interfaces.pick this instead when you want multi-provider choice with more product decisions made for you.

What people are saying

  1. [theverge] Raspberry Pi shares its official tutorial for making a cyberdeck
  2. [github-trending] davebcn87/pi-autoresearch
  3. [velocity-scout] SaladDay/pi-from-scratch
  4. [hackernews] How Compaction Works in Pi
  5. [github-trending] earendil-works/pi
  6. [hackernews] Sonic Pi v5

Sources

  1. Pi repository
  2. Pi coding agent documentation
  3. Pi containerization guide
  4. Pi v0.84.3 release
  5. Google Vertex proxy regression
  6. Bundled extension loading report
  7. Stalled provider stream report

More dev tools reviews

Claude-Code-Usage-Monitor · pyxel · dust · kubernetes-the-hard-way · wifit3 · badnotes · the whole board →