pingu-dev-agent
v0.1.5
Published
Pingu - Dev Agent: agente de pair programming em tempo real para Vim, Neovim e LazyVim.
Maintainers
Readme
Pingu - Dev Agent
Pingu e um agente de pair programming em tempo real orientado a arquivo e editor. Ele nao foi desenhado como um chat generico. Ele observa o buffer atual, encontra problemas e pedidos explicitos no proprio codigo, gera snippets idiomaticos por linguagem, cria contexto persistente, sugere ou cria testes, injeta dependencias faltantes e executa acoes de terminal com politica de risco.
O projeto funciona hoje em Vim/Neovim, com foco pratico em LazyVim, runtime local e cobertura offline por linguagem. Isso significa que uma parte grande do fluxo funciona sem API key.
O que o Pingu faz
- Analisa o arquivo atual em tempo real e publica diagnosticos orientados a manutencao.
- Interpreta comentarios acionaveis para gerar codigo no proprio arquivo.
- Cria
context_filea partir de blueprints descritos no comentario, com scaffold nativo nas stacks principais. - Gera ou complementa testes automaticamente e cria
tests/outest/quando necessario, seguindo o convenio da linguagem. - Detecta dependencias faltantes quando o snippet gerado exige imports,
use,requireou#include. - Consulta bibliotecas Node instaladas e importadas pelo buffer para orientar geracoes e correcoes com base na API real da dependencia.
- Tenta inserir imports e includes na fronteira correta do arquivo em vez de simplesmente despejar tudo na linha do comentario.
- Executa
terminal_taskcom inferencia por stack e politica de risco configuravel. - Expoe follow-up acionavel para continuar o pareamento sem sair do arquivo.
- Mantem um fluxo unico e consistente para
LazyVim,VimeNeovim.
O que o Pingu melhora para quem usa
- Reduz troca de contexto: o pedido nasce no comentario do codigo e a resposta volta para o proprio arquivo.
- Acelera scaffolding: funcoes, estruturas, blueprints e testes saem sem interromper o fluxo.
- Diminui repeticao: imports, snippets base, comentarios de manutencao e testes complementares deixam de ser trabalho manual.
- Mantem consistencia arquitetural: o contexto
**registra regras de stack e de arquitetura para orientar geracoes futuras. - Torna o loop de review mais curto: o agente analisa, sugere, aplica, remove o gatilho e reanalisa.
- Funciona bem em ambiente local: boa parte das capacidades ja esta no runtime offline.
Barra de excelencia
O backlog oficial da barra de excelencia do agente esta em docs/agent-excellence-backlog.md.
Esse contrato organiza o que o Pingu precisa fazer automaticamente para ser excelente:
- nao quebrar codigo nem imports
- operar no arquivo atual por padrao
- comentar e corrigir com contexto real
- validar e reverter sozinho quando piorar o estado do arquivo
- manter baixo custo no loop de edicao
Taxonomia de erros de desenvolvimento
A taxonomia versionada fica em config/developer-error-taxonomy.json.
Ela organiza os erros que o Pingu deve tratar por familias:
- sintaxe e estrutura
- higiene de workspace
- nulabilidade e igualdade
- imports e dependencias
- tratamento de erros
- contrato publico
- arquitetura e testes
- fluxo/complexidade
- comandos de runtime
Nem toda classe de erro tem auto-fix seguro. Quando a correcao depende de tipo, framework, contrato de dominio ou efeito colateral externo, o Pingu deve sinalizar ou pedir contexto em vez de reescrever especulativamente.
Correcoes deterministicas ja mapeadas:
- JavaScript/TypeScript:
==e!=viram===e!==quando nao envolvemnull/undefined. - Python:
== Nonee!= Noneviramis Noneeis not None. - Python:
except:viraexcept Exception:. - Ruby: comparacoes diretas com
nilviramnil?. - Elixir: comparacoes diretas com
nilviramis_nil/1.
Operacao de issues
O fluxo de melhoria continua do Pingu via GitHub Issues esta em docs/triage.md.
Esse fluxo define:
- template minimo para bug e improvement
- labels sugeridas para triagem
- prioridades
P0,P1eP2 - regra de reproducao minima e criterio de aceite
- manifesto versionado de labels em
.github/labels.json - workflow manual
sync-issue-labelspara sincronizar labels no GitHub
O que o Pingu nao e
- Nao e um chat generico de perguntas soltas.
- Nao substitui decisao arquitetural do time.
- Nao promete gerar qualquer coisa em qualquer linguagem sem contrato de capacidade.
- Nao gera cobertura para arquivos que ja estao dentro de
tests/outest/, evitando loop de auto-geracao.
Instalacao rapida
CLI pingu
Quando o pacote estiver publicado no npm:
npm install -g pingu-dev-agent
pingu doctorEnquanto o primeiro publish no npm nao estiver concluido, instale direto do GitHub:
npm install -g github:andersonflima/pingu_ai_codding_pair_programming
pingu doctorPara desenvolvimento local:
git clone [email protected]:andersonflima/pingu_ai_codding_pair_programming.git
cd pingu_ai_codding_pair_programming
npm install --ignore-scripts
npm link
pingu doctorIDE
Para Vim, Neovim e LazyVim, instale o plugin pelo GitHub conforme a secao Instalacao via GitHub no Vim. A IDE usa o mesmo runtime do CLI, entao pingu doctor tambem ajuda a validar Node.js, runtime local, linguagens ativas e chave OpenAI opcional.
Como o loop funciona
- Voce abre um arquivo suportado em
Vim/Neovim. - O Pingu analisa o buffer em abertura, foco, edicao e
save, conforme o fluxo do editor. - Quando encontra um comentario acionavel, ele transforma isso em uma issue do tipo:
comment_taskcontext_fileunit_testterminal_task
- O editor aplica a acao automaticamente ou via quick fix, dependendo do fluxo.
- Quando a acao termina com sucesso, a linha gatilho e removida sem deixar o buffer aberto divergente do arquivo escrito em disco.
- O arquivo e reanalisado para continuar o pareamento.
O runtime que atende a IDE e o CLI e o mesmo. Isso significa que os comentarios acionaveis sao detectados pelo mesmo analisador nos dois modos. A diferenca intencional e operacional: pingu fix corrige apenas erros locais seguros; pingu prompts executa explicitamente os prompts dos comentarios.
Tipos de comentario acionavel
: ou :: gera ou ajusta codigo
Use o prefixo de comentario da linguagem seguido de ::
//: funcao somaEm linguagens com comentario //, o formato recomendado para evitar ambiguidade com bloco e JSDoc e //:::
//:: funcao soma#: implementar funcao para calcular total do pedido#:: funcao soma--: cria modulo billing com funcoes listar e criarPara comentario de bloco, use marcador explicito dentro do bloco (/*::), em vez de texto livre:
/*:: funcao dice que retorna um numero random de um dado de 20 lados */** ou ::: cria contexto persistente e pode gerar scaffold
// ** bff para crud de usuarioFormato recomendado em comentarios com //:
//::: bff para crud de usuario-- ** projeto existente usa onion architecture, controllers finos e casos de uso puros#::: contexto Phoenix usa contexts por dominio, funcoes puras no core e Ecto apenas na fronteiraQuando o blueprint descreve um fluxo de BFF CRUD, o scaffold nativo hoje e mais forte em:
JavaScripteTypeScriptPythonGoRustElixirRubyC
* executa acao de terminal
//* rodar testes# * listar arquivos do projeto# * rodar testes-- * executar este arquivoMarcadores escapados
Se voce quiser manter o comentario literal e impedir a acao do agente, use as variantes escapadas:
\s:\s::\s*\s**\s:::
Exemplos reais de uso e output
1. Geracao simples de funcao em JavaScript
Entrada:
//: funcao somaOutput gerado:
/**
* Orquestra o comportamento principal de soma
* @param {*} a Parametro de entrada do fluxo.
* @param {*} b Parametro de entrada do fluxo.
* @returns {*} Valor calculado conforme a regra principal da funcao.
*/
function soma(a, b) {
// Retorna o resultado consolidado desta funcao.
return a + b
}O que melhora aqui:
- a funcao ja nasce com nome util
- a assinatura vem coerente com a intencao
- a documentacao minima de manutencao ja entra junto
2. Funcao com marcador explicito em C
Entrada:
//:: funcao dice que retorna um numero random de um dado de 20 ladosOutput gerado no arquivo:
int dice(void) {
// Retorna o resultado consolidado desta funcao.
return (rand() % 20) + 1;
}Output complementar de dependencia:
#include <stdlib.h>O que melhora aqui:
- o gatilho fica explicito e menos sujeito a falso positivo em comentario livre
- o retorno fica consistente com a semantica de
d20 - o agente detecta o
#includefaltante
3. Blueprint de contexto com scaffold inicial
Entrada:
//::: bff para crud de usuarioOutputs tipicos:
- atualiza
.gitignorepara ignorar.realtime-dev-agent/ - cria
.realtime-dev-agent/contexts/bff-crud-usuario.md - cria scaffold inicial seguindo Onion Architecture e o source root da stack atual
Arquivos tipicos gerados:
.realtime-dev-agent/contexts/bff-crud-usuario.md
src/domain/entities/usuario.js
src/domain/repositories/usuario-repository.js
src/application/use-cases/list-usuarios.js
src/application/use-cases/get-usuario-by-id.js
src/application/use-cases/create-usuario.js
src/application/use-cases/update-usuario.js
src/application/use-cases/delete-usuario.js
src/infrastructure/repositories/in-memory-usuario-repository.js
src/interfaces/http/controllers/usuario-controller.js
src/interfaces/http/routes/usuario-routes.js
src/main/factories/usuario-crud-factory.jsExemplo equivalente em Python:
.realtime-dev-agent/contexts/bff-crud-usuario.md
app/domain/usuario.py
app/domain/usuario_repository.py
app/application/create_usuario.py
app/infrastructure/in_memory_usuario_repository.py
app/main/build_usuario_crud.pyO que melhora aqui:
- o time registra contexto arquitetural duravel
- o agente passa a usar esse contrato nas proximas geracoes
- o bootstrap de um BFF CRUD deixa de ser trabalho repetitivo
4. Acao de terminal no Vim / Neovim
Entrada:
//* rodar testesOutput esperado no terminal:
[RealtimeDevAgent] command: npm test
...
[RealtimeDevAgent] exit code: 0
[RealtimeDevAgent] terminal pronto para o proximo comando.Comportamento esperado:
- o terminal do editor abre
- o comando e inferido pelo contexto do projeto
- a linha gatilho e removida quando o processo termina com sucesso
5. Follow-up acionavel
Quando o editor encontra um problema elegivel, o Pingu pode inserir um follow-up logo abaixo do trecho atual.
Exemplo de output:
// : Use um ticket ou comentario estruturado para pedir a proxima alteracao aquiO que melhora aqui:
- o pareamento continua no proprio arquivo
- o desenvolvedor nao precisa lembrar a sintaxe do marcador
- o editor vira a superficie principal de colaboracao com o agente
6. Diagnosticos de manutencao
Mesmo sem comentario acionavel, o Pingu pode propor manutencao.
Exemplo em Python:
Entrada:
def soma(a, b):
return a + bOutput tipico:
function_docflow_comment
Snippets esperados:
# Orquestra o comportamento principal de soma
# a: parametro de entrada do fluxo.
# b: parametro de entrada do fluxo.
# Retorno: Valor calculado conforme a regra principal da funcao. # Retorna o resultado consolidado desta funcao.O que o : consegue construir
O parser do : ja entende intencao explicita e tenta gerar estrutura idiomatica por linguagem.
Categorias suportadas:
functioncruduitestcommentenumclassinterfaceoutypestructmoduleounamespaceobjectcollectionvariablescript(principalmente em Shell)
Quando uma estrutura equivalente ja existir no arquivo, o agente tenta evitar duplicacao.
Cobertura por linguagem
O contrato declarativo canonico fica em lib/language-capabilities.js. Esse arquivo define extensoes, editorFeatures, commentTaskIntents, capacidades offline e boas praticas da linguagem.
Resumo pratico:
- JavaScript, TypeScript e React:
comment_task,context_file,unit_test,terminal_taskfuncoes, CRUD, UI, enum, class, interface/type, module, objeto, colecao e variavel - Python:
comment_task,context_file,unit_test,terminal_taskfuncoes, Enum, class, module, object, collection e variable - Elixir:
comment_task,context_file,unit_test,terminal_taskfuncoes,defmodule, contratos com@type, enums por atoms e CRUD inicial - Go:
comment_task,context_file,unit_test,terminal_taskfuncoes,struct,interface, enum tipado, module e object - Rust:
comment_task,context_file,unit_test,terminal_taskfuncoes,struct,trait,enum,mod, object e collection - Ruby:
comment_task,context_file,unit_test,terminal_taskfuncoes,class,module,Struct, hash e enum equivalente - C:
comment_task,context_file,unit_test,terminal_taskfuncoes,struct,enume contratos simples - Lua:
comment_task,context_file,unit_test,terminal_taskfuncoes, modulos, tabelas, enums equivalentes e CRUD inicial - Vimscript:
comment_task,context_file,unit_test,terminal_taskfuncoes, namespace local, dicionarios e helpers de automacao - Shell (
.sh,.bash,.zsh):comment_task,context_file,unit_test,terminal_taskfuncoes, scripts, colecoes simples e enums equivalentes - Terraform:
comment_task,context_file,unit_test,terminal_tasksnippets estruturados,required_version, blueprint de contexto e testes de contrato - YAML:
comment_task,context_file,unit_test,terminal_taskconfiguracao estruturada e testes de contrato - Markdown:
comment_task,context_file,unit_test,terminal_taskdocumentos, terminal acionavel por comentario e testes de contrato - Mermaid:
comment_task,context_file,unit_test,terminal_taskdiagramas, terminal acionavel por comentario e testes de contrato - Dockerfile:
comment_task,context_file,unit_test,terminal_taskcontrato deWORKDIR, contexto persistente, snippets operacionais e testes - TOML:
comment_task,context_file,unit_test,terminal_taskconfiguracao, secoes estruturadas, testes de contrato e terminal por comentario
Maturidade automatica atual do core:
| Linguagem | Comentarios e docs | Correcoes de codigo | Testes automaticos | Observacao |
| --- | --- | --- | --- | --- |
| JavaScript / TypeScript | forte | forte | forte | cobre function_doc, class_doc, variable_doc, context_contract e testes para funcoes e classes exportadas |
| Python | forte | forte | forte | cobre function_doc, class_doc, variable_doc, context_contract e testes para funcoes e classes |
| Elixir | forte | forte | forte | cobre @moduledoc, @doc, @spec, context_contract e testes publicos do modulo |
| Go | forte | forte | forte | cobre function_doc, context_contract e testes para funcoes e tipos publicos |
| Rust | forte | forte | forte | cobre function_doc, context_contract e testes para funcoes e tipos publicos |
| Ruby | forte | forte | forte | cobre function_doc, class_doc, variable_doc, context_contract e testes para funcoes e classes |
| C | forte | forte | forte | cobre function_doc, context_contract e testes de contrato nativos |
| Lua | forte | parcial | forte | cobre function_doc, variable_doc, context_contract e testes de disponibilidade do modulo |
| Vimscript | forte | parcial | forte | cobre function_doc, context_contract e testes de disponibilidade por funcao |
| Shell | forte | parcial | forte | cobre function_doc, context_contract textual e testes de contrato em shell |
| Terraform / YAML / Markdown / Mermaid / Dockerfile / TOML | forte | estrutural | forte | foco em comment_task, context_file, testes de contrato e terminal acionavel |
Regras de testes automaticos
- O agente cria automaticamente
tests/outest/pelo convenio da linguagem quando a pasta ainda nao existir. - Quando o arquivo ainda nao tem teste correspondente, ele cria o teste base.
- Quando o arquivo ja tem teste base, ele tenta gerar testes complementares para simbolos publicos ainda sem cobertura.
- Em linguagens com classe ou tipo publico, o agente tambem gera teste de disponibilidade para essas estruturas, nao so para funcoes.
- Para
Dockerfile,compose,MarkdowneMermaid, o agente gera testes de contrato em shell dentro detests/.
Como o terminal e inferido
O Pingu tenta escolher o comando mais natural para o projeto e para a linguagem:
- Node.js:
npm test,npm run dev,npm run build,npm run lint,npm run format - Elixir:
mix test,mix run,mix compile,mix format - Go:
go test ./...,go run,go build ./...,gofmt -w - Rust:
cargo test,cargo run,cargo build,cargo fmt,cargo clippy - Python:
python -m pytest,python3 -m pytest,python arquivo.py,python3 arquivo.py,python -m py_compile,python3 -m py_compile - Ruby:
ruby arquivo.rbou testes quandotest/existir - Vimscript:
nvim --headless -u NONE -i NONE -S arquivo +qa! - Comandos genericos de leitura:
pwd,ls -la,git status,git diff
Como o Pingu aparece em cada editor
Vim / Neovim
- analise continua
- painel do agente
- auto-fix
terminal_task- follow-up no painel
Atalhos principais:
<leader>i: analisa o arquivo atual<leader>ia: abre ou fecha o painel<Tab>,ioua: aplica a sugestao selecionadaf: insere follow-up acionavelr: reanalisaq: fecha o painel
CLI de terminal
O Pingu tambem pode ser usado fora do editor como CLI, mantendo os flags legados que o Vim/Neovim ja usam.
Comandos principais:
pingu analyze src/app.js --json
pingu analyze src/app.js src/domain/user.py --json
pingu analyze src --json
pingu analyze --stdin --source-path src/app.js --json
pingu fix src/app.js
pingu fix src/app.js --write
pingu fix src --check
pingu fix src --write
pingu prompts src/app.js
pingu prompts src/app.js --write
pingu prompts src --check
pingu comments src/app.js --write
pingu prompts lib/calculator.ex --write
pingu analyze lib/calculator.ex test/calculator_test.exs --json
pingu offline --json
pingu taxonomy
pingu doctorEquivalentes pelo entrypoint direto:
node realtime_dev_agent.js analyze src/app.js --json
node realtime_dev_agent.js fix src/app.js --write --json
node realtime_dev_agent.js prompts src/app.js --write --json
node realtime_dev_agent.js taxonomy --json
node realtime_dev_agent.js doctor --jsonContratos:
analyzeusa o mesmo motor do editor, aceita arquivos/diretorios e nao escreve arquivos.fixmostra um plano por padrao e so escreve com--write.fix --writeaplica apenas correcoes locais de erro/higiene com alta confianca no proprio arquivo.fix --checknao escreve e retorna exit code1quando houver correcao aplicavel; use em CI/pre-commit.- geracao estrutural,
comment_task, testes, arquivos adjacentes e terminal continuam fora dofixpadrao. promptsmostra os comentarios acionaveis encontrados e nao escreve por padrao.prompts --writeexecutacomment_taskecontext_filede forma explicita, usando o mesmo motor da IDE e validando o resultado antes de concluir.prompts --checknao escreve e retorna exit code1quando existir prompt acionavel pendente; use em CI/pre-commit quando quiser bloquear comentarios//::,#:ou equivalentes nao aplicados.commentse alias deprompts.offlinemostra a cobertura offline das linguagens ativas paracomment_task,context_file,unit_testeterminal_task.taxonomylista as familias de erro e osissue kindsmapeados.doctorvalida ambiente local, runtime, linguagens ativas e presenca opcional deOPENAI_API_KEY.--serve,--stdin,--analyzee--autofix-guardcontinuam preservados para a integracao da IDE.
Contrato da IA
Quando o Pingu usa IA, o payload enviado inclui:
- buffer completo do arquivo atual
- janela de foco em torno do comentario ou issue
- comentario acionavel com marcador, papel, linha gatilho e texto original
- memoria persistente do projeto, quando existir
- perfil da linguagem e boas praticas ativas
- mapa de simbolos do arquivo, incluindo funcoes, metodos, classes, tipos e modulos ja existentes
Esse contrato existe para reduzir chute e evitar regressao. A IA deve complementar o codigo existente, preservar contratos observaveis, nao duplicar simbolos e retornar o menor trecho aplicavel. No CLI, prompts e fixes so escrevem com --write; na IDE, o auto-fix reanalisa e passa pelo guard antes de considerar o lote concluido.
Cobertura Offline
O Pingu deve continuar util sem IA. O contrato offline versionado cobre todas as linguagens ativas do registry para:
- comentarios acionaveis:
comment_task - contexto persistente:
context_file - testes:
unit_test - terminal seguro/manual:
terminal_task
Para verificar:
pingu offline --jsonO resultado esperado para o registry atual e percent: 100.
Quando a IA esta em modo prefer, ela pode melhorar a resposta, mas nao e requisito para concluir o fluxo. Se a IA falhar, o Pingu cai para o gerador offline. Apenas modo force bloqueia fallback e pode emitir ai_required.
Correcoes offline tambem rodam pelo analisador e pelo CLI:
pingu fix src --writeExemplos de correcoes deterministicas:
- JavaScript/TypeScript: igualdade estrita quando seguro.
- Python:
Nonecomis/is noteexcept Exception. - Ruby:
nil?. - Elixir:
is_nil/1. - higiene geral: whitespace, tabs, linhas duplicadas e sintaxe local.
Exemplo Elixir
Arquivo lib/calculator.ex:
#:: funcao somaAplicando pelo CLI:
pingu prompts lib/calculator.ex --writeResultado esperado:
defmodule Calculator do
@doc """
Orquestra o comportamento principal de soma
"""
@spec soma(any(), any()) :: any()
def soma(a, b) do
a + b
end
endOutros fluxos Elixir cobertos:
#::gera ou ajusta codigo no arquivo atual.#:::cria contexto persistente e scaffold quando o pedido permitir.# * rodar testesinferemix test.# * compilar projetoinferemix compile.# * formatar projetoinferemix format.unit_testgera teste ExUnit emtest/**/*_test.exs.
Instalacao via GitHub no Vim
O repositorio expoe plugin/ e autoload/ na raiz, entao pode ser instalado direto do GitHub.
lazy.nvim
{
"andersonflima/pingu_ai_codding_pair_programming",
config = function()
vim.g.realtime_dev_agent_start_on_editor_enter = 1
vim.g.realtime_dev_agent_open_window_on_start = 0
vim.g.realtime_dev_agent_auto_fix_enabled = 1
vim.g.realtime_dev_agent_target_scope = "current_file"
vim.g.realtime_dev_agent_auto_fix_scope = "near_cursor"
vim.g.realtime_dev_agent_auto_fix_near_cursor_radius = 24
vim.g.realtime_dev_agent_auto_fix_cluster_gap = 8
vim.g.realtime_dev_agent_auto_fix_visual_mode = "preserve"
vim.g.realtime_dev_agent_review_on_open = 1
vim.g.realtime_dev_agent_realtime_on_change = 1
vim.g.realtime_dev_agent_realtime_on_cursor_hold = 1
vim.g.realtime_dev_agent_realtime_on_buf_enter = 1
vim.g.realtime_dev_agent_realtime_insert_mode = 1
vim.g.realtime_dev_agent_realtime_async = 1
vim.g.realtime_dev_agent_realtime_use_daemon = 1
vim.g.realtime_dev_agent_realtime_focus_scope_enabled = 1
vim.g.realtime_dev_agent_auto_on_save = 1
vim.g.realtime_dev_agent_auto_check_max_lines = 600
vim.g.realtime_dev_agent_analysis_cache_max_entries = 24
vim.g.realtime_dev_agent_realtime_auto_fix_max_per_check = 2
vim.g.realtime_dev_agent_auto_fix_doc_cursor_context_only = 0
vim.g.realtime_dev_agent_auto_fix_local_cursor_context_only = 1
end,
}vim-plug
Plug 'andersonflima/pingu_ai_codding_pair_programming'Startup automatico no Vim
- inicia no primeiro buffer suportado
- mantem o painel fechado por padrao
- por padrao usa
let g:realtime_dev_agent_target_scope = 'current_file'; useworkspaceapenas com opt-in explicito let g:realtime_dev_agent_open_window_on_start = 0mantem o agente ativo sem abrir painellet g:realtime_dev_agent_open_window_on_start = 1reabre o painel no startup automaticolet g:realtime_dev_agent_start_on_editor_enter = 0desliga o startup automaticolet g:realtime_dev_agent_review_on_open = 1mantem revisao automatica ao abrir arquivoslet g:realtime_dev_agent_target_scope = 'current_file'mantem analise e correcoes no arquivo aberto, mas ainda permiteunit_testadjacente seguro econtext_filepara.realtime-dev-agent/e.gitignorelet g:realtime_dev_agent_target_scope = 'workspace'mantem acoes multi-arquivo amplas fora desse conjunto segurolet g:realtime_dev_agent_auto_fix_scope = 'near_cursor'aplica apenas o trecho mais proximo do cursorlet g:realtime_dev_agent_auto_fix_scope = 'file'volta para o comportamento de arquivo inteiro por ciclolet g:realtime_dev_agent_auto_fix_scope = 'cursor_only'restringe ao cursor imediatolet g:realtime_dev_agent_auto_fix_near_cursor_radius = 24controla a distancia maxima entre cursor e trecho elegivellet g:realtime_dev_agent_auto_fix_cluster_gap = 8controla a distancia maxima entre issues do mesmo trecholet g:realtime_dev_agent_realtime_on_cursor_hold = 1faz o agente agir sozinho quando o cursor para sobre um bloco sem exigir edicao manuallet g:realtime_dev_agent_realtime_on_buf_enter = 1reanalisa o contexto assim que voce entra no arquivolet g:realtime_dev_agent_auto_on_save = 1consolida comentarios, fixes locais, blueprint seguro e testes adjacentes automaticamente no savelet g:realtime_dev_agent_auto_fix_visual_mode = 'preserve'reduz ruido visual durante o batchlet g:realtime_dev_agent_realtime_insert_mode = 1mantem analise tambem no meio da digitacaolet g:realtime_dev_agent_realtime_async = 1usa job assincrono no Neovim para evitar congelar a UI durante o loop automaticolet g:realtime_dev_agent_realtime_use_daemon = 1reaproveita um runtime residente no Neovim para reduzir spawn por analise realtimelet g:realtime_dev_agent_realtime_focus_scope_enabled = 1limita a analise leve realtime ao bloco atual do cursorlet g:realtime_dev_agent_node_path = '/caminho/absoluto/para/node'fixa o runtime quando o PATH do Neovim difere do shelllet g:realtime_dev_agent_auto_check_max_lines = 600limita checks automaticos a arquivos menoreslet g:realtime_dev_agent_analysis_cache_max_entries = 24reaproveita a ultima analise do mesmo texto e reduz relancamento do agentelet g:realtime_dev_agent_realtime_auto_fix_max_per_check = 2reduz o lote automatico por ciclo realtime para manter o editor fluidolet g:realtime_dev_agent_auto_fix_doc_cursor_context_only = 0deixafunction_doc,class_doc,variable_doceflow_commentelegiveis no arquivo inteirolet g:realtime_dev_agent_auto_fix_local_cursor_context_only = 1restringedebug_output, syntax local,trailing_whitespace,function_spec,markdown_title,terraform_required_versionedockerfile_workdirao bloco textual atuallet g:realtime_dev_agent_auto_fix_doc_cursor_context_max_lines = 80controla o tamanho maximo desse bloco automatico- com os defaults atuais no Vim, o auto-fix realtime continua priorizando correcoes locais para syntax e higiene, valida o lote antes de concluir e mantem o escopo no arquivo atual; no
save, o agente pode incluirunit_testadjacente seguro econtext_filepara.realtime-dev-agent/e.gitignore, enquantoterminal_taskcontinua fora do auto-fix padrao e sob controle explicito do runtime de terminal
Terminal no Vim / Neovim
let g:realtime_dev_agent_terminal_actions_enabled = 0desligaterminal_tasklet g:realtime_dev_agent_terminal_risk_mode = 'safe'(default)let g:realtime_dev_agent_terminal_risk_mode = 'workspace_write'let g:realtime_dev_agent_terminal_risk_mode = 'all'- comandos como teste, build, install e scripts locais exigem
workspace_write let g:realtime_dev_agent_terminal_strategy = 'background'(default)let g:realtime_dev_agent_terminal_strategy = 'auto'let g:realtime_dev_agent_terminal_strategy = 'toggleterm'let g:realtime_dev_agent_terminal_strategy = 'native'
Credenciais e variaveis de ambiente
Os fluxos orientados por IA usam OpenAI Codex por padrao. O contrato principal agora e OPENAI_API_KEY.
Linguagens ativas por padrao no runtime:
- todas as linguagens mapeadas no registry, exceto o fallback
default - hoje isso inclui
javascript,python,elixir,go,rust,ruby,lua,vim,c,terraform,yaml,markdown,mermaid,dockerfile,shelletoml
Variaveis comuns:
OPENAI_API_KEYPINGU_OPENAI_MODELPINGU_OPENAI_TIMEOUT_MSPINGU_AUTOMATIC_AI_COMMENT_MAX_ISSUESPINGU_FLOW_COMMENT_MAX_LINESPINGU_LIGHT_ANALYSIS_DEEP_PASS_MAX_LINES
Exemplo:
export OPENAI_API_KEY="sua_chave_aqui"
export PINGU_OPENAI_MODEL="gpt-5-codex"Importante:
- Vim e Neovim herdam variaveis de ambiente no momento em que sao iniciados
- se a chave mudar depois que o editor ja estiver aberto, reinicie o editor
- nunca commite credenciais
PINGU_AUTOMATIC_AI_COMMENT_MAX_ISSUES=8limita quantas issues de comentario/documentacao podem subir para IA por ciclo automatico; use0para remover o limitePINGU_DOCUMENTATION_AUTO_FIX_MIN_CONFIDENCE=0.60controla o limiar minimo de confianca para comentario automatico documental; valores menores deixam o lote mais agressivoPINGU_DOCUMENTATION_MAX_LINES=420evitafunction_doc,class_doc,variable_doceflow_commentautomaticos em arquivos grandes; use0para remover o cortePINGU_FLOW_COMMENT_MAX_LINES=260evitaflow_commentautomatico em arquivos grandes; use0para remover o cortePINGU_LIGHT_ANALYSIS_DEEP_PASS_MAX_LINES=260limita checks mais profundos do modolighta arquivos menores; use0para manter o deep pass mesmo em arquivo grandePINGU_AUTOFIX_LARGE_FILE_LINE_THRESHOLD=260define a partir de quantas linhas o runtime encolhe o lote automaticoPINGU_AUTOFIX_DOC_MAX_PER_PASS=0limita quantas issues documentais sobem por ciclo;0remove o cortePINGU_AUTOFIX_DOC_MAX_PER_PASS_LARGE_FILE=4limita docstrings/comentarios por ciclo em arquivo grande- com
OPENAI_API_KEYconfigurada, o agente pode usar OpenAI Codex nos fluxos assistidos por IA - no LazyVim, os equivalentes sao
g:realtime_dev_agent_auto_fix_large_file_line_threshold,g:realtime_dev_agent_auto_fix_large_file_radiuseg:realtime_dev_agent_auto_fix_doc_max_per_check_large_file - no LazyVim,
debug_outputefunction_speccursor-local entram no lote automatico seguro sem depender da trilha live
Como funciona internamente
realtime_dev_agent.js: CLI do runtime principallib/analyzer.js: analise e emissao de issueslib/generation*.js: geracao de snippets, blueprints, testes, dependencias e terminal taskslib/language-capabilities.js: contrato declarativo de linguagemvim/,plugin/,autoload/: runtime do plugin Vim / Neovim
Estrutura principal
realtime_dev_agent.js: entrada CLI do agentelib/: analise, geracao e suportevim/: implementacao principal do plugin Vimplugin/eautoload/: wrappers para instalacao direta no Vim
