50 điểm bởi princox 23 ngày trước | 1 bình luận | Chia sẻ qua WhatsApp

Dưới đây là phần tóm lược những điểm cốt lõi về cách Claude Code vận hành trong terminal, dựa trên tài liệu chính thức (bản tổng hợp Mintlify của VineeTagarwaL).

Claude Code hoạt động như thế nào?
Nói ngắn gọn, đó là một vòng lặp “đọc → suy nghĩ → dùng công cụ → xem kết quả → lặp lại”.
6 bước của Agentic Loop

  1. Người dùng nhập thông điệp trong terminal (hoặc truyền qua --print / stdin)
  2. Ghép system prompt — ngày hiện tại, trạng thái git, tệp CLAUDE.md, danh sách công cụ khả dụng
  3. Gọi Anthropic API → model tạo khối tool_use (tên công cụ + đầu vào JSON)
  4. Kiểm tra quyền — quyết định một trong ba trạng thái: tự động phê duyệt / yêu cầu xác nhận / chặn
  5. Thực thi công cụ → thêm kết quả (nội dung tệp, đầu ra lệnh, v.v.) vào cuộc hội thoại dưới dạng tool_result
  6. Model nhận kết quả rồi gọi thêm công cụ hoặc đưa ra phản hồi cuối cùng — lặp cho đến khi không còn lời gọi công cụ nào
    Vòng lặp này chỉ chạy trong tiến trình terminal cục bộ. Trừ những công cụ chủ động gọi ra bên ngoài như WebFetch, WebSearch, máy chủ MCP, còn lại tệp, shell và thông tin xác thực sẽ không rời khỏi máy.

Context được tạo như thế nào?
Khi bắt đầu cuộc trò chuyện, hệ thống ghép hai khối và gắn chúng vào đầu mọi lời gọi API.

  • Context hệ thống — nhánh hiện tại, 5 commit gần nhất, kết quả git status --short (bị cắt nếu vượt quá 2.000 ký tự)
  • Context người dùng — tệp bộ nhớ CLAUDE.md (duyệt phân cấp 4 tầng), ngày hôm nay (Today's date is YYYY-MM-DD)
    Cả hai khối đều được cache theo từng cuộc hội thoại bằng lodash/memoize. Khi gọi setSystemPromptInjection(), cache sẽ được xóa ngay lập tức.

Mô hình quyền — khi nào công cụ được chạy?

Kết quả Hành động
allow Chạy ngay, thêm kết quả vào hội thoại
ask Tạm dừng → hiển thị hộp thoại xác nhận
deny Từ chối → trả lỗi về cho model
  • Chế độ bypassPermissions: bỏ qua toàn bộ bước kiểm tra
  • Chế độ acceptEdits: tự động phê duyệt chỉnh sửa tệp, nhưng bash vẫn yêu cầu xác nhận
  • Các công cụ chỉ đọc như Read, Glob, Grep được tự động phê duyệt mặc định ở mọi chế độ

Sub-agent (công cụ Task)
Claude có thể spawn sub-agent bằng công cụ Task (AgentTool). Sub-agent chạy Agentic Loop riêng trong một cuộc hội thoại tách biệt, với bộ công cụ có thể được giới hạn, rồi trả kết quả về cho agent cha khi hoàn tất. Nó có thể chạy cục bộ (in-process) hoặc trên hạ tầng compute từ xa.

Lưu và khôi phục cuộc hội thoại
Cuộc hội thoại được lưu trong ~/.claude/ dưới dạng tệp transcript JSON.

  • --resume <session-id> hoặc chỉ --resume để tiếp tục cuộc trò chuyện trước đó
  • Khi resume: nạp toàn bộ lịch sử tin nhắn, quét lại tệp CLAUDE.md, chế độ quyền được reset về mặc định cấu hình
  • Cuộc trò chuyện dài sẽ được compact định kỳ — tóm tắt các tin nhắn cũ để quản lý context window. Toàn bộ transcript gốc vẫn được giữ trên đĩa

Query engine làm gì?
Mỗi “turn” được query.ts điều phối.

  • Xuất luồng token ra terminal theo thời gian thực
  • Dispatch khối tool_use đến handler phù hợp
  • Quản lý ngân sách token và số lần gọi công cụ cho mỗi turn
  • Kích hoạt compact khi context window đầy
  • Mỗi công cụ có thuộc tính maxResultSizeChars — nếu kết quả vượt giới hạn này, nó sẽ được lưu vào tệp tạm và model chỉ nhận đường dẫn tệp (để tránh overflow context window)

Nguyên văn: How Claude Code works — Mintlify
Ghi chú: Đây là tài liệu mirror không chính thức, do VineeTagarwaL biên soạn lại tài liệu chính thức của Claude Code trên Mintlify.

1 bình luận

 

Từ năm 2023 đến nay, cấu trúc ReAct hầu như không thay đổi nhiều.