Skip to main content

🔍 Git Uncommitted Scanner (scanrepos)

Python Typer Rich Textual PyPI version License

A high-speed, cross-platform CLI & TUI utility that recursively deep-scans your filesystem to instantly locate Git repositories with pending uncommitted changes.


⚡ Why git-uncommitted-scanner?

Tired of discovering forgotten, uncommitted code changes in scattered workspace folders months later? git-uncommitted-scanner recursively hunts down pending changes across your entire filesystem with asynchronous speed, presenting them in either a clean CLI table or a high-tech interactive Terminal User Interface (TUI).

Git Uncommitted Scanner - Interactive Neon-Cyan TUI


📦 Installation

Choose the installation method that fits your environment:

pipx and uv automatically isolate dependencies and ensure binary executable scripts are added to your system PATH:

# Using pipx (Recommended - automatically configures PATH)
pipx install git-uncommitted-scanner
pipx ensurepath

# Or using uv
uv tool install git-uncommitted-scanner

# Or run instantly without installing:
uvx git-uncommitted-scanner

Method 2: Standard pip

pip install git-uncommitted-scanner

🚀 Usage

You can run the scanner using either scanrepos or python -m git_scanner:

1. Standard CLI Mode

Run a rapid background scan that outputs a styled Rich table listing all uncommitted repositories along with branch names, modified file counts, untracked counts, and last commit age.

# Scan the current directory
scanrepos

# Scan a specific directory path
scanrepos /path/to/your/projects

# Limit search depth to 3 levels
scanrepos /path/to/projects -d 3

# Exclude specific folders (e.g. node_modules, build, vendor)
scanrepos /path/to/projects -e "vendor,build"

# Ignore repositories with only untracked files (clean worktrees)
scanrepos -u

# Scripting / Automation: Output ONLY raw paths (ideal for xargs, pipelines, CI/CD)
scanrepos -q

# Check installed version
scanrepos --version

# View all CLI options and flags
scanrepos --help

# Export results to JSON or CSV (format auto-detected by extension)
scanrepos /path/to/projects --export scan_results.json
scanrepos /path/to/projects --export scan_results.csv

Git Uncommitted Scanner - Standard CLI Scanning Output

📖 Click to preview full CLI Options & Flags (scanrepos --help)

Git Uncommitted Scanner - CLI Help Menu

2. Interactive TUI Mode (-i)

Launch the Neon-Cyan Terminal User Interface. Navigate repositories with keyboard arrows, double-click or press Enter to spawn a native shell terminal directly inside the highlighted workspace.

# Launch TUI in the current directory
scanrepos -i

# Launch TUI with custom path, depth limits, and exclusions
scanrepos -i /path/to/your/projects -e "vendor,temp" -d 4

TUI Keyboard & Mouse Controls:

  • Column Header Click: Click any column header to sort ascending (▲) / descending (▼) by ID, Path, Branch, Modified, Untracked, or Last Commit.
  • / or s : Toggle live search/filter bar to filter repositories by name or branch in real time.
  • Escape : Close/dismiss search bar and restore focus to the repository table.
  • Enter / Double-Click / o : Spawn native OS terminal (wt, pwsh, cmd, iTerm2, Terminal.app, gnome-terminal, alacritty, kitty, etc.) in the selected repository.
  • r : Trigger an asynchronous re-scan of the target folder.
  • q : Quit the application.

3. Configuration File Support (.gitscannerrc / pyproject.toml)

You can define persistent default exclusions and search depth in ~/.gitscannerrc, .gitscannerrc, or pyproject.toml:

# .gitscannerrc
[gitscanner]
exclude = vendor, temp, test_env, cache
max_depth = 4

Or in pyproject.toml:

[tool.gitscanner]
exclude = ["vendor", "temp", "cache"]
max_depth = 4

✨ Key Features

  • ⚡ Generative Concurrency & Deep Scanning: Traverses nested folder trees using iterative os.scandir DFS pruning and pipelines discoveries straight into a multi-threaded ThreadPoolExecutor (up to 32 concurrent workers), overlapping disk I/O with subprocess execution.
  • 🖥️ Interactive Neon-Cyan TUI: Built with customized Textual components, providing smooth keyboard navigation, zebra striping, and automatic table focus on scan completion.
  • 📊 Bi-Directional Interactive Column Sorting: Click any column header or navigate to toggle ascending (▲) and descending (▼) sort order by ID, Path, Branch, Modified files, Untracked files, or chronological Last Commit timestamp.
  • 🔍 Real-Time Live Search Overlay: Press / or s to filter large project lists by repository path or branch in real time; dismiss with Escape to return to table navigation.
  • 🌐 Upstream Synchronization Telemetry: Parses remote tracking branches to display live ahead/behind indicators ([↑X ↓Y]), alerting you immediately when local commits need pushing or upstream changes need pulling.
  • 💻 OS-Aware Native Terminal Launcher: Highlight any uncommitted repository in the TUI and press Enter, double-click, or press o to spawn a native shell running git status inside that folder (auto-detects Windows Terminal wt, PowerShell 7 pwsh, cmd, macOS iTerm2/Terminal.app, Linux gnome-terminal, alacritty, kitty, konsole, etc.).
  • 🤖 Script Automation & Quiet Mode: Added --quiet (-q) mode to suppress all rich spinners and tables, outputting only raw, newline-delimited paths for seamless piping into xargs, shell scripts, or CI/CD pipelines.
  • 🎯 Granular Noise Reduction: Ignore repositories with only untracked files (-u / --exclude-untracked), exclude custom directory blacklists (-e), and limit traversal recursion depth (-d).
  • 📄 Dual JSON & CSV Data Export: Automatically infers and exports scan data to either structured JSON (.json) or spreadsheet-friendly CSV (.csv) via --export.
  • ⚙️ Persistent Configuration: Define global or project defaults in ~/.gitscannerrc, .gitscannerrc, or pyproject.toml.
  • 🌳 Submodule & Worktree Support: Accurately recognizes both standard .git directories and .git pointers (submodules and git worktrees).
  • 🛡️ Zero-Config Module Execution: Built-in python -m git_scanner runner ensures the app runs anywhere, even on restricted or shared lab PCs where Python's Scripts/ folder is not on system PATH.
  • 🪶 Zero Dependencies Bloat: Pure Python standard library logic alongside typer, rich, and textual — no heavy C extensions or bloatware.

🛠️ Technology Stack

  • Core Engine: Python >=3.9, standard subprocess, pathlib.Path
  • CLI Routing: Typer
  • Terminal Formatting: Rich
  • Interactive TUI: Textual
  • Build System: setuptools (PEP 621 compliant)

🤖 Agent Ecosystem & Developer Guidelines

This repository includes a structured multi-agent automation setup for continuous maintenance:

  • AGENTS.md — Mandatory developer & autonomous agent guidelines, zero-fake-progress rules, and PR formatting standards.
  • prompt-bolt.md — GitScanner Bolt ⚡ (Performance & scan speed optimizer prompt).
  • prompt-evo.md — GitScanner Evo 🚀 (Product feature evolution prompt).
  • prompt-pallete.md — GitScanner Palette 🎨 (TUI & CLI UX evolution prompt).
  • .coderabbit.yaml — Assertive automated PR code review rules.
  • Target PR Branch: Dev2Auto

🔧 Troubleshooting & FAQ

'scanrepos' is not recognized as an internal or external command

This occurs when Python installs command-line scripts to your user directory (common on shared, lab, or school PCs where administrator rights are restricted), but that directory has not yet been added to your system PATH.

Quick Fix 1: Run via Python directly (Works instantly, no setup needed)

python -m git_scanner

(or python -m git_scanner -i for TUI mode)

pipx automatically isolates CLI tools and configures your PATH:

pip install pipx
pipx ensurepath
pipx install git-uncommitted-scanner

Quick Fix 3: Add Python Scripts to your PATH manually

  • Windows (PowerShell): Run this one-liner in PowerShell to permanently add Python Scripts to your user PATH:

    [Environment]::SetEnvironmentVariable("PATH", $env:PATH + ";$((py -c 'import site; print(site.USER_BASE)') + '\Scripts')", "User")
    

    Then restart your terminal.

  • Linux / macOS: Add Python bin to your ~/.bashrc or ~/.zshrc:

    export PATH="$HOME/.local/bin:$PATH"
    

    Then reload your shell (source ~/.bashrc or source ~/.zshrc).


📜 Version History & Release Notes

For a complete record of all updates, bug fixes, and feature additions across releases, please refer to the CHANGELOG.md.


Built with ❤️ by RootDeveloperDS

Metadata

Release files for git-uncommitted-scanner 0.2.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for git-uncommitted-scanner 0.2.0
File Size Uploaded
git_uncommitted_scanner-0.2.0.tar.gz 24.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for git-uncommitted-scanner 0.2.0
File Interpreter ABI Platform
git_uncommitted_scanner-0.2.0-py3-none-any.whl Python 3 none any Details

Total release size: 39.6 kB

Release files / git_uncommitted_scanner-0.2.0.tar.gz

Download URL git_uncommitted_scanner-0.2.0.tar.gz
Size 24.2 kB
Tags Source
SHA-256 checksum
How to use checksums
a43f29f853a03d578c0fc6110ed2de4a7119d136c76b86df5f078415f5cf5fd0
BLAKE2b-256 checksum
How to use checksums
af0704d8face071bf93a081a71a5eaaa7a6e8a6f0f1b4c40f7474a0b6226efb3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 19, 2026.

Transparency log

Release files / git_uncommitted_scanner-0.2.0-py3-none-any.whl

Download URL git_uncommitted_scanner-0.2.0-py3-none-any.whl
Size 15.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
221f80aecf6925994feda3a0dc16bc65c53e6852a44930930ec969117bae705f
BLAKE2b-256 checksum
How to use checksums
75d3fd96f58ee69dc4f2ff3f3f451c305c0cbd0264e2ae3a2df47823d43b8667
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 19, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.2.0 This release

2 release files

0.1.3

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page