Skip to main content

A tool for preparing your codebase for use with LLMs

Project description

LMPrep

License: MIT PyPI version PyPI - Python Version Rust Platform Support

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 .gitignore patterns 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

  1. 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
  2. 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"
  1. 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:

  1. Clone the repository
  2. 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

  1. Install Rust using rustup
  2. Clone the repository:
    git clone https://github.com/bcherb2/lmprep.git
    cd lmprep
    
  3. Build the project:
    cargo build --release
    
  4. The binary will be available at target/release/lm, copy it and add it to your PATH
  5. Create the .lmprep.yml file 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


Download files

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

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

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

lmprep-0.4.0-py3-none-win_amd64.whl (5.5 MB view details)

Uploaded Python 3Windows x86-64

lmprep-0.4.0-py3-none-manylinux2014_x86_64.whl (5.5 MB view details)

Uploaded Python 3

lmprep-0.4.0-py3-none-macosx_10_9_universal2.whl (5.5 MB view details)

Uploaded Python 3macOS 10.9+ universal2 (ARM64, x86-64)

File details

Details for the file lmprep-0.4.0-py3-none-win_amd64.whl.

File metadata

  • Download URL: lmprep-0.4.0-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

Hashes for lmprep-0.4.0-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 d815b267a6cd381bed1d8e6bd49d7780bb53dc4ed374209e808502f49974ca20
MD5 8e2b8e28755eaa0c8a6fe972a1178da5
BLAKE2b-256 d3c1fe400bbc8634f5da1a6d8de937b54439a6f843a892842564eb25520d09d2

See more details on using hashes here.

File details

Details for the file lmprep-0.4.0-py3-none-manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for lmprep-0.4.0-py3-none-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 1da4aa2fccf79996d27bbcf2a5321506d610bc4e90d6a8e2e2003922ec9fb53e
MD5 7f126c2bb8a3f79643cecfa0cf83f29a
BLAKE2b-256 cb81e4e74a92a1ba7f645c90063773eae43d8ac361d75115023b4ad77b2aae39

See more details on using hashes here.

File details

Details for the file lmprep-0.4.0-py3-none-macosx_10_9_universal2.whl.

File metadata

File hashes

Hashes for lmprep-0.4.0-py3-none-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 05a8d0b0e7ddda038eac315a4841d572855f9e9ba97826d08475590ca7577390
MD5 83f120ea3e212de6a66381a560f75da6
BLAKE2b-256 ac32fb7c25c697d5f0c744c68d087d2b22eb43c506d0aaaadf3fc47d3cf2c2c0

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