Tại sao có bài tiếp theo
Bài FleetView trước tôi kết bằng một bảng thật thà: hai dòng “vẫn khó dùng” cho mobile phone và multi-machine. Pain 6 thẳng thắn thừa nhận FleetView không solve được cross-machine visibility. Lúc đó tôi không có kế hoạch viết thêm.
Ba tuần sau, tôi nhìn lại workflow của mình và nhận ra mình đang làm những thứ mà bài trước không đề cập đến. Một màn hình claude agents mở thường trực, bên trong có ba session ghim (pinned) không bao giờ tắt qua đêm. Một dòng ! npm run dev chạy dev server ngay trong FleetView thay vì mở tab terminal riêng. Một hàng 12/40 xuất hiện khi batch agent đang chạy, không cần đợi xong mới biết tiến độ.
Tất cả đến từ một chuỗi update từ v2.1.147 đến v2.1.168. Đây là bài ghi lại những gì đã thay đổi.
Pinned sessions: thứ đầu tiên tôi để ý
v2.1.147 ra tính năng một tổ hợp phím duy nhất: Ctrl+T trên session trong FleetView để ghim nó.
Trước khi hiểu tại sao điều này quan trọng, cần nhớ lại behavior của background session trước đây. Khi máy MacBook bị memory pressure (nhiều tab Chrome, Xcode đang build), background session idle có thể bị shed. Gõ /bg xong đi ngủ, sáng dậy session không còn. Không phải crash, không phải lỗi, chỉ là daemon đã cho nó đi vì cần bộ nhớ.
Pinned session không bị shed. Daemon giữ chúng lại trước khi xem xét non-pinned. Thêm nữa, khi CC tự update (từ v2.1.163 trở đi, update diễn ra trong nền), pinned session được restart in-place thay vì bị drop. Mở session sau khi update không còn bị delay do cold restart.
Tôi bắt đầu giữ ba session ghim thường trực: một cho blog, một cho công việc chính, một idle không giao việc gì, chỉ để cwd của một project thứ ba luôn có mặt trong FleetView (nhớ pitfall bài trước về cwd biến mất khi kill hết session trong group đó). Chi phí giữ session idle là gần như không đáng kể.
Shell sessions trong FleetView
v2.1.154 thêm cú pháp ! <command> trong dispatch input của FleetView.
Gõ ! npm run dev trong prompt box rồi Enter thì FleetView spawn một background session chạy lệnh đó. Session đó có thể attach như session Claude bình thường, có thể detach. Cùng column cwd, cùng status display. Nếu npm run dev crash, session chuyển trạng thái giống session Claude đã exit, không biến mất im lặng.
Ứng dụng tôi thấy liền: thay vì Ctrl+B c mở tmux window mới để chạy dev server, gõ thẳng trong FleetView. Tất cả nằm một màn hình. Khi cần xem log dev server, attach vào đó. Khi cần làm việc khác, detach. Ctrl+X kill khi xong.
Cú pháp cũng có qua CLI ngoài UI: claude --bg --exec 'npm run dev'. Hữu ích cho script, không phải chỉ interactive use.
Dynamic workflows và thay đổi nhận thức
v2.1.154 cũng là bản ra dynamic workflows. Lệnh /workflows trong session hiện tất cả workflow run đang chạy hoặc đã chạy. Công cụ Workflow trong API session (và session viết blog này) cho phép một session điều phối hàng chục đến hàng trăm sub-agent chạy song song trong background.
Cái thay đổi trong FleetView là bạn nhìn thấy kết quả của nó. Khi một session đang điều phối batch agent qua Workflow tool, FleetView hiển thị các sub-session đó như session bình thường trong list. Bạn có thể attach vào bất kỳ sub-agent nào để xem nó đang làm gì.
Bản 2.1.166 thêm vào một chi tiết nhỏ nhưng hiệu quả: mỗi row trong FleetView khi session đang fan-out nhiều việc sẽ hiện dạng 12/40 trước status detail. 12 đã xong, 40 tổng số. Peek mode (nhấn phím xem chi tiết row) hiện item đang chạy lâu nhất. Không phải mở Workflow UI, không phải check file log, nhìn FleetView là biết batch đang ở đâu.
Trước khi có tính năng này, tôi chạy batch 40 agent và không biết tiến độ cho đến khi session điều phối báo xong. Bây giờ có thể ước lượng thời gian còn lại từ nhà.
Autocomplete và PR column
Hai thứ nhỏ nhưng tôi dùng thường xuyên.
Dispatch input trong FleetView giờ autocomplete native slash command và bundled skill (v2.1.153), không phải chỉ project-scope skill. Substring matching từ v2.1.157 nghĩa là gõ git sẽ suggest nf-git-workflow, không cần nhớ tên chính xác. Workflow lặp lại theo ngày như “dispatch một session với skill X cho project Y” nhanh hơn đáng kể.
PR column (v2.1.153): khi session mở PR qua GitHub CLI, FleetView hiện PR #42 trong row đó, hoặc 3 PRs nếu session mở nhiều hơn một. Không phải tính năng to tát nhưng đúng với cách tôi dùng FleetView là nơi review kết quả của đợt agent, không phải chỉ theo dõi trạng thái.
--json waitingFor cho automation
v2.1.162 thêm field waitingFor vào output của claude agents --json.
Bài trước tôi giới thiệu --json cho phép đọc danh sách session từ script. Lúc đó chỉ biết trạng thái tổng thể. Giờ waitingFor cho biết session đang chờ gì: permission prompt, user input, hay loại block nào khác.
Tôi dùng trong Telegram bridge. Bot nhận được JSON từ claude agents --json, filter session có waitingFor, gửi notification về phone với nội dung cụ thể hơn: “Session blog đang chờ permission prompt cho Edit tool” thay vì chỉ “Session blog: blocked”. Không phải mở SSH, không phải attach vào session để đọc, bot đọc được trực tiếp.
Cross-session messaging cứng hơn
v2.1.166 hardened một chi tiết quan trọng cho ai dùng Agent Teams hoặc workflow nhiều sub-session: message được relay qua SendMessage từ session khác không còn mang user authority.
Trước đây một sub-agent có thể relay permission request lên session cha. Receiver bây giờ từ chối request loại đó nếu đến qua relay, không phải trực tiếp từ user. Auto mode còn block thêm. Không ảnh hưởng workflow thông thường nhưng đóng một lỗ hổng thiết kế khi chạy nhiều session lạ, hoặc session do người khác dispatch vào FleetView của bạn.
Những UI fix đáng nhớ ở v2.1.166
Một bản tập trung chủ yếu vào UX. Một số fix tôi để ý:
Status text bị cắt. Trước đây status detail trong mỗi row bị cut ở 60-120 ký tự bất kể terminal rộng bao nhiêu. Lỗi thật sự phiền khi terminal 200 cột mà vẫn thấy dòng cắt giữa chừng. Fix trong bản này.
Session name truncate ở 40 ký tự. Cùng vấn đề. Session có tên dài hơn 40 ký tự (ví dụ path dài) bị cắt, không đọc được. Giờ column name co giãn theo terminal width.
Attach stall 5 giây sau daemon restart. Sau khi CC tự update hoặc daemon restart, lần đầu attach vào session mất ~5 giây treo trước khi kết nối. Đặc biệt khó chịu với remote SSH khi mạng chậm. Fix rồi.
Ctrl+V paste trong dispatch input. Trước không paste được ảnh vào dispatch box của FleetView (cú pháp mới). Giờ OK.
Multiline prompt cursor. Khi gõ prompt dài nhiều dòng trong dispatch box, cursor có lúc dính ở cuối dòng đầu tiên. Fix rồi.
Vẫn chưa solve
Multi-machine: vẫn cần SSH vào từng máy, gõ claude agents riêng. Không có view gộp. Telegram bridge vẫn là cách duy nhất xem summary nhiều máy trên mobile mà không cần mở terminal.
Điều này không đổi. Nhưng cái đổi là mỗi FleetView trên từng máy giờ mạnh hơn nhiều so với bài trước. Session được pinned không bao giờ chết qua đêm. Batch agent có done/total tracking mà không cần tool phụ. Shell process sống trong cùng UI với agent session. Automation qua --json biết được session đang chờ gì.
Khoảng cách từ bảng so sánh
Bài trước tôi kết bằng bảng so sánh tmux vs FleetView, trong đó 2 trong 7 dòng cuối là “vẫn khó dùng” cho cả hai. Bảng đó vẫn đúng với multi-machine và mobile phone.
Nhưng riêng cái mà FleetView được thiết kế để làm (quản lý agent session local, theo dõi batch, dispatch nhanh), khoảng cách với tmux giờ lớn hơn nhiều. Bài trước viết vào tháng 5, FleetView còn là “session visibility tool với vài pitfall cần tránh”. Tháng 6, sau pinned sessions, dynamic workflow tracking, và --json waitingFor, nó là nơi tôi orchestrate công việc, không chỉ theo dõi nó.
Một test nhỏ: lần cuối tôi dùng tmux ls để tìm Claude session là khi nào? Không nhớ. Tmux vẫn sống trong workflow của tôi, nhưng cho htop, log Docker, và một số tool không phải agent. Không phải cho đám agent nữa.
Bài thuộc series Claude Code từ zero. Bài trước: FleetView: một màn hình thay cho 6 tmux pane và 3 tab desktop.