Bạn mở 5 tab terminal, mỗi tab chạy một session Claude Code hoặc Codex, rồi cứ 30 giây lại alt-tab qua từng cái để xem con nào đang chạy, con nào đang chờ bạn trả lời. Đó là vấn đề Harp sinh ra để giải quyết.
Nó làm gì, cụ thể
Harp là bản fork không chính thức của Warp terminal (bản open source). Nó giữ nguyên phần lõi Warp và thay thanh tab bar bằng một sidebar dọc, thiết kế cho việc chạy nhiều coding agent dài hạn song song. Cụ thể nó thêm mấy thứ:
- Trạng thái agent hiện ngay trên từng dòng. Mỗi session Claude Code hoặc Codex hiện đang working, waiting for you (đang chờ bạn nhập) hay done, kèm dấu unread tới khi bạn nhìn vào. Một chấm nghĩa là còn việc chạy nền, biểu tượng mặt trăng đánh dấu tab bạn đã set aside. Cmd+R để đổi tên tab.
- Group cố định. Gom tab vào group có tên. Bật tích hợp tmux thì tên group và thứ tự được lưu trên chính tmux session, nên restart vẫn còn, và client tmux khác thấy đúng layout đó.
- Limit ring. Hai vòng tròn mỗi provider ở footer: cửa sổ 5 giờ và limit tuần. Hover để xem số và thời điểm reset. Codex đọc từ log session của nó, Claude đọc từ status line của Claude Code. Harp không fetch gì lên mạng, không đọc credential.
- tmux thân thiện với điện thoại. Tab gắn với tmux session thì đi theo session đó: tên, group, cờ read, cờ inactive. Session mở từ máy khác, ví dụ ssh từ điện thoại, có thể xin một tab bằng lệnh
tmux set-option @warp_adopt 1.
Phần còn lại vẫn là Warp upstream, kể cả các tính năng AI và cloud (agent, Warp Drive, chia sẻ session, login). Chúng nói chuyện với server Warp y như bản gốc, Harp không thêm server nào. Tác giả ghi rõ: login qua Harp chưa được test.
Vì sao nó đang được chú ý
Repo tạo ngày 20/10/2026, cập nhật ngày 21/10/2026, và đã có 544 sao. Một ngày. Con số đó nói lên nhu cầu thật: dân dùng Claude Code với Codex đang chạy nhiều agent song song và ai cũng đau đầu với việc chuyển tab.
Điểm khác biệt nằm ở chỗ Harp không cố làm agent mới. Nó làm lớp hiển thị cho agent có sẵn, và làm ở tầng terminal, nơi agent vốn đã chạy. Cộng thêm việc là fork của Warp nên thừa hưởng toàn bộ UX của một terminal thương mại, trong khi vẫn là Rust và license AGPL-3.0. Chọn Rust cho một app desktop macOS là lựa chọn hợp lý về hiệu năng, và cũng đúng gu dev.

Cài và chạy thử
Cách nhanh nhất là tải DMG từ Releases, kéo Harp vào Applications. Harp có bundle id riêng (com.dominikmartn.Harp), URL scheme riêng (harp://) và thư mục settings riêng (~/.harp), nên cài song song với Warp mà không dính gì nhau.
Build từ source trên macOS, cần Rust toolchain theo rust-toolchain.toml:
./script/bootstrap # one-time: toolchain and build dependencies
./script/run # builds target/debug/bundle/osx/Harp.app and launches it
Script script/macos/run sẽ ký bằng identity “Apple Development” đầu tiên trong keychain, không có thì fallback sang ad-hoc signature. Bản DMG ký và notarize để release thì chạy script/release_macos.
Cơ chế update cũng đáng xem: Harp check GitHub release mỗi 10 phút. Nếu version trong release mới hơn version trong app/Cargo.toml của bản đang chạy, nó tải DMG về nền, verify chữ ký Developer ID của team Harp, rồi hỏi bạn restart. Muốn thử cơ chế này trên bản đã cài thì chạy:
open --env HARP_UPDATE_PRETEND_VERSION=0.0.1 /Applications/Harp.app
Cấu hình nằm ở ~/.harp/settings.toml, app tự reload khi file đổi. Limit ring bật mặc định, các phần khác thì tắt:
[integrations.limit_rings]
enabled = true
file = "~/.cache/limit-rings.json"
[integrations.tmux]
enabled = true
Với Claude Code, lần khởi động đầu nếu ~/.claude/settings.json chưa có statusLine, Harp tự thêm một cái để lưu input của status line vào ~/.harp/claude-statusline.json và không in gì ra. Nếu bạn đã có status line riêng thì nó để yên, muốn vừa giữ cái cũ vừa có ring thì tự nối kiểu "command": "tee ~/.harp/claude-statusline.json | your-command". Ring chỉ hiện với plan Claude.ai, không hiện với API key. Đây là chi tiết dễ gây hiểu nhầm nhất khi setup, đọc kỹ trước khi mất 10 phút loay hoay.

Ai nên dùng
Dev chạy từ 3 session agent trở lên mỗi lúc. Kiểu người vừa để Claude Code refactor module A, vừa để Codex viết test cho module B, vừa mở một session thứ ba hỏi về migration. Sidebar gom hết trạng thái về một chỗ, và cái cảnh “con nào đang chờ mình” biến thành liếc mắt một cái thay vì click qua từng tab.
Ai làm việc qua ssh từ nhiều máy cũng hưởng lợi, vì tmux integration giữ nguyên tên, group, thứ tự trên chính session. Mở từ laptop hay từ điện thoại đều thấy cùng một layout.
Ai chỉ chạy một agent duy nhất, một tab, thì Harp là overkill. Cứ dùng Warp gốc hoặc terminal mặc định.
So sánh nhanh
Hướng tiếp cận khác đang có là các tool quản lý agent ở tầng ngoài như tmux script tự viết, hoặc mấy app kiểu “agent dashboard”. Chúng thường phải bọc agent trong một lớp riêng và mất đi cảm giác terminal thật. Harp chọn cách khác: thay UI của terminal. Đổi lại bạn phụ thuộc vào việc fork này bám kịp upstream Warp. Còn so với Warp gốc thì Warp không có khái niệm agent state trong sidebar, đó chính là lý do fork này tồn tại.
Ưu, nhược, và mấy điều cần biết
Ưu: giải đúng một pain point cụ thể, không thêm server, không đọc credential, cài song song Warp không xung đột. Code Rust, build script rõ ràng, có dev switch để debug (WARPOSS_STATUS_TRACE=1 log mọi thay đổi trạng thái vào ~/Library/Logs/harp.log). Cơ chế update verify chữ ký trước khi chạy, chi tiết này nhiều app làm ẩu.

Nhược: mới ra mắt, 1 ngày tuổi, 544 sao. Đây là bản fork cá nhân của một người, chưa có cộng đồng đông. Chỉ có macOS. Login qua Harp chưa test theo chính README. Tài liệu có nhưng nằm rải trong README, chưa có site docs.
License AGPL-3.0: nếu bạn định fork tiếp hoặc nhúng vào sản phẩm thương mại thì đọc kỹ. AGPL có điều khoản network use, không đùa được.
Mấy thứ bị cắt có chủ đích: search field của tab bar, view options, nút tab-config trong layout sidebar (tab mới tạo bằng Cmd+T, double-click, hoặc right-click vùng trống), option chia sidebar, panel toggle ở title strip. Nếu workflow của bạn phụ thuộc mấy nút đó thì biết trước mà tính.
Một lưu ý nữa: Harp poll tmux mỗi 10 giây khi bật integration. Không nặng, nhưng là thứ đáng biết nếu máy bạn đang chạy nóng.
Kết
Repo tạo 20/10, cập nhật 21/10, 544 sao, 1 ngày. Con số đó tự nó là tín hiệu: cái đau “nhiều agent, không biết con nào cần mình” là đau thật, và một fork Warp giải nó trong vài trăm dòng Rust đang được chú ý đúng lúc. Nếu bạn đang chạy từ 3 session Claude Code hoặc Codex trở lên trên macOS, tải DMG thử một buổi chiều. Còn nếu chỉ một agent một tab, đợi thêm vài tuần xem repo có sống tiếp không đã.
Repo: dominikmartn/harp
