Pack any project into a single file and feed it straight to your AI. One command, zero dependencies, local-only — your code never leaves your machine.
Know the drill: you're about to ask ChatGPT / Claude / a coding agent to "look at my repo", and you end up copy-pasting a hand-picked pile of files. ctx bundles an entire codebase into one clean markdown file — a file index plus every source file in language-tagged blocks — sized by tokens, ready to paste, save, or copy.
ctx . # -> ./<folder>.ctx.md (bundled, token-counted)
ctx src -o project.md # bundle just a subfolder
ctx --lang python go # only certain languages
ctx --clipboard # straight to your clipboard| 📦 One file, whole project | file index + every source file in clean ```lang blocks |
| 📊 Token & line counts | know exactly how much context you're sending |
| 🗂️ Smart scanning | gitignore-aware, skips node_modules, binaries, .git, etc. |
| 🎛️ Filters | --exclude, --lang, --include, --max-files |
| 📋 Clipboard | --clipboard (macOS / Linux / Windows) |
| 🌍 50+ languages | tagged automatically from extensions |
| 💸 100% free | zero dependencies, no AI, no server, no API keys |
pip install repobundlerNo dependencies. No compiled extensions. Python 3.8+.
docker pull ghcr.io/dsk-dev-ai/ctx:latest
docker run --rm -v "$PWD:/proj" -w /proj ghcr.io/dsk-dev-ai/ctx:latest statsctx [folder] # bundle into ./<folder>.ctx.md
ctx -o bundle.md # pick the output file
ctx src -o src.md # bundle a subfolder
ctx --stdout > all.txt # print to a file / pipe anywhere
ctx --clipboard # copy the bundle to your clipboard
ctx --no-header # skip the title + file index
ctx --files # just list what would be bundled
ctx --stats # files / size / language breakdown
ctx --lang python rust --lang go # restrict to certain languages
ctx -x tests -x docs # extra paths to skip (gitignore-style)
ctx --include "*.py" # only matching file globs
ctx --max-files 50 # cap how many files are includedSee ctx --help for the full list.
Example bundle output
# myapp
_14 files bundled by ctx_
## File index
- `src/main.py` (Python) — 2.1KB
- `src/util.py` (Python) — 1.4KB
- `README.md` (Markdown) — 0.8KB
---
## src/main.py
```python
import os
print("hello")
```- Scan the folder, honoring
.gitignoreand skipping repos, binaries,node_modules,.venv, etc. - Classify every file by extension into 50+ languages.
- Index them, then render into one markdown file with clean code blocks.
- Count tokens and lines so you know your context size before you send it.
python -m pytest
Tested on Python 3.8–3.12 via GitHub Actions.
Open an issue or a PR. Want a new language or a smarter layout? It's one small module in ctx/.
MIT.
If ctx saved you a copy-paste marathon, give it a star ⭐.
Prefer to support the work directly? Consider becoming a sponsor on GitHub — every bit helps keep ctx free and dependency-free.