Sobre o projeto

99 é um plugin Neovim que integra fluxos de trabalho de IA agêntica diretamente no editor. É descrito como um cliente de IA para Neovim, com o objetivo de aumentar, e não substituir, o programador, e é explicitamente rotulado como um produto beta cujas APIs podem mudar. Ideia central Em vez de focar apenas na substituição de trechos específicos de código, a direção declarada do projeto é voltada para programação agêntica e superfície de informações, com `search` e `work` apresentados como os pontos de entrada mais úteis. O autor enquadra o repositório como um campo de exploração para misturar IA com codificação manual tradicional. Configuração A configuração é feita por meio de uma chamada Lua `setup` em uma especificação de gerenciador de plugins. As opções incluem um logger (nível, caminho, print_on_error), um `tmp_dir`, configurações de conclusão e `md_files`, como `AGENT.md`, que são descobertos automaticamente em relação à solicitação de origem e injetados como contexto. Os keymaps são definidos pelo usuário; o README mostra exemplos para seleção visual, interrupção de solicitações e busca. API principal - `setup(opts)` — inicialização obrigatória; configura spinners, padrões e conclusão. - `search(opts)` — executa uma busca em todo o projeto com um prompt e retorna locais com notas na lista quickfix. - `visual(opts)` — envia a seleção visual atual mais um prompt e substitui a seleção pelo resultado. - `vibe(opts)` — listado sem descrição. - `open()` — abre uma janela de seleção para a última interação, mostrando resultados em uma visualização adequada ao tipo (quickfix para search/vibe, janela de tutorial para tutorial). - `view_logs()` — visualiza logs recentes e prepara a navegação por logs mais antigos e mais novos. - `stop_all_requests()` — encerra solicitações em andamento e descarta resultados. - `clear_previous_requests()` — limpa operações anteriores de busca e visual. - `Extensions` — expõe a abstração Worker. Opções e tipos O README documenta várias tabelas de opções: `_99.Options` (logger, model, in_flight_options, md_files, provider, display_errors, auto_add_skills, completion, tmp_dir), `_99.ops.Opts` (additional_prompt, additional_rules), `_99.ops.SearchOpts`, `_99.WorkOpts` (description), `_99.Completion` (source, custom_rules, files), `_99.InFlight.Opts` (throbber_opts, in_flight_interval, enable), `_99.Logger.Options` e `_99.Agents.Rule` (name, path, absolute_path). `additional_prompt` permite definir remapeamentos que são executados sem entrada interativa, por exemplo, uma busca que executa `make test` e diagnostica falhas na lista quickfix. `additional_rules` injeta contexto extra de habilidades, como uma regra "cloudflare". Conclusões No buffer de prompt, `#` autocompleta arquivos de regras dos diretórios de regras configurados, e `@` pesquisa difusamente arquivos do projeto, excluindo entradas ignoradas pelo git. O conteúdo referenciado é resolvido e injetado no contexto da IA. A conclusão nativa é o padrão; nvim-cmp e blink.cmp são suportados via `source = "cmp"` ou `"blink"`. Provedores Vários backends CLI de IA são suportados e selecionados via `provider`: OpenCodeProvider (padrão, `opencode`, modelo padrão `opencode/claude-sonnet-4-5`), ClaudeCodeProvider (`claude`, `claude-sonnet-4-5`), CursorAgentProvider (`cursor-agent`, `sonnet-4.5`) e GeminiCLIProvider (`gemini`, `auto`). Uma opção `model` pode substituir o padrão do provedor. O README observa que apontar `tmp_dir` para fora do diretório de trabalho pode causar problemas de permissão com ferramentas como Claude Code ou OpenCode. Extensões Uma extensão Worker fornece uma maneira persistente de rastrear trabalho: `set_work` registra uma descrição de trabalho e `search` usa `_99.search` para encontrar o que resta a ser feito. O autor indica que esta área provavelmente sofrerá mais mudanças, com possível suporte futuro a worktrees. As extensões Telescope e fzf-lua fornecem seletores para alternar modelo ou provedor em tempo de execução; alternar provedor redefine o modelo para o padrão desse provedor. Relatório de bugs O README pede logs de depuração completos ao relatar bugs, obtidos via `:lua require("99").view_logs()`, e avisa que os logs podem conter segredos na consulta impressa. Solicitações de recursos são explicitamente desencorajadas em favor de discussões públicas.