Repomix: đóng gói codebase cho LLM
Repomix là công cụ dòng lệnh gộp toàn bộ một repository thành một file XML, Markdown, JSON hoặc plain-text duy nhất, để bạn đưa cả codebase vào context window của LLM thay vì copy-paste từng file. Luồng làm việc cốt lõi chỉ là một lệnh, không cần cấu hình, và --compress dùng Tree-sitter để thu nhỏ repo lớn thay vì tự chọn file. Đáng dùng khi review hay refactor toàn repo bằng AI là việc thường xuyên; dán một file nhỏ thì copy-paste vẫn nhanh hơn.
Repomix làm gì
Repomix là một CLI viết bằng Node.js, có sẵn bản Docker image, quét một thư mục cục bộ hoặc một GitHub repository từ xa rồi gộp mọi file khớp vào một file đầu ra định dạng sẵn cho AI. Nó viết header hướng dẫn AI và cây thư mục, rồi đến nội dung từng file, bọc trong thẻ XML, tiêu đề Markdown, key JSON, hoặc dấu phân cách plain-text tùy cờ --style. Nó cũng đếm token từng file để bạn biết trước output chiếm bao nhiêu context window.
Các tính năng cốt lõi giúp codebase sẵn sàng cho AI
- ✓Lọc file theo git: tự động tôn trọng .gitignore, .ignore và file .repomixignore riêng, nên build output hay node_modules không bao giờ lọt vào file đã đóng gói.
- ✓Tích hợp Secretlint: quét từng file theo các định dạng credential đã biết trước khi đóng gói và loại bỏ file khớp, giúp chặn API key hay token lọt vào prompt.
- ✓Nén bằng Tree-sitter: cờ --compress trích xuất chữ ký hàm và class thay vì toàn bộ thân hàm, giảm số token mà vẫn giữ được cấu trúc code dễ đọc.
- ✓Đếm token theo từng file và tổng thể ở mỗi lần chạy, để bạn biết trước khi dán liệu output có vừa context window của model hay không.
- ✓Bốn định dạng đầu ra chọn bằng --style: XML (mặc định), Markdown, JSON và plain text, mỗi định dạng đều có phần tóm tắt file, cây thư mục và nội dung file.
- ✓Đóng gói repo từ xa: trỏ --remote vào một URL GitHub, cú pháp rút gọn owner/repo, hoặc một branch/commit cụ thể, Repomix tự clone và đóng gói mà bạn không cần clone trước.
Cài đặt Repomix
Cách nhanh nhất để thử Repomix là không cần cài gì cả: chạy `npx repomix@latest` trong thư mục project, nó sẽ đóng gói thư mục hiện tại thành file repomix-output.xml. Nếu dùng thường xuyên, cài global bằng `npm install -g repomix`, hoặc thay bằng yarn (`yarn global add repomix`), bun (`bun add -g repomix`), hay Homebrew (`brew install repomix`) trên macOS/Linux, sau đó chỉ cần gõ `repomix`. Nếu không muốn cài cả toolchain Node, Docker image cũng làm y hệt: `docker run -v .:/app -it --rm ghcr.io/yamadashy/repomix` mount thư mục hiện tại và đóng gói ngay trong container. Ngoài ra còn có bản web tại repomix.com nếu bạn chỉ muốn dán URL repo và tải output về, cùng extension Chrome/Firefox thêm nút Repomix vào trang GitHub repo, và một extension VS Code cộng đồng tên Repomix Runner.
Đóng gói repository cục bộ và từ xa
Chạy `repomix` không kèm tham số sẽ đóng gói toàn bộ thư mục hiện tại; `repomix path/to/directory` thu hẹp về một thư mục, còn `--include "src/**/*.ts,**/*.md"` hoặc `--ignore "**/*.log,tmp/"` thu hẹp thêm bằng glob pattern. Để đóng gói một project không phải của bạn mà không cần clone, `--remote` nhận một URL GitHub đầy đủ hoặc cú pháp rút gọn owner/repo, và `--remote-branch` ghim vào tên branch, tag, hoặc commit hash. `--stdin` đọc danh sách đường dẫn file từ standard input, nên bạn có thể pipe kết quả của `git ls-files`, `rg --files`, hay một lượt chọn bằng `fzf` thẳng vào Repomix thay vì tự gõ include pattern. `--include-logs` thêm lịch sử commit git (mặc định 50 commit, hoặc tùy chỉnh bằng `--include-logs-count`) để có ngữ cảnh code đã tiến hóa ra sao, còn `--compress` chạy bước Tree-sitter để thu nhỏ repo lớn. Chạy `repomix --init` sẽ tạo file repomix.config.json để bạn không phải gõ lại flag mỗi lần.
Điểm mạnh
- ✓Một lệnh duy nhất, không cần cấu hình bắt buộc, là đủ để đi từ repo đến file đã đóng gói — `npx repomix@latest` không cần cài gì trước.
- ✓Tôn trọng git theo mặc định: .gitignore, .ignore và .repomixignore được áp dụng tự động, khỏi phải tự chọn tay để loại bỏ build artifact.
- ✓Bốn định dạng output có thể hoán đổi cho nhau (XML, Markdown, JSON, plain text) nghĩa là file đóng gói khớp với bất kỳ LLM hay script downstream nào đang cần.
- ✓Quét Secretlint và bước nén Tree-sitter đều chạy sẵn trong luồng bình thường, không phải bước phụ bạn phải nhớ bật.
Bảo mật: Repomix bảo vệ gì và không bảo vệ gì
- △Secretlint chỉ bắt các mẫu credential đã biết trước, không phải mọi dữ liệu nhạy cảm — một password hardcode ở định dạng lạ hay comment chứa thông tin nhạy cảm vẫn có thể lọt qua, nên vẫn cần tự xem lại output trước khi gửi đi.
- △Đóng gói chỉ là chọn file cục bộ, không phải một lớp kiểm soát quyền truy cập: nếu bạn đọc được file của một repo riêng tư, Repomix sẽ đưa chúng vào output, nghĩa là ai nhận file đã đóng gói cũng nhận toàn bộ nội dung đó.
- △Cờ --compress giữ cấu trúc chứ không giữ toàn bộ logic, nên bản nén hợp để hỏi về kiến trúc chứ không hợp cho một review bảo mật cần thấy từng dòng trong thân hàm.
- △Extension trình duyệt và extension VS Code (Repomix Runner) là các dự án tách riêng khỏi CLI lõi, và bản VS Code được ghi rõ là do cộng đồng duy trì chứ không phải đội ngũ chính.
Gitingest và các công cụ tương tự
Câu hỏi thường gặp
Có, Repomix miễn phí và mã nguồn mở, phát hành theo giấy phép MIT, nên bạn có thể dùng, chỉnh sửa và phân phối lại mà không phải trả phí.
Repomix chạy Secretlint trên từng file trước khi đóng gói và loại bỏ file khớp với các định dạng credential đã biết, nên API key hay token phổ biến không bị lọt vào output sẵn sàng cho AI.
Không được nêu rõ — README chỉ cho thấy --remote đóng gói URL GitHub công khai và cú pháp rút gọn, chứ không mô tả cách xác thực vào repository riêng tư, nên hãy coi việc hỗ trợ private repo là chưa được xác nhận.
Repomix hỗ trợ bốn định dạng output chọn bằng cờ --style: XML (mặc định), Markdown, JSON và plain text, mỗi định dạng đều tổ chức thành phần tóm tắt file, cấu trúc thư mục và nội dung file.
Repomix báo số token cho từng file và cho toàn bộ output đã đóng gói, còn cờ --compress dùng Tree-sitter để rút gọn codebase lớn xuống còn chữ ký hàm và class, giúp vừa với context window của LLM.
Có, Repomix cung cấp sẵn Docker image tại ghcr.io/yamadashy/repomix; chạy `docker run -v .:/app -it --rm ghcr.io/yamadashy/repomix` sẽ mount thư mục hiện tại và đóng gói mà không cần cài Node.js cục bộ.
Vấn đề mà Repomix giải quyết
Đưa một codebase vào LLM thường có nghĩa là mở từng file một rồi dán vào cửa sổ chat, cách này gãy ngay khi câu hỏi trải rộng qua nhiều file và tốn context vào việc model phải tự xử lý các định dạng dán không đồng nhất. Repomix nhắm đúng điểm nghẽn đó: nó biến cả một repo, kể cả một GitHub repo từ xa qua `--remote` mà bạn còn chưa clone, thành một file có cấu trúc nhất quán kèm cây thư mục và số token, để model nhận được toàn cảnh chỉ trong một lần dán.
Các trường hợp sử dụng tốt nhất
- •Lấy nhanh một bản review kiến trúc cho một repo bạn vừa tiếp quản, bằng cách đóng gói toàn bộ rồi nhờ LLM tóm tắt cấu trúc và chỉ ra chỗ rủi ro.
- •Tạo README hay tài liệu onboarding cho một project sẵn có dựa trên code thật, thay vì viết theo trí nhớ.
- •Review một repo mã nguồn mở từ xa trước khi phụ thuộc vào nó, dùng --remote để đóng gói một URL GitHub mà không cần clone về máy.
- •Đưa lịch sử commit qua --include-logs kèm theo code để LLM suy luận được một bug hay pattern đã tiến hóa ra sao, chứ không chỉ thấy trạng thái hiện tại.
- •Đóng gói một repo lớn bằng --compress khi tập file gốc sẽ vượt quá context window của model.
Ai nên dùng — và ai nên bỏ qua
Hãy thử Repomix nếu bạn thường xuyên nhờ LLM suy luận về cả một project — refactor, review kiến trúc, viết tài liệu onboarding — và đã chán việc tự tay gom context từ từng file; CLI, Docker image và bản web repomix.com đều làm cùng một việc đóng gói, nên chọn cái nào hợp workflow của bạn. Bỏ qua nếu bạn chỉ từng dán một, hai file mỗi lần, vì phần cài đặt và các flag không mang lại lợi ích gì hơn copy file trực tiếp; các repo data-science thiên về Python cũng được README của chính Repomix khuyên nên dùng Gitingest thay thế.
Repo liên quan
Chưa chắc repomix có hợp với bạn?
Để ChatGPT, Claude hoặc Perplexity tìm hiểu giúp — bấm bên dưới và xem AI nói gì về repomix.
