Pi hit 1.0 after nearly a year of development by the Gatsby team. It's trending at #8 on GitHub with 100K+ stars, positioned as a self-extensible coding agent with a unified multi-provider LLM API. The interesting part is not the coding agent itself. It's the runtime layer underneath: how Pi normalizes tool-calling across OpenAI, Anthropic, and Google, manages state across multi-step workflows, and explicitly punts on permission boundaries.
This is a case study in agent runtime design. Pi exposes the plumbing between reasoning (LLM calls) and execution (tool invocation), and it forces you to make a choice: convenience or isolation.
The Unified LLM API Problem
Every major LLM provider has a different tool-calling schema. OpenAI uses tools with function objects. Anthropic uses tools with input_schema. Google uses function_declarations. Pi's @earendil-works/pi-ai package abstracts this into a single interface.
Here's what that looks like:






