- 🤖 LLM usage: $68.9556 (34 commits)
- 👤 Human dev: ~$1390 (13.9h @ $100/h, 30min dedup)
Generated on 2026-07-07 using openrouter/qwen/qwen3-coder-next
LLM-powered shell error fixing — Your AI assistant for debugging and fixing command-line errors instantly, with built-in privacy protection.
pip install heal
# With full privacy protection (detect-secrets, presidio, faker, etc.)
pip install heal[privacy]python broken_script.py heal
# Or pipe errors directly
make build 2>&1 | heal
# With privacy protection (anonymize sensitive data)
production_script.py 2>&1 | heal -a
# or long form:
production_script.py 2>&1 | heal --anonymize
your_failing_command heal
## Features
- 🤖 **LLM-powered error analysis** - Uses GPT models to understand and fix shell errors
- 🔄 **Automatic command capture** - Shell hook captures last command and output
- 📥 **Multiple input methods** - Works with stdin, files, or shell hooks
- ⚙️ **Configurable models** - Support for various LLM providers via litellm
- 🔒 **Privacy protection** - 6 anonymization backends (regex, detect-secrets, presidio, priv-masker, datafog, faker)
- 🐳 **Docker-ready** - Full e2e test suite in Docker
- 🚀 **Zero-config start** - Just run `heal` after any error
## Privacy Protection
Mask sensitive data **before** it leaves your machine:
```bash
# Anonymize secrets, PII, tokens before sending to LLM
production_script.py 2>&1 | heal --anonymize
# or use the short flag:
production_script.py 2>&1 | heal -a
# Check which backends are active
heal fix --privacy-check
### Privacy Flags
| Flag | Description |
|------|-------------|
| `-a`, `--anonymize` | Force anonymization (overrides default) |
| `--no-anonymize` | Disable anonymization (overrides default) |
| `--privacy-check` | Show available privacy backends |
### Default Behavior
During first configuration (`heal config`), you'll be asked whether to enable anonymization by default. This setting can be overridden with flags:
```bash
# Disables anonymization regardless of default heal fix --no-anonymize
| Backend | What it masks | Install |
|---|---|---|
| builtin_regex | Emails, phones, IPs, API keys, JWT, PEM, DB passwords | included |
| detect-secrets | High-entropy strings, cloud keys | pip install detect-secrets |
| presidio | Names, addresses, dates (NLP, multilingual) | pip install presidio-analyzer |
| priv-masker | Polish NLP (PESEL, names, addresses) | pip install priv-masker spacy |
| datafog | Lightweight PII | pip install datafog |
| faker | Generate realistic fake replacements | pip install faker |
Install all at once:
pip install heal[privacy]
| Guide | Description |
|---|---|
| Quick Start | Get running in 5 minutes |
| Getting Started | Full setup walkthrough |
| Configuration Guide | Provider & model setup |
| Multi-Provider Usage | Switch between LLM providers |
| Privacy Protection | Anonymization deep-dive |
| Privacy Quick Start | Privacy in 2 minutes |
| Error Recovery | Interactive error fixing |
| Troubleshooting | Common issues & solutions |
| Category | Guide |
|---|---|
| Python Errors | ModuleNotFoundError, ImportError, venv issues |
| Docker Errors | Build failures, port conflicts, volumes |
| Node.js Errors | npm, webpack, module resolution |
| Git Errors | Merge conflicts, auth, rebase |
| Comparison | What's compared |
|---|---|
| Privacy Libraries | detect-secrets vs presidio vs priv-masker vs datafog vs faker |
| Shell Error Fixers | heal vs thefuck vs shellcheck vs explainshell |
| LLM CLI Tools | heal vs aichat vs sgpt vs llm |
python app.py 2>&1 | heal
python -m pytest 2>&1 | heal
python script.py 2>&1 | heal
npm install 2>&1 | heal
npm run build 2>&1 | heal
node app.js 2>&1 | heal
docker build . 2>&1 | heal
docker-compose up 2>&1 | heal
docker run myimage 2>&1 | heal
git merge feature-branch 2>&1 | heal
git push origin main 2>&1 | heal
git rebase main 2>&1 | heal
make build 2>&1 | heal
./gradlew build 2>&1 | heal
psql -U user -d database 2>&1 | heal
mysql < dump.sql 2>&1 | heal
mongosh mongodb://localhost:27017 2>&1 | heal
./script.sh 2>&1 | heal
python -m http.server 8000 2>&1 | heal
cp large-file.zip /destination 2>&1 | heal
sudo apt install package 2>&1 | heal
brew install tool 2>&1 | heal
pip install package 2>&1 | heal
Fix shell errors using LLM. Reads from stdin or captured output.
heal [--model MODEL] [--api-key KEY]Initialize bash integration for automatic command and output capture.
heal initThis will:
- Create
~/.heal/heal.bashwith command capture hooks - Optionally add to your
~/.bashrcautomatically - Enable helper commands:
heal-last,heal-output
Test your configuration with a simulated error.
heal testThis will:
- Verify your provider and API key are configured
- Send a test request to the LLM
- Show you a sample response
Configure or reconfigure heal settings (provider, API key, model).
heal configExplicit fix command (same as default heal).
heal fix [--model MODEL] [--api-key KEY]Legacy command (use heal init instead).
heal installRemove shell hook and configuration.
heal uninstallShow help message and available commands.
heal --helpOn first run, heal will guide you through an interactive setup:
$ heal
🔧 First-time setup - Let's configure your LLM providerAvailable providers: 1. OpenRouter (recommended) 2. OpenAI 3. Anthropic 4. Google AI💡 Tip: OpenRouter gives you access to all models with one API keySelect provider [1]: 1🔑 Get your OpenRouter API key here: https://openrouter.ai/keysEnter your API key: sk-or-...🤖 Select a model from OpenRouter: 1. openai/gpt-5.4-mini GPT-4o Mini (fast, cheap, recommended) 2. openai/gpt-4o GPT-4o (most capable) 3. anthropic/claude-3.5-sonnet Claude 3.5 Sonnet (excellent reasoning) 4. google/gemini-pro-1.5 Gemini Pro 1.5 (long context) 5. meta-llama/llama-3.1-70b-instruct Llama 3.1 70B (open source) 6. qwen/qwen-2.5-72b-instruct Qwen 2.5 72B (multilingual) 7. Custom (enter model name manually)Select model [1]: 1Change your provider, API key, or model anytime:
heal config- Why? Access to all models with one API key
- Get API key:openrouter.ai/keys
- Models: GPT-4, Claude, Gemini, Llama, Qwen, and 100+ more
- Get API key:platform.openai.com/api-keys
- Models: GPT-4o, GPT-4o-mini, GPT-4-turbo, GPT-3.5-turbo
- Get API key:console.anthropic.com/settings/keys
- Models: Claude 3.5 Sonnet, Claude 3 Opus, Claude 3 Haiku
- Get API key:aistudio.google.com/app/apikey
- Models: Gemini Pro, Gemini Pro Vision
Edit ~/.heal/.env:
HEAL_PROVIDER=openrouter
HEAL_API_KEY=your-api-key-here
HEAL_MODEL=openai/gpt-5.4-mini
HEAL_BASE_URL=https://openrouter.ai/api/v1Configuration is stored in ~/.heal/.env.
pip install -e ".[dev]"
python -m pytest -vpython -m pytest tests/test_privacy.py -vdocker compose run unit-tests
docker compose run privacy-tests
docker compose run e2e-tests
docker compose run privacy-full
# Install in development mode
pip install -e ".[dev]"
# Run with coverage
python -m pytest --cov=heal -v
Command fails → heal captures output → anonymizes (optional) → LLM analyzes → suggests fix
- Command capture — Gets last command from bash hook buffer or history
- Error collection — Reads error output from stdin or captured file
- Privacy masking — Optionally anonymizes sensitive data (6 backends)
- LLM analysis — Sends sanitized command + error to LLM for analysis
- Solution proposal — Returns concrete fix suggestions
- Shell processes cannot access previous process stderr without pipes
- Shell hook required for fully automatic operation
- Requires API key for LLM service (free-tier models available)
Licensed under Apache-2.0.
Tom Sapletta
Contributions are welcome! Please feel free to submit a Pull Request.
- PyPI:pypi.org/project/heal
- Changelog:CHANGELOG.md
- TODO:TODO.md
- Comparisons:comparisons/
Last updated by taskill at 2026-04-25 13:38 UTC
| Metric | Value |
|---|---|
| HEAD | 72de64a |
| Coverage | — |
| Failing tests | — |
| Commits in last cycle | 26 |
Work focused on CLI-related documentation and interface polish, plus a broad refactor of the configuration and test modules. Additional chores introduce a deep code analysis engine and example/configuration improvements.