Mục tiêu học tập

Sau bài này, bạn sẽ có thể:
  • ✅ Giải thích agentic loop là gì và tại sao nó khác hoàn toàn với chat AI thông thường
  • ✅ Hiểu context window là gì ở mức tổng quan (overview) — để không bị bất ngờ khi Claude “quên”
  • ✅ Nắm 3 permission modes và khi nào nên dùng cái nào
  • ✅ Phân biệt Claude Code với Cursor, Copilot và các AI autocomplete tools khác
  • ✅ Nhận ra agentic loop đang diễn ra trong thực tế khi quan sát Claude làm việc

Lần đầu mở Claude Code

Hãy nhớ lại lần đầu bạn dùng GitHub Copilot hay Cursor. Bạn gõ một vài ký tự. Editor gợi ý tiếp theo. Bạn nhấn Tab để accept. Nó gợi ý thêm. Bạn tiếp tục gõ. Vòng lặp đó — bạn gõ, AI phản ứng, bạn gõ tiếp — diễn ra trong vài giây, liên tục, reactive. Giờ nhớ lại lần đầu bạn mở Claude Code. Terminal xuất hiện. Bạn gõ một yêu cầu: “Thêm tính năng export CSV vào admin dashboard.” Bạn nhấn Enter. Và Claude Code… bắt đầu tự làm việc. Nó đọc file này. Grep cái kia. Đọc thêm 3 file nữa. Sửa code. Chạy test. Test fail — nó quay lại sửa. Chạy test lần nữa. Test pass. Nó hỏi bạn: “Tôi đã implement xong. Bạn có muốn commit không?” Bạn ngồi đó, không gõ gì, mà feature đã xong. Đó là khoảnh khắc mà nhiều developer mô tả là “jaw drop” — cú sốc nhận thức rằng đây không phải autocomplete. Không phải AI gợi ý code cho bạn gõ. Đây là một agent tự chạy, tự nghĩ, tự kiểm tra, và chỉ quay lại hỏi bạn khi thực sự cần. Đội ngũ Anthropic đã nói thẳng: “Gone from punch cards to prompts” — chúng ta đã đi từ thẻ đục lỗ đến prompt. Giao diện lập trình đang thay đổi căn bản, không phải chỉ nhanh hơn hay thông minh hơn, mà thay đổi về bản chất. Và khi ai đó hỏi tại sao Claude Code lại tốt đến vậy, câu trả lời thường là: “Đây là công cụ mà mọi người ở Anthropic dùng hàng ngày.” Không phải demo. Không phải showcase. Đây là tool mà team đã build cho chính mình — và giờ chia sẻ với thế giới. Bài này sẽ giải thích tại sao nó hoạt động khác biệt đến vậy. Bắt đầu từ khái niệm cốt lõi nhất: agentic loop.

Agentic Loop — Trái tim của Claude Code

Claude Code khác chat AI ở một điểm căn bản: nó không chỉ trả lời — nó hành động trong vòng lặp cho đến khi task hoàn thành. Agentic loop gồm 4 phase:

Giải thích từng phase

Phase 1 — Gather Context (Thu thập ngữ cảnh)

Claude không code ngay khi nhận prompt. Nó hỏi model: “Để hoàn thành task này, tôi cần biết gì?” Model trả về text hoặc một tool call (ví dụ: đọc file auth.ts, grep từ khóa “webhook”, tìm test file liên quan). Claude thực thi tool call đó, đọc kết quả, rồi tiếp tục gather thêm nếu cần. Đây là điểm mấu chốt: Claude dùng agentic search — glob, grep, find — giống hệt cách một developer mới onboard codebase. Không dùng indexing hay embedding phức tạp. Tìm kiếm chủ động, thực tế.

Phase 2 — Take Action (Hành động)

Khi đã đủ ngữ cảnh, Claude thực hiện hành động cụ thể: sửa file, tạo file mới, chạy bash command, gọi API. Mỗi action là một tool call có kết quả thực — không phải gợi ý lý thuyết.

Phase 3 — Verify (Kiểm tra)

Claude không tin kết quả của chính mình. Nó chạy test, đọc output, kiểm tra xem action vừa làm có đạt mục tiêu prompt ban đầu không. Nếu test fail hoặc output sai — nó không báo cáo thất bại và dừng. Nó quay lại Phase 1, gather thêm context về lỗi, rồi thử lại. Vòng lặp tiếp tục cho đến khi một trong hai điều xảy ra: (a) task đạt yêu cầu → Claude báo cáo done và chờ prompt tiếp theo, hoặc (b) Claude gặp blocker thực sự cần input từ bạn → nó hỏi.

Vai trò của bạn trong loop

Bạn không phải ngồi chờ thụ động. Trong suốt loop, bạn có thể:
  • Add context — bổ sung thông tin Claude chưa biết (“À, cái endpoint đó dùng auth v2, không phải v1”)
  • Steer — đổi hướng nếu Claude đang đi sai (“Đừng sửa file đó, tập trung vào routes.ts thôi”)
  • Interrupt — dừng loop nếu thấy Claude đang làm gì đó bạn không muốn
Đây là sự khác biệt lớn với chat AI thông thường: Claude Code chủ động và bạn điều hướng, thay vì bạn reactive với từng gợi ý một.

Context Window — Bộ nhớ làm việc của Claude

Trong khi loop đang chạy, Claude cần “nhớ” toàn bộ hành trình: prompt của bạn, file đã đọc, kết quả tool call, quyết định đã đưa ra. Tất cả điều đó sống trong context window. Điểm mấu chốt cho bài này (overview):
  • Context window có giới hạn — 200.000 token trên Anthropic models (~150.000 từ, hoặc ~80-100 file code cỡ trung bình)
  • Mọi action trong loop đều tiêu thụ context: đọc file, chạy test, web search…
  • Khi gần đầy, Claude Code tự động compact — tóm tắt những gì không còn cần thiết để tiếp tục làm việc
  • Bạn cũng có thể chủ động /compact (giữ tóm tắt task hiện tại) hoặc /clear (xóa sạch, bắt đầu session mới)
Bài này chỉ giới thiệu khái niệm. Nếu bạn muốn hiểu sâu hơn — khi nào compact, khi nào clear, cách đọc /context, 5 chiến thuật tiết kiệm context — xem Bài 2.5: Quản lý Context.

Tools — Xương sống của mọi agent

Điều gì khiến Claude Code làm được những gì nó làm? Tools. Hầu hết AI assistant hiện tại hoạt động theo mô hình đơn giản: nhận text → trả text. Không có gì ở giữa. Bạn paste code, nó trả code. Bạn hỏi, nó đáp. Tools phá vỡ mô hình đó. Tools cho phép Claude quyết định khi nào cần thực thi code để tiến gần hơn đến mục tiêu.
Nhóm toolTool tiêu biểu
File toolsRead, Write, Edit, MultiEdit
Search toolsGlob (tìm file), Grep (tìm content)
Execute toolsBash (chạy command, test, script)
Web toolsWebSearch, WebFetch
Agent toolsSpawn subagent (forked context)
MCP toolsSlack, Linear, GitHub, custom…
Claude dùng semantic understanding để quyết định khi nào gọi tool nào. Nó không hardcode “đọc file trước, grep sau” — nó tự suy luận từ context: “Để biết project dùng test framework nào, tôi cần đọc package.json” → gọi Read tool. “Để tìm tất cả nơi dùng deprecated function, tôi cần grep” → gọi Grep tool. Mỗi tool call trong loop là một action — có input, có output thực, và output đó đi vào context để Claude dùng tiếp. Đây là lý do Claude có thể “đọc codebase” mà không cần bạn paste gì cả: nó tự gọi tools, tự đọc kết quả, tự lặp lại. MCP (Model Context Protocol) cho phép extend thêm tools từ third-party sources. Xem Bài 2.10: MCP để hiểu cách kết nối Slack, Linear, GitHub, hay tool nội bộ của team bạn.

Permission Modes — Bạn kiểm soát mức độ tự chủ

Claude Code có 3 permission modes, toggle bằng Shift+Tab:
ModeHành viKhi nào dùng
DefaultHỏi trước mọi file edit và shell commandTask lạ, code production, auth, payment, migration
Auto Accept (file only)File edit không hỏi; shell command vẫn hỏiTask routine, refactor nhỏ, sau khi đã align plan
Plan ModeChỉ dùng read-only tools; lên kế hoạch trước khi thực thiTask lớn, cần review plan trước khi sửa code
Khi nào dùng cái nào:
  • Default — bạn mới bắt đầu với task, hoặc task đụng đến code quan trọng (auth, payment, migration). Mỗi permission prompt là cơ hội để bạn kiểm tra Claude đang làm đúng không.
  • Auto Accept (file only) — bạn đã align với Claude về plan, và task chủ yếu là sửa file (không phải chạy command có side-effect). Nhanh hơn, ít interrupt hơn.
  • Plan Mode — dùng trước khi bắt đầu task lớn. Prompt Claude lên plan, review plan, confirm hướng đi. Sau đó Shift+Tab sang Auto Accept để execute. Đây là pattern phổ biến nhất cho task trung bình đến lớn. Xem Bài 2.3: Prompt đầu tiên để học Plan Mode chi tiết.
Cảnh báo quan trọng: Tránh enable Auto Accept toàn bộ (kể cả shell commands) trừ khi bạn hoàn toàn tin tưởng task và hiểu rõ Claude đang làm gì. Một command sai trong auto-accept mode có thể gây hậu quả khó lường — xóa file, reset database, hoặc deploy sai môi trường.

So sánh: Claude Code vs Chat AI thông thường

DimensionChat AI thông thườngClaude Code
Mô hình tương tácReactive — bạn hỏi, AI trả lời từng bướcAutonomous — Claude chạy loop độc lập đến khi xong
Truy cập fileKhông có (phải paste code vào chat)Trực tiếp đọc/ghi file trong codebase
Tool callsKhông có hoặc rất hạn chếBash, file edit, glob, grep, web search, MCP…
PermissionsKhông áp dụng3 mode: Default / Auto Accept / Plan Mode
Xác minh kết quảKhông — output là text, bạn phải tự verifyCó — Claude tự chạy test, đọc output, loop lại nếu fail
Multi-step taskBạn phải chạy từng bước, copy-paste outputClaude tự chain nhiều bước, không cần can thiệp từng cái
Bộ nhớ sessionContext window ngắn, thường resetContext window 200k token, có /compact để kéo dài
SurfaceBrowser tabTerminal (và IDE terminal)
Output typeText / code snippet để bạn tự dánFile thực sự đã sửa, command đã chạy, test đã pass
Phép so sánh dễ nhớ nhất: Cursor/Copilot là cây bút bi thông minh — vẫn cần bạn cầm bút, nó chỉ gợi ý từ tiếp theo. Claude Code là người lập trình ghép cặp (pair programmer) — bạn mô tả goal, nó tự làm, và báo cáo khi xong hoặc khi cần bạn quyết định. Boris Cherny — người xây dựng Claude Code tại Anthropic — mô tả bằng phép ẩn dụ khác: “Claude là con ngựa, engineer là người cưỡi ngựa điều hướng.” Con ngựa mạnh mẽ, có thể đi xa và nhanh. Nhưng nó cần scaffolding đúng: system prompt, tools, context management, permissions — và người cưỡi biết chỉ đường.

Ví dụ thực chiến: Thêm WebP conversion vào image upload pipeline

Giả sử bạn prompt:
“Thêm WebP conversion vào image upload pipeline. Sau khi user upload ảnh, hệ thống cần tự động convert sang WebP trước khi lưu vào S3.”
Đây là agentic loop thực tế diễn ra: Bạn quan sát toàn bộ quá trình này trong terminal. Bạn có thể interrupt bất kỳ lúc nào. Bạn không phải làm gì — trừ review kết quả cuối.

Case studies theo role

Backend Engineer: Refactor authentication module

Tình huống: Auth module 3 năm tuổi, dùng JWT pattern cũ, cần migrate sang refresh token flow mới. Loop diễn ra:
  • Gather: đọc toàn bộ src/auth/ (7 file), grep “jwt.sign” + “jwt.verify”, đọc test suite
  • Action: refactor auth.service.ts và auth.middleware.ts, thêm refresh token logic
  • Verify: chạy pnpm test auth/ — 3 test fail vì test cũ chưa cover refresh token
  • Loop: đọc test cũ, viết test mới, sửa edge case expiry, chạy lại → pass
Điểm khác biệt với chat: Với ChatGPT, bạn phải paste từng file, đọc từng suggestion, tự quyết định sửa ở đâu, tự chạy test, tự đọc kết quả, paste lỗi vào chat, hỏi tiếp. Mỗi vòng tốn 3-5 phút. Với Claude Code, loop chạy tự động — bạn chỉ cần review kết quả cuối.

DevOps Engineer: Debug production incident lúc 2 giờ sáng

Tình huống: payments-api trả 503, cần hiểu nhanh root cause. Loop diễn ra:
  • Gather: đọc 1000 dòng log cuối, grep error patterns, đọc config hiện tại
  • Action (diagnose, không phải fix ngay): generate report “top 3 root cause khả thi”
  • Verify: cross-check với metrics từ tool call khác
Claude trả về 1 trang summary gọn. Bạn quyết định fix. Prompt tiếp: “Tăng connection pool size từ 10 lên 25 trong config/db.yaml.” Loop mới bắt đầu — gather (đọc config), action (sửa), verify (check YAML syntax, check service start). Xong trong 8 phút.

Designer ship code: Megan’s case study

Tình huống: Megan là Product Designer, không phải engineer. Sau khi engineer handoff feature lớn, cô muốn tự ship những “2% polish” — margin không đúng, màu hover state thiếu, focus ring chưa có. Điều này trước đây không thể xảy ra: designer không commit code. Nhưng với Claude Code:
  • Megan mô tả “Button hover state màu blue-500, nhưng spec của tôi là blue-600”
  • Claude gather: tìm file component, đọc Tailwind config, xem design token
  • Action: sửa class trong file
  • Verify: kiểm tra không có class nào override
Megan tự ship 8 polish PRs trong một ngày. Không cần chờ engineer. Đây là “new skill tree for non-technical folks” — unlock shipping mà không cần bottleneck qua kỹ thuật.

Open source contributor: Khám phá codebase lạ

Tình huống: Bạn muốn contribute vào một project 200k LOC nhưng chưa biết kiến trúc. Thay vì đọc README và lạc trong file: Prompt: “Khám phá codebase này và tóm tắt architecture trong 5 bullets. Tập trung vào: cách routing hoạt động, nơi business logic sống, và pattern test đang dùng.” Claude gather: đọc entry point, theo dõi import chain, đọc sample test files, grep routing patterns. Verify: check hiểu đúng bằng cách đọc thêm 2-3 file edge case. Trả về 5 bullets chính xác. Bạn có cái nhìn toàn cảnh trong 5 phút, thay vì 2 ngày đọc file mù quáng.

Data Engineer: ETL pipeline với built-in verification

Tình huống: Cần viết ETL pipeline đọc từ Postgres, transform dữ liệu, load vào BigQuery. Điểm mạnh của agentic loop ở đây: Mỗi bước ETL có thể verify được — số row in = số row out (sau khi deduplicate), type check từng column, null check. Claude viết pipeline, chạy với sample data nhỏ, verify output, rồi mới báo done. Không phải “tôi đã viết xong pipeline” mà là “tôi đã chạy với một tập mẫu nhỏ, output đúng, giờ bạn có thể chạy full.”

Anti-patterns — Những cách dùng sai phổ biến

Anti-pattern 1: Dùng Claude Code như chat thông thường

Triệu chứng: Bạn paste đoạn code vào prompt, hỏi “sửa cái này”, Claude sửa, bạn copy kết quả ra, dán vào file thủ công. Tại sao sai: Bạn đang bỏ qua toàn bộ vòng lặp gather-action-verify. Claude không thấy context xung quanh (file khác, import, test), nên sửa dựa trên code snippet bị cắt rời. Kết quả thường lỗi vì thiếu context. Cách đúng: Để Claude tự đọc file. Chỉ cho nó biết file nào và vấn đề là gì — nó sẽ gather context còn lại.

Anti-pattern 2: Auto-accept mọi thứ mà không đọc plan

Triệu chứng: Mỗi khi Claude đề xuất action, bạn nhấn Yes / y ngay không đọc. Tại sao sai: Agentic loop có thể đi sai hướng, đặc biệt với task phức tạp. Claude có thể interpret prompt khác ý bạn và bắt đầu sửa 15 file không liên quan. Nếu bạn không đọc plan và cứ accept, đến khi phát hiện thì code đã thay đổi nhiều. Cách đúng: Dùng Plan Mode (Shift+Tab) cho task quan trọng. Đọc plan trước khi chuyển sang execution. Chỉ auto-accept khi bạn hiểu rõ Claude đang làm gì.

Anti-pattern 3: Bỏ qua permission review vì “phiền quá”

Triệu chứng: Bạn enable Auto Accept toàn bộ (kể cả shell commands) ngay từ đầu vì không muốn bị hỏi. Tại sao sai: Một command sai trong auto-accept mode có thể xóa file, reset database, deploy sai môi trường. Claude Code cẩn thận — nhưng không hoàn hảo. Permission prompt là safety net quan trọng. Cách đúng: Default mode cho task lạ hoặc task có side-effect quan trọng. Auto Accept (chỉ file, không phải command) cho task routine. Xem chi tiết ở Bài 2.3: Prompt đầu tiên và permission modes.

Anti-pattern 4: Bị “ám” bởi tư duy autocomplete

Triệu chứng: Bạn dùng Claude Code nhưng vẫn viết prompt kiểu “tiếp tục code từ đây:”, “gợi ý tiếp theo là gì?”, “viết function tiếp theo cho tôi.” Tại sao sai: Những prompt này force Claude vào vai trò autocomplete — reactive, từng bước nhỏ, không có big picture. Claude Code mạnh nhất khi bạn mô tả goal và để nó tự chạy loop. Cách đúng: Mô tả outcome, không phải steps. Thay “viết function convert date” bằng “implement date range filter cho báo cáo, đảm bảo timezone-aware và cover edge case cuối tháng.”

Anti-pattern 5: Tin kết quả mù quáng, bỏ qua verify step

Triệu chứng: Claude báo “xong”, bạn commit ngay mà không đọc diff, không chạy lại test, không thử feature trên localhost. Tại sao sai: Loop verify của Claude dựa trên những test và check có sẵn. Nếu test coverage thấp, hoặc bug chỉ xuất hiện ở production data — Claude sẽ không phát hiện được. Cách đúng: Claude verify là first line, không phải only line. Bạn vẫn cần review diff và test trên môi trường thực. Đặc biệt cho code liên quan đến auth, payment, data migration.

Áp dụng ngay

Bài tập 1 (10 phút): Quan sát agentic loop trong thực tế

Mở Claude Code trong project bạn quen, prompt:
“Explore codebase này và tóm tắt architecture trong 5 bullets. Cho tôi biết: (1) entry point chính, (2) nơi business logic sống, (3) pattern test đang dùng, (4) dependencies quan trọng nhất, (5) điều gì sẽ là ‘gotcha’ cho developer mới.”
Trong khi Claude chạy, quan sát:
  • Nó đọc file nào đầu tiên? (Phase 1 — Gather Context)
  • Nó gọi những tool gì? (grep, glob, read…)
  • Có loop lại không? (Phase 3 verify dẫn đến gather thêm)
  • Mất bao nhiêu vòng lặp để ra kết quả?
Ghi lại quan sát vào notepad. Sau bài này, bạn sẽ thấy agentic loop rõ hơn ở mọi task.

Bài tập 2 (15 phút): Task multi-step với verify tự động

Chọn một task nhỏ nhưng multi-step trong project của bạn. Ví dụ:
  • “Thêm input validation cho form đăng ký — email format, password min 8 ký tự, username no spaces. Cập nhật test tương ứng.”
  • “Refactor hàm formatDate() hiện dùng moment.js sang date-fns. Đảm bảo tất cả caller vẫn hoạt động.”
Khi Claude chạy, để ý:
  • Claude verify bằng cách nào? (chạy test, đọc output, grep caller?)
  • Có vòng fail → fix → retry không?
  • Claude báo done sau bao nhiêu vòng?
Sau khi Claude báo xong, bạn cũng verify một lần: đọc diff, chạy test thủ công, thử feature. So sánh với những gì Claude đã verify — chỗ nào giống, chỗ nào khác?

Tóm tắt

Agentic loop là nền tảng của mọi thứ Claude Code làm. Không phải gợi ý code, không phải chatbot thông minh hơn — mà là agent tự chạy vòng lặp Gather → Action → Verify cho đến khi task hoàn thành. 3 permission modes điều chỉnh mức độ tự chủ:
  • Default: hỏi trước mỗi file edit và command
  • Auto Accept (file): sửa file không hỏi, nhưng vẫn hỏi cho command
  • Plan Mode: chỉ dùng read-only tools để lên kế hoạch trước
Claude Code khác chat AI ở 3 điểm cốt lõi:
  • Tự truy cập file — không cần bạn paste code
  • Tự verify — chạy test, đọc output, loop lại nếu fail
  • Autonomous — chạy nhiều bước liên tiếp mà không cần can thiệp
Vai trò của bạn thay đổi: từ người gõ code → người mô tả goal và review kết quả. Kỹ năng quan trọng nhất không phải gõ nhanh, mà là mô tả rõ và biết khi nào cần interrupt. Tư duy autocomplete sẽ cản bạn: nếu bạn cố dùng Claude Code như Copilot, bạn sẽ bỏ qua 80% sức mạnh của nó.

Bài tiếp theo

Bạn đã hiểu Claude Code hoạt động như thế nào. Bước tiếp theo: cài đặt và chạy lệnh đầu tiên. Bài 2.2 sẽ hướng dẫn cài đặt Claude Code trên macOS, Windows (WSL), và Linux — bao gồm cả VS Code extension, JetBrains plugin, Claude Desktop, và Web version. Có bảng so sánh các surface để bạn chọn workflow phù hợp. Muốn đi sâu hơn ngay bây giờ?
  • Bài 2.3 — Plan Mode chi tiết: cách dùng Shift+Tab để lên kế hoạch trước khi execute
  • Bài 2.5 — Context window deep dive: context window thực sự hoạt động thế nào, khi nào cần /compact vs /clear
  • Bài 2.7 — File CLAUDE.md: cách “dạy” Claude nhớ ngữ cảnh project qua các session
➡️ Bài tiếp theo: Bài 2.2 — Cài đặt Claude Code

Tài liệu tham khảo

Khoá học “Claude Code 101” — bản tiếng Việt v1.0 Bản quyền 2026 Anthropic. Mọi quyền được bảo lưu.