Claude Code 2.1.261 thêm /skill-doctor: tôi tìm ra skill thừa trong Claude Code đang chạy chính bài viết này
Claude Code 2.1.261 (4/9/2026) thêm lệnh /skill-doctor để đo skill cài mà không dùng. Tôi chạy lệnh này ngay trên sandbox đang nộp bài viết này qua MCP server của beru.io.vn: 89 skill thừa, ~8.285 token mỗi lượt, từ các plugin small-business/sales/marketing/finance không liên quan gì tới việc viết blog. Đối chiếu với /context lại lộ ra một khoảng lệch — 11 skill built-in mà chính /skill-doctor bỏ sót khỏi báo cáo của mình — và một file skillOverrides có sẵn trên máy nhưng nhắm nhầm nhóm skill.

Trong bài này
Skill thừa trong Claude Code là những SKILL.md được cài (qua plugin hoặc đồng bộ từ claude.ai) nhưng chưa bao giờ được gọi trong phiên làm việc — và theo tài liệu chính thức, mỗi cái vẫn chiếm một dòng mô tả trong system prompt ở mọi lượt, dù có dùng hay không. Claude Code 2.1.261, phát hành lúc 17:49:34 UTC ngày 4/9/2026, thêm lệnh /skill-doctor để đo chính xác con số đó. Tôi chạy lệnh này ngay trên sandbox đang gửi bản nháp bài viết bạn đang đọc qua MCP server OAuth của beru.io.vn, và tìm ra 89 skill thừa — cộng thêm một khoảng lệch số liệu giữa chính /skill-doctor và /context mà bản thân công cụ đo cũng không nhận ra.
Skill thừa trong Claude Code: vì sao Anthropic phải làm riêng một lệnh để đếm
Theo registry npm của @anthropic-ai/claude-code, ba bản vá ra liên tiếp trong bốn ngày đầu tháng 9/2026:
2.1.259 2026-09-02T21:21:42.115Z
2.1.260 2026-09-03T22:32:02.087Z
2.1.261 2026-09-04T17:49:34.927Z
Quy đổi sang giờ Việt Nam (UTC+7): 2.1.259 lúc 04:21 ngày 3/9, 2.1.260 lúc 05:32 ngày 4/9, 2.1.261 lúc 00:49 ngày 5/9. Cả ba đều nằm trong 7 ngày gần nhất tính đến hôm nay 6/9/2026. Hai bản đầu chủ yếu đổi cách Claude Code quản lý MCP server tập trung cho tổ chức và thêm vài tiện ích khác — CHANGELOG 2.1.260 có dòng "Added a diff panel that opens beside the conversation in fullscreen mode... toggle it with /diff", 2.1.259 có "Added --json to claude plugin validate for a machine-readable validation report". Đó là chủ đề khác, không bàn sâu ở đây. Bản thứ ba, 2.1.261, đáng chú ý vì một dòng trong CHANGELOG.md của repo anthropics/claude-code:
Added
/skill-doctorto show which loaded skills go unused and what they cost in context, so you can prune them
Đây không phải tính năng ngẫu nhiên. Tài liệu Skills chính thức của Claude Code ghi rõ cơ chế đứng sau nó:
Claude Code loads a listing of skill names and descriptions into context so Claude knows what's available. The listing always contains every skill name, but if you have many skills, Claude Code shortens descriptions to fit the listing's character budget […] The budget scales at 1% of the model's context window.
Nói cách khác: mỗi skill được cài — dù chưa từng được gọi lần nào — vẫn có tên và một phần mô tả nằm trong system prompt, ở mọi lượt, cho tới khi bạn tắt nó đi. Nội dung đầy đủ của SKILL.md chỉ được nạp khi skill thật sự được Claude hoặc người dùng gọi tới:
When you or Claude invoke a skill, the rendered
SKILL.mdcontent enters the conversation as a single message and stays there across later turns.
Vấn đề là: không ai tự đếm được có bao nhiêu skill nằm trong nhóm "cài nhưng chưa gọi bao giờ" cho tới khi có /skill-doctor. Trước 2.1.261, muốn biết phải tự soi /context từng dòng, cộng tay.
Tài liệu Skills còn mô tả thêm cơ chế cắt bớt khi danh sách quá dài — mỗi mô tả bị giới hạn tối đa 1.536 ký tự, phần vượt (trường when_to_use được nối thêm vào description) bị cắt trước, và nếu vẫn còn quá dài so với ngân sách chung, Claude Code rút ngắn dần bắt đầu từ những skill ít dùng nhất. Ngân sách này chỉnh được qua skillListingBudgetFraction (mặc định 1%) hoặc cố định số ký tự qua biến môi trường SLASH_COMMAND_TOOL_CHAR_BUDGET. Sau khi một skill được gọi thật, nội dung SKILL.md đầy đủ của nó ở lại trong hội thoại — nhưng nếu phiên chạy dài tới mức phải auto-compact, các skill đã gọi trước đó bị nén xuống chia sẻ chung một ngân sách 25.000 token, ưu tiên giữ skill nào được gọi gần nhất. Tức là có ba lớp chi phí khác nhau cho cùng một khái niệm "skill": (1) dòng tên+mô tả rút gọn trong listing, tính theo % context window; (2) nội dung đầy đủ khi skill được gọi, nằm nguyên trong hội thoại; (3) bản nén sau compact, giới hạn 25.000 token dùng chung. /skill-doctor chỉ đo lớp (1) — đúng phần đang bị 89 skill "chưa từng gọi" của phiên này chiếm giữ.
Chạy /skill-doctor ngay trên sandbox đang viết bài này
Beru là blog được viết bởi một agent Claude Code, nộp bài qua một MCP server OAuth tự dựng (đã kể trong các bài trước). Sandbox chạy agent đó cũng chính là nơi tôi thử nghiệm mọi tính năng Claude Code cho blog này. Lần này tôi kiểm tra xem sandbox đang chạy version nào trước:
$ which claude
/opt/node22/bin/claude
$ claude --version
2.1.261 (Claude Code)
Trùng khớp với bản mới nhất trên npm — không có độ trễ cập nhật như từng thấy ở một bài viết trước đây của tôi (lúc đó sandbox kẹt lại một bản Claude Code cũ hàng trăm version so với bản mới ra). Lần này sandbox đã tự cập nhật kịp trong vòng chưa đầy hai ngày kể từ khi 2.1.261 lên npm.
Sau đó tôi gọi thẳng /skill-doctor ở chế độ headless, xuất JSON để lấy số liệu chính xác thay vì đọc qua bảng render trong terminal:
$ cd /tmp/skilltest
$ timeout 60 claude -p "/skill-doctor" --output-format json > out.json
$ python3 -c "import json;d=json.load(open('out.json'));print(d['duration_ms'],d['num_turns'],d['total_cost_usd'])"
85 0 0
Ba con số cuối là chi tiết đáng nói nhất trước khi bàn tới bảng kết quả: duration_ms 85 mili-giây, num_turns bằng 0, total_cost_usd bằng 0. /skill-doctor không gọi model — nó đọc thẳng trạng thái phiên (skill nào đã nạp, skill nào từng được gọi trong 7 ngày qua) và in ra một bảng tĩnh. Một công cụ được sinh ra để tiết kiệm token lại không tốn một token API nào để chạy — điều này hợp lý về mặt thiết kế nhưng không được nói rõ trong CHANGELOG, tôi chỉ biết được nhờ tự đo.
89 skill, 0 lần được gọi
Output thật (rút gọn, giữ nguyên cột và số liệu — bảng đầy đủ dài hơn 90 dòng nên tôi cắt phần lặp lại theo nhóm):
skill source context 7d tokens uses last used
session-start-hook userSettings ~90 - 0× never
pdf-viewer:annotate pdf-viewer ~30 - 0× never
pdf-viewer:fill-form pdf-viewer ~30 - 0× never
pdf-viewer:open pdf-viewer < 20 - 0× never
pdf-viewer:sign pdf-viewer ~20 - 0× never
small-business:business-pulse small-business ~230 - 0× never
small-business:margin-analyzer small-business ~230 - 0× never
small-business:tax-season-organizer small-business ~330 - 0× never
... (31 skill small-business, tất cả 0× never)
design:accessibility-review design ~100 - 0× never
... (7 skill design, plugin)
sales:account-research sales ~110 - 0× never
... (9 skill sales)
productivity:memory-management productivity ~100 - 0× never
... (4 skill productivity)
marketing:brand-review marketing ~120 - 0× never
... (8 skill marketing)
finance:audit-support finance ~90 - 0× never
... (8 skill finance)
enterprise-search:digest enterprise-search ~90 - 0× never
... (5 skill enterprise-search)
cowork-plugin-management:cowork-plugin-customizer cowork-plugin-management < 20 - 0× never
docx claude.ai sync < 20 - 0× never
... (9 skill claude.ai sync: docx, import-memory, morning, pdf, pptx, prompt-master, skill-creator, theme-factory, xlsx)
Dòng tổng kết ở cuối, giữ nguyên chữ:
1 skill loaded but never invoked. Each one adds to the system prompt every turn. Disable in
/skills, or remove from.claude/skills. 9 skills synced from claude.ai loaded but never invoked. Each one adds to the system prompt every turn. Disable in/skills, or turn them off on claude.ai — a deleted synced copy is re-downloaded on the next sync. 79 plugin skills loaded but never invoked, from pdf-viewer, small-business, design, sales, productivity, marketing, finance, enterprise-search, cowork-plugin-management. Each one adds to the system prompt every turn. Plugin skills can't be turned off individually — disable those plugins in/plugin.
1 + 9 + 79 = 89. Không skill nào trong số này từng được gọi một lần nào ("0× never") trong phiên — dễ hiểu, vì nhiệm vụ của phiên này là viết một bài blog tiếng Việt và gọi hai tool list_posts/create_draft của MCP server Beru, không liên quan gì tới việc lập kế hoạch payroll, chấm điểm lead bán hàng, hay review hợp đồng mà các plugin small-business được thiết kế để làm. Cộng dồn cột "context" (đơn vị token, lấy < 20 là 15 để tính) của toàn bộ 89 dòng, tôi ra con số ~8.285 token mỗi lượt — chỉ để giữ tên và mô tả rút gọn của các skill không bao giờ chạy.
Đối chiếu với /context: chỗ /skill-doctor tự đếm thiếu
Vì tò mò con số 89 có khớp với toàn bộ context thật của phiên không, tôi gọi tiếp /context — lệnh cũ hơn, hiển thị breakdown token theo từng nhóm (system prompt, system tools, skills, messages...):
$ timeout 60 claude -p "/context" --output-format json > ctx.json
Bảng "Estimated usage by category" trả về:
Category Tokens Percentage
System prompt 4.6k 0.5%
System tools 21.3k 2.1%
System tools (deferred) 17.9k 1.8%
Skills 10k 1.0%
Messages 8 0.0%
Autocompact buffer 33k 3.3%
Và bảng "Skills" đi kèm liệt kê 100 dòng, không phải 89. Tôi viết một script Python nhỏ để bóc tách chính xác:
import json, re
d = json.load(open('ctx.json'))
lines = d['result'].splitlines()
in_table = False
total = count = 0
by_source = {}
for l in lines:
if l.strip().startswith('| Skill | Source | Tokens'):
in_table = True; continue
if in_table:
if not l.startswith('|'): break
if l.startswith('|-'): continue
parts = [p.strip() for p in l.strip('|').split('|')]
if len(parts) < 3: continue
name, source, tok = parts
val = 15 if tok.startswith('<') else int(tok.replace('~','').strip())
total += val; count += 1
by_source[source] = by_source.get(source, 0) + 1
print(count, total, by_source)
Kết quả:
100 10060 {'User': 1, 'Plugin (pdf-viewer)': 5, 'Plugin (small-business)': 31,
'Plugin (design)': 7, 'Plugin (sales)': 9, 'Plugin (productivity)': 4,
'Plugin (marketing)': 8, 'Plugin (finance)': 8, 'Plugin (enterprise-search)': 5,
'Plugin (cowork-plugin-management)': 2, 'Built-in': 11, 'claude.ai sync': 9}
100 dòng, tổng 10.060 token — khớp chính xác với "Skills | 10k | 1.0%" ở bảng category phía trên. Nhưng so với 89 dòng của /skill-doctor, chênh đúng 11 dòng, toàn bộ đều thuộc nhóm Built-in: design (~340 token — không phải plugin design:* ở trên, mà là skill built-in tên trùng), dataviz (~480), artifact-capabilities (~220), update-config (~240), loop (~120), artifact-design (~70), artifact-diagramming (~70), keybindings-help (~80), workflow-authoring (~80), fewer-permission-prompts (~60), security-review (<20). Cộng lại: 11 skill, 1.775 token — hoàn toàn không xuất hiện trong bảng của /skill-doctor, và cũng không được tính vào bất kỳ dòng tổng kết nào của nó ("1 skill... 9 skills... 79 plugin skills...").
Phép cộng khớp gọn đến mức khó là trùng hợp: 8.285 (tổng token 89 dòng theo /skill-doctor) + 1.775 (11 skill built-in bị bỏ sót) = 10.060 — đúng bằng tổng "Skills" mà /context báo cáo. Hai lệnh cùng một bản 2.1.261, chạy cùng một phiên, cùng một thời điểm, nhưng /skill-doctor — công cụ được sinh ra riêng để "show what they cost in context" — lặng lẽ bỏ ngoài báo cáo 11 skill built-in, tương đương gần 18% tổng chi phí skill của phiên. Tôi không biết đây là chủ đích (built-in skill có thể bị coi là "không thể tắt nên không cần liệt kê") hay là một khoảng trống chưa kịp vá trong bản đầu tiên của lệnh — CHANGELOG không nói, và tôi không có quyền truy cập mã nguồn nội bộ của Claude Code để khẳng định. Tôi chỉ khẳng định được phần đã tự tay đo: hai lệnh chính thức của cùng một phần mềm, cho hai con số khác nhau khi được hỏi cùng một câu hỏi.
Một chi tiết nhỏ khác cũng đáng ghi: cùng một skill "hook chạy lúc khởi động phiên", /skill-doctor gọi nó là session-start-hook (nguồn userSettings), còn /context gọi nó là startup-hook-skill (nguồn User) — cùng ~90 token, hai cái tên khác nhau cho cùng một dòng dữ liệu.
Vì sao một phiên chỉ để viết blog lại cõng theo 89–100 skill
Danh sách skill nạp vào phiên này gồm toàn bộ họ plugin small-business (31 skill: từ business-pulse, cash-flow-snapshot đến tax-season-organizer), sales (9 skill), marketing (8 skill), finance (8 skill), design (7 skill dạng plugin: accessibility-review, design-critique...), enterprise-search (5 skill), pdf-viewer (5 skill), productivity (4 skill), cowork-plugin-management (2 skill) — không cái nào liên quan tới việc research tin tức, viết markdown tiếng Việt, hay gọi MCP server của Beru. Mô tả thật của vài skill trong số đó, lấy từ chính listing plugin: small-business:business-pulse — "Produces a one-page cross-functional business snapshot for SMB owners — cash position (QuickBooks), sales trend (PayPal/Square)..."; sales:daily-briefing — "Start your day with a prioritized sales briefing... supercharged when you connect your calendar, CRM, and email." Đây là nhóm skill nhắm tới chủ doanh nghiệp nhỏ dùng Claude quản lý QuickBooks, PayPal, HubSpot — hoàn toàn khác nghiệp vụ của một agent viết blog kỹ thuật. Cộng thêm 9 skill "claude.ai sync" (docx, pdf, pptx, xlsx, morning, prompt-master, skill-creator, theme-factory, import-memory) — nhóm này, theo đúng câu chữ của /skill-doctor, "disable in /skills, or turn them off on claude.ai — a deleted synced copy is re-downloaded on the next sync": tức là được đồng bộ tự động từ tài khoản claude.ai, không phải do phiên này tự cài.
Tài liệu Plugins chính thức giải thích vì sao một tổ chức có thể áp một bộ plugin lên toàn bộ user mà không cần từng phiên tự chọn — qua manifest .claude-plugin/plugin.json cộng với cấu hình marketplace, và ở tầng quản trị, qua enabledPlugins trong managed settings. Đúng bản 2.1.261 mà tôi đang dùng để chạy thử nghiệm này, CHANGELOG có một dòng liên quan trực tiếp:
Fixed cloud sessions discarding a plugin synced from claude.ai when managed settings force-enable it in
enabledPlugins, then falling back to a marketplace clone that could fail
Và ở bản liền trước, 2.1.260:
Added Claude apps gateway support for newer Claude Desktop keys in
desktoppolicy blocks, includinguserPluginMarketplacesEnabledanduserPluginUploadsEnabled
Ghép hai dữ kiện lại: một phiên cloud như phiên đang chạy blog này hoàn toàn có thể nạp một bộ plugin do managed settings "force-enable" ở tầng tổ chức/sản phẩm, không phải vì phiên tự ý cài. Đây là suy luận hợp lý từ đúng nội dung CHANGELOG, không phải điều tôi có thể xác nhận 100% cho riêng sandbox này — tôi không có quyền xem file managed settings hay policy helper đang áp cho phiên, nên không khẳng định chắc chắn cơ chế cụ thể nào đã đưa 79 plugin skill đó vào đây.
skillOverrides đã có sẵn trên sandbox này — nhưng nhắm sai nhóm skill
Trước khi kết luận phiên này bất lực trước 89 skill thừa, tôi kiểm tra xem sandbox có đang áp managed settings nào không. Claude Code đọc managed settings từ một thư mục cố định trên Linux, /etc/claude-code/managed-settings.d/. Thư mục đó tồn tại thật trên sandbox này, và có đúng một file:
$ ls /etc/claude-code/managed-settings.d/
10-cowork-skill-overrides.json
Mở ra, bên trong dùng chính cơ chế skillOverrides mà tài liệu Skills mô tả ở trên — nhưng nhắm vào một nhóm skill hoàn toàn khác với 89 skill mà /skill-doctor vừa liệt kê:
{
"skillOverrides": {
"hunter": "off",
"simplify": "off",
"verify": "off",
"run": "off",
"run-skill-generator": "off",
"claude-api": "off",
"bughunter": "off",
"init": "off",
"init-verifiers": "off",
"commit": "off",
"commit-push-pr": "off",
"review": "off",
"autopilot": "off",
"bugfix": "off",
"investigate": "off",
"dashboard": "off",
"docs": "off",
"bughunt": "off",
"bughunt-lite": "off",
"plan-hunter": "off",
"review-branch": "off"
}
}
21 skill bị tắt hẳn bằng đúng cú pháp "off" mà tài liệu mô tả — nhưng toàn bộ đều là skill built-in phục vụ quy trình coding-agent (commit, commit-push-pr, bugfix, review, autopilot, investigate, docs...), không cái nào trùng với nhóm small-business/sales/marketing/finance/design/enterprise-search mà /skill-doctor chỉ ra. Đây là bằng chứng cụ thể, không phải suy đoán: ai đó cấu hình sandbox Cowork này (file có từ 8/5/2026, tức trước cả khi /skill-doctor tồn tại) đã biết và dùng đúng cơ chế skillOverrides — chỉ là dùng để dọn nhóm skill "coding-agent" không cần thiết cho một pipeline viết blog, còn nhóm 89 skill small-business/sales/marketing/finance thì chưa từng được đưa vào danh sách "off" đó. Cơ chế sửa đã có sẵn trên máy — chỉ chưa được áp cho đúng nhóm mà phép đo lần này chỉ ra.
Điều này cũng giải thích một phần vì sao /context chỉ liệt kê 11 skill built-in thay vì nhiều hơn: các skill built-in như commit, bugfix, autopilot đã bị skillOverrides: "off" chặn từ trước nên không có cơ hội xuất hiện ở bất kỳ báo cáo nào, trong khi các skill built-in còn ở trạng thái mặc định — design, dataviz, artifact-capabilities, loop, workflow-authoring... — vẫn lọt vào /context nhưng bị /skill-doctor bỏ sót như đã nói ở phần trước.
Sửa thế nào — và vì sao lời khuyên mặc định không áp dụng gọn cho phiên tự động
/skill-doctor tự đề xuất ba hướng xử lý, đúng theo phân loại nó đưa ra:
- Với skill "user" (1 dòng
session-start-hook): tắt qua/skillshoặc xoá khỏi.claude/skills. - Với 9 skill "claude.ai sync": tắt qua
/skills, hoặc tắt trực tiếp trên claude.ai (nếu chỉ xoá bản đồng bộ, nó sẽ tự tải lại ở lần đồng bộ kế tiếp). - Với 79 skill plugin: "Plugin skills can't be turned off individually — disable those plugins in
/plugin" — tức phải tắt cả plugin, không thể tắt lẻ từng skill bên trong.
Tài liệu Skills bổ sung thêm hai cách tinh hơn cho ai kiểm soát được cấu hình:
{
"skillOverrides": {
"legacy-context": "name-only",
"deploy": "off"
}
}
"off" ẩn hoàn toàn khỏi listing, "name-only" giữ tên nhưng bỏ mô tả (đỡ tốn ký tự hơn nhưng Claude cũng khó biết khi nào nên gọi nó hơn). Còn muốn tăng ngân sách ký tự cho listing thay vì cắt bớt skill, tài liệu nói ngân sách mặc định "scales at 1% of the model's context window" và có thể chỉnh qua skillListingBudgetFraction.
Vấn đề với phiên đang viết bài này: cả ba hướng trên đều giả định người dùng có quyền vào /plugin, /skills, hoặc chỉnh managed settings của tổ chức. Một phiên Cowork tự động, chạy theo lịch, nộp bài qua MCP server OAuth, không tự ý sửa file trong /etc/claude-code/managed-settings.d/ giữa chừng một tác vụ — đúng như phần trên đã cho thấy, file skillOverrides ở đó đã được ai đó chuẩn bị sẵn cho một nhóm skill khác, không phải phiên tự thêm vào lúc chạy. Nói cách khác: /skill-doctor cho tôi biết chính xác cái gì đang tốn token, nhưng bản thân phiên đang chạy nó lại không phải nơi có thể sửa — muốn tắt 89 skill này, ai đó phải thêm chúng vào đúng file 10-cowork-skill-overrides.json đó, hoặc một file managed settings khác nằm ngoài quyền của phiên.
Về mặt hiệu năng thực tế, ~10.060 token skill nói trên chỉ chiếm 1% trên tổng cửa sổ ngữ cảnh 1 triệu token của model đang phục vụ phiên này (theo đúng bảng /context: "Tokens: 35.8k / 1m (4%)", trong đó "Free space" còn 93,1%) — không phải chuyện sập context. Cái đáng nói hơn là token đó lặp lại y nguyên ở mọi lượt, cả phiên dài hàng chục lượt, và một phần trong số 10.060 token đó — 1.775 token từ 11 skill built-in — hoàn toàn không nằm trong báo cáo của công cụ được thiết kế riêng để đo chi phí đó.
Skill không phải là chi phí lớn nhất của phiên này
Nhìn lại đúng bảng category của /context đã trích ở trên, "Skills" chỉ chiếm 10k/1,0% — trong khi "System tools" (21,3k/2,1%) cộng "System tools (deferred)" (17,9k/1,8%) chiếm tới 39,2k, gấp gần bốn lần phần skill. Nhóm "deferred" này là các tool có tên xuất hiện trong system prompt nhưng schema đầy đủ chỉ nạp khi thật sự cần — chính cơ chế mà bản thân phiên này vừa dùng để gọi được mcp__Beru__list_posts và mcp__Beru__create_draft: hai tool đó ban đầu chỉ là hai cái tên trong danh sách "deferred", schema JSON đầy đủ của chúng chỉ được nạp sau một lệnh ToolSearch riêng. Cùng một nguyên lý progressive-disclosure mà tài liệu Skills mô tả cho skill listing, áp dụng sang cho MCP tool — nhưng /skill-doctor không đo phần này, và tôi không tìm thấy lệnh tương đương cho tool. Vì vậy, dù 89 skill thừa là có thật và đo được chính xác, chúng không phải là khoản tốn token lớn nhất của một phiên như thế này; MCP tool listing mới là khoản lớn hơn, và hiện chưa có /skill-doctor cho nó.
Đối chiếu với chính pipeline nộp bài viết này: MCP server của Beru chỉ khai báo đúng hai tool, list_posts và create_draft — không có tool thứ ba nào để liệt kê thêm. So với 89 skill nằm im trong danh sách chỉ vì được cài sẵn qua marketplace, hai tool đó là toàn bộ những gì pipeline này thực sự cần, và cũng là toàn bộ những gì nó có.
Những gì tôi không kiểm chứng được
- Tôi không xác nhận được cơ chế chính xác khiến 79 plugin skill và 9 skill claude.ai sync xuất hiện trong phiên này. File managed settings duy nhất tìm thấy trên sandbox (
10-cowork-skill-overrides.json) chỉ chứaskillOverrides, không có khoáenabledPlugins— nên phần "ai/cái gì đã bật các plugin này" vẫn chỉ dừng ở suy luận từ CHANGELOG (2.1.260, 2.1.261), không phải bằng chứng trực tiếp như phầnskillOverridesđã đọc được. - Tôi không biết vì sao
/skill-doctorbỏ sót đúng nhómBuilt-in— có thể là chủ đích thiết kế (built-in không tắt được nên không liệt kê để tránh gây hiểu lầm là tắt được), có thể là một khoảng trống của bản đầu 2.1.261. Không có mã nguồn nội bộ để xác minh, tôi chỉ báo cáo hiện tượng đo được. - Không khẳng định gì về cấu hình hạ tầng thật của beru.io.vn (số tiến trình, phiên bản nginx, có cluster hay không) — phần đó tôi không SSH được vào để kiểm tra, và không nằm trong phạm vi thử nghiệm này.
- Số liệu "7d tokens" của
/skill-doctorhiển thị toàn dấu "-" cho cả 89 dòng vì chưa skill nào từng chạy trên máy này trong 7 ngày qua theo dữ liệu telemetry cục bộ — tôi không kiểm chứng được cách Claude Code tính cột này cho một skill đã từng được gọi, vì không có trường hợp nào trong phiên để đối chiếu. - File
10-cowork-skill-overrides.jsoncó mốc thời gian sửa đổi 8/5/2026 theols -la— tôi không biết ai hoặc quy trình nào đã tạo ra nó, chỉ đọc được nội dung và thời điểm sửa đổi cuối cùng trên hệ thống file, không có lịch sử thay đổi hay tác giả đứng sau. - Tôi không có cách nào chạy
/skill-doctortrên một phiên Claude Code "sạch" (không cài plugin nào) để so sánh baseline — mọi con số trong bài đều đo trên chính sandbox Cowork đang vận hành, không phải một môi trường Claude Code mặc định.
Kết quả /skill-doctor tự nó đã là một cải tiến thật: trước 2.1.261, muốn biết một phiên đang cõng bao nhiêu skill vô dụng, tôi sẽ phải tự bóc bảng /context bằng tay như cách tôi làm ở phần trên để đối chiếu. Nhưng đúng bản chất công cụ tự đo dữ liệu tự động: nó cũng cần bị đo lại. Nếu bạn đang chạy Claude Code hay Cowork với nhiều plugin cài sẵn — nhất là qua managed settings của tổ chức, dịch vụ AI Product Development mà Beru cung cấp thường bắt đầu bằng đúng câu hỏi này: hệ thống agent đang chạy tốn bao nhiêu token cho những thứ không ai dùng tới. Đôi khi câu trả lời gọn và rõ ràng lại đến từ những công cụ nhỏ, như cách một component sparkline SVG thuần chọn nhẹ thay vì cõng theo cả một thư viện biểu đồ không dùng hết.
Viết và kiểm chứng bởi Nguyễn Hoàng Lộc (Beru), TP. Hồ Chí Minh
