Skip to main content

Self-healing Python — catches runtime errors, fixes code & dependencies via LLM + MCP

Project description

🔧 pfix

Self-healing Python — catches runtime errors and fixes source code + dependencies via LLM + MCP.

Features

  • @pfix decorator — wrap any function; errors trigger automatic repair
  • Fast dep fixModuleNotFoundError → instant pip/uv install (no LLM call)
  • pipreqs scanning — project-wide import analysis for missing dependencies
  • LLM code repair — sends error context to LLM (OpenRouter/LiteLLM) for intelligent fixes
  • pip + uv — auto-detects uv for faster installs, falls back to pip
  • MCP server@mcp.tool() via FastMCP for IDE integration (Claude Code, Cursor, VS Code)
  • Git auto-commit — optional auto-commit of fixes with configurable prefix
  • Auto-restartos.execv process restart after fix applied
  • Interactive diff — unified diff with confirmation before applying
  • Backup system — timestamped backups in .pfix_backups/
  • Async support@apfix for async functions

Installation

pip install pfix

# With MCP server support
pip install pfix[mcp]

# With git auto-commit
pip install pfix[git]

# Everything
pip install pfix[all]

Quick Start

# 1. Configure
cp .env.example .env
# Set OPENROUTER_API_KEY=sk-or-v1-...

# 2. Use in your code
from pfix import pfix

@pfix
def process_data(path):
    import pandas as pd                    # auto-installed if missing
    df = pd.read_csv(path)
    return df.groupby("category").sum()    # LLM fixes column errors

@pfix(retries=3, hint="Parses ISO dates from API", deps=["requests", "python-dateutil"])
def fetch_events(url: str):
    import requests
    from dateutil.parser import parse
    return [parse(e["ts"]) for e in requests.get(url).json()["events"]]

CLI

pfix run script.py              # Run with global exception hook
pfix run script.py --auto       # Auto-apply fixes
pfix run script.py --restart    # Restart process after fix
pfix check                      # Show config status
pfix deps scan                  # Scan for missing deps (pipreqs)
pfix deps install               # Install all missing deps
pfix deps generate              # Generate requirements.txt
pfix server                     # Start MCP server (stdio)
pfix server --http 3001         # Start MCP server (HTTP)

MCP Integration

pfix exposes tools via FastMCP for IDE integration:

Tool Description
pfix_analyze Analyze error → diagnosis + fix proposal
pfix_fix Analyze + apply fix (with backup)
pfix_deps_scan Scan for missing deps
pfix_deps_install Install a package
pfix_deps_generate Generate requirements.txt
pfix_edit_file Write file content

Claude Code / VS Code setup

Add to your MCP config (.claude/mcp.json or VS Code settings):

{
  "mcpServers": {
    "pfix": {
      "command": "python",
      "args": ["-m", "pfix.mcp_server"]
    }
  }
}

Configuration

.env

Variable Default Description
OPENROUTER_API_KEY Required
PFIX_MODEL openrouter/anthropic/claude-sonnet-4 LLM model
PFIX_AUTO_APPLY false Auto-apply fixes
PFIX_AUTO_INSTALL_DEPS true Auto pip/uv install
PFIX_AUTO_RESTART false Restart after fix
PFIX_PKG_MANAGER auto pip or uv
PFIX_MAX_RETRIES 3 Max attempts
PFIX_DRY_RUN false Show only
PFIX_GIT_COMMIT false Auto-commit fixes
PFIX_GIT_PREFIX pfix: Commit prefix

pyproject.toml

[tool.pfix]
model = "openrouter/anthropic/claude-sonnet-4"
auto_apply = false
max_retries = 3

Programmatic

from pfix import configure

configure(
    auto_apply=True,
    pkg_manager="uv",
    git_auto_commit=True,
)

How It Works

@pfix decorated function
        │
        ▼
   Exception caught
        │
        ├── ModuleNotFoundError? → pip/uv install → retry
        │
        ▼
   ErrorContext built (traceback, source, vars, imports, pipreqs scan)
        │
        ▼
   LLM analysis (LiteLLM → OpenRouter)
        │
        ▼
   FixProposal (diagnosis, code, deps, confidence)
        │
        ├── Show diff → confirm (or auto-apply)
        ├── Create .pfix_backups/ backup
        ├── Apply fix to source
        ├── Git commit (optional)
        ▼
   Reload module → retry (or os.execv restart)

Dependencies

Package Role
litellm LLM proxy — OpenRouter, OpenAI, Anthropic, Ollama
python-dotenv Load .env config
rich Terminal UI (diffs, panels, tables)
pipreqs Project import scanning
pathspec Gitignore-aware file filtering
mcp FastMCP server (optional)
gitpython Git auto-commit (optional)
watchdog File change watching (optional)

License

Licensed under Apache-2.0.

Licensed under Apache-2.0.

Licensed under Apache-2.0.

Apache 2.0 — Tom Sapletta / Softreck

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

pfix-0.1.3.tar.gz (29.1 kB view details)

Uploaded Source

Built Distribution

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

pfix-0.1.3-py3-none-any.whl (23.6 kB view details)

Uploaded Python 3

File details

Details for the file pfix-0.1.3.tar.gz.

File metadata

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

File hashes

Hashes for pfix-0.1.3.tar.gz
Algorithm Hash digest
SHA256 00a7cb5b977a21c7d7d9a481ca87f349dc4ebc0b305504d39ee7b3ccfcb9d103
MD5 f77ff1d54e76670b42cd42f46865e912
BLAKE2b-256 a82b011774356a070f50823225fb2bd6c913a51906f217979abb4af05f5c7ab5

See more details on using hashes here.

File details

Details for the file pfix-0.1.3-py3-none-any.whl.

File metadata

  • Download URL: pfix-0.1.3-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 pfix-0.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 7355dce1eec641a85459f883ef546c0496d31b888c6313451e6c8f3c5c060387
MD5 dd321f68ed20eac7e3964335ef066b0d
BLAKE2b-256 a5ab5b04f99dc17e4a697fbdcb283614d7670c0cd23d0d9a8d3d65bbacad209f

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