jvinhit//lab

Search posts

Type to search across journal entries.

↑ ↓ navigate ↵ open esc close

Claude Code từ zero đến thành thạo · Phần 2 — Agent loop và bộ tool có sẵn

Vì sao Claude Code đôi khi làm đúng ngay, đôi khi loay hoay: ba pha của agent loop, model và tool, danh sách đầy đủ tool built-in kèm cột permission, và sáu cách prompt để loop hội tụ nhanh hơn.

Sau vài ngày dùng Claude Code, ai cũng gặp cùng một câu hỏi: tại sao cùng một kiểu yêu cầu, lần này nó xử lý gọn trong một lượt, lần sau lại vòng vo sửa tới sửa lui?

Câu trả lời không nằm ở “hôm nay model ngu hơn”. Nó nằm ở agent loop — vòng lặp mà Claude Code chạy để biến một câu yêu cầu thành thay đổi trên đĩa. Hiểu vòng lặp đó, bạn sẽ biết chính xác chỗ nào trong prompt của mình đang bỏ đói nó thông tin.

Agent loop: ba pha, lặp lại tới khi xong

Khi bạn giao một task, Claude đi qua ba pha:

  1. Gather context — thu thập ngữ cảnh: tìm file, đọc code, chạy lệnh để xem trạng thái.
  2. Take action — hành động: sửa file, tạo file, chạy build.
  3. Verify results — kiểm chứng: chạy test, đọc output, đối chiếu với yêu cầu.

Ba pha này không tách bạch mà hoà vào nhau. Claude dùng tool xuyên suốt cả ba: tìm file để hiểu code, sửa file để thay đổi, chạy test để kiểm tra việc mình vừa làm.

Vòng lặp co giãn theo yêu cầu. Một câu hỏi về codebase có thể chỉ cần pha thu thập ngữ cảnh. Một bug fix đi qua cả ba pha nhiều lần. Một refactor thì nặng ở pha kiểm chứng. Claude tự quyết mỗi bước cần gì dựa trên thứ nó học được ở bước trước — xâu chuỗi hàng chục hành động và tự điều chỉnh dọc đường.

Bạn cũng nằm trong vòng lặp này. Bạn ngắt được ở bất kỳ điểm nào để lái nó sang hướng khác, bổ sung ngữ cảnh, hoặc yêu cầu thử cách khác. Claude làm việc tự chủ nhưng vẫn nghe bạn.

Hai thành phần vận hành vòng lặp: model để suy luận và tool để hành động. Claude Code đóng vai agentic harness bọc quanh Claude — nó cấp tool, quản lý context và môi trường thực thi, biến một language model thành một coding agent thật sự.

Model

Claude đọc được code ở mọi ngôn ngữ, hiểu các component nối với nhau ra sao, và suy ra cần đổi gì để đạt mục tiêu. Task phức tạp thì nó chia nhỏ thành từng bước, thực thi, rồi điều chỉnh theo thứ học được.

Có nhiều model với đánh đổi khác nhau: Sonnet làm tốt phần lớn việc coding, Opus suy luận mạnh hơn cho quyết định kiến trúc phức tạp. Đổi bằng /model giữa phiên, hoặc khởi động bằng claude --model <name>.

Khi docs viết “Claude chooses” hay “Claude decides”, chủ ngữ là model đang suy luận, không phải một luật cứng nào đó trong CLI.

Tool

Tool là thứ khiến Claude Code trở thành agentic. Không có tool, Claude chỉ trả lời bằng chữ. Có tool, Claude hành động: đọc code, sửa file, chạy lệnh, tra web, gọi dịch vụ ngoài. Mỗi lần dùng tool trả về thông tin, thông tin đó chảy ngược vào loop và định hướng quyết định kế tiếp.

Tool built-in chia thành năm nhóm, mỗi nhóm là một kiểu quyền hành:

NhómClaude làm được gì
File operationsĐọc file, sửa code, tạo file mới, đổi tên và tổ chức lại
SearchTìm file theo pattern, tìm nội dung bằng regex, khám phá codebase
ExecutionChạy lệnh shell, khởi động server, chạy test, dùng git
WebTìm kiếm web, tải tài liệu, tra cứu error message
Code intelligenceThấy type error và warning sau khi sửa, nhảy tới định nghĩa, tìm reference (cần code intelligence plugin)

Ngoài ra Claude còn có tool để sinh subagent, hỏi lại bạn, và các việc điều phối khác.

Loop trông như thế nào trong thực tế

Bạn nói “fix the failing tests”. Claude có thể:

  1. Chạy test suite để xem cái nào fail
  2. Đọc error output
  3. Tìm file source liên quan
  4. Đọc những file đó để hiểu code
  5. Sửa file để khắc phục
  6. Chạy lại test để kiểm chứng

Mỗi lần dùng tool cho Claude thông tin mới, thông tin đó quyết định bước sau. Đó chính là agent loop đang chạy.


Danh sách tool built-in

Tên tool là chuỗi chính xác bạn dùng trong permission rule, trong danh sách tool của subagent, và trong hook matcher — nên bảng này đáng để tra hơn là để nhớ.

Cột Permission cho biết tool có hỏi bạn hay không khi chạy ở Manual mode với path nằm trong thư mục làm việc.

ToolPermission
AgentNo
ArtifactYes
AskUserQuestionNo
BashYes
CronCreate, CronDelete, CronListNo
EditYes
EndConversationNo
EnterPlanModeNo
EnterWorktreeYes
ExitPlanModeYes
ExitWorktreeNo
GlobNo
GrepNo
ListAgentsNo
ListMcpResourcesToolNo
LSPNo
MonitorYes
NotebookEditYes
PowerShellYes
PushNotificationNo
ReadNo
ReadMcpResourceToolNo
RemoteTriggerNo
ReportFindingsNo
ScheduleWakeupNo
SendMessageNo
SendUserFileNo
ShareOnboardingGuideYes
SkillYes
TaskCreate, TaskGet, TaskList, TaskOutput, TaskStop, TaskUpdateNo
TodoWriteNo
ToolSearchNo
WaitForMcpServersNo

Ba điểm dễ hiểu nhầm ở bảng này:

  • Trên gói Pro, Max và Team, phiên khởi động ở auto mode — ở đó một classifier duyệt phần lớn prompt thay bạn, nên cột Permission mô tả hành vi Manual mode chứ không phải thứ bạn thấy hằng ngày.
  • Tool đọc file ghi No vẫn hỏi khi path nằm ngoài thư mục làm việc và các thư mục bổ sung. Read, Grep, Glob đều thuộc nhóm này.
  • Bash ghi Yes nhưng có ngoại lệ — một tập lệnh read-only dựng sẵn chạy mà không hỏi.

Muốn thêm tool mới thì nối một MCP server (phần 14). Muốn thêm một quy trình prompt lặp lại thì viết skill (phần 12) — skill chạy qua tool Skill sẵn có chứ không tạo thêm entry tool mới.


Claude thấy được những gì

Khi bạn chạy claude trong một thư mục, Claude Code có quyền truy cập:

  • Project của bạn — file trong thư mục hiện tại và thư mục con, cộng file ở nơi khác nếu bạn cho phép.
  • Terminal của bạn — mọi lệnh bạn chạy được: build tool, git, package manager, tiện ích hệ thống, script. Bạn làm được từ command line thì Claude cũng làm được.
  • Trạng thái git — branch hiện tại, thay đổi chưa commit, lịch sử commit gần đây.
  • CLAUDE.md — file markdown chứa chỉ dẫn, convention và ngữ cảnh riêng của project (phần 4).
  • Auto memory — những gì Claude tự ghi lại khi làm việc. 200 dòng hoặc 25KB đầu của MEMORY.md, tuỳ cái nào tới trước, được nạp ở đầu mỗi phiên.
  • Extension bạn cấu hình — MCP server, skill, subagent, và Claude in Chrome.

Vì Claude thấy cả project, nó làm việc xuyên file được. Bảo nó “fix the authentication bug”, nó tìm file liên quan, đọc nhiều file để hiểu ngữ cảnh, sửa phối hợp trên các file đó, chạy test để kiểm chứng, và commit nếu bạn yêu cầu. Đây là khác biệt căn bản với các trợ lý code inline chỉ thấy file đang mở.


Ba môi trường thực thi

Agent loop, tool và năng lực ở trên giống nhau ở mọi nơi bạn dùng Claude Code. Thứ thay đổi là code chạy ở đâu và bạn tương tác thế nào.

Môi trườngCode chạy ở đâuDùng khi
LocalMáy của bạnMặc định. Toàn quyền với file, tool và môi trường của bạn
CloudVM do Anthropic quản lý, hoặc self-hosted environment của tổ chức bạnĐẩy task đi chỗ khác, làm việc với repo không có sẵn ở máy
Remote ControlMáy của bạn, điều khiển từ trình duyệtDùng giao diện web nhưng file và quá trình thực thi vẫn ở máy bạn

Interface (terminal, desktop app, IDE extension, claude.ai/code, Remote Control, Slack, CI/CD) quyết định bạn nhìn thấy và tương tác ra sao, còn agent loop bên dưới thì y hệt.


Hai cơ chế an toàn

Claude có hai lớp bảo vệ. Phần này chỉ giới thiệu, chi tiết ở phần 7 và phần 8.

Checkpoint — sửa file là hoàn tác được. Trước khi sửa một file, Claude chụp lại nội dung hiện tại. Có gì sai thì bấm Esc hai lần để tua về trạng thái trước, hoặc bảo Claude undo. Checkpoint tách biệt với git và vẫn còn khi bạn resume cuộc hội thoại. Nó chỉ phủ thay đổi file — hành động chạm hệ thống ở xa (database, API, deployment) không checkpoint được, bạn kiểm soát chúng bằng permission mode và permission rule.

Permission mode — chọn thứ Claude làm được mà không cần hỏi. Bấm Shift+Tab để xoay vòng qua các mode:

  • Auto — một classifier duyệt phần lớn hành động ở nền và chặn cái rủi ro, thay vì hỏi bạn. Mặc định của phiên terminal và VS Code trên gói Pro, Max, Team.
  • Manual — Claude hỏi trước khi sửa file và chạy lệnh shell.
  • Accept edits — Claude sửa file và chạy các lệnh filesystem thông dụng như mkdir, mv mà không hỏi; lệnh khác vẫn hỏi.
  • Plan — Claude khám phá và đề xuất kế hoạch, không sửa file source.

Bạn cũng cho phép sẵn từng lệnh cụ thể trong .claude/settings.json để khỏi bị hỏi lặp lại — hữu ích với các lệnh tin cậy như npm test hay git status.


Sáu cách làm loop hội tụ nhanh hơn

Đây là phần đáng giá nhất của bài. Cả sáu đều là cách cấp thông tin cho pha gather context hoặc cấp tiêu chí cho pha verify — hai chỗ mà loop hay đói nhất.

1. Hỏi thẳng Claude Code về chính nó

Nó dạy được bạn cách dùng nó. Hỏi “how do I set up hooks?” hay “what’s the best way to structure my CLAUDE.md?” và nó sẽ giải thích. Hai lệnh dựng sẵn cũng dẫn bạn qua phần cấu hình:

  • /init — dẫn bạn tạo CLAUDE.md cho project
  • /doctor — chạy kiểm tra thiết lập, chẩn đoán vấn đề cài đặt và cấu hình, và sửa được luôn

2. Coi nó là cuộc hội thoại, không phải một phát ăn ngay

Bạn không cần prompt hoàn hảo. Bắt đầu bằng thứ bạn muốn, rồi tinh chỉnh:

Fix the login bug

Claude điều tra, thử một hướng. Chưa đúng thì bạn nói tiếp:

That's not quite right. The issue is in the session handling.

Claude điều chỉnh cách tiếp cận. Khi lần đầu chưa đúng, bạn không làm lại từ đầu — bạn lặp.

3. Ngắt và lái

Bạn chuyển hướng Claude bất cứ lúc nào, không cần chờ lượt chạy xong:

  • Bấm Esc để dừng Claude ngay. Tool call đang chạy bị huỷ và Claude chờ chỉ dẫn tiếp theo. Nếu bạn có tin nhắn xếp hàng, Claude Code gửi chúng tiếp theo.
  • Gõ một câu chỉnh và bấm Enter để gửi mà không dừng tool đang chạy. Claude đọc nó ngay khi hành động hiện tại xong, rồi điều chỉnh trước khi quyết bước kế.

4. Cụ thể ngay từ đầu

Prompt ban đầu càng chính xác, bạn càng ít phải lái. Nhắc tên file cụ thể, nêu ràng buộc, trỏ tới pattern mẫu:

The checkout flow is broken for users with expired cards.
Check src/payments/ for the issue, especially token refresh.
Write a failing test first, then fix it.

Prompt mơ hồ vẫn chạy, nhưng bạn tốn thời gian lái hơn.

5. Cho Claude thứ để tự đối chiếu

Claude làm tốt hơn hẳn khi nó tự kiểm được việc mình làm. Đưa test case, dán screenshot UI mong muốn, hoặc định nghĩa output bạn cần:

Implement validateEmail. Test cases: 'user@example.com' → true,
'invalid' → false, 'user@.com' → false. Run the tests after.

Với việc liên quan giao diện, dán screenshot bản thiết kế và yêu cầu Claude đối chiếu bản nó dựng với ảnh đó.

6. Khám phá trước khi cài đặt

Với vấn đề phức tạp, tách nghiên cứu khỏi viết code. Bấm Shift+Tab tới khi status bar hiện ⏸ plan mode on, rồi bảo Claude phân tích codebase trước:

Read src/auth/ and understand how we handle sessions.
Then create a plan for adding OAuth support.

Xem plan, tinh chỉnh qua hội thoại, rồi mới cho nó cài đặt. Cách hai pha này cho kết quả tốt hơn hẳn so với nhảy thẳng vào code.

Và một nguyên tắc bao trùm: giao việc, đừng ra lệnh từng bước

Hãy nghĩ như giao việc cho một đồng nghiệp có năng lực. Cấp ngữ cảnh và định hướng, rồi tin nó lo phần chi tiết:

The checkout flow is broken for users with expired cards.
The relevant code is in src/payments/. Can you investigate and fix it?

Bạn không cần chỉ định đọc file nào hay chạy lệnh gì. Claude tự tìm ra.


Điều gì tiếp theo

Bạn đã biết loop chạy thế nào và tool nào có sẵn. Nhưng loop chạy trong một không gian hữu hạn: context window. Đó là ràng buộc lớn nhất của mọi phiên làm việc dài, và là nội dung của phần 3.

Nguồn

Docs gốc cập nhật thường xuyên; khi có mâu thuẫn, tin bản tiếng Anh.