Bạn muốn một AI agent mà bạn có thể nhắn tin từ điện thoại, một agent vẫn chạy sau khi bạn đóng laptop và tự động quay lại sau khi khởi động lại? Hermes Agent làm được điều đó: nó chạy như một cổng kết nối (gateway) mà bạn trò chuyện qua Telegram, và một khi bạn kết nối đúng cách, nó sẽ tự khởi động lại sau khi bị crash hoặc mất điện.
Tôi đã xây dựng cùng một thiết lập trên hai máy, một VPS đám mây giá rẻ và Mac Mini trên bàn làm việc, để tôi có thể viết ra toàn bộ quy trình mà không bỏ sót bước nào. Đó là một con đường duy nhất. Máy tính chỉ thay đổi những gì bạn gõ ở hai chỗ: lệnh cài đặt và phần giữ cho gateway hoạt động. Mọi thứ ở giữa đều giống hệt nhau.
Mọi thứ bên dưới đều chạy trên phần cứng của chính tôi. Đường dẫn Linux là một Hetzner CX23 (x86, 2 vCPU, 4GB RAM, 40GB ổ đĩa) trên Ubuntu 24.04.4 LTS - Đường dẫn Mac là Mac Mini M4 trên macOS 15. Cả hai đều chạy Hermes Agent v0.16.0.
bạn sẽ có được gì sau cùng
- Hermes Agent được cài đặt, chạy dưới tài khoản người dùng thông thường, không phải root
- Một bot Telegram mà bạn nhắn tin từ điện thoại, chỉ khóa cho tài khoản của bạn
- Gateway chạy như một dịch vụ được quản lý, để nó tự động quay lại sau khi bị crash hoặc khởi động lại
- Trên VPS, một máy chủ được bảo vệ: chỉ ssh bằng key, không đăng nhập root, tường lửa
chọn máy của bạn
VPS là cách rẻ nhất. Bất kỳ máy x86 nào có 4GB RAM và khoảng 20GB ổ đĩa trống đều chạy được; máy của tôi là Hetzner CX23 với giá $7.79/tháng (giá Hetzner US, 2026-06-18). Thuê nó, và nó luôn hoạt động theo định nghĩa.
Một chiếc Mac bạn đã sở hữu là lựa chọn khác. Bất kỳ máy Mac Apple silicon nào luôn bật nguồn đều hoạt động được, và chi phí vận hành bằng không ngoài giá máy. Sự đánh đổi là lớp độ bền (durability layer) phức tạp hơn trên macOS, điều tôi sẽ đề cập ở cuối.
Bạn cần một ssh key trên máy của mình (ssh-keygen -t ed25519 nếu bạn chưa có), một tài khoản Telegram và một mô hình cho agent. Hướng dẫn này chỉ đến Nous Portal, sử dụng OAuth, vì vậy không có API key nào phải lưu trong tệp. Hermes cần một mô hình có ít nhất 64k ngữ cảnh.
bước 1: chuẩn bị máy
trên VPS
Tạo máy chủ tại nhà cung cấp của bạn: Ubuntu 24.04, một instance x86 (không phải Arm, xem ghi chú chi phí) và dán ssh public key của bạn tại thời điểm tạo.
Một máy chủ công cộng mới cần vài phút để bảo vệ trước khi bạn đặt agent lên đó. secure-box.sh trong công thức thực hiện việc này trong một lần: nâng cấp apt, một swapfile 2GB, một người dùng sudo không phải root với key của bạn, ssh chỉ bằng key với đăng nhập root tắt và tường lửa chỉ cho phép ssh. Chỉnh sửa hai biến ở đầu, sao chép nó qua, chạy nó với quyền root:
1scp secure-box.sh root@<địa-chỉ-ip-vps-của-bạn>:2ssh root@<địa-chỉ-ip-vps-của-bạn> 'bash secure-box.sh'
Bản Ubuntu này được cài đặt với PasswordAuthentication được đặt là yes, mặc dù tôi đã tạo máy chủ bằng ssh key. Script sẽ tắt nó. Trước khi bạn đóng phiên root, hãy mở một terminal thứ hai và xác nhận người dùng mới có thể đăng nhập, để một lỗi không thể khóa bạn ra ngoài:
1ssh hermes@<địa-chỉ-ip-vps-của-bạn>
Từ đây bạn là hermes, không phải root.
trên Mac
Không cần bước bảo vệ. Đó là máy của bạn trên mạng của riêng bạn, không phải máy chủ công cộng. Cài đặt Homebrew nếu bạn chưa có (trình cài đặt sử dụng nó ở bước tiếp theo) và bạn đã sẵn sàng.
bước 2: cài đặt Hermes
Việc cài đặt là một lệnh duy nhất, giống nhau trên cả hai máy, chạy với tư cách người dùng thông thường của bạn:
1curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash2source ~/.bashrc3hermes --version
Trình cài đặt phát hiện hệ điều hành của bạn và kéo bộ công cụ riêng của nó (uv, Python 3.11, Node.js 22, ripgrep, ffmpeg, Playwright Chromium cho các công cụ trình duyệt) vào ~/.hermes, vì vậy nó không bao giờ chạm vào Python hệ thống của bạn. Trên máy Hetzner của tôi, nó đã cài đặt Hermes Agent v0.16.0 trên Python 3.11.15.
Đây là bước nặng. Trên VPS, nó đã đưa dung lượng ổ đĩa từ 1.2GB đã sử dụng lên 7.8GB, khoảng 6.6GB, phần lớn là công cụ trình duyệt và Node. Hãy dự trù 20GB trống và đừng lo lắng. Chạy qua một lệnh ssh đơn giản không có terminal, trình cài đặt sẽ in ra "Setup wizard skipped (no terminal available)", điều này không sao, vì thiết lập là bước tiếp theo.
Trên Mac, lệnh tương tự cũng chạy, với một điểm phức tạp: cài đặt Homebrew trước. Với Homebrew có sẵn, trình cài đặt sẽ kéo git và các phụ thuộc của nó mà không cần nhắc nhở. Nếu không có nó, nó sẽ dựa vào Command Line Tools của Apple, có thể mở một hộp thoại macOS mà bạn phải nhấp vào, và một hộp thoại không tốt qua ssh (đây là trong nhánh macOS của trình cài đặt). Sau đó, nó là cùng một luồng như trên.
bước 3: trỏ nó vào một mô hình
1hermes setup --portal
Đây là OAuth chống lại Nous Portal: nó in ra một URL và một mã, bạn phê duyệt nó trong trình duyệt và bây giờ máy chủ nói chuyện với một mô hình mà không có API key nào nằm trong tệp. Nous Portal có một gói miễn phí và tôi đã chạy toàn bộ mọi thứ trên một mô hình miễn phí. Nếu bạn muốn tự mang nhà cung cấp của mình, hãy chạy hermes model và chọn một cái; key sau đó sẽ nằm trong ~/.hermes/.env.
bước 4: nói chuyện với nó
trên VPS
Khoảnh khắc ssh của bạn bị ngắt, một phiên foreground sẽ chết cùng với nó. tmux giữ cho phiên hoạt động: bắt đầu bên trong tmux, tách nó ra và nó sẽ tiếp tục chạy.
1sudo apt-get install -y tmux2tmux new -s hermes # sau đó, bên trong: hermes
Tách bằng Ctrl-b rồi d, và kết nối lại sau đó từ bất cứ đâu:
1ssh hermes@<địa-chỉ-ip-vps-của-bạn>2tmux attach -t hermes
Lần khởi động đầu tiên của agent tương tác mất một chút thời gian. Máy của tôi mất khoảng 30 giây để tải mô hình và kỹ năng trước khi dấu nhắc xuất hiện. Khi nó đã hoạt động, các lệnh gạch chéo (slash commands) sẽ hoạt động.
/goal là lệnh đáng để xem: nó đặt một mục tiêu thường trực mà agent làm việc qua các lượt, với một mô hình đánh giá kiểm tra sau mỗi lượt xem nó đã hoàn thành chưa.
1/goal kiểm tra tổng RAM và dung lượng ổ đĩa trống của máy này bằng các công cụ shell, sau đó báo cáo cả hai trên một dòng và đánh dấu mục tiêu đã hoàn thành
Máy của tôi đã tự chạy lệnh shell và trả về "VPS total RAM: 3.7Gi, free disk space: 28G" trong khoảng 15 giây. Đó là agent sử dụng các công cụ của chính nó.
Hãy phân biệt hai khái niệm: tmux giữ một phiên tương tác mở qua một kết nối ssh bị ngắt, nhưng không qua một lần khởi động lại. Đối với một gateway không giám sát tồn tại sau khi khởi động lại, bạn muốn một dịch vụ được quản lý, đó là bước 6.
trên Mac
Bạn đang ngồi trước máy, vì vậy bạn có thể chạy hermes trong một terminal. tmux vẫn hữu ích nếu bạn ssh vào từ máy tính xách tay của mình, nhưng nó là tùy chọn ở đây.
bước 5: Telegram gateway
Phần này giống hệt nhau trên cả hai máy. Tạo một bot: nhắn tin cho @ BotFather trên Telegram, gửi /newbot và sao chép token. Lấy ID người dùng số của bạn từ @ userinfobot. Sau đó cấu hình gateway:
1hermes gateway setup
Chọn Telegram, dán token và đặt người dùng được phép thành ID số của bạn để chỉ bạn mới có thể nói chuyện với nó. Token sẽ được lưu vào ~/.hermes/.env, phần còn lại vào ~/.hermes/gateway.json.
Thiết lập chỉ ghi cấu hình. Nó không khởi động bất cứ thứ gì, vì vậy bot vẫn im lặng và điều đó khiến mọi người bất ngờ: chưa có gì đang thăm dò Telegram. Khởi động nó ở chế độ foreground một lần để kiểm tra nó kết nối:
1hermes gateway run
Bạn muốn thấy, trong nhật ký:
1gateway.run: Connecting to telegram...2[Telegram] Connected to Telegram (polling mode)3gateway.run: ✓ telegram connected
Chế độ thăm dò (polling mode) có nghĩa là gateway chủ động kết nối đến Telegram; không có gì kết nối vào máy của bạn, đó là lý do tại sao tường lửa không cần cổng inbound nào ngoài ssh. Nhắn tin cho bot của bạn; nó sẽ trả lời. Sau đó dừng gateway foreground bằng Ctrl-C, vì bạn không thể có hai thứ cùng thăm dò một token cùng một lúc và bước tiếp theo sẽ chạy nó như một dịch vụ.
bước 6: làm cho nó tồn tại sau khi khởi động lại
Đây là nơi duy nhất hai máy khác nhau.
trên VPS: systemd
hermes gateway install đăng ký gateway như một dịch vụ systemd để nó khởi động lại khi bị crash và quay lại sau khi khởi động lại. Trên phiên bản này, trình cài đặt hỏi hai câu hỏi [Y/n] và không có cờ nào để bỏ qua chúng. Chạy nó qua một lệnh ssh không tương tác, điều tự nhiên khi viết script cho một máy chủ và nó không nhận được câu trả lời, nó sẽ hủy bỏ và không cài đặt gì. Cung cấp câu trả lời trên stdin:
1printf 'n\nY\n' | hermes gateway install
Hai câu hỏi là "bắt đầu gateway ngay bây giờ?" và "tự động bắt đầu khi đăng nhập/khởi động?". n rồi Y có nghĩa là: không bắt đầu nó ngay lúc này, nhưng hãy bật nó khi khởi động. Trình cài đặt cũng bật tính năng kéo dài phiên người dùng (user-session lingering), đó là thứ cho phép một dịch vụ người dùng chạy trước khi bạn đã đăng nhập. Xác nhận nó, bởi vì đây là thứ làm cho "tồn tại sau khi khởi động lại" trở nên đúng và không chỉ là "tồn tại sau khi đăng xuất":
1loginctl show-user $USER -p Linger # muốn: Linger=yes
Bắt đầu nó và kiểm tra nó:
1hermes gateway start2systemctl --user status hermes-gateway
Bạn muốn thấy active (running) và NRestarts=0. Trên máy của tôi, gateway sử dụng khoảng 280MB và toàn bộ máy ở khoảng 556MB, thoải mái trên 4GB.
Bây giờ là bài kiểm tra thực sự. Khởi động lại và không chạm vào nó:
1sudo reboot
Máy của tôi đã quay lại trong khoảng 15 giây, gateway đã tự động khởi động, kết nối lại với Telegram và trả lời tin nhắn tiếp theo với lịch sử trò chuyện từ trước khi khởi động lại còn nguyên vẹn. Đó là toàn bộ mục đích.
trên Mac: launchd và một watchdog
macOS sử dụng launchd, không phải systemd và có một cái bẫy. Trên macOS 15 với Hermes v0.16.0, hermes gateway start có thể không đăng ký được dịch vụ launchd và dự phòng, mà không báo cho bạn, thành một tiến trình nền không được giám sát. Bạn sẽ thấy điều này:
1Bootstrap failed: 5: Input/output error2⚠ launchd cannot manage the gateway on this macOS version (launchctl exit 5)3✓ Started gateway as a background process instead4 It will NOT auto-start at login or auto-restart on crash.
Nếu bạn đã có một công việc launchd hoạt động trước đó, lệnh này đã dỡ nó ra và dự phòng chạy tốt cho đến lần crash hoặc khởi động lại đầu tiên, sau đó agent của bạn sẽ biến mất mà không có gì báo cho bạn. launchctl thô hoạt động ở nơi cli thất bại, bao gồm cả qua ssh:
1launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/ai.hermes.gateway.plist2launchctl print gui/$(id -u)/ai.hermes.gateway | grep state # muốn: state = running
Plist khởi động gateway khi đăng nhập nhưng không khởi động lại nó khi bị crash. Một watchdog cron thu hẹp cả hai khoảng trống và cron chạy khi khởi động mà không cần đăng nhập. Công thức cung cấp gateway-watchdog.sh; nó kiểm tra mỗi 5 phút xem tiến trình gateway còn sống không và khởi động lại nó nếu không. Cài đặt nó theo lịch trình:
1(crontab -l 2>/dev/null; echo '*/5 * * * * $HOME/scripts/gateway-watchdog.sh >/dev/null 2>&1') | crontab -
Tôi đã thấy trình tự này khôi phục một gateway bị hạ cấp trên Mac Mini của chính mình. Khởi động lại nó và xác nhận gateway đã quay lại trong vòng năm phút mà không cần đăng nhập.
xác minh thiết lập của bạn
- Dịch vụ đang hoạt động: systemctl --user status hermes-gateway trên Linux (active (running)), hoặc launchctl print gui/$(id -u)/ai.hermes.gateway | grep state trên macOS (state = running)
- Nhắn tin cho bot của bạn: nó trả lời bạn và bỏ qua bất kỳ ai không nằm trong danh sách người dùng được phép của bạn
- Trên Linux, loginctl show-user $USER -p Linger hiển thị Linger=yes
- Khởi động lại máy, đợi, nhắn tin cho bot một lần nữa mà không cần đăng nhập lại: nó trả lời
chi phí
Trên VPS, máy chủ là khoản chi duy nhất. Máy của tôi là Hetzner CX23 với giá $0.012/giờ, giới hạn ở $7.79/tháng (giá Hetzner US, 2026-06-18; EU CX22 có cấu hình tương tự và rẻ hơn).
Trên Mac, đó là một máy bạn đã sở hữu, không có dịch vụ bổ sung nào. Mô hình này miễn phí trên gói miễn phí của Nous Portal trong cả hai trường hợp.
Ở đây, bộ nhớ không phải là giới hạn: gateway sử dụng khoảng 280MB, toàn bộ máy khoảng 556MB, vì vậy 1GB RAM là quá đủ. Ổ đĩa là giới hạn thực sự: bản cài đặt khoảng 6.6GB, vì vậy một image 1GB hoặc 10GB là chật, hãy cung cấp 20GB. Và sử dụng x86, đó là lựa chọn an toàn.
tự chạy nó và điều gì tiếp theo
Cả hai máy đều có một công thức đầy đủ với các script chính xác, có thể chạy nguyên trạng:
- Đường dẫn VPS: cheap-vps
- Đường dẫn Mac: mac-mini-24-7
Bây giờ bạn đã có một agent luôn hoạt động trên Telegram tồn tại sau khi khởi động lại.
Flightplan tiếp theo được xây dựng dựa trên nó: các công việc theo lịch chỉ nhắn tin cho bạn khi có điều gì đó quan trọng, một không gian làm việc được đồng bộ hóa git mà agent đọc và ghi, và luồng soạn thảo và phê duyệt giữ một con người trong mọi hành động công khai.
cảm ơn bạn đã đọc





