Một coding agent chỉ hoạt động bền bỉ bằng chính cỗ máy chạy nó. Bạn khởi động một đợt refactor dài với Claude Code hay Codex, gập nắp laptop để kịp chuyến tàu, và tiến trình chết theo phiên SSH của bạn. Chạy hai agent trên cùng một laptop thì quạt kêu ầm ĩ trong khi trình soạn thảo giật lag. Đến một lúc nào đó, câu hỏi không còn là “dùng agent nào” nữa, mà thành “agent thực sự chạy ở đâu”.
Câu trả lời thường nằm ở một trong ba hướng: giữ nó trên laptop, chuyển lên server từ xa, hoặc chia việc cho cả hai. Mỗi lựa chọn đánh đổi sự tiện lợi lấy độ tin cậy. Laptop thì ngay đó, nhưng lại ngủ, bị bóp hiệu năng và mất kết nối. Server thì thức suốt và có nhiều nhân hơn, nhưng thêm phần cài đặt và một lớp câu hỏi “nó đang làm cái quái gì vậy”. Chia đôi thì bạn được cái tốt nhất của cả hai, kèm luôn gánh nặng quản lý của cả hai.
Bài viết này đi qua toàn bộ quy trình thiết lập agent từ xa từ đầu đến cuối: con đường tự làm với các lệnh thật, kiểu lỗi rình rập ở từng bước, và chỗ mà một Computer được kết nối trong Sharkly loại bỏ đi phần cứ hỏng mãi. Bạn đã có coding agent rồi. Vấn đề là chạy chúng ở một nơi bền bỉ và biết chuyện gì đã xảy ra trong lúc bạn không nhìn.
Vì sao bạn nên đưa agent ra khỏi laptop
Laptop là mặc định vì đó là nơi bạn gõ phím. Đó cũng là máy chủ tệ nhất cho bất cứ thứ gì chạy lâu hơn khoảng chú ý của bạn. macOS ngủ khi gập nắp. Chế độ pin bóp hiệu năng CPU. VPN công ty thì ngắt kết nối. Mỗi sự kiện trong số đó đều giết chết agent giữa chừng, và agent chẳng hề biết mình đã bị ngắt; bạn chỉ phát hiện khi mở lại terminal và thấy một dấu nhắc chết cùng chẳng có bản tóm tắt nào.
Một host từ xa khắc phục được vấn đề vật lý. Một VM trên cloud hay chiếc máy Linux dư dả vẫn luôn bật, giữ được mạng, và có nhân rảnh cho công việc song song. Cái giá phải trả là agent giờ chạy ở một nơi bạn không nhìn thấy. Bạn phải SSH vào để kiểm tra, cuộn log để đoán xem nó đã đi được bao xa, và kết quả nằm trên cỗ máy đó cho đến khi bạn copy mang đi.
Chạy cả hai mới là trạng thái cuối cùng thực tế với hầu hết mọi người. Bạn giữ những chỉnh sửa nhanh, mang tính tương tác trên laptop nơi phản hồi tức thì, và đẩy những job dài hoặc song song lên server nơi chúng có thể chạy cả tiếng đồng hồ mà không cần trông nom. Mẹo nằm ở việc làm cho một hay năm host đều cảm giác như một chỗ duy nhất, thay vì một bảng tính địa chỉ IP.
Tự thiết lập từ xa, và chỗ mà từng bước đổ vỡ
Con đường thủ công thì đã quá rõ. Đây là bản ngắn gọn, kèm kiểu lỗi xuất hiện ở từng bước.
Khởi tạo host và đưa agent lên đó:
ssh you@build-server
# install the agent's CLI, e.g. Claude Code or Codex
# authenticate it with your own subscription or API key
git clone [email protected]:your-org/your-repo.git
cd your-repo
claude
Kiểu lỗi: agent xác thực bằng tài khoản của bạn trên một cỗ máy mà người khác có thể chạm vào, và thông tin xác thực nằm trong lịch sử shell cùng file cấu hình của shell đó. Không có bản ghi nào cho biết host nào giữ key nào.
Giữ tiến trình sống sót qua phiên SSH:
tmux new -s agent
claude # start the long task
# Ctrl-b d to detach, close the laptop, reconnect later
tmux attach -t agent
Kiểu lỗi: tmux sống sót qua việc mất kết nối SSH, nhưng không chịu được việc server khởi động lại, bị OOM kill, hay việc bạn quên mất trong sáu phiên trên ba server thì phiên nào đang giữ tiến trình bạn cần. Detach không đồng nghĩa với bền bỉ.
Lấy kết quả về và xem chuyện gì đã xảy ra:
scp you@build-server:~/your-repo/CHANGES.md .
ssh you@build-server 'cd your-repo && git diff'
Kiểu lỗi: diff nằm trên cỗ máy; lý lẽ thì nằm trong bộ đệm cuộn màn hình vốn đã bị cắt ngắn; câu hỏi “tại sao” đã biến mất. Nhân đôi chuyện này với hai agent trên hai host, và mỗi lần kiểm tra bạn lại phải dựng lại trạng thái bằng tay.
Không bước nào trong số này khó cả. Vấn đề là chúng không ăn khớp với nhau. Mỗi host mới và mỗi agent mới lại là một đích SSH nữa, một phiên tmux nữa, một chỗ nữa cất giữ secret, và một log nữa bạn phải đọc để trả lời câu “xong chưa”.
Một Computer được kết nối thay đổi những gì
Sharkly gọi tên thứ mà bạn vẫn đang tự chế ra. Computer là một thiết bị, server hay container được kết nối, nơi một Agent có thể chạy công việc; nó cung cấp hệ điều hành, tệp, thông tin xác thực, quyền truy cập mạng và các công cụ mà Agent cần. Định nghĩa đó bao trùm cả ba lựa chọn của bạn: “Nó có thể là máy tính cục bộ, server từ xa, container, hoặc một cloud host được hỗ trợ.”
Bạn đăng ký host một lần thay vì SSH vào đó mỗi lần. Tạo token cài đặt dùng một lần từ Settings, Computers trên máy đích, rồi chạy:
sharkly computer register --install-token <install-token>
Token có thời hạn ngắn và chỉ dùng một lần, nên đừng đưa nó vào image hay script. Sau đó, một dịch vụ cục bộ chạy nền sẽ hoạt động trên Computer. Nó đăng ký host, phát hiện những công cụ agent nào đã được cài và báo cáo từng cái dưới dạng một Runtime, gửi heartbeat, nhận các lượt chạy trong hàng đợi, chuẩn bị thư mục, rồi báo cáo tiến độ và kết quả trở lại.
Có hai ranh giới cần nói thẳng ra, vì đây là chỗ người ta hiểu sai. Thứ nhất, dịch vụ cục bộ là bên khởi tạo kết nối tới server, nên một thiết lập thông thường không cần cổng vào; bạn không mở toang máy build của mình ra internet. Thứ hai, một Computer hiển thị Online chỉ có nghĩa là dịch vụ cục bộ của nó đang gửi heartbeat. Điều đó không có nghĩa là Runtime có thể thực thi một Task. Nếu một lượt chạy không khởi động được trên host đang online, hãy kiểm tra trạng thái năng lực của Runtime trước khi động đến mạng.
Từ đây, những kiểu lỗi phía trên đều đã có địa chỉ để xử lý. Thông tin xác thực thuộc về host, được giới hạn phạm vi theo host. Một lượt chạy sống lâu hơn terminal của bạn vì dịch vụ cục bộ sở hữu nó, chứ không phải một phiên tmux. Và diff, bản tóm tắt cùng lý lẽ đều quay về Task thay vì nằm trong bộ đệm cuộn màn hình trên cỗ máy mà bạn phải SSH vào.
Laptop, server hay cả hai: chọn sao cho đúng
Nhiều host hơn không tự động tốt hơn, nên hãy chọn theo công việc.
Dùng laptop khi tác vụ ngắn, mang tính tương tác và bạn muốn ngồi xem nó chạy. Đăng ký nó như một Computer cá nhân và, trong Sharkly Desktop, bật Prevent sleep để một job nhanh không bị chặn bởi chế độ ngủ của hệ thống. Lưu ý rằng Prevent sleep chỉ xuất hiện trên máy cục bộ trong ứng dụng desktop; nó không khả dụng trên Computer dùng chung hoặc từ xa. Nếu mọi thứ bạn chạy đều xong trong một lần nghỉ uống cà phê và không bao giờ cần sống sót qua việc gập nắp, thì bạn chưa cần server, và thêm một cái chỉ là công bảo trì khiến bạn bực mình.
Dùng server từ xa khi tác vụ chạy lâu, cần nhiều nhân hơn, hoặc không nên tranh giành tài nguyên với trình soạn thảo của bạn. Một host Linux hay VM trên cloud đã đăng ký sẽ thức mặc định và cho các agent song song chỗ để làm việc. Đây cũng là lúc giới hạn số tác vụ đồng thời trên mỗi host của Computer và phạm vi hiển thị Organization hay Space phát huy tác dụng: cỗ máy và thông tin xác thực của nó vốn để chia sẻ, và Sharkly đối xử với chúng đúng như vậy.
Dùng cả hai khi bạn muốn chỉnh sửa tương tác ở cục bộ và các lượt chạy nặng ở từ xa mà không phải mang trong đầu hai mô hình tư duy. Đăng ký cả laptop lẫn server, rồi gán mỗi Task cho Computer và Runtime phù hợp. Cách ly worktree giúp các agent song song không đụng nhau vẫn hoạt động y hệt, dù các agent dùng chung một host hay trải trên nhiều host, nên “cả hai” chỉ tốn thêm thao tác chọn lựa, chứ không phải một quy trình thứ hai.
Chỗ mà cách tự làm hết mở rộng được, và bảng tác vụ thêm được gì
Thiết lập SSH-và-tmux trụ được với một agent trên một host. Nó sụp ngay khi bạn có vài agent trên vài cỗ máy, vì không có câu trả lời chung cho “agent nào đang ở đâu, cái gì đã xong, cái gì thất bại, và cái gì cần tôi xem xét”. Câu hỏi đó chính là toàn bộ lý do để chạy nhiều hơn một agent cùng lúc, và cũng đúng là thứ mà một đống terminal không thể trả lời.
Bảng tác vụ thay đổi đơn vị từ “một phiên trên một host” thành “một Task có bản ghi”. Agent nghiên cứu, thực thi, kiểm thử và báo cáo; con người định hướng, trao quyền và chấp nhận kết quả. Việc thực thi, các điểm nghẽn, kết quả và thảo luận tiếp theo đều quay về dòng thời gian của Task, nên kiểm tra một lượt chạy từ xa là mở một Task, chứ không phải SSH vào một phỏng đoán. Tự động hóa dừng lại ở chỗ cần đến phán đoán của tập thể: agent trao cho bạn một thay đổi kèm bản tóm tắt và bằng chứng, còn quyết định merge và phát hành vẫn thuộc về bạn.
Đó là ranh giới giữa hai cách tiếp cận. Cách tự làm chỉ chạy agent ở từ xa. Một bảng tác vụ giữ cho bối cảnh, tiến độ, điểm nghẽn, kết quả và việc con người xem xét luôn hiển thị từ lúc yêu cầu đến lúc phát hành, bất kể host nào đã làm việc đó.
Danh sách kiểm tra bạn có thể áp dụng ngay hôm nay
Đi lần lượt danh sách này trên những host bạn dự định dùng:
- [ ] Chọn host một cách trung thực: laptop cho tương tác, server cho việc dài hoặc song song, cả hai nếu bạn thật sự cần.
- [ ] Cài một Runtime agent được hỗ trợ trên mỗi host và xác thực nó bằng gói đăng ký hoặc API key của riêng bạn.
- [ ] Đăng ký mỗi host một lần bằng
sharkly computer register --install-token <token>thay vì SSH vào mỗi lượt chạy. - [ ] Xác nhận mỗi Computer hiển thị Online và có ít nhất một Runtime báo Available; chỉ online thôi thì không chạy được Task.
- [ ] Đặt phạm vi hiển thị của Computer là Personal cho laptop, Organization hoặc Space cho server dùng chung.
- [ ] Trên laptop, bật Prevent sleep cho những lượt chạy buộc phải sống sót qua việc gập nắp.
- [ ] Gán một Task nhỏ, nhàm chán cho một host từ xa và xác nhận kết quả quay về Task, chứ không phải bộ đệm cuộn màn hình.
- [ ] Dùng
sharkly computer listvàsharkly daemon disk-usageđể theo dõi các host và thu hồi dung lượng.
Bạn có thể tự dựng thiết lập từ xa bằng tay với SSH, tmux và worktree, hoặc đăng ký những host sẵn có của mình làm Computer và để dịch vụ cục bộ sở hữu các lượt chạy. Nếu bạn đã chạy vài coding agent trên nhiều hơn một cỗ máy, Sharkly cho bạn một chỗ để quản lý tác vụ và kết quả của chúng. Kết nối một Computer, tạo một Agent, và giao cho nó một việc nhàm chán trước đã.



