A tool for preparing your codebase for use with LLMs
Project description
LMPrep
A lightning-fast utility for preparing and organizing your code for use with LLMs like Claude Projects. LMPrep will collect and rename all of your project files to a flat directory, but preserving the structure within the filenames.
For example, a file at src/models/user.py will be renamed to src^models^user.py in the output directory. Be sure to tell the LLM that your files are structured this way!
https://github.com/user-attachments/assets/27d49b03-76a0-4742-9883-e361b73bc10e
Features
- Smart File Organization: Automatically flattens complex directory structures while preserving path information in the filenames and in a file tree
- Configurable Filtering: Specify which file extensions to include in your dataset to limit context size
- Path Preservation: Uses customizable delimiters to maintain original path information in filenames
- Git-Aware: Respects
.gitignorepatterns to exclude unwanted files or secrets - Flexible Output: Generate individual files or create a zip archive
- Visual Tree View: Visualize your source and output file structure, or send the file tree to the LLM
- Fast & Efficient: Written in Rust for maximum performance
Quick Start
Installation
The easiest way to install LMPrep is to get it from PyPi:
pip install lmprep
wheels are built for Windows, Linux, and MacOS.
Manaul / Install Script
-
Download the latest release for your platform from Releases:
- Windows:
lm-x86_64-pc-windows-msvc.zip - Linux:
lm-x86_64-unknown-linux-gnu.tar.gz - macOS:
lm-x86_64-apple-darwin.tar.gz
- Windows:
-
Install the binary:
Linux/macOS:
# Extract and copy binary
tar xzf lm-x86_64-*-*.tar.gz
sudo mv lm /usr/local/bin/
# Create config file
curl -O https://raw.githubusercontent.com/bcherb2/lmprep/main/src/config-example.yaml
mv config-example.yaml ~/.lmprep.yml
Windows (in PowerShell, run as Administrator):
# Extract and copy binary
Expand-Archive lm-x86_64-pc-windows-msvc.zip
New-Item -ItemType Directory -Force -Path "C:\Program Files\lmprep"
Move-Item -Force lm.exe "C:\Program Files\lmprep\lm.exe"
$env:Path += ";C:\Program Files\lmprep"
# Create config file
Invoke-WebRequest -Uri "https://raw.githubusercontent.com/bcherb2/lmprep/main/src/config-example.yaml" -OutFile "$env:USERPROFILE\.lmprep.yml"
- Verify installation:
lm --help
Alternative: Build from Source
If you have Rust installed, you can build from source:
git clone https://github.com/bcherb2/lmprep
cd lmprep
cargo build --release
The binary will be in target/release/lm (or lm.exe on Windows). Follow step 2 above to set up the config file.
Basic Usage
# Create a default config file in the current directory
lm --init-config
# Organize files in current directory
lm .
# Organize files from a specific directory
lm /path/to/source
# Use a custom config file
lm . -c /path/to/.lmprep.yml
# Create a zip archive instead of of individual files
lm . --zip
Configuration
Create a .lmprep.yml file in your home directory to customize behavior, or create one in your project root directory. Here's an example:
allowed_extensions:
- py
- rs
- md
- txt
ignored_directories:
- node_modules
delimiter: "^"
subfolder: context
zip: false
tree: true
respect_gitignore: true
NOTE: The install script will create a default config file at
~/.lmprep.yml
Configuration Options
| Option | Description | Default |
|---|---|---|
allowed_extensions |
File extensions to include | [] (common extensions) |
ignored_directories |
Directories to ignore | [] (common directories) |
delimiter |
Character used to represent path hierarchy | ^ |
subfolder |
Output directory name within project | context |
zip |
Create zip archive instead of files | false |
tree |
Show file tree visualization | true |
respect_gitignore |
Honor .gitignore patterns | true |
Command Line Options
lm [OPTIONS] [SOURCE]
Arguments:
[SOURCE] Source directory to organize files from [default: .]
Options:
-c, --config <FILE> Path to config file
-s, --subfolder <NAME> Override the subfolder name from config
-z, --zip Create a zip file instead of individual files
-t, --tree Show file tree of source and output
-v, --verbose Show more detailed output during processing
--init-config Create a default config file in the current directory
-h, --help Print help
-V, --version Print version
Development
To set up for development:
- Clone the repository
- Run
./dev-setup.sh
This will build the Rust binary, set up the correct directory structure, and install the package in development mode.
When you make changes to the Rust code, run ./dev-setup.sh again to rebuild and reinstall.
Python changes will be picked up automatically due to the development install.
Use Cases
- Code Analysis: Organize your code into a flat structure while preserving context (works especially well with Claude Projects)
- Document Processing: Organize and prepare document collections for processing, logs, etc.
- Version Control: Easily create clean snapshots of your codebase for archival in zip format
Building from Source
- Install Rust using rustup
- Clone the repository:
git clone https://github.com/bcherb2/lmprep.git cd lmprep
- Build the project:
cargo build --release
- The binary will be available at
target/release/lm, copy it and add it to your PATH - Create the
.lmprep.ymlfile in your home directory or project root
NOTE: see install/BUILD.md for more in depth building instructions.
FAQ
Q: Why use LMPrep instead of just copying files? A: LMPrep preserves directory structure information in filenames, making it easier for LLMs to understand file relationships and context. Sure, you can do this manually, but it gets tedious.
Q: How does path flattening work?
A: A file at src/models/user.py becomes src^models^user.py in the output directory (using default delimiter). Changing the delimiter to + would result in src+models+user.py.
Q: Can I exclude certain files or directories?
A: Yes! LMPrep respects .gitignore patterns and allows you to specify allowed file extensions.
Q: Is it safe to use on large directories? A: Yes! LMPrep is written in Rust for performance and memory efficiency, making it suitable for large datasets.
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
License
This project is licensed under the MIT License - see the LICENSE file for details.
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 Distributions
Built Distributions
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 lmprep-0.4.1-py3-none-win_amd64.whl.
File metadata
- Download URL: lmprep-0.4.1-py3-none-win_amd64.whl
- Upload date:
- Size: 5.5 MB
- Tags: Python 3, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.0.1 CPython/3.12.8
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ed33bd89df2cdcfe3a54097b8524d72d606215b3971a06b9b36c3f133f65692f
|
|
| MD5 |
8114a9351aa2b891388f950ff4debbe4
|
|
| BLAKE2b-256 |
85330d15fa35dfa1e8f7c6fbed69fb0f9f6e613e74031603d16790e0f346e88d
|
File details
Details for the file lmprep-0.4.1-py3-none-manylinux2014_x86_64.whl.
File metadata
- Download URL: lmprep-0.4.1-py3-none-manylinux2014_x86_64.whl
- Upload date:
- Size: 5.5 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.0.1 CPython/3.12.8
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
85ea9bc41a30c305c56b30e7e391ebcb361f6fb35b419d6f4025947353f0d09f
|
|
| MD5 |
47d63cce556f206260638f181926cf15
|
|
| BLAKE2b-256 |
c8074e50749ac0f0bf64dace19b272db593fe900e4aabc9f23cbd5c300aa7c5f
|
File details
Details for the file lmprep-0.4.1-py3-none-macosx_10_9_universal2.whl.
File metadata
- Download URL: lmprep-0.4.1-py3-none-macosx_10_9_universal2.whl
- Upload date:
- Size: 5.5 MB
- Tags: Python 3, macOS 10.9+ universal2 (ARM64, x86-64)
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.0.1 CPython/3.12.8
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0466b327d3af58e3a5c8c859a588d92a9527483047f9641d25353b7edb893592
|
|
| MD5 |
a48f070be99a237289fb8ffb66984cd7
|
|
| BLAKE2b-256 |
3af1afc4226ade1f3c08d520f5208861d47586788c7c95e24a9b62dc8fef4235
|