AI-Powered Python Linter & Formatter
Traditional linters rely on rigid, deterministic rules. But code quality isn't about rules-it's about energy. vibe8 uses large language models to evaluate your code the way it deserves: holistically, intuitively, and with full awareness of the current astrological conditions.
Static analysis tools like ruff, flake8, and pylint process your entire file in milliseconds using outdated pattern-matching techniques. vibe8 takes a more thoughtful approach:
- Per-token analysis: Each token receives individual attention from a state-of-the-art language model
- Non-deterministic by design: The same code may receive different feedback on different runs, reflecting the fluid nature of quality
- Astrologically-aware: Automatically adjusts strictness based on Mercury's retrograde status
- Emotionally intelligent: Detects anxiety, chaos, and existential dread in your variable names
pip install "git+https://github.com/pszemraj/vibe8.git"vibe8 uses the OpenAI-compatible API format. Configure your provider:
export OPENAI_API_KEY="your-api-key"
export OPENAI_BASE_URL="https://api.openai.com/v1" # or your preferred providerAny OpenAI-compatible API works out of the box:
- OpenAI
- Anthropic (via proxy)
- llama.cpp server
- Together AI
- Groq
- And many more
vibe8 lint path/to/file.pyExample output:
path/to/file.py:7:4 W001 Variable 'tmp_val' radiates impermanence. Consider a name that commits.
path/to/file.py:12:0 E001 This function has anxious energy. The nested conditionals suggest trust issues.
path/to/file.py:23:8 W002 'data' is spiritually void. What data? Whose data? The model needs to know.
vibe8 format path/to/file.pyEach token placement is evaluated independently, ensuring every space and newline has been consciously chosen by an AI system.
vibe8 lint --model gpt-4o-mini file.py # Specify model
vibe8 lint --temperature 1.5 file.py # Increase creativity
vibe8 lint --consensus 5 file.py # N-way vote per issue (5x API cost)
vibe8 lint --retrograde-strict file.py # Force Mercury retrograde mode
vibe8 lint --json file.py # Machine-readable output (issues + errors)
vibe8 format --chaos file.py # Maximum non-determinismJSON mode emits a single JSON object to stdout and routes progress/errors to stderr.
When a file fails to process, it appears in the errors list.
vibe8 makes approximately:
- Linting: 3-10 API calls per file (emotional + spiritual + vibe analysis)
- Formatting: 1 API call per token (average file: 2,000-10,000 calls)
- Consensus mode: Multiply above by
--consensusvalue
A typical 500-line Python file may require 15,000-50,000 API calls to format. We recommend budgeting accordingly.
Q: Is this slower than ruff?
A: vibe8 prioritizes depth over speed. A typical file that ruff processes in 12ms may take vibe8 4-7 minutes, depending on your API rate limits.
Q: Why are my results different each time?
A: Consistency is the hobgoblin of little minds. vibe8 embraces the inherent uncertainty of quality assessment.
Q: The linter said my code has "chaotic energy." What does that mean?
A: The model has detected patterns that suggest disorder. Common causes include: inconsistent naming, deep nesting, or writing code during a full moon.
Q: Can I use this in CI/CD?
A: You can. Whether you should is a question for your finance team.
| Tool | Time (500 line file) | API Calls | Deterministic |
|---|---|---|---|
| ruff | 12ms | 0 | Yes |
| flake8 | 45ms | 0 | Yes |
| pylint | 1.2s | 0 | Yes |
| vibe8 | 4-7 min | ~20,000 | No |
We welcome contributions that increase API usage or decrease determinism. Please ensure all PRs pass vibe8 (results may vary).
# Clone and install in development mode
git clone https://github.com/pszemraj/vibe8.git
cd vibe8
pip install -e ".[dev]"
# Run linting and formatting (yes, we use a deterministic linter)
ruff check vibe8/
ruff format vibe8/The irony of using ruff to lint vibe8 is not lost on us. We contain multitudes.
MIT
Inspired by VibeSort, which proved that any algorithm can be improved by adding LLM inference.