Skip to main content
Ghostbuster Header

Ghostbuster

Find and bust the ghosts haunting your codebase.

PyPI version Python CI License: MIT Downloads

Unused dependencies, dead functions, orphan files, and phantom environment variables lurk in codebases - slowing down repos, confusing new contributors, and wasting CI minutes.

Ghostbuster finds them all in one command.


Quick Start

# Install
pip install ghostbuster-cli

# Scan your project
ghostbuster scan

# No config needed.

What It Finds

Ghostbuster detects 4 categories in your codebase:

Category Identifier What It Detects
Dead Import dead-import Dependencies in requirements.txt / pyproject.toml that are never imported
Orphan File orphan-file node_modules/, venv/, .pyc, large files that should be in .gitignore
Zombie Code zombie-code Functions and classes that are defined but never called from anywhere
Phantom Env phantom-env os.environ["KEY"] / os.getenv("KEY") where KEY is never set

Ghost Score

Every scan produces a Ghost Score (0-100) - the higher the score, the more technical debt in your codebase:

+----------------------- Ghost Score ------------------------+
|                                                            |
|    47 / 100                                                |
|                                                            |
|    #########################--------------------------     |
|                                                            |
|    Noticeable technical debt detected.                     |
|                                                            |
+------------------------------------------------------------+

Auto-Fix

Ghostbuster can also fix detected issues:

# Preview what would be fixed (safe, default)
ghostbuster bust

# Actually apply fixes
ghostbuster bust --confirm

Currently auto-fixes:

  • Removes unused import statements
  • Suggests .gitignore additions for orphan files
  • Suggests .env additions for phantom env vars

Usage

Basic Scan

# Scan current directory
ghostbuster scan

# Scan a specific path
ghostbuster scan ./my-project

# Verbose mode (show locations and fix suggestions)
ghostbuster scan -v

Filtered Scan

# Only check for dead imports
ghostbuster scan --category dead-import

# Only check for zombie code
ghostbuster scan -c zombie-code

Output Formats

# Default: formatted terminal output
ghostbuster scan

# JSON (for CI pipelines and scripting)
ghostbuster scan --format json

# Markdown (for pasting into issues/PRs)
ghostbuster scan --format markdown

CI Integration

# .github/workflows/ghostbuster.yml
name: Ghost Check
on: [push, pull_request]
jobs:
  scan:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-python@v5
        with:
          python-version: "3.12"
      - run: pip install ghostbuster-cli
      - run: ghostbuster scan --format json

Note: ghostbuster scan exits with code 1 if issues are found - ideal for CI gates.

Configuration

Ghostbuster works with zero config, but you can customize it:

pyproject.toml

[tool.ghostbuster]
exclude_dirs = ["migrations", "generated"]
ignore_packages = ["my-internal-lib"]
ignore_env_vars = ["CI", "GITHUB_ACTIONS"]
ignore_names = ["deprecated_helper"]
large_file_threshold = 5242880  # 5MB

.ghostbuster.toml

exclude_dirs = ["vendor", "third_party"]
categories = ["dead-import", "phantom-env"]  # Only run these scanners

How It Works

Ghostbuster uses pure AST analysis - no runtime imports, no code execution, no external services:

  1. Dead Imports: Parses requirements.txt/pyproject.toml for declared dependencies, walks AST for imports, cross-references with a package-to-import mapping table.
  2. Orphan Files: Walks the file tree checking for known ignorable patterns (node_modules/, venv/, __pycache__/, large binary files) and verifies they are covered by .gitignore.
  3. Zombie Code: Collects all function/class definitions and references across the codebase, identifying definitions with zero references (skipping __init__, test_*, and decorated functions).
  4. Phantom Env: Detects os.environ["KEY"], os.environ.get("KEY"), os.getenv("KEY") patterns via AST and checks against .env files and system environment.

Alternatives

Tool Scope Ghostbuster Advantage
Vulture Dead code only Ghostbuster also covers dependencies, files, and env vars
deptry Unused deps only Ghostbuster is a superset with unified output
deadcode Dead code only Ghostbuster adds auto-fix and unified scoring
git-sizer Repo size Ghostbuster checks .gitignore coverage

Roadmap

  • Node.js / TypeScript support (scan package.json, dead exports)
  • Pre-commit hook integration
  • GitHub Actions reporter (comment Ghost Score on PRs)
  • Config inheritance for monorepos
  • Ghost Score history tracking & trend chart

Contributing

Contributions are welcome. See CONTRIBUTING.md for guidelines.

git clone https://github.com/adewanggar/ghostbuster-cli.git
cd ghostbuster-cli
pip install -e .
pip install pytest ruff mypy
pytest tests/ -v

License

MIT (c) Ghostbuster Contributors


Download files

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

Source Distribution

ghostbuster_cli-0.1.0.tar.gz (2.6 MB view details)

Uploaded Source

Built Distribution

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

ghostbuster_cli-0.1.0-py3-none-any.whl (31.3 kB view details)

Uploaded Python 3

File details

Details for the file ghostbuster_cli-0.1.0.tar.gz.

File metadata

  • Download URL: ghostbuster_cli-0.1.0.tar.gz
  • Upload date:
  • Size: 2.6 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.10.11

File hashes

Hashes for ghostbuster_cli-0.1.0.tar.gz
Algorithm Hash digest
SHA256 6f5d7685945add274d73fc8239900012ffc54c7cb4c5c9e69e7d713040420bee
MD5 ac3dd95b32a30a36b8e5b4f3a48cf6fe
BLAKE2b-256 1796711d861cad1030a80fe86c8d5ad033de9ab10be6507768c4636524a1d017

See more details on using hashes here.

File details

Details for the file ghostbuster_cli-0.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for ghostbuster_cli-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 a467ffed5b852f1391199474261e1f82fde29cd14db82b1636ea46117a2bd926
MD5 c8caeb1a173f763b8c53ac8602948276
BLAKE2b-256 290a4bfa11996faf0867602ac687e4f809ad9c2e44a633a85aa4dd8ea7045cfb

See more details on using hashes here.

Release history Release notifications | RSS feed

0.4.0

2 files

0.3.0

2 files

0.2.2

2 files

0.2.1

2 files

0.2.0

2 files

This release

0.1.0 This release

2 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