A CLI that scans your codebase, interrogates you and then roasts it.
Version 0.1.0 · Made by Gaohar Imran
📚 Table of Contents
- Overview
- Features
- Supported Languages & Ecosystems
- Installation
- Usage
- Commands
- Command Details
- LLM Support
- Examples
- Known Limitations
- Project Structure
- Contributing
- License
- Author
📖 Overview
RoasterBro is a command-line tool that inspects a codebase and gives you a full picture of what's going on inside it — languages used, dependencies, file statistics, git history, whitespace hygiene, and more. When you're ready for some tough love, point it at an LLM and let it roast your repository based on everything it found.
Think of it as part static-analysis tool, part linter, part stand-up comedian.
Scope note: RoasterBro's language detection works on virtually any codebase (it's extension-based). Its dependency and framework detection is currently scoped to Python, JavaScript/TypeScript (Node.js), Rust, and Go — see Supported Languages & Ecosystems below for exactly what that covers today.
✨ Features
- 🔍 Repo Scan — Quick overview of your project structure and project maturity signals
- 🌐 Language Detection — Recognizes 90+ file extensions across most mainstream languages
- 📦 Dependency Analysis — Parses
package.json,pyproject.toml,requirements.txt,Cargo.toml, andgo.modfor dependencies, package managers, and frameworks - 📊 File Statistics — Inspect LOC, file sizes, largest files, empty files, and test files
- 🌱 Git Analysis — Insights pulled straight from your repository's Git history
- 🧹 Whitespace Scanner — Hunt down trailing whitespace, file by file, line by line
- 🏗️ Project Maturity Analysis — Detect testing, CI/CD, documentation, security, contribution, and other repository signals
- 🔐 Suspicious File Detection — Identify files that may require additional attention
- 🧠 Model Discovery — Detect available local LLM setups and configured cloud providers
- 🤖 Multi-Provider LLM Support — Use local models through Ollama or supported online LLM providers
- 🗂️ Full Scan — Run repository analysis together, with optional JSON export
- 🔥 AI Interrogation & Roast — Answer 3 repository-based ragebait questions before receiving a personalized final roast
- 🎯 Evidence-Based Roasting — Generate jokes and questions from actual repository signals instead of predefined jokes
- ⚡ Short Aliases — Every command has a fast, memorable shortcut
🧬 Supported Languages & Ecosystems
Language detection (langs) is extension-based and works on any codebase — it recognizes 90+ file extensions spanning most mainstream languages (Python, JavaScript/TypeScript, Go, Rust, Java, C/C++, Ruby, PHP, and many more). This part has no dependency-file requirement and works everywhere.
Dependency and framework detection (deps, and the dependency section of fullscan/roast) is more targeted. RoasterBro currently reads these manifest files:
| Ecosystem | Manifest file(s) read | Package managers detected |
|---|---|---|
| Python | pyproject.toml, requirements.txt |
pip, pip/pyproject, poetry, pipenv |
| JavaScript / TypeScript (Node.js) | package.json |
npm, yarn, pnpm |
| Rust | Cargo.toml |
cargo |
| Go | go.mod |
go modules |
Within those ecosystems, these frameworks are currently recognized from your dependency list:
- Python: Django, FastAPI, Flask
- JavaScript/TypeScript: Next.js, NestJS, Express, React
Not yet supported: manifests for other ecosystems (e.g. composer.json for PHP, Gemfile for Ruby, pom.xml/build.gradle for Java) aren't parsed yet, so deps won't report dependencies for those repos even though langs will still correctly detect the source files. If your project uses one of these, deps/fullscan will simply show no dependency file found — that's an expected current limitation, not a bug. Contributions adding new ecosystem parsers are very welcome (see Contributing).
🛠️ Installation
# Clone the repository
git clone https://github.com/gaoharimran29-glitch/Roasterbro.git
cd Roasterbro
# Install dependencies
pip install -e .
Requires Python 3.11+ (RoasterBro's TOML parsing uses the
tomllibstandard-library module, added in 3.11).
Once installed, the roasterbro command will be available in your terminal.
🚀 Usage
roasterbro COMMAND PATH [OPTIONS]
PATHis required for every command exceptmodels— point it at the repository you want to analyze. Use.to scan the current directory.
Running roasterbro with no arguments displays the banner and a quick pointer to the help menu:
roasterbro
To see all available commands:
roasterbro --help
# or
roasterbro -h
To check the installed version:
roasterbro --version
# or
roasterbro -v
📋 Commands
| Command | Alias | Description |
|---|---|---|
scan |
-s |
Return basic info about the repo |
gitanalyze |
-g |
Return git info about the repo |
langs |
-l |
Return all the languages used in the repo |
deps |
-d |
Return all the dependencies used in the repo |
filestats |
-fs |
Return stats related to files in the repo |
whitespace |
-w |
Return filename and line number for trailing whitespace |
fullscan |
-f |
Run a combined full scan (with optional JSON export) |
models |
-m |
Detect local LLM models and cloud LLM provider API keys |
roast |
-r |
Interrogate the developer with 3 repository-based ragebait questions and generate a final AI roast |
Every command (except models) accepts a required PATH argument pointing to the repository you want to analyze.
🔎 Command Details
scan — Basic Repo Info
roasterbro scan PATH
roasterbro -s .
Gives you a snapshot summary of the repository: files, directories, and general structure.
gitanalyze — Git Insights
roasterbro gitanalyze PATH
roasterbro -g .
Analyzes the repository's git history and metadata. PATH must itself be the root of a git repository (RoasterBro does not search parent directories for one).
langs — Language Breakdown
roasterbro langs PATH
roasterbro -l .
Detects and lists every recognized programming language present in the codebase, by file extension.
deps — Dependency Analysis
roasterbro deps PATH
roasterbro -d .
Scans the repo and reports the dependencies it relies on. See Supported Languages & Ecosystems for which manifest files are currently parsed.
filestats — File Statistics
roasterbro filestats PATH
roasterbro -fs .
Reports file- and directory-level metrics, including whether test coverage appears to exist.
whitespace — Whitespace Scanner
roasterbro whitespace PATH
roasterbro -w .
Flags every file and line number containing trailing whitespace.
fullscan — Everything at Once
roasterbro fullscan PATH [--json OUTPUT.json]
roasterbro -f . --json results.json
Runs scan, langs, deps, filestats, and gitanalyze together and prints a combined report. Use --json to save the full combined results to a JSON file.
| Option | Description |
|---|---|
--json <path> |
Save the combined scan output to a JSON file. Resolved relative to your current shell location, not the scanned repo. |
models — Detect Available LLMs
roasterbro models
roasterbro -m
Detects locally configured LLM setups and cloud provider API keys available in your environment. This is the only command that doesn't take a PATH.
roast — Roast Your Repo 🔥
roasterbro roast PATH [--provider PROVIDER] [--llm MODEL]
roasterbro -r . --provider google --llm gemini-2.5-flash-lite
Runs a full scan and hands the results to an LLM, which then proceeds to roast your codebase based on what it finds. Requires a usable LLM — either a running Ollama instance or a configured cloud provider API key. Run roasterbro models first if you're not sure what's available.
| Option | Default | Description |
|---|---|---|
--provider |
google |
LLM provider company (e.g. google) |
--llm |
gemini-2.5-flash-lite |
Specific LLM model to use |
🤖 LLM Support
RoasterBro's AI features are designed to work with different LLM providers.
Local Models with Ollama
RoasterBro supports locally running models through Ollama.
Example:
roasterbro roast . --provider ollama --llm llama3.2:3b
You can use any model available through your Ollama installation. The model does not need to be hardcoded into RoasterBro.
Online Models
RoasterBro can also use configured online LLM providers.
Example:
roasterbro roast . --provider google --llm gemini-2.5-flash-lite
Provider API keys should be configured through environment variables.
Check Available Models
roasterbro models
or:
roasterbro -m
This command helps identify available local LLM configurations and configured online providers.
💡 Examples
# Scan the current directory (the "." is required)
roasterbro scan .
# Analyze git history for a specific project
roasterbro gitanalyze ~/projects/my-app
# Get a full report and save it as JSON (saved relative to where you run this, not to my-app)
roasterbro fullscan ~/projects/my-app --json report.json
# See which LLM providers you have configured
roasterbro models
# Get roasted using Google's Gemini
roasterbro roast . --provider google --llm gemini-2.5-flash-lite
# Get roasted using a local Ollama model instead
roasterbro roast . --provider ollama --llm llama3.2:3b
⚠️ Known Limitations
Being upfront about what RoasterBro doesn't do yet:
- Dependency/framework detection is scoped to Python, JS/TS, Rust, and Go. See Supported Languages & Ecosystems. Other ecosystems (PHP, Ruby, Java, .NET, etc.) are correctly language-detected by
langsbut won't show up indeps. gitanalyzelooks for a.gitdirectory at the exactPATHyou give it — it doesn't walk up through parent directories. Point it at your repo root.roastneeds a working LLM. Either Ollama running locally, or an API key for one of the supported cloud providers (OpenAI, Groq, Google, Mistral, Anthropic) set in your environment. Runroasterbro modelsto check what's available before runningroast.--jsononfullscanresolves relative to your current shell directory, not the repository you're scanning — soroasterbro fullscan ~/other-repo --json out.jsonwritesout.jsonwhere you ran the command, not inside~/other-repo.- "Total Size" in
scan/fullscanreflects the full directory size on disk, including files RoasterBro otherwise excludes from its file/dependency analysis (e.g..githistory,node_modulesif present). File and directory counts are filtered; the size figure currently is not. - "Created At" is exact on macOS but approximate on Linux. macOS exposes a true file-creation timestamp (
st_birthtime), which RoasterBro uses when available. Most Linux filesystems don't track creation time at all, so on Linux this field falls back tost_ctime— the last time the directory's metadata changed (permissions, ownership, a rename, etc.), not when it was actually created. RoasterBro detects this automatically and labels the fieldCreated At (approx.*)with an inline note whenever it's using the fallback, so you'll always know which one you're looking at.
Found something else? Please open an issue — see Contributing.
🗂️ Project Structure
roasterbro/
├── roasterbro/ # Main Python package
│ ├── models/ # Pydantic models
│ │ └── roast_output_model.py # Roast output schema
│ │
│ ├── output_formatter/ # Pretty-printers for scan results
│ │ ├── scan_output_formatter.py
│ │ ├── git_output_formatter.py
│ │ ├── lang_output_formatter.py
│ │ ├── dep_output_formatter.py
│ │ ├── filestats_output_formatter.py
│ │ ├── whitespace_output_formatter.py
│ │ └── model_output_formatter.py
│ │
│ ├── prompts/ # Prompts used by LLMs
│ │ ├── facts_extract_prompt.py
│ │ ├── final_roast_prompt.py
│ │ └── questions_generate_prompt.py
│ │
│ ├── tools/ # Core repository scanning and analysis
│ │ ├── repo_basic_scan.py # Basic repository information
│ │ ├── repo_deps_scan.py # Dependency analysis
│ │ ├── repo_file_scan.py # File and directory analysis
│ │ ├── repo_git_scan.py # Git repository analysis
│ │ ├── repo_lang_scan.py # Programming language detection
│ │ ├── repo_whitespace_scan.py # Whitespace analysis
│ │ ├── repo_roast_scan.py # Repository roasting logic
│ │ └── find_llm_models.py # LLM model discovery
│ │
│ ├── utils/ # Shared utilities and configuration
│ │ ├── helpers.py # Path validation and scanning helpers
│ │ ├── config.py # LLM provider/config resolution
│ │ └── constants.py # Project-wide constants
│ │
│ └── main.py # Click-based CLI entry point
│
├── setup.py # Package installation configuration
├── requirements.txt # Python dependencies
├── .env.example # Example environment variables
├── .gitignore # Git ignored files and directories
├── CONTRIBUTING.md # Contribution guide
├── CHANGELOG.md # Track the new unreleased changes
└── LICENSE # Project license
🤝 Contributing
Contributions, issues, and feature requests are welcome! See CONTRIBUTING.md for the development setup, project structure, and a guide to adding support for a new ecosystem or language — that's currently the highest-value place to contribute. All participants are expected to follow the Code of Conduct.
Quick version:
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes
- Push to the branch and open a Pull Request
If you find a bug or a security vulnerability, please report it directly to the developer.
📄 License
This project is licensed under the MIT License.
👤 Author
Gaohar Imran
- Github: @gaoharimran29-glitch
- LinkedIn: Gaohar Imran
Built for developers who can take a joke — and want their codebase analyzed while they're at it.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file roasterbro-0.1.0.tar.gz.
File metadata
- Download URL: roasterbro-0.1.0.tar.gz
- Upload date:
- Size: 38.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.14.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
32874b1d5f0ca713a58357db9aae8cea063bc8e1108ad54df115e4e9dab2614b
|
|
| MD5 |
cf0ba574445f5ec653132922be998caf
|
|
| BLAKE2b-256 |
23f38a630dd2e8cfa35950348fc185a025e60b3108e8c2bc72df83d6fff600d8
|
File details
Details for the file roasterbro-0.1.0-py3-none-any.whl.
File metadata
- Download URL: roasterbro-0.1.0-py3-none-any.whl
- Upload date:
- Size: 39.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.14.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b06df8e5c29da1a6e093a70095e2f1ee4129a4c12673ace8afcc2dd89f64e0d4
|
|
| MD5 |
ab82d70ca6e9fbcdd76fa296fd8205f1
|
|
| BLAKE2b-256 |
2e04edaf9d5445df17f3af8a381ef436f2178511f9322de1efd7d16ea9cc4ce5
|