{"slug": "show-hn-i-built-a-neovim-plugin-to-answer-questions-about-your-config", "title": "Show HN: I built a Neovim plugin to answer questions about your config", "summary": "A developer released how.nvim, a Neovim plugin that answers questions about a user's configuration using the official Codex CLI, requiring Neovim 0.10+ and a ChatGPT or OpenAI API key. The plugin inspects effective mappings, loaded plugins, config files, OS, and distribution, and supports read-only operations with sandboxed write proposals. It is available under the MIT license and can be installed via lazy.nvim.", "body_md": "Ask the Neovim you are actually running.\n\n`how.nvim`\n\nis a small, keyboard-first configuration assistant backed by the\nofficial Codex CLI. It inspects effective mappings, loaded plugins, your config\nfiles, operating system, and detected distribution before answering.\n\n```\n:How how do I move between buffers?\n```\n\nNo API key is required when Codex is signed in with an eligible ChatGPT plan.\nThe plugin does not read or store credentials; it talks to `codex app-server`\n\nover local stdio.\n\n- Native Neovim buffers, splits, motions, search, yanks, and marks.\n- No UI dependencies and no embedded browser.\n- Short answers based on active runtime state rather than remembered defaults.\n- Read-only by default, enforced by the Codex sandbox.\n- A config change requires a detected proposal,\n`a`\n\n, and an explicit confirmation. - Writes are scoped to\n`stdpath(\"config\")`\n\n. Commands require another approval.\n\n- Neovim 0.10+\n[Codex CLI](https://github.com/openai/codex)`codex login`\n\ncompleted with ChatGPT or an OpenAI API key\n\nRun `:checkhealth how`\n\nafter installation.\n\nDuring local development with lazy.nvim:\n\n```\n{\n  dir = vim.fn.expand(\"~/Developer/how.nvim\"),\n  name = \"how.nvim\",\n  cmd = { \"How\", \"HowAsk\", \"HowToggle\", \"HowApply\" },\n  keys = {\n    { \"<leader>ah\", \"<cmd>How<cr>\", desc = \"Ask How\" },\n  },\n  opts = {},\n}\n```\n\nAfter the repository is published, replace `dir`\n\nwith its GitHub `owner/repo`\n\n.\n\n```\n:How                         \" open the prompt\n:How why does K open hover?  \" ask directly\n:HowToggle                   \" toggle the panel\n:HowApply                    \" confirm the last concrete proposal\n:HowStop                     \" stop streaming\n:HowReset                    \" new conversation\n```\n\nInside the panel:\n\n| Key | Action |\n|---|---|\n`i` |\nAsk a question |\n`a` |\nApply the last proposal |\n`R` |\nStart a new conversation |\n`<C-c>` |\nStop the response |\n`g?` |\nToggle help |\n`q` |\nClose the panel |\n\nThe panel is a normal read-only Markdown buffer. `j`\n\n, `k`\n\n, `/`\n\n, `n`\n\n, `N`\n\n, `yy`\n\n,\nmarks, and window commands work normally.\n\n``` js\nrequire(\"how\").setup({\n  window = {\n    position = \"right\", -- \"left\" also works\n    width = 0.38,\n    min_width = 46,\n  },\n  keymaps = {\n    ask = \"i\",\n    apply = \"a\",\n    close = \"q\",\n    stop = \"<C-c>\",\n    reset = \"R\",\n    help = \"g?\",\n  },\n  codex = {\n    command = \"codex\",\n    model = nil, -- use the Codex default\n  },\n})\n```\n\n`require(\"how\").status()`\n\nreturns a compact string suitable for a statusline.\n\nOrdinary questions run with `readOnly`\n\nsandbox policy and approvals disabled. An\nassistant response becomes applicable only when it includes a valid internal\nproposal marker. Pressing `a`\n\nshows the proposal summary, files, and risk. Only\nthe exact **Apply exact proposal** selection starts a `workspaceWrite`\n\nturn, whose\nwritable root is the Neovim config directory.\n\nHow automatically denies requests to write outside that directory. Shell\ncommands are displayed verbatim and require a separate **Allow once** decision.\nThere is deliberately no \"allow for session\" shortcut.\n\nRuntime inspection works with custom configurations. Detection currently labels LazyVim, NvChad, AstroNvim, LunarVim, Kickstart, and custom setups. Distribution detection is a hint; effective mappings and loaded plugins remain the source of truth.\n\n```\nmake test\nmake format\nmake check\n```\n\nMIT", "url": "https://wpnews.pro/news/show-hn-i-built-a-neovim-plugin-to-answer-questions-about-your-config", "canonical_source": "https://github.com/michtesar/how.nvim", "published_at": "2026-08-03 22:19:23+00:00", "updated_at": "2026-08-03 22:52:35.701839+00:00", "lang": "en", "topics": ["developer-tools", "ai-tools", "ai-agents"], "entities": ["how.nvim", "Codex CLI", "Neovim", "OpenAI", "ChatGPT", "lazy.nvim"], "alternates": {"html": "https://wpnews.pro/news/show-hn-i-built-a-neovim-plugin-to-answer-questions-about-your-config", "markdown": "https://wpnews.pro/news/show-hn-i-built-a-neovim-plugin-to-answer-questions-about-your-config.md", "text": "https://wpnews.pro/news/show-hn-i-built-a-neovim-plugin-to-answer-questions-about-your-config.txt", "jsonld": "https://wpnews.pro/news/show-hn-i-built-a-neovim-plugin-to-answer-questions-about-your-config.jsonld"}}