Đặt code cho AI agent trong Docker Sandbox: chọn checkout nào?
Docker Sandbox cho phép phối hợp với coding agent qua checkout dùng chung, Git worktree, clone mode hoặc repo nằm hẳn trong sandbox. Mỗi cấu hình đánh đổi khác nhau giữa quan sát trực tiếp, quyền Git, dependency và mức cô lập môi trường.
Một coding agent đang sửa code, trong khi bạn cần chuyển sang branch khác để xử lý việc gấp. Nếu cả hai dùng chung một checkout, thao tác đó sẽ lập tức thay đổi các file mà agent đang nhìn thấy.
Vì vậy, vị trí của repository trong Docker Sandbox không chỉ là lựa chọn tiện dụng. Nó quyết định mức độ con người và agent dùng chung file, Git metadata, dependency và môi trường chạy.
Docker tập trung vào các workflow shared mount, Git worktree và clone mode. Từ đó, có thể phân biệt bốn cấu hình thực tế: mount checkout từ host, mount worktree riêng, dùng clone mode, hoặc giữ toàn bộ project trong sandbox không mount.
So sánh nhanh
| Cấu hình | Agent làm việc ở đâu | Phù hợp khi | Điểm cần lưu ý |
|---|---|---|---|
| Mount từ host | Cùng working tree với bạn | Muốn xem và sửa file trực tiếp trong editor local | Đổi branch, sửa đồng thời và dependency có thể ảnh hưởng cả hai phía |
| Git worktree | Thư mục và branch riêng theo task | Muốn tách task khỏi checkout chính | Linked worktree được mount không mang đủ Git metadata vào sandbox |
| Clone mode | Checkout độc lập trong sandbox | Agent cần Git và dependency riêng | Source host vẫn được mount chỉ đọc; cần nhận kết quả qua branch hoặc remote |
| Sandbox không mount | Repo và môi trường đều ở trong sandbox | Muốn không gắn workspace host vào sandbox | Cần truy cập sandbox từ xa và đưa kết quả ra ngoài trước khi xóa |
Mount trực tiếp: cộng tác sát nhất
Khi chạy sbx run từ thư mục dự án, Docker Sandbox mount thư mục đó vào sandbox tại cùng đường dẫn tuyệt đối.
bash
$ cd ~/my-project
$ sbx run claude
Bạn có thể mở file trong editor local và thấy các thay đổi của agent khi chúng xuất hiện. Git hoạt động từ cả host lẫn sandbox, nên bạn có thể tự commit hoặc để agent commit. Development server trên host cũng có thể nhận thay đổi qua hot reload.
Đây là cấu hình ít ma sát nhất khi người và agent cùng xử lý một task. Đổi lại, cả hai đang dùng chung một working tree:
Chuyển branch sẽ thay đổi file agent đang thấy.
Chỉnh sửa của bạn trở thành một phần trong ngữ cảnh làm việc của agent.
Dependency được ghi vào checkout chung cũng được chia sẻ.
Điểm cuối cùng đặc biệt đáng chú ý với package có native binary như esbuild: package có thể chạy trong Linux sandbox nhưng không hoạt động trên host macOS hoặc Windows, hoặc ngược lại. Để giảm xung đột, hãy tách nơi cài dependency hoặc luôn chạy ứng dụng trong cùng một môi trường.
Nếu bạn cần chuyển sang công việc không liên quan trong khi agent tiếp tục chạy, hãy dùng một checkout khác.
Git worktree: tách task khỏi checkout chính
Git worktree cấp cho mỗi task một thư mục và branch riêng. Bạn có thể mount từng worktree vào sandbox riêng, trong khi checkout ban đầu vẫn sẵn sàng cho việc khác.
Agent sửa file trong worktree, còn bạn vẫn có thể dùng editor và công cụ phát triển local để kiểm tra kết quả. Mỗi task cũng có thể có sandbox và môi trường chạy riêng để chuẩn bị, rồi dọn dẹp khi hoàn tất.
Tuy nhiên, chỉ mount một linked worktree có giới hạn Git quan trọng. File .git trong worktree trỏ đến metadata ở ngoài vùng mount, nên agent vẫn sửa file được nhưng không thể thực hiện đầy đủ các thao tác Git trong sandbox, như xem trạng thái, tạo branch hay commit. Những việc này phải thực hiện trên host.
Worktree vì thế phù hợp để tách file và branch theo task, nhưng không mặc định cấp cho agent đầy đủ ngữ cảnh Git bên trong sandbox.
Clone mode: checkout riêng, Git riêng
Clone mode giữ checkout local của bạn riêng biệt. sbx mount source từ host ở chế độ chỉ đọc, rồi tạo một bản clone độc lập cho agent trong sandbox.
Agent có Git trong checkout riêng của mình; branch, commit và dependency được giữ ở đó thay vì tác động vào checkout local. Đây là khác biệt chính so với mount trực tiếp.
Docker nêu hai cách đưa kết quả trở lại:
Khi sandbox còn chạy, fetch branch đã commit qua Git remote mà sbx thêm trên host.
Để agent push branch lên remote repository, sau đó lấy branch theo Git workflow thông thường.
Clone mode phù hợp khi agent cần không gian làm việc độc lập, trong khi bạn vẫn muốn tiếp tục dùng project local cho công việc khác.
Sandbox không mount: project nằm hoàn toàn trong sandbox
Với sandbox không mount, không có workspace directory nào từ host được gắn vào. Repository được clone trực tiếp trong sandbox; checkout và môi trường phát triển của nó không kết nối với bản project trên host.
Cấu hình này gần với làm việc trên một máy phát triển từ xa. Bạn có thể mở shell bằng sbx exec hoặc kết nối editor với sandbox qua SSH. File và dependency đều nằm trong sandbox; để đưa kết quả ra ngoài, bạn push branch lên Git remote.
Một sandbox có thể được giữ làm môi trường cho cả project qua nhiều phiên agent và lần khởi động lại. Agent có thể tạo worktree nội bộ theo feature, push branch và tạo pull request để review.
Dù vậy, các task trong cùng một sandbox vẫn dùng chung công cụ và service. Server đang chạy hoặc thay đổi môi trường vẫn cần được điều phối. Nếu các task cần cô lập cả môi trường chạy lẫn file, sandbox riêng sẽ phù hợp hơn; branch riêng không tự cô lập các chỉnh sửa đồng thời trong một working directory.
Xem web preview từ sandbox
Nếu development server chạy trong sandbox, server cần bind vào 0.0.0.0 và port phải được publish ra host. Ví dụ với port 8080:
bash
$ sbx ports my-sandbox --publish 8080:8080
Sau đó có thể mở http://localhost:8080 trên trình duyệt.
Lưu ý: xóa sandbox sẽ xóa các file chỉ tồn tại trong đó. Hãy push hoặc copy kết quả cần giữ lại trước khi dọn sandbox.
Khi một task cần nhiều repository
Một thay đổi API có thể cần repository frontend tương ứng, hoặc một repository khác làm tài liệu tham chiếu. Docker Sandbox có thể mount nhiều thư mục vào cùng sandbox và đặt các repository chỉ để tham khảo ở chế độ chỉ đọc.
Một workspace manager như jganoff/wsp có thể tập hợp các repository cần cho một task. Đây là các clone thông thường với Git metadata riêng, nên agent vẫn có Git access — khác với linked worktree chỉ được mount.
Cùng mô hình này cũng có thể đặt hoàn toàn trong sandbox không mount: clone các repository cần thiết vào đó và giữ cả workspace trong sandbox.
Chọn theo mức độ chia sẻ bạn muốn
Không có một cấu hình phù hợp cho mọi task.
Mount từ host khi bạn muốn theo dõi và cùng chỉnh sửa một working tree với agent.
Git worktree khi mỗi task cần thư mục và branch riêng, còn checkout chính vẫn phục vụ công việc khác.
Clone mode khi agent cần checkout, Git và dependency độc lập, nhưng vẫn cần source host ở dạng chỉ đọc.
Sandbox không mount khi muốn project và môi trường phát triển nằm hoàn toàn trong sandbox.
Sandbox riêng cho từng task khi cần cô lập cả file, service và môi trường chạy.
Câu hỏi không chỉ là code nằm ở đâu. Quan trọng hơn: bạn muốn người và agent chia sẻ đến mức nào — file, Git metadata, dependency, service hay chỉ trao đổi kết quả qua branch và remote.