
Who
I wanted Cursor Agent and CodeRabbit already open when Neovim started: same frame as the buffer, no alt-tab to an Electron window, no extra tmux pane, no <leader> chord that makes me lose which split I was in.
If you run NvChad and keep AI CLIs on PATH, you already know the friction: leave for the agent, lose buffer context, come back, rebalance windows by hand. I wanted the layout to be the product.
What
I built nvibe, a Lua Neovim plugin at michaelmonetized/nvibe. Version badge says 0.1.0. Module lives at lua/nvibe/init.lua (~354 lines). Public. Stars: 0.
On VimEnter, if you are not already in a terminal buffer, setup() calls create_terminal_split():
- Hard-requires
nvchad.term(ERROR notify + abort if missing). - Checks
vim.fn.executableforcursor_agent_cmd/coderabbit_cmd(defaultscursor-agent,coderabbit). - Left panel width =
width_percentx$COLS(orvim.o.columnsfallback). nvchad.term.newfor Cursor Agent (top) and CodeRabbit (bottom) on that panel.- Bottom strip: LazyGit + two shells (
vim.o.shell), with a pile ofwincmd/closecleanup so empty buffers do not stick around. stopinsertso the editor is not left in insert mode.
Config surface is small:
require('nvibe').setup({
width_percent = 30,
cursor_agent_cmd = "cursor-agent",
coderabbit_cmd = "coderabbit",
})
Honesty check against the tree: the code default for width_percent is 20, while README / docs/API.md / busted expectations still talk like 30. LazyGit and the dual shells are hardcoded, not setup opts. ROADMAP still has "make bottom panel commands and sizes configurable" open.

February fix (6a931f6, closes #4 and #5): opening NvimTree used to equalize windows and grow full height over the terminal panes. Plugin now caches editor-row height after layout, constrains FileType NvimTree windows to that height, and rebalance_panels() restores left-column terminal widths on open/close. README documents preserve_window_proportions = true as the paired NvimTree setting.
Tests: busted (tests/test_nvibe.lua, 18 it( cases) with mocked vim + nvchad.term. Makefile: make test / lint / check via busted + luacheck. CHANGELOG documents the early interactivity bug: raw vim.cmd("terminal …") vs NvChad's interactive term.new.

CI subplot: 3ee0092 added .github/workflows/build.yml ("keep prod build green"). 5ab79db corrected it for a Lua project. Next morning 365a17e deleted all GitHub config with message "Vercel is our only CI/CD" on a Neovim Lua plugin with no web app in the tree. HEAD has no .github/. Local make test is the gate that remains.
Also true: MIT badge in README, no LICENSE file. Product Hunt badges link to producthunt.com root. PLAN.md still has Phase 3 "Product Hunt launch preparation." CHANGELOG dates 0.1.0 as 2025-01-17; git history starts 2025-10-17.
Where
Code: github.com/michaelmonetized/nvibe, public. No hosted demo.
Install path in README: Lazy.nvim or Packer snippets calling require('nvibe').setup(), after NvChad. Runtime needs Neovim 0.7+, NvChad (nvchad.term), and the CLIs you configured (plus lazygit for the bottom middle pane as written).
Checked-in screenshot.png (~948KB) from the Oct 18 roadmap commit is the visual proof the layout existed on a real session.
When
- 2025-10-17 morning
a65bb50init,e0766a4initial plugin release, Product Hunt marketing README (be96f88), docs, tests, NvChad error handling, CodeRabbit PR cleanup, merge #2. - 2025-10-17 evening to 2025-10-18 bottom panel / 3-column layout fight: auto-launch, separate creation paths, sizing context bugs, manual vim-cmd walking (
i've been using 1 not l but needed h), then903e4d6"it works!", merge #3 fromstage,5a790f2roadmap + screenshot. - 2026-02-21
6a931f6NvimTree height + panel width restore (closes #4, #5). - 2026-02-27 to 28 Actions build gate, Lua workflow fix, delete GitHub config for Vercel; PLAN.md +
.hustlemcland. - 2026-06-22
e7833a1/ HEAD56d0152nightlies. Last push2026-06-22T22:17:08Z. 35 commits total.

Why
"Vibe coding" for me means terminals I already pay for, laid out so the agent and the reviewer never leave the frame while I edit.
I also wanted the diary of actually making Neovim splits behave. The commit messages from Oct 18 are the product as much as the README ASCII: simplify, comment out close, walk the steps, use h not 1, then ship "it works!" Same energy as deleting a brand-new Actions workflow because the org mantra said Vercel. Leave that commit in history instead of rewriting it.
Engagement Q
Would you hard-depend on NvChad's terminal module to glue Cursor Agent + CodeRabbit into Neovim, or keep AI in separate panes forever? And does a commit titled "it works!" after a day of wincmd hell earn more trust than a polished 0.1.0 badge?
