omp.sh: O Agente de Codificação Definitivo para o Terminal com Foco em Flutter e Dart
Home » Programação  »  omp.sh: O Agente de Codificação Definitivo para o Terminal com Foco em Flutter e Dart
Conheça o omp.sh (Oh My Pi), o agente de codificação para terminal com suporte nativo a LSP, DAP, subagentes paralelos, MCP e mais de 40 provedores de IA — com foco especial no ecossistema Flutter e Dart.

omp.sh: O Agente de Codificação Definitivo para o Terminal com Foco em Flutter e Dart

Se você é um desenvolvedor Flutter ou Dart que passa boa parte do dia no terminal, precisa conhecer o omp.sh (Oh My Pi). Mais do que um simples assistente de linha de comando, o omp é um agente de codificação completo que integra IDE, depurador, linguagem server e inteligência artificial em uma única ferramenta de terminal. Com suporte nativo a LSP, DAP, subagentes paralelos, MCP (Model Context Protocol), habilidades especializadas (Skills) e mais de 40 provedores de IA, o omp promete — e entrega — uma experiência de desenvolvimento que rivaliza com qualquer IDE moderna.

Neste artigo, vamos explorar todos os recursos do omp.sh, com ênfase especial no ecossistema Flutter/Dart, incluindo a configuração do MCP Server oficial da Dart e Flutter, skills especializadas, e dicas práticas para turbinar sua produtividade.

O que é o omp.sh?

omp é a abreviação de Oh My Pi, um fork do Pi de Mario Zechner, reescrito por Can Bölük como uma superfície de codificação completa para o terminal. Com aproximadamente 55 mil linhas de Rust em seu núcleo, o omp não apenas "empacota" ferramentas externas — ele as incorpora diretamente no processo: busca (ripgrep), shell (brush), realce de sintaxe, PTY, decodificação de imagem e contagem de tokens BPE são todos nativos, sem fork/exec no caminho crítico.

O resultado? Uma ferramenta que roda em macOS, Linux e Windows (sem WSL), com performance de IDE diretamente no seu terminal.

Instalação

A instalação é simples e funciona em virtualmente qualquer sistema:

macOS / Linux (via script)

curl -fsSL https://omp.sh/install | sh

Homebrew (macOS / Linux)

brew install can1357/tap/omp

Bun (recomendado)

bun install -g @oh-my-pi/pi-coding-agent

Windows (PowerShell)

irm https://omp.sh/install.ps1 | iex

Versões fixas (mise)

mise use -g github:can1357/oh-my-pi

Após instalar, ative as completions de shell para uma experiência ainda mais fluida:

# zsh — adicione ao ~/.zshrc
eval "$(omp completions zsh)"

# bash
eval "$(omp completions bash)"

# fish
omp completions fish > ~/.config/fish/completions/omp.fish

Primeiros Passos

Com o omp instalado, inicie uma sessão interativa com:

omp

Por padrão, o omp usa o modo interativo (TUI). Você também pode usar o modo one-shot com -p:

omp -p "Liste os arquivos .dart neste projeto"

O omp herda automaticamente configurações existentes de outras ferramentas como .claude, .cursor, .windsurf, .gemini, .codex, .cline e .vscode. Não é preciso migrar nada — o que sua equipe já configurou continua funcionando.

Ferramentas Essenciais do omp.sh

O omp.sh vem com 32 ferramentas nativas. Vamos destacar as mais relevantes para o desenvolvimento Flutter/Dart:

Leitura e Escrita de Arquivos

FerramentaFunção
readLê arquivos, diretórios, ZIPs, SQLite, PDFs, cadernos Jupyter, URLs — e URIs internos como pr://, agent://
writeCria ou sobrescreve arquivos, entradas de arquivo ZIP ou linhas SQLite
editPatches com âncoras hashline — edições perfeitas sem loops de falha
searchBusca regex em arquivos, diretórios, globs e URLs internos
findBusca por nome de arquivo via glob, ordenado por modificação

Um recurso particularmente útil: o read consegue ler PRs do GitHub (pr://1428), issues (issue://42), resultados de subagentes (agent:///findings) e conflitos de merge (conflict://3). Tudo com a mesma interface.

Execução de Código

FerramentaFunção
bashShell persistente com sessão, PTY e jobs em background
evalCélulas persistentes de Python e JavaScript com reentrada de ferramentas
recipeExecuta targets do task runner do projeto (bun, just, make, cargo)

Dica para Flutter: use recipe para executar flutter test, dart analyze, e flutter build sem sair da sessão.

Code Intelligence (LSP): Inteligência de Código para Dart

Uma das maiores vantagens do omp.sh é a integração profunda com LSP (Language Server Protocol). O comando lsp expõe as mesmas capacidades que seu IDE usa — renomear, navegar, diagnosticar e refatorar — através do language server, não por regex.

Para Dart/Flutter, o omp.sh detecta automaticamente o dart language server (via dart language-server) e o inicia sob demanda. Você não precisa configurar nada.

Ações do LSP essenciais para Flutter

AçãoDescriçãoUso em Flutter/Dart
definitionOnde o símbolo é definido"De onde vem este widget?"
referencesTodos os pontos de uso do símboloAntes de renomear um método
hoverAssinatura do tipo + docstringVer tipos inferidos, parâmetros genéricos
renameRenomeia atomicamente em todo o projetoRenomear classe/widget/método
diagnosticsErros e warnings do arquivo ou workspaceVerificar análise estática
code_actionsCorreções e refatorações sugeridas pelo servidor"Adicionar import", "Implementar trait"
symbolsBusca de símbolos no workspaceEncontrar classe sem saber o arquivo
rename_fileMove/renomeia arquivo e reescreve importsReorganizar estrutura de diretórios

Exemplo prático: renomear um método em um projeto Flutter

# 1. Verificar referências antes da mudança
lsp action=references file=lib/services/auth_service.dart line=42 symbol="loginUser"

# 2. Aplicar rename atomicamente
lsp action=rename file=lib/services/auth_service.dart line=42 symbol="loginUser" new_name="authenticateUser"

# 3. Verificar se algo quebrou
lsp action=diagnostics file="*"

O passo 2 é atômico: ou todos os arquivos são atualizados, ou nenhum. O rename_file também reescreve imports automaticamente ao mover um arquivo — essencial ao reorganizar a estrutura de diretórios de um projeto Flutter.

Debugging (DAP): Depuração Visual no Terminal

O omp.sh suporta o Debug Adapter Protocol (DAP), permitindo que você controle um processo vivo diretamente do terminal: breakpoints, stepping, inspeção de variáveis, avaliação de expressões.

Para Dart/Flutter, o adaptador DAP é fornecido pelo próprio SDK Dart. O omp.sh o detecta automaticamente quando você inicia uma sessão de depuração com dart debug.

Exemplo: depurar um teste Falho no Flutter

// test/widget_test.dart
void main() {
  testWidgets('Contador deve incrementar', (tester) async {
    await tester.pumpWidget(const MyApp());
    expect(find.text('0'), findsOneWidget);
    await tester.tap(find.byIcon(Icons.add));
    await tester.pump();
    expect(find.text('1'), findsOneWidget); // falha?
  });
}

No omp.sh:

# Iniciar sessão de debug para o teste
debug start program="flutter test --no-publish" cwd="."

# Configurar breakpoint
debug setBreakpoint file=test/widget_test.dart line=10

# Avançar
debug continue

# Quando o breakpoint for atingido:
debug stack
debug evaluate expression="counter"

Não é mais preciso ficar adicionando print() por todo lado. O debugger está a um comando de distância.

Subagentes e Paralelismo

O omp.sh possui um sistema de subagentes que permite dividir tarefas complexas em trabalhos paralelos. Cada subagente roda em seu próprio contexto, com seu próprio conjunto de ferramentas e sessão de terminal.

Agentes inclusos

AgenteMelhor para
exploreInvestigação rápida apenas leitura
planDecisões arquiteturais multi-arquivo
designerImplementação de UI/UX, acessibilidade
reviewerRevisão de qualidade e segurança
librarianPesquisa de bibliotecas/APIs externas
oracleConsultoria de engenheiro sênior
taskDelegação multi-propósito geral
quick_taskTarefas mecânicas (modelo barato)

Exemplo: Refatorar um app Flutter com subagentes

Imagine que você precisa refatorar um app Flutter. Em vez de fazer tudo manualmente, delegue:

task agent=plan context="Refatorar app Flutter em lib/" tasks=[
  { id: "WidgetAudit",
    assignment: "Mapear todos os widgets em lib/widgets/. \
                 Listar os que precisam de extração." },
  { id: "ServiceRefactor",
    assignment: "Extrair lógica de API de lib/main.dart \
                 para lib/services/api_service.dart. \
                 Responder quando WidgetAudit perguntar." },
]

Os subagentes podem se comunicar entre si via irc (mensagens curtas entre pares), permitindo coordenação em tempo real. Quando um termina, envia uma mensagem; o outro recebe e age.

MCP (Model Context Protocol) para Flutter e Dart

O Model Context Protocol (MCP) é um protocolo aberto que permite que agentes de IA se conectem a ferramentas especializadas. O omp.sh suporta MCP nativamente, e o time do Flutter/Dart mantém um MCP Server oficial que expõe ferramentas de desenvolvimento para qualquer cliente MCP compatível.

Dart and Flutter MCP Server

O Dart and Flutter MCP Server (experimental, requer Dart 3.9+) oferece um conjunto crescente de ferramentas que dão ao seu agente IA insights profundos sobre seu projeto:

  • Analisar e corrigir erros de código no projeto
  • Resolver símbolos para elementos — verificar existência, obter documentação e assinatura
  • Inspecionar e interagir com o aplicativo em execução (screenshots, taps, texto)
  • Pesquisar pacotes no pub.dev
  • Gerenciar dependências no pubspec.yaml
  • Executar testes e analisar resultados
  • Formatar código com o mesmo formatador do dart format

Configurando o MCP Server no omp.sh

Para configurar o Dart e Flutter MCP Server no omp, adicione ao arquivo mcp.json do omp (~/.omp/agent/mcp.json ou .omp/mcp.json no projeto):

{
  "$schema": "https://raw.githubusercontent.com/can1357/oh-my-pi/main/packages/coding-agent/src/config/mcp-schema.json",
  "mcpServers": {
    "dart-flutter": {
      "type": "stdio",
      "command": "dart",
      "args": ["mcp-server"],
      "env": {}
    }
  }
}

Ou use os comandos de barra do omp:

/mcp add dart-flutter -- dart mcp-server

Uma vez configurado, as ferramentas do servidor aparecem como mcp__dart-flutter_<tool> no repertório de ferramentas do agente.

Outros MCP Servers Úteis para Flutter/Dart

MCP ServerDescrição
mcp_flutter (Arenukvern)Toolkit para agentes IA: snapshots semânticos, tap em widgets, hot-reload, logs do app Flutter em execução
dart_docs_mcpBusca metadata, READMEs, exemplos e APIs diretamente do pub.dev e GitHub
dart-mcp-server (its-dart)Alternativa open-source ao servidor oficial, com foco em análise estática
pub.dev MCPConsulta o repositório pub.dev para encontrar pacotes, versões e dependências

Skills do omp.sh e Skills para Flutter/Dart

O omp.sh possui um sistema de Skills (habilidades) que permitem adicionar instruções passo-a-passo reutilizáveis ao agente. Além disso, o ecossistema Flutter/Dart oferece Skills oficiais mantidas pelo time do Google.

Skills do Flutter/Dart (Oficiais)

O time do Dart e Flutter mantém dois repositórios oficiais de Skills que funcionam perfeitamente com o omp.sh:

  • dart-lang/skills — Skills para desenvolvimento Dart: gerar testes unitários, resolver dependências, corrigir erros de análise estática
  • flutter/agent-plugins — Skills para Flutter: layouts responsivos, roteamento declarativo (GoRouter), serialização JSON

Para instalar as Skills oficiais no seu projeto (usando npx skills, que funciona com omp.sh pois ele herda o formato .agents/skills):

# Skills Flutter
npx skills add flutter/agent-plugins --skill '*' --agent universal

# Skills Dart
npx skills add dart-lang/skills --skill '*' --agent universal

Isso cria o diretório .agents/skills/ no seu projeto, e o omp.sh descobre automaticamente as Skills de lá. Pergunte ao seu agente: "Quais skills estão disponíveis para me ajudar com [tarefa atual]?"

Skills Nativas do omp.sh

No omp, você também pode criar suas próprias Skills locais no formato .omp/skills/ ou ~/.omp/agent/skills/. Cada Skill é um arquivo markdown com metadados YAML que o agente carrega sob demanda (progressive disclosure — igual ao deferred loading do Flutter).

Exemplo de Skill para Flutter:

---
name: flutter-add-screen
description: Adiciona uma nova tela com roteamento GoRouter
---

# Adicionar Tela com GoRouter

## Passos
1. Criar o arquivo `lib/screens/nova_tela_screen.dart`
2. Criar o widget `NovaTelaScreen extends StatelessWidget`
3. Adicionar a rota em `lib/app_router.dart`:
   ```dart
   GoRoute(
     path: '/nova-tela',
     name: 'novaTela',
     builder: (context, state) => const NovaTelaScreen(),
   )
   ```
4. Executar `dart format .` no diretório do projeto

Hashline: Edições Perfeitas sem Loops de Falha

Um dos recursos mais inovadores do omp.sh é o sistema de Hashline para edições. Em vez de pedir para o modelo reescrever linhas inteiras (o que frequentemente causa problemas de whitespace e quebras), o omp usa âncoras de hash de conteúdo.

O modelo aponta para âncoras em vez de redigitar as linhas que quer mudar. Se o arquivo foi modificado entre a leitura e a escrita, os âncoras divergem — e o patch é rejeitado antes de corromper qualquer coisa. Resultado: Grok 4 Fast gasta 61% menos tokens de saída no mesmo trabalho.

Hindsight: Memória que o Agente Mantém Entre Sessões

O omp.sh possui um sistema de memória persistente chamado Hindsight. O agente escreve fatos durante a execução com retain, recupera com recall, e comprime cada sessão em um modelo mental que carrega no primeiro turno da sessão seguinte.

Por padrão, a memória é escopada por projeto — o que o agente aprende sobre um repositório Flutter fica naquele repositório. Isso significa que, ao voltar para um projeto após semanas, o agente já conhece sua estrutura, seus padrões e suas peculiaridades. Não é preciso reexplicar nada.

40+ Provedores e Centenas de Modelos

O omp.sh suporta mais de 40 provedores de IA, incluindo Anthropic, OpenAI, Google Gemini, xAI Grok, Mistral, Groq, Cerebras, Fireworks, Together, OpenRouter, e muitos mais. Você pode rotear papéis diferentes para modelos diferentes:

PapelUso
defaultTurns normais de codificação
smolSubagentes baratos (quick_task)
slowRaciocínio profundo (ultrathink)
planModo planejamento
commitGeração de mensagens de commit

Troque o modelo ativo no meio da sessão com Ctrl+P ou o comando /model.

Para provedores locais (Ollama, LM Studio, llama.cpp, vLLM), o omp.sh também funciona perfeitamente — ideal para quem quer rodar modelos localmente sem depender de APIs externas.

Extensibilidade: Plugins e Custom Tools

O omp.sh foi projetado para ser extensível. Você pode:

  • Criar plugins em TypeScript: mesmas APIs, mesmo registro de comandos, mesmas primitivas TUI que os recursos nativos usam
  • Escrever custom tools: ferramentas bespoke sem depender de um MCP server (útil para lógica específica do seu projeto)
  • Publicar em marketplaces: compartilhe seus plugins com a comunidade
  • Usar hooks: scripts que disparam em eventos do ciclo de vida da sessão
  • TTSR rules: regras de streaming com viagem no tempo — ficam dormentes até o modelo sair do script, então injetam um lembrete e pedem para tentar de novo

Modos de Execução

O omp.sh oferece quatro pontos de entrada para o mesmo motor:

ModoComandoPara que usar
Interativo (TUI)ompTrabalho diário, quando o agente pode perguntar
One-shotomp -p "prompt"Comandos rápidos, scripts, automação
RPComp --mode rpcEmbarcar em outro programa via stdio
ACPomp acpRodar dentro de editores (Zed, etc)

Fluxo de Trabalho Completo com Flutter

Aqui está um exemplo de fluxo de trabalho real usando o omp.sh com um projeto Flutter:

# 1. Iniciar sessão no diretório do projeto Flutter
cd ~/projetos/meu_app_flutter
omp

# 2. Analisar o projeto
> Analise a estrutura do projeto, liste os arquivos Dart principais

# 3. Executar análise estática
> Rode dart analyze e me mostre os warnings

# 4. Corrigir automaticamente
> Corrija os warnings de análise estática usando as ferramentas LSP

# 5. Renomear um widget (LSP)
> Renomeie o widget "HomePage" para "DashboardPage" em todo o projeto

# 6. Adicionar um pacote (via MCP)
> Encontre o melhor pacote para gráficos no pub.dev e adicione ao projeto

# 7. Debuggar um teste que falha
> Inicie uma sessão de debug no teste de widget, pare no método increment()
> e verifique o valor do contador

# 8. Commit com mensagem gerada
> omp commit -m "refactor: renomeia HomePage para DashboardPage e adiciona gráficos"

Dicas de Eficiência para Programação com omp.sh

  1. Use os modos especiais: as palavras-chave ultrathink, orchestrate e workflowz no prompt ativam comportamentos especializados — raciocínio profundo, paralelismo massivo e workflows determinísticos respectivamente.
  2. Aproveite o /review: antes de fazer merge, peça uma revisão de código com /review. O omp spawna subagentes revisores que varrem branches, commits ou trabalho não commitado em paralelo, classificando issues de P0 a P3.
  3. Habilite o advisor model: configure um segundo modelo no papel 'advisor' para revisar cada turno do agente principal. Ele roda em contexto e modelo próprios, detectando o que o agente principal pode ter deixado passar.
  4. Use o /model para trocar de provedor: se um modelo está lento ou dando respostas ruins, troque na hora com /model. Não precisa reiniciar a sessão.
  5. Colabore com /collab: gere um link e compartilhe sua sessão ao vivo com um colega. Ele pode entrar de outro terminal ou do navegador para depurarem juntos.
  6. Domine as URIs internas: pr:// para PRs, agent:// para resultados de subagentes, conflict:// para conflitos de merge. Tudo lê com o mesmo read.
  7. Use plan mode para mudanças grandes: antes de refatorar, ative o plan mode. O agente elabora um plano, você aprova, e ele executa em fases.
  8. Skills Flutter primeiro: instale as skills oficiais do Flutter/Dart antes de começar um projeto novo. Elas já contêm as melhores práticas para routing, serialização e testes.
  9. Não tenha medo de subagentes: tarefas como "auditar widgets", "extrair serviços" e "escrever testes" podem rodar em paralelo. O task com isolated: true cria workspaces isolados que evitam conflitos.
  10. Mantenha um AGENTS.md no projeto: o omp.sh lê arquivos de contexto como AGENTS.md, CLAUDE.md, .cursorrules — use para documentar decisões arquiteturais que o agente deve seguir.

Conclusão

O omp.sh não é apenas mais um assistente de terminal — é uma plataforma completa de desenvolvimento com IA que rivaliza com qualquer IDE moderna. Com suporte nativo a LSP para Dart, DAP para depuração, MCP Server oficial do Flutter, Skills especializadas, paralelismo com subagentes, e mais de 40 provedores de modelo, ele oferece um ambiente de desenvolvimento coeso e extremamente produtivo.

Para desenvolvedores Flutter/Dart, a combinação é particularmente poderosa: o LSP nativo entende a estrutura do seu projeto Dart, o MCP Server oficial permite que o agente execute tarefas complexas como gerenciar dependências, buscar pacotes, analisar erros e até interagir com o app em execução, enquanto as Skills oficiais garantem que o agente siga as melhores práticas da comunidade.

E o melhor: tudo isso roda no seu terminal, sem depender de IDE pesada, sem configurações complexas, e com a liberdade de escolher qualquer modelo de IA — local ou na nuvem.

Links úteis:

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *