làm tíai?GitHub ↗
CHƯƠNG 01 / 16

Nền tảng và cách nghĩ

Hiểu agentic loop, tools, context window và cách cộng tác với Claude Code.

13 phút đọc

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 claude trong một thư mục, nó thấy toàn bộ project và làm việc xuyên nhiều file.
  • 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ậpChi tiết
ProjectFile trong thư mục + subdirectory; file nơi khác nếu bạn cấp permission
TerminalMọi lệnh bạn chạy được: build tool, git, package manager, script
Git stateBranch hiện tại, uncommitted changes, commit history gần đây
CLAUDE.mdInstructions/conventions/context nạp mỗi session
Auto memoryLearnings Claude tự lưu; 200 dòng đầu hoặc 25KB đầu của MEMORY.md nạp mỗi session
ExtensionsMCP 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:

  1. Gather context — search file, đọc code để hiểu.
  2. Take action — edit file, chạy lệnh, tạo file.
  3. 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: /model trong session, hoặc khởi động với claude --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ómClaude làm gì
File operationsĐọc file, edit code, tạo file mới, rename/reorganize
SearchTìm file theo pattern, search content bằng regex, khám phá codebase
ExecutionChạy shell command, khởi động server, chạy test, dùng git
WebSearch web, fetch docs, tra error message
Code intelligenceXem 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ạycách bạn tương tác.

EnvironmentCode chạy ở đâuDùng khi
LocalMáy bạnMặc định. Full access file, tool, environment
CloudVM do Anthropic quản lýOffload task, làm repo không có local
Remote ControlMáy bạn, điều khiển từ browserDù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 độngLệnhKết quả
Resumeclaude --continue / claude --resumeMở lại cùng session ID, append message mới
Fork--fork-session / /branchCopy 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ầnGhi chú
System promptInstruction 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 infoWorking 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 descriptionsMô tả một dòng của mỗi skill; full content chỉ nạp khi dùng
~/.claude/CLAUDE.mdGlobal preferences, áp dụng mọi project
Project CLAUDE.mdConvention, 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/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 test và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:

  1. Xóa tool outputs cũ trước.
  2. Nếu cần, summarize conversation.
  3. 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 styleKhông đổi; không thuộc message history
Project-root CLAUDE.md, unscoped rulesRe-inject từ disk
Auto memoryRe-inject từ disk
Rules có paths: frontmatterMất đến khi đọc lại file khớp
Nested CLAUDE.md trong subdirectoryMất đến khi đọc lại file trong dir đó
Invoked skill bodiesRe-inject, cap 5.000 token/skill và 25.000 token tổng; drop cũ nhất trước
HooksKhô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 Esc hai 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:

ModeHành vi
ManualHỏi trước mọi file edit và shell command
Accept editsTự edit file + chạy lệnh filesystem thường (mkdir, mv); vẫn hỏi lệnh khác
PlanKhá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.
  • /goal khô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ặc stop/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 test exits 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áchTurn tiếp theo bắt đầu khiDừng khi
/goalTurn trước xongModel xác nhận điều kiện đạt
/loopMột khoảng thời gian trôi quaBạn dừng, hoặc Claude thấy xong
Stop hookTurn trước xongScript/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, tips
  • content/en/docs/claude-code/context-window.md — mô phỏng tương tác context window nạp/tốn/compact
  • content/en/docs/claude-code/overview.md — Claude Code là gì, cài đặt, các surface
  • content/en/docs/claude-code/features-overview.md — chọn giữa CLAUDE.md, Skills, subagents, hooks, MCP, plugins
  • content/en/docs/claude-code/goal.md/goal giữ Claude làm việc tới completion condition
  • content/en/docs/claude-code/memory.md — CLAUDE.md hierarchy và auto memory
  • content/en/docs/claude-code/sub-agents.md — delegate sang context riêng biệt
  • content/en/docs/claude-code/settings.md — cấu hình và permission trong settings.json
Nguồn của chương

Tài liệu chính thức duy nhất từ Anthropic.

Claude Code docs
Trở về mục lục