
Agent macOS thao tác app qua Accessibility API, không giả chuột
Chunks thao tác app macOS qua Accessibility API thay vì giả lập chuột, chạy Gemma 4 offline qua Ollama. Kiến trúc đáng học cho dev viết agent UI.
Một lập trình viên vừa công bố Chunks, trợ lý AI chạy trên macOS thao tác app bằng Accessibility API thay vì giả lập chuột. Bài viết trên Dev.to kèm luôn số liệu độ trễ và thiết kế quyền riêng tư.
Cách tiếp cận này đáng chú ý với dev Việt Nam đang thử dựng agent thao tác máy tính, vì nó né đúng hai thứ hay làm hỏng trải nghiệm: cướp chuột của người dùng và gửi ảnh màn hình lên server.
Vấn đề tác giả muốn né
Tác giả mô tả lý do xây Chunks khá thẳng: các agent "computer use" từng thử "warp your physical mouse, so you can't touch your laptop while they work". Theo tác giả, chúng mất "30 to 60 seconds per step" và gửi ảnh chụp toàn màn hình "off to someone else's backend".
Đây là con số tác giả tự nêu trong bài, không phải benchmark độc lập — nhưng nó mô tả đúng cảm giác khi dùng nhóm agent điều khiển màn hình hiện nay.
Thao tác qua accessibility tree, không qua toạ độ chuột
Điểm kỹ thuật chính nằm ở đây. Theo bài viết, Chunks dùng macOS Accessibility API (AXUIElement) qua một driver riêng, tìm control theo ngữ nghĩa — ví dụ app="Notes" role=button name="New Note" — rồi "climbs the accessibility tree to find something pressable, checks focus before typing" và gọi thẳng AXUIElementPerformAction.
Hệ quả: chuột thật không di chuyển. Thay vào đó giao diện vẽ một vệt trỏ Bezier để người dùng thấy agent đang thao tác ở đâu.
Với người viết agent, khác biệt không chỉ là thẩm mỹ. Tìm phần tử theo role và name thì bền hơn hẳn so với click theo toạ độ, vốn vỡ ngay khi cửa sổ đổi kích thước hoặc đổi tỉ lệ Retina.
Hai đường chạy model
Bài viết mô tả hai nhánh. Nhánh offline chạy Gemma 4 (gemma4:e2b-it-qat và gemma4:e4b-it-qat) qua Ollama trên Apple Silicon; tác giả cho biết một lượt vision đầy đủ xong "in about 2.3 seconds with nothing leaving the laptop". Nhánh cloud dùng Gemini Flash với key riêng, request được hedge song song ở mốc 3,5 giây để cắt tail latency.
Tác giả cũng ghi nhận khác biệt giữa hai cỡ model: bản 2B đủ nhanh cho câu hỏi nhanh kiểu "cái này là gì", còn bản 4B chọn đúng phần tử giao diện tốt hơn rõ rệt khi màn hình nhiều chi tiết.
Thiết kế quyền riêng tư
Phần này đáng tham khảo nếu bạn dựng công cụ nội bộ cho công ty. Theo bài viết: không có backend, key nằm trong macOS Keychain, bộ nhớ là một file markdown 2 KB ở máy, một SecretSweeper quét sạch API key, JWT và mật khẩu trước khi ghi. Một ConsentGate hỏi trước mọi hành động thay đổi trạng thái, và PolicyGate chặn lệnh rủi ro.
Luật tác giả tâm đắc nhất cũng là luật dễ áp dụng nhất: thứ agent suy ra từ màn hình không bao giờ được ghi đè thứ người dùng nói ra miệng.
Cần đọc với đúng mức kỳ vọng
Đây là dự án cá nhân làm trong một hackathon — tác giả cho biết đã dựng Chunks tại Hacktoberfest Hack Day × AI ở Vizag ngày 1/11/2026 và không đoạt giải ở hạng mục chính. Stack được nêu gồm Swift 6, AppKit, SwiftUI, ScreenCaptureKit, cùng bộ hơn 710 unit test.
Mọi con số về độ trễ đều do tác giả tự đo và công bố, chưa có bên thứ ba kiểm chứng. Hãy coi đây là mô tả kiến trúc đáng học, không phải kết quả benchmark.
Việc đáng làm tuần này nếu bạn đang viết agent thao tác UI: thử thay layer click-theo-toạ-độ bằng truy vấn accessibility tree theo role và name, rồi đo lại tỉ lệ thao tác hỏng khi đổi kích thước cửa sổ.
Không spam, hủy đăng ký bất kỳ lúc nào.
Bài viết liên quan


AnySpeechRecognizer: đổi engine ASR on-device trên macOS 26
30 thg 10, 2026