Hermes computer_use tool: agent điều khiển desktop ảo trên VPS qua Docker

Chia sẻ bài viết

Mục lục
Minh hoạ Hermes computer_use điều khiển desktop ảo Docker VPS

Tool computer_use của Hermes Agent là cú chuyển trạng thái: từ "agent đọc web" sang "agent ngồi gõ bàn phím trên một cái desktop thật". Bài này hướng dẫn dựng môi trường Docker có X11 + VNC trên VPS, cắm Hermes vào, và bắt nó tự click chuột giùm bạn. Không phải demo, mà là cách team nhỏ tự động hóa các app desktop legacy không có API.

computer_use khác browser tool như thế nào

Đa số người mới biết Hermes nghĩ tool browser là đủ. Đúng - cho 80% trường hợp. Nhưng có một lớp việc mà browser không chạm tới: app desktop (Windows installer chạy qua Wine, phần mềm kế toán dạng .exe, công cụ thiết kế cũ, GUI of legacy ERP), app yêu cầu mouse hover phức tạp, hoặc tình huống bạn cần test một app mới build chạy trên môi trường sạch.

browser trong Hermes thực ra là Playwright headed/headless điều khiển Chromium - giới hạn trong DOM. Còn computer_use là cấp thấp hơn một bậc: agent nhận screenshot pixel-level của toàn bộ desktop, rồi gửi lệnh click x=420 y=312, type "abc", key Enter, scroll, screenshot. Mô hình thị giác phải nhìn screenshot rồi tự suy ra tọa độ. Đây là pattern mà Anthropic giới thiệu cuối 2024 với Claude, và Hermes integrate sẵn.

💡 Mẹo: Nếu task chỉ là điền form web, dùng browser. computer_use tốn token gấp 5-10 lần vì phải xử lý ảnh screenshot mỗi step. Chỉ dùng khi thật sự cần.

Phần cứng nên có

Chạy desktop ảo bên trong Docker tốn RAM hơn bạn nghĩ. Mỗi screenshot ở 1280x720 RGB là ~2.6MB raw, sau khi nén PNG còn vài trăm KB nhưng vision model vẫn phải decode. Sau một buổi test, cấu hình thực tế:

Use case RAM tối thiểu VPS gợi ý
Chạy 1 desktop Xvfb + Hermes thuần 4GB VPS 80 (6GB)
Desktop + Firefox/Chrome + Hermes 6GB VPS 160 (8GB)
Multi-desktop (2-3 container) + concurrent 10GB+ VPS 320 (12GB)

Mình test trên VPS 160 của TND (8vCPU/8GB/160GB SSD NVMe Ceph), một container Hermes + một container desktop Xubuntu chạy thoải mái, CPU idle 5-10% khi agent không active, peak ~60% lúc render. RAM ECC giúp container chạy dài ngày không bị OOM kill ngẫu nhiên - mình từng dính trên VPS cheap không ECC, mỗi 3-4 ngày Hermes mất state vì kernel kill subprocess.

Dựng Docker image desktop có VNC

Có nhiều image sẵn (Kasm, dorowu/ubuntu-desktop-lxde-vnc), nhưng mình thích tự build vì kiểm soát được gói cài. Tạo Dockerfile:

FROM ubuntu:22.04

ENV DEBIAN_FRONTEND=noninteractive
ENV DISPLAY=:1
ENV VNC_PORT=5901
ENV NO_VNC_PORT=6901

RUN apt-get update && apt-get install -y \
    xfce4 xfce4-goodies \
    tigervnc-standalone-server tigervnc-common \
    novnc websockify \
    firefox xdotool scrot \
    python3 python3-pip curl wget \
    && rm -rf /var/lib/apt/lists/*

RUN mkdir -p /root/.vnc && \
    echo "tnd-vps-pass" | vncpasswd -f > /root/.vnc/passwd && \
    chmod 600 /root/.vnc/passwd

COPY startup.sh /startup.sh
RUN chmod +x /startup.sh

EXPOSE 5901 6901
CMD ["/startup.sh"]

File startup.sh:

#!/bin/bash
vncserver -kill :1 || true
rm -rf /tmp/.X1-lock /tmp/.X11-unix/X1

vncserver :1 -geometry 1280x720 -depth 24 -localhost no
websockify --web=/usr/share/novnc/ 6901 localhost:5901 &

tail -f /root/.vnc/*.log

Build và chạy:

docker build -t hermes-desktop .
docker run -d --name desktop \
  -p 127.0.0.1:5901:5901 \
  -p 127.0.0.1:6901:6901 \
  --shm-size=2g \
  hermes-desktop
⚠️ Lưu ý: Bind port chỉ vào 127.0.0.1 - tuyệt đối không expose 5901/6901 ra public. VNC password ngắn dễ brute force. Truy cập từ máy local qua SSH tunnel: ssh -L 6901:localhost:6901 user@vps-ip rồi mở http://localhost:6901.

Cài Hermes và bật computer_use

Trong container Hermes (hoặc chạy Hermes trên host VPS, kết nối qua mạng nội bộ Docker), cài bằng one-liner:

curl -fsSL https://hermes.nousresearch.com/install.sh | bash

Sau đó chỉnh config để Hermes biết desktop ảo nằm ở đâu. Tạo ~/.hermes/config.yaml:

llm:
  provider: anthropic
  model: claude-sonnet-4.6
  api_key: sk-ant-...

tools:
  computer_use:
    enabled: true
    display: ":1"
    width: 1280
    height: 720
    docker_container: desktop
    screenshot_method: scrot

Nếu Hermes chạy trên host và desktop trong Docker, dùng docker exec wrapper. Hermes hỗ trợ cấu hình backend - đặt backend: docker trong terminal section để mọi lệnh shell agent gọi được route vào container desktop.

Test agent driving desktop

Khởi động Hermes CLI:

hermes

Prompt thử:

Mở Firefox trên desktop, vào https://www.tnd.vn/vps/,
chụp screenshot và mô tả những gói VPS hiển thị trên trang.

Hermes sẽ:

  1. Gọi computer_use.screenshot để thấy desktop hiện tại
  2. Vision model phân tích vị trí icon Firefox
  3. Gọi computer_use.click với tọa độ tương ứng (hoặc computer_use.key để gõ Super, search "firefox")
  4. Đợi Firefox load, screenshot lại
  5. Click address bar, gõ URL, Enter
  6. Screenshot trang đã load, mô tả nội dung

Lần đầu chạy có thể mất 30-60 giây vì mỗi step là một round-trip API. Khi đã quen pattern, Hermes lưu thành skill và lần sau nhanh hơn nhiều.

Use case thực tế đang chạy production

Mình kể thật vài cái đã deploy:

1. Test installer .exe mới build

App team dev build installer Windows mới, cần test trên máy sạch. Trước đây phải có máy ảo Windows. Giờ chạy Wine trong container desktop, để Hermes:

  • Double-click installer.exe
  • Bấm Next, Next, Accept license, Install
  • Đợi cài xong, mở app
  • Test một số luồng chính theo checklist
  • Báo lỗi nếu có dialog error pop up

Tiết kiệm thời gian QA mỗi build ~30 phút.

2. Automate desktop ERP cũ không có API

Một khách dùng phần mềm kế toán Việt Nam cũ kỹ, chỉ có GUI Windows. Mỗi cuối tháng phải copy 200 dòng từ Excel vào form. Hermes + computer_use đọc file Excel, mở app, click từng cell, gõ value, save. Chạy trong container, không cần máy thật.

3. Browser fingerprinting test

Khi build product cần check stealth của antidetect browser, Hermes mở browser test thật trên desktop ảo, vào các site như creepjs, browserleaks, screenshot kết quả, so sánh giữa các profile. Vì điều khiển ở level desktop nên signal trông giống user thật hơn nhiều so với headless Playwright.

💡 Mẹo: Để giảm token cost, cấu hình Hermes chỉ screenshot vùng nhỏ thay vì full screen khi đã biết vị trí. Tool computer_use chấp nhận tham số region.

Bảo mật khi chạy computer_use trên VPS public

Cái này phải nhấn mạnh. Một agent biết click chuột + gõ phím + đọc screen = đầy đủ quyền tương đương user đang ngồi trước máy. Nếu compromise:

  • Container desktop chạy với user không phải root (đừng chạy VNC server trong process root như trong demo của mình ở trên, đó là quick start - production phải tạo user riêng)
  • Bind tất cả port localhost, expose qua SSH tunnel hoặc reverse proxy có auth
  • Đặt firewall: ufw deny 5901 && ufw deny 6901
  • Không lưu credential nhạy cảm trong skill memory của agent
  • Set quota CPU/RAM cho container: --cpus=4 --memory=6g
  • Snapshot VPS định kỳ - nếu agent làm hỏng môi trường thì rollback nhanh

Khi cần truy cập web bằng IP sạch (ví dụ test geo-content, hoặc agent thay user duyệt một site đang chặn IP datacenter), kết hợp với proxy IPv4 VN/US dedicated 95k/IP/tháng - cấu hình system-wide proxy trong container, Firefox tự đi qua proxy, mọi click computer_use đều an toàn về mặt IP reputation.

Khi nào dừng dùng computer_use và quay về API

Mình học bài học này sau 2 tháng: computer_use rất cool nhưng đắt và chậm. Nếu task có API thuần (REST, GraphQL, RPC), luôn ưu tiên gọi API. Nếu có browser automation đủ, dùng browser tool. computer_use dành cho cuối cùng - khi không còn cách nào khác. Đó cũng là triết lý của Hermes: pick the right tool, đừng dùng dao chặt cây để cắt giấy.

Nền tảng để chạy ổn định là VPS có RAM dư, ổ đĩa nhanh, và uptime tốt - vì Hermes giữ persistent memory trong file, nếu disk lăn quay hay restart bất thường thì agent mất skill. Mình dùng VPS 160 của TND chạy được 4 tháng chưa restart lần nào. Ceph SSD NVMe nên I/O không bao giờ là bottleneck.

Tham khảo thêm bài cài Hermes gắn proxy để có baseline, và hướng dẫn chọn VPS cho vibe coder nếu chưa biết nên thuê cấu hình nào.

Bài viết liên quan

Cần VPS có RAM ECC + SSD NVMe để chạy desktop ảo + Hermes?

TND Cloud VPS 160 (8vCPU/8GB/160GB) chạy được Hermes + 2-3 container desktop ảo song song mà không ngắc. Snapshot, ổ Ceph chống lỗi.

Xem bảng giá VPS