Claude Code là một agentic assistant chạy trong terminal (và trong IDE, desktop app, web). Chương này giải thích cơ chế bên trong: agentic loop, cách nó đọc/sửa code, context window là gì và vì sao nó là ràng buộc quan trọng nhất, cùng triết lý làm việc để khai thác hiệu quả.
Claude Code là gì (và không là gì)
- Không phải inline code assistant chỉ thấy file hiện tại. Khi bạn chạy
claudetrong một thư mục, nó thấy toàn bộ project và làm việc xuyên nhiều file. - Là agentic harness bao quanh Claude model: cung cấp tools, context management, và execution environment để biến một language model thành một coding agent thực thụ.
- Làm được bất cứ việc gì bạn làm từ command line: viết docs, chạy build, search file, nghiên cứu — không chỉ code.
Claude Code có quyền truy cập gì
Khi chạy claude trong một thư mục, Claude Code có:
| Truy cập | Chi tiết |
|---|---|
| Project | File trong thư mục + subdirectory; file nơi khác nếu bạn cấp permission |
| Terminal | Mọi lệnh bạn chạy được: build tool, git, package manager, script |
| Git state | Branch hiện tại, uncommitted changes, commit history gần đây |
| CLAUDE.md | Instructions/conventions/context nạp mỗi session |
| Auto memory | Learnings Claude tự lưu; 200 dòng đầu hoặc 25KB đầu của MEMORY.md nạp mỗi session |
| Extensions | MCP servers, skills, subagents, Claude in Chrome |
The agentic loop
Khi bạn giao một task, Claude làm việc qua ba pha, đan xen nhau chứ không tuyến tính:
- Gather context — search file, đọc code để hiểu.
- Take action — edit file, chạy lệnh, tạo file.
- Verify results — chạy test, kiểm tra kết quả.
Loop thích ứng với yêu cầu:
- Một câu hỏi về codebase có thể chỉ cần gather context.
- Một bug fix cycle qua cả ba pha nhiều lần.
- Một refactor cần verify nhiều.
Claude quyết định mỗi bước cần gì dựa trên những gì học được từ bước trước, chain hàng chục action và tự sửa hướng dọc đường. Bạn cũng nằm trong loop: có thể interrupt bất cứ lúc nào để đổi hướng, thêm context, hay yêu cầu cách khác.
Loop được vận hành bởi hai thành phần: models (reason) và tools (act).
Models
- Claude Code dùng Claude models để hiểu code và reason về task.
- Nhiều model với tradeoff khác nhau: Sonnet xử lý tốt phần lớn coding task; Opus reasoning mạnh hơn cho quyết định kiến trúc phức tạp.
- Đổi model:
/modeltrong session, hoặc khởi động vớiclaude --model <name>.
Tools
Tools là thứ khiến Claude Code "agentic". Không có tools, Claude chỉ trả text. Built-in tools chia làm năm nhóm:
| Nhóm | Claude làm gì |
|---|---|
| File operations | Đọc file, edit code, tạo file mới, rename/reorganize |
| Search | Tìm file theo pattern, search content bằng regex, khám phá codebase |
| Execution | Chạy shell command, khởi động server, chạy test, dùng git |
| Web | Search web, fetch docs, tra error message |
| Code intelligence | Xem type error/warning sau edit, jump to definition, find references (cần code intelligence plugin) |
Ngoài ra còn có tools để spawn subagent, hỏi bạn câu hỏi, và các orchestration task khác.
Ví dụ loop khi bạn nói "fix the failing tests":
1. Chạy test suite để xem cái gì fail
2. Đọc error output
3. Search các source file liên quan
4. Đọc file để hiểu code
5. Edit file để fix
6. Chạy lại test để verify
Mỗi tool use trả về thông tin feed lại vào loop, định hướng bước tiếp theo.
Mở rộng base capabilities
Built-in tools là nền tảng. Lớp extension nằm trên core loop:
- Skills — mở rộng kiến thức Claude, nạp on demand.
- MCP — kết nối tới external services.
- Hooks — tự động hóa workflow theo lifecycle event.
- Subagents — offload task sang context riêng.
(Chi tiết cách chọn extension: xem chương về Extending Claude Code.)
Cách Claude đọc và sửa code
- Vì Claude thấy cả project, khi bạn nói "fix the authentication bug", nó tự search file liên quan, đọc nhiều file để hiểu context, edit phối hợp xuyên file, chạy test, và commit nếu bạn yêu cầu.
- Bạn không cần chỉ định file nào đọc hay lệnh nào chạy — đó là điểm khác biệt so với inline assistant.
Environments và interfaces
Loop, tools, capabilities giống nhau ở mọi nơi. Chỉ khác nơi code chạy và cách bạn tương tác.
| Environment | Code chạy ở đâu | Dùng khi |
|---|---|---|
| Local | Máy bạn | Mặc định. Full access file, tool, environment |
| Cloud | VM do Anthropic quản lý | Offload task, làm repo không có local |
| Remote Control | Máy bạn, điều khiển từ browser | Dùng web UI nhưng execution + file vẫn ở local |
Interfaces: terminal, desktop app, IDE extensions (VS Code, JetBrains), claude.ai/code, Remote Control, Slack, CI/CD. Interface đổi cách bạn thấy/tương tác; agentic loop bên dưới giống hệt.
Sessions
- Claude Code lưu conversation local dạng plaintext JSONL dưới
~/.claude/projects/— mỗi message, tool use, result. - Trước khi thay đổi code, nó snapshot file bị ảnh hưởng để có thể revert.
- Sessions độc lập: mỗi session mới bắt đầu với context window mới, không có history của session trước. Persist learnings qua session bằng auto memory; persist instructions bằng CLAUDE.md.
Resume và fork
| Hành động | Lệnh | Kết quả |
|---|---|---|
| Resume | claude --continue / claude --resume | Mở lại cùng session ID, append message mới |
| Fork | --fork-session / /branch | Copy history sang session ID mới, bản gốc không đổi |
- Session gắn với directory. Chạy song song nhiều session bằng git worktrees (mỗi branch một directory).
- Khi switch branch, Claude thấy file của branch mới, nhưng conversation history giữ nguyên.
Context window
Đây là ràng buộc quan trọng nhất cần hiểu.
Context window chứa mọi thứ Claude biết về session:
- Conversation history
- File contents Claude đã đọc
- Command outputs
- CLAUDE.md + auto memory
- Loaded skills
- System instructions
Nhiều thứ trong đó không bao giờ xuất hiện trên terminal của bạn — ví dụ nội dung file Claude đọc, bạn chỉ thấy dòng "Read auth.ts" nhưng 2.400 token nội dung thì chỉ Claude thấy.
Cái gì nạp trước khi bạn gõ gì
Trước prompt đầu tiên, nhiều thứ đã vào context (số token dưới đây chỉ mang tính minh họa):
| Thành phần | Ghi chú |
|---|---|
| System prompt | Instruction cốt lõi về behavior, tool use, formatting. Luôn nạp đầu tiên, bạn không thấy |
| Auto memory (MEMORY.md) | 200 dòng đầu hoặc 25KB đầu (cái nào tới trước) |
| Environment info | Working directory, platform, shell, OS, git repo hay không |
| MCP tools (deferred) | Chỉ tool names; full schema deferred, nạp on demand qua tool search |
| Skill descriptions | Mô tả một dòng của mỗi skill; full content chỉ nạp khi dùng |
~/.claude/CLAUDE.md | Global preferences, áp dụng mọi project |
| Project CLAUDE.md | Convention, build command, architecture — file quan trọng nhất bạn tạo được |
Điểm mấu chốt: prompt của bạn rất nhỏ so với những gì đã nạp sẵn. Phần lớn context là project knowledge, không phải lời bạn.
Cái gì tốn context khi Claude làm việc
- File reads chiếm phần lớn context usage. Càng đọc nhiều file càng đầy nhanh.
- Path-scoped rules trong
.claude/rules/cópaths:frontmatter tự nạp khi Claude đọc file khớp pattern. - Hooks (ví dụ PostToolUse chạy prettier) chỉ vào context nếu trả về qua
hookSpecificOutput.additionalContext. Plain stdout trên exit 0 chỉ ghi debug log, không vào context. - Tool output như
npm testvào context đầy đủ dù terminal chỉ hiện tóm tắt.
Khi context đầy: auto-compaction
Claude Code tự quản lý context khi gần chạm giới hạn — session không bị kết thúc:
- Xóa tool outputs cũ trước.
- Nếu cần, summarize conversation.
- Request và key code snippet được giữ; instruction chi tiết từ đầu conversation có thể mất.
Vì vậy: đặt persistent rule vào CLAUDE.md, đừng dựa vào conversation history.
Nếu một file/output quá lớn khiến context đầy lại ngay sau mỗi summary, Claude Code dừng auto-compact sau vài lần và báo lỗi thay vì loop.
Cái gì survive sau compaction
| Cơ chế | Sau compaction |
|---|---|
| System prompt & output style | Không đổi; không thuộc message history |
| Project-root CLAUDE.md, unscoped rules | Re-inject từ disk |
| Auto memory | Re-inject từ disk |
Rules có paths: frontmatter | Mất đến khi đọc lại file khớp |
| Nested CLAUDE.md trong subdirectory | Mất đến khi đọc lại file trong dir đó |
| Invoked skill bodies | Re-inject, cap 5.000 token/skill và 25.000 token tổng; drop cũ nhất trước |
| Hooks | Không áp dụng; hook chạy như code, không phải context |
Skill body bị truncate từ đầu file khi vượt cap — nên đặt instruction quan trọng nhất gần đầu SKILL.md.
Điều khiển context chủ động
/context— xem breakdown live theo category, gợi ý optimization, hiển thị CLAUDE.md/auto memory nào đã nạp./memory— mở và edit các file đó./mcp— kiểm tra token cost per server./compact focus on ...— compact với hướng, giữ thứ bạn chọn thay vì đoán./clear— xóa sạch khi chuyển sang việc không liên quan.- Thêm section "Compact Instructions" vào CLAUDE.md để kiểm soát cái gì được giữ.
Skills và subagents để tiết kiệm context
- Skills nạp on demand. Đặt
disable-model-invocation: trueđể skill (nhất là loại có side effect như commit/deploy) hoàn toàn nằm ngoài context đến khi bạn invoke thủ công bằng/<name>. - Subagents có context riêng biệt, tách hẳn conversation chính. Chúng đọc hàng nghìn token file, nhưng chỉ trả về một summary ngắn (ví dụ đọc 6.100 token file, trả về 420 token). Đây là lý do subagent giúp cho session dài.
Context window lớn hơn
Nếu cần cửa sổ lớn hơn thay vì conversation nhỏ hơn: Fable 5, Sonnet 5, Opus 4.6+, và Sonnet 4.6 hỗ trợ context window 1 triệu token. Sonnet 5 chạy 1M mặc định không cần chọn variant; các model khác chọn variant [1m]. Compaction hoạt động y hệt ở giới hạn lớn hơn.
An toàn: checkpoints và permissions
Hai cơ chế an toàn: checkpoint để undo file change, permission để kiểm soát Claude làm gì mà không hỏi.
Checkpoints
- Mọi file edit đều reversible. Trước khi edit, Claude snapshot nội dung hiện tại.
- Undo: nhấn
Eschai lần để rewind, hoặc bảo Claude undo. - Checkpoint tách khỏi git, vẫn còn khi resume conversation. Chỉ cover file change — action ảnh hưởng remote (database, API, deployment) không checkpoint được, nên Claude hỏi trước khi chạy lệnh có side effect ra ngoài.
Permission modes
Nhấn Shift+Tab để cycle qua các mode:
| Mode | Hành vi |
|---|---|
| Manual | Hỏi trước mọi file edit và shell command |
| Accept edits | Tự edit file + chạy lệnh filesystem thường (mkdir, mv); vẫn hỏi lệnh khác |
| Plan | Khám phá và đề xuất plan, không edit source file |
| Auto | Đánh giá mọi action với background safety check |
Cho phép lệnh cụ thể trong .claude/settings.json để khỏi hỏi mỗi lần (ví dụ npm test, git status). Settings scope từ policy toàn tổ chức xuống preference cá nhân.
Giữ Claude làm việc tới đích với /goal
/goal (cần v2.1.139+) đặt một completion condition; Claude tiếp tục làm việc qua các turn mà không cần bạn prompt mỗi bước. Sau mỗi turn, một small fast model (mặc định Haiku) kiểm tra điều kiện đã đạt chưa. Nếu chưa, Claude bắt đầu turn mới thay vì trả control lại bạn. Goal tự clear khi điều kiện đạt.
/goal all tests in test/auth pass and the lint step is clean
- Set goal khởi động turn ngay, dùng chính điều kiện làm directive.
/goalkhông đổi permission — ghép với auto mode để turn chạy unattended./goal(không argument) → xem status (điều kiện, thời gian chạy, số turn, token, lý do gần nhất)./goal clear(hoặcstop/off/reset/none/cancel) → xóa goal.
Viết condition tốt — evaluator chỉ judge dựa trên những gì Claude đã surface trong conversation (nó không tự chạy lệnh hay đọc file), nên condition phải là thứ output của Claude chứng minh được:
- Một measurable end state: test result, build exit code, file count, empty queue.
- Một stated check: cách chứng minh, ví dụ "
npm testexits 0". - Constraints: thứ không được đổi trên đường tới, ví dụ "no other test file is modified".
- Bound thời gian bằng clause như
or stop after 20 turns. Tối đa 4.000 ký tự.
So sánh các cách giữ session chạy:
| Cách | Turn tiếp theo bắt đầu khi | Dừng khi |
|---|---|---|
/goal | Turn trước xong | Model xác nhận điều kiện đạt |
/loop | Một khoảng thời gian trôi qua | Bạn dừng, hoặc Claude thấy xong |
| Stop hook | Turn trước xong | Script/prompt của bạn quyết định |
Triết lý dùng hiệu quả
Cách bạn tương tác quyết định chất lượng kết quả nhiều hơn bất kỳ flag nào.
Nó là một cuộc hội thoại
Không cần prompt hoàn hảo. Bắt đầu với điều bạn muốn, rồi tinh chỉnh:
Fix the login bug
[Claude điều tra, thử gì đó]
That's not quite right. The issue is in the session handling.
Khi lần đầu chưa đúng, bạn iterate, không làm lại từ đầu.
Interrupt và steer
- Nhấn
Esc— dừng Claude ngay lập tức; tool call đang chạy bị hủy, Claude chờ lệnh tiếp. - Gõ correction rồi
Enter— gửi mà không dừng tool đang chạy; Claude đọc ngay khi action hiện tại xong và điều chỉnh.
Be specific upfront
Prompt càng chính xác, càng ít lần phải sửa. Reference file cụ thể, nêu constraint, chỉ 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.
Cho Claude thứ để verify
Claude làm tốt hơn khi tự kiểm tra được việc mình:
Implement validateEmail. Test cases: 'user@example.com' → true,
'invalid' → false, 'user@.com' → false. Run the tests after.
Với việc UI: paste screenshot design, bảo Claude so implementation với nó.
Explore before implementing
Với vấn đề phức tạp, tách research khỏi coding. Dùng plan mode (Shift+Tab hai lần):
Read src/auth/ and understand how we handle sessions.
Then create a plan for adding OAuth support.
Review plan, tinh chỉnh qua hội thoại, rồi cho Claude implement. Two-phase này cho kết quả tốt hơn nhảy thẳng vào code.
Delegate, don't dictate
Nghĩ như giao việc cho một đồng nghiệp giỏi. Cho context và hướng, rồi tin Claude tự lo 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?
Không cần chỉ file nào đọc hay lệnh nào chạy — Claude tự tìm ra.
Nhờ chính Claude Code giúp
- Hỏi trực tiếp: "how do I set up hooks?", "what's the best way to structure my CLAUDE.md?"
/init— hướng dẫn tạo CLAUDE.md cho project./doctor— checkup cài đặt/cấu hình, có thể tự fix.
Tóm tắt tư duy nền tảng
- Claude Code = model + tools trong một agentic loop gather → act → verify, tự chain và tự sửa hướng.
- Nó thấy cả project, làm việc xuyên file — hãy delegate, đừng micromanage.
- Context window là ràng buộc trung tâm. File reads tốn nhiều nhất; persistent rule đặt vào CLAUDE.md; dùng subagent/skill để giữ context sạch.
- Checkpoints + permission modes cho bạn an toàn khi để Claude tự chủ.
- Kết quả tốt đến từ prompt cụ thể, thứ để verify, tách research khỏi implement, và iterate qua hội thoại.
Xem thêm
content/en/docs/claude-code/how-claude-code-works.md— agentic loop, tools, sessions, checkpoints, permissions, tipscontent/en/docs/claude-code/context-window.md— mô phỏng tương tác context window nạp/tốn/compactcontent/en/docs/claude-code/overview.md— Claude Code là gì, cài đặt, các surfacecontent/en/docs/claude-code/features-overview.md— chọn giữa CLAUDE.md, Skills, subagents, hooks, MCP, pluginscontent/en/docs/claude-code/goal.md—/goalgiữ Claude làm việc tới completion conditioncontent/en/docs/claude-code/memory.md— CLAUDE.md hierarchy và auto memorycontent/en/docs/claude-code/sub-agents.md— delegate sang context riêng biệtcontent/en/docs/claude-code/settings.md— cấu hình và permission trongsettings.json