AI wrote your code. FixMySlop fixes it.
Project description
FixMySlop
FixMySlop โ The free, 100% local AI-powered code janitor that finds and fixes bugs, security holes, and AI slop in your projects. No cloud, no API keys, no BS.
- Cleans messy AI-generated code (hallucinations, bad patterns, weak security)
- Gives a clear Slop Score, detailed audit report, and one-click fix generation
- Works offline with Ollama, llama.cpp, or vLLM so your code stays private
Visual Tour
Screenshot Guide
| Screenshot File | What It Shows |
|---|---|
screenshots/Search.png |
Scan setup flow (project selection + scan controls) |
screenshots/report1.png |
Report view with issue list and quality insights |
screenshots/fix.png |
Fix workflow and diff-style patch review |
screenshots/cli.png |
CLI scan output for terminal-first users |
Features
- โก Turbo + Deep scan modes for speed vs depth
- ๐ Full repository scanning with
.gitignoreawareness - ๐ก๏ธ Security checks (Bandit + LLM context analysis)
- ๐งน AI smell detection (hallucinated imports, weak validation, broad exception handling)
- ๐ Slop Score (0-100) to summarize code health
- ๐ง LLM-powered fix generation with unified diffs
- ๐ Report export in Markdown, HTML, JSON, CSV, and PDF
- ๐จ Polished PyQt5 desktop GUI with dark/light themes
- ๐ป Full CLI for automation and CI-friendly usage
- ๐ค Auto model fallback when configured model is missing
- ๐ช Windows-safe terminal output handling
- ๐ 100% local-first architecture
Why FixMySlop?
FixMySlop combines static analysis + LLM reasoning + local privacy in one workflow.
| Compared To | Typical Limitation | FixMySlop Advantage |
|---|---|---|
| Ruff/Pylint-only workflows | Strong syntax/style checks, limited semantic AI context | Adds LLM-based deep reasoning on top of static tools |
| Cloud AI code reviewers | Code leaves your machine, subscription cost | 100% local and private |
| IDE-only assistants | Great inline help, weaker full-repo audit/report flow | Full-repo scans, report panel, Slop Score, fix workflow |
Installation
Prerequisites
- Python 3.10+
- A local OpenAI-compatible backend (Ollama recommended): https://ollama.ai
Quick Start
# Clone
git clone https://github.com/MrSpideyNihal/FixMySlop.git
cd FixMySlop
# Install dependencies
pip install -r requirements.txt
# Pull a local model (example)
ollama pull qwen2.5-coder:3b
# Launch GUI
python main.py
# Or run CLI
python main.py scan ./your-project --mode turbo
FixMySlop can auto-detect an available model, so manual model config is optional.
Optional Static Tools
pip install ruff bandit
pip install semgrep
Troubleshooting
- Backend not reachable: run
ollama servefirst - Model not found: run
ollama pull qwen2.5-coder:7b(or another installed coder model) - Windows terminal shows garbled Unicode: switch to UTF-8 code page (
chcp 65001) or use Windows Terminal/CMD
Usage
GUI
python main.py
Main sections:
- Home
- Scan
- Report
- Fix
- Settings
CLI Recipes
# Quick scan
python main.py scan ./myproject
# Turbo mode (fast top issues)
python main.py scan ./myproject --mode turbo
# Deep mode (full pass)
python main.py scan ./myproject --mode deep
# Deep static-only
python main.py scan ./backend --mode deep --no-llm --output json
# Save report
python main.py scan ./myproject --save slop-report.md --output markdown
# Use explicit model
python main.py scan ./myproject --model qwen2.5-coder:3b --mode turbo
# List backend models
python main.py models
Scan Modes
| Mode | Focus | Typical per-file estimate |
|---|---|---|
turbo |
Prioritize high-impact findings quickly | ~20-40s per file |
deep |
Broader and more exhaustive finding coverage | ~15-30s per file |
--no-llm |
Static analysis only | < 1s per file |
Configuration
Config file path: ~/.fixmyslop/config.yaml
model: ""
base_url: http://localhost:11434/v1
api_key: ollama
temperature: 0.2
theme: dark
font_size: 14
use_ruff: true
use_bandit: true
use_semgrep: false
auto_backup: true
If model is empty, FixMySlop auto-selects the best available model from your running local backend.
Supported Languages
Python, JavaScript, TypeScript, Go, Rust, Java, C++, C, C#, Ruby, PHP, Swift, Kotlin
Architecture
FixMySlop/
โโโ macros.py
โโโ main.py
โโโ core/
โ โโโ scanner.py
โ โโโ analyzer.py
โ โโโ llm_client.py
โ โโโ fix_engine.py
โ โโโ ...
โโโ ui/
โ โโโ panels/
โ โโโ widgets/
โ โโโ assets/
โโโ cli/
โโโ utils/
โโโ tests/
Design rules:
core/never importsui/- Constants are centralized in
macros.py - Heavy work runs in
QThread - Path handling uses
pathlib.Path
Running Tests
pytest tests/ -v
Contributing
Contributions are welcome.
- Open an issue for bugs or feature ideas
- Fork and create a branch
- Add tests for behavior changes
- Run
pytest tests/ -q - Open a PR with a clear summary
Roadmap
- More language-specific rules and higher-quality fix templates
- Better safe auto-apply for low-risk fixes
- Pre-commit and CI integration helpers
- Optional richer report visualizations
Acknowledgments
- Ollama
- llama.cpp
- vLLM
- Ruff
- Bandit
- Semgrep
- PyQt5
- fpdf2
License
MIT โ free forever and open source.
Loved this project? Please star the repo.
Project details
Release history Release notifications | RSS feed
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 fixmyslop-0.2.0.tar.gz.
File metadata
- Download URL: fixmyslop-0.2.0.tar.gz
- Upload date:
- Size: 63.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b45f844e82d43b4794b98e09b138071ff66da0f0f340c9952b2616dc9fdfb69d
|
|
| MD5 |
b7d2993c2b3bca36bc1223058eb4a7fa
|
|
| BLAKE2b-256 |
1c3dcce842bb2fcdc2add2e93cc8b993e34ef3bb22da1926ae3ecb14d3d8a7d2
|
Provenance
The following attestation bundles were made for fixmyslop-0.2.0.tar.gz:
Publisher:
publish.yml on MrSpideyNihal/FixMySlop
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
fixmyslop-0.2.0.tar.gz -
Subject digest:
b45f844e82d43b4794b98e09b138071ff66da0f0f340c9952b2616dc9fdfb69d - Sigstore transparency entry: 1110420206
- Sigstore integration time:
-
Permalink:
MrSpideyNihal/FixMySlop@4b0e32080bb660d6a6b3d8df978723384866ccb6 -
Branch / Tag:
refs/tags/v0.2.2 - Owner: https://github.com/MrSpideyNihal
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@4b0e32080bb660d6a6b3d8df978723384866ccb6 -
Trigger Event:
release
-
Statement type:
File details
Details for the file fixmyslop-0.2.0-py3-none-any.whl.
File metadata
- Download URL: fixmyslop-0.2.0-py3-none-any.whl
- Upload date:
- Size: 79.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fab1ee77c6922d7d3d7b31de87bd6384d95ebb799b9f6a5d2998a3a10582d706
|
|
| MD5 |
b2e84977765be143c50e93d5cabd67dd
|
|
| BLAKE2b-256 |
0658c96d0b20bb78140a7ce2ea09e0d625cb548daef86ed3e77c3561efdad6ea
|
Provenance
The following attestation bundles were made for fixmyslop-0.2.0-py3-none-any.whl:
Publisher:
publish.yml on MrSpideyNihal/FixMySlop
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
fixmyslop-0.2.0-py3-none-any.whl -
Subject digest:
fab1ee77c6922d7d3d7b31de87bd6384d95ebb799b9f6a5d2998a3a10582d706 - Sigstore transparency entry: 1110420331
- Sigstore integration time:
-
Permalink:
MrSpideyNihal/FixMySlop@4b0e32080bb660d6a6b3d8df978723384866ccb6 -
Branch / Tag:
refs/tags/v0.2.2 - Owner: https://github.com/MrSpideyNihal
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@4b0e32080bb660d6a6b3d8df978723384866ccb6 -
Trigger Event:
release
-
Statement type: