Herdr: quản lý nhiều coding agent trong một cửa sổ, từ laptop tới VPS
Cài Herdr, chia workspace, tab và khung terminal, đọc trạng thái agent, dùng prefix mode, cài Herdr skill để Claude Code gọi Codex review, rồi chạy Herdr trên VPS.
✓ Đã duyệt độc lập · cập nhật 15/10/2026 · 33 min
1. Bốn tab terminal, bốn agent và một vấn đề quen thuộc
Tùng Nguyễn mở video bằng một tình huống mà nhiều người dùng coding agent đang gặp. Bạn mở bốn tab terminal, và mỗi tab lại chạy một agent, chẳng hạn Claude Code ở tab này, Codex ở tab kia. Theo Tùng, rất có thể cách làm đó vẫn chưa tối ưu. Bạn mất rất nhiều thời gian chuyển qua lại giữa các tab chỉ để kiểm tra trạng thái của từng agent: agent nào đã hoàn thành công việc, agent nào đang đứng chờ bạn cấp quyền. Tệ hơn nữa, nếu bạn lỡ tay bấm tắt một tab, thì agent đang làm việc trong tab đó rất có thể cũng bị tắt luôn, và phần việc đang dở bị mất.
Trên màn hình, phần mở đầu minh họa đúng cảnh đó: một cửa sổ terminal với bốn tab đánh số (zsh, rồi claude, codex), trong một tab là Claude Code đang "migrating database schema", sửa một file migration SQL và chạy test với thanh tiến độ khoảng 61%. Rồi một hình minh họa khác: bấm tắt tab, công việc biến mất theo.
Có một công cụ mã nguồn mở sinh ra để giải quyết đúng bài toán này. Nó mới ra mắt khoảng sáu tháng trước nhưng đã đạt hơn 40.000 star trên GitHub, và tên của nó là Herdr. Trong video này, Tùng đi cùng người xem tìm hiểu Herdr là gì, theo thứ tự: từ phần cài đặt, tới cách chia workspace, cách đọc trạng thái của các agent, và cuối cùng là cách để một agent có thể tự giao việc cho một agent khác.

brew install herdr), 02 Chia workspace, 03 Đọc trạng thái agent với bốn nhãn Blocked, Working, Done, Idle.Khung lộ trình trên màn hình tóm lại ba chặng đầu tiên. Bước một là cài đặt, có ghi kèm lệnh cài qua Homebrew. Bước hai là chia workspace, minh họa bằng một khung cửa sổ được chia thành nhiều ô. Bước ba là đọc trạng thái agent, với bốn nhãn màu: đỏ cho Blocked, vàng cho Working, xanh dương cho Done và xanh lục cho Idle. Sau ba chặng đó, video đi tiếp sang phần phối hợp nhiều agent và phần chạy Herdr trên VPS.
2. Herdr tự nhận là một agent runtime, cài bằng một dòng lệnh
Tùng mở trang chủ của Herdr. Điều đầu tiên anh chỉ ra là cách họ tự mô tả: họ không nói mình là một terminal, mà nói mình là một agent runtime, tức là một môi trường để các agent hoạt động bên trong. Câu slogan lớn trên trang là "Run them anywhere. Leave them running." Theo Tùng, ý của câu này là bạn có thể chạy Herdr ở bất cứ đâu, và dù bạn tắt máy tính đi, đi ra ngoài hay làm bất kỳ việc gì khác, thì các tác vụ của bạn vẫn tiếp tục chạy trong agent runtime đó.

Đoạn mô tả bên dưới slogan nói rằng Herdr là nơi các coding agent của bạn "sống": bạn chạy bao nhiêu agent cũng được, trên bao nhiêu project cũng được, mỗi agent trong terminal riêng của nó. Bạn rời đi thì chúng vẫn làm việc; bạn quay lại từ bất kỳ máy nào thì chúng vẫn ở đúng chỗ bạn để lại.
Cách cài đặt rất đơn giản: chỉ cần copy một dòng lệnh duy nhất. Trên trang có sẵn nút copy, bạn bấm vào rồi dán nội dung đó vào cửa sổ command line là cài được Herdr.
curl -fsSL https://herdr.dev/install.sh | sh
Công cụ này hỗ trợ hầu hết các hệ điều hành phổ biến là macOS, Linux và Windows (trên trang ghi thêm giấy phép Apache 2.0 và các cách cài khác qua Homebrew, Nix hoặc cài thủ công). Vào thời điểm quay video, Herdr có hơn 40.000 star trên GitHub, hơn một triệu lượt cài đặt, và hỗ trợ tới 22 agent khác nhau, ví dụ Codex, Claude Code hay Gemini.
Phía dưới trang chủ là phần mô tả giao diện của Herdr. Tùng nói ngay rằng nếu bây giờ nhìn vào UI này, có thể người xem chưa hình dung được từng phần có chức năng gì; anh sẽ giới thiệu chi tiết từng phần ở đoạn sau của video, sau khi đã giải thích Herdr chạy như thế nào.
3. Herdr chạy thế nào: một server chạy nền, terminal chỉ là frontend
Phần tiếp theo trả lời câu hỏi: Herdr chạy như thế nào, và nó khác gì so với việc chạy agent trực tiếp trong một terminal. Trong một terminal, bạn chỉ cần gõ đúng một chữ:
herdr
là giao diện của Herdr hiện lên. Điểm khác so với việc gọi agent trực tiếp trong terminal là lúc này có thêm một server, gọi là server Herdr. Server này chạy tách biệt khỏi phần giao diện UI. Tùng đề nghị hình dung như sau: cái terminal mà bạn đang gõ chỉ là một phần frontend; Herdr đã dựng cho bạn một server riêng, và server đó chạy nền ở phía bên dưới.
Chính vì vậy, dù bạn có đóng tab terminal này đi, server Herdr vẫn chạy. Điều đó có nghĩa là agent đang làm các task cho bạn vẫn tiếp tục hoạt động trên server Herdr. Cái terminal lúc này chỉ đóng vai một phần frontend, dùng để theo dõi trên UI mà thôi. Khi bạn đóng cửa sổ đi, server Herdr vẫn hoạt động; khi bạn mở lại Herdr, nó hiển thị lại đúng giao diện lúc trước bạn rời đi, kèm theo các trạng thái mới nhất của những gì đang chạy trên server Herdr.
Trên màn hình, Tùng đưa ra một slide tên "herdr chạy thế nào" với ba bước: (1) Mở herdr, thấy ba agent đang chạy trong cửa sổ; (2) Đóng cửa sổ; (3) Mở lại. Ảnh chụp trong slide là một cửa sổ Herdr thật với workspace chia-tien, pane builder chạy Claude Code (Opus 5.5), pane reviewer đã review xong một commit, và pane codex. Anh nói sẽ mở cho người xem một UI thực tế, và sẽ giới thiệu từng phần của cửa sổ Herdr ở đoạn sau.
4. Demo: đóng cửa sổ terminal, agent vẫn làm tiếp
Để chứng minh, Tùng chạy một task cụ thể. Trong pane builder, anh yêu cầu Claude Code implement một tính năng demo chạy trong vòng 10 phút. Mục đích là để Claude Code tự động chạy liên tục mười phút, đủ lâu để người xem thấy được: khi đóng cửa sổ terminal đi thì agent này còn hoạt động hay không. Anh gửi yêu cầu đi, và trong lúc agent đang chạy, anh đóng luôn cửa sổ terminal.
Sau đó anh mở lại một cửa sổ terminal mới và gõ lệnh Herdr. Ở đây có một chi tiết: anh dùng nhiều session. Trong Herdr bạn có thể chia ra nhiều session khác nhau, nhưng phần đó khá nâng cao và người xem có thể tìm hiểu sau. Còn mặc định, bạn chỉ cần gõ đúng lệnh herdr là mở được giao diện của Herdr. Vì Tùng đang làm việc trên một session đặt tên theo kênh là holetex, anh gõ herdr --session holetex để mở lại đúng session đó.
Khi session holetex được mở lại, những gì đã trao đổi ở phiên làm việc trước không hề bị ngắt quãng. Tùng chỉ vào pane builder: đây là chỗ anh đã yêu cầu implement tính năng demo chạy trong mười phút, và dù anh có đóng cửa sổ terminal, các tác vụ của agent vẫn chạy tiếp và không hề bị gián đoạn. Lý do là Herdr đã dựng sẵn một Herdr server, và server đó chạy độc lập với phần frontend UI. Phần UI chỉ để bạn theo dõi; khi bạn đóng phần frontend đi, Herdr server vẫn hoạt động.
Theo Tùng, đây chính là điểm mạnh của Herdr so với việc dùng trực tiếp một terminal. Nếu bạn mở Claude Code trực tiếp trong một terminal thường, đang làm một task nào đó rồi đóng cửa sổ đi, thì agent cũng bị đóng lại luôn. Lý do là phiên làm việc đó chính là phiên làm việc chính của Claude Code, chứ nó không dựng một background task chạy ngầm phía bên dưới.
5. tmux và Herdr: giống nhau ở đâu, khác nhau ở đâu
Đó là điểm khác biệt lớn nhất giữa việc dùng Herdr (hoặc dùng tmux) so với việc dùng trực tiếp một terminal như bình thường. Tiếp theo, Tùng so sánh nhanh tmux và Herdr bằng một bảng năm dòng.

Điểm giống thứ nhất: cả hai hoạt động theo cùng một cơ chế, là dựng ra một background server, nên khi bạn đóng terminal thì cả hai vẫn chạy tiếp được. Điểm giống thứ hai: cả hai đều hỗ trợ một prefix, mặc định là Ctrl+B. Tùng hẹn sẽ giải thích prefix là gì ở phần sau, và vì sao khi làm việc trên giao diện command line thì tính năng prefix này cực kỳ hữu ích.
Điểm khác biệt thứ ba nằm ở Herdr: nó tự động nhận biết được có agent nào đang chạy hay không. Trong cửa sổ terminal, trên giao diện command line của bạn, bạn đâu chỉ có mỗi việc gọi agent như chạy Claude Code hay chạy Codex; bạn còn rất nhiều tác vụ khác nữa. Herdr hỗ trợ thêm ở chỗ: khi bạn chạy các agent, nó có một khu vực riêng để quản lý các agent đó. Trên bảng, ba dòng mà tmux bị đánh dấu X còn Herdr được đánh dấu tích là: nhận ra agent, hiển thị trạng thái trên sidebar, và có lệnh chờ agent làm xong.
Tùng giải thích thêm: tmux là viết tắt của Terminal Multiplexer. Đó là một công cụ mã nguồn mở chạy trên Linux hoặc macOS, giúp bạn chạy nhiều terminal chung trong một cửa sổ. Herdr cũng có nhiệm vụ tương tự, nhưng có thêm vài điểm khác: nó nhận ra được agent, và hiển thị được trạng thái của các agent, ví dụ đang chạy (working), hay đang bị blocked, tức là đang chờ bạn phản hồi.
Anh lấy ví dụ trên chính màn hình của mình: đang có ba agent chạy, một agent là builder, một agent là reviewer và một agent là Codex. Lúc này có một khu vực riêng tên là agents để quản lý chúng. Herdr tự động biết terminal nào đang chạy agent, rồi gom hết và tổng hợp vào mục agents, và bạn xem trạng thái của từng agent qua các icon ngay phía bên trái.
6. Năm trạng thái của agent trên sidebar
Trên sidebar của Herdr, mỗi agent có một trạng thái thể hiện bằng icon. Tùng đi qua từng trạng thái theo slide.

Trạng thái thứ nhất là blocked: ví dụ agent đang muốn xin bạn một quyền nào đó, lúc đó nó hiện một dấu đỏ. Tương tự, khi agent đang làm việc (working) thì nó có một icon riêng; nếu đã xong (done) thì là màu xanh, và theo slide, done nghĩa là xong nhưng bạn chưa xem kết quả. Trạng thái idle là khi agent rảnh, không làm việc. Cuối cùng là unknown, dùng trong trường hợp Herdr không biết được status hiện tại của agent như thế nào. Dòng chú thích dưới slide thêm một quy tắc: chỉ cần một agent bị blocked là cả workspace chứa nó cũng hiện trạng thái blocked.
Khi nhìn vào UI của Herdr, bạn chỉ cần dựa vào các icon này là theo dõi được rất dễ. Tùng giải thích vì sao điều này quan trọng: nếu bạn chỉ làm việc với một agent, việc quản lý rất dễ. Nhưng khi bạn có nhiều agent làm việc song song, thì việc có thêm một chỉ báo trạng thái ngay bên cạnh, trên sidebar, giúp bạn biết ngay agent nào đang bị block để xử lý, và biết task nào đã xong để vào xem.
Hai trạng thái done và idle trông giống nhau nhưng khác ở một điểm mà slide ghi rõ: done là agent đã xong việc nhưng bạn chưa mở ra xem, còn idle là agent đang rảnh. Nhờ vậy, chỉ cần lướt qua sidebar là bạn phân biệt được việc nào vừa hoàn thành và đang chờ bạn đọc kết quả, với việc nào đã xem xong từ trước. Còn quy tắc một agent blocked kéo cả workspace sang blocked giúp bạn không bỏ sót: dù đang đứng ở workspace khác, bạn vẫn thấy ngay project nào có agent đang đứng chờ mình cấp quyền hay trả lời câu hỏi.
Trong ví dụ của Tùng, ba agent builder, reviewer và codex đều thuộc workspace chia-tien, tab agents. Mỗi dòng trong danh sách agent có một chấm tròn phía trước; màu và hình của chấm đó chính là trạng thái. Khi có mười agent chạy cùng lúc, đây là chỗ duy nhất bạn cần nhìn.
7. Bốn phần của một cửa sổ Herdr thật
Trước khi đi vào giao diện, Tùng nói rằng phần sau của video sẽ cài Herdr trên một VPS, và video có một đoạn quảng cáo cho dịch vụ VPS Hostinger, nhà cung cấp mà anh dùng cho phần demo đó.
Quay lại UI vừa thấy, Tùng giải thích từng phần. Giao diện Herdr có bốn phần. Phần thứ nhất là danh sách quản lý các workspace. Phần thứ hai là danh sách quản lý các tab trong workspace đang chọn. Phần thứ ba gọi là các pane: ví dụ trong tab agents của anh có ba pane, một là builder, hai là reviewer và ba là codex. Mỗi pane, theo cách anh mô tả, hãy hình dung như một cửa sổ terminal, và bạn có thể tạo thêm rất nhiều cửa sổ terminal nằm chung trong một tab như vậy.

Phần thứ tư là danh sách các agent. Đây là điểm Herdr hay hơn tmux: nó tự động phát hiện bất kỳ cửa sổ terminal nào đang chạy bất kỳ agent nào, rồi liệt kê hết ra trong phần agents. Ảnh chụp trên slide cho thấy cột trái có danh sách spaces (chia-tien, blog, infra, mỗi cái có nhánh main bên dưới), các tab agents, server, logs ở thanh trên, pane builder chạy Claude Code, pane reviewer đang hiển thị kết quả review một commit, và pane codex hiện thông tin phiên làm việc của Codex.
Nhìn kỹ hơn vào ảnh chụp trên slide: pane builder là Claude Code phiên bản 2.1.282, chạy Opus 5.5, đang chờ lệnh với dòng gợi ý "refactor <filepath>" và chế độ auto mode bật ở dưới cùng. Pane reviewer hiển thị phần tóm tắt sau khi review: một test mới cho trường hợp chia 100.000đ cho ba người, liệt kê các file đã xem như main.ts, vite.config.ts và một script deploy, rồi một dòng recap cho biết code review của commit chia-tien đã xong và chỉ tìm thấy một bug, là hàm splitEvenly bỏ mất phần dư đồng lẻ nên tổng balance lệch 1đ; bước tiếp theo là chờ người dùng xác nhận để sửa hàm và thêm test. Pane codex, nằm dưới reviewer, hiện bảng thông tin của Codex: thư mục làm việc là project chia-tien, quyền ở mức Workspace (hỏi trước khi làm), file AGENTS.md, gói tài khoản, chế độ cộng tác mặc định, và hạn mức dùng trong tuần chỉ còn khoảng 4%.
Phía bên phải slide, Tùng tóm lại bằng một câu: workspace chia-tien, tab agents, ba agent là builder, reviewer và codex. Rồi bốn mục đánh số: 1 Workspace, 2 Tab, 3 Pane, 4 Danh sách agent. Các slide tiếp theo phóng to từng phần một, kèm hai dòng "Là gì" và "Dùng khi". Với workspace, slide ghi: một repo hay một việc, kèm branch, và dùng khi đổi sang repo khác như chia-tien, blog, infra. Với pane: một terminal thật, ở đó reviewer vừa review xong và bắt được bug splitEvenly lệch 1đ, dùng khi cần thấy hai thứ cùng lúc như builder, reviewer và codex cạnh nhau.
8. Workspace, tab, pane và danh sách agent
Đi vào chi tiết, phần đầu tiên là workspace. Cách chia workspace mà Tùng gợi ý: cứ mỗi project, mỗi repo thì tạo ra một workspace riêng. Trên màn hình của anh có ba workspace, tượng trưng cho ba project khác nhau; một trong số đó là một ứng dụng chia tiền (workspace chia-tien), hai cái còn lại là blog và infra. Lời khuyên của anh: mỗi khi có một project mới, một repo mới, bạn hãy tạo ra một workspace riêng để quản lý.
Phần thứ hai là các tab. Trong một workspace bạn có thể có nhiều tab, tương tự như trên các terminal thông thường: bạn mở một terminal rồi mở nhiều tab khác nhau. Với cùng một project, bạn có thể mở một tab để quản lý các agent làm việc cho mình; tab thứ hai để chạy server của project đó; và tab thứ ba để mở một cửa sổ xem logs của ứng dụng hiện tại. Tùng hứa sẽ mở một terminal thực tế để xem các tab này có nội dung như thế nào.
Phần số ba là các pane. Mỗi pane là một terminal. Ví dụ trong cùng một project, bạn có nhiều agent dùng để review chéo lẫn nhau, hoặc tạo nhiều agent làm việc song song; khi đó bạn tạo nhiều pane, mỗi pane mở một Claude Code. Hoặc bạn có thể trộn lẫn như Tùng đang làm: vừa mở Claude Code, vừa mở Codex lên để review chéo cho nhau.
Phần cuối cùng là phần agent mà anh đã nhắc. Mọi agent đang chạy trong bất kỳ cửa sổ terminal hay bất kỳ pane nào thì Herdr đều tự động biết và gom hết vào đây. Với mỗi agent, bạn theo dõi được nó đang nằm ở tab nào (ở đây là tab agents), thuộc workspace nào (chia-tien), và dòng phía dưới là tên của pane: builder, reviewer hoặc codex. Slide cho phần này ghi: "Mọi agent herdr nhận ra, ghi rõ workspace · tab", dùng khi bạn muốn "liếc một cái biết con nào cần mình".
9. Vì sao phải có chế độ prefix
Tiếp theo, Tùng quay lại tính năng prefix đã nhắc ở slide so sánh với tmux. Giả sử trong cửa sổ Herdr, bạn gõ một chữ C. Thông thường, frontend Herdr chuyển thẳng chữ C đó vào agent bạn đang mở. Ví dụ anh mở một agent thực tế lên, đang focus vào agent Claude Code, gõ chữ C, thì UI chuyển chữ C đó vào Herdr server; trong Herdr server đang chạy agent builder, và Herdr chuyển tiếp bất kỳ ký tự nào bạn gõ vào cho agent đó.

Vậy tại sao lại sinh ra prefix? Tùng mở menu của Herdr, vào phần keybinds, và chỉ ra một chế độ gọi là prefix mode. Prefix mode là chế độ dùng khi bạn muốn gửi phím tắt cho chính giao diện Herdr. Tùng nói rõ Herdr không gọi tên cụ thể như vậy, nhưng anh tự đặt tên cho hai phần là "Herdr UI" và "Herdr Server" cho dễ hiểu: prefix là cách để bạn điều khiển phím tắt trên Herdr UI.
Bạn chuyển sang prefix mode bằng tổ hợp Ctrl+B. Lúc này, khi bạn gõ chữ C, nó sẽ không gửi thẳng vào agent nữa. Tùng xóa đoạn text đang gõ dở trong ô chat với Claude Code, rồi nhấn Ctrl+B: trên giao diện hiện chữ "Prefix", nghĩa là đang ở chế độ prefix. Bây giờ nhấn chữ C, thì C là phím tắt tạo một tab mới, chứ không phải gửi chữ C vào cho agent. Anh nhấn thử, và Herdr tạo cho anh một tab mới.
Muốn biết trong prefix mode có những phím nào, bạn mở menu và vào phần keybinds để xem danh sách phím tắt. Slide minh họa đúng điều này: khi vào prefix mode bằng Ctrl+B rồi gõ C, phím đó chỉ dừng ở Herdr UI, tức là mở một tab mới, chứ không gửi chữ C vào Claude Code. Theo Tùng, khi bạn dùng command line nhiều, các phím tắt này cực kỳ hữu ích, vì khi đã quen thì bạn thao tác rất nhanh.
10. Phím tắt trong prefix mode: thoát, tạo pane, đổi tên
Ví dụ đầu tiên: bạn muốn thoát khỏi giao diện Herdr. Đang ở prefix mode, Tùng nhấn phím Q, và giao diện Herdr UI đóng lại. Muốn mở lại, anh chỉ cần gõ lại lệnh mở session như lúc nãy; còn nếu bạn dùng session mặc định, chỉ cần gõ herdr là giao diện làm việc hiện lại như cũ.

Tùng đọc thêm các phím tắt trong bảng: Q để quit như anh vừa làm; reload config thì trong prefix mode nhấn Shift+R; còn phím tắt để hiện bảng keybinds này là dấu hỏi chấm.
Với pane, nếu bạn muốn tạo thêm một pane mới, tức là một cửa sổ terminal mới, cách dùng chuột là nhấn chuột phải và chọn Split Down hoặc Split Right. Phía dưới màn hình của anh còn khoảng trống, nên anh chọn Split Down, và Herdr tự mở thêm một pane mới. Bạn có thể nhấn chuột phải để rename, đặt tên cho pane tương ứng với mục đích của cửa sổ đó, để dễ theo dõi hơn; danh sách agent cũng sẽ hiển thị theo đúng tên chức năng, nên quản lý dễ hơn. Anh đổi thử tên pane thành "tùng", và tên mới hiện ngay trên giao diện.
Nếu dùng prefix mode và phím tắt, bạn không cần nhiều thao tác chuột như vậy. Khi đã quen, bạn mở prefix mode, nhấn dấu hỏi chấm để xem bảng, rồi kéo xuống các nhóm lệnh của workspace, tab, pane. Với pane có các lệnh như split vertical hay split horizontal; trong prefix mode bạn chỉ cần nhấn phím V hoặc phím dấu trừ, còn muốn đóng một pane thì nhấn X. Có rất nhiều phím tắt như vậy, và theo Tùng, khi làm quen thì dùng chúng cực kỳ tiện. Anh làm thử: vào prefix mode bằng Ctrl+B, nhấn V, và Herdr tự chia thêm một cửa sổ ngay phía bên phải. Tương tự, bạn có thể xem các lệnh tương ứng với workspace, như tạo workspace mới hay di chuyển giữa các workspace, trong cùng bảng đó.
Gom lại các phím Tùng dùng trong đoạn này:
Ctrl+B: vào prefix mode.- prefix rồi
C: tạo tab mới. - prefix rồi
Vhoặc-: chia pane theo chiều dọc hoặc chiều ngang. - prefix rồi
X: đóng pane. - prefix rồi
Q: thoát giao diện Herdr (server vẫn chạy). - prefix rồi
Shift+R: reload config. - prefix rồi
?: hiện bảng keybinds.
11. Tab server, tab logs và một reviewer độc lập
Tùng chuyển sang xem các tab của workspace chia-tien. Tab số 1 là agents, nơi anh quản lý các agent làm việc cho workspace chia tiền. Tab số 2 là server: đây là tab anh dùng để start backend server của mình. Tab số 3 là logs, để theo dõi log của server đó.
Anh nhấn mạnh lý do có cách chia tab như vậy: không phải bạn chỉ dùng Herdr trên máy cá nhân. Herdr còn được cài lên cả phía server, và ở phần sau của video anh sẽ cài Herdr trên một Linux server. Từ đầu video tới giờ, mọi thao tác cài đặt và sử dụng đều làm bằng command line, nên khi bạn kết nối vào một VPS chẳng hạn, bạn vẫn hoàn toàn dùng được Herdr và làm theo đúng các thao tác vừa hướng dẫn, ngay trên phía server.
Quay lại tab agents để thực hành. Lúc này đang mở nhiều cửa sổ, nên Tùng vào prefix mode và nhấn X để đóng bớt các pane, chỉ giữ lại một pane là builder (Claude Code) và một pane là reviewer. Anh nhắc rằng những pane này thực chất chỉ là giao diện của Claude Code hay Codex mà thôi; khi đóng chúng đi, bạn thấy chúng chính là các cửa sổ terminal bạn vẫn làm việc hằng ngày.
Trong pane reviewer, anh gõ lệnh claude để mở một phiên làm việc Claude Code trên project chia tiền. Mục đích của demo: cho thấy bạn có thể quản lý nhiều agent cùng lúc. Agent reviewer chuyên dùng để review lại code, và nó giống như một người làm việc độc lập. Ví dụ, bạn có thể dùng Codex để review code được tạo ra bởi Claude Code.
Theo Tùng, khi dùng các agent kiểm tra chéo nhau như vậy, reviewer không bị ảnh hưởng bởi những lời giải thích, những đoạn code hay những prompt nằm trong agent builder; nó có một context hoàn toàn mới, nên kết quả review chắc chắn sẽ tốt hơn.
Anh mở một phiên làm việc mới, chọn model: dùng model mặc định là Opus 5.5, rồi chỉnh mức effort (trên màn hình, phiên reviewer ghi "Opus 5.5 with high effort"). Sau đó anh cho nó review bằng một prompt, ví dụ:
review git diff hiện tại so với spec
Hoặc đơn giản hơn, bạn chỉ cần gõ "review code change hiện tại cho mình" là nó cũng làm được. Khi agent bắt đầu hoạt động, trạng thái và icon của nó trên sidebar cũng được cập nhật theo. Tùng gợi ý hình dung trong thực tế: nếu bạn có mười agent, bạn chỉ cần theo dõi trong đúng một khu vực agents là biết cái nào đang chạy, cái nào đang bị block, cái nào đã làm xong. Lúc này reviewer đã hoạt động xong và đã review xong.
12. Cho builder đọc output của reviewer bằng lệnh Herdr
Câu hỏi tiếp theo: làm cách nào để builder hiểu được reviewer đã nói gì? Theo Tùng có nhiều cách. Cách thứ nhất là dùng chính các lệnh của Herdr. Anh mở thêm một pane, rồi đặt câu hỏi: từ pane này, làm sao đọc được thông tin từ pane reviewer? Herdr có cả một loạt command cho việc đó.
Anh nói trước rằng phần này khá nâng cao. Với người mới, chỉ cần nắm những thứ cơ bản đã nói từ đầu video là đã làm được việc; đoạn này chỉ là demo thêm để người xem thấy Herdr ngoài giao diện còn có rất nhiều command khác.
Muốn đọc nội dung của reviewer, bạn tạo một pane và gõ lệnh đọc agent của Herdr, trỏ tới pane có tên reviewer, kèm tùy chọn số dòng muốn lấy; Tùng lấy 150 dòng. Khi chạy lệnh, Herdr trả về output hiện tại của reviewer, tức 150 dòng gần nhất, và in ra console ngay trong pane đó. Nhưng theo anh, chỉ in ra như vậy thì chưa có ý nghĩa gì.
Nên anh copy lại lệnh đó, đóng pane vừa mở, rồi quay về pane builder. Câu hỏi bây giờ là làm sao để builder đọc được output của reviewer. Anh gõ một dấu chấm than ở đầu dòng để chạy một lệnh ở bên ngoài agent. Lý do: bạn đang ở trong giao diện Claude Code, nên nếu gõ lệnh trực tiếp như vậy, nó chỉ là một message gửi cho agent, chứ không được chạy như một lệnh trong shell. Thêm dấu chấm than phía trước là chuyển sang shell mode; anh gửi đi, và output của lệnh được gửi thẳng vào cho agent.

Lệnh đó trả về 150 dòng gần nhất của reviewer, và khi chạy xong, output được đưa luôn vào cho builder. Builder đọc kết quả của reviewer và báo lại: reviewer kết luận review OK, nhưng nó chỉ đọc được mục 4, mục 5 và phần lỗi ngoài phạm vi (các mục 1 đến 3 bị cắt khỏi output). Trên màn hình, builder liệt kê từng mục: mục 4 về focus bằng bàn phím đã sửa; mục 5 về test trên DOM cần thêm dev dependency; và lỗi splitEvenly mà reviewer cũng xác nhận, chưa sửa. Đó là cách để một pane tương tác với một pane khác.
Phía trên phần tóm tắt đó, pane builder còn hiện diff vừa sửa trong file style.css: hai dòng cũ cho trạng thái hover của nút xóa được tô đỏ, và các dòng mới tô xanh, gộp hover với focus-visible và thêm outline cho trạng thái focus-visible, kèm dòng "Allowed by auto mode classifier". Ở pane reviewer bên phải, góp ý số 5 nói về file test: test hiện chỉ phủ hàm thuần removeExpense, trong khi spec yêu cầu mỗi dòng có nút xóa và cập nhật ngay trên UI, nên gợi ý thêm một test render bằng jsdom hoặc happy-dom. Phần "lỗi ngoài phạm vi review" chỉ ra rằng splitEvenly dùng Math.round, trong khi spec yêu cầu dồn phần lẻ để tổng khớp số tiền; với 100.000đ chia ba người, dòng tổng hiện 1đ thay vì 0đ. Reviewer ghi rõ lỗi này không thuộc tính năng xóa khoản chi nên không tính vào kết luận, và chốt "REVIEW: OK".
Nếu bạn thấy những việc này vẫn còn phức tạp, Herdr cung cấp một bộ skill để giải quyết đúng vấn đề này.
13. Cài Herdr skill từ skills.sh
Để cài Herdr skill, Tùng truy cập trang skills.sh và tìm skill tên herdr. Gõ đúng tên herdr vào ô tìm kiếm, ngay dòng đầu tiên là skill có khoảng 55.000 lượt cài đặt. Anh chọn vào, và chỉ cần copy câu lệnh cài đặt.

npx skills add https://github.com/herdrdev/herdr --skill herdr
Anh mở một tab mới để gõ câu lệnh này, vì lệnh đó phải chạy ngoài agent: tab agents đang mở cả ba agent rồi. Tab mới cho anh một cửa sổ terminal mới; anh dán câu lệnh vào, gửi đi, và chờ một lúc để nó cài skill.
Khi cài xong, skill được cài vào một loạt agent như Claude Code, Codex, Cursor, Gemini. Trên màn hình, trình cài báo tìm thấy 4 skill, chọn 1 skill là herdr, cài cho các agent Antigravity, Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, Kiro CLI, OpenCode; phần đánh giá rủi ro bảo mật hiện "Safe" và "0 alerts" ở hai cột, "Med Risk" ở cột thứ ba; cuối cùng là dòng "Installation complete".
Sau đó, anh chỉ cần quay lại pane builder và reload lại skill. Tùng nhắc: nhớ gọi lệnh reload skill để skill mới được đưa vào phiên làm việc hiện tại.
Trang skill trên skills.sh cũng cho thấy nội dung SKILL.md. Đoạn đầu mô tả: Herdr tổ chức terminal thành workspace, tab và pane, nhận ra các coding agent chạy trong pane, và mở session hiện tại ra qua CLI herdr. Trước khi ra bất kỳ lệnh điều khiển nào, agent phải kiểm tra rằng mình đang chạy bên trong một pane do Herdr quản lý; nếu kiểm tra thất bại thì nói rõ là không chạy trong Herdr và dừng lại, không cố điều khiển session Herdr từ bên ngoài. Đây là đoạn kiểm tra được ghi trên trang:
test "${HERDR_ENV:-}" = 1Cột bên phải trang ghi repo nguồn là herdrdev/herdr, 40.6K GitHub star, ngày xuất hiện lần đầu là 7/4/2026, và có mục kiểm tra bảo mật. Ở trình cài, dòng cuối nhắc người dùng xem lại skill trước khi dùng, vì skill chạy với toàn bộ quyền của agent.
14. Giao việc giữa các agent bằng câu nói tự nhiên
Trước đây, Tùng phải nhớ các câu lệnh của Herdr để đọc output từ các agent khác. Bây giờ anh chỉ cần nói bằng tiếng Việt cơ bản. Anh gõ vào builder:
dùng herdr để gọi codex agent review code tối đa 3 lượt cho tới khi reviewer OK
Rồi anh bảo người xem để ý: khi đã load skill như vậy, builder có biết cách tự động gọi Codex trong pane codex hay không. Anh gửi đi, và chỉ vào pane codex phía bên phải. Anh không hề thao tác gì, nhưng agent chính là builder tự biết và gọi Codex ra, giao cho Codex thực thi việc review.
Từ giờ, việc tương tác qua lại giữa nhiều agent không cần làm thủ công như lúc nãy nữa. Khi đã được trang bị bộ skill của Herdr, bạn có thể làm việc đa agent, đa tác vụ rất dễ dàng. Đây chỉ là một ví dụ cơ bản với một builder, nhưng Tùng mời người xem hình dung thực tế: bạn làm việc cùng lúc trên nhiều project, nhiều repo khác nhau; khi đó bạn tạo nhiều pane builder, builder 1, builder 2, builder 3, thậm chí mười builder, chạy đồng thời với nhau. Còn việc tương tác giữa các agent thì đã có bộ skill lo; bạn chỉ cần nói bằng text thông thường trong bất kỳ agent nào, là nó tự biết và tương tác qua lại.
Anh gợi mở thêm: hiện tại reviewer và builder đang nằm chung một tab. Nếu bạn muốn có nhiều builder chạy song song, ví dụ mười cái, thì cứ mở một tab mới và làm đúng các thao tác vừa rồi: chia ra mười pane, một tab chuyên cho builder, một tab chuyên cho review, hoặc theo các tác vụ tương ứng của bạn. Trên màn hình lúc này còn hiện một dòng chữ gợi ý: bạn cũng có thể chat với một agent và nói "tạo cho tôi 5 builder agent và 2 review agents, mỗi phần gom vào tab riêng"; vì đã có skill herdr, bạn nói hoàn toàn bằng ngôn ngữ tự nhiên, agent sẽ dùng skill tự động và tự mở tab hay pane tương ứng.
tạo cho tôi 5 builder agent và 2 review agents, mỗi phần gom vào tab riêng.
15. Kết quả review, và vì sao cần chạy Herdr trên VPS
Quay lại kết quả: pane codex báo review OK. Reviewer là Codex chạy model GPT-6-Sol, và sau hai lượt review, mỗi lượt Claude Code tự fix theo góp ý, code đã đáp ứng được các yêu cầu của reviewer. Đó là một ví dụ cơ bản về cách xử lý và dùng skill trong Herdr một cách nhanh chóng và dễ dàng.
Tiếp theo, Tùng lưu ý rằng Herdr mới ở version 0.x, chưa lên version 1, nên nó thay đổi rất nhanh. Gần đây, ngày 16/9, Herdr phát hành thêm một tính năng là Herdr machine. Anh giải thích vì sao tính năng này cực kỳ hay.
Lúc trước anh nói Herdr có một server chạy nền, nhưng server đó chỉ chạy khi máy của bạn chạy. Ví dụ bạn chạy Herdr trên laptop cá nhân: khi laptop vào chế độ sleep hoặc bị tắt nguồn, Herdr server cũng tắt theo, và các tác vụ của bạn vẫn bị mất, chứ không phải lúc nào cũng chạy mãi. Đó là lý do bạn cần một VPS, để các tác vụ chạy 24/7. Khi đó, công việc không còn phụ thuộc vào laptop hay máy tính PC cá nhân nữa, và các agent chạy liên tục, không bị gián đoạn. Đó cũng là lý do các tính năng Herdr Machine và Herdr Remote ra đời.
Slide về các bản phát hành gần đây cho thấy nhịp thay đổi đó: chỉ trong khoảng sáu tuần, Herdr chuyển sang giấy phép Apache-2.0 ở bản 0.8.0, hỗ trợ Windows chính thức ở bản 0.8.2, cho phép làm việc với local và SSH trong một cửa sổ ở bản 0.9.0, và thêm lệnh machine ở bản 0.9.1 ngày 16/9. Hai bản 0.9 được tô đỏ trên slide, vì đó là hai tính năng Tùng sắp demo ở phần cuối video.
Tóm lại lập luận của Tùng: server chạy nền giải quyết chuyện lỡ tay đóng terminal, nhưng không giải quyết chuyện máy tắt. Muốn agent làm việc cả khi laptop sleep hay tắt nguồn, server Herdr phải nằm trên một máy luôn bật, và đó là vai trò của VPS.
16. Ba cách làm việc với Herdr trên VPS
Có ba cách để làm việc với Herdr trên một VPS. Cách thứ nhất là cách vẫn thường làm: SSH vào VPS, rồi gọi lệnh herdr. Khi đã SSH vào VPS, cách dùng hoàn toàn giống những gì Tùng đã giới thiệu từ đầu video, không khác một chút nào.

ssh vps rồi herdr, như tmux, dùng được trên điện thoại; (2) herdr --remote vps-hermes, giao diện ở laptop; (3) herdr machine add vps-hermes --label "VPS", local và VPS trong một cửa sổ, mới từ bản 0.9.Cách thứ hai dùng option remote. Trong lệnh trên slide, vps-hermes là một alias: nó thay cho chuỗi gồm username, dấu @ và địa chỉ IP của VPS. Tùng đã thay đoạn đó bằng một cái tên là VPS Hermes. Khi bạn chạy lệnh với option remote như vậy, bạn có một giao diện ngay dưới máy cá nhân, giống hệt giao diện Herdr trên VPS. Nghĩa là thay vì xem trực tiếp trên VPS, bạn xem toàn bộ UI của Herdr đó ngay trên máy cá nhân của mình.
herdr --remote vps-hermes
Cách thứ ba có từ phiên bản 0.9: một lệnh là herdr machine add kèm tên của VPS. Còn label là một option, bạn có thể đặt theo tên tùy ý; trên slide, label là "VPS". Cách này gộp chung các tác vụ bạn chạy với Herdr trên máy cá nhân với các tác vụ Herdr chạy trên máy remote. Tùng hẹn quay lại để demo cả ba cách.
Ghi chú ngắn trên slide cho từng cách cũng đáng để ý. Cách 1 được mô tả là "như tmux", và dùng được cả trên điện thoại, vì chỉ cần một ứng dụng SSH là vào được VPS rồi gõ herdr. Cách 2 là "giao diện ở laptop": phần hiển thị chạy trên máy bạn, còn mọi agent vẫn chạy trên VPS. Cách 3 là "Local + VPS một cửa sổ", và được gắn nhãn mới từ bản 0.9.
herdr machine add vps-hermes --label "VPS"
Trước khi demo, anh nhắc lại đoạn quảng cáo cho VPS Hostinger. Việc kết nối và cài đặt VPS, anh đã hướng dẫn ở các video trước trên kênh, hoặc bạn có thể nhờ chính agent hướng dẫn cách kết nối tới VPS của mình. Cụ thể, anh dùng VPS của Hostinger: khi mua xong, bạn có một địa chỉ IP và một username mặc định, thường là root. Anh đã chạy sẵn Herdr trên VPS này, nên giờ chỉ việc mở tab mới, mở Herdr lên và thực hiện các lệnh với option remote hay machine để người xem thấy giao diện ra sao.
17. Cách 1 và cách 2: SSH vào VPS, rồi herdr --remote
Demo cách đầu tiên. Thường thì bạn sẽ gõ ssh, theo sau là username (khi vừa cài VPS, username thường là root), dấu @ và địa chỉ IP của VPS. Vì Tùng đã tạo alias thay cho lệnh này và đặt tên là VPS Hermes (đây là VPS anh dùng để chạy Hermes agent), anh chỉ cần SSH bằng alias, rồi chạy lệnh herdr. Cách làm hoàn toàn tương tự những gì anh hướng dẫn từ đầu video, chỉ khác là thay vì cài trên máy cá nhân, bạn cài trên VPS. Khi đã kết nối SSH thành công, bạn chạy được toàn bộ các lệnh đã học để có được một giao diện như vậy.

Nhưng với cách này, giao diện bị lồng vào nhau: tab số 4 nằm trong workspace chia-tien, nên Herdr của VPS lại lồng phía trong một tab như vậy, và giao diện không được thân thiện. Vì thế, gần đây Herdr đã cập nhật các tính năng để giao diện thuận tiện hơn, và tính năng thứ nhất là option remote.
Tùng thoát khỏi Herdr UI hiện tại. Anh hỏi người xem có nhớ lệnh mở prefix mode không: đó là Ctrl+B, rồi nhấn Q để thoát. Sau đó anh chạy lệnh herdr --remote kèm tên VPS. Bình thường bạn sẽ phải nhập username và IP của VPS, nhưng vì anh đã có alias nên chỉ cần nhập VPS Hermes. Kết quả: giao diện terminal lúc này, tuy nội dung là Herdr chạy trên VPS, nhưng phần giao diện dưới máy cá nhân hoàn toàn giống lúc nãy, và bạn thao tác gần như y hệt như khi cài trên máy local. Đó là cách số 2. Để thoát ra cũng làm tương tự: Ctrl+B rồi Q.
Trong demo cách 1, ảnh màn hình cho thấy rõ vấn đề lồng nhau. Cột trái ngoài cùng vẫn là sidebar của Herdr local với các workspace chia-tien, blog, infra và danh sách ba agent của chia-tien. Ngay bên cạnh là một sidebar thứ hai, của Herdr trên VPS, với các workspace pulse và ops, và hai agent builder, reviewer thuộc pulse. Thanh tab cũng có hai tầng: tầng trên là agents, server, logs và tab số 4 của local; tầng dưới là agents, run, logs của VPS. Hai pane builder và reviewer trên VPS đều chạy Claude Code với Opus 5 (1M context), hiện thông báo auto mode đã là chế độ quyền mặc định và nhắc đăng nhập. Hai lớp sidebar, hai lớp tab chồng lên nhau trong cùng một cửa sổ, nên bạn phải tự để ý mình đang thao tác ở lớp nào.
Với cách 2, lớp ngoài biến mất: cửa sổ terminal trên máy cá nhân chỉ còn một Herdr duy nhất, và đó là Herdr của VPS. Sidebar, tab, pane, danh sách agent đều là của máy remote, nhưng bạn dùng bàn phím và cửa sổ của laptop như bình thường.
18. Cách 3: herdr machine, gom local và VPS vào một cửa sổ
Cách số 3 kết hợp cả Herdr chạy dưới local và Herdr chạy trên VPS, bằng lệnh herdr machine add với VPS Hermes và một label; anh đặt label là "Tung VPS". Herdr báo đã lưu machine này. Có một chi tiết: Tùng đang làm việc trên session tên holetex, nên nếu chạy lệnh thông thường thì Herdr mở session tên default, và session đó không có giao diện anh dùng từ đầu video. Khi mở lại đúng session của mình, trên sidebar xuất hiện mục Tung VPS bên cạnh mục Local.

Local được gom chung như một thư mục: các workspace local nằm ở đây, còn phía dưới là các workspace trên VPS. Giao diện làm việc thân thiện hơn hẳn so với cách lồng nhau lúc nãy, tức cách SSH ngay từ đầu, vốn rất khó kiểm soát. Bây giờ các VPS nằm luôn trong sidebar, có thêm một indicator để biết VPS đó đang kết nối thành công hay không, đang chạy hay không; ví dụ màu xanh nghĩa là đang chạy.
Khi đã kết nối được như vậy, bạn hoàn toàn điều khiển được Herdr trên VPS giống hệt cách bạn vẫn làm trên máy local. Và nếu thực tế bạn có rất nhiều máy tính khác nhau, bạn có thể kiểm soát tập trung tất cả trong một giao diện Herdr trên một máy cá nhân.
Ảnh màn hình của cách 3 cho thấy sidebar giờ có tiêu đề "machines" thay vì "spaces". Nhóm Local chứa các workspace trên máy cá nhân, mỗi workspace có tên branch đang làm hiện mờ bên dưới. Nhóm Tung VPS chứa hai workspace pulse và ops, và chấm xanh ngay bên phải tên Tung VPS chính là indicator kết nối. Khi chọn workspace pulse, thanh tab hiện agents, run, logs của VPS; hai pane builder và reviewer là hai phiên Claude Code chạy trên VPS. Danh sách agent ở góc dưới ghi tên máy, workspace và tab của từng agent, nên bạn biết ngay agent nào đang chạy ở đâu.
So với cách 1, không còn lớp lồng nhau nào; so với cách 2, bạn không phải chọn giữa việc xem máy local hay xem VPS, vì cả hai nằm chung một sidebar. Theo tài liệu Herdr, mỗi máy vẫn giữ server, session và tiến trình riêng của nó, và mất kết nối tới một máy không làm các máy khác bị ngắt.
Tùng kết thúc: đó là toàn bộ kiến thức cơ bản về Herdr mà anh muốn chia sẻ, với hy vọng người xem có thêm những kiến thức hữu ích. Anh mời người xem đăng ký kênh nếu thấy video hay, rồi chào tạm biệt.
Nguồn và liên kết 11 nguồn
- Tên gốc: Herdr là gì? Quản lý cả team AI Agent trong một cửa sổ.
- Sự kiện: YouTube
- Video gốc: https://www.youtube.com/watch?v=BOsZyaMjgoE youtube.com
- Kênh YouTube Holetex (Tùng Nguyễn): youtube.com/channel/UCd3lwxW89gegn-6rgLdXugw youtube.com
- Trang chủ Herdr, lệnh cài một dòng: herdr.dev herdr.dev
- Repo mã nguồn mở của Herdr: github.com/herdrdev/herdr github.com
- Tài liệu Herdr, các khái niệm workspace, tab, pane, session và năm trạng thái agent: herdr.dev/docs/concepts herdr.dev
- Tài liệu Herdr về agent, cách nhận diện trạng thái blocked, working, idle: herdr.dev/docs/agents herdr.dev
- Tài liệu Herdr "Connecting machines" (herdr machine add, --label): herdr.dev/docs/connecting-machines herdr.dev
- Skill herdr trên skills.sh: skills.sh/herdrdev/herdr/herdr skills.sh
- tmux, terminal multiplexer mã nguồn mở: github.com/tmux/tmux github.com