Coding Agent Local com Pi e LM Studio — Setup para 0€
Aprende a montar um coding agent local com Pi e LM Studio. Corre modelos open-source como o Qwen3.6-27B no teu hardware, offline, sem custos de API. Setup completo para macOS.
No mês passado, fui para uma estação de comboios sem internet. Tinha um bug para resolver num projeto — nada crítico, mas chato. Abri o portátil, tentei usar o Claude Code, e nada. O modelo não respondia. Fiquei a olhar para o ecrã durante 20 minutos a pensar que, sem cloud, o meu coding agent era um peso de papel.
Já usei Claude Code, Codex e Gemini CLI. São ferramentas boas, mas têm um problema: ou pagas por token, ou estás dependente de um servidor remoto. Quando fico sem internet — e ainda acontece — fico sem agente. E mesmo com internet, o custo acumula rápido em projetos maiores.
Há uns meses comecei a explorar a alternativa: coding agents open-source que correm localmente. A combinação que mais gostei foi Pi (o agente) + LM Studio (o servidor) + Qwen3.6-27b (o modelo). Tudo em localhost, zero custos, privacidade total. Nada de chaves de API, nada de enviar código para servidores de terceiros.
Arquitetura — Como é que isto funciona?
A ideia é simples. Um coding agent (como o Claude Code, Codex ou Pi) comunica com um modelo através de uma API HTTP. Envia um pedido, o modelo devolve tokens, e o agente usa ferramentas (ler ficheiros, editar, correr comandos) para fazer o trabalho.
No setup tradicional, essa API está num datacenter algures. No setup local, está na tua máquina.
┌──────────────────┐ ┌──────────────────┐ ┌──────────────────┐
│ Pi │ ──→ │ LM Studio │ ──→ │ Qwen3.6-27b │
│ (coding agent) │ ←── │ (localhost:1234) │ ←── │ (modelo) │
└──────────────────┘ └──────────────────┘ └──────────────────┘
O Pi fala o protocolo chat-completions da OpenAI. O LM Studio expõe um endpoint compatível em http://localhost:1234/v1. Basta apontar um ao outro e está feito. O modelo vive na GPU, o servidor faz de ponte, o agente faz o trabalho de verdade.
Passo 1: Verificar o Hardware
Antes de instalar seja o que for, descobre o que a tua máquina aguenta. Um modelo de 27B parâmetros em quantização 4-bit (Q4) pesa ~15-16 GB de weights. Depois tens de somar a cache de contexto (KV cache) por cima.
Há duas ferramentas web que ajudam:
- canirun.ai — deteta o teu hardware e classifica modelos de “corre bem” a “pesado demais”
- caniusellm.com — semelhante, com recomendações de quantização (Q4 vs Q8 vs FP16)
Resumo rápido:
| Hardware | VRAM / RAM | O que esperar |
|---|---|---|
| GPU NVIDIA 24 GB (RTX 4090) | 24 GB VRAM | Doce: Q4 + contexto até 64K |
| GPU NVIDIA 12 GB (RTX 4070) | 12 GB VRAM | Modelo mais pequeno (14B) ou Q4 com pouco contexto |
| Apple Silicon 64 GB | 64 GB unificada | Confortável: Q4 + 128K contexto |
| Apple Silicon 128 GB (M5) | 128 GB unificada | Rei: Q6/Q8 + 256K sem pensar |
| Apple Silicon 16 GB | 16 GB unificada | Possível com modelo 14B e contexto reduzido |
Nota pessoal: Uso um M1 Max com 64 GB. Consigo correr o Qwen3.6-27b em Q4_K_M com contexto de 64K sem suar. Se tens Apple Silicon, a memória unificada é uma vantagem enorme — tudo o que a máquina tem está disponível para o modelo.
Passo 2: Instalar o LM Studio e Carregar o Modelo
O LM Studio é a forma mais fácil de ter um servidor local de modelos. Tem interface gráfica, busca de modelos no HuggingFace, e expõe uma API compatível com OpenAI.
- Descarrega o LM Studio em lmstudio.ai/download (macOS, Windows ou Linux)
- Na pesquisa de modelos, procura por
qwen3.6-27b - Escolhe uma quantização — Q4_K_M é o ponto ideal entre qualidade e tamanho
- Carrega o modelo
- Vai ao separador Developer e ativa o Start Server
O servidor fica disponível em http://localhost:1234/v1. Podes confirmar com:
curl http://localhost:1234/v1/models
Se vires o modelo listado, está pronto.
Importante: Carregar o modelo no LM Studio não é suficiente. Tens de ir ao separador Developer e ligar o servidor explicitamente. É o erro mais comum.
Passo 3: Instalar o Pi
O Pi é o coding agent minimalista do Mario Zechner. Dá ao modelo quatro ferramentas — read, write, edit, bash — e é extremamente eficiente em tokens.
Instala com o script oficial:
curl -fsSL https://pi.dev/install.sh | sh
Ou via npm:
npm install -g @earendil-works/pi-coding-agent
Confirma a instalação:
pi --version
Passo 4: Configurar o models.json
O Pi descobre providers e modelos através de um ficheiro models.json. Abre-o:
vi ~/.pi/agent/models.json
E adiciona esta configuração:
{
"providers": {
"lmstudio": {
"baseUrl": "http://localhost:1234/v1",
"api": "openai-completions",
"apiKey": "lm-studio",
"models": [
{
"id": "qwen/qwen3.6-27b",
"input": ["text"]
}
]
}
}
}
Alguns detalhes importantes:
"api": "openai-completions"— diz ao Pi para usar o formato de chat completions da OpenAI. É isto que faz qualquer servidor local compatível (LM Studio, Ollama, vLLM) funcionar sem adaptações."apiKey": "lm-studio"— o LM Studio ignora a chave, mas o protocolo OpenAI exige o campo. Qualquer string não vazia serve.- O
iddo modelo tem de coincidir exatamente com o que o LM Studio expõe. Se não tiveres a certeza, corre:
Copia ocurl http://localhost:1234/v1/modelsiddo JSON que aparece e usa esse.
Depois de guardar, abre o Pi e verifica com /model — deves ver o teu modelo local listado. Podes alternar entre modelos locais e cloud no mesmo picker.
Passo 5: Tamanho do Contexto
A janela de contexto é a memória de trabalho do modelo. Tudo o que o agente “vê” (histórico da conversa, ficheiros abertos, output de comandos) tem de caber ali.
Em modelos cloud, o contexto é fixo e gerido pelo provider. Em modelos locais, és tu que decides — e pagas o custo em VRAM.
No LM Studio, define o contexto nas definições do modelo (antes ou depois de carregar) e reload para aplicar.
Quanta VRAM leva cada tamanho?
Estes valores são para um modelo de 27B parâmetros em Q4. A base de ~16 GB de weights é fixa; o extra varia com o contexto:
| Contexto | Uso típico | VRAM extra (KV cache) |
|---|---|---|
| 16K | Uns ficheiros pequenos, prompts simples | ~1 GB |
| 64K | UI development, tarefas médias | ~4 GB |
| 128K | Multi-file refactors, contexto de repositório | ~8 GB |
| 256K | Planeamento com repositório completo | ~16 GB |
A minha recomendação: começa em 64K. É mais que suficiente para o dia-a-dia. Se o agente começar a “esquecer-se” de coisas no meio da sessão, sobes para 128K. 256K é para quando precisas mesmo de carregar o repositório inteiro.
256K Local vs 1M Cloud
O Qwen3.6-27b suporta até 256K tokens de contexto nativamente. Para comparação, o Claude Opus 4.8 corre com 1M tokens. Há um fosso, mas não é tão mau como parece.
256K ainda é muito. Dá para:
- Um módulo e os seus testes
- Uma funcionalidade completa com vários ficheiros
- Uma sessão de debugging longa com histórico
Onde o 1M da cloud ganha é no cenário de repositório inteiro: carregar um projeto grande de uma vez, tarefas agentic com centenas de passos, análises que precisam de documentos enormes em contexto.
A minha regra:
- Local (Qwen3.6-27b): edições focadas, coding do dia-a-dia, refactors contidos, trabalho que queres offline ou privado, tarefas onde não queres gastar tokens
- Cloud (Claude / Codex / Gemini): contexto de repositório inteiro, raciocínio mais exigente, runs agentic longas
Reutilizar Skills do Claude Code
Se já tens skills (SKILL.md) no Claude Code, tenho boas notícias: o Pi usa o mesmo formato Agent Skills Standard.
A má notícia é que o Pi não descobre skills fora das suas pastas por defeito. Se as tuas skills estão em ~/.claude/skills, tens de o dizer explicitamente.
Configura no ~/.pi/agent/settings.json:
{
"defaultProvider": "lmstudio",
"defaultModel": "qwen/qwen3.6-27b",
"skills": [
"~/.claude/skills",
"~/.codex/skills"
]
}
O defaultProvider e defaultModel são opcionais — fazem o Pi arrancar já no modelo local, sem teres de escolher manualmente.
Depois de editares, reinicia o Pi. As skills só são lidas ao arranque. A partir daí, o comportamento é igual ao Claude Code: as descrições carregam em contexto, e as instruções completas só entram quando uma tarefa corresponde.
Gotchas — O que me tramou
Uma lista do que me aconteceu e do que deves evitar:
- LM Studio server tem de estar ligado. Carregar o modelo não chega. O Server tem de estar ativo no separador Developer, senão o Pi não consegue contactar
localhost:1234. - Model ID tem de coincidir. Se no
models.jsonescrevesteqwen/qwen3.6-27be o servidor expõeqwen3.6-27b-Q4_K_M, não vai funcionar. Correcurl http://localhost:1234/v1/modelse copia exatamente o que aparece. - É mais lento que cloud. Um modelo de 27B na tua GPU não bate os token rates de um servidor da Anthropic. A primeira resposta demora mais, e geração é mais lenta. É normal. Compensa pelo custo zero e privacidade.
- O Pi é token-eficiente. Isto é uma vantagem para modelos locais. O system prompt do Pi é muito mais pequeno que o do Claude Code, o que significa que sobra mais contexto para o teu código.
Workflow Híbrido — Planear com Claude, Executar Local
O Pi não é exclusivamente local. Suporta cloud também, o que abre um workflow que uso todos os dias.
Faz login no Pi com a tua conta Anthropic:
/login
Funciona com subscrição Claude Pro/Max ou API key. O Claude aparece no mesmo /model que o modelo local.
O workflow:
- Planear com Claude — arquitetar uma funcionalidade, dividir o trabalho em passos, usar o 1M de contexto para carregar o repositório inteiro. Isto é onde o raciocínio mais forte faz diferença.
- Executar com local —
/model qwen/qwen3.6-27be mãos à obra. As edições repetitivas, correr testes, fazer o refactor em si. Grátis, offline, privado. - Repetir — Volta e meia volto ao Claude para reavaliar ou desenrascar um problema mais complexo. Depois volto ao local.
Consigo alternar entre modelos na mesma sessão sem perder contexto. O histórico fica todo lá — só muda qual o modelo que está a gerar tokens.
Uso o OpenSpec para criar os planos: peço ao Claude para desenhar a solução, e executo os passos no modelo local. Funciona bem para projetos de tamanho médio.
Dica: Se vais usar o modelo local para a maior parte do trabalho, considera configurar
"defaultProvider": "lmstudio"nosettings.json. O Pi arranca logo no modelo local, e só mudas para cloud quando precisas.
O que aprendi com este setup
Depois de um mês a usar o Pi com modelos locais, a minha conclusão é mista. Funciona. Para tarefas do dia-a-dia — edições, refactors pequenos, debugging — aguenta-se bem. A privacidade é total, o custo é zero, e não dependo de internet. Isso já vale o setup.
Mas também aprendi que local não substitui cloud para tudo. Modelos de 27B são competentes, mas não têm o raciocínio de um Claude Opus ou GPT-5. Quando o problema é complexo — arquitetar uma funcionalidade nova, debuggar um bug que envolve múltiplos serviços, planear um refactor grande — volto ao Claude. E não me sinto mal por isso.
O que o setup local me deu foi independência. Poder trabalhar sem pensar no custo por token, sem me preocupar se o código que estou a editar está a ser enviado para um servidor nos EUA. Isso é mais importante do que ter o modelo mais inteligente do mundo.
Se tens um Mac com Apple Silicon e pelo menos 32 GB de RAM, experimenta. Pior das hipóteses, gastas uma tarde a configurar e aprendes qualquer coisa. Melhor das hipóteses, ficas com um coding agent que funciona sem te pagar nada a ninguém.
Recursos
- LM Studio — servidor local de modelos
- Pi coding agent — terminal coding agent
- Pi docs — Quickstart
- canirun.ai — verifica o teu hardware
- caniusellm.com — recomendações de quantização
- Agent Skills Standard — formato de skills partilhado
- OpenSpec — planos para workflow híbrido
- Artigo original do Zarar — inspiração para este guia
Partilhar
Comentários 0
Ainda sem comentários — sê o primeiro.