
Setup agentic de coding fora do laptop: VM Ubuntu descartável e Tailscale
Requisitos e motivação
Domenic Denicola, após deixar o mundo corporativo, passou meses experimentando abordagens de desenvolvimento assistido por IA até chegar a um setup que considera satisfatório. Suas exigências principais eram: agentes rodando em Linux (coding agêntico é praticamente inviável no Windows), capacidade de trabalhar de qualquer máquina com handoff transparente de sessões, trabalho contínuo mesmo com o laptop fechado, configurações globais versionadas, revisão de código via VS Code, servidores de desenvolvimento acessíveis com contexto seguro, workstreams paralelos sem conflitos e mínima interrupção para aprovações (idealmente modo --yolo).
Arquitetura: VM descartável + Tailscale
O coração do setup é uma VM Ubuntu Server rodando num desktop sempre ligado em casa, com bastante RAM e suporte a virtualização aninhada. A VM é tratada como descartável - se algo der errado, basta recriá-la.
O Tailscale conecta todas as máquinas (desktop, laptop, celular, VM) numa rede privada, permitindo SSH por hostname de qualquer lugar (inclusive de redes Wi-Fi públicas), HTTPS com certificados válidos e transferência de arquivos via Taildrive. Isso elimina a necessidade de port forwarding manual.
Harnesses e clientes
Na VM rodam Claude Code e Codex CLI. Nos clientes (desktop/laptop), Denicola prefere o app desktop do ChatGPT, que funciona como thin client com suporte SSH robusto: sessões persistem na VM, desconexões são tratadas com elegância e há integração nativa com VS Code. O app desktop do Claude é considerado inferior: sessões não sincronizam bem entre clientes, desconexões matam sessões e a experiência geral é instável.
Segurança e blast radius
Os agentes rodam com permissões máximas (approval_policy = "never", danger-full-access, bypassPermissions), incluindo acesso sudo e gh CLI autenticado. Denicola reconhece que não é seguro - um agente poderia deletar repositórios ou vazar segredos - mas na prática os modelos parecem alinhados. O pior cenário realista é um acidente que destrua a VM. Mitigação principal: push frequente para repositórios GitHub (privados quando necessário).
Worktrees para paralelismo
Git worktrees permitem múltiplos agentes trabalhando no mesmo projeto sem conflitos. O app do ChatGPT cria worktrees automaticamente ao iniciar sessões. O app do Claude também suporta, mas coloca os worktrees dentro do projeto (.claude/worktrees/), o que causa problemas com resolução de node_modules, comandos recursivos e confusão com outros agentes.
Servidores de preview com Portless
Em vez de port forwarding manual, Denicola usa o Portless (um proxy local) combinado com Tailscale. Um wrapper (tportless) expõe cada servidor de dev numa URL tailnet dedicada com HTTPS. Agentes em worktrees diferentes ganham portas distintas automaticamente, sem colisões.
Sincronização com chezmoi
Configurações globais (AGENTS.md, skills, dotfiles) são sincronizadas entre VM e máquinas clientes via chezmoi, com templates para diferenças entre plataformas e backup num repositório GitHub privado.
Bônus: desenvolvimento pelo celular
O setup permite fixar bugs de produção pelo celular: abrir o app mobile do ChatGPT conectado à VM via Tailscale, pedir a correção, revisar o preview server por URL tailnet, abrir e mergear o PR - tudo antes de chegar em casa.
Lacunas restantes
Dev containers poderiam aumentar a segurança e permitir toolsets conflitantes por projeto. A associação rígida de sessões ao caminho de pasta na VM é frágil (renomear pasta perde histórico). Não há backup durável de históricos de sessão.