Skip to main content

A Python package for healing and wellness

Project description

Heal ๐Ÿฉบ

PyPI version Python versions License: Apache-2.0 Tests Docker Privacy

LLM-powered shell error fixing โ€” Your AI assistant for debugging and fixing command-line errors instantly, with built-in privacy protection.

Installation

pip install heal

# With full privacy protection (detect-secrets, presidio, faker, etc.)
pip install heal[privacy]

Quick Start

Complete Setup (Recommended)

# 1. Configure heal (first time only)
heal config

# 2. Test your configuration
heal test

# 3. Initialize bash integration
heal init

# 4. Restart your shell
source ~/.bashrc

# 5. Use heal - just run any command and then heal!
python broken_script.py
heal

Simplest Usage - Just heal

# Run any failing command, then simply run heal
npm install
heal

# Or pipe errors directly
make build 2>&1 | heal

# From error file
heal < error.log

# With privacy protection (anonymize sensitive data)
production_script.py 2>&1 | heal -a
# or long form:
production_script.py 2>&1 | heal --anonymize

Automatic Mode (with shell integration)

# Initialize bash integration (recommended)
heal init

# This will automatically add to ~/.bashrc
# Or manually add: source ~/.heal/heal.bash

# Restart your shell
source ~/.bashrc

# Now you can run any command and heal will capture it:
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:

# 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

# Configure default anonymization (first time setup)
heal config

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:

# Uses your default setting (from config)
heal fix

# Forces anonymization regardless of default
heal fix -a

# 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]

๐Ÿ“š Documentation

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

Examples

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

Comparisons

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

Usage Examples

Python Development

# Missing dependencies
python app.py 2>&1 | heal
# โ†’ Suggests: pip install <missing-package>

# Import errors
python -m pytest 2>&1 | heal
# โ†’ Analyzes import paths and suggests fixes

# Virtual environment issues
python script.py 2>&1 | heal
# โ†’ Detects venv problems and suggests activation

Node.js / JavaScript

# NPM install failures
npm install 2>&1 | heal
# โ†’ Suggests clearing cache, fixing package.json, or using --legacy-peer-deps

# Build errors
npm run build 2>&1 | heal
# โ†’ Analyzes webpack/vite errors and suggests configuration fixes

# Module not found
node app.js 2>&1 | heal
# โ†’ Suggests installing missing packages or fixing import paths

Docker & Containers

# Docker build failures
docker build . 2>&1 | heal
# โ†’ Analyzes Dockerfile errors and suggests fixes

# Container runtime errors
docker-compose up 2>&1 | heal
# โ†’ Suggests port conflicts, volume issues, or network problems

# Permission issues
docker run myimage 2>&1 | heal
# โ†’ Suggests user/group fixes or volume mount corrections

Git Operations

# Merge conflicts
git merge feature-branch 2>&1 | heal
# โ†’ Suggests conflict resolution strategies

# Push/pull errors
git push origin main 2>&1 | heal
# โ†’ Analyzes authentication, branch tracking, or force push needs

# Rebase issues
git rebase main 2>&1 | heal
# โ†’ Suggests conflict resolution or rebase abort/continue

Build Systems

# Make errors
make build 2>&1 | heal
# โ†’ Analyzes missing dependencies or compilation errors

# CMake configuration
cmake . 2>&1 | heal
# โ†’ Suggests missing libraries or configuration flags

# Gradle/Maven builds
./gradlew build 2>&1 | heal
# โ†’ Analyzes Java compilation or dependency errors

Database Operations

# PostgreSQL connection
psql -U user -d database 2>&1 | heal
# โ†’ Suggests authentication fixes or connection string corrections

# MySQL import errors
mysql < dump.sql 2>&1 | heal
# โ†’ Analyzes syntax errors or permission issues

# MongoDB connection
mongosh mongodb://localhost:27017 2>&1 | heal
# โ†’ Suggests service status checks or authentication fixes

System Administration

# Permission denied
./script.sh 2>&1 | heal
# โ†’ Suggests chmod +x or sudo usage

# Port already in use
python -m http.server 8000 2>&1 | heal
# โ†’ Suggests finding and killing the process using the port

# Disk space issues
cp large-file.zip /destination 2>&1 | heal
# โ†’ Suggests cleaning up space or alternative locations

Package Management

# APT/DNF errors
sudo apt install package 2>&1 | heal
# โ†’ Suggests repository updates or alternative package names

# Homebrew issues
brew install tool 2>&1 | heal
# โ†’ Suggests tap additions or formula fixes

# pip install failures
pip install package 2>&1 | heal
# โ†’ Suggests using --user, venv, or resolving dependency conflicts

Commands

heal (default)

Fix shell errors using LLM. Reads from stdin or captured output.

heal [--model MODEL] [--api-key KEY]

heal init

Initialize bash integration for automatic command and output capture.

heal init

This will:

  • Create ~/.heal/heal.bash with command capture hooks
  • Optionally add to your ~/.bashrc automatically
  • Enable helper commands: heal-last, heal-output

heal test

Test your configuration with a simulated error.

heal test

This will:

  • Verify your provider and API key are configured
  • Send a test request to the LLM
  • Show you a sample response

heal config

Configure or reconfigure heal settings (provider, API key, model).

heal config

heal fix

Explicit fix command (same as default heal).

heal fix [--model MODEL] [--api-key KEY]

heal install

Legacy command (use heal init instead).

heal install

heal uninstall

Remove shell hook and configuration.

heal uninstall

heal --help

Show help message and available commands.

heal --help

Configuration

First-Time Setup

On first run, heal will guide you through an interactive setup:

$ heal

๐Ÿ”ง First-time setup - Let's configure your LLM provider

Available providers:
  1. OpenRouter (recommended)
  2. OpenAI
  3. Anthropic
  4. Google AI

๐Ÿ’ก Tip: OpenRouter gives you access to all models with one API key

Select provider [1]: 1

๐Ÿ”‘ Get your OpenRouter API key here:
   https://openrouter.ai/keys

Enter your API key: sk-or-...

๐Ÿค– Select a model from OpenRouter:

  1. openai/gpt-4o-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]: 1

Reconfigure Settings

Change your provider, API key, or model anytime:

heal config

Supported Providers

๐ŸŒ OpenRouter (Recommended)

  • 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

๐Ÿค– OpenAI

๐Ÿง  Anthropic

๐Ÿ” Google AI

Manual Configuration

Edit ~/.heal/.env:

HEAL_PROVIDER=openrouter
HEAL_API_KEY=your-api-key-here
HEAL_MODEL=openai/gpt-4o-mini
HEAL_BASE_URL=https://openrouter.ai/api/v1

Configuration is stored in ~/.heal/.env.

Testing

Unit tests

pip install -e ".[dev]"
python -m pytest -v

Privacy tests (57 test cases)

python -m pytest tests/test_privacy.py -v

Docker Testing

# All unit tests
docker compose run unit-tests

# Privacy tests only
docker compose run privacy-tests

# End-to-end CLI tests
docker compose run e2e-tests

# Full privacy suite with all backends
docker compose run privacy-full

Development

# Install in development mode
pip install -e ".[dev]"

# Run all tests
python -m pytest -v

# Run with coverage
python -m pytest --cov=heal -v

How it works

Command fails โ†’ heal captures output โ†’ anonymizes (optional) โ†’ LLM analyzes โ†’ suggests fix
  1. Command capture โ€” Gets last command from bash hook buffer or history
  2. Error collection โ€” Reads error output from stdin or captured file
  3. Privacy masking โ€” Optionally anonymizes sensitive data (6 backends)
  4. LLM analysis โ€” Sends sanitized command + error to LLM for analysis
  5. Solution proposal โ€” Returns concrete fix suggestions

Limitations

  • 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)

License

Apache License 2.0 - see LICENSE for details.

Author

Created by Tom Sapletta - tom@sapletta.com

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

Links

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

heal-0.1.24.tar.gz (31.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

heal-0.1.24-py3-none-any.whl (23.6 kB view details)

Uploaded Python 3

File details

Details for the file heal-0.1.24.tar.gz.

File metadata

  • Download URL: heal-0.1.24.tar.gz
  • Upload date:
  • Size: 31.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.7

File hashes

Hashes for heal-0.1.24.tar.gz
Algorithm Hash digest
SHA256 a3e77dd52d3c7c0780fdba3bf0be42c2b667ba912fbbb16ec3c8fc62581f9ef3
MD5 7e94426b5b1825be38b5349385dc4866
BLAKE2b-256 e666e1fa4c503acedd9e480a1a09ad032b5fc6fc1ff0800e8d6567639c8394e9

See more details on using hashes here.

File details

Details for the file heal-0.1.24-py3-none-any.whl.

File metadata

  • Download URL: heal-0.1.24-py3-none-any.whl
  • Upload date:
  • Size: 23.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.7

File hashes

Hashes for heal-0.1.24-py3-none-any.whl
Algorithm Hash digest
SHA256 cdd5c08598f3f71f619aab9fef12fe0aa854610731d4dee31458295d6154774f
MD5 42d838136e1fdbbb313a50fe992fcaf7
BLAKE2b-256 47d240e5933e279a920188582c8fc3c9662070d9b8b9f59e8dbc78fcf73cc15a

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page