Pack your codebase into a single file for AI analysis
Combine all your project files into one file — perfect for sending to LLMs (ChatGPT, Claude, Copilot, Deepseek, etc.).
- 🪶 Only 1 dependency – runs anywhere Python 3.8+ is available.
- ⚡ Streaming engine – packs huge codebases without eating RAM.
- 🔐 Secrets masking built-in – no more leaked tokens in LLM chats.
- 📂 Full directory tree + file contents in one clean text/markdown.
- 🧪 Tested, typed, actively maintained.
- 📁 Recursive scanning – walks through all files in a directory.
- 💾 Streaming output – minimal memory usage even on huge codebases.
- 🚫 Respects .gitignore – optionally disable with
--no-gitignore. - 🔗 Skips symlinks by default – opt in with
--follow-symlinks. - 🌳 Tree structure – displays project hierarchy.
- 📄 Embedded content – each file is shown with its path header.
- 🔐 Secrets masking – hides passwords, tokens, keys (
--mask-secrets). - 🖨️ Two output formats – plain text (
txt) or Markdown (md). - 💾 Save to file – use
-o output.txt.
pip install pilepackFrom source:
git clone https://github.com/dartmew/pilepack.git
cd pilepack
pip install -e .Basic command – pass a path to your project:
pilepack /path/to/your/projectRedirect output to a file:
pilepack . > report.txtExample output (txt)
myproject
├── main.py
├── utils/
│ ├── helpers.py
│ └── __init__.py
└── README.md
================================================================================
--- FILE: main.py ---
import utils.helpers
def main():
print("Hello")
--- FILE: utils/helpers.py ---
def greet(name):
return f"Hi {name}"
Markdown format
pilepack . -f md -o report.mdProduces a Markdown file with syntax highlighting.
Show only structure (no file contents)
pilepack . --no-contentMask secrets
pilepack . --mask-secretsReplaces values of password=, api_key=, token=, and long strings (base64/hex) with ***.
Disable .gitignore
pilepack . --no-gitignoreFollow symbolic links explicitly
pilepack . --follow-symlinks| Option | Description |
|---|---|
root |
Directory to scan (default: current directory) |
--no-content |
Show tree structure only, skip file contents |
--mask-secrets |
Mask passwords, tokens, API keys |
-o, --output |
Write report to a file instead of stdout |
--no-gitignore |
Do not respect .gitignore (include all files) |
--follow-symlinks |
Follow symbolic links during scanning |
-f, --format |
Output format: txt (default) or md |
Install test dependencies and run:
pip install -e .[test]
pytestWith coverage:
pytest --cov=pilepackCurrent coverage: 84% (20 tests, all passing).
Name Stmts Miss Cover
-------------------------------------------
pilepack\__init__.py 0 0 100%
pilepack\__main__.py 3 3 0%
pilepack\cli.py 53 5 91%
pilepack\collector.py 32 2 94%
pilepack\formatter.py 39 2 95%
pilepack\ignorer.py 21 3 86%
pilepack\reader.py 31 12 61%
-------------------------------------------
TOTAL 179 27 85%MIT © 2026 Vasili S. Pribylov
Issues and pull requests are welcome! For major changes, please open an issue first to discuss.
Feel free to open an issue for bugs, questions, or suggestions. I'll try to respond within a few days.
This project is actively maintained (as of 2026).
Inspired by the need to easily feed code into large language models.