Skip to content
RepoQuarry

Fivebar: security checks that hand your coding agent's mistakes back before you push

A free, open-source Windows app that scans every change Claude Code makes with Opengrep, Gitleaks and OSV-Scanner, sends problems back to the agent to fix, and stops risky pushes. How we built it, and the five things that broke.

Wayne Hewitt 5 min read

A git push in a dark terminal, stopped by Fivebar: four high findings, including a Stripe key and a GitHub token in src/config.js, with the label Stopped in 2.7 s.

Fivebar is a free, open-source Windows app that sits between your coding agent and git push. When Claude Code finishes a turn, Fivebar scans the files it changed with three open-source scanners and sends each problem back to the agent with the file, the line and a fix. A pre-push hook stops anything critical or high from leaving your PC. No account, no server, no API key.

Status, 28 October 2026: first release, Windows only, tested with Claude Code on a made-up demo shop app whose problems are planted on purpose. Download the Windows installer. The code is on GitHub: Obiwayne/fivebar (Apache-2.0).

The loop, on a real run

We asked Claude Code for one small feature in a test shop app: "Add a findUserByEmail(email) function to src/users.js." Claude Code wrote a safe version. The file already had three old problems in it: SQL built from a template string, innerHTML set from a variable, and an eval().

When Claude Code finished its turn, Fivebar's Stop hook scanned the two files it touched and sent this back:

fivebar · security check · round 1 of 3
3 problems in the files you changed. Fix each one, then finish your turn and Fivebar re-checks.

1. HIGH eval() runs any string as code
   where: src/users.js:17 (CWE-95)
   fix:   Replace eval with JSON.parse for data, or a lookup table for known actions.

Claude Code fixed all three in the same session. Fivebar re-checked, closed the findings and marked the loop as passed. We ran the same request three times. Every run took one round and between 40 and 52 seconds from prompt to pass. The project score went from 28 to 51.

Fivebar's Agent loop page: round 1 sent three findings back to Claude Code, each with a file, line and fix, then a clean re-check.

If the agent can't fix something in three rounds, Fivebar stops and asks you instead of looping.

What's inside

  • Opengrep 1.33.0 (LGPL) runs 12 rules we wrote for JavaScript, TypeScript and Python.
  • Gitleaks 8.30.1 (MIT) looks for secrets in files and in the commits you push.
  • OSV-Scanner 2.7.0 (Apache 2.0) checks lockfiles against the OSV advisory database.

Fivebar downloads each scanner from its GitHub release and checks it against a pinned SHA-256 before it runs. Results from the three tools are merged, so one problem found by two tools shows up once, with both badges.

The rest is plain Node: an Electron app, a local API on 127.0.0.1 with a random token, SQLite through sql.js so there's nothing native to compile, and an MCP server so the agent can ask for its findings itself. AI work goes through the claude command you already have, on your own Claude plan.

Setting up

Setup is six short steps, one job per screen. You pick your coding agents, Fivebar checks your PC for git and Claude Code, installs the scanners and scans your first project. On the test shop that first scan found 10 problems in 2.6 seconds: two leaked keys, three code issues and five advisories for lodash 4.17.20.

Fivebar's project overview after the first scan: score 28 out of 100, six high findings, four medium, including two lodash advisories, a Stripe key and a GitHub token.

Nothing in your project changes until you press Connect. The Connect screen shows every line Fivebar will write, file by file, before it writes it, and keeps a backup.

The push guard

The git pre-push hook scans the files and commits in a push. On the test shop, with the (fake) Stripe and GitHub test keys still in src/config.js, the push stopped in 2.7 seconds:

✕ HIGH     Stripe key in code       src/config.js:2
✕ HIGH     GitHub token in code     src/config.js:3
fivebar ▸ push blocked. 4 findings at critical or high.

Early on, a secret slipped through. We committed a key, deleted it in the next commit, and pushed both. The files looked clean, so the push went through. Gitleaks now scans the commit range being pushed as well, so a secret anywhere in the push history blocks it.

The review gate

The gate scores the latest change from 1 to 5 on security, correctness, readability, tests and maintainability. All five have to be 5. An AI reviewer gives the scores, run through claude -p with read-only tools, and the scanners and your tests set limits it can't score above. A failing test caps correctness at 2. An open high finding caps security at 2.

Fivebar's Review gate: 0 of 5 bars at 5, the gate stays shut. Security 2, Correctness 4, Readability 4, Tests 1, with a reason and a fix for each.

On the shop the gate stayed shut at 0 of 5. The reviewer caught something we'd missed: Claude Code had swapped eval for JSON.parse, so any caller still passing code like run("1+1") now gets an error.

What broke while we built it

Testing on a real setup turned up five problems. We fixed each one before taking these screenshots.

  1. OSV-Scanner found nothing. The test project sat inside a folder that another repo's .gitignore ignores, and OSV-Scanner obeys outer .gitignore files. Fivebar now checks for that case and passes --no-ignore only then.
  2. The agent loop never ran on our PC. The hook was connected and worked when run by hand, but Claude Code never called it. Our own Claude Code settings had "disableAllHooks": true. Fivebar now reads your Claude Code settings and warns you on the Connect screen when hooks are off.
  3. A message claimed --no-verify pushes get logged. They don't. --no-verify skips the hook, so Fivebar never sees the push. We changed the wording.
  4. The review gate said "5 findings in this change" when the change touched one file. The five were lodash advisories, which do count, because the change ships with them. The label now says "5 open (5 in dependencies)".
  5. The logo vanished on the dark setup screen. The small shield used a fixed dark colour. It now follows the text colour.

The Connect screen's warning: Claude Code has hooks turned off, so the Stop hook won't run, while the MCP server and pre-push hook still work.

The warning Fivebar shows when Claude Code's hooks are off, added after problem 2.

What it doesn't do

Fivebar checks code on your machine. It doesn't watch live traffic, replace a human review or pen test, or find every bug. The scanners catch known patterns, leaked secrets and published advisories. The review gate adds an AI reviewer's judgement, capped by what the tools found.

What's next

Guards that stop risky commands inside the agent, a nightly scan, a phone app over your own Tailscale network, and direct connectors for Codex and Antigravity. A macOS build needs someone with a Mac. If you'd like to help, the repo is Obiwayne/fivebar, Apache-2.0, and contributors are welcome.

Fivebar is also listed on our Vibe coder's workshop build, next to open-source tools for reviewing what your agent writes.

Cookie preferences

Choose what we may store in your browser. You can change this any time from Cookie settings in the footer.

Essential

Security, and remembering this choice. rq-consent · 12 months

Always on