
Security News
Re-Enabled GitHub Actions Expose Thousands of Repositories to Mini Shai-Hulud
Two compromised GitHub Actions were re-enabled with malicious tags intact, exposing thousands of downstream repositories to Mini Shai-Hulud.
Code review for your own machines and your own agents, served on loopback. No Electron, no account.
Local-only code review for your git repositories. Your code, your diffs and your comments stay on your machine — there is no server, no account and nothing to sign in to.
This package is the command line. There is also a desktop app; see gitwarren-app.
npx gitwarren serve --open
That serves the review UI on 127.0.0.1:41427, prints a URL carrying a token
minted for that launch, and opens it. Add a repository, pick two refs, and
review the diff. Ctrl-C stops it. Needs Node 22.14 or newer; on a machine without
Node, the Homebrew formula and the install script in the
app repository
bring their own.
Run it now
gitwarren serve [--open] | run GitWarren in this terminal and print its URL; --open opens it too |
gitwarren open [link] | open the running GitWarren in your browser, carrying the token |
Keep it running
gitwarren service install | run GitWarren in the background, from now and at every login |
gitwarren service uninstall | stop that, and remove the login item |
gitwarren service status | what is running, and where the data is |
Let a coding agent in
gitwarren agent-setup | print the one sentence to give an agent so it can reach GitWarren over MCP |
Keep it current, or take it off again
gitwarren update --check | say what is installed and what the newest release is |
gitwarren doctor | is every path GitWarren hands another program still pointing at something? --fix repoints a stale one |
gitwarren uninstall | take GitWarren off this machine; reviews stay unless --data says otherwise |
gitwarren update replaces an install in place only when GitWarren is the one
that put it there — install.sh, or the app installing onto a machine of yours
over ssh. This package is not that case, and the command says so rather than
writing into a node_modules it does not own: an npm install -g copy is
updated with npm install -g gitwarren@latest, and under npx there is
nothing to update at all, because npx gitwarren@latest fetches the newest
release every time. --check answers is there a newer one whichever of those
you are.
uninstall is worth knowing here, where npm uninstall looks like the whole
story. It is not. Whichever command you ran first also wrote
~/.gitwarren/bin/gitwarren and gitwarren-mcp, and service install may
have registered a login item; npm has a record of none of that, and an agent
config naming a launcher goes on naming it after the package is gone — which
surfaces as MCP server failed to connect, in another product, with nothing
saying why. gitwarren uninstall takes the launchers it can attribute to this
install and the login item with them, and names the npm command for the package
itself. gitwarren doctor says whether a launcher has already been left
dangling, and exits non-zero when one has, so a script can be what notices.
gitwarren serve --stdio answers GitWarren's protocol on stdin and stdout; it
is what a GitWarren on another machine spawns, and nothing a person needs to
type.
gitwarren open takes a gitwarren:// deep link or the http://127.0.0.1
URL an agent hands out, and lands on that review rather than the home screen.
The quickest way is the plugin, which brings the server and a note that teaches
the agent when to open a review. In Claude Code, /plugin marketplace add klarluft/gitwarren-app then /plugin install gitwarren@gitwarren; in Gemini
CLI, gemini extensions install https://github.com/klarluft/gitwarren-app;
Cursor, Codex, VS Code and Kiro read the same repository from their plugin
screens. The plugin finds this install by itself.
Every install carries GitWarren's MCP server. What an agent needs is one
stable command to start it with, and that is ~/.gitwarren/bin/gitwarren-mcp —
the same path on every machine, written by gitwarren serve, gitwarren agent-setup and gitwarren service install alike, and kept pointing at
whichever install ran last. gitwarren agent-setup prints the sentence to
paste into the agent.
The MCP server reads the same SQLite file the browser view does, so an agent can open and comment on reviews whether or not GitWarren is being served. What serving adds is that the links an agent hands you have something to open.
On a machine where nothing has been installed, the same server starts by name:
npx gitwarren mcp. That is the command a Claude Code plugin or an MCP registry
entry names, and it is what makes either work before you have decided to keep
GitWarren. It writes no launcher and asks for no login item; it reads the same
database, so the reviews are there when you do.
npx gitwarren mcp --serve also serves the review page, on loopback and for as
long as the agent keeps the server running, so the links the agent hands out
open even on a machine with nothing else installed. If GitWarren is already
running, as the app or as gitwarren serve, it serves nothing and the links
open there instead.
One SQLite database in the usual place for your platform —
~/Library/Application Support/GitWarren on macOS, ~/.config/GitWarren on
Linux, %APPDATA%\GitWarren on Windows. gitwarren service status prints the
path.
The web view binds 127.0.0.1 only, checks Host and Origin on every
request and on the WebSocket upgrade, and requires a token minted per launch
which it exchanges for a SameSite=Strict cookie. A page on another origin
cannot reach it.
GPL-3.0-or-later. Copyright © 2026 Klarluft B.V.
FAQs
Code review for your own machines and your own agents, served on loopback. No Electron, no account.
We found that gitwarren demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.

Security News
Two compromised GitHub Actions were re-enabled with malicious tags intact, exposing thousands of downstream repositories to Mini Shai-Hulud.

Research
/Security News
A malicious Firefox extension fetches its payload after installation to evade detection, steal Google session cookies, and automate account takeover.

Research
/Security News
The compromise affects MemTensor's MemOS, an open source memory framework for large language models (LLMs) and AI agents. Both npm package @memtensor/memos-cloud-openclaw-plugin and the PyPI package MemoryOS are compromised. They drop cross-platform Go binaries that exfiltrate developer secrets.