  docs for lmcat v0.0.1

Contents

lmcat

A Python tool for concatenating files and directory structures into a
single document, perfect for sharing code with language models. It
respects .gitignore and .lmignore patterns and provides configurable
output formatting.

Features

-   Creates a tree view of your directory structure
-   Includes file contents with clear delimiters
-   Respects .gitignore patterns (can be disabled)
-   Supports custom ignore patterns via .lmignore
-   Configurable via pyproject.toml, lmcat.toml, or lmcat.json
-   Python 3.11+ native, with fallback support for older versions

Installation

Install from PyPI:

    pip install lmcat

Usage

Basic usage - concatenate current directory:

    python -m lmcat

The output will include a directory tree and the contents of each
non-ignored file.

Command Line Options

-   -g, --no-include-gitignore: Ignore .gitignore files (they are
    included by default)
-   -t, --tree-only: Only print the directory tree, not file contents
-   -o, --output: Specify an output file (defaults to stdout)
-   -h, --help: Show help message

Configuration

lmcat can be configured using any of these files (in order of
precedence):

1.  pyproject.toml (under [tool.lmcat])
2.  lmcat.toml
3.  lmcat.json

Configuration options:

    [tool.lmcat]
    tree_divider = "│   "    # Used for vertical lines in the tree
    indent = "    "          # Used for indentation
    file_divider = "├── "    # Used for file/directory entries
    content_divider = "``````" # Used to delimit file contents
    include_gitignore = true # Whether to respect .gitignore files
    tree_only = false       # Whether to only show the tree

Ignore Patterns

lmcat supports two types of ignore files:

1.  .gitignore - Standard Git ignore patterns (used by default)
2.  .lmignore - Custom ignore patterns specific to lmcat

.lmignore follows the same pattern syntax as .gitignore. Patterns in
.lmignore take precedence over .gitignore.

Example .lmignore:

    # Ignore all .log files
    *.log

    # Ignore the build directory and its contents
    build/

    # Un-ignore a specific file (overrides previous patterns)
    !important.log

Development

Setup

1.  Clone the repository:

    git clone https://github.com/mivanit/lmcat
    cd lmcat

2.  Set up the development environment:

    make setup

This will: - Create a virtual environment - Install development
dependencies - Set up pre-commit hooks

Development Commands

The project uses make for common development tasks:

-   make dep: Install/update dependencies
-   make format: Format code using ruff and pycln
-   make test: Run tests
-   make typing: Run type checks
-   make check: Run all checks (format, test, typing)
-   make clean: Clean temporary files
-   make docs: Generate documentation
-   make build: Build the package
-   make publish: Publish to PyPI (maintainers only)

Run make help to see all available commands.

Running Tests

    make test

For verbose output:

    VERBOSE=1 make test

For test coverage:

    make cov

Roadmap

-   better tests, I feel like gitignore/lmignore interaction is broken
-   llm summarization and caching of those summaries in .lmsummary/
-   reasonable defaults for file extensions to ignore
-   web interface

API Documentation

-   main

View Source on GitHub

lmcat

lmcat

A Python tool for concatenating files and directory structures into a
single document, perfect for sharing code with language models. It
respects .gitignore and .lmignore patterns and provides configurable
output formatting.

Features

-   Creates a tree view of your directory structure
-   Includes file contents with clear delimiters
-   Respects .gitignore patterns (can be disabled)
-   Supports custom ignore patterns via .lmignore
-   Configurable via pyproject.toml, lmcat.toml, or lmcat.json
-   Python 3.11+ native, with fallback support for older versions

Installation

Install from PyPI:

    pip install lmcat

Usage

Basic usage - concatenate current directory:

    python -m lmcat

The output will include a directory tree and the contents of each
non-ignored file.

Command Line Options

-   -g, --no-include-gitignore: Ignore .gitignore files (they are
    included by default)
-   -t, --tree-only: Only print the directory tree, not file contents
-   -o, --output: Specify an output file (defaults to stdout)
-   -h, --help: Show help message

Configuration

lmcat can be configured using any of these files (in order of
precedence):

1.  pyproject.toml (under [tool.lmcat])
2.  lmcat.toml
3.  lmcat.json

Configuration options:

    [tool.lmcat]
    tree_divider = "│   "    # Used for vertical lines in the tree
    indent = "    "          # Used for indentation
    file_divider = "├── "    # Used for file/directory entries
    content_divider = "``````" # Used to delimit file contents
    include_gitignore = true # Whether to respect .gitignore files
    tree_only = false       # Whether to only show the tree

Ignore Patterns

lmcat supports two types of ignore files:

1.  .gitignore - Standard Git ignore patterns (used by default)
2.  .lmignore - Custom ignore patterns specific to lmcat

.lmignore follows the same pattern syntax as .gitignore. Patterns in
.lmignore take precedence over .gitignore.

Example .lmignore:

    ### Ignore all .log files
    *.log

    ### Ignore the build directory and its contents
    build/

    ### Un-ignore a specific file (overrides previous patterns)
    !important.log

Development

Setup

1.  Clone the repository:

    git clone https://github.com/mivanit/lmcat
    cd lmcat

2.  Set up the development environment:

    make setup

This will: - Create a virtual environment - Install development
dependencies - Set up pre-commit hooks

Development Commands

The project uses make for common development tasks:

-   make dep: Install/update dependencies
-   make format: Format code using ruff and pycln
-   make test: Run tests
-   make typing: Run type checks
-   make check: Run all checks (format, test, typing)
-   make clean: Clean temporary files
-   make docs: Generate documentation
-   make build: Build the package
-   make publish: Publish to PyPI (maintainers only)

Run make help to see all available commands.

Running Tests

    make test

For verbose output:

    VERBOSE=1 make test

For test coverage:

    make cov

Roadmap

-   better tests, I feel like gitignore/lmignore interaction is broken
-   llm summarization and caching of those summaries in .lmsummary/
-   reasonable defaults for file extensions to ignore
-   web interface

View Source on GitHub

def main

    () -> None

View Source on GitHub

Main entry point for the script
