🏛️ Code Assembler Pro
Turn your codebase into structured, LLM-ready context—and rebuild it from AI suggestions.
Code Assembler Pro is a high-grade engineering utility designed to bridge the gap between your source code and Large Language Models (Claude, GPT-4o, Gemini, DeepSeek).
It doesn't just concatenate files; it generates a contextual technical document optimized for LLM ingestion, and provides a reliable rebuild engine to reconstruct projects from AI-modified Markdown files.
🎯 Why Code Assembler Pro?
Copy-pasting raw files into a chat window leads to context loss. Code Assembler Pro solves this by:
- 🗺️ Project Mapping: Automatically generates a clickable Table of Contents and architectural overview.
- ♻️ Bidirectional Workflow: Use
--rebuildto turn an AI's Markdown response back into a physical directory structure. - ⏱️ Token Efficiency: Use
--since(Delta Mode) to send only modified files, saving thousands of tokens. - ✂️ Smart Compression: Use
--compressto reduce a dependency's code to signatures + docstrings only — dramatically shrinking token count while preserving full structural context. - 🛡️ Metadata Manifest: Injects a hidden JSON manifest for 100% reliable project reconstruction and change tracking.
- 🗂️ Monorepo-Aware: Assemble every sub-project in one pass with
modules— one Markdown file each, cross-linked so an agent knows what else exists without opening it first.
✨ Key Features
- ♻️ Rebuild Mode (
--rebuild): Reconstruct an entire project from a Markdown snapshot. Perfect for applying AI-generated refactors instantly. - ⏱️ Delta Mode (
--since): Generate updates containing only files modified, added, or deleted since a previous assembly. - 🗜️ Compression Mode (
--compress): Reduce source files to structural skeletons — signatures and docstrings only. Python always works out of the box; other languages use individually installed tree-sitter packages. - 📋 Clipboard Integration (
--clip): Direct copy to system clipboard for instant ingestion into LLMs. - 🧠 Architecture Analysis: Detects design patterns (MVC, API, Testing) and provides file distribution stats.
- 📊 Token Metrics: Real-time estimation of token count to stay within model context windows.
- 📝 Enhanced Syntax Highlighting: Support for 50+ extensions including Jinja2, Terraform, and smart detection for
Dockerfile,Makefile, and.env. - 🗂️ Multi-Module Assembly (
modules): One JSON config, one output file per sub-project — each aware of the others viadepends_onand asiblingslist in its frontmatter. See Monorepo Assembly below. - 🖥️ Cross-Platform: Native support for Windows, macOS, and Linux with automatic emoji/ASCII adaptation.
🚀 Installation
Standard install (no compression)
pip install code-assembler-pro
With compression support
Python files are always supported via stdlib ast — no extra install needed.
For other languages, install the corresponding extra:
# JavaScript + TypeScript
pip install "code-assembler-pro[compress-web]"
# Rust + Go + C + C++
pip install "code-assembler-pro[compress-systems]"
# A single language
pip install "code-assembler-pro[compress-js]"
pip install "code-assembler-pro[compress-rust]"
# Everything
pip install "code-assembler-pro[compress-all]"
From source (development)
git clone https://github.com/xmehaut/code-assembler-pro.git
cd code-assembler-pro
pip install -e .
💻 Quick Start (CLI)
1. Assemble & Copy (The "One-Shot" Workflow)
Consolidate your code and copy it directly to your clipboard:
code-assembler . --ext py md --clip
2. Iterative Update (The "Token-Saver" Workflow)
Only send what changed since your last assembly:
code-assembler . --ext py --since codebase.md --clip
3. Rebuild from AI (The "Round-Trip" Workflow)
Restore a project from a Markdown file (e.g., after an AI refactor):
code-assembler --rebuild refactored_codebase.md --output-dir ./restored_project
The full loop: assemble → paste into your LLM → ask for changes → save the response → --rebuild it back into place. Every generated snapshot carries a hidden metadata manifest, so this round-trip works even weeks later.
4. Compress a Dependency (The "Skeleton" Workflow)
Generate a lightweight snapshot of a third-party package — full structure, minimal tokens:
# Your own code — full detail
code-assembler src/ --ext py --output my_package.md
# A dependency — signatures + docstrings only
code-assembler .venv/lib/some_dep/ --ext py --compress --output dep_skeleton.md
🧙 Interactive Mode
Prefer a guided setup over remembering flags? Launch the wizard — it shows its own live prompts and a full configuration summary before running, so there's nothing to memorize here:
code-assembler -i
Answer its questions once, then save them to skip the wizard on every future run:
code-assembler . --ext py md --save-config my_project.json
code-assembler --config my_project.json # reruns with no prompts — see JSON config below
Keyboard shortcuts: Enter accepts the default value · Ctrl+C cancels at any point · Ctrl+D ends a list input (paths, patterns).
FAQ
- How do I get my code back from the Markdown file?
--rebuild— it uses the hidden JSON metadata to recreate your exact folder structure (see workflow 3 above). - Does
--clipwork on Linux? Yes, but installxcliporxselfirst. Works natively on Windows and macOS. - Can I skip the wizard next time? Yes — see
--save-configabove.
📖 CLI Options Reference
| Option | Description |
|---|---|
paths |
Files or directories to analyze |
--ext / -e |
Extensions and filenames to include (e.g., py md Dockerfile) |
--output / -o |
Output file name (default: codebase.md) |
--since / -s |
Delta Mode: Only include changes since this snapshot |
--rebuild |
Reconstruct project from a Markdown file |
--output-dir |
Target directory for reconstruction |
--clip / -k |
Copy result directly to clipboard |
--dry-run |
Preview rebuild without writing files |
--compress / -z |
(v4.5) Compress to signatures + docstrings only |
--compress-level |
(v4.5) signatures (default) or docstrings_only |
--interactive / -i |
Launch the interactive wizard |
--description |
Free-text description embedded in the frontmatter |
--config / -c |
Load a JSON configuration file |
--save-config |
Save the current CLI flags to a JSON file (no wizard needed) |
--exclude / -x |
Patterns to exclude (added to defaults) |
--show-excludes |
Print the full list of default exclusion patterns |
--no-recursive |
Disable recursion into subdirectories (default: recursive) |
--no-readmes |
Disable automatic README inclusion for folder context |
--no-default-excludes |
Disable the built-in exclusion patterns entirely |
--max-size |
Maximum file size in MB (default: 10.0) |
--version |
Show version and exit |
🗜️ Compression Mode — How It Works
--compress reduces each file to its structural skeleton. The goal is to give an LLM
full context about a codebase's shape and API surface without the implementation noise.
# Original (full file) — ~80 tokens
def connect(host: str, port: int, timeout: float = 30.0) -> Connection:
"""Establish a TCP connection to the server."""
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(timeout)
sock.connect((host, port))
return Connection(sock)
# Compressed — ~15 tokens
def connect(host: str, port: int, timeout: float = 30.0) -> Connection:
"""Establish a TCP connection to the server."""
...
Language support:
| Language | Requirement |
|---|---|
| Python | ✅ Always available (stdlib ast) |
| JavaScript / JSX | pip install "code-assembler-pro[compress-js]" |
| TypeScript / TSX | pip install "code-assembler-pro[compress-ts]" |
| Rust | pip install "code-assembler-pro[compress-rust]" |
| Go | pip install "code-assembler-pro[compress-go]" |
| Java | pip install "code-assembler-pro[compress-java]" |
| C | pip install "code-assembler-pro[compress-c]" |
| C++ | pip install "code-assembler-pro[compress-cpp]" |
Missing parsers are reported at startup with the exact install command — other files are passed through unchanged.
🔌 Programmatic API
Code Assembler Pro can be integrated into your Python pipelines (CI/CD, custom AI agents).
Basic Assembly
from code_assembler import assemble_codebase
markdown = assemble_codebase(
paths=["./src"],
extensions=[".py", ".js"],
output="context.md"
)
Compressed snapshot of a dependency
markdown = assemble_codebase(
paths=[".venv/lib/requests"],
extensions=[".py"],
output="requests_skeleton.md",
compress=True,
)
Incremental Update (Delta Mode)
assemble_codebase(
paths=["./src"],
extensions=[".py"],
since="previous_snapshot.md",
output="delta_update.md"
)
Project Reconstruction
from code_assembler.rebuilder import CodebaseRebuilder
rebuilder = CodebaseRebuilder("ai_response.md", "./new_src")
rebuilder.rebuild()
Multi-module (monorepo) assembly
from code_assembler import assemble_modules
result = assemble_modules({
"extensions": [".py"],
"output": "codebase.md",
"modules": {
"shared": {"paths": ["./libs/core"]},
"api": {"paths": ["./api"], "depends_on": ["shared"]},
},
})
# result == {"succeeded": {"shared": "codebase_shared.md", "api": "codebase_api.md"},
# "failed": {}}
One bad module (bad path, permission error) doesn't abort the others — see
failed in the result and Monorepo Assembly below for the full picture.
⚙️ Advanced Configuration (JSON)
For complex or repeated setups, save your configuration to a JSON file instead of retyping flags — either by hand from the template below, or generated for you by the interactive wizard's --save-config.
{
"paths": ["./src"],
"extensions": [".py", ".md"],
"exclude_patterns": [],
"output": "codebase.md",
"description": "",
"recursive": true,
"include_readmes": true,
"use_default_excludes": true,
"max_file_size_mb": 10.0,
"truncate_large_files": true,
"truncation_limit_lines": 500,
"show_progress": true,
"compress": false,
"compress_level": "signatures"
}
Only paths and extensions are required — every other key falls back to the default shown above if omitted.
| Key | Default | Notes |
|---|---|---|
paths |
(required) | At least one path |
extensions |
(required) | At least one; exact filenames like Dockerfile/Makefile are auto-detected (capitalized, no leading dot) |
exclude_patterns |
[] |
Added to the defaults, not a replacement — see use_default_excludes |
output |
"codebase.md" |
⚠️ the JSON key is output, not output_file (the internal config field's name) |
description |
(none) | Free text embedded in the frontmatter. Omitted entirely from the frontmatter when not set — not written as null/"" |
recursive |
true |
|
include_readmes |
true |
|
use_default_excludes |
true |
false disables the built-in __pycache__, .venv, etc. patterns (run --show-excludes to see the full list) |
max_file_size_mb |
10.0 |
|
truncate_large_files |
true |
|
truncation_limit_lines |
500 |
|
show_progress |
true |
|
compress |
false |
|
compress_level |
"signatures" |
Only other value currently accepted is "docstrings_only", reserved for a future stricter mode |
Run it with:
code-assembler --config assembler_config.json
CLI flags override the JSON file, not the other way around — any flag passed alongside --config wins over the matching JSON key:
code-assembler --config base_config.json --compress --since last_snapshot.md
Handy for keeping one stable base config and only varying what changes per run. Note that --since is never a JSON key itself — delta mode always comes from this flag, config file or not.
🗂️ Monorepo Assembly (modules)
For a repo with several independent sub-projects, modules assembles all of
them in one pass — one output file each, instead of one invocation per
sub-project run by hand. JSON-only — there's no --modules flag, since
this describes a structure, not a one-shot command.
{
"extensions": [".py"],
"output": "codebase.md",
"modules": {
"shared": { "paths": ["./libs/core", "./libs/utils"] },
"api": { "paths": ["./api"], "depends_on": ["shared"],
"description": "REST API — auth, billing, webhooks" },
"frontend": { "paths": ["./frontend"], "extensions": [".ts", ".tsx"],
"depends_on": ["shared"],
"description": "React SPA consuming the API" }
}
}
code-assembler --config monorepo.json
- Every root-level key (
extensions,compress,description, …) is each module's default; a module's own key replaces it entirely — no merging, so a module needing the root'sexclude_patternsplus its own must repeat them. - Output filenames are derived from the root
output:codebase.md→codebase_api.md,codebase_frontend.md,codebase_shared.md. Set a module's own"output"to override. depends_onis a list of other module names, purely declarative (no import analysis) — validated when the config loads: an unknown name or a module depending on itself fails immediately, before anything is written.- Every module's frontmatter gets a
siblingslist — the other modules' file name, description, and token count — so an agent can decide what else to open without opening it first:module: api depends_on: [shared] siblings: - { module: frontend, file: codebase_frontend.md, description: "React SPA consuming the API", tokens: 42000 } - { module: shared, file: codebase_shared.md, description: "", tokens: 8500 }
- One bad module (bad path, permission error) doesn't abort the batch — the
rest still get built, and the failure is reported:
✅ shared -> codebase_shared.md ✅ api -> codebase_api.md ❌ frontend: path(s) not found: ./frontend 🚀 2/3 module(s) assembled --sinceand CLI overrides (--compress,--description, …) aren't supported alongside amodulesconfig — there's no single snapshot to diff against N independent outputs, and no single module to apply an override to. Set these inside the JSON itself, at the root or per module.- Each module's
.mdfile is a complete, independent snapshot —--rebuildworks on any one of them exactly as it would on a single-project file.
🤝 Contributing
Contributions are welcome!
- Fork the Project.
- Create your Feature Branch (
git checkout -b feature/AmazingFeature). - Commit your Changes (
git commit -m 'Add some AmazingFeature'). - Push to the Branch.
- Open a Pull Request.
📄 License
Distributed under the MIT License. See LICENSE for more information.
Code Assembler Pro — Give your AI the context it deserves, then take the code back. 🚀
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file code_assembler_pro-4.7.1.tar.gz.
File metadata
- Download URL: code_assembler_pro-4.7.1.tar.gz
- Upload date:
- Size: 78.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/6.2.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fcb9abf662e51d070887335fa6e30f8496776944203e2d104755ca2d7c435613
|
|
| MD5 |
bfee465fc5ed0a63edc179d2428ee974
|
|
| BLAKE2b-256 |
275435b880ffbcc0743b81c6b177b69cd8f2524c1343f8ec123cee655f59e0d9
|
File details
Details for the file code_assembler_pro-4.7.1-py3-none-any.whl.
File metadata
- Download URL: code_assembler_pro-4.7.1-py3-none-any.whl
- Upload date:
- Size: 51.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/6.2.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b3999e1b5caee282a70efa6dd1eede4f3eb85c9b2fab0df73d8b3c65d18343c5
|
|
| MD5 |
79dfe402d3653f96bfafb82a1c3955c4
|
|
| BLAKE2b-256 |
45e307e1a53db74da85cfa4cb7a41c9e3a1ddc089926b3aa4cd130efb83b0a9f
|