context-mode: giữ Claude Code khỏi đầy context, tác giả báo giảm 98% output tool
Một snapshot Playwright ngốn 56 KB, 20 issue GitHub tốn 59 KB. context-mode (26k sao) nhốt dữ liệu thô vào sandbox và giữ trí nhớ phiên làm việc cho agent. Hướng dẫn cài, tự đo mức tiết kiệm và cách gỡ.
Một snapshot Playwright tốn 56 KB. Hai mươi issue GitHub tốn 59 KB. Một file access log tốn 45 KB. Theo README của context-mode, chỉ sau khoảng 30 phút làm việc, khoảng 40% context window đã biến mất.
context-mode (repo mksglu/context-mode, TypeScript, hơn 26.800 sao, đang lên GitHub Trending) là một MCP server nhắm vào đúng vấn đề này. Bài viết giải thích nó làm gì, cách cài trên Claude Code, cách tự đo hiệu quả, cách gỡ nếu không hợp và những điều cần dè chừng.
Vấn đề: context bị bào mòn từ nhiều phía
Theo README, vấn đề có ba lớp:
Dữ liệu thô chiếm chỗ. Mỗi lần gọi MCP tool (MCP là giao thức để agent kết nối với công cụ bên ngoài), kết quả được đổ thẳng vào context window.
Nén xong là quên. Khi agent nén (compact) cuộc trò chuyện để lấy lại chỗ trống, nó quên file đang sửa dở, việc đang làm và yêu cầu gần nhất của bạn.
Output cũng tốn token. Agent còn phí token cho câu đệm, lời xã giao và giải thích dài dòng. README mô tả đây là việc "đốt" context từ cả hai phía.
context-mode xử lý thế nào
Tác giả chia giải pháp thành bốn mảng.
1. Cô lập output trong sandbox. Dữ liệu thô nằm ngoài context, agent chỉ nhận phần kết quả đã rút gọn. Ví dụ tác giả đưa ra: 315 KB còn 5.4 KB, tức giảm 98%. Đây là số liệu do chính tác giả công bố, chưa có kiểm chứng độc lập.
2. Giữ liên tục phiên làm việc. Mỗi lần sửa file, thao tác git, task, lỗi và quyết định của bạn được ghi vào SQLite. Khi cuộc trò chuyện bị nén, công cụ không đổ lại toàn bộ dữ liệu này vào context. Nó lập chỉ mục bằng FTS5 (tìm kiếm toàn văn của SQLite) và chỉ lấy phần liên quan bằng BM25 (thuật toán xếp hạng kết quả tìm kiếm theo từ khóa). Nhờ vậy model biết mình đang làm đến đâu.
Một chi tiết về dữ liệu cần nhớ: nếu bạn không dùng --continue, dữ liệu phiên trước bị xóa ngay. Phiên mới là một tờ giấy trắng. Với Claude Code, claude --continue là cách khởi động để tiếp tục cuộc trò chuyện gần nhất trong thư mục hiện tại.
3. "Think in Code". Thay vì cho agent đọc 50 file rồi tự đếm hàm, hãy để nó viết một đoạn script làm việc đó và chỉ console.log() kết quả. README minh họa: 47 lần Read() tốn khoảng 700 KB, còn 1 lần ctxexecute() chỉ tốn 3.6 KB.
js
ctxexecute("javascript",
const files = fs.readdirSync('src').filter(f => f.endsWith('.ts'));
files.forEach(f => console.log(f + ': ' + fs.readFileSync('src/'+f,'utf8').split('\\n').length + ' lines'));
);
Nói đơn giản: đừng bắt LLM làm việc của một chiếc máy tính bỏ túi, hãy bắt nó viết chương trình rồi để máy chạy.
4. Không ép cách model viết câu trả lời. Với vế output, tác giả chọn không can thiệp. Công cụ chỉ quản lý dữ liệu đi đâu, không bắt model trả lời ngắn hay dài. README dẫn một issue về kimi-k2.5 của Moonshot AI để lập luận rằng các prompt ép ngắn gọn quá mức có thể làm giảm điểm benchmark lập trình và suy luận. Bạn vẫn tự chỉnh phong cách qua CLAUDE.md hoặc AGENTS.md.
Cài đặt trên Claude Code
Yêu cầu: Claude Code v1.0.33 trở lên. Kiểm tra bằng claude --version. Nếu lệnh /plugin không được nhận ra, hãy cập nhật bằng brew upgrade claude-code hoặc npm update -g @anthropic-ai/claude-code.
Các bước:
Thêm marketplace:
bash
/plugin marketplace add mksglu/context-mode
Cài plugin:
bash
/plugin install context-mode@context-mode
Khởi động lại Claude Code (hoặc chạy /reload-plugins).
Kiểm tra:
/context-mode:ctx-doctor
Tất cả mục phải hiện [x]. Lệnh này kiểm tra runtime, hook, FTS5 và việc đăng ký plugin.
Phần định tuyến (routing) là tự động. Hook SessionStart chèn hướng dẫn lúc chạy, không ghi file nào vào dự án của bạn. Plugin đăng ký các hook PreToolUse, PostToolUse, UserPromptSubmit, PreCompact, SessionStart, Stop và 11 MCP tool: sáu tool sandbox (ctxbatchexecute, ctxexecute, ctxexecutefile, ctxindex, ctxsearch, ctxfetchandindex) cùng năm tool phụ trợ (ctxstats, ctxdoctor, ctxupgrade, ctxpurge, ctxinsight).
Các lệnh hay dùng
| Lệnh | Công dụng |
|---|---|
| /context-mode:ctx-stats | Mức tiết kiệm theo từng tool, số token đã dùng, tỷ lệ tiết kiệm |
| /context-mode:ctx-doctor | Chẩn đoán runtime, hook, FTS5, plugin, phiên bản |
| /context-mode:ctx-index | Lập chỉ mục file hoặc thư mục vào kho tri thức FTS5 |
| /context-mode:ctx-search | Tìm trong nội dung đã lập chỉ mục |
| /context-mode:ctx-upgrade | Cập nhật, build lại, chuyển cache, sửa hook |
| /context-mode:ctx-purge | Xóa vĩnh viễn toàn bộ nội dung đã lập chỉ mục |
| /context-mode:ctx-insight | Mở dashboard Insight trên web (context-mode.com/insight) |
Trên các nền tảng khác (README nói hỗ trợ 17 client), slash command không có. Bạn gõ ctx stats, ctx doctor... trong khung chat và model sẽ tự gọi MCP tool. Nền tảng không có hook cần sao chép thủ công một file định tuyến, chỉ một lần.
Cách tự đo trước và sau
Phần README được trích cho biết ctx-stats hiển thị mức tiết kiệm theo từng tool, nhưng không mô tả định dạng đầu ra cụ thể. Dưới đây là cách làm của riêng tôi, không phải hướng dẫn chính thức.
Tác vụ mẫu: phân tích một file access log cỡ 45 KB (cùng cỡ với ví dụ trong README). Ví dụ yêu cầu: "đếm số request theo mã trạng thái và liệt kê 10 đường dẫn bị lỗi 5xx nhiều nhất". Dùng đúng một file và một prompt cho cả hai lần chạy.
Cách chạy:
Mở phiên mới khi chưa bật context-mode, chạy tác vụ.
Mở phiên mới khi đã bật context-mode, chạy lại đúng tác vụ đó.
Các chỉ số cần ghi lại ở mỗi lần:
Mức context đã dùng sau khi xong tác vụ (xem ở chỉ báo context của công cụ bạn đang dùng).
Số lần gọi tool và tool nào được gọi.
Số liệu /context-mode:ctx-stats (chỉ có ở lần bật), để đối chiếu với mức bạn tự quan sát.
Độ đúng của kết quả: tự tính đáp án bằng lệnh shell (awk, sort, uniq...) rồi so với câu trả lời của agent, để chắc rằng rút gọn không làm sai số.
Trí nhớ sau khi nén: nếu phiên dài đến mức bị nén, hỏi agent "mình đang làm gì và sửa file nào?" rồi so với thực tế.
Đừng kỳ vọng đúng 98% cho mọi tác vụ. Đó là kết quả trên các ví dụ do tác giả chọn.
Khi nào đáng thử
Nhận định của tôi: chi phí khi code với agent thường tăng theo lượng token đi qua context. Dữ liệu thô nhỏ lại thì phiên làm việc có thể kéo dài hơn, ít bị nén giữa chừng và ít phải giải thích lại từ đầu. README không công bố con số tiền hay giá token, nên mức tiết kiệm thực tế tính bằng tiền còn tùy gói dịch vụ và thói quen của bạn.
Các tình huống hợp lý để thử:
Debug bằng log dài hoặc thao tác trang web bằng Playwright.
Đọc hàng loạt issue hoặc PR trên GitHub.
Khảo sát một codebase lớn (đếm, thống kê, tìm mẫu) thay vì đọc từng file.
Những phiên làm việc dài mà bạn không muốn agent "mất trí nhớ" sau mỗi lần nén.
Thử không hợp thì gỡ thế nào
Phần README được trích không hướng dẫn gỡ plugin. Với cơ chế plugin chung của Claude Code, bạn có thể mở /plugin để tắt hoặc gỡ context-mode (thường là /plugin uninstall context-mode@context-mode). Lệnh có thể khác theo phiên bản, nên hãy đối chiếu với /help hoặc tài liệu Claude Code, rồi khởi động lại.
Nếu muốn dọn cả dữ liệu đã lập chỉ mục, dùng /context-mode:ctx-purge trước khi gỡ. Lệnh này xóa vĩnh viễn nội dung trong kho tri thức.
Điều cần lưu ý
Số liệu và logo đều do tác giả tự công bố. Các con số 98%, 315 KB → 5.4 KB, 700 KB → 3.6 KB chưa được kiểm chứng độc lập. Dòng "Used across teams at" kèm logo Microsoft, Google, Stripe... cũng không có dẫn chứng chi tiết trong phần README được trích.
Giấy phép là ELv2 (theo badge trong README). Nếu dùng trong công ty, hãy đọc kỹ điều khoản.
Phiên cũ bị xóa nếu không --continue. Đây là thiết kế có chủ đích, nhưng cần nhớ nếu bạn muốn giữ ngữ cảnh giữa các ngày.
Plugin dùng hook can thiệp vào luồng gọi tool (PreToolUse, PostToolUse...). Hãy thử trước trên dự án không quan trọng để quen với cách agent hoạt động.
ctx-insight mở một dashboard trên web dành cho phân tích theo tổ chức. Nếu bạn quan tâm đến dữ liệu nào được gửi đi, hãy tìm hiểu trước khi dùng.
Độ trễ và chất lượng câu trả lời khi dữ liệu bị rút gọn chưa được nói rõ trong phần README được trích. Hãy tự kiểm tra trên dự án của mình.
Kết
context-mode đánh vào một điểm đau thật của người dùng agent: vấn đề thường không nằm ở prompt, mà ở lượng dữ liệu thô tool nhả vào context. Cài đặt chỉ mất hai lệnh cộng một lần khởi động lại, có ctx-doctor để kiểm tra và ctx-stats để đo, nên chi phí thử nghiệm thấp. Hãy thử trên một tác vụ nặng dữ liệu, rồi để số liệu của chính bạn quyết định có giữ nó hay không.