pablocaeg/sloptotal

Open-source AI text detector — VirusTotal for AI slop. 23 engines, self-hosted, runs on CPU. Scan text or URLs locally.

13

stars

15

commits

Python

primary language

Jul 26, 2026

updated

sloptotal.com
ai-content-detector
ai-detection
ai-generated-content
ai-slop
ai-slop-detector
ai-text-detection
chatgpt
fastapi
gpt-detector
huggingface
llm
local-first
open-source
privacy
python
self-hosted
slop-detector
text-classification
transformers

README

SlopTotal

CI License: MIT Website

VirusTotal for AI slop detection. Scan any text or URL with 23 independent detection engines running entirely on your hardware. No data sent to third parties.

What it does

SlopTotal runs 23 AI detection engines in parallel -- neural classifiers, statistical tests, and linguistic heuristics -- and produces a calibrated forensic score. Results stream in real-time as each engine completes.

Live demo: sloptotal.com — or read the per-engine scores and what the measurements show.

Measured accuracy

Most detectors publish an accuracy figure without saying what it was measured on. These numbers, the harness that produced them and the raw per-sample results are all in tests/eval/.

Two corpora, deliberately:

CorpusWhatSize
Multi-domainRAID: news, book prose, poetry, academic abstracts. AI from GPT-4, ChatGPT, Llama, Mistral, Cohere, GPT-3110 (40 human, 70 AI)
Literary controlProject Gutenberg prose published 1532-1915 -- Machiavelli, Austen, Melville, Kafka26 (all human)

The second exists because a high score there cannot be anything but an error: the writing predates language models by a century or more. Optimising on the first corpus alone produces a threshold that mislabels literature.

Result
Overall AUC0.974
AI reaching "Suspicious" or above90%
Human text wrongly called "Likely AI"1 of 66
Literary passages flagged0 of 26

What does not work. Short text is unreliable below roughly 80 words and settles from about 200. Hand-edited AI loses fingerprints with every rewriting pass. Source code is outside what these engines do: in testing they never falsely accused human code, and never caught machine-written code either -- so we do not claim they can.

The failures are published too, including three engines found scoring backwards and two loading a randomly initialised network while carrying real ensemble weight. Read them at sloptotal.com/detect/ai-detector-benchmark/ and sloptotal.com/detect/ai-detector-false-positives/.

Quick Start

Requirements

  • Python 3.10+ (3.11 recommended — macOS ships 3.9, which is too old)
  • 4 GB RAM minimum (lite profile); 8 GB standard; 16 GB+ for best CPU throughput
  • No GPU required — all engines run on CPU; CUDA optional for faster inference
  • ~2 GB disk for HuggingFace model cache on first run

Install

# Clone and install
git clone https://github.com/pablocaeg/sloptotal.git
cd sloptotal

# Use Python 3.10+ explicitly (example: Homebrew on macOS)
python3.11 -m venv venv && source venv/bin/activate
pip install --upgrade pip
pip install -r requirements.txt

# Optional: copy env template
cp .env.example .env

# Start (auto-detects hardware, downloads models on first run)
./start.sh
# or manually:
uvicorn app.main:app --host 0.0.0.0 --port 8000

Open http://localhost:8000 in your browser.

Re-scanning the same URL? Results are cached by content hash. After upgrading dependencies, stale failure reports are purged automatically on startup. Run a fresh scan if you previously saw "Model loading failed".

Docker

docker compose up

Architecture

sloptotal/
├── app/                    # Backend (Python/FastAPI)
│   ├── main.py             # App factory, lifespan, middleware
│   ├── routes/
│   │   ├── web.py          # Web page routes (/, /report, /analyze, SSE)
│   │   ├── api.py          # JSON API (/api/quick-score, /api/analyze, etc.)
│   │   └── queue.py        # Queue status & ticket polling
│   ├── analyzer.py         # Core analysis orchestration & scoring
│   ├── engines/            # 23 detection engines
│   │   ├── base.py         # BaseEngine ABC
│   │   └── ...             # One file per engine
│   ├── config.py           # Configuration & engine weights
│   ├── schemas.py          # Pydantic models
│   ├── database.py         # SQLite async storage
│   ├── cache.py            # Content hashing & caching
│   ├── scraper.py          # URL content extraction
│   ├── autoconfig.py       # Hardware detection & profiling
│   ├── model_pool.py       # Thread-safe model replica pools
│   └── queue_manager.py    # Request queuing & backpressure
├── web/                    # Web Frontend
│   ├── templates/          # Jinja2 templates
│   └── static/             # CSS, JS, images
├── extension/              # Chrome Extension (Manifest V3)
│   ├── manifest.json
│   ├── background.js
│   ├── popup/
│   └── content/
└── tests/                  # Evaluation scripts

API Endpoints

EndpointMethodDescriptionLatency
/api/quick-scorePOST6 engines (fast)~100-500ms
/api/paragraph-scorePOSTPer-paragraph heat map~1-3s
/api/scan/snippetsPOSTBatch scan (1-30 snippets)~500ms
/api/analyzePOSTFull 23-engine analysis~3-8s
/api/enginesGETEngine metadatainstant
/api/recentGETRecent reportsinstant
/api/report/{id}GETFull report datainstant
/api/queue/statusGETQueue capacityinstant

Quick Score Example

curl -X POST http://localhost:8000/api/quick-score \
  -H "Content-Type: application/json" \
  -d '{"text": "Your text to analyze here..."}'

Response:

{
  "score": 72.3,
  "verdict": "ai",
  "confidence": "high",
  "engines": [...],
  "elapsed_ms": 340.2
}

Detection Engines

Every engine links to its page on sloptotal.com, which carries its measured scores against both corpora. AUC below is the probability the engine ranks a random AI passage above a random human one: 1.0 is perfect, 0.5 is a coin flip.

Neural Classifiers

EngineModelAUCNotes
Desklib DeBERTaDeBERTa-v3-large (435M)1.000Strongest separation in our own tests
SuperAnnotateRoBERTa-large (355M)0.989No measurable bias against archaic prose
E5-SmallE5 + LoRA (33M)0.999Matches far larger models at 33M params
TMR DetectorRoBERTa-base (125M)1.000RAID-trained, so RAID scores flatter it
BERT-tiny RAIDBERT-tiny (4.4M)1.000Answers in milliseconds
ReMoDetectDeBERTa (184M)0.941Targets RLHF-aligned LLMs
ChatGPT DetectorRoBERTa-base (125M)0.829ChatGPT-specific
FakespotRoBERTa-base (125M)0.999Accurate on modern text, but +0.533 bias on pre-1920 prose
OpenAI DetectorRoBERTa-base (125M)0.771The 2019 GPT-2 detector; weaker on modern LLMs

Statistical Methods

EngineMethodAUC
Log-RankAverage log-rank under GPT-20.909
GLTRToken rank distribution0.904
PerplexityGPT-2 perplexity scoring0.901
Cross-PerplexityTwo-model perplexity comparison0.891
Fast-DetectGPTConditional probability curvature0.890
BinocularsCross-entropy ratio between two LMs0.836
DivEyeSurprisal diversity0.730

Linguistic Heuristics

EngineSignalAUC
Structural AnalysisEm-dash usage, sentence uniformity0.836
Linguistic MarkersAI-preferred phrases ("delve", "tapestry"...)0.713
Formulaic PatternsCliche openings and closings0.698
Vocabulary RichnessType-token ratio, hapax legomena0.583
Readability UniformityCross-paragraph consistency0.581
BurstinessPer-sentence perplexity variance0.582
Sentiment & HedgingHedging and forced balance0.522

The linguistic heuristics are weak on their own. They are kept because they fail independently of the neural classifiers, which is what makes them useful as tiebreakers rather than as evidence.

Scoring

The final score is calibrated, not a simple average, and every weight is derived from measurement rather than intuition. See tests/eval/FINDINGS.md and sloptotal.com/detect/ai-detector-ensemble/.

  1. Anchored on the unbiased classifiers -- Desklib, SuperAnnotate, E5 and ReMoDetect all score high AUC with no measurable bias against older prose. Their consensus is blended 60/40 with the full weighted set.
  2. Weights from measurement -- each engine's share is proportional to Somers' D (2*AUC - 1), scaled down by any bias it shows against archaic writing. RAID-trained engines are damped because our corpus is RAID.
  3. Confidence from agreement -- a tight cluster across independent engine families is trustworthy; one confident engine is not.
  4. Skepticism, but only when earned -- unanimous high classifier scores are damped only when the text itself carries human markers (contractions, first-person, slang). Applied unconditionally it fired on 69 of 70 AI samples and 0 of 66 human ones, suppressing correct detections.

Fakespot was previously the anchor, weighted 0.13. It is accurate on modern text (AUC 0.999) but scored pre-1920 human prose at 0.645 against 0.112 for modern human writing -- the largest bias of any engine -- and anchoring amplified it. Machiavelli scored 62.5. After demotion to 0.033, literary passages average 10.2 and none is flagged.

Hardware Requirements

SlopTotal auto-detects CPU, RAM, and GPU on startup and picks a profile (lite, standard, or performance).

ProfileRAMCPUGPUNotes
Lite4 GB2 coresNoneAll engines, slower
Standard8 GB4 coresNoneDefault for most laptops
Performance16 GB+6+ coresCUDA optionalPool replicas, max throughput

High-RAM CPU servers (e.g. 64 GB, no GPU): you automatically get the performance profile. With no CUDA, all inference stays on CPU but you can run more concurrent workers and model pool replicas:

# Tune for a 64 GB CPU-only server
export SLOPTOTAL_PROFILE=performance
export SLOPTOTAL_TORCH_THREADS=8
export SLOPTOTAL_FULL_WORKERS=8
export SLOPTOTAL_SNIPPET_WORKERS=6
export SLOPTOTAL_MAX_CONCURRENT_FULL=4
export SLOPTOTAL_POOL_FAKESPOT=2
export SLOPTOTAL_POOL_TMR=2
./start.sh

First full scan downloads ~2 GB of models and may take 1–2 minutes while weights load; subsequent scans are much faster.

Hardware is auto-detected on startup. Override with environment variables:

SLOPTOTAL_TORCH_THREADS=4
SLOPTOTAL_FULL_WORKERS=6
SLOPTOTAL_SNIPPET_WORKERS=4
SLOPTOTAL_MAX_CONCURRENT_FULL=3

Troubleshooting

SymptomCauseFix
TypeError: unsupported operand type(s) for | on startupPython 3.9 or olderUse Python 3.10+ (python3.11 -m venv venv)
ModuleNotFoundError: No module named 'bs4'Missing dependencypip install -r requirements.txt (includes beautifulsoup4)
Model loading failed / tokenizer enum errorsOutdated tokenizers (<0.19)pip install -U 'transformers>=4.46' 'tokenizers>=0.21' and restart
Old scans still show engine failuresCached report from before fixRestart server (auto-purges stale cache) and run a new scan
Engines stuck on "PENDING" in UIViewing an old report URLGo to / and submit a fresh analysis

Verify all engines loaded:

curl -s http://localhost:8000/health | python3 -m json.tool
# Expect: "status": "healthy", "engines": 23

Roadmap

See TODO.md for planned engines — including Qwen and Gemma classifiers and perplexity models optimized for high-RAM CPU servers.

Similar tools

Papers & benchmarks

  • RAID benchmark (ACL 2024) — adversarial AI text detection dataset; several SlopTotal engines are RAID-trained
  • Detecting the Machine (2026) — cross-architecture detector benchmark; ensemble methods outperform single detectors
  • EditLens / Greyscope — human vs. AI-edited vs. AI-generated classification (candidate Qwen engine)

Guides

Chrome Extension

The SlopTotal Chrome extension is maintained as a separate open-source repository:

pablocaeg/sloptotal-extension

Features:

  • Scans Google search results inline with AI probability badges
  • Scans LinkedIn feed posts with AI detection
  • Quick-score popup for any page or selected text
  • Right-click context menu integration
  • Configurable API — point at any SlopTotal backend

Install from the extension repo or load extension/ as an unpacked extension for development.

AI Agents

This project ships with 11 specialized AI agents that can autonomously navigate, build, test, review, and ship contributions. They work with any AI coding assistant — Claude Code, Cursor, GitHub Copilot, ChatGPT, Gemini, Windsurf, or programmatic API calls. Anyone who clones this repo gets access to them automatically.

sloptotal-expert          # Understand the codebase
sloptotal-completionist   # Find what's missing or broken
sloptotal-feature-builder # Build new engines, endpoints, pages
sloptotal-test-writer     # Create tests with proper patterns
sloptotal-reviewer        # Code review before PR
sloptotal-optimizer       # Performance, SEO, accessibility
sloptotal-deployer        # CI/CD and deployment
sloptotal-open-source     # GitHub templates and discoverability
sloptotal-extension-extractor  # Extract extension to its own repo
sloptotal-pr-creator      # Git workflow and PR creation
sloptotal-contribute      # Master orchestrator for end-to-end workflows

See docs/ai-agents/ for full documentation, workflow pipelines, and usage examples.

Contributing

Contributions are welcome! See CONTRIBUTING.md for development setup, code style, and how to add new detection engines.

License

MIT

Contributors

pablocaeg

15 commits

pablocaeg/sloptotal

Open-source AI text detector — VirusTotal for AI slop. 23 engines, self-hosted, runs on CPU. Scan text or URLs locally.

13

stars

15

commits

Python

primary language

Jul 26, 2026

updated

sloptotal.com
ai-content-detector
ai-detection
ai-generated-content
ai-slop
ai-slop-detector
ai-text-detection
chatgpt
fastapi
gpt-detector
huggingface
llm
local-first
open-source
privacy
python
self-hosted
slop-detector
text-classification
transformers

README

SlopTotal

CI License: MIT Website

VirusTotal for AI slop detection. Scan any text or URL with 23 independent detection engines running entirely on your hardware. No data sent to third parties.

What it does

SlopTotal runs 23 AI detection engines in parallel -- neural classifiers, statistical tests, and linguistic heuristics -- and produces a calibrated forensic score. Results stream in real-time as each engine completes.

Live demo: sloptotal.com — or read the per-engine scores and what the measurements show.

Measured accuracy

Most detectors publish an accuracy figure without saying what it was measured on. These numbers, the harness that produced them and the raw per-sample results are all in tests/eval/.

Two corpora, deliberately:

CorpusWhatSize
Multi-domainRAID: news, book prose, poetry, academic abstracts. AI from GPT-4, ChatGPT, Llama, Mistral, Cohere, GPT-3110 (40 human, 70 AI)
Literary controlProject Gutenberg prose published 1532-1915 -- Machiavelli, Austen, Melville, Kafka26 (all human)

The second exists because a high score there cannot be anything but an error: the writing predates language models by a century or more. Optimising on the first corpus alone produces a threshold that mislabels literature.

Result
Overall AUC0.974
AI reaching "Suspicious" or above90%
Human text wrongly called "Likely AI"1 of 66
Literary passages flagged0 of 26

What does not work. Short text is unreliable below roughly 80 words and settles from about 200. Hand-edited AI loses fingerprints with every rewriting pass. Source code is outside what these engines do: in testing they never falsely accused human code, and never caught machine-written code either -- so we do not claim they can.

The failures are published too, including three engines found scoring backwards and two loading a randomly initialised network while carrying real ensemble weight. Read them at sloptotal.com/detect/ai-detector-benchmark/ and sloptotal.com/detect/ai-detector-false-positives/.

Quick Start

Requirements

  • Python 3.10+ (3.11 recommended — macOS ships 3.9, which is too old)
  • 4 GB RAM minimum (lite profile); 8 GB standard; 16 GB+ for best CPU throughput
  • No GPU required — all engines run on CPU; CUDA optional for faster inference
  • ~2 GB disk for HuggingFace model cache on first run

Install

# Clone and install
git clone https://github.com/pablocaeg/sloptotal.git
cd sloptotal

# Use Python 3.10+ explicitly (example: Homebrew on macOS)
python3.11 -m venv venv && source venv/bin/activate
pip install --upgrade pip
pip install -r requirements.txt

# Optional: copy env template
cp .env.example .env

# Start (auto-detects hardware, downloads models on first run)
./start.sh
# or manually:
uvicorn app.main:app --host 0.0.0.0 --port 8000

Open http://localhost:8000 in your browser.

Re-scanning the same URL? Results are cached by content hash. After upgrading dependencies, stale failure reports are purged automatically on startup. Run a fresh scan if you previously saw "Model loading failed".

Docker

docker compose up

Architecture

sloptotal/
├── app/                    # Backend (Python/FastAPI)
│   ├── main.py             # App factory, lifespan, middleware
│   ├── routes/
│   │   ├── web.py          # Web page routes (/, /report, /analyze, SSE)
│   │   ├── api.py          # JSON API (/api/quick-score, /api/analyze, etc.)
│   │   └── queue.py        # Queue status & ticket polling
│   ├── analyzer.py         # Core analysis orchestration & scoring
│   ├── engines/            # 23 detection engines
│   │   ├── base.py         # BaseEngine ABC
│   │   └── ...             # One file per engine
│   ├── config.py           # Configuration & engine weights
│   ├── schemas.py          # Pydantic models
│   ├── database.py         # SQLite async storage
│   ├── cache.py            # Content hashing & caching
│   ├── scraper.py          # URL content extraction
│   ├── autoconfig.py       # Hardware detection & profiling
│   ├── model_pool.py       # Thread-safe model replica pools
│   └── queue_manager.py    # Request queuing & backpressure
├── web/                    # Web Frontend
│   ├── templates/          # Jinja2 templates
│   └── static/             # CSS, JS, images
├── extension/              # Chrome Extension (Manifest V3)
│   ├── manifest.json
│   ├── background.js
│   ├── popup/
│   └── content/
└── tests/                  # Evaluation scripts

API Endpoints

EndpointMethodDescriptionLatency
/api/quick-scorePOST6 engines (fast)~100-500ms
/api/paragraph-scorePOSTPer-paragraph heat map~1-3s
/api/scan/snippetsPOSTBatch scan (1-30 snippets)~500ms
/api/analyzePOSTFull 23-engine analysis~3-8s
/api/enginesGETEngine metadatainstant
/api/recentGETRecent reportsinstant
/api/report/{id}GETFull report datainstant
/api/queue/statusGETQueue capacityinstant

Quick Score Example

curl -X POST http://localhost:8000/api/quick-score \
  -H "Content-Type: application/json" \
  -d '{"text": "Your text to analyze here..."}'

Response:

{
  "score": 72.3,
  "verdict": "ai",
  "confidence": "high",
  "engines": [...],
  "elapsed_ms": 340.2
}

Detection Engines

Every engine links to its page on sloptotal.com, which carries its measured scores against both corpora. AUC below is the probability the engine ranks a random AI passage above a random human one: 1.0 is perfect, 0.5 is a coin flip.

Neural Classifiers

EngineModelAUCNotes
Desklib DeBERTaDeBERTa-v3-large (435M)1.000Strongest separation in our own tests
SuperAnnotateRoBERTa-large (355M)0.989No measurable bias against archaic prose
E5-SmallE5 + LoRA (33M)0.999Matches far larger models at 33M params
TMR DetectorRoBERTa-base (125M)1.000RAID-trained, so RAID scores flatter it
BERT-tiny RAIDBERT-tiny (4.4M)1.000Answers in milliseconds
ReMoDetectDeBERTa (184M)0.941Targets RLHF-aligned LLMs
ChatGPT DetectorRoBERTa-base (125M)0.829ChatGPT-specific
FakespotRoBERTa-base (125M)0.999Accurate on modern text, but +0.533 bias on pre-1920 prose
OpenAI DetectorRoBERTa-base (125M)0.771The 2019 GPT-2 detector; weaker on modern LLMs

Statistical Methods

EngineMethodAUC
Log-RankAverage log-rank under GPT-20.909
GLTRToken rank distribution0.904
PerplexityGPT-2 perplexity scoring0.901
Cross-PerplexityTwo-model perplexity comparison0.891
Fast-DetectGPTConditional probability curvature0.890
BinocularsCross-entropy ratio between two LMs0.836
DivEyeSurprisal diversity0.730

Linguistic Heuristics

EngineSignalAUC
Structural AnalysisEm-dash usage, sentence uniformity0.836
Linguistic MarkersAI-preferred phrases ("delve", "tapestry"...)0.713
Formulaic PatternsCliche openings and closings0.698
Vocabulary RichnessType-token ratio, hapax legomena0.583
Readability UniformityCross-paragraph consistency0.581
BurstinessPer-sentence perplexity variance0.582
Sentiment & HedgingHedging and forced balance0.522

The linguistic heuristics are weak on their own. They are kept because they fail independently of the neural classifiers, which is what makes them useful as tiebreakers rather than as evidence.

Scoring

The final score is calibrated, not a simple average, and every weight is derived from measurement rather than intuition. See tests/eval/FINDINGS.md and sloptotal.com/detect/ai-detector-ensemble/.

  1. Anchored on the unbiased classifiers -- Desklib, SuperAnnotate, E5 and ReMoDetect all score high AUC with no measurable bias against older prose. Their consensus is blended 60/40 with the full weighted set.
  2. Weights from measurement -- each engine's share is proportional to Somers' D (2*AUC - 1), scaled down by any bias it shows against archaic writing. RAID-trained engines are damped because our corpus is RAID.
  3. Confidence from agreement -- a tight cluster across independent engine families is trustworthy; one confident engine is not.
  4. Skepticism, but only when earned -- unanimous high classifier scores are damped only when the text itself carries human markers (contractions, first-person, slang). Applied unconditionally it fired on 69 of 70 AI samples and 0 of 66 human ones, suppressing correct detections.

Fakespot was previously the anchor, weighted 0.13. It is accurate on modern text (AUC 0.999) but scored pre-1920 human prose at 0.645 against 0.112 for modern human writing -- the largest bias of any engine -- and anchoring amplified it. Machiavelli scored 62.5. After demotion to 0.033, literary passages average 10.2 and none is flagged.

Hardware Requirements

SlopTotal auto-detects CPU, RAM, and GPU on startup and picks a profile (lite, standard, or performance).

ProfileRAMCPUGPUNotes
Lite4 GB2 coresNoneAll engines, slower
Standard8 GB4 coresNoneDefault for most laptops
Performance16 GB+6+ coresCUDA optionalPool replicas, max throughput

High-RAM CPU servers (e.g. 64 GB, no GPU): you automatically get the performance profile. With no CUDA, all inference stays on CPU but you can run more concurrent workers and model pool replicas:

# Tune for a 64 GB CPU-only server
export SLOPTOTAL_PROFILE=performance
export SLOPTOTAL_TORCH_THREADS=8
export SLOPTOTAL_FULL_WORKERS=8
export SLOPTOTAL_SNIPPET_WORKERS=6
export SLOPTOTAL_MAX_CONCURRENT_FULL=4
export SLOPTOTAL_POOL_FAKESPOT=2
export SLOPTOTAL_POOL_TMR=2
./start.sh

First full scan downloads ~2 GB of models and may take 1–2 minutes while weights load; subsequent scans are much faster.

Hardware is auto-detected on startup. Override with environment variables:

SLOPTOTAL_TORCH_THREADS=4
SLOPTOTAL_FULL_WORKERS=6
SLOPTOTAL_SNIPPET_WORKERS=4
SLOPTOTAL_MAX_CONCURRENT_FULL=3

Troubleshooting

SymptomCauseFix
TypeError: unsupported operand type(s) for | on startupPython 3.9 or olderUse Python 3.10+ (python3.11 -m venv venv)
ModuleNotFoundError: No module named 'bs4'Missing dependencypip install -r requirements.txt (includes beautifulsoup4)
Model loading failed / tokenizer enum errorsOutdated tokenizers (<0.19)pip install -U 'transformers>=4.46' 'tokenizers>=0.21' and restart
Old scans still show engine failuresCached report from before fixRestart server (auto-purges stale cache) and run a new scan
Engines stuck on "PENDING" in UIViewing an old report URLGo to / and submit a fresh analysis

Verify all engines loaded:

curl -s http://localhost:8000/health | python3 -m json.tool
# Expect: "status": "healthy", "engines": 23

Roadmap

See TODO.md for planned engines — including Qwen and Gemma classifiers and perplexity models optimized for high-RAM CPU servers.

Similar tools

Papers & benchmarks

  • RAID benchmark (ACL 2024) — adversarial AI text detection dataset; several SlopTotal engines are RAID-trained
  • Detecting the Machine (2026) — cross-architecture detector benchmark; ensemble methods outperform single detectors
  • EditLens / Greyscope — human vs. AI-edited vs. AI-generated classification (candidate Qwen engine)

Guides

Chrome Extension

The SlopTotal Chrome extension is maintained as a separate open-source repository:

pablocaeg/sloptotal-extension

Features:

  • Scans Google search results inline with AI probability badges
  • Scans LinkedIn feed posts with AI detection
  • Quick-score popup for any page or selected text
  • Right-click context menu integration
  • Configurable API — point at any SlopTotal backend

Install from the extension repo or load extension/ as an unpacked extension for development.

AI Agents

This project ships with 11 specialized AI agents that can autonomously navigate, build, test, review, and ship contributions. They work with any AI coding assistant — Claude Code, Cursor, GitHub Copilot, ChatGPT, Gemini, Windsurf, or programmatic API calls. Anyone who clones this repo gets access to them automatically.

sloptotal-expert          # Understand the codebase
sloptotal-completionist   # Find what's missing or broken
sloptotal-feature-builder # Build new engines, endpoints, pages
sloptotal-test-writer     # Create tests with proper patterns
sloptotal-reviewer        # Code review before PR
sloptotal-optimizer       # Performance, SEO, accessibility
sloptotal-deployer        # CI/CD and deployment
sloptotal-open-source     # GitHub templates and discoverability
sloptotal-extension-extractor  # Extract extension to its own repo
sloptotal-pr-creator      # Git workflow and PR creation
sloptotal-contribute      # Master orchestrator for end-to-end workflows

See docs/ai-agents/ for full documentation, workflow pipelines, and usage examples.

Contributing

Contributions are welcome! See CONTRIBUTING.md for development setup, code style, and how to add new detection engines.

License

MIT

Contributors

pablocaeg

15 commits

Languages

Python

64.4%

JavaScript

14.3%

CSS

12.1%

TypeScript

3.7%

HTML

2.8%

Astro

2.4%