24/7
Chạy agent lập trình 24/7 trên máy chủ của riêng bạn
Một agent lập trình chạy liên tục cần ba thứ: một máy không bao giờ ngủ, một tiến trình sống lâu hơn kết nối của bạn, và một cách để biết khi nào nó cần đến bạn. Dưới đây là các cách để có từng thứ, từ tmux, systemd đến session daemon, cùng những giới hạn mà gói đăng ký của bạn đặt ra.
Trả lời nhanh
Đặt agent lên một máy không bao giờ ngủ (VPS hoặc máy ở nhà luôn bật). Chạy nó dưới một thứ sống lâu hơn phiên SSH: tmux khi dùng tương tác, một systemd user service (bật lingering) để đưa tmux trở lại lúc boot, hoặc một daemon sở hữu các phiên. Cho mỗi phiên song song một git worktree riêng. Thứ thường làm một agent 24/7 phải dừng là hạn mức sử dụng của gói, không phải phần cứng: các gói Claude được đặt lại sau mỗi năm giờ và còn có hạn mức hằng tuần.
Một agent lập trình trên laptop sẽ dừng khi bạn gập máy. Chuyển nó sang một máy luôn bật là phần dễ. Những phần người ta hay bỏ qua là giám sát tiến trình (thứ gì giữ tiến trình sống, và thứ gì đưa nó trở lại sau khi khởi động lại), cách ly giữa các phiên song song, và hạn mức sử dụng, thứ sẽ làm agent dừng từ lâu trước khi phần cứng đuối sức. Hướng dẫn này trình bày từng phần, cho Claude Code, Codex và các agent chạy trên terminal khác.
Cloud hay máy của riêng bạn
Trước hết hãy quyết định bạn có cần một chiếc máy hay không. Giờ các nhà cung cấp đã chạy agent thay bạn:
| Cloud của nhà cung cấp (ví dụ phiên trên cloud của Claude Code, tác vụ cloud của Codex) | Máy chủ hoặc máy ở nhà của riêng bạn | |
|---|---|---|
| Cài đặt | Kết nối GitHub (Claude cũng có thể tải lên một gói repo cục bộ) | Một VPS hoặc máy luôn bật, cộng với cài đặt và xác thực |
| Môi trường | Một VM tách biệt cho mỗi phiên, dựng bằng script; bị thu hồi sau một thời gian không hoạt động | Toolchain, database, bí mật của bạn, tồn tại lâu dài |
| Mạng và dịch vụ riêng | Mặc định bị giới hạn (danh sách domain cho phép); không tới được mạng riêng của bạn | Mọi thứ máy tới được: VPN, tailnet, database staging |
| Agent | Của một nhà cung cấp | Bất kỳ CLI nào: Claude Code, Codex, OpenCode, Grok Build, agy |
| Chi phí | Mức dùng trong gói của bạn (Anthropic: không tính phí tính toán riêng) | Mức dùng trong gói của bạn cộng vài euro mỗi tháng cho máy |
Nếu dự án của bạn nằm trên GitHub và build được từ một setup script, cloud của nhà cung cấp là cách ít công sức nhất. Tài liệu về phiên trên cloud của Anthropic là nơi nên bắt đầu; claude --cloud "…" khởi chạy một phiên từ terminal. Hãy chọn máy riêng khi agent cần những thứ chỉ máy của bạn có, hoặc khi bạn muốn agent của nhiều nhà cung cấp chạy cạnh nhau. Hướng dẫn chọn mua VPS trình bày cấu hình và giá hiện tại. Một chiếc Mac mini ở nhà cũng dùng được, miễn là bạn tắt chế độ ngủ.
Giám sát tiến trình
Agent tương tác là các chương trình terminal. Chúng chết theo terminal trừ khi có thứ khác giữ terminal đó. Bạn có bốn lựa chọn, từ đơn giản nhất đến bền bỉ nhất.
1. tmux
tmux new -A -s main
cd ~/src/api && claude # detach: Ctrl-b d · re-attach: tmux attach -t main
tmux sống sót qua các lần mất kết nối, không qua các lần khởi động lại. Đó là công cụ phù hợp cho công việc tương tác, và cũng là thứ tài liệu của Anthropic gợi ý để giữ một phiên Remote Control sống trên máy từ xa. Hướng dẫn tmux, mosh và Tailscale của chúng tôi có cấu hình mà agent cần.
2. systemd + tmux, để nó quay lại sau khi khởi động lại
Bạn không thể chạy trực tiếp một TUI tương tác dưới dạng service, vì nó cần terminal. Nhưng bạn có thể để systemd khởi động một tmux session đã detach lúc boot. Với user thường của bạn, tạo ~/.config/systemd/user/agents.service:
[Unit]
Description=tmux session for coding agents
[Service]
Type=forking
ExecStart=/usr/bin/tmux new-session -d -s main
ExecStop=/usr/bin/tmux kill-session -t main
[Install]
WantedBy=default.target
systemctl --user daemon-reload
systemctl --user enable --now agents.service
sudo loginctl enable-linger "$USER" # start user services at boot, without a login
Cách này đưa trở lại một phiên trống, không phải các cuộc trò chuyện của bạn. Tiếp tục chúng là một bước riêng (xem Chuyện gì xảy ra khi khởi động lại bên dưới).
3. Chạy headless theo lịch
Với các việc định kỳ, như nâng phiên bản dependency mỗi đêm, phân loại issue mới hay tạo lại tài liệu, hãy bỏ qua TUI. Chạy claude -p "…" hoặc codex exec "…" từ cron hoặc một systemd timer. Không có ai ở đó để phê duyệt gì cả, nên hãy chủ động đặt chế độ quyền và danh sách cho phép. Chạy agent với toàn quyền một cách an toàn hướng dẫn cách làm.
4. Một session daemon
Lựa chọn bền bỉ nhất là một tiến trình sở hữu các phiên agent: nó khởi chạy chúng, giữ bản ghi hội thoại, và cho bạn attach từ bất cứ đâu. Chế độ server của Remote Control trong Claude Code (claude remote-control) là một ví dụ. Mặc định nó phục vụ tối đa 32 phiên đồng thời, có thể chỉnh bằng --capacity, nhưng bạn vẫn phải chạy nó trong tmux hoặc một service. agy remote-control start đăng ký daemon của Antigravity thành một service của hệ điều hành. Các công cụ bên thứ ba, trong đó có Maude, tự triển khai daemon riêng xử lý được nhiều agent.
Phiên song song và worktree
Hai agent cùng sửa một bản checkout sẽ ghi đè thay đổi của nhau. Hãy cho mỗi phiên một git worktree riêng, tức một thư mục làm việc và nhánh riêng nhưng dùng chung lịch sử của repository:
git worktree add ../api-auth -b feature/auth
git worktree add ../api-billing -b fix/billing
# one tmux window per worktree, one agent per window
Claude Code có thể làm việc này thay bạn: claude --worktree feature-auth (hoặc -w) tạo một worktree trong .claude/worktrees/ trên một nhánh mới và khởi chạy phiên bên trong đó. Xem tài liệu về worktree.
Một máy chịu được bao nhiêu phiên phụ thuộc vào những gì chúng chạy, chứ không phải bản thân các agent. Một nguyên tắc hữu ích là 4 GB cho phiên đầu tiên cộng 1–2 GB cho mỗi phiên thêm có build hoặc chạy test, và nhiều hơn nếu mỗi worktree chạy dev server hay database riêng. Hãy theo dõi free -h trong một giờ bận rộn trước khi thêm phiên. Dung lượng đĩa cũng tăng dần, vì mỗi worktree có node_modules riêng.
Hạn mức và giới hạn tốc độ
Một máy chạy 24/7 chỉ có ích nếu gói của bạn cho phép agent làm việc liên tục, nên hãy đọc kỹ các giới hạn trước khi lên kế hoạch:
- Claude (Pro, Max). Hạn mức sử dụng được đặt lại sau mỗi năm giờ, và còn có hạn mức hằng tuần, theo bài viết về hạn mức sử dụng của Anthropic. Nhiều phiên song song dùng chung một hạn mức. Bạn có thể xem mình đã dùng đến đâu trong Settings → Usage.
- Codex (gói ChatGPT). Plus và các gói tương tự dùng cửa sổ năm giờ trượt, và có thể còn áp dụng hạn mức hằng tuần. Dùng CLI cục bộ và tác vụ trên cloud chia chung một hạn mức. Xem trang giá Codex của OpenAI cho gói của bạn.
- API key. Không có cửa sổ hạn mức, nhưng bạn trả tiền theo token, nên một vòng lặp mất kiểm soát sẽ tốn tiền thay vì dừng lại. Hãy đặt giới hạn chi tiêu trong console của nhà cung cấp.
Trên thực tế, "24/7" nghĩa là agent có thể làm việc bất cứ khi nào có việc và còn hạn mức, chứ không phải chạy hết công suất cả ngày. Hãy xếp các tác vụ dài vào lúc bạn vắng mặt, và chấp nhận rằng nó sẽ dừng cho tới lần đặt lại tiếp theo.
Chuyện gì xảy ra khi khởi động lại
Cập nhật kernel, bảo trì từ nhà cung cấp và việc bị kill do hết bộ nhớ đều khiến mọi thứ khởi động lại. Các cuộc trò chuyện của agent được lưu xuống đĩa, nên không mất gì, nhưng cũng không có gì tự chạy lại:
- Claude Code:
claude --continuetiếp tục cuộc trò chuyện gần nhất trong thư mục hiện tại, cònclaude --resumecho bạn chọn một cuộc. - Codex:
codex resume --last, hoặccodex resumeđể mở bộ chọn. - tmux: server đã mất, kéo theo bố cục cửa sổ của bạn. systemd unit ở trên sẽ tạo lại phiên. Các plugin như tmux-resurrect cũng có thể khôi phục bố cục.
Bất cứ thứ gì đang dở dang khi máy sập, như một thay đổi sửa nửa chừng hay một lượt test đang chạy, đều phải kiểm tra bằng tay. Đó thêm một lý do để agent commit thường xuyên.
Theo dõi từ điện thoại
Một agent chạy liên tục sẽ cần đến bạn vào những lúc bất chợt: một yêu cầu cấp quyền, một câu hỏi, một tác vụ đã xong cần xem lại. Các lựa chọn của bạn gồm một ứng dụng SSH attach vào tmux, miễn phí nhưng không có thông báo; các ứng dụng Remote Control của nhà cung cấp, mỗi ứng dụng cho một agent; hook ntfy để có thông báo đẩy, được trình bày trong phê duyệt yêu cầu từ điện thoại; hoặc một ứng dụng làm được tất cả.
Maude được xây dựng cho đúng kiểu thiết lập này. Nó triển khai qua SSH một daemon chạy các phiên của bạn trên máy chủ 24/7, giữ chúng chạy tiếp khi ứng dụng đã đóng, và xử lý Claude Code, Codex, OpenCode, Grok Build và Antigravity trên bao nhiêu máy chủ tùy bạn thêm. Bạn có thông báo đẩy với nút Cho phép/Từ chối, một hộp thư gom những gì đang chờ, cùng git worktree riêng cho mỗi phiên, xem lại diff và một terminal. Khi một agent hết hạn mức, bạn có thể chuyển giao phiên cho agent khác kèm bản tóm tắt công việc đến lúc đó. Bạn vẫn cần gói hoặc API key riêng của từng agent. Ứng dụng có giá $2.99 mỗi tuần sau 3 ngày dùng thử, hoặc $59.99 mỗi năm sau 7 ngày dùng thử.
Câu hỏi thường gặp
Gói đăng ký của tôi có cho phép dùng 24/7 không?
Một VPS chịu được bao nhiêu phiên agent?
free -h trước khi thêm phiên.Agent của tôi sẽ ra sao khi máy chủ khởi động lại?
claude --continue hoặc claude --resume, và codex resume --last. Một systemd user service có bật lingering có thể đưa tmux session trở lại lúc boot.Tôi có thể chạy Claude Code 24/7 trên Mac mini ở nhà không?
sudo pmset -a sleep 0), dùng mạng có dây, và truy cập qua Tailscale hoặc một ứng dụng kết nối ra ngoài. Remote Control và tmux đều chạy được ở đó; một chiếc Mac đi ngủ sẽ làm mọi thứ tạm dừng.Tôi có thể chạy Claude Code và Codex trên cùng một máy chủ không?
~/.claude và ~/.codex). Chạy chúng trong các cửa sổ tmux hoặc worktree riêng để chúng không sửa cùng một file.