free-pi

Changelog

What’s new.

Every free-pi release, in plain language. Update anytime with npx free-pi-cli@latest.

v0.4.7
Changed
  • free-pi now updates itself when a new version is required: it relaunches through npx --yes free-pi-cli@<latest> instead of asking you to run npx free-pi-cli@latest. Set FREEPI_NO_AUTO_UPDATE=1 to opt out.
  • The ad box redraws at your terminal's width after a resize, and never overflows with wide characters.
Notes
  • Global installs (npm i -g) still update and ask you to re-run once.
v0.4.6
Added
  • Free web search and free documentation lookup: the agent can now search the web (web_search) and look up current library docs (docs_lookup). Both run on the free-pi server and count toward your daily allowance.
v0.4.5
Added
  • /reverse-engineer-anything loads REA (Reverse Engineer Anything) reverse-engineering tools into the current session. Inspect JavaScript/Electron apps, .NET assemblies, Go/Rust binaries, APKs, websites and native binaries (with your own Ghidra, Hopper or IDA). It downloads rea-agents on first use and needs Node 22.19+, 24.11+ or 26+. Use it for lawful, authorized analysis only.
v0.4.4
Changed
  • Consent version 4: the terms now also say that Gravity keeps a session and visitor ID in ~/.free-pi/gravity and receives usage events from free-pi. Existing users are asked to accept once.
  • Ads served by Gravity are measured with Gravity's terminal pixel, which starts only after you accept the current terms. Disable it with FREEPI_NO_GRAVITY_PIXEL=1.
  • The CLI now fires Gravity's impression pixel itself when a Gravity ad is shown.
  • No other ad is shown beside a Gravity ad (Gravity's publisher rule): free-pi's own banner and inline ads step aside while a Gravity ad is on screen.
v0.4.3
Changed
  • The ad banner refreshes when the model finishes a step, at most once a minute (the 10-minute refresh remains as an idle fallback). A slow ad fetch never delays the agent.
  • Ad requests wait up to 5 s (was 3 s).
Added
  • Users whose saved consent is older than the current version see the consent screen at startup. Accepting records it; declining exits, and the screen is shown again next time.
v0.4.2
Changed
  • Credits now sit on the right of the footer, under the model name.
v0.4.1
Added
  • A credits meter ("<n> credits") in the footer status bar. If you have bought credits, it reads "<free> + <bought> credits".
  • A warning line when 10% or less of your daily credits are left, and another when you are in the slow lane. Each links to freepi.ai/buy.
  • /usage now shows "X / Y credits left today" with the refill time, the slow-lane line when it applies, and a final "buy more credits: /buy-credits" line.
v0.4.0
Added
  • A todo tool the agent uses to track multi-step work, and a /todos command that shows the list. The open items show live above the input box (a one-line form, or a short list in a narrow terminal), each todo change prints a progress line in the conversation, and the list is stored in the session, so it follows branches and comes back on resume.
  • MCP server support. You add your own servers (free-pi bundles none) in ~/.free-pi/agent/mcp.json, or in a trusted project's .pi/mcp.json. The agent reaches their tools through its codemode tool, and /mcp manages the servers inside a session.
  • free-pi-cli mcp add|remove|list|login|logout: manage MCP servers from a shell.
v0.3.0
Changed
  • Upgraded the underlying pi agent engine to 1.2.0; pi's install telemetry is disabled.
Added
  • /bug sends bug reports to the free-pi server.
Fixed
  • free-pi-cli --session <id> resumes a session. It was rejected as an unknown argument, and the printed resume command included a --session-dir flag the CLI does not accept.
v0.2.18
Changed
  • The startup consent line reads "Usage is funded by ads and training." instead of naming sessions directly.
v0.2.17
Added
  • /tos and /privacy-policy slash commands: open the Terms of Service and Privacy Policy in your browser.
  • The consent screen and startup header now state that usage is funded by ads and by training on your sessions.
v0.2.16
Added
  • The whole ad card is one clickable link. Every row of the card carries the same link, so a click anywhere on the card opens the advertiser.
  • free_pi_docs tool: the agent can answer questions about free-pi itself (what it is, the free allowance, credits, and the slash commands) from a built-in guide.
v0.2.15
Added
  • A free-pi startup screen: name and model, a welcome line, and the five free-pi commands (/usage, /support, /buy-credits, /close-other-session, /update). ctrl+o shows one line of key hints. pi's own startup header, skill list, and extension list no longer print.
  • /support slash command: opens the advertiser currently shown in the banner. It grants nothing.
v0.2.12
Added
  • /buy-credits slash command (#241): opens the buy page with no model turn, so it works when you are out of usage and every request is rejected.
  • /usage slash command: the same report as free_pi_usage, with no model turn.
  • One readable line when the server rejects a request with a 429: the server's own buy notice at the wall, or a plain rate-limit line with the retry time. pi still prints its raw error and retries; this line sits beside it.
  • A heads-up in the meter from 80% of the free daily allowance (server-owned text).
  • A one-turn "Payment received — $X of usage added" line in the meter when a purchase lands.
Changed
  • free_pi_usage reports free usage as a percentage of today's allowance (#242). No free-usage dollar figure is shown anywhere (cap, spend, lifetime). Purchased credit stays in dollars.
v0.2.11
Added
  • **Buy more usage when the free daily cap is hit** (epic #221). A purchased credit balance covers usage above the free allowance and persists across days. Packs: $5 → $4.00 of usage, $10 → $8.00, paid by card or USDC through Stripe Checkout.
  • free_pi_buy_credits tool (#226): ask pi to buy credits and it opens the buy page in your browser and prints the URL (for SSH sessions).
  • free_pi_usage now shows the purchased balance (#227).
Changed
  • The out-of-usage line in the meter is now server-supplied (#225), so the offer and link can change without a CLI update. Against an older server the previous text is shown unchanged.
v0.2.10
Changed
  • **free-pi now pins the exact agent version it was tested against.** The dependency on @earendil-works/pi-coding-agent was a ^0.84.2 range, and because the build marks it external it resolved on *your* machine at install time — so a fresh install was already pulling 0.84.4, a version free-pi had never run a test against. Nobody chose that; npm did. It is now pinned to 0.84.4 (tested: 178 CLI tests, typecheck, build, and a real session with the ad banner, model-lock and all five extensions loaded). Adopting a newer agent is now a deliberate release rather than something that happens to you.
  • A nightly CI canary runs the CLI against the *newest* agent release, so a breaking upstream change shows up as a red job instead of a user's broken install.
v0.2.9
Fixed
  • **Windows: self-update never ran.** npm on Windows is npm.cmd, a batch file, and Node refuses to spawn one without a shell. The resulting error was read as "not updatable", so every Windows launch silently skipped the update since the feature shipped. The same bug made /update fail too.
  • **Windows: sign-in never opened a browser.** start treats its first quoted argument as a window title, so the sign-in URL opened an empty console window instead of a browser.
  • **Non-interactive runs no longer hang or silently do nothing.** With stdin piped from something that never sends a line (CI, cat | free-pi-cli), first-run consent waited forever. With stdin closed (< /dev/null) it printed the consent screen and exited 0 without consenting or launching — a success that did nothing. Both now print one line explaining that consent needs a terminal, and exit 1.
Added
  • free-pi-cli logout — removes the stored sign-in token; the next run signs in again. Purely local, so it works offline. Note there is no server-side revoke: the token stays valid until it expires.
  • free-pi-cli --version and --help.
  • An unrecognized argument now prints help and exits 2, instead of quietly starting a full agent session on a typo.
Security
  • The sign-in URL is validated before it is handed to a shell. It arrives from the server and was previously passed through with only & escaped, which on Windows left |, ( and ) able to run a command. It must now parse as an http/https URL, and every shell metacharacter is escaped.
v0.2.8
Added
  • Model picker. When the server offers more than one model, /model lists them and lets you switch; the picker is scoped to exactly the free-pi models. Backed by a server-side model catalog, so models can be added or changed without a CLI release. Older CLIs are unaffected — they keep using the single active model.
v0.2.7
Changed
  • The model-lock is now reliable and no longer touches your environment. 0.2.6 hid extra providers by deleting their API-key env vars before startup, which (a) missed HuggingFace (its token is HF_TOKEN, not *_API_KEY) and (b) could not hide providers discovered from dual-use credentials (AWS Bedrock, Google Vertex) without also deleting those credentials — which the agent's shell tool legitimately needs. The lock now leaves every credential in your shell intact and instead scopes the model picker to just the free-pi model. Set FREEPI_KEEP_ENV_PROVIDERS=1 to unlock the picker and use your own providers.
v0.2.6
Added
  • /close-other-session — clear a stuck or orphaned session yourself, instead of waiting out the timeout, when you hit "you've already got a free-pi session running somewhere". Force-releases only your own account's session lease; the one-session-per-account limit is unchanged.
  • /whats-new — show recent release highlights on demand.
  • /update — update free-pi-cli to the latest version (a no-op on npx, which is always latest).
  • "What's new" note shown once at startup after you update to a newer version.
Changed
  • The model list is now limited to the free-pi model instead of inheriting every provider whose API key happens to be in your shell (which silently bypassed free-pi). Bring your own key deliberately with /login, or set FREEPI_KEEP_ENV_PROVIDERS=1 to keep your shell's provider keys.
v0.2.5
Added
  • The CLI now shows the model the server is actually serving (accurate status-line label) plus a one-line notice for trial models.
  • Free **Ox Alpha** trial — a frontier preview model, free for the trial period.
v0.2.4
Fixed
  • Moved the Node-version guard into the bin shim so even very old Node versions get a friendly message instead of crashing mid-startup (undici/zstd).
v0.2.3
Added
  • Preflight check for Node zstd support: a clear "upgrade your Node" message instead of a crash mid-request.