AI-assisted coding automation tool for streamlined LLM code integration
This project has been archived.
The maintainers of this project have marked this project as archived. No new releases are expected.
Project description
PatchCommander
PatchCommander is a Python-based tool designed to streamline AI-assisted development. It works by processing code changes generated by Large Language Models (LLMs) that follow a specific tag-based syntax. By instructing LLMs to format their code suggestions using PatchCommander's tags, developers can easily and reliably apply AI-generated changes across their codebase.
Purpose
Traditional copy-pasting of code suggested by LLMs is error-prone and time-consuming, especially when changes span multiple files or require careful integration into existing code. PatchCommander solves this by:
- Defining a structured tag syntax that LLMs can be instructed to follow
- Automatically processing these tags to make precise modifications to your codebase
- Providing safety features like diff previews and syntax validation before changes are applied
This creates a seamless workflow between AI code suggestions and practical implementation.
Features
- LLM-friendly tag syntax: Simple XML-like tags that AI models can easily adopt
- Multiple change types: Support for file, class, function, method, and operation modifications
- XPath targeting: Target specific code elements using intuitive path syntax (e.g.,
ClassName.method_name) - Smart method handling: Splits multiple method definitions automatically
- Diff preview: View changes before applying them, with side-by-side comparison option
- Syntax validation: Automatically checks for syntax errors and reverts changes if errors are found
- Clipboard support: Read input directly from clipboard when no file is specified
- Multi-language support: Works with Python and JavaScript files
Installation
Option 1: Using pipx (recommended for command-line tools)
pipx install patchcommander
Option 2: Using pip
pip install patchcommander
Option 3: Using uv
uv install patchcommander
Option 4: From source
# Clone the repository
git clone https://github.com/jacekjursza/PatchCommander.git
# Navigate to the directory
cd PatchCommander
# Install dependencies
pip install -r requirements.txt
# Install in development mode
pip install -e .
Dependencies
- rich
- pyperclip
- tree-sitter
- tree-sitter-python
- tree-sitter-javascript
- diff-match-patch
Usage
After installation, you can use PatchCommander with the shorter command:
# Run with input from clipboard (no arguments)
pcmd
# Run with input from a file
pcmd path/to/input_file.txt
# Show help
pcmd --help
# Display LLM instructions and syntax guide
pcmd --prompt
# Display only the tag syntax guide for LLMs
pcmd --syntax
The legacy command patchcommander is also available but pcmd is recommended.
Tag Syntax for LLMs
When prompting your LLM, instruct it to format code changes using the following tags:
FILE
Replace an entire file's content:
<FILE path="path/to/file.py">
# New file content goes here
</FILE>
FILE with XPath
Update or add a specific element in a file using XPath:
<FILE path="path/to/file.py" xpath="ClassName">
class ClassName:
# Updated class content
</FILE>
<FILE path="path/to/file.py" xpath="ClassName.method_name">
def method_name(self, args):
# Updated method implementation
</FILE>
<FILE path="path/to/file.py" xpath="function_name">
def function_name(args):
# Updated function implementation
</FILE>
OPERATION
Perform file operations:
<OPERATION action="move_file" source="old/path.py" target="new/path.py" />
<OPERATION action="delete_file" source="path/to/file.py" />
<OPERATION action="delete_method" source="path/to/file.py" class="ClassName" method="method_name" />
AI-Assisted Development Workflow
- Prompt the LLM: Ask your LLM to implement a feature or fix a bug, instructing it to format changes using PatchCommander's tag syntax
- Copy the output: Save the LLM's response with the tagged code changes to a file or clipboard
- Run PatchCommander: Process the changes using
pcmd [filename]or justpcmdfor clipboard content - Review the changes: Examine the diffs for each proposed change (with side-by-side view if needed)
- Confirm or reject: Choose which changes to apply
- Apply changes: All confirmed changes are applied at once at the end of the process
Example Prompt for LLMs
Please implement a user authentication system for my Flask application.
Format your response using PatchCommander tag syntax:
- Use <FILE> tags for new files or complete file replacements
- Use <FILE> tags with xpath attribute for targeting specific elements
- Use <OPERATION> tags for file operations
Example format:
<FILE path="app/auth.py">
[code here]
</FILE>
<FILE path="app/utils.py" xpath="validate_password">
def validate_password(password):
[updated function code]
</FILE>
<FILE path="app/models.py" xpath="User.authenticate">
def authenticate(self, password):
[method code here]
</FILE>
Example Implementation
<FILE path="example.py">
class Example:
def __init__(self):
self.value = 42
def get_value(self):
return self.value
</FILE>
<FILE path="example.py" xpath="utility_function">
def utility_function(param):
return param * 2
</FILE>
<FILE path="example.py" xpath="Example.set_value">
def set_value(self, new_value):
self.value = new_value
</FILE>
<OPERATION action="move_file" source="old_name.py" target="new_name.py" />
How It Works
- Preprocessing: Tags are parsed and processed (e.g., multiple methods in a METHOD tag are split)
- Processing: Each tag is processed to generate the intended file changes using a pipeline architecture
- Confirmation: Changes are shown as diffs and require confirmation
- Application: All confirmed changes are applied together at the end
License
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file patchcommander-1.1.6.tar.gz.
File metadata
- Download URL: patchcommander-1.1.6.tar.gz
- Upload date:
- Size: 54.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.10.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b74f3354c8f51eda68215cf2d1d78a9803543797869c40c056b85c3fdb3ad34b
|
|
| MD5 |
6c9e409aa66d66f7b295c0988ac7615a
|
|
| BLAKE2b-256 |
796c964acd3c4d9b19b5403dec4dc3a154b885799704be6b0d3af4aa7b802440
|
File details
Details for the file patchcommander-1.1.6-py3-none-any.whl.
File metadata
- Download URL: patchcommander-1.1.6-py3-none-any.whl
- Upload date:
- Size: 59.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.10.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
64eaf7256e409cd009814ecb7ab1b951198c647b1efd96ed5869c90bb00a76cb
|
|
| MD5 |
d8c9b01cf4e46e630b7434e493e790ae
|
|
| BLAKE2b-256 |
948218ccf71e2e30f3e5d181098bdea1bb18d4ac9538de50dda8bec8885aecfa
|