I'm using GPT Sol and Claude Opus for free — pi-coding-agent + OmniRoute A developer has detailed a setup that provides free access to frontier AI models like GPT Sol and Claude Opus using two open-source tools: OmniRoute, a local API gateway, and Pi, a coding agent. The configuration routes requests through OmniRoute's free-tier providers, allowing users to select models such as 'aug/gpt5.6-sol' and 'aug/opus4.8' without API keys or billing. The developer notes that the dashboard's built-in Pi integration writes to the wrong config file, requiring manual edits to '~/.pi/agent/models.json'. I'm using GPT Sol and Claude Opus for free. No credit card, no per-token bill, no "you've hit your monthly limit" email. Two pieces of software make it happen: Here's the exact setup, from install to first prompt. OmniRoute ships with free-tier providers pre-wired into the auto model. You don't paste an API key — a fresh install just answers. But auto also reaches frontier-class models through the free routes, so I can pick them by name: aug/gpt5.6-sol GPT Sol aug/opus4.8 Claude Opus auto/best-coding best free coding model auto/best-reasoning best free reasoning model auto let OmniRoute pick Pi talks to one endpoint http://localhost:20128/v1 . OmniRoute handles which provider actually serves the request, and falls back automatically if one goes down or hits a rate limit. npm install -g omniroute omniroute The gateway boots on port 20128 ; the dashboard is at http://localhost:20128 . npm install -g @earendil-works/pi-coding-agent Quick note so you install the right thing: this is the npm pi @earendil-works/pi-coding-agent , a coding agent with read / bash / edit / write tools. It's unrelated to the Rust project also called pi-coding-agent . Pi reads its providers from ~/.pi/agent/models.json . Add an omniroute entry: { "providers": { "omniroute": { "api": "openai-completions", "apiKey": "", "baseUrl": "http://localhost:20128/v1", "models": { " launch": true, "id": "auto", "input": "text" , "reasoning": true }, { "id": "auto/best-coding", "input": "text" , "reasoning": true }, { "id": "auto/best-reasoning", "input": "text" , "reasoning": true }, { "id": "auto/best-fast", "input": "text" , "reasoning": true }, { "id": "aug/gpt5.6-sol", "input": "text" , "reasoning": true }, { "id": "aug/opus4.8", "input": "text" , "reasoning": true } } } } api: "openai-completions" — OmniRoute speaks the OpenAI protocol. baseUrl — the local gateway. Keep the /v1 . apiKey — empty is fine: OmniRoute runs keyless locally. If you've created a key on the dashboard's Endpoints page, put it here instead.If you already have providers in that file, just add the omniroute key next to them — don't overwrite the rest. Edit ~/.pi/agent/settings.json : { "defaultProvider": "omniroute", "defaultModel": "auto" } Now pi uses OmniRoute out of the box, no flags needed. pi "fix the failing test in src" interactive, routes through OmniRoute pi -p "summarize this file" non-interactive, print and exit pi --model aug/gpt5.6-sol GPT Sol specifically pi --model aug/opus4.8 Claude Opus specifically pi --model auto/best-reasoning best free reasoning model pi -c continue the last session pi --list-models see every available model Switching models is one flag — no reconfiguring keys, no new accounts. If you ever want your local Ollama model back, pi --provider ollama does it. 1. The dashboard writes the wrong file for this Pi. OmniRoute's built-in "Pi" integration dashboard → CLI tools → Pi writes ~/.pi/config.json . This Pi reads ~/.pi/agent/models.json . Edit the file by hand as above and you're done — the dashboard button won't do it for this version. 2. Bare OpenAI model names fail. Requesting gpt-5.6-luna no prefix returns No active credentials for provider: openai . The free routes are namespaced — use auto , auto/ , or aug/ IDs like aug/gpt5.6-sol . http://localhost:20128/v1 . --model , not a support ticket.Install OmniRoute, point Pi at it, and go. Ten minutes, and GPT Sol and Claude Opus are just models you can pick.