Xếp hạng những người dùng tới 42,8 tỷ token
(github.com/junhoyeo)TLDR: https://github.com/junhoyeo/tokscale
Bối cảnh
- Bắt đầu từ Claude Code ra mắt vào nửa đầu năm nay, nhiều nhà cung cấp LLM như OpenAI Codex CLI, Google Gemini CLI đã thực sự bắt đầu cung cấp các công cụ lập trình tác tử (Agentic Coding Tool). Dù vậy, phần lớn công việc tôi vẫn tự làm trực tiếp
- Tuy nhiên, sau khi một người bạn chia sẻ thiết lập OpenCode, tôi bắt đầu dùng tích cực hơn nhiều. Khi chạy song song nhiều agent để chúng review lẫn nhau, hoặc tách riêng khâu khám phá/triển khai/kiểm chứng để làm việc (tức là dùng càng nhiều token thì...) hiệu năng tăng lên thấy rõ. Sau đó người bạn ấy mã nguồn mở thiết lập của mình với tên Oh-My-OpenCode và nhận được hơn 2.5k sao (https://github.com/code-yeongyu/oh-my-opencode)
- Sau khi gặp người bạn đó, chỉ trong một tháng tôi đã dùng hơn 5 tỷ token và trở thành một tín đồ cuồng nhiệt (đang dùng kín giới hạn hàng tuần của tài khoản gói Claude Max, thực ra còn từng tạo tài khoản phụ rồi bị khóa). Tôi cũng nhận ra số người tận dụng workflow agentic ít hơn mình nghĩ
Khởi đầu của ý tưởng
-
Tôi biết đến một công cụ theo dõi mức sử dụng token của Claude Code tên là ccusage
-
Sau khi đọc bài viết về "lập trình viên số 1 thế giới về mức sử dụng Claude Code" (anh Jinhyung!), tôi tự hỏi "sao biết được người đó đứng số 1 về lượng token nhỉ?". Tìm kiếm thì thấy có một website nhỏ tên viberank (https://github.com/sculptdotfun/viberank), là leaderboard được tạo từ dữ liệu lấy từ ccusage (không rõ hiện còn được duy trì không)
-
Nhưng cả hai dự án đều không hỗ trợ dữ liệu cho các client khác như OpenCode, Codex CLI (ccusage chỉ hỗ trợ một phần), Gemini CLI
-
Đúng lúc đó tôi cũng có một ý nghĩ thoáng qua trong phòng tắm rằng sẽ hay nếu có thể hiển thị lượng token được tạo ra bằng contribution graph của GitHub. Vì các lập trình viên vốn quen với GitHub, và cá nhân tôi thấy đây là dạng rất dễ đặt mục tiêu để tự thúc ép bản thân
- Isometric Contributions (https://github.com/jasonlong/isometric-contributions) - một extension Chrome mã nguồn mở đã 10 năm tuổi. Nó render contribution graph của GitHub dưới dạng isometric 3D → từ đây tôi lấy ý tưởng biểu đồ 3D
- Contribution graph của GitHub cũng là nơi tham khảo nhiều ý tưởng về theme màu sắc
- Ở frontend, tôi dùng obelisk.js (https://github.com/nicklockwood/obelisk.js) để triển khai render isometric 3D
-
Vốn dĩ tôi thích làm nhanh một sản phẩm hơi hacky, tung ra xem phản ứng rồi thu hút sự chú ý (xem bài trước)
-
Tôi quyết định tạo một nền tảng có dạng CLI/TUI, có thể chạy nhẹ nhàng bằng bunx (phiên bản tương đương npx trong hệ sinh thái Bun), rồi submit lên API server để chia sẻ dữ liệu và đưa tên mình lên leaderboard
Tên dự án: Tokscale
-
Lấy cảm hứng từ Kardashev Scale (https://ko.wikipedia.org/wiki/Kardashev_scale)
-
Đây là thang đo phân loại trình độ công nghệ của một nền văn minh theo lượng năng lượng tiêu thụ (Loại I = hành tinh, II = sao, III = thiên hà)
-
Tôi nghĩ trong thời đại AI, token là năng lượng mới. Ý tưởng là trực quan hóa hành trình đi từ "planetary developer" đến "galactic code architect"
-
Elon Musk từng nói "Điện là tiền (Electricity is money)"
- Trong thời đại AI và data center, giới hạn của hiệu năng không còn là tính toán mà là lượng điện có thể cung cấp
- So với hiệu năng GPU, việc đảm bảo nguồn điện, làm mát và tối ưu hiệu suất mới là lợi thế cạnh tranh
-
Nếu kéo điều này xuống cấp độ lập trình viên cá nhân thì sao?
- Thứ chúng ta trả khi dùng LLM API = token
- Ai dùng token nhiều hơn và hiệu quả hơn thì tạo ra nhiều code hơn
- Token sẽ trở thành đơn vị năng lượng cá nhân trong thời đại AI
-
Nếu AI là cỗ máy biến điện thành tiền, thì công cụ lập trình tác tử là cỗ máy biến token thành code
-
Vì thế Tokscale = Token + Kardashev Scale
- Ý tưởng là trực quan hóa hành trình đi từ "planetary developer" đến "galactic code architect"
- Đo mức độ tận dụng AI của lập trình viên qua lượng token tiêu thụ
Triển khai TUI
- Tôi dùng OpenTUI (https://github.com/sst/opentui) để làm terminal UI
- OpenTUI là framework TUI do SST phát triển, khác với Ink của React ở chỗ nó dựa trên Solid.js và cung cấp render zero-flicker bằng native Zig engine (gần đây OpenCode và
- 4 view (Overview, Models, Daily, Stats) + điều hướng bằng bàn phím/chuột
- 9 theme màu áp dụng cho contribution graph: Green, Halloween, Teal, Blue, Pink, Purple, Orange, Monochrome, YlGnBu (đây là các theme do cộng đồng contribution graph GitHub tạo ra)
- Biểu đồ được render bằng các ký tự block Unicode (▁▂▃▄▅▆▇█). Mỗi model được stack với màu khác nhau để hiển thị
Lấy dữ liệu quá chậm → module native Rust
- Ban đầu tôi parse các file JSON bằng TypeScript nhưng quá chậm
- Tôi chuyển sang native code Rust bằng napi-rs (https://napi.rs/)
- Đạt cải thiện hiệu năng khoảng 8.5 lần:
- Duyệt file: ~500ms → ~50ms (10x)
- Parse JSON: ~800ms → ~100ms (8x, dùng simd-json (https://github.com/simd-lite/simd-json))
- Tổng hợp: ~200ms → ~25ms (8x, xử lý song song với rayon (https://github.com/rayon-rs/rayon))
- Bộ nhớ cũng giảm khoảng 45% (streaming parse, xử lý chuỗi zero-copy)
- Để phù hợp với OpenTUI, tôi hỗ trợ bunx và bỏ npx. Chuyển sang bắt buộc dùng runtime Bun
- Từ TypeScript CLI, cấu trúc là chạy một subprocess giao tiếp với module Rust native bằng
Bun.spawn, rồi trao đổi dữ liệu JSON qua stdin/stdout
- Từ TypeScript CLI, cấu trúc là chạy một subprocess giao tiếp với module Rust native bằng
- (Dùng OpenCode quá nhiều nên ngay cả cái này trên máy tôi giờ cũng chậm đi T_T)
Vấn đề data retention
- Các công cụ lập trình tác tử gọi toàn bộ lịch sử là session, và lưu trong các thư mục ẩn bắt đầu bằng dấu chấm
- Claude Code: ~/.claude/projects/ (JSONL)
- OpenCode: ~/.local/share/opencode/storage/message/ (từng file JSON riêng lẻ)
- Codex CLI: ~/.codex/sessions/ (JSONL dạng event-based)
- Gemini CLI: ~/.gemini/tmp/*/chats/ (JSON)
- Claude Code và Gemini CLI có thời gian retention mặc định 30 ngày, hết thời gian thì dữ liệu session bị xóa
- Sau khi biết điều này, nhiều người thấy tiếc dữ liệu. Tôi đã ghi rất chi tiết cách vô hiệu hóa trong README
- Claude Code: thêm
"cleanupPeriodDays": 9999999999vào ~/.claude/settings.json
- Claude Code: thêm
- OpenCode và Codex CLI thì lưu vĩnh viễn toàn bộ file session (bản thân cũng không có chức năng xóa)
Tích hợp Cursor IDE
- Giờ tôi không còn dùng nữa nhưng đã có thời gian dùng Cursor IDE (đây cũng là dữ liệu quý giá của tôi nên cần tích hợp)
- Cursor hỗ trợ export CSV qua API chứ không phải file session cục bộ, nên có thể lấy dữ liệu từ đó
- Qua developer tools, tôi biết rằng chỉ cần có session token (WorkosCursorSessionToken) là có thể xác thực
- Tìm trong header Cookie của request
cursor.com/api/*ở tab Network, hoặc - Copy trực tiếp ở Application → Cookies
- Tìm trong header Cookie của request
- Tôi làm thành
tokscale cursor login | status | logoutđể quản lý gọn gàng
Tích hợp GitHub (OAuth)
- Triển khai theo phương thức xác thực Device Flow
tokscale login→ mở trình duyệt → nhập mã → cấp tokentokscale submitđể upload dữ liệu usage lên leaderboard- Dữ liệu được submit sẽ qua bước xác thực Level 1 (tính nhất quán toán học, không có ngày trong tương lai, phát hiện trùng lặp, v.v.)
Tính giá token
- Lấy dữ liệu giá theo thời gian thực từ cơ sở dữ liệu giá của LiteLLM (https://github.com/BerriAI/litellm)
- Cache trên đĩa trong
~/.cache/tokscale/pricing.jsonvới TTL 1 giờ - Hỗ trợ tính riêng input/output/cache read/cache write/reasoning token
- Cũng hỗ trợ tiered pricing (từ 200k token trở lên)
Wrapped 2025
- Tính năng tạo ảnh tổng kết năm lấy cảm hứng từ Spotify Wrapped (hãy chờ cuối năm)
- Chạy
tokscale wrappedsẽ tạo ảnh PNG - Render ảnh bằng @napi-rs/canvas (https://github.com/Brooooooklyn/canvas), chuyển SVG → PNG bằng @resvg/resvg-js (https://github.com/nicklockwood/resvg-js)
- Tải font Figtree từ Google Fonts rồi cache lại
- Nội dung gồm: tổng token, Top 3 model, Top 3 client, Top 3 agent, số message, số ngày hoạt động, chi phí, streak, contribution graph
Nút thắt hiện tại & điều đang cân nhắc
- Mỗi lần đều phải quét dữ liệu cục bộ nên chậm, và việc upload lên database cũng khá nặng
- Hiện tôi đang xem xét tối ưu incremental submission dựa trên diff. Dự định tạo hash theo từng ngày để chỉ upload phần thay đổi (để vẫn chừa khả năng dữ liệu ngày cũ bị sửa)
Gần như toàn bộ code là do Oh-My-OpenCode viết
- Thật sự gần như mọi dòng code đều do agent viết
- Hơn 423 commit, gồm cả README bằng 4 ngôn ngữ (EN, KO, JA, ZH-CN)
- Tôi còn đăng nhiều screenshot lên GitHub để làm cho nó đẹp mắt (phần này thì phải thừa nhận có chút bàn tay con người, nhưng tôi có thể chắc chắn rằng trong suốt quá trình làm dự án, tổng thời gian tôi thật sự tự mở IDE lên để code còn chưa tới 30 phút)
1 bình luận
Mình tò mò là để hoàn thành dự án thì bạn đã ra lệnh cho LLM khoảng bao nhiêu lần?