A warning before the setup: The cloud LLM industry moves quickly enough that a setup that works today, including the one in this article, may stop working tomorrow. The point is not to preserve this exact list of model IDs. It is to show how I get useful coding-agent leverage without paying for another service while Claude Code Pro resets.
Claude Code is my main LLM. I still write code without an LLM for most personal projects. That has nudged me toward stacks I can understand quickly and keep improving without handing the unfamiliar parts to a model. Work sometimes calls for an agent, though, and I want one handy when it does.
When Claude Code's allowance runs out, the work does not stop, but paying for a second subscription just to cover the gap is hard to justify. Pi gives me a terminal agent for the bounded jobs in between: read a repository, trace a failing test, look up an API, make a small change, and run the checks.
Pi is not a free Claude clone or a replacement for that way of working. It keeps an agent available for the jobs that benefit from one, while letting me choose a different model and provider. Pi is free software; the model behind it may not be.
Start with where the tools run
Gondolin is loaded from ~/.pi/agent/extensions/gondolin/, so a plain pi starts in the local micro-VM. Pi mounts the current project at /workspace and routes its file and shell tools through the guest. Changes under /workspace still write through to the host; the rest of the guest filesystem is isolated.
pi
pi --dangerously-skip-permissions
The extension registers --dangerously-skip-permissions as the switch back to host tools. With that flag, Pi loads the extension but skips starting the VM. The name is accurate: this is not extra protection, and the host tools have their full access. I use it when a task needs something that belongs on the host; otherwise, plain pi gives me the VM boundary by default.
That choice is worth being precise about. A VM is not a magic safety label: the project directory is intentionally shared, and anything the agent can read there is still in scope. Use the mode that matches the job.
Make the terminal yours
The welcome screen is a small TypeScript extension, ~/.pi/agent/extensions/dotmavriq-header.ts. It replaces Pi's header with a cyan six-line ASCII logo, a green :: PI CYBERDECK // ACCESS GRANTED :: line, and a hint that Ctrl+L opens the model picker. It is decoration, but it also makes a long terminal session feel like a tool I chose rather than a product I rented.
The quieter startup is not a theme or a different model. In ~/.pi/agent/settings.json, "quietStartup": "header" keeps the header but hides the model-scope line and the list of loaded resources.1 I still see enough to know what started, without a screen of setup chatter before every task.
A few small extensions do the useful work:
plan-mode/adds/planand Ctrl+Alt+P. While it is on, Pi's built-in edit and write tools are disabled and bash is limited to a read-only allowlist. For a larger change, I can get the model to lay out the work first, then decide whether to let it execute.confirm-risky-commands.tsasks before commands matching a deliberately short list of risky patterns, including deletes, privilege escalation, force pushes, and dependency changes. If there is no interactive confirmation available, it blocks those commands.eur-cost-footer.tstotals the current session's reported input and output tokens, estimates the cost in euros using the European Central Bank's daily USD rate, and shows context use, model, and Git branch. It is a meter, not a spending cap or an invoice.copilot-quota-fallback.tswatches for a GitHub Copilot premium-quota error. When it sees one, it switches to OpenRouter's DeepSeek V4 Pro and retries. That keeps the work moving, but it is not necessarily free; the fallback provider can bill for use.
These are small pieces of code in ~/.pi/agent/extensions/, not a private framework. Pi extensions can register commands, tools, event handlers, or interface components.1 The only reason to write one is that a repeated annoyance has become cheaper to automate than to keep tolerating.
Choose a provider with your eyes open
My saved model scope includes three providers: GitHub Copilot (github-copilot/*), OpenRouter, and Groq. The selected OpenRouter models are DeepSeek V4.1 Flash, V4 Pro, V4 Flash, V3.2, R1 0528, and Chat V3.1. The Groq list includes Qwen 3.8 27B, GPT-OSS 120B and 20B, and older Qwen and Llama entries. models.json also raises the output limit for the three OpenRouter V4 models. settings.json controls which models appear in the cycle; the credentials live separately and do not belong in a project or a blog post.
The provider name is not a price guarantee. GitHub Copilot uses the access already attached to that account. Groq has a $0 Free plan with rate limits, while its Developer plan charges by tokens.2 OpenRouter is pay-as-you-go unless a particular model or credit balance says otherwise. The model list is a menu, not a promise that every item costs zero.
Qwen is a good example of how quickly that menu changes. Qwen Code's OAuth free tier, which used to be a useful place to get a lot of work done, was discontinued on 15 April 2026.3 Qwen models remain available through other routes, but those routes have their own pricing and limits. Groq currently lists Qwen 3.8 27B at $0.80 per million input tokens and $4.00 per million output tokens on its Developer pricing.4 A free account may have limited access; that is not the same as an unlimited free model. Groq also lists Qwen 3.6 27B as shut down on 14 September 2026, so an old model ID left in a config file is not evidence that it still works.5
I keep provider access in Pi's own auth store and environment files outside the repository. I do not paste keys into models.json, shell history, or a project file. If the plan depends on staying at zero spend, I check the provider's current limits and the model's price before switching. The footer is useful for noticing usage, not for preventing a charge.
Give Pi a useful web search
The Exa extension adds two tools to Pi: exa_web_search and exa_get_contents. The first searches with Exa's auto mode and returns highlighted excerpts; the second extracts highlights from URLs already worth reading. The extension uses Exa's JavaScript SDK and gets EXA_API_KEY from a private file under ~/.config/environment.d/, rather than storing the key alongside the code.
That is the part I use. Exa's wider API also offers instant, fast, and deep search, structured answers with citations, scheduled monitors, and an Agent API for longer research and list-building jobs.6 The extension does not expose all those products; it gives Pi a search tool and a way to read the pages it finds.
As of 18 October 2026, Exa lists $20 in new-account credits and $10 in monthly free credits. Its auto search is $7 per 1,000 requests, with the first ten results included; the Contents endpoint is $1 per 1,000 pages per content type. Deep Search, Answer, Monitors, and Agent runs have separate prices.6 That is enough free credit for occasional documentation lookups, not a reason to let an agent research without bounds. The balance and prices can change, so check Exa's current pricing before building a workflow around them.
For the query that is already in your head, this is quicker than opening a browser, searching, switching back, and pasting a page into the context. For anything important, open the cited source yourself. Search results are a lead, not a verdict.
A sensible way to use the gap
The useful routine is not complicated:
Start with
pifor the Gondolin VM by default. Add--dangerously-skip-permissionswhen the task needs host tools instead.Pick a model whose current price and limits fit the job. Use existing included access or a real free tier for the no-extra-spend cases; do not mistake a provider account for free unlimited inference.
Turn on
/planbefore a broad or risky change. Keep the acceptance condition short enough that you can tell whether the work is actually done.Use Exa for current documentation, then follow the source links. Do not ask the model to guess what an API does when the documentation can settle it.
Run the tests and read the diff. The saved model, the footer, and the sandbox do not replace checking the change.
That is the whole pitch. I do not need an agent for every project, and most of my personal coding is still work I do without one. Pi keeps a useful option nearby for the jobs that call for it, including the time Claude Code is waiting on a reset. None of this makes a weak answer good or a paid endpoint free; it simply leaves the choice available without another subscription.
Footnotes
Pi. Extensions and Settings. Extension and startup behavior checked against the installed setup on 18 October 2026. ↩
Groq. Billing plans and rate limits. Free and Developer tier details checked on 18 October 2026. ↩
Qwen Code Docs. Authentication. The Qwen OAuth free tier was discontinued on 15 April 2026. ↩
Groq. Supported models. Qwen 3.8 27B Developer-tier price checked on 18 October 2026. ↩
Groq. Model deprecations. Qwen 3.6 27B shutdown date checked on 18 October 2026. ↩
Exa. Pricing, Search API, and Contents API. Credits, endpoint features, and rates checked on 18 October 2026. ↩