Claude Code 2.0.41–2.0.44: Từ Hooks, Skills đến Permission Modes (Tất cả những gì bạn cần biết)

2490
31-12-2025
Claude Code 2.0.41–2.0.44: Từ Hooks, Skills đến Permission Modes (Tất cả những gì bạn cần biết)

Tuy nhiên trên thực tế bạn có thể sẽ gặp phải: context truyền tải không mượt giữa các agent, các dialog xin quyền xuất hiện ở mọi bước, và những skill bạn dày công cấu hình lại không tự động được load cho subagent. Cuối cùng, bạn phải tự tay “dẫn dắt” dữ liệu đi từ agent này sang agent khác, chẳng khác gì quay lại năm 2023.

3 bản phát hành sau đó (2.0.41 → 2.0.43), Anthropic đã âm thầm tung ra những bản sửa lỗi khiến workflow multi-agent thực sự usable. Đây không phải các tính năng để marketing mà các cải tiến production workflow thực sự giải quyết đúng những vấn đề mà cộng đồng gặp phải.

Dưới đây là những gì đã thay đổi và cách áp dụng ngay lập tức.

Thách thức của workflow Multi-Agent

Các lập trình viên xây dựng pipeline subagent vì những lý do cụ thể: tách biệt context giúp tránh nhiễu lẫn nhau, các agent chuyên biệt cấp domain theo từng lĩnh vực, và xử lý song song giúp tăng tốc các tác vụ phức tạp. Về mặt kiến trúc, mọi thứ đều hợp lý.

Vấn đề nằm ở việc kết nối giữa các agent. Bạn có thể nhận được một bản đặc tả rất ổn từ agent PM, nhưng rồi lại phải copy-paste thủ công sang context của agent architect. Mỗi lần chuyển tool là mỗi lần bị ngắt mạch bởi các prompt xin cấp quyền. Những skill bạn đã cấu hình cho agent chính thì sao? Subagent không thể dùng được nếu bạn không tự tay load lại.

Một team triển khai thực tế đã ghi nhận rõ nỗi đau này trong hệ thống Claude Code chạy production của họ. Pipeline PM → Architect → Implementer vẫn hoạt động, nhưng đòi hỏi sự can thiệp thủ công liên tục. Mỗi lần bàn giao giữa các agent là một lần sao chép transcript, load lại skill và cấu hình lại quyền truy cập. Workflow tồn tại, nhưng chi phí vận hành rất cao.

Các bản phát hành từ 2.0.41 đến 2.0.43 đã khắc phục những vấn đề này trên ba khía cạnh chính: độ thông minh của hook, quản lý quyền, và tích hợp skills. Hãy cùng phân tích từng phần với những ví dụ thực tế mà bạn có thể áp dụng ngay hôm nay.

Cải tiến Hook: Điều phối thật sự trơn tru

Hook SubagentStart Event (2.0.43)

Hook SubagentStart mới sẽ được kích hoạt ngay khi một subagent khởi tạo, trước khi nó bắt đầu thực hiện bất kỳ công việc nào. Đây là thời điểm lý tưởng để bạn nạp thêm context, cấu hình environment, hoặc kiểm tra các điều kiện tiên quyết.

Ví dụ thực tế: Tự động load context dự án

Thay vì phải copy-paste spec giữa các agent, bạn có thể dùng SubagentStart để tự động nạp context dự án ngay khi subagent bắt đầu.

{

"hooks": {

"SubagentStart": [{

"hooks": [{

"type": "command",

"command": "echo \"Project: E-commerce API\nStack: Node.js 18 + PostgreSQL 15\nDocs: ./docs/api-standards.md\""

}]

}]

}

}

Mỗi subagent khi khởi động đều tự động nhận được context này. Member chịu trách nhiệm database sẽ biết ngay phiên bản PostgreSQL đang dùng. Người implement API sẽ thấy được vị trí tài liệu tiêu chuẩn. Không cần briefing thủ công.

Metadata SubagentStop được nâng cấp (2.0.42)

Phiên bản 2.0.42 đã bổ sung hai trường cực kỳ quan trọng cho hook SubagentStop:

  • agent_id
  • agent_transcript_path

Những bổ sung này giải quyết triệt để bài toán bàn giao context giữa các agent.

Giờ đây, bạn có thể xâu chuỗi các agent bằng chính transcript của agent trước đó:

{

"hooks": {

"SubagentStop": [{

"hooks": [{

"type": "command",

"command": "cat $AGENT_TRANSCRIPT_PATH >> .claude/pipeline-context.jsonl"

}]

}]

}

}

Mô hình hoạt động:

Architect đưa ra quyết định → transcript được ghi lại → implementer đọc các quyết định đó → triển khai theo đúng định hướng. Không còn copy-paste thủ công.

Trường agent_id cho phép bạn định tuyến đầu ra của từng agent tới các đích khác nhau.

Một ví dụ workflow trong các dự án thực tế:

  • Agent security auditor chạy (chỉ đọc, tạo ra các phát hiện)
  • Hook SubagentStop lưu transcript vào .claude/security-findings.json
  • Implementer đọc các phát hiện và sửa lỗi
  • Test generator đọc các bản sửa và viết test hồi quy

Đường dẫn transcript cung cấp cho bạn một file JSONL có cấu trúc, chứa toàn bộ cuộc hội thoại của agent. Bạn có thể parse, biến đổi, rồi đưa vào agent tiếp theo.

Bàn giao hoàn toàn tự động, không cần can thiệp thủ công.

Stop Hook dựa trên Prompt với Model tuỳ chỉnh (2.0.41)

Trước phiên bản 2.0.41, các stop hook sử dụng Haiku để đánh giá, cách này nhanh nhưng khả năng suy luận hạn chế.

Giờ đây, bạn có thể chỉ định model cụ thể:

{

"hooks": {

"Stop": [{

"hooks": [{

"type": "prompt",

"model": "claude-sonnet-4-20250514",

"prompt": "Evaluate if implementation meets all acceptance criteria from spec. Check: API endpoints match spec, error handling comprehensive, tests cover edge cases. Return {\"decision\": \"approve\"} if complete, {\"decision\": \"block\", \"reason\": \"specific gaps\"} if incomplete."

}]

}]

}

}

Khi nào nên dùng từng model

  • Haiku: Các kiểm tra đơn giản (file có tồn tại không, test có pass không, format có hợp lệ không)
  • Sonnet: Các kiểm tra phức tạp (đã đáp ứng yêu cầu chưa, có tuân thủ design pattern không, đã bao phủ edge case chưa)
  • Opus: Các quyết định có độ quan trọng cao (review bảo mật, tuân thủ kiến trúc, mức độ sẵn sàng đưa lên production)

Ví dụ có thể dùng Sonnet cho stop hook của các agent refactor. Haiku không đủ tin cậy để phát hiện liệu refactor có phá vỡ các contract hành vi tinh vi hay không. Sonnet bắt được những lỗi đó trước khi bạn có thể phải mất thời gian debug.

tool_use_id Tracking (2.0.43)

Trường tool_use_id trong các hook PreToolUse và PostToolUse mang lại khả năng truy vết chính xác tuyệt đối.

Khi debug các pipeline multi-agent, bạn cần biết chính xác tool call nào, ở agent nào, đã gây ra sự cố.

# Hook that logs tool usage with IDs

{

"hooks": {

"PostToolUse": [{

"matcher": "*",

"hooks": [{

"type": "command",

"command": "echo \"$(date -Iseconds)|$AGENT_ID|$TOOL_NAME|$TOOL_USE_ID\" >> .claude/tool-audit.log"

}]

}]

}

}

Điều này tạo ra một audit trail hoàn chỉnh: timestamp, agent nào, tool nào, ID duy nhất.

Khi có sự cố, chỉ cần grep theo tool_use_id là bạn có thể lần ngược lại toàn bộ luồng xử lý.

Cách này có thể giúp tiết kiệm hàng giờ debug trong một pipeline mà agent implementer đang đọc output kiến trúc cũ của architect.

Permission Modes: Kiểm soát chi tiết theo từng agent

Phiên bản 2.0.43 bổ sung trường permissionMode trong frontmatter của agent. Trường này cho phép bạn kiểm soát quyền hạn theo từng agent, tách biệt hoàn toàn khỏi các thiết lập quyền toàn bộ.

Ba chế độ quyền:

  • manual: Yêu cầu phê duyệt cho mọi lần sử dụng công cụ
  • acceptEdits: Tự động chấp nhận các thao tác Read/Edit, nhưng vẫn hỏi quyền với Write/Delete
  • acceptAll: Toàn quyền tự động, agent có thể sử dụng mọi công cụ mà không cần xác nhận

Read-Only Security Auditor

---

name: security-auditor

description: Reviews code for security vulnerabilities. Use proactively after any auth/crypto/API changes.

permissionMode: manual

tools: Read, Grep, Glob

---

You are a security-focused code reviewer specializing in Node.js and PostgreSQL.

When invoked:

1. Search for authentication/authorization code

2. Check for SQL injection vectors

3. Verify input sanitization

4. Analyze crypto usage

5. Report findings with severity levels

Never modify code. Only analyze and report.

Tại sao phải làm thủ công? Quá trình review bảo mật không nên tự động chỉnh sửa bất cứ thứ gì. Bạn có thể muốn review mọi khuyến nghị trước khi thay đổi code.

Trusted Test Generator

---

name: test-generator

description: Generates comprehensive test suites. Use after implementing new features or fixing bugs.

permissionMode: acceptAll

tools: Read, Write, Bash

---

You are a test automation specialist using Jest and Playwright.

When invoked:

1. Analyze the implementation

2. Generate unit tests for business logic

3. Create integration tests for API endpoints

4. Write e2e tests for critical user paths

5. Run the test suite to verify

Aim for 80%+ coverage with meaningful tests.

Tại sao lại chọn acceptAll? Việc tạo tập tin kiểm thử có rủi ro thấp nhưng số lượng tạo file lớn. Việc reiview thủ công 50 tập tin kiểm thử sẽ làm giảm năng suất đáng kể. Bạn có thể tin tưởng hệ thống, và kiểm tra lại sau khi hoàn tất.

Cautious Legacy Modernizer

---

name: legacy-modernizer

description: Refactors legacy code to modern patterns. Use for technical debt reduction.

permissionMode: acceptEdits

tools: Read, Edit, Bash

---

You are an expert at incremental refactoring without breaking behavior.

When invoked:

1. Analyze legacy code patterns

2. Propose modern alternatives

3. Refactor incrementally (small, testable changes)

4. Run existing tests after each change

5. Document breaking changes clearly

Preserve behavior. No "improvements" that change functionality.

Tại sao nên chọn acceptEdits? Vì cho phép chỉnh sửa code hiện có (rủi ro thấp) nhưng sẽ hỏi ý kiến người dùng trước khi tạo/xóa tệp (rủi ro cao hơn). Việc này cân bằng giữa tốc độ và độ an toàn.

Decision Framework

Chọn permission mode dựa trên mức độ ảnh hưởng (blast radius):

  • Manual: Triển khai production, migration cơ sở dữ liệu, thay đổi API contract
  • AcceptEdits: Refactor, linting, cập nhật tài liệu
  • AcceptAll: Sinh test, định dạng code, phân tích log

Ban đầu thử nghiệm chạy tất cả agent ở chế độ manual ngay từ đầu. Sau khi xác minh hành vi ổn định qua 5–10 lần chạy thì mới nâng các agent đáng tin cậy lên acceptEdits hoặc acceptAll.

Skills Auto-Loading 

Trường skills trong frontmatter của phiên bản 2.0.43 đã giải quyết triệt để vấn đề nạp skill thủ công.

Chỉ cần khai báo những skills mà subagent cần, hệ thống sẽ tự động load khi agent khởi chạy.

Trước khi có tính năng này, workflow thường như sau:

User: "Use db-architect subagent"

User: "Load the postgres-optimization skill"

User: "Now load the query-analysis skill"

User: "Okay, now analyze the schema"

Sau khi có tính năng:

---

name: db-architect

description: PostgreSQL database architect. Use for schema design and query optimization.

skills: postgres-optimization, query-analysis

tools: Read, Bash

permissionMode: acceptEdits

---

User: "Use db-architect subagent to analyze the schema"

(Skills auto-load, immediate analysis starts)

Workflow thực tế: Trình tạo React Component

Một ví dụ thực tế từ dự án:

---

name: component-generator

description: Generates accessible React components with TypeScript. Use for new UI features.

skills: react-patterns, accessibility-guidelines, typescript-strict

tools: Read, Write, Edit

permissionMode: acceptEdits

---

You are a senior React developer specializing in accessible component design.

When invoked:

1. Analyze requirements and design constraints

2. Generate TypeScript component with proper types

3. Include ARIA attributes for accessibility

4. Write Storybook stories for visual testing

5. Create unit tests with React Testing Library

Follow the loaded skills for patterns and guidelines.

Khi agent này khởi động:

  • Skill react-patterns được nạp: các pattern theo hướng composition, cách dùng hooks, quản lý state
  • Skill accessibility-guidelines được nạp: ARIA role, điều hướng bằng bàn phím, hỗ trợ trình đọc màn hình
  • Skill typescript-strict được nạp: quy tắc typing nghiêm ngặt, branded types, discriminated unions

Agent có đầy đủ mọi thứ cần thiết. Không cần nạp thủ công, không thiếu context.

Skills Discovery

Skills có thể đến từ ba nguồn:

  • Cá nhân: ~/.claude/skills/ (các pattern riêng của bạn)
  • Dự án: .claude/skills/ (dùng chung cho team, được quản lý bằng Git)
  • Plugin: Tự động phát hiện từ các plugin đã cài đặt

Những best practice mà bạn có thể cân nhắc:

  • Giữ danh sách skill tập trung (tối đa 3–5 skill cho mỗi agent)
  • Các skill nên bổ trợ lẫn nhau, không chồng chéo
  • Test agent có và không có skill để xác nhận skill đó thực sự cần thiết

Thử nghiệm duy trì một skill react-patterns chứa các quy ước component của team. Tất cả agent frontend đều tự động nạp skill này.

Kết quả là tính nhất quán toàn bộ codebase, không cần prompt thủ công.

Những fix bug thực sự quan trọng

Một số hướng dẫn cụ thể phù hợp với những vấn đề thực tế:

  • Nested CLAUDE.md Loading (2.0.43)

Các dự án monorepo có nhiều file CLAUDE.md hiện chạy chính xác. Khi bạn @-mention file, cấu hình nested được nạp đúng và kết quả là chạy ổn cho cấu trúc repo microservices.

  • NotebookEdit Cell Positioning (2.0.43)

Các cell Jupyter không còn bị chèn sai vị trí khi cell ID trùng với pattern cell-N. Trước đây lỗi này thường xuyên phá vỡ workflow phân tích dữ liệu.

  • Slash Command Loading (2.0.41)

Các command trong user settings không còn bị load hai lần. Label phân biệt rõ user settings và project settings. Sửa lỗi nhỏ, nhưng chấm dứt tình trạng trùng tên command.

Tổng hợp toàn bộ: Quy trình hoàn chỉnh

Đây là một quy trình multi-agent sẵn sàng cho prodution, sử dụng tất cả các tính năng này:

# .claude/agents/product-manager.md

---

name: product-manager

description: Creates detailed user stories with acceptance criteria

skills: user-story-templates, acceptance-criteria

permissionMode: manual

tools: Read, Write

---

# .claude/agents/architect.md

---

name: architect

description: Designs technical solutions following system patterns

skills: system-design, api-patterns, database-patterns

permissionMode: acceptEdits

tools: Read, Write, Edit, Bash

---

# .claude/agents/implementer.md

---

name: implementer

description: Implements features with comprehensive tests

skills: typescript-patterns, testing-frameworks, error-handling

permissionMode: acceptAll

tools: Read, Write, Edit, Bash

---

// .claude/settings.json

{

"hooks": {

"SubagentStart": [{

"hooks": [{

"type": "command",

"command": "echo \"Project: API v2\nStack: Node.js + PostgreSQL\nStandards: ./docs/STANDARDS.md\""

}]

}],

"SubagentStop": [{

"hooks": [{

"type": "command",

"command": "echo \"$(date -Iseconds)|$AGENT_ID|complete\" >> .claude/pipeline-log.txt && cat $AGENT_TRANSCRIPT_PATH >> .claude/context/$AGENT_ID-latest.jsonl"

}]

}]

}

}

Chạy workflow:

  • PM agent tạo user story (quyền manual, story template skill được tự động load)
  • SubagentStop hook lưu transcript của PM vào .claude/context/product-manager-latest.jsonl
  • Architect đọc output từ PM, thiết kế giải pháp (acceptEdits mode, design skills auto-load)
  • SubagentStop hook tiếp tục ghi lại các quyết định về kiến trúc
  • Implementer đọc thiết kế của architect, tiến hành build & test (acceptAll để tăng tốc, các skill triển khai được tự động load)
  • Toàn bộ audit trail được lưu trong .claude/pipeline-log.txt

Lợi ích mang lại:

  • Không cần load skill thủ công
  • Phân quyền phù hợp cho từng vai trò
  • Có audit trail đầy đủ thông qua hooks
  • Context tự động chảy giữa các agent
  • Mỗi agent chỉ chứa đúng công cụ và kỹ năng cần thiết

Hành động cần làm: Nâng cấp workflow của bạn hôm nay

Các bước thực hiện ngay:

  • Cập nhật lên phiên bản 2.0.43:npm install -g @anthropic-ai/claude-code@latest
  • Thêm permissionMode cho các agent của bạn:

# Edit your most-used subagent nano ~/.claude/agents/your-agent.md # Add: permissionMode: acceptEdits

Khai báo skills trong phần frontmatter:

--- name: your-agent skills: your-domain-skill, your-patterns-skill ---

Triển khai hook SubagentStart:

{"hooks": {

"SubagentStart": [{

"hooks": [{

"type": "command",

"command": "cat .claude/project-context.txt"

}]

}]

}}

Test phần setup của bạn

# Verify version claude --version # Test subagent with skills echo "Use your-agent to analyze this file" | claude # Check hook execution tail -f ~/.claude/logs/hooks.log

Multi-Agent có thể thực sự thực hiện được

Đây không phải là những tính năng mang tính cách mạng. Thực ra là những cải tiến nhỏ nhưng đủ tạo ra khác biệt giữa một “bản demo cho vui” và một “quy trình làm việc hằng ngày”.

Mô hình mà Anthropic đang theo đuổi rất rõ ràng:

  • Hook để điều phối (orchestration)
  • Permission mode để đảm bảo an toàn
  • Skills để đáp ứng tính chuyên môn

Từ đó từng bước giải quyết những “nút thắt” lâu nay của phát triển multi-agent. Các phiên bản 2.0.41–2.0.43 đã biến pipeline subagent trở nên thực sự khả thi cho môi trường production.

Bài viết tham khảo từ tác giả Alireza Rezvani, hiện đang giữ vai trò CTO tại một startup HealthTech ở Berlin, đồng thời thiết kế các hệ thống phát triển AI cho đội ngũ kỹ thuật và sản phẩm.

SHARE