Skip to main content

Independent AI peer review of git diffs for Claude Code and other coding agents

Project description

fresh-eyes

Independent AI peer review of git diffs, designed for use alongside Claude Code (or any coding agent). Sends your latest changes to a different model so you get a second opinion with different blind spots from the one that wrote the code.

Install

uv tool install fresh-eyes

Or from a local checkout:

uv tool install --from . fresh-eyes

This installs two equivalent commands: fresh-eyes (canonical) and fe (typeable alias).

Setup

Export your Gemini API key (get one at https://aistudio.google.com/apikey):

export GEMINI_API_KEY=your-key-here

Activation

fresh-eyes is opt-in per repo, so it doesn't fire in every git repo you cd into. Enable it once per repo:

fresh-eyes --init      # enables fresh-eyes in this repo (writes .git/fresh_eyes_enabled)
fresh-eyes --disable   # disables it again

Running any other command in a non-activated repo prints a friendly message and exits without making API calls.

Usage

From inside an activated git repository:

fresh-eyes           # review commits since the last review (or HEAD~1 on first run)
fresh-eyes --full    # review the entire branch against the default branch
fresh-eyes --all     # one-time baseline: review the entire current codebase
fresh-eyes --staged  # review staged-but-uncommitted changes
fresh-eyes --reset   # interactively reset the marker (after a rebase, etc.)

fe is the short alias — fe --full works identically.

Claude Code integration

Copy the slash command files from this repo into your Claude Code commands directory:

cp commands/fresh-eyes.md commands/fe.md ~/.claude/commands/

You can now invoke /fresh-eyes or /fe in a Claude Code session. The command tells Claude to run the CLI, read its output, synthesize the findings against the current task context, and raise genuine concerns before continuing.

How it works

  • Marker file: .git/fresh_eyes_last_<branch> stores the last reviewed commit per branch. Switching branches doesn't invalidate other branches' markers.
  • Each run diffs from the marker to the HEAD captured at startup, sends it to Gemini, prints the review under a ## Gemini 2.5 Flash header, then advances the marker.
  • Noise filtering: lockfiles, minified assets, and dist//build/ are excluded from the diff so they don't burn tokens.
  • Size guard: bails out with a message (exit 0) if the diff exceeds ~10k estimated tokens.
  • No synthesis in the tool: with multiple reviewers (coming in 0.2.0 with Mistral), the tool emits each reviewer's output verbatim under its own header. Claude Code does the synthesis using its task context.

Exit codes

Code Meaning
0 Review ran successfully, OR diff was too large to send (the tool reports; it does not gate)
1 Marker commit missing (after rebase/force push), or git error
2 Missing/invalid GEMINI_API_KEY

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

fresh_eyes-0.2.0.tar.gz (8.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

fresh_eyes-0.2.0-py3-none-any.whl (9.1 kB view details)

Uploaded Python 3

File details

Details for the file fresh_eyes-0.2.0.tar.gz.

File metadata

  • Download URL: fresh_eyes-0.2.0.tar.gz
  • Upload date:
  • Size: 8.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for fresh_eyes-0.2.0.tar.gz
Algorithm Hash digest
SHA256 839906a13ce2155f5a9e3c0aa814e2b7470469ed56fb242000564933a00cddff
MD5 0d1d866156930bc39888ae7e2db71045
BLAKE2b-256 d7588ce15c0445136b0e03abc4eda1e2cba8c3266ef8bcd88a8b0d233e53aeb8

See more details on using hashes here.

Provenance

The following attestation bundles were made for fresh_eyes-0.2.0.tar.gz:

Publisher: release.yml on lucasgerads/fresh-eyes

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file fresh_eyes-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: fresh_eyes-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 9.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for fresh_eyes-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 7a7e1762948ba8285843239b2f40b5d8a8dc468b50b146ccb372cbe46eee183f
MD5 575826a5bbda3c0591ec19e47456c17f
BLAKE2b-256 1f8bc4c1e78eebe0801db792e66d55bed859a7cd7a12f71954439d87a9351aa3

See more details on using hashes here.

Provenance

The following attestation bundles were made for fresh_eyes-0.2.0-py3-none-any.whl:

Publisher: release.yml on lucasgerads/fresh-eyes

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page