Pi
v0.99.2 open-sourceThe section your link pointed to isn't on Pi's page any more, so we've brought you to the top.
AI agent toolkit: unified LLMLLMA large language model, a neural network trained on large amounts of text to recognize patterns and generate language. Applications use it for tasks such as answering, summarizing and writing code. API, agent loop, TUITUIA text-based user interface that runs inside a terminal, using characters and ANSI escape codes to render menus, panes, and widgets without a graphical desktop, letting cyber tools ship rich interactivity with no GUI dependency., coding agent CLI
pi.registerVirtualModel('my-router', (req) => req.type === 'code' ? 'claude-sonnet' : 'gpt-4o');
META_API_KEY=your_key_here pi -c 'analyze this code'
pi /login meta
/bug encountered an unexpected error in tool execution
compaction:
modelOverrides:
anthropic/claude-3-opus:
reserveTokens: 5000
keepRecentTokens: 2000
const result = await ctx.modelRegistry.streamSimple({
provider: 'anthropic',
model: 'claude-3-opus-20240229',
messages: [
{ role: 'user', content: 'Hello' }
]
});
const { detectSupportedImageMimeTypeFromFile } = require('pi-coding-agent');
const mime = await detectSupportedImageMimeTypeFromFile('/path/to/image.png');
console.log(mime); // e.g., 'image/png'
const response = await rpc.call('clear_queue');
console.log(response); // Contains retrieved and cleared messages
"defaultTools": [
"browser",
"search",
"text_editor",
"file_read",
"file_write",
"powershell"
]
const refreshedRuntime = await ModelRuntime.create({
allowModelNetwork: true,
modelRefreshTimeoutMs: 15_000
});
await modelRuntime.refresh({ allowNetwork: true, force: true, signal });
pi --use-theme light
pi --use-theme light/dark
"searchMatchBg": "#2d2d30",
"searchMatchText": ""
{"defaultTools": ["bash", "edit"]}
pi --use-theme dark/compact
pi --use-theme dracula interactive
PI_EXPERIMENTAL=1 pi interactive
{
"defaultTools": ["read", "bash"]
}
pi --use-theme dracula
PI_EXPERIMENTAL=1 pi
pi auth check
pi auth check
try {
await modelRuntime.setRuntimeApiKey("anthropic", process.env.MY_KEY);
} catch (err) {
if (err instanceof CredentialSynchronizationError) {
console.error(`Sync failed for ${err.providerId} during ${err.operation}:`, err.cause);
}
}
const signal = AbortSignal.timeout(15_000);
const result = await modelRuntime.refresh({
providers: ["anthropic"],
signal,
});
if (result.aborted) console.warn("Catalog refresh timed out; using cached models");
for (const [providerId, error] of result.errors) {
console.warn(`Could not refresh ${providerId}:`, error);
}
thinkingFormat: "baseten"
chatTemplateArgs:
enable_thinking:
$var: "thinking.enabled"
omitWhenOff: true
thinking_budget:
$var: "thinking.effort"
supportsFinishReason: true
pi.registerMarkdownTransformer((markdown, { messageType, isStreaming }) => {
if (isStreaming || messageType === "assistant-thinking") return markdown;
return markdown.replaceAll("-->", "→");
});
pi --tui-mode fullscreen
{
"tui.editor.historyPrevious": "ctrl+p",
"tui.editor.historyNext": "ctrl+n"
}
{
"tui.altScreen.pageUp": []
}
pi --tui-mode fullscreen
pi --tui-mode fullscreen
pi --tui-mode fullscreen
# Place in the target directory — replaces AGENTS.md or CLAUDE.md in that directory only
echo '# Project-specific override context' > ./src/api/AGENTS.override.md
# In model config or extension provider options
{
"samplingParams": { "temperature": 0.2, "top_p": 0.9 },
"thinking_token_budget": 512
}
pi --tui-mode fullscreen
# Create AGENTS.override.md in the target directory to replace AGENTS.md/CLAUDE.md there
cat > src/payments/AGENTS.override.md << 'EOF'
# Payments module context
Do not modify stripe integration files without explicit approval.
EOF
{
"id": "vllm/qwen3-235b",
"samplingParams": {
"temperature": 0.6,
"top_p": 0.95
},
"thinking_token_budget": 8192
}
const models = ctx.scopedModels; // e.g. [{ model: 'anthropic/claude-3-5-sonnet', thinkingLevel: 'high' }, ...]
pi --alt
pi --alt
pi auth print-bearer-token
pi auth print-api-key
pi auth print-bearer-token | xargs -I{} curl -H "Authorization: Bearer {}" https://api.example.com/endpoint
export API_KEY=$(pi auth print-api-key)
pi --thinking max
pi --thinking max
pi update --models
pi update --models
client.getAvailableThinkingLevels()
client.getAvailableThinkingLevels()
/login
echo "Session: $PI_SESSION_ID Provider: $PI_PROVIDER Model: $PI_MODEL Reasoning: $PI_REASONING_LEVEL"
/login
echo "Session: $PI_SESSION_ID Provider: $PI_PROVIDER Model: $PI_MODEL Reasoning: $PI_REASONING_LEVEL"
export ANTHROPIC_AUTH_TOKEN=<your-token>
export ANTHROPIC_AUTH_TOKEN=<your-token>
ANTHROPIC_AUTH_TOKEN=<your-bearer-token> pi
/login
echo "Session: $PI_SESSION_ID Provider: $PI_PROVIDER Model: $PI_MODEL Reasoning: $PI_REASONING_LEVEL"
ANTHROPIC_AUTH_TOKEN=<your-bearer-token> pi
/login
echo "Session: $PI_SESSION_ID Provider: $PI_PROVIDER Model: $PI_MODEL Reasoning: $PI_REASONING_LEVEL"
printf '%s/%s reasoning=%s session=%s\n' "$PI_PROVIDER" "$PI_MODEL" "$PI_REASONING_LEVEL" "$PI_SESSION_ID"
if [ -n "$PI_SESSION_FILE" ]; then
tail -n 1 "$PI_SESSION_FILE"
fi
const bashTool = createBashTool(cwd, {
exposeSessionEnvironment: false,
spawnHook: (ctx) => ctx,
});
printf '%s/%s reasoning=%s session=%s\n' "$PI_PROVIDER" "$PI_MODEL" "$PI_REASONING_LEVEL" "$PI_SESSION_ID"
if [ -n "$PI_SESSION_FILE" ]; then
tail -n 1 "$PI_SESSION_FILE"
fi
const bashTool = createBashTool(cwd, {
exposeSessionEnvironment: false,
spawnHook: (ctx) => ctx,
});
export ANTHROPIC_AUTH_TOKEN=<your-bearer-token>
exposeSessionEnvironment: false,
exposeSessionEnvironment: false,
echo "Session: $PI_SESSION_ID | Provider: $PI_PROVIDER | Model: $PI_MODEL | Reasoning: $PI_REASONING_LEVEL"
echo "Session: $PI_SESSION_ID | Provider: $PI_PROVIDER | Model: $PI_MODEL | Reasoning: $PI_REASONING_LEVEL"
/login
echo "Session: $PI_SESSION_ID | Provider: $PI_PROVIDER | Model: $PI_MODEL | Reasoning: $PI_REASONING_LEVEL"
/login openrouter
/login openrouter
"qwen-token-plan": { "type": "api_key", "key": "sk-sp-..." }
"qwen-token-plan-cn": { "type": "api_key", "key": "sk-sp-..." }
pi /llama
/login
/llama <model-search-query>
pi update --models
pi --thinking max 'Audit this codebase for insecure deserialization patterns and propose fixes'
// In settings.json
{ "externalEditor": "vim" }
// In settings.json
{ "outputPad": 4 }
// In your extension handler:
extension.on('session_before_compact', ({ reason, willRetry }) => {
if (reason === 'overflow' && willRetry) {
// overflow retry: use a lighter summary to reduce token cost
} else if (reason === 'manual') {
// user-initiated /compact: run full archival summary
}
});
pi update --all
# In Pi global settings (e.g. ~/.config/pi/settings.json)
{
"httpProxy": "http://proxy.corp.example.com:8080"
}
# In auth.json
{
"apiKeys": [
{
"provider": "amazon-bedrock",
"env": {
"AWS_ACCESS_KEY_ID": "AKIA...",
"AWS_SECRET_ACCESS_KEY": "secret",
"AWS_REGION": "us-east-1"
}
}
]
}
PI_EXPERIMENTAL=1 pi
pi run my-template.md 'custom-value' # passes arg 1; omit it to get the ${1:-7} default
pi --approve
pi --no-approve
// Inside an extension command handler
if (ctx.mode === 'json') {
// emit structured output only
} else {
// render rich TUI output
}
// Inside an extension command handler
const promptOptions = ctx.getSystemPromptOptions();
console.log(promptOptions);
pi --name incident-triage-2025
pi -n vuln-scan-run --print 'Scan the repo for hardcoded secrets'
pi --exclude-tools bash
pi --session-id ci-build-session-42 'Check for new lint errors in the diff'
# In your Pi settings file:
retry:
provider:
maxRetries: 2
# In your custom provider model config:
compat:
forceAdaptiveThinking: true
pi update
pi /login
pi update --self
PI_CODING_AGENT_SESSION_DIR=/var/pi/sessions pi
pi update
retry.provider.timeoutMs = 120000
retry.provider.maxRetries = 5
retry.provider.maxRetryDelayMs = 10000
pi --no-builtin-tools
ctx.ui.addAutocompleteProvider(myGithubIssueProvider);
return { result: myOutput, terminate: true };
/clone
PI_OAUTH_CALLBACK_HOST=0.0.0.0 pi auth
---
name: summarize
argument-hint: <file> [max-words]
description: Summarize a file
---
Summarize the contents of {{file}} in at most {{max-words}} words.
pi --no-context-files "Explain what this repo does"
import { loadProjectContextFiles } from 'pi';
const files = await loadProjectContextFiles(process.cwd());
console.log('Context files found:', files);
renderShell: "self"
pi --append-system-prompt "You are a security analyst. Follow OWASP guidelines." --append-system-prompt "Scope: only assess endpoints under /api/v2."
# In models.json, add an openRouterRouting block to your model entry:
{
"id": "my-model",
"openRouterRouting": {
"fallbacks": ["openai/gpt-4o", "anthropic/claude-3-5-sonnet"],
"dataCollection": false,
"zdr": true,
"maxPrice": { "prompt": 0.01, "completion": 0.03 },
"order": ["Fireworks", "Together"]
}
}
if [ "$PI_CODING_AGENT" = "true" ]; then
echo "Running inside Pi coding agent — skipping interactive prompts"
fi
if [ "$PI_CODING_AGENT" = "true" ]; then
echo "Running inside Pi coding agent — skipping interactive prompts"
fi
# Inside the /tree view, press Shift+T to show or hide timestamps on each entry.
import {
type CreateAgentSessionRuntimeFactory,
createAgentSessionFromServices,
createAgentSessionRuntime,
createAgentSessionServices,
getAgentDir,
SessionManager,
} from "@mariozechner/pi-coding-agent";
const createRuntime: CreateAgentSessionRuntimeFactory = async ({ cwd, sessionManager, sessionStartEvent }) => {
const services = await createAgentSessionServices({ cwd });
return {
...(await createAgentSessionFromServices({ services, sessionManager, sessionStartEvent })),
services,
diagnostics: services.diagnostics,
};
};
const runtime = await createAgentSessionRuntime(createRuntime, {
cwd: process.cwd(),
agentDir: getAgentDir(),
sessionManager: SessionManager.create(process.cwd()),
});
await runtime.newSession();
await runtime.fork("entry-id");
export default function myExtension(ctx) {
ctx.ui.setHiddenThinkingLabel("[Reasoning hidden — click to expand]");
}
// Inside your extension handler
async function myHandler(ctx) {
const response = await fetch('https://api.example.com/data', {
signal: ctx.signal
});
return response.json();
}
# In your project's settings.json
{
"sessionDir": "/path/to/project/.pi-sessions"
}
PI_TUI_WRITE_LOG=/var/log/pi pi
/export ~/sessions/pentest-2025-07-14.jsonl
/import ~/sessions/pentest-2025-07-14.jsonl
pi update
pi uninstall <package>
pi.registerTool({
name: "lookup",
description: "Look up a value",
promptSnippet: "lookup: fetches live data by key",
promptGuidelines: "Use lookup when the user asks for real-time data.",
execute: async (args) => { /* … */ }
});
pi.unregisterProvider("my-custom-provider")
pi --offline
# In settings.json
{
"transport": "sse"
}
pi --model sonnet:high
pi --model openai/gpt-4o
ctx.reload();
pi -ne -ns -np
const tools = pi.getAllTools();
for (const tool of tools) {
console.log(tool.name, tool.description, tool.parameters);
}
pi <package> --help
# In models.json
{
"providers": [...],
"modelOverrides": {
"claude-opus-4-5": {
"maxTokens": 8192
}
}
}
# In auth.json:
{
"openai": "!op read op://vault/openai/credential",
"anthropic": "$ANTHROPIC_API_KEY"
}
# In your keybindings config (see docs/keybindings.md)
{ "key": "ctrl+r", "action": "resume" }
pi install ./my-extension
pkg install nodejs termux-api git && npm install -g @mariozechner/pi-coding-agent && mkdir -p ~/.pi/agent && echo 'You are running on Android in Termux.' > ~/.pi/agent/AGENTS.md && pi
const prompt = ctx.getSystemPrompt();
/copy
HF_TOKEN=hf_xxxxxxxxxxxx pi
PI_CACHE_RETENTION=long pi
/files
/reload
pi --verbose
# In a Pi prompt, type:
Summarize this file: !{cat README.md}
"apiKey": "!security find-generic-password -ws 'anthropic'"
Ctrl+P # toggle path display
Ctrl+D # delete selected session (with inline confirmation)
pi.setLabel(entryId, "high-priority")
const usage = ctx.getContextUsage();
if (usage.used / usage.total > 0.8) {
await ctx.compact();
}
# In your Pi config:
"quietStartup": true
pi.registerCommand({
name: "scan",
getArgumentCompletions: async (args) => ["--target", "--profile", "--output"],
execute: async (args) => { /* ... */ }
});
OPENAI_API_KEY=<your-key> pi --provider openai-codex 'Review this file for hardcoded credentials' src/config.ts
# In the session picker, type: re:CVE-2024-\d+ to filter sessions by regex, or Ctrl+R to toggle sort mode
AI_GATEWAY_API_KEY=<your-key> pi --provider vercel-ai-gateway
/name threat-hunting-2024-q2
/scoped-models
/skill:brave-search what CVEs were published this week?
ctx.ui.setWorkingMessage("Fetching threat intel...");
/model openai/gpt-4
pi --no-tools
pi --no-extensions -e ./extensions/my-tool.ts
PI_SKIP_VERSION_CHECK=1 pi 'summarize the latest alerts'
{
"thinkingBudgets": {
"low": 1024,
"medium": 8192,
"high": 32768
}
}
const ac = new AbortController();
setTimeout(() => ac.abort(), 5000);
const confirmed = await ctx.ui.confirm("Proceed?", { signal: ac.signal });
import { truncateTail, DEFAULT_MAX_BYTES } from "pi/tools";
const raw = await runShellCommand(cmd);
return truncateTail(raw, { maxBytes: DEFAULT_MAX_BYTES });
/login openai-codex
pi --extension ./safety.ts -e ./todo.ts
{
"name": "my-extension-package",
"dependencies": { "zod": "^3.0.0" },
"pi": {
"extensions": ["./src/main.ts", "./src/tools.ts"]
}
}
ctx.ui.setTitle("My Custom Title")
pi --tools read,grep,find,ls
# Inside a hook, after user confirms:
# pi.setActiveTools(['read', 'grep', 'find', 'ls', 'bash'])
/quit
# In your slash command file:
echo 'Summarise the following: $ARGUMENTS' > ~/.pi/commands/summarise.txt
!!cat ~/.aws/credentials
{
"providers": {
"openai": {
"baseUrl": "https://my-internal-gateway.example.com/openai"
}
}
}
{
"images": {
"autoResize": true
}
}
import { discoverAuthStorage, discoverModels } from "@mariozechner/pi-coding-agent";
const authStorage = discoverAuthStorage(); // ~/.pi/agent/auth.json
const modelRegistry = discoverModels(authStorage); // + ~/.pi/agent/models.json
const model = modelRegistry.find("anthropic", "claude-sonnet-4-20250514");
const apiKey = await modelRegistry.getApiKey(model);
const available = await modelRegistry.getAvailable();
pi.registerCommand("branch-here", {
description: "Branch session from a specific entry",
async handler(ctx) {
await ctx.waitForIdle();
const entries = ctx.sessionManager.getBranch();
const target = entries[entries.length - 2]; // second-to-last entry
await ctx.branch(target.id);
}
});
pi --session-dir ./my-project-sessions -r
pi --session-dir /shared/sessions -c
mkdir -p .pi && echo 'You are a security-focused assistant. Always recommend least-privilege principles.' > .pi/SYSTEM.md
pi --system-prompt ~/prompts/pentest.md
~/.pi/agent/settings.json:
{ "apiKeys": { "anthropic": "sk-..." } }
PI_TIMING=1 pi
pi.on("session", (event) => {
if (event.reason === "before_branch") {
const allow = confirmBranch(); // your pre-check
if (!allow) return { cancel: true };
}
});
pi.on("session", async (event) => {
if (event.reason === "shutdown") {
await flushLogs();
}
});
const session = await SessionManager.continueRecent();
pi --skills 'recon*'
# While in the pi prompt, press Ctrl+G to open $EDITOR, write your message, save and quit to send it.
# Inside pi, run:
/login
# Then select: Antigravity
import { getAvailableModels, getApiKeyForModel, findModel, login, logout, getOAuthProviders } from '@mariozechner/pi-coding-agent';
const result = await pi.exec("npm test", { timeout: 30000 });
if (result.killed) console.error("Process timed out and was terminated");
/hotkeys
# See examples/custom-tools/ for a working starter
# Tool skeleton (TypeScript):
export default {
onSession({ reason, entries }) {
if (reason === "start") { /* initialise state */ }
},
async run(pi) {
const choice = await pi.ui.select("Pick an option", ["A", "B"]);
await pi.ui.notify(`You picked ${choice}`);
}
};
pi --list-models image
/show-images
pi --no-skills
pi --version
# In settings.json
{
"retry": {
"enabled": true,
"maxRetries": 5,
"baseDelayMs": 2000
}
}
export MISTRAL_API_KEY=<your-key>
pi <your-prompt>
echo '{"shellPath": "C:\\cygwin64\\bin\\bash.exe"}' > ~/.pi/agent/settings.json
/resume
{
"name": "my-provider",
"apiKey": "sk-...",
"authHeader": true,
"baseUrl": "https://my-provider.example.com/v1"
}
/copy
/compact focus on the authentication module decisions and discard unrelated tangents
/autocompact
{
"piConfig": {
"name": "mytool",
"configDir": ".mytool"
}
}
/debug
Summary
Pi is an open-source coding agent harnessagent harnessThe software around an AI agent that manages its tools, execution loop, state and limits. It determines how the model's proposed actions are run and checked. that developers run as an interactive CLI, or embed via its extensible packages, to work with LLMsLLMsA large language model, a neural network trained on large amounts of text to recognize patterns and generate language. Applications use it for tasks such as answering, summarizing and writing code. across providers like OpenAI, Anthropic, and Google through a single unified API. It targets developers and teams building or customizing their own coding agents rather than those wanting a packaged assistant, since it ships as a terminal UI plus separable runtime, telemetry, and AI-provider libraries that extensions can hook into. By default it runs with the permissions of the user who launched it, with no built-in sandboxingsandboxingRunning code inside a restricted environment that limits what it can access or change. The isolation reduces the impact of mistakes or untrusted code, depending on the sandbox's controls., though its documentation describes patterns for containerizing it when stronger isolation is needed. Chat and Slack automation are split into a companion project rather than bundled in. Development is active, with 261 contributors and a release roughly every ten days over the past year.
AI agent toolkit: unified LLM API, agent loop, TUI, coding agent CLI
How Pi helps
Which providers can I switch between without changing how I prompt or manage credentials?
routes requests through a single unified API across OpenAI, Anthropic, Google, and other providers, so switching providers is a configuration change rather than a rewrite of prompts or integration code
Can I let an agent touch a new project's files without trusting whatever settings or instructions it brought with it?
prompts before loading project-local settings, resources, instructions, and packages, and lets an extension remember or defer that trust decision before anything local loads
How do I stop an agent from prompting for approval in the middle of an unattended pipeline?
supports non-interactive approval or blocking of project-local resources by policy, so a scripted run either auto-approves everything or refuses it without waiting on a prompt
How do I keep provider credentials and proxy settings out of my shell environment?
supports provider-scoped API key and proxy overrides stored in its own auth configuration, so keys and endpoints reach the AI provider without being exported into the surrounding shell
How much of my token spend is coming from cache hits versus fresh requests?
shows a live cache hit rate in the interactive footer and accounts for cached-token usage and cost separately where a provider supports prompt caching
Can an extension change its behavior depending on whether it's driving the terminal UI, a script, or another automation surface?
exposes the current run mode to extension code so an extension can suppress interactive prompts or alter output when running under RPC, JSON, or print mode instead of the terminal UI
Languages
Features
130 capabilities across 7 areas
Built from Pi's releases, docs, README and our own runs. “Seen” marks the month we first spotted a release the vendor didn't date. Group names and tags are our labels.
What Pi offers you
- Command-line interface23
- Plugin API support8
- Plugin system5
- Scripting API5
- Client SDKs2
- gRPC API support2
- JavaScript scripting support1
- MCP server1
- ML-based detection1
- Scripting language support1
No capabilities match.
+ AI Model Access and Provider Support 15 capabilities Pi connects users to a wide range of AI model providers, handling authentication, model discovery, and provider-specific configurations. It abstracts differences between providers so users can switch models and services without changing their workflow. ▸
+ Dynamic model catalog management shipped Keeps model catalogs fresh through file-backed storage, per-provider overlays, and live background refresh. 25 releases · 2 other sources · first seen Jan 2026 ▸
Also counts toward: Plugin API support
release 25 total
-
Adds a Models Configuration reference generated from the
models.jsonschema, documenting every provider, model, model override, and compatibility field. v1.4.0 · Oct 2026 · source · release history -
Adds per-key OpenRouter model lists: with an OpenRouter key, Pi lists only the chat models that key may use, with the key's context size, max output, and prices, including regional endpoints configured as the base URL in
models.json; the list is saved and used offline. v1.2.0 · Oct 2026 · source · release history -
Adds
types=chat,image,classifierparameter for pi.dev model catalog requests to overlay supported model types during remote refreshes v0.99.0 · Sep 2026 · source · release history -
Adds experimental virtual models: extensions register them with pi.registerVirtualModel() to route each request to a different physical model and thinking level;
/sessionlists cost per physical model. v0.99.0 · Sep 2026 · source · release history -
Adds
types=chat,image,classifierto pi.dev model catalog requests so remote refreshes overlay every supported model type. v0.99.0 · Sep 2026 · source · release history -
Adds pi.registerVirtualModel() API and
/sessioncost reporting to route requests to different physical models v0.99.0 · Sep 2026 · source · release history
docs
- (18 models) Gemini 3.5 Flash Lite gemini-3.5-flash-lite Gemini 3.6 Flash gemini-3.6-flash (56 models) Gemini 3.5 Flash Lite gemini-3.5-flash-lite Gemini 3.6 Flash gemini-3.6-flash Laguna S 2.1 Free laguna-s-2.1-free (273 models) $0.098 $0.196 $0.0196 Google: Gemini 3.5 Flash Lite google/gemini-3.5-flash-lite Google:… docs update · Jul 2026 · source
example
-
Swap in a custom provider at runtime from a command handler and later cleanly remove it, restoring the original built-in models — all without issuing
/reload.$ pi.unregisterProvider("my-custom-provider")v0.55.2 · Feb 2026 · source
+ Default model configuration shipped Sets sensible default models per provider so users get up-to-date choices without manual configuration. 16 releases · 5 other sources · first seen Dec 2025 ▸
release 16 total
-
Pi adds GPT-6.1 Terra for OpenAI, Azure OpenAI Responses, and OpenAI Codex, with tool search, mid-conversation thinking-level changes, thinking
off, and a 500K context window on Codex. v1.5.0 · Nov 2026 · source · release history -
The default OpenAI model is changed from
gpt-5.5togpt-6.1-sol, including after ChatGPT sign-in when no model is selected. v1.5.0 · Nov 2026 · source · release history -
The default OpenAI Codex model is now
gpt-6.1-sol; existing workflows that relied on the previous default Codex model will now use GPT-6.1 Sol unless a model is explicitly specified. v0.99.1 · Sep 2026 · source · release history -
Changes the default OpenAI Codex model to
gpt-6.1-sol.︀︄︇︀︅︉︀︅︀︀︃︀︀︅︅︀︅︊︀︄︆︀︃︄ v0.99.1 · Sep 2026 · source · release history -
Adds a
/thinkingselector for choosing thinking levels interactively, with searchable default choices; Ctrl+S persists the selected model as the global default instead of only session-scoping it. v0.84.3 · Aug 2026 · source · release history - Changes the default xAI model to Grok 4.5 and updates xAI login to use a prefilled device-authorization link labeled Sign in with SuperGrok or X Premium. v0.80.9 · Jul 2026 · source · release history
docs
- Sep 29, 2026 Pi 0.99.1 GPT-6.1 Sol — Available on OpenAI, Azure OpenAI, and OpenAI Codex, and now the default OpenAI Codex model. See Select a model Added GPT-6.1 Sol ( gpt-6.1-sol ) to the OpenAI, Azure OpenAI Responses, and OpenAI Codex providers. docs update · Sep 2026 · source
- Set the model for the current session. The change is recorded in session history and restored when that session is resumed, but it does not change the configured defaultProvider defaultModel used by new sessions. Returns if authentication is not configured for the model's provider. See Get the current thinking level. docs update · Sep 2026 · source
-
for common options. To save startup model defaults interactively, use
/modeland press Ctrl+S on the desired model. To save the startup thinking level, use/thinkingand press Ctrl+S. docs update · Aug 2026 · source -
or Ctrl+L to choose a model for the current session. Press Ctrl+S in the model picker to save the highlighted model as the startup default. Use
/thinkingto choose a thinking level for the current session, or Ctrl+S in that picker to save the startup default thinking level. Use Shift+Tab to cycle thinking level. docs update · Aug 2026 · source
example
-
Capture a rendering diagnostic snapshot when lines appear misaligned or truncated in your terminal.
$ /debugv0.12.4 · Dec 2025 · source
+ Anthropic Claude model catalog shipped Gives users access to the latest Anthropic Claude models including versions with adaptive thinking. 11 releases · 6 other sources · first seen Dec 2025 ▸
release 11 total
-
Adds Claude Haiku 5.5 (
anthropic/claude-haiku-5-5) with adaptive thinking up toxhigh/maxeffort and prompt caching on Bedrock. v1.1.0 · Oct 2026 · source · release history -
Expanded
SessionEntryunion to includeContextEditEntry; TypeScript consumers with exhaustive entry switches must handlecontext_edit. v0.87.0 · Sep 2026 · source · release history -
Dynamic provider refresh context store access is replaced with the read-only
context.storedsnapshot and generation-checked context.publish() transaction; handwritten Provider.refreshModels() implementations must be migrated. v0.84.0 · Aug 2026 · source · release history - Adds Claude Opus 5 support through the GitHub Copilot provider, with adaptive thinking and a 1 million-token context window. v0.83.0 · Jul 2026 · source · release history
-
Adds Claude Opus 5 model support on Anthropic and Amazon Bedrock, including adaptive thinking (with
xhighlevel), inference profiles, and prompt caching. v0.82.1 · Jul 2026 · source · release history -
Adds native
xhighandmaxthinking levels for Claude Fable 5 across all generated provider catalogs. v0.80.7 · Jul 2026 · source · release history
docs
-
azure (187 models) Claude Haiku 4.5 (India)
in.anthropic.claude-haiku-4-5-20251001-v1:0 Claude Opus 5 (India)in.anthropic.claude-opus-5 Claude Sonnet 5 (India)in.anthropic.claude-sonnet-5 Claude Sonnet 5.5 (EU)eu.anthropic.claude-sonnet-5-5 Claude Sonnet 5.5 (US)us.anthropic.claude-sonnet-5-5 GLM-5.3 (Global)… docs update · Oct 2026 · source - Release notes Sep 22, 2026 Pi 0.87.1 New version of pi. Download from npm or view release on GitHub New Features Latest frontier models — Use Claude Opus 5.5, GPT-6 Sol, and GPT-6 Luna through supported providers, including GitHub Copilot. docs update · Sep 2026 · source
-
Model Catalog (174 models) Claude Opus 5.5 anthropic.claude-opus-5-5 Claude Opus 5.5 (AU)
au.anthropic.claude-opus-5-5 Claude Opus 5.5 (EU)eu.anthropic.claude-opus-5-5 Claude Opus 5.5 (Global)global.anthropic.claude-opus-5-5 Claude Opus 5.5 (JP)jp.anthropic.claude-opus-5-5 Claude Opus 5.5 (US)… docs update · Sep 2026 · source - News New Features Claude Opus 5 — Available on Anthropic and Amazon Bedrock with adaptive thinking (including xhigh ), inference profiles, and prompt caching. See Providers . docs update · Jul 2026 · source
- Jul 25, 2026 Pi 0.82.1 Claude Opus 5 — Available on Anthropic and Amazon Bedrock with adaptive thinking (including ), inference profiles, and prompt caching. docs update · Jul 2026 · source
example
-
Display all available keyboard shortcuts at any point during a session.
$ /hotkeysv0.24.0 · Dec 2025 · source
+ Extended reasoning level support shipped Exposes deep reasoning depth settings that work across multiple providers including Claude, GPT, and Grok. 7 releases · 4 other sources · first seen May 2026 ▸
Also counts toward: Command-line interface, gRPC API support, Client SDKs
release 7 total
-
Adds
xhighthinking level for Grok 4.3 and Grok 4.5 on thexaiprovider. v1.4.0 · Oct 2026 · source · release history -
The
ModelsStreamTransformsinterface is renamed toModelsRequestTransforms; extensions referencing the old name will break. v0.84.0 · Aug 2026 · source · release history -
Adds native
xhighandmaxthinking levels for Claude Fable 5 across all generated provider catalogs. v0.80.7 · Jul 2026 · source · release history -
Adds
maxthinking level (abovexhigh) for GPT-5.6 and adaptive Claude models, available via CLI, SDK, RPC, and model selection; custom themes can definethinkingMax. v0.80.6 · Jul 2026 · source · release history -
Adds
maxthinking level (abovexhigh) for GPT-5.6 and adaptive Claude models, available via--thinking maxin the CLI, SDK, RPC, and model selection; custom themes can definethinkingMax. v0.80.6 · Jul 2026 · source · release history -
Enables GLM-5.2
xhighreasoning on OpenRouter and corrects Fireworks routing to use the OpenAI-compatible Chat Completions endpoint withreasoning_effortsupport. v0.79.9 · Jun 2026 · source · release history
docs
- Sep 4, 2026 Pi 0.85.0 Persistent Claude thinking effort — Supported Anthropic transports preserve per-turn effort and recover safely from signed-thinking mismatches. See Fullscreen transcript controls — Jump to the latest message from a scrolled transcript and use the embedded working indicator. docs update · Sep 2026 · source
-
Claude models with per-turn effort support use supportsMidConvoEffort . Pi then persists each response's provider effort, reconstructs effort-only system messages on later requests, and sends thinking binding controls with prefix_mismatch_behavior:
drop_blockto avoid stale signed-thinking prefixes causing… docs update · Sep 2026 · source -
News New Features max thinking level - New opt-in thinking level above xhigh , natively supported on GPT-5.6 and adaptive Claude models, available across CLI (
--thinkingmax ), SDK, RPC, and model selection. Custom themes can define thinkingMax . See CLI Reference . docs update · Jul 2026 · source
example
-
Invoke the highest reasoning depth on a complex refactor task when using GPT-5.6 or a supported Claude model.
$ pi --thinking max 'Audit this codebase for insecure deserialization patterns and propose fixes'v0.80.6 · Jul 2026 · source
+ Local llama.cpp model management shipped Lets users search, download, and run local Hugging Face models via llama.cpp without leaving the Pi session. 5 releases · 6 other sources · first seen Dec 2025 ▸
Also counts toward: Command-line interface
release
-
Changes
bashandpowershellstructured results in codemode to hold up to 1 MiB of output (previously 2000 lines or 50 KB) and addstruncatedandfull_output_pathfields. v0.99.0 · Sep 2026 · source · release history -
--no-extensionsnow also disables the built-in extensions including the llama.cpp provider; previously built-ins were unaffected. Restore a specific built-in with-e builtin:<name>. v0.99.0 · Sep 2026 · source · release history -
Adds built-in llama.cpp router support via
/loginconnection setup and/llamasubcommand for Hugging Face model search, download, explicit load/unload, and live progress. v0.81.0 · Jul 2026 · source · release history -
Adds
/logincommand for llama.cpp router connection setup and/llamasubcommand for Hugging Face model search, download, explicit load, unload, and live progress tracking. v0.81.0 · Jul 2026 · source · release history -
Adds built-in llama.cpp router support with
/loginfor connection setup and/llamafor Hugging Face model search, download, explicit load/unload, and live progress. v0.81.0 · Jul 2026 · source · release history
docs
- Navigation On this page Documentation On this page NVIDIA Local AI Inference Recipes provides llama.cpp settings tuned for specific NVIDIA hardware and models. Each recipe gives a single-model llama-server command. docs update · Oct 2026 · source
- Navigation On this page Documentation On this page Pi supports the llama.cpp router server. The router discovers multiple GGUF models and loads or unloads them on demand. Use a current llama.cpp build with router support. Follow the build instructions or install a prebuilt release for your platform. docs update · Sep 2026 · source
- News New Features Local llama.cpp model management — Connect to a llama.cpp router, search and download Hugging Face models, and explicitly load or unload models with live progress. See llama.cpp . docs update · Jul 2026 · source
- Jul 21, 2026 Pi 0.81.0 Local llama.cpp model management — Connect to a llama.cpp router, search and download Hugging Face models, and explicitly load or unload models with live progress. docs update · Jul 2026 · source
example
-
Connect to a local llama.cpp router and search for a Hugging Face model to download and load — without leaving the Pi session.
$ /login /llama <model-search-query>v0.81.0 · Jul 2026 · source -
Draft a long, structured prompt in your preferred editor rather than the inline input, useful for complex multi-step instructions.
$ # While in the pi prompt, press Ctrl+G to open $EDITOR, write your message, save and quit to send it.v0.25.3 · Dec 2025 · source
+ Keyboard shortcut customization shipped Lets providers supply their own native thinking controls when models like DeepSeek need them via chat-template configuration. 9 releases · 2 other sources · first seen Dec 2025 ▸
release 9 total
-
Adds
app.message.copykey (defaultctrl+x) on OAuth sign-in screens in/login,/mcp, and/mcp loginto copy the sign-in URL when the browser cannot be opened. v1.0.1 · Oct 2026 · source · release history -
/reloadcommand to enable tools newly added to thedefaultToolssetting without restart v0.99.2 · Sep 2026 · source · release history -
Adds
+nameand-nameentries to thedefaultToolssetting to add or remove tools without repeating all defaults. v0.99.0 · Sep 2026 · source · release history -
Adds Ctrl+X shortcut to copy the last assistant message in the transcript, or the selected message in
/tree. v0.80.7 · Jul 2026 · source · release history - Adds Ctrl+J as a default newline keybinding alongside Shift+Enter. v0.80.0 · Jun 2026 · source · release history
-
Digit keys (
0-9) now supported in the TUI keybinding system, including modified combos likectrl+1, with Kitty CSI-u and xtermmodifyOtherKeysprotocol support. v0.57.1 · Mar 2026 · source · release history
docs
-
Pi exposes named actions, such as , that can be assigned keybindings. You can change default assignments or bind unassigned actions in Pi's user configuration Run
/hotkeysto see the active shortcuts for the main editor and application. Assign keybindings <agent-dir>/keybindings.json . docs update · Oct 2026 · source - Pi uses Windows-style keybindings when running natively on Windows or in WSL: Alt+V pastes an image or clipboard text. Ctrl+F searches the transcript in fullscreen mode, and Ctrl+Up / Ctrl+Down jump between marked messages. Alt+P cycles to the previous model. docs update · Aug 2026 · source
+ Qwen Token Plan provider support shipped Adds Qwen Token Plan as a built-in provider with regional endpoint support. 3 releases · 2 other sources · first seen Jul 2026 ▸
release
-
Adds
QWEN_TOKEN_PLAN_API_KEYenvironment variable and Qwen Token Plan Individual as a built-in provider with its subscription model catalog. v0.84.1 · Aug 2026 · source · release history -
Adds Qwen Token Plan Individual as a built-in provider, using the shared international
QWEN_TOKEN_PLAN_API_KEYenvironment variable and its documented subscription model catalog. v0.84.1 · Aug 2026 · source · release history - Adds Qwen Token Plan and Qwen Token Plan China as built-in providers with regional endpoints and API-key authentication. v0.81.0 · Jul 2026 · source · release history
docs
- Aug 7, 2026 Pi 0.84.1 Qwen Token Plan Individual — Use the built-in provider for models documented for Individual subscriptions. See Authentication readiness checks pi auth check to verify provider or model credentials, optionally emitting the resolved credential. docs update · Aug 2026 · source
-
Qwen Token Plan
QWEN_TOKEN_PLAN_API_KEYqwen-token-plan Qwen Token Plan (China)QWEN_TOKEN_PLAN_CN_API_KEYqwen-token-plan-cn qwen-token-plan: { type:api_key, key: "sk-sp-..." }, qwen-token-plan-cn: { type:api_key, key: "sk-sp-..." }, docs update · Jul 2026 · source
+ Kimi K3 model support shipped Makes Kimi K3 available across multiple provider catalogs including OpenRouter and Vercel. 2 releases · 1 other source · first seen Dec 2025 ▸
release
-
models.jsonbase URL overrides for thekimi-codingprovider must now include/v1(e.g.https://api.kimi.com/coding/v1instead ofhttps://api.kimi.com/coding). v1.3.0 · Oct 2026 · source · release history - Adds Kimi K3 model support across Kimi Coding, Moonshot AI, Moonshot AI China, OpenRouter, and Vercel AI Gateway. v0.80.9 · Jul 2026 · source · release history
example
-
Disable the skills system entirely when you want a clean, instruction-free agent run.
$ pi --no-skillsv0.19.0 · Dec 2025 · source
+ Chat-template thinking controls for custom providers shipped Maps Pi reasoning levels to provider-native thinking controls for vLLM and Hugging Face compatible models. 2 releases · 1 other source · first seen Jun 2026 ▸
release
-
Adds chat-template thinking support: OpenAI-compatible custom providers can now map Pi thinking levels into
chat_template_kwargs, enabling vLLM/Hugging Face models such as DeepSeek to use provider-native thinking controls. v0.79.9 · Jun 2026 · source · release history -
Supports
chat_template_kwargs-basedthinking controls for OpenAI-compatible custom providers, enabling vLLM/Hugging Face chat-template models (e.g. DeepSeek) to use provider-native thinking levels. v0.79.9 · Jun 2026 · source · release history
example
-
Configure a vLLM-hosted model with custom sampling parameters and a thinking token budget.
$ { "id": "vllm/qwen3-235b", "samplingParams": { "temperature": 0.6, "top_p": 0.95 }, "thinking_token_budget": 8192 }v0.84.0 · Aug 2026 · source
+ Session affinity configuration shipped Controls how session IDs are sent to providers to ensure correct session handling per service. 2 releases · 1 other source · first seen Jul 2026 ▸
release
-
The
compat.sendSessionIdHeaderflag has been removed frommodels.jsonforopenai-responses. ReplacesendSessionIdHeader: falsewithsessionAffinityFormat: "openai-nosession"(other values:"openai","openrouter"). v0.80.7 · Jul 2026 · source · release history -
The
compat.sendSessionIdHeaderflag has been removed frommodels.jsonforopenai-responsesmodels. ReplacesendSessionIdHeader: falsewithsessionAffinityFormat: "openai-nosession"in yourmodels.json; the new field also accepts"openai"and"openrouter". v0.80.7 · Jul 2026 · source · release history
docs
-
News Breaking Changes Removed the openai-responses
compat.sendSessionIdHeaderflag from models.json . Session-affinity behavior is now controlled bycompat.sessionAffinityFormat( openai , openai-nosession , or openrouter ). docs update · Jul 2026 · source
+ Mistral prompt caching shipped Reduces Mistral API costs by caching prompts within a session and showing users how much caching saved. 1 release · 1 other source · first seen Jun 2026 ▸
release
- Adds Mistral prompt caching using the Pi session ID as the cache key, with cached-token usage and cost accounting surfaced per session. v0.79.8 · Jun 2026 · source · release history
docs
- Show transcript notices for significant prompt-cache misses, compaction or branch-summary usage, and provider recovery diagnostics such as dropped Anthropic thinking blocks Send the anonymous install/update ping and selected provider attribution headers. docs update · Sep 2026 · source
+ Grok 4.5 provider support shipped Adds Grok 4.5 as a usable model with selectable reasoning depth. 2 releases · first seen Jul 2026 ▸
release
-
Renamed the inherited
GoogleThinkingLeveltype toGoogleApiThinkingLeveland addedResolvedGoogleThinkingLevelfor normalized adapter levels. v0.84.3 · Aug 2026 · source · release history - Adds Grok 4.5 OpenAI Responses support with selectable low, medium, and high thinking levels. v0.80.8 · Jul 2026 · source · release history
+ Azure OpenAI provider support shipped Lets users point Pi at modern Azure OpenAI endpoints without manual URL workarounds. 2 releases · first seen Dec 2025 ▸
release
- Supports modern Microsoft Azure Foundry endpoint URLs for the Azure OpenAI Responses provider. v0.80.3 · Jun 2026 · source · release history
-
Supports Mistral AI models as a new provider — set the
MISTRAL_API_KEYenvironment variable to enable. v0.18.1 · Dec 2025 · source · release history
+ OpenRouter model aliases shipped Provides shorthand aliases for popular OpenRouter models so users can reference them by simple names. 2 releases · first seen Jan 2026 ▸
release
-
Adds
openrouter/fusionas a built-in OpenRouter model alias for direct use as a provider target. v0.79.8 · Jun 2026 · source · release history -
The
strictResponsesPairingcompat option has been removed from the models.json schema. v0.49.2 · Jan 2026 · source · release history
+ Radius gateway support shipped Adds Radius gateway as a supported provider target for routing requests. 1 release · first seen Jul 2026 ▸
release
-
Adds file-backed dynamic model catalogs (
models-store.json), per-provider pi.dev catalog overlays, and Radius gateway support. v0.80.8 · Jul 2026 · source · release history
+ Authentication and Credential Management 6 capabilities Pi handles login and credential management for multiple AI providers, supporting OAuth flows, API keys, and bearer tokens. Users can authenticate interactively or verify and export credentials for use in scripts and external tools. ▸
+ Anthropic bearer token authentication shipped Supports bearer-token authentication for Anthropic-compatible gateways that require it. 6 releases · 3 other sources · first seen Dec 2025 ▸
release
-
Adds a copy-code login method to Anthropic
/loginfor headless setups where the browser runs on a different machine. v1.0.0 · Oct 2026 · source · release history -
Support for Anthropic workload identity federation via
ANTHROPIC_FEDERATION_RULE_ID,ANTHROPIC_ORGANIZATION_ID, andANTHROPIC_IDENTITY_TOKEN_FILEenv vars v0.99.2 · Sep 2026 · source · release history -
Adds
ANTHROPIC_AUTH_TOKENenvironment variable to authenticate against Anthropic-compatible gateways usingAuthorization: Bearer, including compaction and branch summaries. v0.82.1 · Jul 2026 · source · release history -
Adds
ANTHROPIC_AUTH_TOKENbearer authentication for Anthropic-compatible gateways that requireAuthorization: Bearerheaders, covering compaction and branch summaries. v0.82.1 · Jul 2026 · source · release history -
Adds
ANTHROPIC_AUTH_TOKENenvironment variable for bearer auth (Authorization: Bearer) against Anthropic-compatible gateways, covering compaction and branch summaries. v0.82.1 · Jul 2026 · source · release history -
Supports storing API keys in
~/.pi/agent/settings.jsonunder theapiKeysfield, taking priority over environment variables. v0.27.3 · Dec 2025 · source · release history
example
-
Authenticate against an Anthropic-compatible gateway (e.g. a corporate proxy) that requires bearer token auth, so compaction and branch summaries also route through it.
$ export ANTHROPIC_AUTH_TOKEN=your-token-here piv0.82.1 · Jul 2026 · source -
Authenticate against an Anthropic-compatible gateway that requires bearer token auth instead of an API key.
$ export ANTHROPIC_AUTH_TOKEN=<your-bearer-token>v0.82.1 · Jul 2026 · source -
Persist an Anthropic API key in settings so it takes precedence over any environment variable across sessions.
$ ~/.pi/agent/settings.json: { "apiKeys": { "anthropic": "sk-..." } }v0.27.3 · Dec 2025 · source
+ Credential export for external clients shipped Exports valid credentials with auto-refresh so external scripts can use them without managing OAuth themselves. 5 releases · 4 other sources · first seen Mar 2026 ▸
Also counts toward: Command-line interface
release
-
"auth": { "provider": "<name>" }config key for HTTP MCP servers to use a/loginbearer token instead of MCP OAuth v0.99.2 · Sep 2026 · source · release history -
ModelRegistry.getApiKeyAndHeaders() now returns
ProviderHeaderswithstring | nullvalues; extensions that inspect returned headers must handlenull, and those forwarding headers to pi-ai streams should passnullthrough unchanged. v0.84.0 · Aug 2026 · source · release history -
Adds
pi auth print-api-keyandpi auth print-bearer-tokencommands to export configured credentials to external clients, with automatic OAuth refresh and minimum-validity enforcement. v0.83.0 · Jul 2026 · source · release history -
Adds
pi auth print-api-keyandpi auth print-bearer-tokencommands to export configured credentials (with automatic OAuth refresh and minimum-validity enforcement) for use by external clients. v0.83.0 · Jul 2026 · source · release history -
ModelRegistry.getApiKey(model) is replaced by getApiKeyAndHeaders(model); extensions and SDK integrations must now fetch both
apiKeyandheadersper request instead of a single API key. v0.63.0 · Mar 2026 · source · release history
docs
- Jul 29, 2026 Pi 0.83.0 Credential export for external clients pi auth print-api-key pi auth print-bearer-token export configured credentials with automatic OAuth refresh and minimum-validity enforcement. docs update · Jul 2026 · source
example
-
Authenticate an HTTP MCP server using a provider's login token instead of MCP OAuth — useful when the server expects a pre-existing bearer token from your SSO provider.
$ {"mcpServers": {"my-server": {"url": "https://internal.example.com/mcp", "auth": {"provider": "my-provider"}}}}v0.99.2 · Sep 2026 · source -
Pipe a bearer token into another tool (e.g., a curl call to an API) without manually copying credentials.
$ pi auth print-bearer-token | xargs -I{} curl -H "Authorization: Bearer {}" https://api.example.com/endpointv0.83.0 · Jul 2026 · source -
Export an API key into an environment variable for a script that calls the provider directly.
$ export API_KEY=$(pi auth print-api-key)v0.83.0 · Jul 2026 · source
+ OpenRouter OAuth login shipped Walks users through authenticating to OpenRouter interactively, including in headless SSH environments. 6 releases · 1 other source · first seen Jul 2026 ▸
release
-
Device-code login now opens the verification page and copies the code on Enter; providers can disable either with
openBrowserOnConfirm: falseorcopyCodeOnConfirm: false. v1.5.0 · Nov 2026 · source · release history -
Adds
/login openaiSign in with ChatGPT, letting users authenticate with a ChatGPT subscription against the OpenAI provider. v0.99.0 · Sep 2026 · source · release history - Enables headless OpenRouter login by accepting a manually pasted redirect URL or authorization code when the loopback callback is unavailable (e.g., over SSH). v0.83.0 · Jul 2026 · source · release history
-
Adds manual redirect URL and authorization-code entry to OpenRouter login via
/loginfor remote and headless (SSH) environments where the loopback callback is unavailable. v0.83.0 · Jul 2026 · source · release history -
Adds support for manual redirect URL and authorization-code entry during
pi authlogin on OpenRouter, enabling headless and SSH-remote sign-in when the loopback callback is unavailable. v0.83.0 · Jul 2026 · source · release history -
Adds OAuth PKCE login for OpenRouter via
/login, automatically minting a user-controlled API key without manual configuration. v0.82.0 · Jul 2026 · source · release history
example
-
Authenticate with OpenRouter interactively so Pi can use it without manually setting an API key.
$ /loginv0.82.0 · Jul 2026 · source
+ xAI OAuth device-code login shipped Authenticates users to xAI through a device-code OAuth flow so no manual API key handling is needed. 3 releases · 1 other source · first seen Dec 2025 ▸
release
- Adds xAI device-code OAuth login so users can authenticate to xAI interactively without an API key. v0.80.8 · Jul 2026 · source · release history
- Changes the default xAI model to Grok 4.5 and updates xAI login to use a prefilled device-authorization link labeled Sign in with SuperGrok or X Premium. v0.80.9 · Jul 2026 · source · release history
-
New Google Antigravity OAuth provider: access Gemini 3, Claude sonnet/opus thinking models, and GPT-OSS models for free via
/login→ Antigravity. v0.25.0 · Dec 2025 · source · release history
example
-
Authenticate with the Antigravity sandbox to get free access to Claude thinking and GPT-OSS models.
$ # Inside pi, run: /login # Then select: Antigravityv0.25.0 · Dec 2025 · source
+ Credential readiness check shipped Verifies that credentials for a chosen provider or model are valid before a session starts. 2 releases · 1 other source · first seen Mar 2026 ▸
Also counts toward: Command-line interface
release
-
Adds
pi auth checksubcommand to verify provider or model credentials before a run, with optional resolved credential output. v0.84.1 · Aug 2026 · source · release history -
RPC
get_commands,RpcSlashCommand, and SDKSlashCommandInfono longer exposelocationorpath— usesourceInfoinstead. v0.62.0 · Mar 2026 · source · release history
example
-
Verify that your configured provider credentials are valid before starting a long agent run.
$ pi auth checkv0.84.1 · Aug 2026 · source
+ Kimi OAuth device-code login shipped Lets users log in to Kimi Code subscriptions via an OAuth device flow with automatic token refresh. 1 release · first seen Jul 2026 ▸
release
-
Adds OAuth device-authorization login for Kimi Code subscriptions via
/login, with automatic token refresh. v0.82.0 · Jul 2026 · source · release history
+ Session Management and Context Control 7 capabilities Pi provides tools for managing conversation sessions, controlling context size, and tracking how tokens are used and priced. Users and extensions can inspect, compact, and reason about session state programmatically. ▸
+ Session state snapshot API shipped Enforces that session state is only read through a snapshot object, preventing stale or inconsistent data access. 30 releases · first seen Jan 2026 ▸
previously: Session snapshot API
release 30 total
-
The session now counts as busy while a run starts (including during
before_agent_starthandlers): ctx.isIdle() returns false, pi.sendMessage() queues into the starting run, and pi.sendUserMessage() now requiresdeliverAs. v1.2.0 · Oct 2026 · source · release history -
SessionManageris now canonical forAgentSessionprovider context; assigningsession.agent.state.messagesno longer replaces future request history. v0.87.0 · Sep 2026 · source · release history -
Made
SessionManagercanonical forAgentSessionprovider context; assigningsession.agent.state.messagesno longer replaces future request history. v0.87.0 · Sep 2026 · source · release history -
RemoteSession.sessionsno longer exposes runtime phase, model, thinking, attachment, or lock state (previously available as list summaries); that data is now available only from acquiredSessionSnapshotvalues via the durableSessionMetadataAPI. v0.84.0 · Aug 2026 · source · release history -
The legacy JSONL and in-memory repository APIs are removed; use pi-agent-core's v4
JsonlSessionRepoorInMemorySessionRepoimplementing the newSessionRepocontract. v0.84.0 · Aug 2026 · source · release history -
The pi-agent-core harness session model is replaced with the v4 lane-based Session,
SessionStorage, andSessionRepoAPIs; legacy JSONL and in-memory repository APIs are removed. UseJsonlSessionRepoorInMemorySessionRepoimplementing the newSessionRepocontract. v0.84.0 · Aug 2026 · source · release history
+ Session event hooks for extensions shipped Lets extensions react to session lifecycle events such as session name changes. 15 releases · 2 other sources · first seen Dec 2025 ▸
Also counts toward: Plugin API support
release 15 total
-
Extends
before_agent_startto fire for runs started by pi.sendMessage(..., { triggerTurn: true }), withBeforeAgentStartEventnow a union onmessageType('user'or'custom'). v1.2.0 · Oct 2026 · source · release history -
BeforeAgentStartEventis now a union onmessageType:'user'events carrypromptandimages,'custom'events carry the startingmessageand noprompt. Handlers that should act only on user prompts must checkevent.messageType === 'user'. v1.2.0 · Oct 2026 · source · release history -
Adds
abortedfield toagent_settledsession, extension, and JSON events so integrations can distinguish a cancelled run from a finished one. v1.1.0 · Oct 2026 · source · release history -
Built-in extensions and tools are now named
builtin:<name>(e.g.,builtin:mcp) in errors, diagnostics, RPC source info, and bug reports instead of<inline:name>or <builtin:name>" v0.99.0 · Sep 2026 · source · release history -
Slash commands for built-in extensions no longer carry a
[t]autocomplete tag v0.99.0 · Sep 2026 · source · release history -
Built-in extensions and tools are now named
builtin:<name>(e.g.builtin:mcp,builtin:read) in errors, diagnostics, RPC source info, and bug reports — previously they appeared as<inline:name>and<builtin:name>. v0.99.0 · Sep 2026 · source · release history
docs
- ui_prompt_start / ui_prompt_end Notification-only lifecycle events for blocking user-facing extension UI prompts. They fire around ctx.ui.select() ctx.ui.confirm() ctx.ui.input() ctx.ui.editor() so host/status integrations can report waiting for user instead of just running. docs update · Aug 2026 · source
example
-
Inspect session and model context from inside a bash tool script — useful for writing tools that behave differently per provider or model.
$ echo "Session: $PI_SESSION_ID | Provider: $PI_PROVIDER | Model: $PI_MODEL | Reasoning: $PI_REASONING_LEVEL"v0.82.0 · Jul 2026 · source
+ Compaction event metadata for extensions shipped Tells extensions why a compaction happened and whether a retry is coming, so they can react appropriately. 12 releases · 3 other sources · first seen Dec 2025 ▸
release 12 total
-
Runs requested from
agent_settledhandlers are now deferred until all settled handlers finish; handlers still observectx.isIdle() === truebut no longer see a reentrantagent_startduring the same notification dispatch. v0.87.0 · Sep 2026 · source · release history -
Adds
terminatesupport to blocked extensiontool_callevent handlers, allowing all-terminating batches to skip the automatic follow-up model call. v0.84.1 · Aug 2026 · source · release history -
Exposes retry lifecycle events (
summarization_retry_scheduled,summarization_retry_attempt_start,summarization_retry_finished) for compaction and branch summarization to interactive, JSON, RPC, and SDK consumers. v0.81.1 · Jul 2026 · source · release history -
Adds
reasonandwillRetrymetadata tosession_before_compactandsession_compactextension events, enabling extensions to distinguish manual/compact, threshold auto-compaction, and overflow retry flows. v0.79.10 · Jun 2026 · source · release history -
Adds
reasonandwillRetryfields tosession_before_compactandsession_compactextension events, letting extensions distinguish manual/compact, threshold auto-compaction, and overflow retry flows. v0.79.10 · Jun 2026 · source · release history -
After ctx.newSession(), ctx.fork(), or ctx.switchSession(), pre-replacement session-bound extension objects (including captured
piand commandctxreferences) are invalidated and now throw instead of silently targeting the replaced session; post-switch work must be moved into thewithSessioncallback using the… v0.69.0 · Apr 2026 · source · release history
docs
- summarization_retry_scheduled Retry scheduled for a transient compaction or branch-summary summarization error summarization_retry_attempt_start Retried summarization request starts summarization_retry_finished Summarization retry loop completes summarization_retry_scheduled / summarization_retry_attempt_start /… docs update · Jul 2026 · source
example
-
React differently in a custom summarization extension depending on whether compaction was triggered manually, by a threshold, or as an overflow retry.
$ // In your extension handler: extension.on('session_before_compact', ({ reason, willRetry }) => { if (reason === 'overflow' && willRetry) { // overflow retry: use a lighter summary to reduce token…v0.79.10 · Jun 2026 · source -
Resume the most recent session programmatically to continue a long-running agent workflow without re-specifying session IDs.
$ const session = await SessionManager.continueRecent();v0.26.0 · Dec 2025 · source
+ RPC mode and programmatic session inspection shipped Allows external programs to launch Pi in RPC mode and query session entries, structure, and available thinking levels. 8 releases · 3 other sources · first seen Jun 2026 ▸
release 8 total
-
Adds per-input disposition to RPC
prompt,steer, andfollow_upresponses; RpcClient.prompt() also acceptsstreamingBehavior. v0.99.0 · Sep 2026 · source · release history -
Adds show/hide toggle (
H) in HTML exports for custom messages markeddisplay: false. v0.99.0 · Sep 2026 · source · release history -
Adds experimental remote-session client APIs: the transport-neutral
PiClient, CBOR protocol, Unix-socket transport, and@earendil-works/pi-coding-agent/clientRemoteSessioncontroller with transcript reducers. v0.84.0 · Aug 2026 · source · release history -
Adds experimental remote-session client APIs: transport-neutral
PiClient, CBOR protocol, Unix-socket transport, and@earendil-works/pi-coding-agent/clientRemoteSessioncontroller with transcript reducers. v0.84.0 · Aug 2026 · source · release history -
Adds streaming
bash_execution_updateRPC events for direct bash commands, correlated with request IDs. v0.82.0 · Jul 2026 · source · release history -
Adds
get_available_thinking_levelsRPC command and RpcClient.getAvailableThinkingLevels() method for querying model thinking-level options. v0.81.0 · Jul 2026 · source · release history
docs
-
ctx.modelRegistry/ ctx.model /ctx.thinkingLevel/ctx.scopedModelsctx.scopedModelsis the read-only list of models scoped to the current session — the same set the/scoped-modelscommand shows. docs update · Jul 2026 · source -
ctx.modelRegistry/ ctx.model /ctx.thinkingLevelis the active model, andctx.thinkingLevelis its current effective thinking level. createBashTool() exposes the current session to commands throughPI_SESSION_IDPI_SESSION_FILEPI_PROVIDERPI_MODELPI_REASONING_LEVEL. docs update · Jul 2026 · source - get_available_thinking_levels List the thinking levels supported by the current model. Returns [off] for a model without reasoning support. docs update · Jul 2026 · source
+ Context compaction with token estimates shipped Reports estimated token counts after compaction so users can see how much context was freed. 6 releases · first seen Dec 2025 ▸
release
- Adds estimated post-compaction token counts to compact results and compaction events, letting clients display approximate context reduction. v0.79.8 · Jun 2026 · source · release history
-
The
apiKeystring field inbefore_compacthook payloads is removed in favor ofresolveApiKey— hooks that readapiKeydirectly will break. v0.27.6 · Dec 2025 · source · release history -
AgentSession.reset() and switchSession() now return
boolean(false if cancelled by a hook) instead of their previous return types. v0.27.0 · Dec 2025 · source · release history -
AgentSession.branch() now returns
{ cancelled }instead of{ skipped }. v0.27.0 · Dec 2025 · source · release history -
Compacted sessions display a collapsible summary in the TUI (toggled with
okey) and in HTML exports. v0.12.7 · Dec 2025 · source · release history -
Adds
/autocompacttoggle to automatically compact context when it reachescontextWindow - reserveTokens(default 16k reserve tokens). v0.12.7 · Dec 2025 · source · release history
+ Reasoning token usage accounting shipped Tracks reasoning token counts and costs from providers that expose them for accurate usage accounting. 5 releases · first seen Jun 2026 ▸
release
-
Access
Usage.cost.totalFromProviderin SDK and extension usage data to distinguish billed provider totals from catalog estimates. v1.5.0 · Nov 2026 · source · release history - Expands usage accounting to persist tool, compaction, and branch-summary usage in session totals and statistics. v0.81.0 · Jul 2026 · source · release history
-
Adds request-wide input-token pricing tiers for accurate long-context cost accounting (e.g. GPT-5.4/5.5/5.6 rates), configurable for custom models via
models.jsonandmodelOverrides. v0.80.6 · Jul 2026 · source · release history -
Adds request-wide input-token pricing tiers for accurate long-context cost accounting (e.g. GPT-5.4/5.5/5.6 rates), configurable in
models.jsonandmodelOverrides. v0.80.6 · Jul 2026 · source · release history -
Adds
Usage.reasoningtoken counts for providers that report reasoning/thinking token usage. v0.80.3 · Jun 2026 · source · release history
+ Streaming delta-only message events shipped Streams message updates as deltas only, requiring clients to assemble the full message incrementally. 1 release · first seen Aug 2026 ▸
Also counts toward: gRPC API support
release
-
JSON and RPC
message_updateevents now emit onlyassistantMessageEventdeltas; the cumulativemessageandassistantMessageEvent.partialfields are removed. Clients must assemble deltas betweenmessage_startandmessage_end. v0.84.0 · Aug 2026 · source · release history
+ Extension and SDK Development 10 capabilities Pi exposes a programmable API surface for building extensions and integrating Pi into larger applications. Developers can register providers, tools, Markdown transformers, and event hooks, and can trim dependencies to what they actually use. ▸
+ ModelRuntime SDK facade shipped Offers a single unified SDK object for configuring models, authenticating, and assembling requests, replacing older fragmented APIs. 20 releases · 4 other sources · first seen Dec 2025 ▸
Also counts toward: Client SDKs
release 20 total
-
Adds generateImages() to
ModelRuntimewith runtime-resolved auth, plus getModelsOfType(), getModelOfType(), getAvailableOfType(), getAllModels(), and getAllAvailable(). v0.99.0 · Sep 2026 · source · release history -
Adds classify() and classifier model accessors to
ModelRuntime, including the built-injev-latestmodel; classifier models are also available for every llama.cpp chat model via next-token label probabilities. v0.99.0 · Sep 2026 · source · release history -
Adds classifier model support via classify() in
ModelRuntime, Jev classifiers from codemode scripts, and inherited classifiers on OpenRouter, Cloudflare Workers AI, Vercel AI Gateway, and OpenCode Zen v0.99.0 · Sep 2026 · source · release history -
The v2 session and
AgentHarnessAPI experimental subpaths are removed; use pi-agent-core's default export instead. v0.84.0 · Aug 2026 · source · release history -
The v2 session and
AgentHarnessAPI experimental subpaths are removed; they are now promoted to pi-agent-core's default export. v0.84.0 · Aug 2026 · source · release history - ModelRuntime.setRuntimeApiKey() now accepts auth cancellation options instead of catalog refresh options; callers must call refresh({ providers: [providerId], signal }) separately when remote freshness is required. v0.84.0 · Aug 2026 · source · release history
docs
- Streaming model calls ctx.modelRegistry.streamSimple(model, context, options) for provider-neutral options such as reasoning stream() for API-specific options. Both use configured providers and resolve authentication, including for providers registered with . docs update · Sep 2026 · source
-
// create() restores cached catalogs but does not refresh them from pi.dev by default. // Opt in to a create-time network refresh and bound how long it may take: const refreshedRuntime = await
ModelRuntime.create({ allowModelNetwork: true, modelRefreshTimeoutMs: 15_000, Remote catalogs are persisted locally so later… docs update · Aug 2026 · source - async refreshToken(credentials: OAuthCredentials, signal: AbortSignal): Promise<OAuthCredentials> { const tokens = await refreshAccessToken(credentials.refresh, signal); refreshToken(credentials: OAuthCredentials, signal: AbortSignal): Promise<OAuthCredentials>; supportsFinishReason?: boolean; thinkingFormat?:… docs update · Aug 2026 · source
- await modelRuntime.setRuntimeApiKey("anthropic", "sk-my-temp-key"); login() logout() setRuntimeApiKey() , and removeRuntimeApiKey() resolve after the affected provider's cached/built-in catalog, composition, and availability snapshot are locally consistent. They do not wait for remote catalog freshness. docs update · Aug 2026 · source
+ Constrained tool sampling shipped Lets tools request strict JSON Schema or grammar-constrained sampling, with automatic checks that the model supports it. 8 releases · 2 other sources · first seen Dec 2025 ▸
release 8 total
-
Tool argument validation now runs on
@earendil-works/pi-schema. TypeBox features outside JSON Schema — Type.Refine(), Type.BigInt(), Type.Undefined(), codecs, and Format.Set() formats — no longer apply to tool arguments. v1.5.0 · Nov 2026 · source · release history - Plain JSON Schema tools, including MCP tools, now receive the same coercion as TypeBox tools (e.g. converting numeric strings, wrapping a single value into an array), which may change tool argument behavior. v1.5.0 · Nov 2026 · source · release history
-
Adds
PI_EXPERIMENTAL=1environment variable to enable experimental strict JSON-schema constrained sampling for the defaultread,bash,edit, andwritetools. v0.84.2 · Aug 2026 · source · release history -
Adds
Tool.constrainedSamplingwithprefer/requiremodes for strict JSON Schema sampling and OpenAI Lark/regex grammar variants, gated bysupportsStrictToolsandsupportsGrammarToolscapability flags, across OpenAI, Anthropic, Amazon Bedrock, Google Gemini, and Mistral. v0.82.0 · Jul 2026 · source · release history -
Adds
Tool.constrainedSamplingsupporting strict JSON Schema (prefer/require) and OpenAI Lark/regex grammar variants across OpenAI, Anthropic, Amazon Bedrock, Google Gemini, and Mistral providers. v0.82.0 · Jul 2026 · source · release history -
Adds model capability flags
supportsGrammarToolsandsupportsStrictToolsto gate constrained sampling requests to models that support them. v0.82.0 · Jul 2026 · source · release history
docs
- News New Features Constrained tool sampling — Tools can prefer or require strict JSON Schema sampling or use OpenAI Lark/regex grammars, with model capability metadata preventing unsupported requests. See Constrained Sampling for Tools . docs update · Jul 2026 · source
- Jul 24, 2026 Pi 0.82.0 Constrained tool sampling — Tools can prefer or require strict JSON Schema sampling or use OpenAI Lark/regex grammars, with model capability metadata preventing unsupported requests. docs update · Jul 2026 · source
+ SDK selective provider registration shipped Lets SDK users register only the providers they need to keep bundle size small. 8 releases · 1 other source · first seen Apr 2026 ▸
release 8 total
-
Adds
descriptionfield for MCP servers (pi mcp add --description) shown in the system prompt and used to rank tools in tool search. v0.99.2 · Sep 2026 · source · release history -
Adds per-request
fetchinjection for supported text and image provider transports. v0.83.0 · Jul 2026 · source · release history -
Adds the
"pending"stop reason for partial streaming messages in the custom provider stream pattern. v0.83.0 · Jul 2026 · source · release history -
Removes the
@earendil-works/pi-ai/baseand@earendil-works/pi-agent-core/baseselective-provider entrypoints; use the root packages with explicit Models provider factories instead. v0.80.0 · Jun 2026 · source · release history -
The
@earendil-works/pi-ai/baseand@earendil-works/pi-agent-core/baseentrypoints have been removed; use the root packages with explicit Models provider factories instead. v0.80.0 · Jun 2026 · source · release history -
Adds
@earendil-works/pi-ai/baseand@earendil-works/pi-agent-core/baseentry points for SDK users who need selective provider registration to trim bundle size. v0.79.8 · Jun 2026 · source · release history
docs
- OpenRouter (OAuth-minted API key billed from OpenRouter credits) and auto-refresh when expired. OpenRouter instead mints a user-controlled API key that does not expire automatically. docs update · Jul 2026 · source
+ Extension-registered providers shipped Lets extensions register fully functional AI providers with their own authentication and streaming behaviour. 6 releases · 1 other source · first seen Feb 2026 ▸
Also counts toward: Plugin API support, Plugin system
release
-
Adds the
provider_stream_eventextension event for observing parsed provider events before normalization. v0.99.0 · Sep 2026 · source · release history -
Adds extension tool API fields
exposure(direct,model-only,codemode,deferred, orhidden),namespace,annotations,outputSchemawithstructuredContent,isErrorresults, prepareLoadout(), and ctx.executeTool() for nested tool calls withparentToolCallIdandnestedCalls. v0.99.0 · Sep 2026 · source · release history -
The
ModelsStreamTransformsinterface is renamed toModelsRequestTransforms; extensions referencingModelsStreamTransformswill break. v0.84.0 · Aug 2026 · source · release history - Enables extensions to register complete pi-ai providers with native authentication, model refresh, filtering, and custom streaming behavior. v0.81.0 · Jul 2026 · source · release history
- Adds full provider extension registration, allowing extensions to supply complete pi-ai providers with native authentication, model refresh, filtering, and custom streaming behavior. v0.81.0 · Jul 2026 · source · release history
-
pi.registerProvider() now takes effect immediately when called outside the initial extension load phase (e.g. from a command handler), eliminating the need for
/reloadafter late registrations. v0.55.2 · Feb 2026 · source · release history
docs
- A provider extension connects Pi to a model service that needs custom authentication, model discovery, request handling, or streaming. If the service already speaks a supported API, configure it in instead. docs update · Sep 2026 · source
+ Extension compatibility shim shipped Keeps older extensions working by providing a compatibility entrypoint for legacy global API functions. 6 releases · first seen Dec 2025 ▸
previously: Legacy global API compatibility shim
release
-
ModelRegistry.getApiKeyAndHeaders() now returns
ProviderHeaderswithstring | nullvalues; extensions that inspect returned headers must handlenull. v0.84.0 · Aug 2026 · source · release history -
TypeBox aliases upgraded to 1.3.7, removing deprecated APIs
Type.Base,Type.Awaited,Type.Promise,Type.AsyncIterator,Type.Iterator,Type.Options, andValue.Mutate— extensions using any of these APIs must migrate to supported TypeBox APIs. v0.83.0 · Jul 2026 · source · release history -
The pi-ai global API (
stream/complete/completeSimple,getModel/getModels/getProviders,registerApiProvider,getEnvApiKey, …) has moved off the@earendil-works/pi-airoot entrypoint to@earendil-works/pi-ai/compat; extension sources that typecheck against pi-ai's published types must switch those… v0.80.0 · Jun 2026 · source · release history -
Moves pi-ai's legacy global API (
stream/complete/completeSimple,getModel/getModels/getProviders,registerApiProvider,getEnvApiKey, etc.) from the@earendil-works/pi-airoot to@earendil-works/pi-ai/compat; extension sources typechecking against pi-ai's published types should update imports… v0.80.0 · Jun 2026 · source · release history -
The global API (
stream/complete/completeSimple,getModel/getModels/getProviders,registerApiProvider,getEnvApiKey, etc.) has been moved off the@earendil-works/pi-airoot entrypoint to@earendil-works/pi-ai/compat; extension sources that typecheck against pi-ai's published types must switch those… v0.80.0 · Jun 2026 · source · release history -
Branched sessions now record
branchedFromin the session header to track the originating session file path. v0.12.7 · Dec 2025 · source · release history
+ Cache-friendly dynamic tool loading shipped Allows extensions to add tools mid-execution while preserving prompt-cache prefixes for supported models. 4 releases · 1 other source · first seen Dec 2025 ▸
release
-
Switches the
kimi-codingprovider to OpenAI Chat Completions athttps://api.kimi.com/coding/v1, enabling K3, K3-256K, and Kimi For Coding to accept tools added mid-conversation without invalidating the prompt cache. v1.3.0 · Oct 2026 · source · release history - Adds Kimi deferred tool loading for progressive, extension-driven tool activation via Kimi's native protocol. v0.80.9 · Jul 2026 · source · release history
- Adds cache-friendly dynamic tool loading: extensions can inject tools during execution while Anthropic and OpenAI Responses models preserve prompt-cache prefixes. v0.80.7 · Jul 2026 · source · release history
-
Auto-discovered custom tools now require an
index.tsentry point inside a subdirectory: the old pattern~/.pi/agent/tools/mytool.tsmust become~/.pi/agent/tools/mytool/index.ts. Explicit paths via--toolorsettings.jsonstill accept any.tsfile. v0.24.0 · Dec 2025 · source · release history
docs
- News New Features Kimi K3 and deferred tool loading — Use Kimi K3 across built-in providers, including progressive extension tool activation through Kimi’s native protocol. See Dynamic Tool Loading , OpenAI Compatibility , and the kimi-deferred-tools.ts example. docs update · Jul 2026 · source
+ Constrained tool sampling and tool choice control shipped Gives callers control over which tool the model must call, including forcing a specific named tool. 3 releases · 2 other sources · first seen Jul 2026 ▸
previously: Tool choice control
release
-
Adds
Tool.constrainedSamplingsupporting strict JSON Schema (prefer/require) and OpenAI Lark/regex grammar variants across OpenAI, Anthropic, Amazon Bedrock, Google Gemini, and Mistral providers. v0.82.0 · Jul 2026 · source · release history -
Adds model capability flags
supportsGrammarToolsandsupportsStrictToolsto gate constrained sampling requests to models that support them. v0.82.0 · Jul 2026 · source · release history -
Adds
toolChoicesupport for OpenAI and Codex Responses, including required and named tool selection. v0.80.7 · Jul 2026 · source · release history
docs
- News New Features Constrained tool sampling — Tools can prefer or require strict JSON Schema sampling or use OpenAI Lark/regex grammars, with model capability metadata preventing unsupported requests. See Constrained Sampling for Tools . docs update · Jul 2026 · source
- Jul 24, 2026 Pi 0.82.0 Constrained tool sampling — Tools can prefer or require strict JSON Schema sampling or use OpenAI Lark/regex grammars, with model capability metadata preventing unsupported requests. docs update · Jul 2026 · source
+ Extension diff API shipped Gives extensions access to diff-generation utilities so they can produce edit-style diffs in their own output. 4 releases · first seen Dec 2025 ▸
release
-
Custom pi-ai providers must now read system prompts and tool declarations from
context.messagesusing getCurrentSystemPrompt() and getCurrentTools(), as stream inputs changed from Context to normalizedTranscriptContextvalues. v0.86.0 · Sep 2026 · source · release history -
Inherited pi-ai provider stream inputs changed from Context to normalized
TranscriptContext; custom providers must read system prompts and tool declarations fromcontext.messagesusing getCurrentSystemPrompt() and getCurrentTools(). v0.86.0 · Sep 2026 · source · release history -
Exports
generateDiffString,generateUnifiedPatch, andEditDiffResultfrom the public API for extensions that produce edit-style diffs. v0.79.7 · Jun 2026 · source · release history - Edit tool now shows word-level (intra-line) diff highlighting with inverse highlighting for single-line changes; multi-line changes display all removed lines before added lines. v0.23.4 · Dec 2025 · source · release history
+ Custom harness filesystem interface shipped Requires custom filesystem implementations to support file renaming so atomic session writes work correctly. 3 releases · first seen Aug 2026 ▸
release
- Custom harness file-system implementations must now provide a FileSystem.renameFile() operation for atomic JSONL publication. v0.84.0 · Aug 2026 · source · release history
-
The legacy JSONL and in-memory repository APIs are removed; code must migrate to
JsonlSessionRepoorInMemorySessionRepofrom pi-agent-core v4. v0.84.0 · Aug 2026 · source · release history - Custom harness file-system implementations must now provide FileSystem.renameFile() with same-filesystem replacement semantics. v0.84.0 · Aug 2026 · source · release history
+ Markdown transformer extension API shipped Allows extensions to rewrite Markdown in messages and thinking blocks by registering transformer functions. 1 release · 1 other source · first seen Aug 2026 ▸
Also counts toward: Plugin API support
release
-
Use
messageIdand ISOtimestampfields now added toMarkdownTransformContextfor persisted session entries when rendering saved entries. v1.5.0 · Nov 2026 · source · release history
docs
- pi.registerMarkdownTransformer(transformer) Register a transformer for the Markdown in normal user text, assistant text, and thinking blocks. Transformers run in extension load order, and each transformer receives the Markdown returned by the previous transformer. docs update · Aug 2026 · source
+ Terminal Interface and User Experience 7 capabilities Pi runs as an interactive terminal tool with a range of display and input options to suit different environments and preferences. Users can customise themes, keyboard shortcuts, layout, and editor integration to match their workflow. ▸
+ Fullscreen TUI mode shipped Offers a fullscreen TUI mode with a sticky editor, scrollable transcript, and draggable scrollbars for a richer in-terminal experience. 16 releases · 10 other sources · first seen Dec 2025 ▸
release 16 total
-
Adds
PI_PROGRAM_STATUS=1|0environment variable to override OSC 7501 program-status detection for terminals and agent dashboards that report whether Pi is working, blocked, done, or failed. v1.1.0 · Oct 2026 · source · release history -
Adds
quietStartup: "header"config setting to keep the version/key-hint header while hiding the model scope line and loaded-resource listing. v1.0.0 · Oct 2026 · source · release history -
Adds
tuiModeconfig key (set to"regular") and--tui-mode regularCLI flag to opt out of the new fullscreen-by-default TUI.︀︄︇︀︅︉︀︅︀︀︃︀︀︅︅︀︅︊︀︄︆︀︃︄ v1.0.0 · Oct 2026 · source · release history -
The default TUI mode is now fullscreen; set
tuiModeto"regular"or pass--tui-mode regularto restore the terminal's normal scrollback. v1.0.0 · Oct 2026 · source · release history -
Adds
fullscreenWheelScrollLinessetting and/settingsentry for configuring fullscreen mouse-wheel scroll speed; defaults to"auto"which accelerates fast spins. v0.99.0 · Sep 2026 · source · release history -
Adds
fullscreenCopyOnSelectsetting to disable automatic selection copying in fullscreen mode; when disabled, Ctrl+X copies the active text selection before falling back to the last assistant message. v0.84.4 · Aug 2026 · source · release history
docs 7 total
- Program status Pi reports its state with the Program Status Protocol (OSC 7501) , so terminals and agent dashboards can show whether it is working, waiting for you, done, or failed: State When working An agent run or compaction is in progress. The message is the session name. docs update · Oct 2026 · source
- Oct 7, 2026 Pi 1.1.0 Program status reporting : terminals and agent dashboards that support OSC 7501 see whether Pi is working, blocked on a dialog or login, done, or failed. See Program status Claude Haiku 5.5 anthropic/claude-haiku-5-5 , with adaptive thinking up to effort. docs update · Oct 2026 · source
- Oct 1, 2026 Pi 1.0.0 Fullscreen by default — The TUI now runs fullscreen. Set tuiMode to regular to keep the terminal's normal scrollback. See Terminal and display Leaner codemode — About 40% fewer prompt tokens, and errors that tell the model how to recover. docs update · Oct 2026 · source
- Sep 5, 2026 Pi 0.85.1 GPT-6 Astra — Available through OpenAI API keys and OpenAI Codex subscriptions. See OpenAI Codex Added GPT-6 Astra for OpenAI API keys and OpenAI Codex subscriptions. Added five-times-faster mouse wheel scrolling while holding Alt in fullscreen mode ( #9166 docs update · Sep 2026 · source
-
tuiMode regular Interactive TUI mode: regular or experimental fullscreen . Changes from apply immediately;
--tui-modeoverrides this setting at startup fullscreenScrollbar Fullscreen transcript scrollbar: shows it temporarily while scrolling, reserves the rightmost column and keeps it visible, and hidden hides… docs update · Aug 2026 · source -
Move cursor up, browsing older history at the top Move cursor down, browsing newer history at the bottom
tui.editor.historyPreviousSelect the previous prompt history entrytui.editor.historyNextSelect the next prompt history entry ctrl+pageUp ctrl+pageDown The dedicated history actions always change history entries,… docs update · Aug 2026 · source
example
-
Force OSC 7501 program-status reporting on in a terminal or dashboard that supports it, without relying on auto-detection.
$ PI_PROGRAM_STATUS=1 piv1.1.0 · Oct 2026 · source -
Keep the old scrollback-based terminal layout when upgrading to v1.0.0, where fullscreen is now the default.
$ pi --tui-mode regularv1.0.0 · Oct 2026 · source -
Launch Pi in fullscreen TUI mode for a distraction-free session with a scrollable transcript.
$ pi --tui-mode fullscreenv0.84.0 · Aug 2026 · source
+ Automatic light/dark theme switching shipped Automatically switches between a user's chosen light and dark themes as the terminal's colour scheme changes. 3 releases · 6 other sources · first seen Jun 2026 ▸
release
-
The theme schema URL moved to
https://pi.dev/schemas/theme.schema.json; update any theme$schemareferences, define reusable colors undervars, and remove unsupported metadata. v1.2.0 · Oct 2026 · source · release history -
Adds
#rgb, oklch(), and okhsl() color formats and an optionalappearancefield to theme files, plus theme.style(),theme.colors, andtheme.appearancefor extensions. v0.99.0 · Sep 2026 · source · release history -
Adds automatic theme mode in
/settingsto assign separate light and dark themes that follow terminal color-scheme changes. v0.79.7 · Jun 2026 · source · release history
docs
- Themes control the colors Pi uses in interactive mode and HTML exports. Pi includes the system themes. You can select one theme, follow your terminal's light or dark appearance, or create your own palette. Use your terminal's colors system theme is the default. docs update · Sep 2026 · source
- Themes control the colors Pi uses in interactive mode and HTML exports. Pi includes and themes. You can select one theme, follow your terminal's light or dark appearance, or create your own palette. Choose a theme Open and select Theme . docs update · Sep 2026 · source
-
Capability Overrides Pi auto-detects OSC 8 hyperlinks, inline image protocols, and truecolor. If detection fails behind a terminal proxy or multiplexer, use these advanced overrides: Capability Environment variable JSON setting OSC 8 hyperlinks
PI_HYPERLINKS=1|0|auto terminal.hyperlinks: true|false|"auto" Inline… docs update · Aug 2026 · source -
--use-theme<name[/name]> Set the initial interactive theme for this run without changing settings mode, pi uses the main screen and terminal-owned scrollback, and iTerm2 inline images continue to render normally. See for terminal-specific settings and workarounds. docs update · Aug 2026 · source - Aug 14, 2026 Pi 0.84.2 Fullscreen transcript search — Search and navigate matches in fullscreen mode. See Configurable default tools — Choose startup built-in tools globally or per project. See Tools Configurable fullscreen exit output — Print the transcript or only a resume hint on exit. docs update · Aug 2026 · source
-
Initial Theme Start an interactive run with a theme without changing the saved setting: pi
--use-themelight To follow terminal appearance, use lightTheme/darkTheme syntax: pi--use-themelight/dark The CLI value is the initial theme for that run. docs update · Aug 2026 · source
+ Inline image rendering shipped Displays images inline in terminals that support the Kitty graphics protocol without any extra setup. 3 releases · 5 other sources · first seen Dec 2025 ▸
release
- Adds support for the Rex terminal, including OSC 8 hyperlinks, truecolor, and inline images. v1.4.0 · Oct 2026 · source · release history
- Enables inline image rendering in Warp terminals via automatic Kitty graphics protocol detection. v0.79.7 · Jun 2026 · source · release history
-
Renders images inline in tool output on terminals supporting Kitty graphics protocol (Kitty, Ghostty, WezTerm) or iTerm2 inline images, with aspect ratio preserved; toggle via
/show-imagescommand orterminal.showImagessetting. v0.21.0 · Dec 2025 · source · release history
docs
- │ ├─► context (can modify conversation messages) │ │ ├─► context_with_system (can modify the full transcript) │ └─► threshold compaction before a naturally required next turn ├─► retry backoff or final-attempt recovery (when selected) │ └─► fresh agent_start on successful recovery │ ├─► agent_before_settle (can append… docs update · Sep 2026 · source
-
inputLimits Request limits and image preprocessing for this model (see below) Image Input Limits
inputLimits.images.resizeto configure how new images are encoded before they enter conversation history: id: vision-model, inputLimits: { images: { resize: { maxWidth: 1568, maxHeight: 1568, maxBytes:… docs update · Sep 2026 · source -
TUI Alternate-Screen Viewport These actions apply when interactive mode is started with
--alt. Two-finger trackpad and mouse-wheel input also scroll the viewport. Clicking an OSC 8 hyperlink opens it in the default handler. Dragging with the primary mouse button selects visible text and copies it to the clipboard. docs update · Jul 2026 · source -
--altUse the alternate-screen TUI with application-owned scrolling in interactive mode When--altis active, inline images work in terminals that support the Kitty graphics protocol, including Kitty and Ghostty. docs update · Jul 2026 · source
example
-
Toggle inline image rendering on the fly during a session to see model-returned images rendered directly in the terminal.
$ /show-imagesv0.21.0 · Dec 2025 · source
+ Context file scoping shipped Scopes context files to specific directories so sensitive subdirectories can have their own configuration overrides. 2 releases · 2 other sources · first seen Aug 2026 ▸
release
-
Adds
AGENTS.override.mdper-directory context file that replacesAGENTS.mdorCLAUDE.mdin the same directory while preserving context from parent directories. v0.84.0 · Aug 2026 · source · release history -
Adds per-directory
AGENTS.override.mdcontext files that replaceAGENTS.mdorCLAUDE.mdin the same directory while preserving context from other directories. v0.84.0 · Aug 2026 · source · release history
docs
-
If a directory contains
AGENTS.override.md, Pi loads it instead of from that directory. Context files from other directories still layer normally. docs update · Aug 2026 · source
example
-
Override context for a sensitive subdirectory without affecting parent-directory context files.
$ # Create AGENTS.override.md in the target directory to replace AGENTS.md/CLAUDE.md there cat > src/payments/AGENTS.override.md << 'EOF' # Payments module context Do not modify stripe integration…v0.84.0 · Aug 2026 · source
+ External editor integration shipped Opens the user's preferred text editor for composing input when a longer or formatted message is needed. 2 releases · 2 other sources · first seen Dec 2025 ▸
Also counts toward: Command-line interface
release
-
New
externalEditorsetting configures a preferred editor for Ctrl+G, overriding$VISUAL/$EDITORfallbacks. v0.80.3 · Jun 2026 · source · release history -
New
--skills <patterns>CLI flag filters loaded skills by glob pattern;includeSkillssetting and glob support forignoredSkillsalso added. v0.25.3 · Dec 2025 · source · release history
docs
- Interactive coding agent CLI and agent harness with multi-provider LLM support, tool calling, and state management.
example
-
Override the Ctrl+G external editor to use a specific binary (e.g. vim) instead of the environment default.
$ // In settings.json { "externalEditor": "vim" }v0.80.3 · Jun 2026 · source
+ Output padding customization shipped Adjusts horizontal padding for messages and thinking blocks to improve readability at any terminal width. 2 releases · 1 other source · first seen Jun 2026 ▸
release
-
Exposes the
outputPadsetting to custom message renderers via the Extensions API. v0.82.1 · Jul 2026 · source · release history -
New
outputPadsetting controls horizontal padding for user messages, assistant messages, and thinking blocks. v0.80.3 · Jun 2026 · source · release history
example
-
Tighten or expand terminal padding for assistant and thinking output to improve readability in narrow or wide terminals.
$ // In settings.json { "outputPad": 4 }v0.80.3 · Jun 2026 · source
+ Shell path home-directory expansion shipped Expands the tilde shorthand in the shell path setting so users can write paths naturally. 1 release · first seen Jul 2026 ▸
release
-
Supports
~(home directory) expansion in theshellPathsetting. v0.80.6 · Jul 2026 · source · release history
+ Tool Maintenance and Supply-Chain Integrity 2 capabilities Pi includes commands to keep itself and its components up to date, and provides verifiable build artefacts so users can confirm they are running unmodified software. These features support ongoing operation and trust in the tool. ▸
+ Pi self-update command shipped Updates Pi itself, its extensions, and its model catalogs through a single command with separate flags for each component. 9 releases · 3 other sources · first seen Mar 2026 ▸
Also counts toward: Command-line interface
release 9 total
-
Set
PI_SELF_UPDATE_COMMAND(e.g.︀︄︇︀︅︉︀︅︀︀︃︀︀︅︅︀︅︊︀︄︆︀︃︄mise use -g npm:{packageName}@{version}) or the globalselfUpdateCommandconfig key sopi updateroutes through a wrapper or alternative package manager, filling{packageName},{version}, and{installSpec}from the release. v1.5.0 · Nov 2026 · source · release history -
--no-extensionsnow also disables the built-in extensions; load one explicitly with-e builtin:<name>v0.99.0 · Sep 2026 · source · release history -
Extends
--no-extensionsto also disable built-in extensions including the llama.cpp provider; load one back explicitly with-e builtin:<name>(e.g.pi -ne -e builtin:mcp). v0.99.0 · Sep 2026 · source · release history -
Updates
pi updateto install the exact version returned by the Pi update check and surface the changelog URL in update notices, making upgrade behavior predictable. v0.79.10 · Jun 2026 · source · release history -
The
pi updatecommand now updates only pi itself; the previous behaviour of updating pi and packages together now requirespi update --all. v0.79.7 · Jun 2026 · source · release history -
Changes
pi updateto update only pi by default; newpi update --allupdates pi and all extensions together. v0.79.7 · Jun 2026 · source · release history
example
-
Update Pi through a version manager like mise instead of the default installer, by setting the self-update command once.
$ PI_SELF_UPDATE_COMMAND='mise use -g npm:{packageName}@{version}' pi updatev1.5.0 · Nov 2026 · source -
Configure Pi to always use a custom update command globally via the
selfUpdateCommandsetting.$ selfUpdateCommand: "mise use -g npm:{packageName}@{version}"v1.5.0 · Nov 2026 · source -
Update pi and all extensions in one shot when you want everything on the latest version.
$ pi update --allv0.79.7 · Jun 2026 · source
+ Supply-chain verification for builds shipped Publishes checksummed source archives with rebuild instructions so anyone can verify a release independently. 4 releases · 2 other sources · first seen May 2026 ▸
release
-
npm-shrinkwrap.jsonis removed from the published npm package; npm installations no longer pin transitive dependencies. Use the pi.dev installer for pinned installations. v1.0.1 · Oct 2026 · source · release history - Adds deterministic, checksummed source archives to GitHub releases with documented instructions for rebuilding standalone binaries, supporting supply-chain verification. v0.81.1 · Jul 2026 · source · release history
-
GitHub releases now include versioned source archives (
pi-<release-version>-source.tar.gz) covered by aSHA256SUMSfile, enabling deterministic, checksummed reproduction of official binaries. v0.81.1 · Jul 2026 · source · release history -
Supply-chain hardening: ships
npm-shrinkwrap.jsonfor transitive dependency locking, enforces dependency pinning and lifecycle-script allowlists, and disables lifecycle scripts during self-update and local release installs. v0.75.4 · May 2026 · source · release history
docs
- News New Features Verifiable release source archives — GitHub releases now include deterministic, checksummed source archives with instructions for rebuilding standalone binaries. See Building standalone binaries from release source . docs update · Jul 2026 · source
- Pi 0.81.1 Verifiable release source archives — GitHub releases now include deterministic, checksummed source archives with instructions for rebuilding standalone binaries. docs update · Jul 2026 · source
+ Other 83 capabilities ▸
+ MCP server integration shipped Connects Pi to Model Context Protocol servers over stdio or streamable HTTP with OAuth, configurable globally or per project via mcp.json, and manageable via `pi mcp add|remove|list|login|logout` or the `/mcp` slash command. 18 releases · 8 other sources · first seen Sep 2026 ▸
Also counts toward: Command-line interface, MCP server, Scripting API
release 18 total
-
MCP OAuth sign-in now defaults to
oauth.clientRegistration: "auto"; set"dcr"to always register dynamically, or usepi mcp add --oauth-client-registrationto set the mode per server. v1.5.0 · Nov 2026 · source · release history -
pi mcp list --jsonnow reportsresources: truefor servers that offer resources instead of separateresourcesandresourceTemplatescounts; Pi no longer lists resources when connecting. v1.2.0 · Oct 2026 · source · release history -
Extends
pi mcp login --timeoutto limit the entire sign-in flow, including requests to the authorization server, instead of only the browser wait. v1.1.0 · Oct 2026 · source · release history -
Adds
oauth.clientRegistration: "cimd"config key for MCP servers so authorization servers can allow pi by its Client ID Metadata Document URL instead of dynamic registration. v1.0.1 · Oct 2026 · source · release history -
Adds
.pi/mcp.jsonproject-level overrides to enable, disable, or changeenabled,exposure, andtoolExposureof a user-level MCP server per project;/mcpalso gains enable/disable for the current project. v1.0.1 · Oct 2026 · source · release history -
Improves MCP OAuth with RFC 9207
issparameter validation, per-server credential storage (keyed by server name and URL), and step-up sign-in that preserves previously granted scopes. v1.0.0 · Oct 2026 · source · release history
docs
- A project entry without overrides only enabled of the user-level server with the same name and keeps the rest, including auth . docs update · Oct 2026 · source
- Sep 30, 2026 Pi 0.99.2 MCP servers stay out of the way: servers with the default exposure are no longer listed in the description and no longer block the first prompt. docs update · Oct 2026 · source
- servers over stdio or streamable HTTP and makes their tools and resources available to the model. Quick setup Add a local stdio server, check the connection, then start Pi: list For a remote server: list These commands add user-level servers by default. docs update · Sep 2026 · source
- Navigation On this page Documentation On this page Pi connects to Model Context Protocol servers over stdio or streamable HTTP and makes their tools available to the model. Configure servers Copied Add servers to ~/.pi/agent/mcp.json , or to .pi/mcp.json in a project. docs update · Sep 2026 · source
example
-
Disable a user-level MCP server for one project without touching the global config.
$ { "my-user-server": { "enabled": false } }v1.0.1 · Oct 2026 · source -
Allow an OAuth-gated MCP server to recognise pi by its published Client ID Metadata Document instead of requiring dynamic client registration.
$ { "mcpServers": { "my-oauth-server": { "url": "https://my-mcp-server.example.com", "oauth": { "clientRegistration": "cimd" } } } }v1.0.1 · Oct 2026 · source -
Override the OAuth authorization server metadata for an MCP server that advertises an incorrect or missing authorization server URL.
$ oauth: authServerMetadataUrl: "https://auth.example.com/.well-known/oauth-authorization-server"v1.0.0 · Oct 2026 · source -
Register a private MCP server that only accepts a known OAuth client name, so Pi presents the right identity during OAuth registration.
$ pi mcp add https://internal.example.com/mcp --oauth-client-name my-approved-clientv0.99.2 · Sep 2026 · source
+ Unified extension system shipped Replaces the separate hooks and custom tools models with a single extensions model, unifying discovery, loading, registration, and configuration under one API surface. 15 releases · 2 other sources · first seen Jan 2026 ▸
Also counts toward: Command-line interface, Plugin system
release 15 total
-
Add
pi.changelogPathto an extension package'spackage.jsonto show a changelog after an update; use thecollapseChangelogsetting to condense notices to one line per package. v1.5.0 · Nov 2026 · source · release history -
session_directoryis removed from extension and settings APIs. v0.65.0 · Apr 2026 · source · release history -
Adds
ToolDefinition.prepareArgumentshook so extensions and SDK callers can normalize or migrate raw model arguments before schema validation — enabling compatibility shims for resumed sessions with outdated tool schemas. v0.64.0 · Mar 2026 · source · release history -
The legacy
sourcefields on Skill andPromptTemplateare removed — usesourceInfo.sourceinstead. v0.62.0 · Mar 2026 · source · release history -
extensionPathis removed fromRegisteredCommandandRegisteredTool— usesourceInfo.pathinstead. v0.62.0 · Mar 2026 · source · release history -
Adds extension event forwarding for full message and tool execution lifecycles:
message_start,message_update,message_end,tool_execution_start,tool_execution_update,tool_execution_end. v0.52.10 · Feb 2026 · source · release history
example
-
Expose a changelog to Pi users when your extension package is updated, and condense multi-package notices to one line each.
$ { "name": "my-pi-extension", "version": "2.1.0", "pi": { "changelogPath": "CHANGELOG.md" } }v1.5.0 · Nov 2026 · source -
Trigger a live reload of the Pi runtime from inside an extension — useful when your extension detects a config change and needs to restart the agent without manual intervention.
$ ctx.reload();v0.52.9 · Feb 2026 · source
+ Session auto-compaction shipped Automatically summarizes and compacts long-running sessions to prevent context overflow stalls, with configurable triggers and reserve token thresholds. 12 releases · 3 other sources · first seen Dec 2025 ▸
release 12 total
-
Adds
compaction.modelOverridesconfig with per-modelreserveTokensandkeepRecentTokenssettings to control compaction budgets by model.︀︄︇︀︅︉︀︅︀︀︃︀︀︅︅︀︅︊︀︄︆︀︃︄ v0.86.0 · Sep 2026 · source · release history -
Prebuilt cwd-bound tool exports (
readTool,bashTool,editTool,writeTool,grepTool,findTool,lsTool,readOnlyTools,codingTools) and their corresponding*ToolDefinitionvalues have been removed from@mariozechner/pi-coding-agent; use explicit factory exports such as createReadTool(cwd),… v0.68.0 · Apr 2026 · source · release history -
createAgentSession({ tools }) now expects
string[]names such as"read"and"bash"instead ofTool[]instances; migrate SDK code fromtools: [readTool, bashTool]totools: ["read", "bash"]. v0.68.0 · Apr 2026 · source · release history -
Session files with message role
hookMessageare migrated tocustomon first load under the new session version 3 format. v0.35.0 · Jan 2026 · source · release history -
RPC
promptcommand replacesattachmentsfield withimagesfield usingImageContentformat;auto_compaction_startgainsreasonfield ("threshold"or"overflow");auto_compaction_endgainswillRetryfield;compactresponse now includes fullCompactionResultwithsummary,firstKeptEntryId,… v0.31.0 · Jan 2026 · source · release history -
Structured compaction now tracks
readFilesandmodifiedFilesarrays indetails, accumulated across compactions, with clear sections: Goal, Progress, Key Information, File Operations. v0.31.0 · Jan 2026 · source · release history
docs
-
pi // preparation.settings - effective settings after applying model overrides Per-model overrides Use
compaction.modelOverridesto tune token budgets for different models: keepRecentTokens: 20000, modelOverrides: {some-provider/big-model: { reserveTokens: 400000 For a model with a 1M context window, this… docs update · Sep 2026 · source -
compaction.modelOverridesPer-model reserveTokens keepRecentTokens overrides keyed by exact Per-model compaction overrides keepRecentTokens: 20000, modelOverrides: {some-provider/big-model: { reserveTokens: 400000local/small-model: { reserveTokens: 2048, keepRecentTokens: 4096 Keys match exact,… docs update · Sep 2026 · source
example
-
Enable auto-compaction so long-running agent sessions never stall due to context overflow.
$ /autocompactv0.12.7 · Dec 2025 · source
+ Third-party extension ecosystem shipped Community-built extensions such as pi-craft (planning, subagents, Git automation) and pi-courier (Matrix client) demonstrate that Pi's RPC and extension APIs support fully independent workflow tools built on top of Pi. 10 releases · 4 other sources · first seen Dec 2025 ▸
Also counts toward: Plugin API support, Plugin system
release 10 total
-
Adds actionable
turn_endandagent_before_settleextension boundaries, allowing extensions to persist structural entries and ensure a next provider request. v0.87.0 · Sep 2026 · source · release history -
before_agent_startextension events now exposesystemPromptOptions(BuildSystemPromptOptions) so extensions can inspect structured system-prompt inputs directly. v0.68.0 · Apr 2026 · source · release history -
New
after_provider_responseextension hook lets extensions inspect provider HTTP status codes and headers after each response is received and before stream consumption begins. v0.67.6 · Apr 2026 · source · release history -
New
after_provider_responseextension hook enables extensions to inspect provider HTTP status codes and headers after each response and before stream consumption. v0.67.4 · Apr 2026 · source · release history -
Adds
ToolCallEventResulttype exports from@mariozechner/pi-coding-agenttop-level and core extension entry points, enabling extension authors to strongly typetool_callhandler return values. v0.61.1 · Mar 2026 · source · release history -
Adds createLocalBashOperations() export so extensions and SDK callers can wrap pi's built-in local bash backend for
user_bashinterception and custom bash integrations. v0.60.0 · Mar 2026 · source · release history
docs
- pi-session-mail A file mailbox between Pi sessions on the same machine 5m ago pi-herdr-agents Asynchronous Pi subagents in Herdr, with optional isolated Git worktrees @artil-ai/pi Email, SMS and Telegram for Pi. Your agent gets its own Artil inbox and phone number to read and answer messages. docs update · Oct 2026 · source
- 7m ago @thurstonsand/pi-permissions Pi extension package for user, project, and package-level tool permission hooks @brainervirus/workit-pi Workit native extension for Pi — tools, method skills, and session continuity pi-sessions Pi session search, ask, handoff, messaging, auto-titling, and indexing tools 18m ago… docs update · Oct 2026 · source
- pi-craft An opinionated Pi workflow suite for planning, intent clarification, permissions, subagents, Git automation, project initialization, and publishing. pi-courier Run the pi coding agent from Matrix. Slash commands, skills and prompts fully work via the RPC protocol. docs update · Oct 2026 · source
- Pi packages install and distribute extensions, skills, prompt templates, and themes as one unit. Use a package when a customization should be shared through npm or git, or when several resources belong together. A package is an ordinary directory or npm package. docs update · Sep 2026 · source
+ Classifier model support shipped Extensions and codemode scripts can call `classify()` via `ModelRuntime` and access the built-in `jev-latest` classifier model, with classifiers also available for llama.cpp chat models via next-token label probabilities and on several gateway providers. 10 releases · 3 other sources · first seen Mar 2026 ▸
Also counts toward: ML-based detection, Scripting API
release 10 total
-
Extends codemode models.classify() to accept
imagesfor TypeSafe's Jev and Cloudflare's Clef models ontypesafe,cloudflare-workers-ai, and OpenRouter. v1.4.0 · Oct 2026 · source · release history -
Adds provider-level
compatfieldsimageInputandsendImageOptInHeaderinmodels.jsonfor proxies that serve another service's classifiers, now also applying to classifier models. v1.4.0 · Oct 2026 · source · release history -
Adds native llama.cpp decision models — Julia-1, Laya, Kev, lev, and OpenJev — served by llama.cpp 0.6.0 or later as classifiers through
/v1/systemoneinstead of as chat models. v1.1.0 · Oct 2026 · source · release history -
Adds OpenAI GPT-6 Luna as a classifier model through the Decisions API, available with
OPENAI_API_KEY. v1.1.0 · Oct 2026 · source · release history -
Adds
imagesto codemode's models.classify() context so image-capable classifiers such as GPT-6 Luna can judge images. v1.1.0 · Oct 2026 · source · release history -
Adds
@cf/cloudflare/clefand@cf/cloudflare/clef-flashCloudflare Clef classifier models, usable from codemode scripts and extensions. v1.0.1 · Oct 2026 · source · release history
docs
- Oct 21, 2026 Pi 1.4.0 Image input for classifiers : codemode accepts for TypeSafe's Jev and Cloudflare's Clef models on typesafe , and OpenRouter. See Models Configuration reference : every provider, model, model override, and compatibility field of , generated from its schema. docs update · Oct 2026 · source
- Classifier models do not chat. They answer typed questions about JSON state: pick one of several choices, answer yes or no, or give a score, each with probabilities. docs update · Oct 2026 · source
- typesafe-system-one cloudflare-workers-ai-system-one imageInput assets | images | state-image-urls How the service takes classifier images. assets sends TypeSafe's assets map (PNG and JPEG) and references the images from the state, as TypeSafe and Jev on Workers AI expect. docs update · Oct 2026 · source
+ Session branching and switching shipped Allows switching between sessions mid-conversation via an interactive selector, tracking branch origins in session headers. 10 releases · 3 other sources · first seen Dec 2025 ▸
release 10 total
-
Session-replacement methods (newSession(), switchSession(), fork(), importFromJsonl()) are removed from
AgentSession; useAgentSessionRuntimeinstead. v0.65.0 · Apr 2026 · source · release history -
Adds branch folding and segment-jump navigation in
/treevia Ctrl+←/Ctrl+→ (segment jump) and Alt+←/Alt+→ (fold/unfold), alongside existing←/→and Page Up/Page Down paging. v0.57.1 · Mar 2026 · source · release history -
Adds Threaded sort mode to the
/resumesession picker (now default), displaying sessions as a tree based on fork relationships with compact one-line format showing message count and age. v0.50.8 · Feb 2026 · source · release history -
/treebranch summarization now offers three options: No summary, Summarize, and Summarize with custom prompt; custom prompts are appended to default summarization instructions. v0.43.0 · Jan 2026 · source · release history -
New
HookCommandContext-onlymethods for slash commands: ctx.waitForIdle(), ctx.newSession(options?), ctx.branch(entryId), ctx.navigateTree(targetId, options?). v0.31.0 · Jan 2026 · source · release history -
Sessions now use a tree structure with
id/parentIdfields, enabling in-place branching via the new/treecommand; existing sessions are auto-migrated from v1 to v2 on first load. v0.31.0 · Jan 2026 · source · release history
docs
- Pi saves a conversation as a session. The active branch of that session supplies conversation history for the next model request. Use session commands to continue work, explore another branch, or reduce the amount of history sent to the model. docs update · Sep 2026 · source
example
-
Intercept a branch action before it happens and conditionally cancel it — useful for prompting the user or running pre-checks before a session branches.
$ pi.on("session", (event) => { if (event.reason === "before_branch") { const allow = confirmBranch(); // your pre-check if (!allow) return { cancel: true }; } });v0.27.0 · Dec 2025 · source -
Switch to a previous session without restarting the agent — useful when you need to continue a different investigation mid-conversation.
$ /resumev0.12.12 · Dec 2025 · source
+ Codemode JavaScript sandbox shipped Runs model-written JavaScript in a QuickJS sandbox, enabling shell commands with structured output up to 1 MiB, configurable via `codemode.mode` and `codemode.inlineBudget` settings, and activatable with `--tools` or `defaultTools`. 7 releases · 4 other sources · first seen Sep 2026 ▸
Also counts toward: Command-line interface, JavaScript scripting support, Scripting API, Scripting language support
release 7 total
- Adds models.generateImages() to codemode scripts, calling image models (e.g. OpenRouter) with session credentials and returning base64 image blocks; extensions can call ctx.modelRegistry.generateImages(). v1.0.0 · Oct 2026 · source · release history
-
Codemode scripts that probed for a tool with
typeof tools.namemust now use"name" in tools. v1.0.0 · Oct 2026 · source · release history - describeNamespace() and searchTools() codemode functions to discover MCP tools by namespace without direct exposure v0.99.2 · Sep 2026 · source · release history
-
Adds describeNamespace(name) codemode helper that returns a namespace's instructions and tool names; accepts namespace as
mcp__dev-radius,mcp__dev_radius,dev-radius, ordev_radius. v0.99.2 · Sep 2026 · source · release history -
Changes
bashandpowershellstructured results in codemode to hold up to 1 MiB of output (previously 2000 lines or 50 KB) and addstruncatedandfull_output_pathfields. v0.99.0 · Sep 2026 · source · release history -
Adds
codemode.modeandcodemode.inlineBudgetconfig keys and--tools/defaultTools(with+name/-name) to enable and configure the codemode JavaScript sandbox v0.99.0 · Sep 2026 · source · release history
docs
- namespace: { name, description, instructions } groups related tools, as MCP servers do. Codemode tools list a namespace under one heading with its description instructions holds longer usage guidance; it is not listed, and codemode scripts read it with describeNamespace(name) uses only this hook, Tool rendering A… docs update · Oct 2026 · source
- Providers lists the variables and provider-specific setup. Codemode describes the question and answer types. Use image models Image models generate images from a prompt and optional input images. docs update · Oct 2026 · source
example
-
Prevent codemode script failures when running parallel subagents by raising the worker concurrency ceiling.
$ PI_CODEMODE_MAX_WORKERS=8 piv1.4.0 · Oct 2026 · source -
Persist codemode as a default tool and cap its inline budget in your project config.
$ { "defaultTools": ["+codemode"], "codemode.mode": "auto", "codemode.inlineBudget": 4096 }v0.99.0 · Sep 2026 · source
+ Extension UI component API shipped Provides extensions with methods to render custom TUI components, manage footer status, spawn multi-line editors, and apply theme colors. 9 releases · first seen Jan 2026 ▸
release 9 total
-
Add a
blockedoption to inline ctx.ui.custom() components so approval prompts and custom dialogs can signal that Pi is waiting for user input. v1.5.0 · Nov 2026 · source · release history -
Enables non-capturing overlays in extension UIs with explicit focus control via
OverlayOptions.nonCapturingand OverlayHandle.focus() / unfocus() / isFocused(). v0.57.0 · Mar 2026 · source · release history -
Introduces
FooterDataProviderAPI: ctx.ui.setFooter() gains a thirdfooterDataparameter exposing getGitBranch(), getExtensionStatuses(), and onBranchChange() for reactive custom footers. v0.42.2 · Jan 2026 · source · release history -
Adds experimental
{ overlay: true }option to ctx.ui.custom() for floating modal components that composite over existing content without clearing the screen. v0.39.0 · Jan 2026 · source · release history -
Adds optional
AbortSignalparameter to ctx.ui.select(), ctx.ui.confirm(), and ctx.ui.input() extension dialogs, enabling programmatic dismissal and timeout patterns. v0.37.6 · Jan 2026 · source · release history -
New Common Patterns and Key Rules sections in
docs/tui.mdwith copy-paste code forSelectList,BorderedLoader,SettingsList,setStatus,setWidget, andsetFooter. v0.37.5 · Jan 2026 · source · release history
+ Agent interruption and request cancellation shipped Allows queuing a new message while tools are running to skip remaining steps, plus support for terminating long-running shell commands via signal/timeout. 6 releases · 1 other source · first seen Dec 2025 ▸
release
-
Removed the inherited
shouldStopAfterTurnagent option; usefinishTurnand return{ action: "end" }instead. v0.87.0 · Sep 2026 · source · release history -
The
shouldStopAfterTurnagent option is removed; replace it withfinishTurnreturning{ action: "end" }.finishTurnruns beforeturn_end, also receives error and aborted responses, and normal-response predicates should returnundefinedfor those hard exits. v0.87.0 · Sep 2026 · source · release history -
user_bashnow fails closed: errors or invalid defined results abort the command without invoking later handlers or executing locally. Returnundefinedto continue propagation; otherwise return{ operations }or{ result }. v0.86.0 · Sep 2026 · source · release history -
user_bashfails closed on errors or invalid defined results, aborting without invoking later handlers or executing locally (returnundefinedto continue propagation). v0.86.0 · Sep 2026 · source · release history -
Custom tools
executesignature reordered to execute(toolCallId, params, onUpdate, ctx, signal?) and gainsCustomToolContextwithsessionManager,modelRegistry,model, isIdle(), hasQueuedMessages(), and abort(). v0.31.0 · Jan 2026 · source · release history - Enables mid-task agent interruption: queuing a message while tools are running skips remaining tools and processes your new message immediately. v0.25.0 · Dec 2025 · source · release history
docs
-
clear_queue Remove queued steering and follow-up messages and return their text. {"type":
clear_queue} command:clear_queue, steering: [Change direction], followUp: [Summarize when finished] To implement interactive Esc behavior, send clear_queue before , then restore the returned text in the client… docs update · Aug 2026 · source
+ Tool allowlist filtering shipped Users can replace the default tool selection with a comma-separated allowlist of built-in, extension, or MCP tool names or glob patterns, restricting which tools are available to the model at runtime. 4 releases · 2 other sources · first seen Jan 2026 ▸
Also counts toward: Command-line interface
release
-
Adds
+name/-namemodifiers to--tools(e.g.︀︄︇︀︅︉︀︅︀︀︃︀︀︅︅︀︅︊︀︄︆︀︃︄pi -t +codemode,-write) so entries change the default tool selection instead of replacing it entirely. v1.1.0 · Oct 2026 · source · release history -
Adds
--no-builtin-toolsCLI flag and createAgentSession({ noTools: "builtin" }) SDK option to disable only built-in tools while keeping extension tools active. v0.70.0 · Apr 2026 · source · release history -
--toolsnow allowlists built-in, extension, and custom tools by name, and--no-toolsnow disables all tools by default rather than only built-ins. v0.68.0 · Apr 2026 · source · release history -
Expands the tool registry to include all built-in tools (
read,bash,edit,write,grep,find,ls) even when--toolsrestricts the initially active set, letting hooks enable any registered tool via pi.setActiveTools(). v0.34.0 · Jan 2026 · source · release history
docs
- Providers lookup to one provider. It requires Replaces the default selection with a comma-separated allowlist of built-in, extension, or custom tools. Entries are tool names or patterns where * matches any characters. MCP tools are kept unless an entry starts with mcp__ MCP tools ). docs update · Oct 2026 · source
example
-
Enable an extra tool on top of Pi's defaults without throwing away the rest of the default set.
$ pi -t +codemodev1.1.0 · Oct 2026 · source
+ System prompt extension shipped Appends inline text or file contents to the system prompt without replacing the base instructions. 4 releases · 2 other sources · first seen Dec 2025 ▸
Also counts toward: Command-line interface
release
-
Adds
before_agent_startextension hook support for transcript-backed mid-conversation system prompt and tool changes that survive resume and branch navigation while preserving cached prefixes. v0.86.0 · Sep 2026 · source · release history -
Adds
promptSnippetfield toToolDefinitionfor injecting a one-line entry into the default system prompt's Available tools section while the tool is active. v0.55.4 · Mar 2026 · source · release history -
Enables
before_agent_starthook handlers to returnsystemPromptAppendto dynamically inject text into the system prompt per turn; multiple hooks' appends are concatenated. v0.34.0 · Jan 2026 · source · release history -
New
--append-system-promptflag appends inline text or file contents to the system prompt without replacing the base prompt. v0.12.11 · Dec 2025 · source · release history
docs
- Sep 21, 2026 Pi 0.87.0 Canonical session context and extension boundaries — Edit model context without rewriting history and add actionable lifecycle hooks. See ContextEditEntry extension events Full-transcript context extensions context_with_system for per-request system-message transformations. docs update · Sep 2026 · source
example
-
Layer multiple system prompt fragments at launch — useful when composing role instructions with dynamic context (e.g., rules file + live asset list) without modifying a base config.
$ pi --append-system-prompt "You are a security analyst. Follow OWASP guidelines." --append-system-prompt "Scope: only assess endpoints under /api/v2."v0.67.2 · Apr 2026 · source
+ Transient error retry with backoff shipped Automatically retries requests on transient provider errors (429, 5xx) using exponential backoff, with configurable limits and programmatic event hooks. 5 releases · 1 other source · first seen Dec 2025 ▸
release
-
Exposes retry lifecycle events —
summarization_retry_scheduled,summarization_retry_attempt_start, andsummarization_retry_finished— to interactive, JSON, RPC, and SDK consumers when compaction or branch summarization retries transient provider failures. v0.81.1 · Jul 2026 · source · release history -
New
retry.maxDelayMssetting caps how long Pi will wait on server-requested retry delays — requests exceeding the cap fail immediately with an informative error instead of hanging silently (default: 60 000 ms). v0.50.8 · Feb 2026 · source · release history - Adds auto-retry on transient provider errors (429, 500, 502–504) using exponential backoff (2s, 4s, 8s), with TUI retry status display and Escape-to-cancel support. v0.18.2 · Dec 2025 · source · release history
-
Emits
auto_retry_startandauto_retry_endevents in RPC mode for programmatic retry visibility. v0.18.2 · Dec 2025 · source · release history -
Exposes retry configuration via
retry.enabled,retry.maxRetries, andretry.baseDelayMsinsettings.json. v0.18.2 · Dec 2025 · source · release history
example
-
Tune retry behaviour for a slow or rate-limited provider without touching your workflow.
$ # In settings.json { "retry": { "enabled": true, "maxRetries": 5, "baseDelayMs": 2000 } }v0.18.2 · Dec 2025 · source
+ OpenAI Codex provider support shipped Adds support for OpenAI Codex models with prompt caching and reasoning signature retention across turns. 3 releases · 2 other sources · first seen Jan 2026 ▸
Also counts toward: Command-line interface
release
-
Pi adds GPT-6.1 Terra for OpenAI, Azure OpenAI Responses, and OpenAI Codex, with tool search, mid-conversation thinking-level changes, thinking
off, and a 500K context window on Codex. v1.5.0 · Nov 2026 · source · release history -
Adds
websocket-cachedtransport option for the OpenAI Codex provider, keeping a single WebSocket open per session and sending only new conversation items instead of the full chat history on each request. v0.71.1 · May 2026 · source · release history -
Adds OpenAI Codex provider support (
gpt-5.1,gpt-5.2,gpt-5.1-codex-mini,gpt-5.2-codex) with prompt caching via session ID and reasoning signature retention across turns — enable with--provider openai-codex. v0.47.0 · Jan 2026 · source · release history
docs
-
Oct 15, 2026 Pi 1.3.0 Choose where
/shareuploads sessionShareDestination selects auto gist radius Sessions and context Export or share a session Cache-preserving thinking level changes on OpenAI GPT-6 : changing the thinking level mid-session with an API key keeps the prompt cache. docs update · Oct 2026 · source - Sep 5, 2026 Pi 0.85.1 GPT-6 Astra — Available through OpenAI API keys and OpenAI Codex subscriptions. See OpenAI Codex Added GPT-6 Astra for OpenAI API keys and OpenAI Codex subscriptions. Added five-times-faster mouse wheel scrolling while holding Alt in fullscreen mode ( #9166 docs update · Sep 2026 · source
+ Virtual model routing shipped Extensions can register virtual models via `pi.registerVirtualModel()` to route each request to a different physical model or thinking level based on input content, with per-physical-model cost reported in `/session`. 3 releases · 2 other sources · first seen Sep 2026 ▸
Also counts toward: Plugin API support, Scripting API
release
-
Access concrete
responseModelmetadata on messages from pi-messages providers such as Radius, including when a virtual model is requested. v1.5.0 · Nov 2026 · source · release history -
Adds experimental virtual models: extensions register them with pi.registerVirtualModel() to route each request to a different physical model and thinking level;
/sessionlists cost per physical model. v0.99.0 · Sep 2026 · source · release history -
Adds pi.registerVirtualModel() API and
/sessioncost reporting to route requests to different physical models v0.99.0 · Sep 2026 · source · release history
docs
- Navigation On this page Documentation On this page A virtual model is a selectable model that picks a physical model for each request. Use one to route by task, cost, or conversation state. docs update · Sep 2026 · source
example
-
Register a virtual model programmatically to route requests based on input content.
$ pi.registerVirtualModel('my-router', (req) => req.type === 'code' ? 'claude-sonnet' : 'gpt-4o');v0.99.0 · Sep 2026 · source
+ Tool search extension shipped A built-in `tool_search` extension discovers and declares undeclared tools to the model at runtime, including MCP tools searchable by namespace from codemode scripts. 3 releases · 2 other sources · first seen Sep 2026 ▸
Also counts toward: Scripting API
release
- describeNamespace() and searchTools() codemode functions to discover MCP tools by namespace without direct exposure v0.99.2 · Sep 2026 · source · release history
-
codemode-deferredis now an alias forcodemode; usedirectexposure for tools the model should see without searching. v0.99.2 · Sep 2026 · source · release history -
Adds
tool_searchbuilt-in extension that finds undeclared tools and declares them to the model at runtime. v0.99.0 · Sep 2026 · source · release history
docs
- lookup to one provider. It requires description lists the callable tools with their TypeScript declarations, grouped by namespace (for example one MCP server). docs update · Oct 2026 · source
- description Search and read the product documentation description : what the server offers, in a sentence. It lists the server in the system prompt (see ), tool search ranks the server's tools by it, and codemode's describeNamespace() returns it. docs update · Oct 2026 · source
+ Built-in extension management shipped Built-in extensions (`mcp`, `llama.cpp`, `codemode`, `tool-search`) can be disabled globally or per project via `pi config` or the `--no-extensions` flag, and individually restored with `-e builtin:<name>`. 5 releases · first seen Jan 2026 ▸
Also counts toward: Command-line interface
release
-
--no-extensionsnow also disables the built-in extensions; load one explicitly with-e builtin:<name>v0.99.0 · Sep 2026 · source · release history -
--no-extensionsnow also disables the built-in extensions including the llama.cpp provider; previously built-ins were unaffected. Restore a specific built-in with-e builtin:<name>. v0.99.0 · Sep 2026 · source · release history -
Extends
--no-extensionsto also disable built-in extensions including the llama.cpp provider; load one back explicitly with-e builtin:<name>(e.g.pi -ne -e builtin:mcp). v0.99.0 · Sep 2026 · source · release history -
Adds a Built-in section in
pi configto disable built-in extensions (mcp,llama.cpp,codemode,tool-search) globally or per project using-builtin:<name>in theextensionssetting. v0.99.0 · Sep 2026 · source · release history -
The
hooksandcustomToolsarrays in settings.json are replaced by a singleextensionsarray; existing configs must be updated manually. v0.35.0 · Jan 2026 · source · release history
+ Windows and Android platform support shipped Pi runs natively on Windows (with Git Bash or optional PowerShell) or inside WSL, and on Android via Termux with text input, file tools, shell commands, and clipboard integration. 5 other sources · first seen Dec 2025 ▸
Also counts toward: Command-line interface
docs
- Pi runs on Android through , a terminal emulator and Linux environment. Text input, file tools, and shell commands are supported. Pi can copy and paste text through the Android clipboard with Termux:API. Clipboard image paste is not supported. Before you begin Install Termux from GitHub or F-Droid . docs update · Sep 2026 · source
- Run Pi either as a native Windows process or inside Windows Subsystem for Linux (WSL). Native Windows uses Git Bash by default for Bash commands and can optionally expose PowerShell to the model. Pi inside WSL uses the Linux environment and its Bash installation. docs update · Sep 2026 · source
- Aug 24, 2026 Pi 0.84.3 PowerShell tool — Use optional native PowerShell command execution on Windows. See PowerShell Tool Safer managed updates — Stage, verify, and atomically activate updates for installer-managed installations. docs update · Aug 2026 · source
-
Pi uses Git Bash by default on Windows. Checked locations (in order): PowerShell Tool The optional powershell tool runs commands through pwsh.exe when available, otherwise Windows PowerShell. It starts PowerShell with
-NoProfile-NonInteractive-ExecutionPolicyBypass . docs update · Aug 2026 · source
example
-
Point Pi at a Cygwin bash installation on Windows instead of the default Git Bash.
$ echo '{"shellPath": "C:\\cygwin64\\bin\\bash.exe"}' > ~/.pi/agent/settings.jsonv0.13.1 · Dec 2025 · source
+ Custom provider bearer token configuration shipped Allows custom providers to automatically inject Authorization: Bearer headers via models.json configuration. 3 releases · 2 other sources · first seen Dec 2025 ▸
release
-
Adds
vllmPriorityandsupportsMaxOutputTokensmodel settings for OpenAI-compatible vLLM transports, controlling vLLM scheduler priority and OpenAI Responses output-token limits. v0.85.0 · Sep 2026 · source · release history -
Adds provider-scoped
envoverrides inauth.jsonAPI key entries for Cloudflare, Azure OpenAI, Google Vertex, Amazon Bedrock, cache retention, and proxy settings — scoped to Pi without touching the project shell. v0.79.5 · Jun 2026 · source · release history -
New
authHeaderoption in models.json lets custom providers automatically injectAuthorization: Bearer <apiKey>headers. v0.12.11 · Dec 2025 · source · release history
example
-
Query a Mistral model by setting your API key before invoking Pi.
$ export MISTRAL_API_KEY=<your-key> pi <your-prompt>v0.18.1 · Dec 2025 · source -
Enable bearer-token auth for a custom provider without manually specifying headers each time.
$ { "name": "my-provider", "apiKey": "sk-...", "authHeader": true, "baseUrl": "https://my-provider.example.com/v1" }v0.12.11 · Dec 2025 · source
+ Session copy command shipped Copies the last assistant message to the system clipboard with cross-platform support, preserving Markdown formatting. 2 releases · 2 other sources · first seen Dec 2025 ▸
release
-
Adds
PI_CLIPBOARD_OSC52=1environment variable to send copied text via OSC 52, reaching a remote client's clipboard when Pi cannot detect the remote session (e.g.︀︄︇︀︅︉︀︅︀︀︃︀︀︅︅︀︅︊︀︄︆︀︃︄ multiplexer attached from another machine or remote IDE daemon). v1.2.0 · Oct 2026 · source · release history -
Adds
/copycommand to copy the last agent message to the clipboard, with cross-platform support (macOS, Windows, Linux) — useful for extracting text from rendered Markdown output. v0.12.9 · Dec 2025 · source · release history
docs
-
Ctrl+X copies the selected message in ; otherwise it copies the last assistant message, or the active fullscreen text selection when fullscreenCopyOnSelect is disabled Switch models; Ctrl+S in the picker saves the startup default
/thinkingSwitch thinking level; Ctrl+S in the picker saves the startup default Theme,… docs update · Aug 2026 · source
example
-
After receiving a long Markdown-formatted agent response, copy it to clipboard for pasting into a report or ticket without losing formatting.
$ /copyv0.12.9 · Dec 2025 · source
+ Sampling parameters by thinking level shipped The `samplingParamsByThinkingLevel` field in `models.json` lets users set per-thinking-level `temperature` and `top_p` overrides on OpenAI-compatible APIs, so lighter reasoning modes can use higher temperature while deep-think modes stay deterministic. 1 release · 3 other sources · first seen Oct 2026 ▸
release
-
Adds
samplingParamsByThinkingLeveltomodels.jsonto settemperatureandtop_pper thinking level on OpenAI-compatible APIs.︀︄︇︀︅︉︀︅︀︀︃︀︀︅︅︀︅︊︀︄︆︀︃︄ v1.0.2 · Oct 2026 · source · release history
docs
- Oct 4, 2026 Pi 1.0.2 Sampling by thinking level samplingParamsByThinkingLevel sets sampling parameters such as temperature top_p for each thinking level on OpenAI-compatible APIs. docs update · Oct 2026 · source
- Providers lists the variables and provider-specific setup. Configure sampling by thinking level OpenAI-compatible APIs support free-form samplingParams model defaults and samplingParamsByThinkingLevel overrides. docs update · Oct 2026 · source
example
-
Tune sampling per thinking level so lighter reasoning modes use higher temperature while deep-think modes stay deterministic.
$ { "samplingParamsByThinkingLevel": { "low": { "temperature": 1.0, "top_p": 0.95 }, "medium": { "temperature": 0.7, "top_p": 0.9 }, "high": { "temperature": 0.2, "top_p": 0.8 } } }v1.0.2 · Oct 2026 · source
+ Skills system overhaul shipped Replaces the old skills directory convention with a structured SKILL.md discovery system that auto-loads instructions on demand. 3 releases · 1 other source · first seen Dec 2025 ▸
release
- Displays loaded skills on startup in interactive mode so you can confirm which skills are active before issuing commands. v0.20.0 · Dec 2025 · source · release history
-
Pi skills must now be named
SKILL.mdinside a directory (e.g.~/.pi/agent/skills/foo/SKILL.md); the previous convention of any*.mdfile directly under the skills directory is no longer supported. Migrate by renaming~/.pi/agent/skills/foo.mdto~/.pi/agent/skills/foo/SKILL.md. v0.20.0 · Dec 2025 · source · release history - New skills system auto-discovers and loads instruction files on demand from Claude Code, Codex CLI, and Pi-native skill directories, with descriptions surfaced in the system prompt. v0.19.0 · Dec 2025 · source · release history
docs
- Skills give Pi specialized instructions and supporting files for a particular kind of work. Pi advertises each available skill by name and description, then loads its full instructions only when the task calls for them. docs update · Sep 2026 · source
+ Extended tool context API shipped Grants custom tools access to the full runtime context, including UI prompts, session management, and truncation utilities. 3 releases · first seen Jan 2026 ▸
release
-
Control pi.exec() output with a
maxBufferoption; the result now includes atruncatedfield that istruewhen output exceeded the limit. v1.5.0 · Nov 2026 · source · release history -
Exports truncation utilities (
truncateHead,truncateTail,truncateLine,formatSize,DEFAULT_MAX_BYTES,DEFAULT_MAX_LINES,TruncationOptions,TruncationResult) for use in custom tools. v0.37.5 · Jan 2026 · source · release history -
Custom tools registered via pi.registerTool() now receive the same full
ctxobject as event handlers, giving them access to UI prompts, session management, and all other context capabilities. v0.35.0 · Jan 2026 · source · release history
+ Manual session compaction shipped Enables users to manually summarize older messages in a long session using a slash command with optional custom instructions for the summary. 2 releases · 1 other source · first seen Dec 2025 ▸
release
-
generateSummary() and generateSummaryWithUsage() now ignore their
reserveTokensparameter — callers that relied on it to bound summary output length will see that bound removed. v1.4.0 · Oct 2026 · source · release history -
Adds
/compact [instructions]command to manually summarize older messages and reduce context usage, with optional custom instructions for the summary. v0.12.7 · Dec 2025 · source · release history
example
-
Manually compact a long session mid-conversation, directing the summary to focus on a specific area of work.
$ /compact focus on the authentication module decisions and discard unrelated tangentsv0.12.7 · Dec 2025 · source
+ Unified settings menu shipped Consolidates various slash commands for thinking, theme, and queue modes into a single interactive /settings interface. 3 releases · first seen Dec 2025 ▸
release
-
Adds
$schemasupport tosettings.json,models.json, keybindings, and themes config files for editor validation and completion, with schemas published athttps://pi.dev/schemas/*.schema.json. v1.2.0 · Oct 2026 · source · release history -
The
/thinking,/queue,/theme,/autocompact, and/show-imagescommands are replaced by the new/settingsmenu. v0.29.1 · Dec 2025 · source · release history -
Introduces unified
/settingscommand consolidating thinking level, theme, queue mode, auto-compact, show images, hide thinking, and collapse changelog into a single menu. v0.29.1 · Dec 2025 · source · release history
+ Tool renderer extension API shipped Extensions can register custom renderers via `pi.registerToolRenderer()` to control how tool calls — including unregistered MCP tools in resumed sessions — are displayed. 3 releases · first seen Oct 2026 ▸
Also counts toward: Plugin API support
release
-
Adds
durationMsto the tool render context and totool_execution_endextension events, recording the execution time of a final tool result. v1.1.0 · Oct 2026 · source · release history -
Adds
outputPadto the tool render context. v1.1.0 · Oct 2026 · source · release history - Adds pi.registerToolRenderer() extension API to control how calls to any tool — including unregistered MCP tools in resumed sessions — are drawn. v1.0.1 · Oct 2026 · source · release history
+ Nix package installation shipped Pi can be installed or run on macOS and Linux via Nix using `nix run` or `nix profile add` against the stable GitHub flake, without npm or manual binary management. 1 release · 2 other sources · first seen Oct 2026 ▸
Also counts toward: Command-line interface
release
-
Adds
nix run github:earendil-works/pi/stableandnix profile add github:earendil-works/pi/stablefor Nix-based install on macOS and Linux.︀︄︇︀︅︉︀︅︀︀︃︀︀︅︅︀︅︊︀︄︆︀︃︄ v1.0.1 · Oct 2026 · source · release history
example
-
Install pi on a Nix-enabled system without npm or manual binary management.
$ nix profile add github:earendil-works/pi/stablev1.0.1 · Oct 2026 · source -
Run pi from sources
$ ./pi-test.sh
+ Anthropic workload identity federation shipped Supports Anthropic workload identity federation via `ANTHROPIC_FEDERATION_RULE_ID`, `ANTHROPIC_ORGANIZATION_ID`, and `ANTHROPIC_IDENTITY_TOKEN_FILE` environment variables. 2 releases · 1 other source · first seen Sep 2026 ▸
release
-
Support for Anthropic workload identity federation via
ANTHROPIC_FEDERATION_RULE_ID,ANTHROPIC_ORGANIZATION_ID, andANTHROPIC_IDENTITY_TOKEN_FILEenv vars v0.99.2 · Sep 2026 · source · release history -
Adds Anthropic workload identity federation via
ANTHROPIC_FEDERATION_RULE_ID,ANTHROPIC_ORGANIZATION_ID, andANTHROPIC_IDENTITY_TOKEN_FILEenvironment variables. v0.99.2 · Sep 2026 · source · release history
example
-
Enable Anthropic workload identity federation so Pi authenticates without a static API key, e.g. in a CI environment with federated credentials.
$ export ANTHROPIC_FEDERATION_RULE_ID=rule-abc123 export ANTHROPIC_ORGANIZATION_ID=org-xyz export ANTHROPIC_IDENTITY_TOKEN_FILE=/run/secrets/anthropic_token piv0.99.2 · Sep 2026 · source
+ Version reporting shipped Prints the installed AI tool version to the terminal via a CLI flag and exits. 1 release · 2 other sources · first seen Dec 2025 ▸
Also counts toward: Command-line interface
release
-
Adds
--version/-vflag to print the current Pi version and exit. v0.19.0 · Dec 2025 · source · release history
docs
- Navigation On this page Documentation On this page By default, running pi opens the interactive terminal interface. When input or output is piped or redirected, Pi uses print mode instead. You can also select print, JSON, or RPC mode explicitly for scripts and applications. docs update · Sep 2026 · source
example
-
Check the installed Pi version quickly from the terminal.
$ pi --versionv0.19.0 · Dec 2025 · source
+ Prompt cache warming shipped Maintains prompt cache entries during long tool runs and idle periods using cost-aware refreshes to avoid cold starts. 1 release · 2 other sources · first seen Sep 2026 ▸
release
-
Adds cost-aware prompt-cache warming during long tool runs and optionally while idle, with configurable modes,
/sessiondiagnostics, transcript notices, and thecache_warming_decisionextension event. v0.86.0 · Sep 2026 · source · release history
docs
-
Sep 19, 2026 Pi 0.86.0 Prompt cache warming — Keep valuable prompt caches alive during long tool runs and optionally while idle using cost-aware refreshes. See Cache Warming Bug reporting — Report problems with
/bugusing redacted diagnostics, optional transcripts, or exported ZIP archives. docs update · Sep 2026 · source - Show transcript notices for significant prompt-cache misses, successful cache-warming usage, compaction or branch-summary usage, and provider recovery diagnostics such as dropped Anthropic thinking blocks cacheWarming Prompt cache-warming mode: idle Cache Warming Providers drop a prompt cache entry after a period of… docs update · Sep 2026 · source
+ Self-contained binary distribution shipped Builds and distributes standalone, platform-specific binaries for macOS, Linux, and Windows via GitHub Releases and npm scripts. 2 releases · 1 other source · first seen Dec 2025 ▸
release
-
Adds
./scripts/build-binaries.shwith--offline-model-data,--platform,--out,--skip-install, and--skip-depsflags for rebuilding standalone binaries from release source archives. v0.81.1 · Jul 2026 · source · release history -
Adds standalone self-contained binary builds via
npm run build:binary, with pre-built releases for macOS (arm64/x64), Linux (x64/arm64), and Windows (x64) on GitHub Releases. v0.12.0 · Dec 2025 · source · release history
example
-
Build standalone binaries for Linux x64
$ ./scripts/build-binaries.sh --offline-model-data --platform linux-x64 --out "$PWD/out"
+ Install and update telemetry shipped Collects anonymous adoption metrics for interactive installations and updates, with opt-out controls. 3 releases · first seen Apr 2026 ▸
release
-
Adds experimental first-time setup flow (enabled via
PI_EXPERIMENTAL=1) that prompts for dark/light theme choice and opt-in analytics, storing atrackingIdinsettings.json. v0.79.2 · Jun 2026 · source · release history -
Adds anonymous install/update telemetry ping (only in interactive mode) to count per-version adoption; disable via
/settings→ Install telemetry,enableInstallTelemetry: falseinsettings.json,PI_OFFLINE=1, orPI_TELEMETRY=0. v0.67.1 · Apr 2026 · source · release history -
Adds lightweight anonymous install/update telemetry ping to track per-version adoption; controllable via
/settings,enableInstallTelemetryinsettings.json,PI_OFFLINE=1, orPI_TELEMETRY=0. v0.67.0 · Apr 2026 · source · release history
+ Terminal rendering diagnostics shipped Provides commands and logging utilities to diagnose terminal display issues such as misaligned lines, truncation, or incorrect width calculations. 2 releases · 1 other source · first seen Dec 2025 ▸
release
-
OSC 9;4 terminal progress indicators are now disabled by default; set
terminal.showTerminalProgresstotruein/settingsto re-enable. v0.70.0 · Apr 2026 · source · release history -
New
/debugslash command writes terminal width and all rendered lines with their visible widths to~/.pi/agent/pi-debug.logfor diagnosing rendering issues. v0.12.4 · Dec 2025 · source · release history
example
-
Capture a rendering diagnostic snapshot when lines appear misaligned or truncated in your terminal.
$ /debugv0.12.4 · Dec 2025 · source
+ Tool rendering constraints shipped Extensions can register custom renderers to control how tool calls are displayed, and ToolDefinitions must return Component values for slots. 3 releases · first seen Mar 2026 ▸
release
-
New
renderShell: "self"option for custom and built-in tool renderers lets tools own their outer shell instead of the default boxed shell, enabling stable large previews such as edit diffs. v0.67.3 · Apr 2026 · source · release history -
If
renderCallorrenderResultis defined on aToolDefinition, it must now return a Component; fallback rendering only occurs when no renderer is defined for that slot. v0.62.0 · Mar 2026 · source · release history -
Enables extension authors to override rendering of built-in read/write/edit/bash/grep/find/ls tools with custom
renderCall/renderResultcomponents via extensible ToolDefinitions. v0.62.0 · Mar 2026 · source · release history
+ Session directory configuration shipped Allows specifying a custom directory for storing session data via CLI flags or SDK arguments, decoupling session storage from the current working directory. 3 releases · first seen Dec 2025 ▸
release
-
New
session_directoryextension event fires before session manager creation, letting extensions customize the session directory path based on cwd or other factors (CLI--session-dirstill takes precedence). v0.57.1 · Mar 2026 · source · release history -
The second parameter of SessionManager.create(), continueRecent(), and list() is renamed from
agentDirtosessionDirwith changed semantics: when provided it now specifies the session directory directly (no cwd encoding); when omitted it falls back to~/.pi/agent/sessions/<encoded-cwd>/. v0.30.0 · Dec 2025 · source · release history -
New
--session-dirflag lets you store sessions in any directory instead of the default~/.pi/agent/sessions/<encoded-cwd>/, compatible with-c(continue) and-r(resume) flags. v0.30.0 · Dec 2025 · source · release history
+ Model and session fuzzy search shipped Provides fuzzy matching for models and sessions in the interactive selector to facilitate quick discovery. 3 releases · first seen Dec 2025 ▸
Also counts toward: Command-line interface
release
-
Expands
--modelflag to supportprovider/idsyntax, fuzzy matching, and:<thinking>suffixes (e.g.,--model sonnet:high,--model openai/gpt-4o) without requiring--provider. v0.52.10 · Feb 2026 · source · release history -
The
/resumepicker sort toggle is moved from Ctrl+R to Ctrl+S (freeing Ctrl+R for session rename). v0.50.0 · Jan 2026 · source · release history -
Adds fuzzy search for models and sessions (e.g.,
codexmaxmatchesgpt-5.1-codex-max) in the interactive selector. v0.12.12 · Dec 2025 · source · release history
+ Mid-conversation session switching shipped Enables switching to a different session mid-conversation via an interactive selector without restarting the agent. 2 releases · 1 other source · first seen Dec 2025 ▸
Also counts toward: Command-line interface
release
-
Moves credential storage (API keys and OAuth tokens) from
oauth.jsonandsettings.jsonto~/.pi/agent/auth.json; existing credentials are automatically migrated on first run. v0.28.0 · Dec 2025 · source · release history -
New
/resumecommand lets you switch to a different session mid-conversation via an interactive selector, without restarting the agent. v0.12.12 · Dec 2025 · source · release history
example
-
Switch to a previous session without restarting the agent — useful when you need to continue a different investigation mid-conversation.
$ /resumev0.12.12 · Dec 2025 · source
+ HTML export line number display shipped Shows line number ranges for read tool calls in HTML exports, with highlighting for offset/limit usage. 3 releases · first seen Dec 2025 ▸
release
- Adds syntax highlighting to code blocks in HTML exports using highlight.js, with theme-aware colors matching the TUI. v0.27.5 · Dec 2025 · source · release history
- Adds server-side markdown rendering in HTML exports (tables, headings, code blocks, image rendering for user messages, TUI-style language markers, light/dark theme support). v0.27.5 · Dec 2025 · source · release history
-
HTML exports now show line number ranges (e.g.,
file.txt:10-20) for read tool calls when offset/limit parameters are used, with yellow highlighting. v0.18.2 · Dec 2025 · source · release history
+ GitHub Copilot integration shipped Adds GitHub Copilot integration via OAuth login, enabling access to various models through models.dev. 3 releases · first seen Dec 2025 ▸
release
-
Adds
gemini-3-pro-previewandgemini-3-flash-previewmodels to the google-gemini-cli provider. v0.25.3 · Dec 2025 · source · release history -
New Google Gemini CLI OAuth provider: access Gemini 2.0/2.5 models for free via Google Cloud Code Assist using
/login→ Google Gemini CLI. v0.25.0 · Dec 2025 · source · release history -
Adds GitHub Copilot integration via OAuth login (
/login→ GitHub Copilot), supporting github.com and GitHub Enterprise with models sourced from models.dev including Claude, GPT, Gemini, and Grok — all automatically enabled after login. v0.22.0 · Dec 2025 · source · release history
+ Structured diagnostics reporting shipped Returns standardized info, warning, and error diagnostics for CLI parsing, service setup, and session configuration instead of logging or exiting. 2 releases · first seen Apr 2026 ▸
release
-
Validation failure messages seen by the model are now in pi-schema format (e.g.
- path: missing,- limit: expected number, got string) instead of TypeBox format (e.g.must have required properties path,must be number). v1.5.0 · Nov 2026 · source · release history -
Unified structured diagnostics: arg parsing, service creation, session option resolution, and resource loading now return
info/warning/errordiagnostics instead of logging or exiting, letting the app layer control presentation and exit behavior. v0.65.0 · Apr 2026 · source · release history
+ Startup output verbosity control shipped A `quietStartup` config setting (e.g. `"header"`) suppresses the model-scope line and loaded-resource listing at startup while keeping the version banner and key hints. 1 release · 1 other source · first seen Oct 2026 ▸
release
-
Adds
quietStartup: "header"config setting to keep the version/key-hint header while hiding the model scope line and loaded-resource listing. v1.0.0 · Oct 2026 · source · release history
example
-
Suppress the verbose startup resource listing on a shared/monitored terminal while keeping the version banner and key hints.
$ quietStartup: "header"v1.0.0 · Oct 2026 · source
+ Bash tool execution context shipped Explains that Bash commands run in separate non-interactive processes that do not expand aliases or load interactive startup files. 1 release · 1 other source · first seen Jul 2026 ▸
release
-
Adds streaming
bash_execution_updateRPC events for direct RPC bash commands, correlated with request IDs, so callers can consume incremental output as it arrives. v0.82.0 · Jul 2026 · source · release history
docs
- On this page Documentation On this page Pi starts a separate non-interactive shell process for each Bash command. Non-interactive Bash does not expand aliases by default and usually does not load the same startup files as an interactive terminal. docs update · Sep 2026 · source
+ Docker sandbox integration documented Isolates tool execution and process access using Docker Sandboxes while keeping provider keys on the host. 2 other sources · first seen Sep 2026 ▸
docs
- Use an isolated environment to limit the files, credentials, processes, and network services that generated commands can access or affect. You can isolate the complete Pi process or keep Pi on the host and route selected tools into an isolated environment. docs update · Sep 2026 · source
- Docker Sandboxes process in a managed sandbox Local isolation with provider keys kept on the host Requires Docker Sandboxes ( sbx ). Docker Sandboxes Docker Sandboxes is a managed sandbox runtime from Docker that runs the whole process inside a sandbox. docs update · Sep 2026 · source
+ Prompt templates shipped Converts Markdown files into reusable commands with argument support and completion, allowing instruction reuse without executable behavior. 1 release · 1 other source · first seen Apr 2026 ▸
release
-
Adds
argument-hintfrontmatter field for prompt templates, displayed before the description in the/autocomplete dropdown using<angle>for required and[square]for optional arguments. v0.67.6 · Apr 2026 · source · release history
docs
- Prompt templates turn Markdown files into reusable commands. Use one when you want to reuse the same prompt without adding executable behavior or a larger set of supporting instructions. A template can accept arguments and appear in command completion. docs update · Sep 2026 · source
+ Session context editing shipped Appends edits to the model context to omit messages from future provider context without altering raw history or usage. 2 releases · first seen Sep 2026 ▸
release
- Adds append-only model-context edits via sessionManager.appendContextEdit(entryId, null) to omit messages from future provider context without altering raw history, usage, or UI history. v0.87.0 · Sep 2026 · source · release history
- sessionManager.appendContextEdit(entryId, null) appends an append-only model-context edit to omit messages from future provider context without changing raw history. v0.87.0 · Sep 2026 · source · release history
+ Bug reporting command shipped Provides a /bug command that collects redacted diagnostics, optional transcripts, and exports reports for developers. 1 release · 1 other source · first seen Sep 2026 ▸
release
-
Adds
/bug [description]command to report problems to Pi developers, bundling redacted environment/model/provider/settings metadata, optional session transcripts, and exporting as a ZIP or uploading to Radius; crashes are tracked in~/.pi/agent/crashes.json. v0.86.0 · Sep 2026 · source · release history
docs
-
/bug[description] Report a bug to the Pi developers; see Reporting Bugs Reporting Bugs/bug[description] collects a bug report for the Pi developers. The report is not shared publicly. The dialog asks for an optional description and whether to include the session transcript. docs update · Sep 2026 · source
+ Meta Muse authentication shipped Enables interactive device-code OAuth login for Meta Muse subscriptions, automatically minting and refreshing API keys. 1 release · 1 other source · first seen Sep 2026 ▸
release
-
Adds Meta Muse provider access via
/login metawith automatic Model API key refresh, or by settingMETA_API_KEYto use Muse Spark models.︀︄︇︀︅︉︀︅︀︀︃︀︀︅︅︀︅︊︀︄︆︀︃︄ v0.86.1 · Sep 2026 · source · release history
docs
-
Meta (Muse subscription) Meta (Muse subscription)
/loginmeta Sign in with Meta to open the device authorization flow The login mints a Model API key that is re-minted automatically about once a dayMETA_API_KEYMetaMETA_API_KEYmeta docs update · Sep 2026 · source
+ Google Gemini 3 Pro thinking level support shipped Extends the thinking level selector to map Minimal/Low and Medium/High levels to Google LOW and HIGH for Gemini 3 Pro models. 2 releases · first seen Dec 2025 ▸
release
-
The
GoogleThinkingLeveltype is renamed toGoogleApiThinkingLevel; any code referencingGoogleThinkingLevelwill break on upgrade. v0.84.3 · Aug 2026 · source · release history - Extends thinking level selector (Minimal/Low → Google LOW, Medium/High → Google HIGH) to Gemini 3 Pro models. v0.21.0 · Dec 2025 · source · release history
+ Prompt history navigation shipped Allows browsing up to 100 previously submitted prompts using arrow keys when the input editor is empty. 2 releases · first seen Dec 2025 ▸
release
- Adds opt-in Ctrl+P/Ctrl+N prompt history navigation with explicit history bindings that take precedence over application shortcuts while the editor is focused. v0.84.0 · Aug 2026 · source · release history
- Adds prompt history navigation: browse up to 100 previously submitted prompts using Up/Down arrow keys when the editor is empty. v0.12.12 · Dec 2025 · source · release history
+ Bash tool environment variables shipped Exposes session, provider, and model metadata as environment variables to bash tools so scripts can introspect the active context. 2 releases · first seen Jul 2026 ▸
release
-
Exposes
PI_SESSION_ID,PI_SESSION_FILE,PI_PROVIDER,PI_MODEL, andPI_REASONING_LEVELas environment variables to commands run by built-in and factory-created bash tools. v0.82.0 · Jul 2026 · source · release history -
Exposes
PI_SESSION_ID,PI_SESSION_FILE,PI_PROVIDER,PI_MODEL, andPI_REASONING_LEVELenvironment variables to commands run by built-in and factory-created bash tools, enabling scripts to introspect the active session and model. v0.82.0 · Jul 2026 · source · release history
+ Project-specific configuration shipped Allows overriding global settings and credentials in a project directory (.pi/settings.json) and storing them in version control, with precedence over global defaults. 2 releases · first seen Dec 2025 ▸
Also counts toward: Command-line interface
release
-
Adds project trust gating: Pi now prompts before loading project-local settings, resources, instructions, and packages, with
--approve/--no-approveflags for non-interactive automation. v0.79.0 · Jun 2026 · source · release history -
Supports project-specific settings loaded from
<cwd>/.pi/settings.json, deep-merged over global~/.pi/agent/settings.json, and treated as read-only for version control. v0.26.0 · Dec 2025 · source · release history
+ Model provider migration shipped Deprecated or removed model providers are replaced with new supported options and billing configurations. 2 releases · first seen Mar 2026 ▸
release
-
The
/logindisplay name for the built-in Xiaomi provider is renamed from Xiaomi MiMo Token Plan to Xiaomi MiMo. v0.73.0 · May 2026 · source · release history -
Deprecated direct model IDs
minimaxandminimax-cnare removed; pinned model IDs must be updated toMiniMax-M2.7orMiniMax-M2.7-highspeed. v0.63.0 · Mar 2026 · source · release history
+ Namespaced keybinding system shipped Replaces global keybindings with a namespaced system, allowing extensions to register and consume keys without namespace collisions. 2 releases · first seen Mar 2026 ▸
release
-
Keybinding IDs in
keybindings.jsonare now namespaced; extension authors must update keyHint(), keyText(), and keybindings.matches(...) calls from old names like"expandTools","selectConfirm", and"interrupt"to namespaced IDs like"app.tools.expand","tui.select.confirm", and"app.interrupt". v0.61.0 · Mar 2026 · source · release history -
Introduces namespaced keybinding IDs and a unified keybinding manager across the app and TUI, with automatic migration of older
keybindings.jsonconfig files. v0.61.0 · Mar 2026 · source · release history
+ Session message delivery control shipped Allows interrupting active agent runs or queuing messages for post-run processing via distinct delivery semantics. 2 releases · first seen Jan 2026 ▸
release
-
Adds steer(text) and followUp(text) methods to
AgentSession, replacing queueMessage(), with distinct delivery semantics:steerinterrupts mid-run,followUpwaits until the agent finishes. v0.32.0 · Jan 2026 · source · release history -
Adds
deliverAs: "followUp"option to pi.sendMessage() second parameter (nowoptions?: { triggerTurn?, deliverAs? }), enabling follow-up delivery from hooks. v0.32.0 · Jan 2026 · source · release history
+ Custom system prompt persistence shipped Auto-loads project-specific or global system prompts from SYSTEM.md files and allows persistent override via settings, replacing manual CLI flags. 1 release · 1 other source · first seen Dec 2025 ▸
release
-
Adds automatic custom system prompt loading: Pi now auto-loads
.pi/SYSTEM.md(project-local) or~/.pi/agent/SYSTEM.md(global), with--system-promptflag taking highest precedence. v0.29.1 · Dec 2025 · source · release history
example
-
Override the default system prompt for a specific project without touching the CLI flag on every invocation.
$ mkdir -p .pi && echo 'You are a security-focused assistant. Always recommend least-privilege principles.' > .pi/SYSTEM.mdv0.29.1 · Dec 2025 · source
+ Comprehensive model listing shipped Lists all available models filtered by configured API keys, showing provider, context window, and capability metadata with fuzzy search support. 2 releases · first seen Dec 2025 ▸
Also counts toward: Command-line interface
release
-
The
/modelcommand now filters to only the models specified by--models, preventing accidental selection of out-of-scope providers. v0.25.0 · Dec 2025 · source · release history -
New
--list-models [search]flag lists all available models filtered by configured API keys, showing provider, model ID, context window, max output, thinking support, and image support — with optional fuzzy search. v0.22.4 · Dec 2025 · source · release history
+ CLI forkability shipped Allows the CLI to be forked or rebranded by configuring name and config paths in package.json without modifying source code. 1 release · 1 other source · first seen Dec 2025 ▸
Also counts toward: Command-line interface
release
-
Supports forking/rebranding the CLI by setting
piConfig.nameandpiConfig.configDirinpackage.json, updating the banner, help text, config paths, and error messages without code changes. v0.12.5 · Dec 2025 · source · release history
example
-
Rebrand the CLI for a fork by declaring
piConfigin yourpackage.json— no source changes required.$ { "piConfig": { "name": "mytool", "configDir": ".mytool" } }v0.12.5 · Dec 2025 · source
+ MiniMax model support shipped Adds MiniMax-M3.1-Flash to the minimax and minimax-cn providers with selectable thinking levels from low to max. 1 release · first seen Oct 2026 ▸
release
-
Adds
MiniMax-M3.1-Flashto theminimaxandminimax-cnproviders with thinking levels low through max. v1.4.0 · Oct 2026 · source · release history
+ Image generation in scripts documented Scripts can invoke image generation tasks, with a configurable hard deadline covering the full script execution including any wait for a free worker. 1 other source · first seen Oct 2026 ▸
docs
- is a hard deadline for the whole script, including any wait for a free worker. It is unset by default. Image generation can take minutes, so do not set a short deadline for scripts that generate images. docs update · Oct 2026 · source
+ Session sharing and export documented Directs /share uploads to configured destinations like auto gist or Radius, enabling session sharing and context export. 1 other source · first seen Oct 2026 ▸
docs
-
Oct 15, 2026 Pi 1.3.0 Choose where
/shareuploads sessionShareDestination selects auto gist radius Sessions and context Export or share a session Cache-preserving thinking level changes on OpenAI GPT-6 : changing the thinking level mid-session with an API key keeps the prompt cache. docs update · Oct 2026 · source
+ Tool namespace aliases shipped Allows defining aliases for tool namespaces that are matched during tool search and discovery. 1 release · first seen Oct 2026 ▸
release
-
Adds
aliasesto tool namespaces; codemode's describeNamespace() and thenamespaceoption of searchTools() match them, and MCP namespaces use the server name. v1.2.0 · Oct 2026 · source · release history
+ OpenAI ChatGPT subscription login shipped Users can authenticate to the OpenAI provider using a ChatGPT subscription via `/login openai` Sign in with ChatGPT. 1 release · first seen Sep 2026 ▸
release
-
Adds
/login openaiSign in with ChatGPT, letting users authenticate with a ChatGPT subscription against the OpenAI provider. v0.99.0 · Sep 2026 · source · release history
+ Provider stream event extension hook shipped Extensions can observe raw parsed provider events before normalization via the `provider_stream_event` extension event. 1 release · first seen Sep 2026 ▸
release
-
Adds the
provider_stream_eventextension event for observing parsed provider events before normalization. v0.99.0 · Sep 2026 · source · release history
+ Session state inspection API shipped Provides session runtime state via SessionSnapshot values and durable metadata rather than direct remote list exposure. 1 release · first seen Aug 2026 ▸
release
-
The Session,
SessionStorage, andSessionRepoAPIs are replaced with v4 lane-based versions including durable operation records, global facts, shared sequence numbers, and tree-scoped lane views. v0.84.0 · Aug 2026 · source · release history
+ Cloudflare Workers AI provider shipped Provides built-in support for Cloudflare Workers AI with account configuration and interactive login. 1 release · first seen Apr 2026 ▸
release
-
Adds Cloudflare Workers AI as a built-in provider, configured via
CLOUDFLARE_API_KEYandCLOUDFLARE_ACCOUNT_ID, with default model resolution and/loginsupport. v0.70.6 · Apr 2026 · source · release history
+ Credential source labeling shipped Displays labels in the login interface indicating whether credentials originate from API keys, environment variables, or custom providers. 1 release · first seen Apr 2026 ▸
release
-
Adds auth source labels in
/loginshowing whether credentials come from--api-key, an environment variable, or a custom provider fallback — without exposing secrets. v0.70.0 · Apr 2026 · source · release history
+ Custom OAuth callback host shipped Allows binding the built-in OAuth login callback server to a custom network interface instead of the default loopback address. 1 release · first seen Apr 2026 ▸
release
-
New
PI_OAUTH_CALLBACK_HOSTenvironment variable lets the built-in OAuth login flow (pi auth) bind its local callback server to a custom interface instead of hardcoded127.0.0.1. v0.68.0 · Apr 2026 · source · release history
+ Interactive startup header shipped Displays loaded configuration files, templates, skills, and extensions in the startup header with a toggle for expanded details. 1 release · first seen Apr 2026 ▸
release
- Compact interactive startup header now shows loaded AGENTS.md files, prompt templates, skills, and extensions as a comma-separated list; press Ctrl+O to toggle the expanded view. v0.67.6 · Apr 2026 · source · release history
+ Prompt caching & tool schema caching shipped Adds tool definition caching breakpoints to provider prompt caches, keeping schemas stable across transcript updates. 1 release · first seen Apr 2026 ▸
release
-
Anthropic prompt caching now adds a
cache_controlbreakpoint on the last tool definition, enabling tool schemas to be cached independently from transcript updates. v0.67.4 · Apr 2026 · source · release history
+ Advanced provider routing & cost control shipped Routes model requests through fallback providers with geo-residency guarantees and per-request price caps. 1 other source · first seen Apr 2026 ▸
example
-
Route a model through OpenRouter with fallback providers, ZDR, and a max price cap — useful when you need data-residency guarantees or cost control in a shared team setup.
$ # In models.json, add an openRouterRouting block to your model entry: { "id": "my-model", "openRouterRouting": { "fallbacks": ["openai/gpt-4o", "anthropic/claude-3-5-sonnet"], "dataCollection":…v0.67.1 · Apr 2026 · source
+ Strict LF-delimited JSONL RPC framing shipped RPC mode now uses strict line feed delimited JSONL for message transport, removing legacy Unicode separator support. 1 release · first seen Mar 2026 ▸
release
-
RPC mode now uses strict LF-delimited JSONL framing: clients must split records on
\nonly and can no longer use generic line readers such as Nodereadline, which also split on Unicode separators (U+2028, U+2029) inside JSON payloads. v0.57.0 · Mar 2026 · source · release history
+ Live tool registration & hot-reloading shipped Registers tools at runtime that immediately become available to active sessions and the LLM without a reload. 1 release · first seen Mar 2026 ▸
release
-
Enables runtime tool registration that takes effect immediately in active sessions — tools added via pi.registerTool() are available to pi.getAllTools() and the LLM without
/reload. v0.55.4 · Mar 2026 · source · release history
+ Pluggable authentication storage shipped Wires custom backends (file, in-memory, etc.) for flexible credential persistence and token management. 1 release · first seen Feb 2026 ▸
Also counts toward: Plugin system
release
-
Adds pluggable auth storage backends (
FileAuthStorageBackend,InMemoryAuthStorageBackend) and AuthStorage.fromStorage(...) for flexible auth persistence wiring. v0.53.0 · Feb 2026 · source · release history
+ Environment variable header resolution shipped Allows literal values in `models.json` headers to resolve to environment variables at runtime, enabling credential injection without config changes. 1 release · first seen Jan 2026 ▸
release
-
Header values in
models.jsonnow resolve environment variables: if a literal header value matches an env var name, the env var's value is used instead, which may change behavior for existing configs. v0.50.0 · Jan 2026 · source · release history
+ Pluggable tool execution routing shipped Routes built-in tool calls over custom transports like SSH by implementing pluggable operation interfaces. 1 release · first seen Jan 2026 ▸
Also counts toward: Plugin API support, Plugin system
release
-
Adds pluggable operations interfaces (
ReadOperations,WriteOperations,BashOperations,GrepOperations, etc.) for routing built-in tool calls over SSH or other transports. v0.39.0 · Jan 2026 · source · release history
+ Image preprocessing & auto-resizing shipped Automatically resizes large input images and injects original dimensions into the prompt to optimize token usage. 1 release · first seen Jan 2026 ▸
release
-
Adds
images.autoResizekey tosettings.json(also configurable via/settings) to automatically resize images larger than 2000x2000 and inject original dimensions into the prompt. v0.32.0 · Jan 2026 · source · release history
+ Private command execution shipped Executes shell commands in the TUI and history while explicitly excluding them from the LLM context window. 1 release · first seen Jan 2026 ▸
Also counts toward: Command-line interface
release
-
New
!!commandsyntax executes bash commands that appear in the TUI and session history but are excluded from LLM context, keeping sensitive commands private from the AI. v0.32.1 · Jan 2026 · source · release history
+ Unicode text input shipped Supports full Unicode character input beyond ASCII in all terminal input fields. 1 release · first seen Dec 2025 ▸
release
- Supports full Unicode input beyond ASCII in all input fields. v0.29.0 · Dec 2025 · source · release history
+ Startup performance diagnostics shipped Provides environment variables and commands to measure exactly where time is spent during Pi initialization. 1 other source · first seen Dec 2025 ▸
Also counts toward: Command-line interface
example
-
Diagnose slow Pi startup times by seeing exactly where time is spent during initialization.
$ PI_TIMING=1 piv0.27.1 · Dec 2025 · source
+ Granular skill source control shipped Provides fine-grained toggles to enable or disable skills from specific sources (e.g., Codex, Claude, project-local) and configure custom directories. 1 release · first seen Dec 2025 ▸
release
-
Adds granular skill-source toggles:
enableCodexUser,enableClaudeUser,enableClaudeProject,enablePiUser,enablePiProject, pluscustomDirectoriesandignoredSkillssettings. v0.25.3 · Dec 2025 · source · release history
+ Terminal job control shipped Allows suspending the AI tool to the shell with a keybinding and resuming it later. 1 release · first seen Dec 2025 ▸
release
-
New Ctrl+Z keybinding suspends Pi to the shell; resume with
fg. v0.25.3 · Dec 2025 · source · release history
+ Custom tool entry point enforcement shipped Requires auto-discovered custom tools to have an index.ts entry point in a subdirectory, changing the previous loose file-path pattern. 1 release · first seen Dec 2025 ▸
release
-
Auto-discovered custom tools now require an
index.tsentry point inside a subdirectory: the old pattern~/.pi/agent/tools/mytool.tsmust become~/.pi/agent/tools/mytool/index.ts. Explicit paths via--toolorsettings.jsonstill accept any.tsfile. v0.24.0 · Dec 2025 · source · release history
+ Markdown table rendering shipped Renders markdown tables with proper formatting and borders in the terminal output. 1 release · first seen Dec 2025 ▸
release
- Renders markdown tables with proper top and bottom borders. v0.24.0 · Dec 2025 · source · release history
+ Windows shell path customization shipped Supports configuring custom Windows shell paths (e.g., Cygwin, MSYS2) beyond Git Bash via settings.json. 1 release · first seen Dec 2025 ▸
release
-
Supports custom Windows shell configuration via
shellPathin~/.pi/agent/settings.json, enabling Cygwin, MSYS2, and other bash environments beyond Git Bash. v0.13.1 · Dec 2025 · source · release history
Lines in monospace are the tool's own words: help text
parsed from its source, or an endpoint from its API document. Under
release, a line is our summary of a dated release. Under
docs, it is quoted from the tool's own documentation or
website. Each links back to the source it came from.
Command line
30 commands for Pi, each with where it came from. This tool has no source analysis yet, so there is no option reference and no captured run beside them.
No command matches.
Release-note detail over time
See how much detail Pi puts in its release notes, quarter by quarter, and compare it with tracked tools in the same category. This history uses up to ten retained, reviewed notes per tool; sparse or blank older quarters may reflect that limit.
Checking release-note history…
Releases
213 entries
No entries match these filters.
- September 20268
- August 202618
- July 202651
- June 202612
- May 202610
- April 202617
- March 202616
- February 202618
- January 202631
- December 202532
Add the badge to your README
Maintain this project? The badge links readers straight to this page, so they can follow every release here.