sluuz (slu)
Canonical: gitlab.com/safteinzz/sluuz · Mirror: github.com/safteinzz/sluuz
git, but it sleuths - a git superset with cross-repo search, secret scanning, and multi-repo management
Install
That lands one command: slu, three letters like git itself.
It is still git
Anything git understands is forwarded verbatim, with your editor, pager, prompts, colors and exit codes intact:
Then come the parts it does not. Each one below is a plain command and its interactive twin, because they answer the same question.
Every repo at once, and a way into them
Legend: ✚ uncommitted · ↑ unpushed commits · ↓ unpulled commits

One app, three doors: slu ibranch opens it at the branches level and
slu ilog at the commits level of the repo you are standing in.
Find a leaked string in every repo's history

notifications-worker is the case a file listing cannot find: .env was
untracked afterwards, so the secret survives only in history. The origin/ refs
say it survives on the server too.
Terms are case-insensitive and default to
password,secret,token,api_key,passwd,credentials; -t replaces that list.
Being pickaxe-based, all three also read binary and encrypted blobs.

Read history in a real diff view
Highlighted in pure Rust, so no external diff tool is required - though Enter
hands the file to yours if you want it.


Stage and review in one place
git status you can act on. The two-column code is git's own: left is
staged (green), right is unstaged (red), so M is staged, M is
unstaged, MM is both and ?? is untracked.

The diff pane follows the scope. Works from any subdirectory.
Know what you have not pushed, and delete what is finished
Legend: ↑N ahead of upstream · no remote never pushed · ⚑ gone upstream
was deleted · synced in step

"Finished" means upstream gone, not "merged", so a branch still alive on the remote is never suggested for deletion, and the confirm defaults to No.
Keys
irepos, ilog, ibranch, istatus, itidy and iscan share one rule:
plain keys drive the top pane, Ctrl and the same keys drive the diff.
| Key | Does |
|---|---|
j k or ↑ ↓ |
move in the top pane |
h l or ← → |
change scope |
Enter |
open, or drill in one level |
Esc (or Ctrl-[) |
step back up |
q or Ctrl-C |
quit |
Ctrl-j Ctrl-k or Ctrl-↑ Ctrl-↓ |
scroll the diff |
Ctrl-d Ctrl-u |
scroll the diff half a page |
Ctrl-h Ctrl-l or Ctrl-← Ctrl-→ |
pan the diff sideways |
s u Space |
stage, unstage, toggle (istatus) |
/ |
edit the query (iscan) |
Enter on a diff opens your git difftool and suspends until you close it, or
says you have no diff.tool set rather than tearing down the screen.
Tab completion
Completion reuses git's own, so slu branch v<Tab> completes a real branch name
and every git subcommand, alias and flag behaves exactly like git.
Restart your shell afterwards; without --add it just prints the script. Works
in Git Bash and WSL too.
Everything else
Multi-repo commands take a path (default .) and -d, --depth <N> for how
deep to look (default 3). Run slu <command> --help for the full flag surface
of any command.
Troubleshooting
Ctrl-J / Ctrl-K do nothing in some terminals, VS Code's integrated one
among them, because they cannot tell Ctrl-J from Enter. slu takes Ctrl-Down
and Ctrl-Up for the same actions, so make the terminal send those: in VS
Code's Keyboard Shortcuts (JSON), bind ctrl+j and ctrl+k with
"when": "terminalFocus" to workbench.action.terminal.sendSequence, the
sequence being the JSON escape backslash-u-001b then [1;5B and [1;5A.
The pictures
Every clip and screenshot above is rendered by VHS
from the rig in demo/, against six invented repositories it builds and throws
away. It redirects HOME and every XDG variable into demo/home, so it cannot
see or touch your repos or your git config.
&&
License
AGPL-3.0-only