Buổi tối bạn đóng terminal lại, và cảm giác như toàn bộ cuộc trò chuyện với agent biến mất cùng cửa sổ đó. Một giờ bàn bạc, những lỗi đã tìm ra, ngữ cảnh nhiệm vụ đã giải thích - tất cả như tan biến.

Không mất đâu. Cuộc trò chuyện tự ghi xuống đĩa trong lúc bạn làm việc, và một lệnh duy nhất mở lại nó.

Cách dễ hình dung nhất về phiên làm việc là một khách sạn. Thư mục project là tòa nhà, mỗi cuộc trò chuyện là một phòng, và chìa khóa của tất cả các phòng treo trên bảng sau quầy lễ tân. Buổi tối bạn rời đi, nhưng không đốt căn phòng đó: chìa khóa trở về bảng, đồ đạc vẫn ở bên trong. Buổi sáng chỉ cần nói với lễ tân bạn cần phòng nào.

Phép so sánh có ranh giới, và tốt nhất nên vạch rõ ngay: trong các phòng chứa cuộc trò chuyện, không phải code. Code chính là tòa nhà, dùng chung cho mọi khách.

Dưới đây là: phiên làm việc là gì, ba cách quay lại nó, vì sao cuộc trò chuyện cần một cái tên, và vì sao nhiệm vụ mới nên mở một cuộc trò chuyện mới thay vì tiếp tục cuộc cũ.

Phiên làm việc là gì

Phiên làm việc là một cuộc trò chuyện với agent đã được lưu lại, gắn với thư mục project. Nó ghi xuống đĩa liên tục trong lúc bạn làm việc: không cần lưu riêng như trong trình soạn thảo văn bản.

Vào phiên làm việc không chỉ có các lượt hội thoại. Ngoài tin nhắn của bạn và câu trả lời của agent, trong đó còn có các lần gọi công cụ và kết quả của chúng: nó đã mở file nào, các lệnh chạy trả về gì, đã áp dụng những sửa đổi nào. Vì vậy khi quay lại một cuộc trò chuyện cũ, bạn nhận được toàn bộ bức tranh chứ không phải bản tóm tắt.

Tiếp theo là hai điểm cần làm rõ, chúng giải quyết được một nửa sự nhầm lẫn.

Nội dung của một cuộc trò chuyện không chuyển sang cuộc khác. Một tháng trước bạn đã bàn điều gì đó trong một phiên khác - trong phiên này không có lượt hội thoại đó, kể cả khi cùng một project. Mỗi phiên chỉ biết lịch sử của chính nó, không hơn.

Phiên làm việc không phải là nơi thứ hai chứa code. File của project nằm trên đĩa, độc lập với phiên. Một project sống thoải mái với cả chục phiên, và code ở tất cả các phiên đó là chung - chính là những gì đang có trong thư mục lúc này.

Bên trong một thư mục project tồn tại nhiều phiên làm việc độc lập, và tất cả đều làm việc trên cùng các file codeThư mục projectPhiên 1form phản hồiPhiên 2lỗi thanh toánPhiên 3refactor testFile của projectcùng một code cho mọi phiên
Các cuộc trò chuyện không chồng lấn lên nhau, nhưng code thì dùng chung

Trên sơ đồ, cả hai ý đều thấy ngay: một thư mục, nhiều phiên bên trong, mỗi phiên giữ lịch sử riêng, còn các file ở dưới là chung. Mở phiên thứ hai cho cùng một project không sao chép code, mà chỉ thêm một cuộc trò chuyện nữa về nó.

Cách quay lại công việc

Có ba cách vào, và chọn cách nào phụ thuộc vào việc bạn có nhớ chính xác cuộc trò chuyện mình cần hay không.

Cách vàoTác dụng
claude --continuetiếp tục cuộc trò chuyện gần nhất trong thư mục này, không hỏi lại
claude --resumemở danh sách các cuộc trò chuyện trước đó để bạn chọn
/resumecùng danh sách đó, nhưng từ bên trong một phiên đang mở

Trong bảng có một điều dễ bỏ sót: hai dòng trên bắt đầu bằng claude, còn dòng dưới bắt đầu bằng dấu slash. Khác biệt này không chỉ là hình thức. Hai lệnh trên gõ trong terminal khi agent còn chưa hiện trên màn hình - flag ở đó là một phần của chính lệnh khởi chạy. Tức là bạn vừa khởi chạy agent, vừa nói cho nó biết cần mở cuộc trò chuyện nào, chỉ trong một thao tác:

claude              # khởi chạy với trang trắng
claude --continue   # khởi chạy thẳng vào cuộc trò chuyện hôm qua
claude --resume     # khởi chạy và chọn một cuộc trò chuyện từ danh sách

/resume hoạt động theo chiều ngược lại, từ bên trong: agent đã mở sẵn, bạn gõ vào dòng nhập lệnh của nó và chuyển sang một cuộc trò chuyện khác, không cần quay lại terminal.

Trên thực tế khác biệt rất đơn giản. claude --continue nghĩa là "hôm qua tôi làm ở đây, giờ muốn làm tiếp": agent lặng lẽ mở cuộc trò chuyện gần nhất trong thư mục hiện tại. claude --resume nghĩa là "có nhiều cuộc trò chuyện, cho tôi chọn".

Danh sách hiển thị mỗi dòng cho một cuộc trò chuyện: tên nếu bạn đã đặt, hoặc tiêu đề tự động, thời gian kể từ lần hoạt động cuối, branch và kích thước. Nếu có nhiều dòng, bạn có thể tìm bằng cách gõ trực tiếp, hoặc mở rộng danh sách ra ngoài thư mục hiện tại: Ctrl+A hiển thị các cuộc trò chuyện từ mọi project trên máy này.

Kiểm tra thư mục trước

Mặc định danh sách gắn với thư mục. Nếu bạn chạy claude --resume từ thư mục home, hãy chuyển vào thư mục project rồi thử lại. Ctrl+A giúp bạn tìm ra cuộc trò chuyện đang nằm ở đâu: nó hiển thị các cuộc trò chuyện từ mọi thư mục, nhưng bạn không thể mở trực tiếp một cuộc thuộc project khác ngay từ danh sách - thay vào đó Claude Code sẽ đặt vào clipboard một lệnh để chuyển sang thư mục đó và khởi chạy, bạn chỉ cần dán lệnh đó vào terminal. Nếu vẫn không được, hãy kiểm tra xem Claude Code có đang chạy cùng profile như trước không, và cuộc trò chuyện có cũ hơn thời hạn lưu trữ không. Sau khi bị xóa tự động, /resume không thể lấy lại nó nữa.

Cùng với cuộc trò chuyện, mọi thứ đã có trong đó cũng quay lại: toàn bộ lịch sử, bao gồm các lần gọi công cụ và kết quả của chúng. Thông thường model cũng được giữ nguyên, miễn là nó vẫn khả dụng và cài đặt không thay đổi. Bạn có thể tiếp tục đúng từ chỗ đã dừng lại.

Vì sao phiên làm việc cần một cái tên

Khi chỉ có một cuộc trò chuyện, tên là không cần thiết. Nhưng khi có ba, danh sách biến thành một câu đố: hai cuộc bắt đầu giống hệt nhau, còn cuộc thứ ba thì chẳng rõ là về gì.

Có hai cách để đặt tên:

claude -n feedback-form   # lúc khởi chạy
/rename feedback-form     # trong một phiên đang mở

Nếu bạn không đặt tên, Claude Code sẽ tự nghĩ ra một tiêu đề ngắn dựa trên tin nhắn đầu tiên của bạn. Tiêu đề đó cũng đóng vai trò định hướng: nhờ nó bạn thấy được cuộc trò chuyện trong danh sách và mở nó ra. Chỉ là tên do bạn đặt chính xác hơn - tiêu đề tự động mô tả câu đầu tiên, chứ không phải toàn bộ nhiệm vụ.

Thành thật mà nói, ít ai đặt tên ngay từ đầu cuộc trò chuyện: bạn còn chưa biết nó sẽ phát triển thành cái gì. Một nửa số phiên bắt đầu kiểu "xem thử một dòng thôi", rồi một phần trong số đó bất ngờ biến thành công việc nửa ngày trời.

Vì vậy cách đơn giản hơn là thế này. Cứ để một lượt ghé qua ngắn ngủi như vậy, tiêu đề tự động là đủ. Nhận ra mình sẽ ở lại lâu - dùng /rename giữa chừng. Xong việc - dùng /clear kèm tên: nhiệm vụ đã ở phía sau rồi, gọi nó là gì cũng không còn là câu hỏi nữa.

Nhiệm vụ mới - cuộc trò chuyện mới

Trong lúc làm việc chỉ có một câu hỏi chính cần lặp lại: đây vẫn là nhiệm vụ cũ chứ? Còn là nó thì bạn tiếp tục. Đã đổi thì bạn mở trang trắng. Nghe như một thủ tục, nhưng thực tế chính chỗ này là nơi các cuộc trò chuyện dễ biến thành một mớ hỗn độn nhất.

Sự cám dỗ thì dễ hiểu: agent đã nắm project rồi, cần gì bắt đầu lại. Nhưng một cuộc trò chuyện bị dồn ba nhiệm vụ liên tiếp vào sẽ có những kiểu hỏng có thể đoán trước:

  • nó kéo các quyết định từ nhiệm vụ cũ sang nhiệm vụ mới. Một giờ trước bạn đã thống nhất làm theo cách này, giờ lại làm cách khác - nhưng nó vẫn nhớ thỏa thuận đầu tiên và quay về với thỏa thuận đó;
  • những ý tưởng bạn đã bác bỏ lại nổi lên. Bạn bác bỏ chúng ở một nhiệm vụ khác, nhưng với agent đó chỉ là một dòng chảy;
  • nó tiện tay sửa luôn cả những thứ thuộc về công việc trước. Bạn hỏi về form, kết quả lại có thêm sửa đổi ở phần thanh toán;
  • các thay đổi trộn lẫn vào nhau. Một cuộc trò chuyện chứa sửa đổi của hai chủ đề, sau đó rất khó tách ra cái nào thuộc về cái nào;
  • bạn không tìm ra cuộc trò chuyện đó trong danh sách. Nó nói về mọi thứ cùng lúc, tức là chẳng về gì cả.

Từ đó có một quy tắc đơn giản: cuộc trò chuyện tồn tại đúng bằng khoảng thời gian nó còn giúp ích cho một nhiệm vụ. Nhiệm vụ kết thúc thì nó cũng kết thúc theo. Phiên làm việc ở đây là vật tiêu hao, không phải thứ cần giữ gìn.

Có hai cách để bắt đầu một trang trắng, và khác biệt giữa chúng nhỏ hơn bạn tưởng.

Hành độngChuyện gì xảy ra với cuộc trò chuyệnChuyện gì xảy ra với file của projectKhi nào nên chọn
/clearbắt đầu với trang trắng, cuộc trò chuyện cũ vẫn được lưu lạikhông đụng vàonhiệm vụ đã đổi, nhưng bạn vẫn ở nguyên chỗ cũ
Phiên mớimột cuộc trò chuyện riêng bắt đầu cho công việc kháckhông đụng vàoproject khác, thư mục khác, ngày khác

Giờ đến /clear, vì chính đây là chỗ người ta hay lo lắng nhất. Lệnh này trông giống một hành động xóa, nhưng thực chất hoạt động như một cú chuyển đổi: nó không xóa cuộc trò chuyện, mà chỉ đặt sang một bên và mở ra một cuộc trống. Cuộc trò chuyện bị đặt sang bên vẫn còn trong danh sách và mở lại qua /resume đúng như lúc bạn để nó lại.

Lệnh có một tham số tùy chọn - tên. /clear feedback-form sẽ gắn nhãn cho cuộc trò chuyện sắp rời đi trong danh sách, để sau này bạn nhận ra nó. Mất một giây thao tác, nhưng tìm lại sau này dễ hơn hẳn.

Cũng có mặt trái. Nếu cuộc trò chuyện đã có tên rồi - qua -n lúc khởi chạy hoặc /rename giữa chừng - thì /clear trần trụi sẽ chuyển cái tên đó sang cuộc trò chuyện mới, và nhiệm vụ tiếp theo sẽ mang tên của nhiệm vụ trước. Có kèm tham số thì tên vẫn ở lại với cuộc trò chuyện cũ, còn cuộc mới khởi chạy không tên.

Trước lệnh clear, cuộc trò chuyện về form đang hoạt động trong cửa sổ hiện tại, còn danh sách trống. Sau lệnh, một trang trắng đang hoạt động, còn cuộc trò chuyện về form nằm trong danh sách. Ở cả hai trạng thái, cửa sổ này luôn có một cuộc trò chuyện đang hoạt độngTrướcSau/clearhoạt độngtrong danh sáchCuộc trò chuyện về formTrang trắngCuộc trò chuyện về formtạm thời trống
Trong cửa sổ hiện tại, lệnh này thay cuộc trò chuyện đang hoạt động, còn cuộc cũ chuyển vào danh sách

Hãy nhìn vào dòng trên cùng. Trong lần khởi chạy này chỉ có một cuộc trò chuyện hoạt động, cả trước lẫn sau khi chạy lệnh. /clear không mở một phiên thứ hai bên cạnh phiên đầu: nó thay cuộc trò chuyện đang hoạt động bằng một cuộc trống, và đưa cuộc cũ xuống dưới, vào danh sách. Muốn quay lại đó cần một bước chủ động, qua /resume.

Phiên mới khác với /clear ở chỗ nó thường đi kèm với công việc khác: project khác, thư mục khác, ngày khác. /clear không đưa bạn ra khỏi thư mục hiện tại lẫn lần khởi chạy hiện tại - nó chỉ mở một trang trắng ngay tại chỗ bạn đang đứng.

Còn có lệnh /compact. Lệnh này không liên quan đến việc đổi nhiệm vụ, mà liên quan đến độ dài của cuộc trò chuyện: nó gói những gì đã nói thành một bản tóm tắt ngắn gọn và vẫn giữ bạn trong cùng phiên đó. Tìm hiểu lệnh này dễ hơn khi đặt cạnh cách cửa sổ ngữ cảnh hoạt động và chuyện gì xảy ra khi nó đầy - đó là một chủ đề riêng.

Mọi thứ nằm ở đâu và được lưu bao lâu

Các cuộc trò chuyện nằm trên đĩa của bạn, trong thư mục dữ liệu của Claude Code:

~/.claude-codegym/projects/

Ký hiệu ~ nghĩa là thư mục home của người dùng. Trên Windows, nó tương ứng với %USERPROFILE%, vì vậy đường dẫn của khóa học bắt đầu bằng %USERPROFILE%\.claude-codegym\projects\.

.claude-codegym là profile của khóa học. Nếu Claude Code chạy mà không có profile này, đường dẫn tiêu chuẩn sẽ là ~/.claude/projects/. Bên trong có một thư mục con cho mỗi project, và trong đó là một file chính cho mỗi cuộc trò chuyện.

Không đưa bí mật vào transcript

Trên đĩa, transcript được lưu dưới dạng văn bản thuần, không mã hóa. Vào đó có nội dung các file đã đọc, kết quả của các lệnh đã chạy và văn bản bạn đã dán vào chat. Các tiến trình và người dùng nào có quyền truy cập vào file của tài khoản hệ điều hành của bạn đều có thể đọc được file này.

File cục bộ chỉ là một phần của câu chuyện: để model trả lời được, Claude Code gửi các yêu cầu và ngữ cảnh cần thiết qua mạng tới nhà cung cấp đã chọn. Điều kiện lưu trữ phía nhà cung cấp phụ thuộc vào tài khoản và cài đặt. Vì vậy đừng dán mật khẩu và khóa vào chat, và đừng nhờ agent đọc các file chứa bí mật như .env khi không cần thiết.

Các cuộc trò chuyện không được lưu mãi mãi: sau khoảng một tháng, những cuộc cũ tự động bị dọn đi, cùng với các checkpoint gắn với chúng, và thời hạn này có thể chỉnh lại nếu muốn. Vậy nên phiên làm việc là chỗ tốt để làm một nhiệm vụ, nhưng lại là chỗ tồi để lưu lịch sử lâu dài của project. Cái gì giữ lịch sử lâu dài, đó là một chủ đề lớn khác.

Điều này thay đổi gì trong công việc

Vài kết luận có thể dùng được ngay từ ngày mai:

  • phiên làm việc là một hộp chứa cho một nhiệm vụ, không phải cuộc trò chuyện suốt đời với agent. Bạn càng giữ nó gần với ý đó, agent càng ít bị nhầm lẫn;
  • cuộc trò chuyện tự lưu, không cần lưu riêng. Đóng terminal vào buổi tối không mất mát gì cả;
  • các phiên được sắp xếp theo thư mục. Khởi chạy agent từ thư mục project thì các cuộc trò chuyện của nó luôn sẵn trong tầm tay; nếu danh sách trống, hãy kiểm tra thư mục: Ctrl+A sẽ hiển thị các cuộc trò chuyện từ mọi project và gợi ý nơi cần chuyển đến;
  • quay lại một cuộc trò chuyện cũ nghĩa là bạn lấy lại toàn bộ ngữ cảnh của nó, kể cả các ngõ cụt và ý tưởng đã bị loại bỏ. Đôi khi bắt đầu lại còn nhanh hơn là khơi lại một cuộc thảo luận kéo dài ba tiếng;
  • một thư mục với cả chục phiên bên trong là bức tranh làm việc hoàn toàn bình thường, không phải dấu hiệu của sự lộn xộn.
Nghi thức hai giây

Một thói quen thay cho hai: đừng nghĩ tên lúc bắt đầu, mà gắn nhãn cho cuộc trò chuyện lúc kết thúc. /clear feedback-form thay vì /clear trần trụi - đúng hai giây đó thôi, nhưng vào lúc cái tên đã rõ ràng. Một tháng sau danh sách vẫn còn đọc được, và bạn không phải đào bới lại nó.


Vị trí lưu file phiên làm việc, nội dung danh sách và thời hạn lưu trữ phụ thuộc vào phiên bản Claude Code và cài đặt của bạn, nên ở máy bạn chúng có thể khác với những gì mô tả ở đây.