About this project

99 is a Neovim plugin that integrates agentic AI workflows directly into the editor. It is described as an AI client for Neovim aimed at augmenting rather than replacing the programmer, and is explicitly labeled a beta product whose APIs may still change. Core idea Rather than focusing only on replacing specific pieces of code, the project's stated direction is toward agentic programming and information surfacing, with `search` and `work` presented as the more useful entry points. The author frames the repository as an exploration ground for mixing AI with traditional hand coding. Setup Configuration is done through a Lua `setup` call in a plugin manager spec. Options include a logger (level, path, print_on_error), a `tmp_dir`, completion settings, and `md_files` such as `AGENT.md` that are automatically discovered relative to the originating request and injected as context. Keymaps are user-defined; the README shows examples for visual selection, stopping requests, and search. Main API - `setup(opts)` — required initialization; configures spinners, defaults and completion. - `search(opts)` — runs a project-wide search with a prompt and returns locations with notes into the quickfix list. - `visual(opts)` — sends the current visual selection plus a prompt and replaces the selection with the result. - `vibe(opts)` — listed without description. - `open()` — opens a selection window for the last interaction, showing results in a type-appropriate view (quickfix for search/vibe, tutorial window for tutorial). - `view_logs()` — views recent logs and prepares navigation of older and newer logs. - `stop_all_requests()` — kills in-flight requests and discards results. - `clear_previous_requests()` — clears prior search and visual operations. - `Extensions` — exposes the Worker abstraction. Options and types The README documents several option tables: `_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`, and `_99.Agents.Rule` (name, path, absolute_path). `additional_prompt` allows defining remaps that run without interactive input, for example a search that runs `make test` and diagnoses failures into the quickfix list. `additional_rules` injects extra skill context, such as a "cloudflare" rule. Completions In the prompt buffer, `#` autocompletes rule files from configured rule directories, and `@` fuzzy-searches project files while excluding gitignored entries. Referenced content is resolved and injected into the AI context. Native completion is the default; nvim-cmp and blink.cmp are supported via `source = "cmp"` or `"blink"`. Providers Multiple AI CLI backends are supported and selected via `provider`: OpenCodeProvider (default, `opencode`, default model `opencode/claude-sonnet-4-5`), ClaudeCodeProvider (`claude`, `claude-sonnet-4-5`), CursorAgentProvider (`cursor-agent`, `sonnet-4.5`), and GeminiCLIProvider (`gemini`, `auto`). A `model` option can override the provider default. The README notes that pointing `tmp_dir` outside the working directory may cause permission issues with tools like Claude Code or OpenCode. Extensions A Worker extension provides a persistent way to track work: `set_work` records a work description and `search` uses `_99.search` to find what remains to be done. The author indicates this area will likely see the most change, with possible future worktree support. Telescope and fzf-lua extensions provide pickers to switch model or provider at runtime; switching provider resets the model to that provider's default. Bug reporting The README asks for full debug logs when reporting bugs, obtainable via `:lua require("99").view_logs()`, and warns that logs may contain secrets in the printed query. Feature requests are explicitly discouraged in favor of public discussions.