Skip to content

Repository files navigation

zero deps python pypi version CI MIT Docker GHCR

ctx 🧳

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

✨ Features

📦 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

🔧 Install

pip install repobundler

No dependencies. No compiled extensions. Python 3.8+.

🐳 Docker

docker pull ghcr.io/dsk-dev-ai/ctx:latest
docker run --rm -v "$PWD:/proj" -w /proj ghcr.io/dsk-dev-ai/ctx:latest stats

🚀 Usage

ctx [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 included

See 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")
    ```

🧠 How it works

  1. Scan the folder, honoring .gitignore and skipping repos, binaries, node_modules, .venv, etc.
  2. Classify every file by extension into 50+ languages.
  3. Index them, then render into one markdown file with clean code blocks.
  4. Count tokens and lines so you know your context size before you send it.

🧪 Tests

python -m pytest

Tested on Python 3.8–3.12 via GitHub Actions.

🤝 Contributing

Open an issue or a PR. Want a new language or a smarter layout? It's one small module in ctx/.

📄 License

MIT.

⭐ Support

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.

About

Pack any project into a single file for your AI/LLM context. Zero dependencies.

Topics

Resources

Code of conduct

Contributing

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages