A terminal file explorer
for the vibe-code workflow
Open source · MIT · GitHub ↗

A lazygit-style terminal file explorer

A file tree that keeps up with your coding agent.

lazyexplorer is a small, focused terminal explorer built to live in the pane beside your agent. It refreshes live as files change — and never loses your place.

$ brew install nguyenvanduocit/tap/lazyexplorer
macOS · Linux · Windows·~13 MB static binary·opt-in telemetry ·read the source ↗
~/acme-api — lazyexplorer
lazyexplorer  /acme-api
src/
docs/
go.mod
main.go
model.go
auth_handler.go+ new
view.go
▶ README.md
markdown · 2.1 KB
# acme-api
A small HTTP service. This preview is glamour-
rendered — headings, lists and code read like
prose, not a raw dump.
 
live — updates as the agent works
jailed — never above the project root
fast — one poll, gated on real change
[↑↓/jk/click] move  [enter/l] open  [h/bksp] up  [r] rename  [d] delete  [wheel] scroll  [q] quit
Fig. 1 — the two-pane view. Left: the project, jailed to its root. Right: a live preview of the selection. A new file from the agent (auth_handler.go) slides in; the cursor stays on README.md, matched by name.
§01 WHY IT EXISTS

Coding agents touch dozens of files a minute.

Your editor's sidebar lags behind, your ls goes stale the moment you run it, and git status only tells you half the story. lazyexplorer sits in the pane beside the agent and shows the project as it actually is, right now — folders, files, rendered previews — refreshing every second without you lifting a finger.

It is not your editor and not a full file manager. It does one job: let you glance over and instantly see what just changed. Smaller on purpose, so it fits the cramped pane where you actually keep it.

§02 WHAT IT DOES

01Live refresh

Polls the directory once a second and rebuilds only when something actually changed. When your agent adds, edits, or deletes a file it appears at once — and your cursor stays on the file you were reading, matched by name, not by position. Delete the folder you're standing in and it climbs to the nearest surviving parent instead of breaking.

+ auth_handler.go ← appears, cursor stays put ~ model.go ← edited by the agent, picked up

02Jailed to your project

Launch it in a directory and that becomes the ceiling. Dive into subfolders freely, but never wander above the project root — so it stays scoped to exactly what the agent is editing, and a stray keypress can't walk you into /etc.

acme-api/ ← root (the jail) src/handlers/ ← descend freely .. ⚠ at root — cannot go higher

03Previews that read well

Markdown is rendered, not dumped — headings, lists, and code blocks come through with styling. Source files are shown as source, directories as listings. Glance at a file's contents in the right pane without ever opening it.

# Heading rendered, not raw markdown / code syntax-aware 12 items folder listing

04Keyboard + mouse

lazygit-style keys for the keyboard crowd — j/k to move, enter to open, h to go up. Or reach for the mouse: click a row, click a folder again to open it, drag the divider, scroll with the wheel, click a breadcrumb to jump. Both work, always.

src/ click ─ select · click again ─ open │◀▶│ drag the divider to resize panes
§03 GET IT
install — Homebrew (macOS / Linux)
$ brew install nguyenvanduocit/tap/lazyexplorer
The canonical one-liner for third-party taps (same shape as hashicorp/tap/terraform, argoproj/tap/argo). Prefer a shorter form? Tap once, then install short:
$ brew tap nguyenvanduocit/tap     # one-time
$ brew install lazyexplorer        # short from now on
$ brew upgrade lazyexplorer        # later
install — Go toolchain
$ go install github.com/nguyenvanduocit/lazyexplorer@latest
Needs Go 1.26+. Builds the binary into $GOBIN.
install — pre-built binary
$ curl -sSL github.com/nguyenvanduocit/lazyexplorer/releases/latest # pick your arch
Multi-arch tarballs (darwin / linux × amd64 + arm64) and a Windows zip live on every GitHub Release, with SHA256 checksums.txt alongside.
usage
$ cd your-project
$ lazyexplorer            # explore the current directory
$ lazyexplorer ./docs     # or point it somewhere — that becomes the root
$ lazyexplorer --version  # print version and exit
Key reference
jkmove the cursor
enterlopen folder
hbkspgo up a level (stops at the root)
gGjump to top / bottom
JK^d^uscroll the preview
rrename the selected entry
ddelete (with y / n confirm)
q^cquit