Bạn đã cài skill, đã biết hook là gì, đã cấu hình settings.json. Rồi bạn thấy trong settings.json có mục enabledPlugins với những cái tên như hookify, typescript-lsp, frontend-design. Và câu hỏi tự nhiên xuất hiện: plugin là cái gì, nó khác skill chỗ nào?

Câu trả lời ngắn: skill là một file markdown duy nhất, một instruction. Plugin là một bundle nhiều thành phần liên quan được đóng gói lại, cài đặt qua marketplace hoặc git, có thể chứa skill, hook, agent, output style và MCP server trong cùng một đơn vị.

Bài này phân tích sự khác biệt đó, giải thích marketplace hoạt động ra sao, và đưa ra heuristic để quyết định khi nào dùng plugin có sẵn, khi nào tự build, khi nào chỉ cần một skill đơn.

Skill là gì, nhắc lại nhanh

Skill là một file SKILL.md nằm trong ~/.claude/skills/<name>/. Nó có frontmatter namedescription, phần body là instruction markdown. Khi bạn gõ /tên-skill, CC đọc file đó và thực thi theo instruction.

Một skill đơn lẻ không tự thêm hook, không tự cài MCP server, không kéo thêm agent nào. Nó là instruction thuần. Để skill đó được phát hiện và hiển thị trong hệ thống, bạn chỉ cần tạo file và để nó trong đúng thư mục. Không cần restart.

Xem thêm cách viết skill tại bài 7.

Plugin là gì

Plugin là một thư mục có cấu trúc chuẩn, được đóng gói và phân phối như một đơn vị. Cấu trúc chuẩn của một plugin:

plugin-name/
├── .claude-plugin/
│   └── plugin.json        # metadata bắt buộc
├── .mcp.json              # MCP server config (tùy chọn)
├── commands/              # slash commands (tùy chọn)
├── agents/                # agent definitions (tùy chọn)
├── skills/                # skill definitions (tùy chọn)
├── hooks/                 # hooks config (tùy chọn)
└── README.md

Một plugin có thể chứa một, nhiều, hoặc tất cả các thành phần đó. Ví dụ thực tế:

PluginThành phần bên trong
typescript-lspMCP server (Language Server Protocol bridge)
hookifyhooks, skills, agents, slash commands
security-guidancehooks (PreToolUse trên Edit/Write)
frontend-designskills
skill-creatorskills, agents, references

hookify là ví dụ điển hình. Bên trong nó có: một agent conversation-analyzer.md phân tích conversation để tìm pattern cần block, một thư mục commands/ với các slash command /hookify:list, /hookify:configure, /hookify:help, một skill writing-rules/SKILL.md, và một thư mục hooks/ với hooks.json. Không có cách nào bundle tất cả đó vào một SKILL.md duy nhất.

So sánh trực tiếp

Skill đơn:
+---------------------------+
|  SKILL.md                 |
|  (1 file, instruction)    |
+---------------------------+

Plugin:
+---------------------------+
|  plugin.json (metadata)   |
|  skills/ (0..n skills)    |
|  hooks/ (0..n hooks)      |
|  agents/ (0..n agents)    |
|  commands/ (slash cmds)   |
|  .mcp.json (MCP server)   |
+---------------------------+

Khác biệt bản chất:

SkillPlugin
Đơn vị1 SKILL.mdThư mục với manifest
Cài đặtTạo file thủ công/plugin install hoặc marketplace
Thành phầnInstruction onlySkill + hook + agent + MCP + command
Enable/disableXóa/tạo fileenabledPlugins trong settings.json
DistributionCopy fileMarketplace, git URL, local path
VersioningKhông cóCó (gitCommitSha, version field)

Cài plugin

Có ba cách:

Từ marketplace qua CLI:

/plugin install hookify@claude-plugins-official
# hoặc browse tại /plugin > Discover

Enable/disable trong settings.json:

{
  "enabledPlugins": {
    "typescript-lsp@claude-plugins-official": true,
    "hookify@claude-plugins-official": true,
    "telegram@claude-plugins-official": false
  }
}

false không xóa plugin, chỉ disable nó. Plugin vẫn nằm trong ~/.claude/plugins/cache/, bạn có thể re-enable bất cứ lúc nào mà không cần cài lại.

Local plugin (chưa lên marketplace):

cc --plugin-dir /path/to/your/plugin

Dùng khi đang phát triển plugin hoặc dùng plugin nội bộ không muốn public.

Marketplace

Claude Code có một marketplace chính thức tại claude-plugins-official. Marketplace này có hai khu:

  • /plugins: plugins do Anthropic develop và maintain. Ví dụ: typescript-lsp, hookify, security-guidance, skill-creator, frontend-design.
  • /external_plugins: third-party và community plugins. Marketplace hiện có plugins như github, gitlab, linear, playwright, terraform, firebase, asana, discord, và nhiều nữa.

Để submit plugin vào marketplace, third party điền form tại clau.de/plugin-directory-submission. Anthropic review trước khi approve.

Lưu ý marketplace doc ghi rõ: Anthropic không control nội dung của MCP server hay file bên trong các plugin, không thể verify chúng hoạt động đúng hay không. Với plugin từ external section, nên đọc kỹ source trước khi cài.

Khi nào dùng plugin có sẵn vs tự build

Heuristic đơn giản:

Dùng plugin có sẵn khi:

  • Use case phổ biến và có plugin đã làm tốt rồi. Ví dụ: TypeScript type checking (typescript-lsp), security reminder khi edit file (security-guidance), tạo hook tự động (hookify).
  • Không cần customization sâu về workflow hay domain knowledge của team.
  • Bạn không muốn maintain code. Plugin được update tự động từ marketplace.

Tự build plugin khi:

  • Workflow custom của team, không ai khác có nhu cầu giống vậy. Ví dụ: bundle skill + hook riêng cho một loại project cụ thể, hoặc MCP server kết nối vào internal API.
  • Cần đóng gói 3-5 thành phần liên quan để phân phối trong team. Nếu chỉ một người dùng và một instruction, skill đơn là đủ.
  • Cần versioning và có nhiều người dùng cùng cần update đồng thời.

Chỉ cần skill đơn khi:

  • Một instruction, một use case, chỉ bạn dùng.
  • Không cần hook, không cần agent, không cần MCP.
  • Prototype nhanh để xem idea có hoạt động không trước khi đầu tư build plugin.

Khi nào chuyển từ skill sang plugin

Quy tắc ngón tay cái: nếu để workflow hoạt động đúng bạn cần 3 thứ trở lên trong danh sách này, cân nhắc đóng gói thành plugin thay vì quản lý rời rạc:

  • Skill instruction
  • Hook để enforce behavior
  • Agent chuyên biệt
  • MCP server để add tool
  • Slash commands riêng biệt
  • Output style cho use case đó

Ví dụ: bạn build một workflow “code review toàn diện” gồm một skill instruction, một agent reviewer, một hook chặn commit nếu review chưa xong, và một slash command /review riêng. Đây là plugin candidate. Quản lý 4 thứ đó rời rạc rất nhanh thành “tôi không nhớ file nào ở đâu”.

Ngược lại, nếu bạn chỉ muốn thêm một rule “đừng dùng console.log trong TypeScript files”, một dòng trong CLAUDE.md hoặc một skill đơn là đủ. Không cần plugin.

Anti-pattern cần tránh

Cài plugin không track. Plugin cài xong nằm trong settings.json. Sau vài tháng bạn có 12 plugin enabled, phần lớn không nhớ dùng làm gì. Behavior của CC thay đổi kỳ lạ do plugin interact với nhau. Giải pháp: chỉ enable plugin bạn thực sự dùng. Disable ngay những cái không còn relevant (telegram@claude-plugins-official: false là ví dụ thực tế từ setup của tôi vì đã có bridge custom riêng).

Plugin overlap với CLAUDE.md rule. Nếu bạn đã viết security rule trong ~/.claude/rules/ và cũng enable security-guidance plugin, cả hai chạy đồng thời. CC nhận hai luồng instruction cho cùng tình huống. Thường không crash, nhưng behavior có thể inconsistent và hard to debug. Chọn một nguồn duy nhất cho mỗi loại rule.

Enable plugin nặng cho session không cần. typescript-lsp chạy một language server process riêng. Nếu bạn đang làm Python project, plugin đó chỉ tốn resource. CC không tự tắt plugin theo ngôn ngữ file (trừ khi bạn dùng path-scoped rules). Chủ động disable khi không cần.

Dùng plugin để làm thứ CLAUDE.md làm được tốt hơn. Một số người cài plugin “code style enforcer” trong khi một vài dòng trong rules/code-style.md là đủ. Plugin phù hợp khi cần bundle nhiều thứ, không phải thay thế cho CLAUDE.md.

Thực tế setup

Nhìn vào settings.json thực tế, enabled plugins:

"enabledPlugins": {
  "typescript-lsp@claude-plugins-official": true,
  "hookify@claude-plugins-official": true,
  "skill-creator@claude-plugins-official": true,
  "security-guidance@claude-plugins-official": true,
  "telegram@claude-plugins-official": false,
  "frontend-design@claude-plugins-official": true
}

Mỗi cái có lý do cụ thể: typescript-lsp cho TypeScript project; hookify để tạo hook mới dễ hơn thay vì edit hooks.json thủ công; skill-creator để viết skill mới và đánh giá chất lượng; security-guidance cho PreToolUse check tự động; frontend-design cho workflow UI. telegram bị disable vì có bridge custom riêng làm tốt hơn.

Con số 5 plugin enabled là hợp lý. Nếu bạn thấy mình enable 10+ plugin mà không có reason rõ ràng cho từng cái, đó là signal cần cleanup.

Tóm tắt và bài tiếp theo

  • Plugin là bundle gồm nhiều thành phần (skill, hook, agent, MCP, command) đóng gói lại. Khác với skill đơn là một SKILL.md duy nhất.
  • Cài từ marketplace qua /plugin install <name>@claude-plugins-official, enable/disable qua enabledPlugins trong settings.json.
  • Dùng plugin có sẵn cho use case phổ biến. Tự build khi workflow custom của team cần bundle 3-5 thành phần liên quan. Chỉ cần skill đơn nếu chỉ có một instruction.
  • Anti-pattern: cài nhiều plugin không track, plugin overlap với CLAUDE.md rule, enable plugin nặng cho session không cần.

Bài 12 chuyển sang chủ đề memory, cụ thể là cơ chế auto-memory: CC lưu và đọc lại thông tin giữa các session như thế nào, file memory nằm ở đâu, và khi nào nó giúp ích thực sự so với khi nào trở thành noise.

Nếu bạn đang cân nhắc build một skill phức tạp đến mức cần đóng gói thành plugin, bài 24 sẽ đi sâu vào production-grade skill và khi nào cần leo thang lên thành plugin.


Bài thuộc series Claude Code từ zero. Series plan tại bài giới thiệu.