Chuyển tới nội dung chính

Claude Code 2.1.257 đưa Fable 5.1 lên làm mặc định — sandbox nộp bài này lại đang ôm một bản Claude Code từ tháng 2

Ngày 1/9/2026, Claude Code 2.1.257 đặt Fable 5.1 (1M context, $10/$50 mỗi triệu token) làm model mặc định. Tôi kiểm claude --version ngay trên sandbox nộp bài viết này, lần theo symlink, và phát hiện một bản Claude Code npm khác nằm im từ tháng 2, lệch hơn 200 version — cùng vài ví dụ trong docs chính thức của Anthropic đã lạc hậu so với chính model nó vừa ra mắt.

Trong bài này

Ngày 1/9/2026, Anthropic ra mắt Claude Fable 5.1 và Claude Mythos 5.1, đồng thời Claude Code 2.1.257 đặt Fable 5.1 làm model mặc định với cửa sổ ngữ cảnh 1M token. Nhưng "mặc định" ở đây chỉ là mặc định cho bản CLI mới nhất bạn thật sự đang chạy — còn bản nào đang chạy thì phải tự kiểm, không phải cứ nghĩ là đúng. Tôi kiểm tra ngay trên chính cái sandbox đang gõ bài viết này, và tìm ra nó đang ôm hai bản Claude Code lệch nhau bảy tháng, một bản nằm im không ai gọi tới.

Chuyện gì xảy ra ngày 1/9

Theo registry chính thức của npm, gói @anthropic-ai/claude-code lên bản 2.1.257 lúc 2026-09-01T17:15:33.223Z, và bản vá 2.1.258 lên tiếp lúc 2026-09-01T22:25:07.449Z — cách nhau chưa tới năm tiếng đồng hồ. Đây là dữ liệu tôi lấy trực tiếp từ registry.npmjs.org, không phải suy đoán từ ngày publish bài blog hay changelog không ghi ngày:

terminal
$ curl -s https://registry.npmjs.org/@anthropic-ai/claude-code | node -e "..."
2.1.257 2026-09-01T17:15:33.223Z
2.1.258 2026-09-01T22:25:07.449Z

Changelog chính thức của Claude Code (lấy từ CHANGELOG.md trên GitHub) ghi nguyên văn cho hai bản này:

2.1.257 — Added Claude Fable 5.1 as default model with 1M context; added time format settings and containment escape rules to auto mode

2.1.258 — Fixed macOS 12 launch regression and remote session failures with permission approvals

Ba thứ không liên quan gộp chung trong một bản 2.1.257: đổi model mặc định, thêm setting định dạng giờ, và thêm rule "containment escape" cho auto mode. Bài này chỉ nói về vế đầu — đổi model mặc định — vì đó là thứ ảnh hưởng trực tiếp tới chi phí và hành vi của bất cứ ai đang chạy Claude Code, kể cả cái pipeline nộp bài viết này lên beru.io.vn.

Fable 5.1 và Mythos 5.1: cùng một model, khác bộ khoá an toàn

Trang công bố chính thức của Anthropic (anthropic.com/claude-fable-and-mythos-5-1) nói thẳng quan hệ giữa hai cái tên này, không úp mở:

"Claude Fable 5.1 and Claude Mythos 5.1 are the same model, but with different levels of safeguards."

"Claude Mythos 5.1 is identical to Fable 5.1, but it offers more permissive safeguards for vetted individuals and organizations."

Nói cách khác: Fable 5.1 là bản GA (general availability) cho tất cả mọi người, còn Mythos 5.1 là cùng một bộ trọng số nhưng nới lỏng safeguard cho một nhóm hẹp — theo trang công bố là các chuyên gia an ninh mạng và nhà khoa học đời sống đã được xác minh (vetted cybersecurity professionals and life scientists). Đây không phải hai model khác nhau về năng lực, mà khác nhau về việc model được phép làm gì khi nó nghi ngờ yêu cầu của bạn nhạy cảm.

Về mặt an toàn, trang công bố cũng đưa ra một con số cụ thể cho phía cybersecurity, trích nguyên văn:

"In cybersecurity, our newest safeguards block 60% fewer false positives than before."

Và cụ thể hoá thêm cho người dùng Claude Code:

"Claude Code users can expect an average of around 60% fewer interventions per session from our cyber safeguards, relative to the previous safeguards on Fable 5."

Con số "60%" ở đây là tỷ lệ giảm số lần safeguard chặn nhầm — không phải tỷ lệ phát hiện lỗ hổng tăng lên, và tôi không tìm thấy chỗ nào trên trang công bố nói khác. Tôi không kiểm được con số này trong thực tế vì không có quyền chạy benchmark nội bộ của Anthropic, nên chỉ trích lại đúng nguyên văn thay vì diễn giải rộng hơn.

Giá và cửa sổ ngữ cảnh: đắt hơn Opus 5 gấp đôi

Bảng giá trên trang công bố, trích nguyên văn:

"$10 per million input tokens and $50 per million output tokens"

"Cache reads now cost 75% less, or $0.25 per million tokens."

Và về tiết kiệm chi phí tổng thể so với thế hệ trước (Fable 5):

"For typical workloads, costs are reduced by around 25% relative to Fable 5."

"For complex coding and highly agentic tasks, the savings could be up to around 45%."

So các con số này với Opus 5, lấy từ trang platform.claude.com/docs/en/models/overview:

ModelModel IDCửa sổ ngữ cảnhInputOutput
Claude Fable 5.1claude-fable-5-11M token$10 / MTok$50 / MTok
Claude Opus 5claude-opus-51M token$5 / MTok$25 / MTok

Fable 5.1 đắt gấp đúng hai lần Opus 5 ở cả input lẫn output, cùng cửa sổ ngữ cảnh 1M token — trang công bố không nêu con số cửa sổ ngữ cảnh, tôi lấy số này từ trang model overview riêng, không phải suy ra từ changelog. Cái đắt hơn ở đây không tự động có nghĩa là "tốt hơn cho mọi việc" — trang model overview nói khá rõ việc này, và đây là chỗ tôi nghĩ đáng chú ý nhất.

Về hiệu năng cho việc code cụ thể, trang công bố có một điểm dữ liệu tôi lấy được nguyên số: trên benchmark CursorBench 3.2.0, Fable 5.1 đạt 73.4%, so với 70.5% của Fable 5. Đây là mức tăng thật nhưng không đột biến (khoảng 3 điểm phần trăm) — không tương xứng với việc giá tăng gấp đôi so với Opus 5, nên nếu quyết định có đáng chuyển hay không, con số cần so là Fable 5.1 với Opus 5 ở benchmark tương đương, chứ không phải Fable 5.1 với chính thế hệ trước của nó. Trang công bố không đưa điểm CursorBench của Opus 5 để so trực tiếp, nên tôi không tự suy ra tỷ lệ chi phí/hiệu năng — chỉ nêu đúng số có, không nội suy thêm.

Mặc định của Claude Code khác khuyến nghị chung của Anthropic

Đây là chỗ hai tài liệu chính thức của Anthropic nói hai điều hơi lệch nhau, và tôi nghĩ đáng để đọc kỹ trước khi đổi model mặc định trên máy mình.

Changelog Claude Code nói 2.1.257 "Added Claude Fable 5.1 as default model" — tức là từ bản này trở đi, cài mới hoặc update lên sẽ mặc định chạy Fable 5.1 khi bạn gõ claude mà không chỉ định model nào khác.

Nhưng trang model overview — tài liệu hướng dẫn chọn model chung của Anthropic, không riêng cho Claude Code — lại khuyên thế này, trích nguyên văn:

"If you're unsure which model to use, start with Claude Opus 5 for most workloads. Use Claude Fable 5.1 for demanding reasoning and long-horizon agentic work, or when your evals on Claude Opus 5 at higher effort still fall short."

Ghép hai câu này lại: Claude Code mặc định cho bạn chạy con model mà tài liệu chính thức nói "đừng dùng cái này trừ khi Opus 5 đã không đủ". Đó không nhất thiết là mâu thuẫn — Claude Code là công cụ code, thứ thường xuyên rơi vào đúng nhóm "long-horizon agentic work" mà Fable 5.1 được khuyên dùng. Nhưng nó có nghĩa là nếu bạn không đọc changelog, bạn có thể đang trả gấp đôi tiền cho mỗi request mà không biết vì sao model mặc định vừa đổi.

Chưa hết: trang công bố Fable 5.1 còn ghi thêm một dòng về effort level, trích nguyên văn:

"Note that Fable 5.1 defaults to High effort in Claude Code, and to Medium in Claude Cowork and on Claude.ai."

High effort thường đi kèm suy luận dài hơn, tốn token hơn — cộng dồn với việc input/output đã đắt gấp đôi Opus 5, đây là hai lớp chi phí tăng lên cùng lúc chỉ vì bạn npm update -g @anthropic-ai/claude-code mà không đọc release note.

Muốn ghim lại Opus 5? Cú pháp có thật, nhưng ví dụ trong tài liệu lại lạc hậu

Nếu đọc xong phần trên và muốn giữ nguyên Opus 5 thay vì để Claude Code tự chuyển sang Fable 5.1, cách làm nằm ngay trong claude --help chạy trên bản 2.1.257:

--model <model>    Model for the current session. Provide an alias for the
                    latest model (e.g. 'fable', 'opus', or 'sonnet') or a
                    model's full name (e.g. 'claude-fable-5').

Chú ý cái ví dụ cuối: 'claude-fable-5' — không có .1. Đây là ví dụ cho model Fable 5 thế hệ trước, không phải Fable 5.1 vừa ra mắt cùng ngày với chính bản CLI in ra dòng help này. Text help chưa kịp cập nhật theo model mới nó vừa đặt làm mặc định.

Cấu hình lâu dài hơn thì đặt trong settings.json, theo tài liệu settings chính thức (code.claude.com/docs/en/settings), cũng dùng đúng một ví dụ có cùng vấn đề:

"model": "claude-opus-4-8"

claude-opus-4-8 không nằm trong danh sách model hiện hành (claude-opus-5, claude-sonnet-5, claude-fable-5-1, claude-haiku-4-5-20251001) — đây là ví dụ minh hoạ cú pháp còn sót lại từ một thế hệ model cũ hơn. Cú pháp "model": "<model-id>" vẫn đúng, chỉ cần thay giá trị bằng ID hiện hành, ví dụ muốn ép về Opus 5:

json
{
  "model": "claude-opus-5"
}

Điểm chung của cả hai ví dụ lạc hậu này (help text và settings doc) không phải lỗi nghiêm trọng gì — chỉ là bằng chứng nhỏ cho đúng luận điểm của cả bài: tài liệu và ví dụ có thể chậm hơn tốc độ Anthropic đổi model mặc định, nên đừng copy y nguyên ví dụ trong docs mà không nhìn lại danh sách model ID hiện hành.

Kiểm tra thật trên sandbox nộp bài viết này

Nói thì dễ, tôi kiểm tra trực tiếp trên chính sandbox chạy MCP server OAuth-protected mà tôi dùng để nộp bài viết này lên beru.io.vn. Lệnh và output dưới đây là thật, chạy ngay trước khi viết phần này:

terminal
$ claude --version
2.1.257 (Claude Code)

Khớp đúng với bản changelog vừa trích ở trên, và khớp với mốc thời gian 2026-09-01T17:15:33Z lấy từ npm registry. Nghĩa là cái pipeline nộp draft này — nếu gọi claude như một CLI độc lập — đang đứng đúng ở bản có Fable 5.1 làm mặc định. (Tôi không xác minh được, và cũng không có cách xác minh, model nào thật sự đang phục vụ phiên chạy để viết ra chính bài viết này — hệ thống vận hành phiên này không tiết lộ thông tin đó cho tool đang gõ bài, nên tôi không đưa ra khẳng định nào về việc đó.)

Nhưng claude --version chỉ cho biết bản nào đang nằm trên PATH. Nó không cho biết có bao nhiêu bản Claude Code khác đang nằm rải rác trên cùng một máy.

Bản thứ hai: một gói npm nằm im từ tháng 2

Tò mò xem claude trên PATH thực ra trỏ tới đâu, tôi lần theo symlink:

terminal
$ ls -la $(which claude)
lrwxrwxrwx 1 root root 27 Sep  2 16:49 /opt/node22/bin/claude -> /opt/claude-code/bin/claude

/opt/node22/bin/claude chỉ là symlink, trỏ tới một bản cài standalone riêng ở /opt/claude-code/bin/claude — đây chính là bản 2.1.257. Nhưng cùng gốc /opt/node22, còn có một bản cài khác qua npm, không nằm trên PATH, không được symlink tới:

terminal
$ find / -maxdepth 8 -iname "package.json" -path "*claude-code*" 2>/dev/null | \
  xargs grep '"version"'
/opt/node22/lib/node_modules/@anthropic-ai/claude-code/package.json:  "version": "2.1.42"

2.1.42 — theo npm registry, bản này publish lúc 2026-02-13T18:56:56.084Z. Tức là cách bản đang thật sự chạy trên máy này hơn sáu tháng rưỡi và hơn 200 số phiên bản, tính từ 2.1.42 lên tới 2.1.258. Gọi thẳng file thực thi của gói này để chắc chắn nó không phải rác chết:

terminal
$ node /opt/node22/lib/node_modules/@anthropic-ai/claude-code/cli.js --version
2.1.42 (Claude Code)

Vẫn chạy được, vẫn báo đúng version của chính nó — nó không hỏng, chỉ đơn giản là không ai gọi tới nó vì PATH đã trỏ thẳng tới bản standalone mới hơn ở /opt/claude-code.

Chỗ đáng nói hơn: gói này vô hình với cách kiểm tra "chuẩn" mà nhiều người vẫn dùng. Chạy npm ls -g với prefix mặc định của máy:

terminal
$ npm config get prefix
/home/claude/.npm-global

$ npm ls -g --depth=0
/home/claude/.npm-global/lib
+-- @mermaid-js/[email protected]
+-- [email protected]
... (không có claude-code trong danh sách)

Không thấy @anthropic-ai/claude-code đâu cả — không phải vì nó không tồn tại, mà vì nó được cài dưới một global prefix khác (/opt/node22), và npm ls -g mặc định chỉ nhìn vào prefix hiện tại của bạn. Chỉ khi chỉ định đúng prefix đó, nó mới hiện ra:

terminal
$ npm ls -g --depth=0 --prefix /opt/node22
+-- @anthropic-ai/[email protected]

Máy nào có nhiều Node runtime (nvm, volta, bản Node hệ thống, bản Node đóng sẵn trong image container) rất dễ rơi vào tình huống này: nhiều global prefix khác nhau, mỗi cái có thể mang một bản Claude Code riêng, và npm ls -g của bạn chỉ thấy đúng một trong số đó.

Giả thuyết sai của tôi: npx không "cứu" bạn khỏi bản cũ theo cách tôi tưởng

Trước khi viết phần này tôi định khẳng định luôn: "nếu bạn lỡ chạy npx @anthropic-ai/claude-code trên máy như vậy, bạn sẽ dính bản 2.1.42 cũ mà không biết." Tôi chạy thử trước khi viết, và kết quả cho thấy tôi sai:

terminal
$ npx --no-install @anthropic-ai/claude-code --version
npm error npx canceled due to missing packages and no YES option: ["@anthropic-ai/[email protected]"]

npx không hề đụng tới bản 2.1.42 đang nằm ở /opt/node22. Nó cố tải thẳng 2.1.258 — đúng bản latest hiện tại trên registry — bất kể có một bản global khác đang nằm sẵn trên máy dưới một prefix mà npx không quét tới. Nguồn thắng, nên tôi đổi lại kết luận: rủi ro thật không phải là "chạy npx sẽ vô tình lấy bản cũ", mà hẹp hơn nhiều — chỉ xảy ra khi có gì đó trong hệ thống của bạn gọi trực tiếp vào đúng đường dẫn cli.js của bản cài cũ (qua một script cứng đường dẫn, một NODE_PATH bị set sai, hay một bước trong Dockerfile copy nhầm node_modules cũ vào image mới) — chứ không phải cứ gõ lệnh CLI bình thường là dính.

Đây cũng là lý do tôi để nguyên đoạn giả thuyết sai này thay vì xoá đi viết lại cho gọn: nó là ví dụ thật cho việc một phỏng đoán nghe hợp lý ("npx chắc sẽ ưu tiên bản global có sẵn") vẫn cần chạy thử trước khi đưa vào bài, kể cả khi bạn là người viết ra nó.

Checklist nếu bạn tự host Claude Code trong container hay CI

Từ những gì kiểm được ở trên, đây là danh sách tôi sẽ tự áp dụng cho các image mà tool CLI kiểu này được cài sẵn:

  • Đừng tin npm ls -g một mình. Nó chỉ nhìn đúng một global prefix (npm config get prefix). Nếu image có nhiều Node runtime, chạy npm ls -g --depth=0 --prefix <mỗi-prefix> cho từng cái, hoặc đơn giản hơn: which -a claude để liệt kê mọi bản claude nằm trên PATH.
  • Tin claude --version chạy thật trên PATH hơn là tin số version ghi trong package.json của một gói bạn nghĩ là đang dùng — hai thứ này có thể lệch nhau nếu có bản cài song song.
  • Nếu Dockerfile của bạn có bước npm install -g @anthropic-ai/claude-code từ lâu, cộng thêm một bước khác (base image, installer script riêng) cài claude theo cách khác — kiểm tra symlink bằng ls -la $(which claude) xem thực sự đang chạy bản nào, đừng giả định bước cài sau cùng luôn thắng.
  • Đổi model mặc định (như vụ Fable 5.1 lần này) là một lý do tốt để định kỳ chạy đúng claude --version, không phải chỉ khi có sự cố mới đi tìm.

Không cái nào trong số này là bug của Claude Code hay của npm — đây thuần tuý là hệ quả của việc một máy có nhiều đường cài đặt cho cùng một binary, và không công cụ nào tự động cảnh báo cho bạn khi hai đường đó lệch nhau.

Vì sao chuyện version lệch nhau lại quan trọng với pipeline nộp bài của tôi

Bài viết này, cũng như bài về llms.txt v2 tôi viết hồi cuối tháng 8, được nộp thẳng lên CMS của beru.io.vn qua một MCP server có OAuth, gọi hai tool list_posts và create_draft. Claude Code là lớp vỏ chạy pipeline đó. Model mặc định của lớp vỏ này đổi có nghĩa là hành vi tool-calling, độ dài ngữ cảnh, và effort suy luận cho mọi bài viết tiếp theo cũng đổi theo — kể cả khi tôi không chủ động chọn model nào.

Đây cũng là lý do tôi không tự tin công cụ nào ở tầng hạ tầng bên dưới beru.io.vn (nginx, số process, phiên bản đang chạy thật trên server production) — tôi không SSH được vào đó, khác hẳn với sandbox chạy agent mà tôi vừa kiểm ở trên. Cái tôi kiểm được là môi trường agent, không phải server web đang phục vụ beru.io.vn cho người đọc.

Với các dự án khác tôi đang duy trì bằng Next.js/TypeScript như Crypto Tracker, cùng một Claude Code chạy trên máy dev là công cụ hỗ trợ code hằng ngày — nên việc nó âm thầm đổi model mặc định, đổi effort level, đổi giá mỗi request, là thứ đáng để biết trước khi nó xảy ra chứ không phải sau khi nhận hoá đơn API. Nếu bạn cần một người kiểm tra lại phần vận hành server, deploy, hay CI/CD cho stack Next.js/Prisma tương tự, đó cũng là đúng phạm vi dịch vụ DevOps & Server Management tôi nhận làm.

Những gì tôi chưa kiểm chứng được

Để người biên tập biết chỗ nào cần soi kỹ trước khi đăng:

  • Model nào thật sự đang phục vụ phiên chạy để viết ra bài viết này — không kiểm chứng được, và tôi không đưa ra khẳng định nào về việc đó trong bài.
  • Vì sao trên sandbox này tồn tại song song một bản cài npm từ tháng 2 và một bản standalone từ tháng 9 — tôi không biết ai/quy trình nào đã cài bản npm 2.1.42 vào /opt/node22, cũng không SSH được vào layer dựng image để xem lịch sử build.
  • Con số "60% fewer false positives" và "60% fewer interventions per session" cho cybersecurity safeguard — trích đúng nguyên văn từ trang công bố của Anthropic, nhưng tôi không có cách tự benchmark lại để xác nhận độc lập.
  • "Fable 5.1 defaults to High effort in Claude Code" — đúng theo trang công bố, nhưng tôi không kiểm tra được liệu effort này có thể bị override bởi cấu hình settings.json cụ thể trên từng máy hay theo tổ chức (managed settings), vì tài liệu settings tôi đọc được không nêu rõ độ ưu tiên riêng cho trường effort của Fable 5.1.
  • Toàn bộ phần vận hành hạ tầng thật của beru.io.vn (nginx, số process, phiên bản Next.js đang chạy production) — không nằm trong phạm vi tôi kiểm được ở bài này, và tôi không khẳng định gì về nó.

Kết

Fable 5.1 tốt hơn Fable 5 theo mọi con số Anthropic công bố, và Claude Code 2.1.257 đặt nó làm mặc định chỉ vài giờ sau khi model ra mắt. Nhưng "mặc định mới" chỉ có ý nghĩa nếu bạn thật sự đang chạy bản CLI mới nhất — và cách chắc chắn duy nhất để biết là tự chạy claude --version, tự lần theo symlink, tự kiểm từng global prefix, chứ không phải suy đoán từ ngày bạn nhớ mình từng cài nó. Sandbox nộp chính bài viết này là ví dụ: đứng đúng bản mới, nhưng cách nó đứng đúng — qua một binary standalone riêng, không phải qua gói npm nằm cạnh đó — là thứ chỉ lộ ra khi tôi chịu khó gõ thêm vài lệnh, chứ không hiện lên ở bất cứ đâu nếu chỉ nhìn claude --version một mình.

Viết và kiểm chứng bởi Nguyễn Hoàng Lộc (Beru), TP. Hồ Chí Minh