Bỏ qua để đến nội dung

Quản lý phiên làm việc

Bài viết được dịch tự động từ bài viết gốc, chưa được kiểm tra lại bởi con người. Chỉ những bài viết có dấu tick xanh cạnh tiêu đề là đã được kiểm tra.

Một phiên (session) là một cuộc hội thoại được lưu lại, gắn với một thư mục dự án. Claude Code liên tục ghi phiên xuống máy trong lúc bạn làm việc - nhờ vậy bạn có thể quay lại đúng chỗ đã dừng, phân nhánh để thử hướng khác, hoặc chuyển qua lại giữa nhiều việc song song.

Desktop app, Claude Code on the web và extension VS Code mỗi nơi có lịch sử phiên riêng. Trang này nói về CLI.

LệnhTác dụng
claude --continueTiếp tục phiên gần nhất trong thư mục hiện tại
claude --resumeMở bảng chọn phiên (session picker)
claude --resume <tên>Tiếp tục trực tiếp phiên có tên đó
claude --from-pr <số>Mở bảng chọn, lọc theo các phiên gắn với pull request đó
/resumeChuyển sang một hội thoại khác ngay trong phiên đang chạy

Phiên tạo bằng claude -p (chế độ headless) hoặc Agent SDK không hiện trong bảng chọn, nhưng vẫn tiếp tục được nếu bạn truyền session ID: claude --resume <session-id>. Bạn có thể chạy lệnh này từ bất kỳ thư mục nào - Claude Code tìm session ID trong thư mục dự án hiện tại và các git worktree của nó trước, sau đó tìm tiếp ở mọi dự án khác trên máy, nên vẫn tìm ra một phiên đã khởi động ở nơi khác hoặc đã di chuyển bằng /cd.

Phiên được phục hồi mang theo những gì

Phần tiêu đề “Phiên được phục hồi mang theo những gì”
  • Lịch sử hội thoại - đầy đủ, kể cả các lần gọi tool và kết quả trả về.
  • Model - phiên tiếp tục với model nó đang dùng. Không phục hồi nếu model đã bị khai tử, bị availableModels chặn, hoặc bạn truyền --model/biến môi trường ANTHROPIC_MODEL lúc khởi động.
  • Agent - phiên khởi động bằng --agent sẽ tiếp tục với đúng agent đó (giữ system prompt, giới hạn tool, model). Truyền --agent khi resume để đổi sang agent khác.
  • Chế độ quyền hạn - giữ nguyên chế độ cũ, trừ planbypassPermissions (không bao giờ được phục hồi). auto chỉ phục hồi nếu tài khoản bạn vẫn đủ điều kiện. Truyền --permission-mode để ghi đè.
  • Scheduled task chưa hết hạn. Background Bash và monitor task thì không.

Trên gói Pro hoặc Max, khi bạn resume một phiên đã im lặng hơn khoảng một giờ và có trên 100.000 token, Claude Code khôi phục hội thoại rồi mở một hộp thoại trước khi bạn gửi tin nhắn đầu tiên - vì prompt cache lúc này đã hết hạn, request đầu tiên phải xử lý lại toàn bộ lịch sử dù bạn chọn phương án nào.

Hộp thoại đưa ra ba lựa chọn, khác nhau ở lượng hội thoại được mang theo cho các request sau đó:

  • Resume từ bản tóm tắt - chạy /compact ngay lập tức. Claude Code gửi một request tóm tắt toàn bộ lịch sử, rồi thay lịch sử bằng bản tóm tắt đó, các trao đổi gần nhất, và tối đa 5 file vừa đọc gần đây. Các request sau chỉ mang theo bản tóm tắt.
  • Resume nguyên trạng - nạp lại hội thoại không đổi. Sau tin nhắn đầu tiên, Claude Code xử lý và cache lại toàn bộ lịch sử, rồi đọc từ cache ở các request sau trong khi cache còn “ấm”.
  • Đừng hỏi lại - resume nguyên trạng và không hiện hộp thoại này ở các lần resume sau.

Resume nguyên trạng giữ mọi chi tiết của hội thoại, nhưng chi phí mỗi request tăng theo độ dài hội thoại. Resume từ tóm tắt rẻ hơn ở mỗi request sau đó, nhưng phần nào bản tóm tắt bỏ sót sẽ không còn trong ngữ cảnh của Claude nữa.

Claude Code lưu phiên theo từng thư mục dự án. Mặc định bảng chọn hiện:

  • Các phiên trong worktree hiện tại (phiên chạy nền được đánh dấu bg).
  • Các phiên khởi động ở nơi khác nhưng đã thêm thư mục hiện tại bằng /add-dir.

Nhấn Ctrl+W để mở rộng ra mọi worktree của repo, Ctrl+A để xem mọi dự án trên máy.

Chọn một phiên thuộc worktree khác cùng repo → resume ngay tại chỗ. Chọn phiên thuộc dự án hoàn toàn khác → Claude Code copy sẵn lệnh cd + resume vào clipboard để bạn tự chạy.

Khi resume bằng tên, cả hai dạng lệnh đều tìm khớp chính xác trong repo hiện tại và các worktree:

LệnhKhớp chính xácTên trùng/nhập nhằng
claude --resume <tên>Resume trực tiếpMở bảng chọn với tên đó điền sẵn làm từ khoá tìm
/resume <tên>Resume trực tiếpBáo lỗi; chạy /resume không tham số để mở bảng chọn

Đặt tên gợi nhớ để dễ tìm lại và resume bằng tên - đặc biệt quan trọng khi bạn làm nhiều việc song song.

Khi nàoCách đặt
Lúc khởi độngclaude -n auth-refactor
Đang trong phiên/rename auth-refactor - tên hiện luôn trên thanh prompt
Từ bảng chọn phiênChọn phiên rồi nhấn Ctrl+R
Khi duyệt planDuyệt một plan trong plan mode sẽ tự đặt tên phiên theo nội dung plan (nếu bạn chưa đặt tên)

Nếu bạn không đặt tên, Claude Code tự sinh một tiêu đề ngắn tóm tắt prompt đầu tiên (do một model nhỏ/nhanh viết ở tác vụ nền), cộng một tên hiển thị mặc định kiểu my-app-3f. Lưu ý: tiêu đề tự sinh và tên mặc định không dùng được để resume - claude --resume <tên> chỉ khớp với tên bạn tự đặt.

Chạy /resume trong phiên, hoặc claude --resume không tham số, để mở bảng chọn tương tác:

PhímHành động
/ Di chuyển giữa các phiên
/ Mở/thu gọn nhóm phiên
EnterResume phiên đang chọn
SpaceXem trước nội dung phiên
Ctrl+RĐổi tên phiên đang chọn
/ hoặc bất kỳ ký tựVào chế độ tìm kiếm, lọc danh sách. Dán URL của pull/merge request (GitHub, GitLab, Bitbucket) để tìm phiên đã tạo ra nó
Ctrl+AHiện phiên của mọi dự án trên máy (nhấn lại để về repo hiện tại)
Ctrl+WHiện phiên của mọi worktree trong repo (chỉ hiện với repo nhiều worktree)
Ctrl+BChỉ hiện phiên thuộc git branch hiện tại (nhấn lại để bỏ lọc)
EscThoát bảng chọn hoặc thoát chế độ tìm

Mỗi dòng hiện tên phiên (hoặc tiêu đề tự sinh / prompt đầu tiên), thời gian từ lần hoạt động cuối, git branch và dung lượng file.

Phân nhánh tạo một bản sao của hội thoại tính đến thời điểm hiện tại rồi chuyển bạn sang bản sao đó - phiên gốc giữ nguyên. Dùng khi muốn thử một hướng khác mà không mất hướng đang đi.

/branch try-streaming-approach

Bỏ tên thì Claude Code tự đặt theo prompt đầu tiên của hội thoại. Từ dòng lệnh, kết hợp --fork-session:

Terminal window
claude --continue --fork-session

Nhánh mới thừa hưởng gì:

Trạng tháiSau /branch
Lịch sử hội thoạiĐược copy sang nhánh, tính đến lúc bạn chạy /branch
Quyền đã cấp “cho phiên này”Vẫn còn - nhánh chạy trong cùng process. Nếu fork ra process riêng bằng --fork-session, bạn phải duyệt lại từ đầu
Subagent / lệnh Bash đang chạy nềnVẫn chạy tiếp, nhưng output xuất hiện ở nhánh mới, không phải phiên gốc

Phiên gốc không đổi trên đĩa và vẫn nằm trong bảng chọn - quay lại bằng /resume <tên-gốc> hoặc truyền session ID của nó.

Ba lệnh điều khiển những gì đang chiếm cửa sổ ngữ cảnh mà không cần thoát phiên:

  • /clear - bắt đầu lại với ngữ cảnh trống. Hội thoại cũ vẫn được lưu, resume lại bằng /resume. Tên bạn tự đặt (--name//rename) được giữ; tiêu đề tự sinh thì không.
  • /compact [chỉ dẫn] - thay lịch sử bằng một bản tóm tắt, có thể yêu cầu tập trung vào phần bạn chỉ định, ví dụ /compact tập trung vào các thay đổi API.
  • /context - xem hiện tại cái gì đang chiếm ngữ cảnh.

Chạy /export để mở menu cho phép copy hội thoại vào clipboard hoặc lưu ra file text thuần (tin nhắn và output tool được render thành văn bản dễ đọc). Truyền thẳng tên file để bỏ qua menu.

/export tạo bản transcript cho người đọc. Muốn dữ liệu có cấu trúc cho script xử lý, chọn theo cách script được kích hoạt:

  • Chạy Claude một lần rồi lấy kết quả: claude -p với --output-format json (hoặc stream-json) trả về kết quả, session ID, usage và chi phí dưới dạng JSON.
  • Hỏi thêm một phiên đã có: truyền session ID vào claude -p --resume để gửi prompt tiếp và nhận phản hồi có cấu trúc.
  • Phản ứng theo sự kiện phiên: đọc field transcript_pathhooks và statusline nhận được ở input. Một SessionEnd hook có thể lưu trữ transcript khi phiên kết thúc.
  • Nhúng Claude vào app TypeScript/Python: dùng Agent SDK để nhận từng tin nhắn theo cách lập trình.

Ví dụ gửi prompt tiếp vào một phiên đã có và đọc câu trả lời bằng jq:

Terminal window
claude -p --resume <session-id> --output-format json "tóm tắt những gì chúng ta đã thay đổi" | jq -r '.result'

Mặc định transcript lưu dạng JSONL tại ~/.claude/projects/<project>/<session-id>.jsonl, trong đó <project> là đường dẫn thư mục làm việc với mọi ký tự không phải chữ/số đổi thành -. Mỗi dòng là một object JSON (một tin nhắn, một lần gọi tool, hoặc metadata).

Vị trí lưu, thời gian giữ và việc có ghi transcript hay không đều cấu hình được:

MuốnĐặtỞ đâu
Chuyển chỗ lưu khỏi ~/.claudeCLAUDE_CONFIG_DIRBiến môi trường
Đổi thời gian giữ mặc định 30 ngàycleanupPeriodDayssettings.json
Tắt ghi transcript ở mọi chế độCLAUDE_CODE_SKIP_PROMPT_HISTORYBiến môi trường
Tắt ghi cho một lần chạy không tương tác--no-session-persistenceCờ CLI, dùng với claude -p