1 điểm bởi GN⁺ 2025-10-14 | 1 bình luận | Chia sẻ qua WhatsApp
  • agent-shell là một shell native dựa trên comint-mode cho phép điều khiển trực tiếp các AI agent trong Emacs
  • Sử dụng ACP (Agent Client Protocol) nên có tính linh hoạt, có thể giao tiếp với nhiều agent khác nhau mà không phụ thuộc vào một agent cụ thể
  • tính năng phân tích lưu lượng theo thời gian thựcphát lại agent giả (fake/fak) giúp nâng cao hiệu quả kiểm thử và phát triển
  • Dù vẫn chưa hỗ trợ đầy đủ mọi chức năng của giao thức, nó đã cho thấy mức độ triển khai đủ nhanh để dùng thực tế
  • Cả agent-shellacp.el đều đã được công khai trên GitHub, và tác giả hoan nghênh phản hồi của người dùng về tính năng bổ sung hoặc lỗi

Giới thiệu

  • Gần đây, thông qua acp.el được triển khai bằng Emacs Lisp, việc tích hợp với Agent Client Protocol (ACP) do Zed và Google đồng phát triển đã trở nên khả thi
  • Trước đây chỉ có các tích hợp cơ bản với LLM như chatgpt-shell, nên việc khai thác AI agent một cách bài bản vẫn diễn ra khá chậm
  • Khi ACP được đưa vào, nhu cầu tích hợp agent trong môi trường Emacs tăng lên, từ đó việc phát triển agent-shell native cho Emacs đã bắt đầu

Tổng quan về agent-shell

  • agent-shell được xây dựng trên comint-mode, hoạt động bên trong hệ thống buffer quen thuộc của Emacs
  • Nó cung cấp môi trường có thể dùng giống hệt shell Emacs thông thường mà không cần chuyển đổi riêng giữa chế độ ký tự và chế độ dòng

Agent-agnostic (không phụ thuộc agent)

  • Nhờ ACP, có thể tạo ra trải nghiệm người dùng nhất quán để giao tiếp với nhiều agent khác nhau bằng một giao thức duy nhất
  • Qua ví dụ cấu hình, có thể áp dụng cho nhiều agent như Gemini CLI, Claude Code chỉ với những thay đổi mã đơn giản
    • Mã ví dụ: giải thích cách thiết lập xác thực, lệnh và biến môi trường cho từng agent
  • Các agent khác cũng có thể được tích hợp dễ dàng theo cùng một cách

Tính năng xem lưu lượng

  • Vì còn chưa quen với giao thức ACP, đã nảy sinh nhu cầu phân tích lưu lượng giao tiếp theo thời gian thực
  • agent-shell cung cấp một buffer xem lưu lượng riêng, cho phép quan sát trực quan lưu lượng dựa trên JSON bằng lệnh M-x agent-shell-view-traffic

Fake agents (agent giả và phát lại)

  • Do việc phát triển với agent trả phí ngoài đời thực gây lãng phí chi phí và thời gian, tính năng phát lại agent giả đã được đưa vào
  • Bằng cách phát lại (replay) dữ liệu giao tiếp đã lưu qua buffer lưu lượng, có thể kiểm thử nhanh nhiều lần
  • Dù vẫn có một số ràng buộc và giới hạn, quy trình gỡ lỗi và phát triển đã được tối ưu đáng kể

Kế hoạch sắp tới và trạng thái hiện tại

  • Mới chỉ triển khai một phần của Agent Client Protocol Schema nên vẫn còn những phần chưa hoàn thiện
  • Đang thử nghiệm các UX mới như buffer quick(diff) dùng phím n/p và permission dialog
  • Dự kiến sẽ tiếp tục nắm đầy đủ các chức năng của giao thức và triển khai bổ sung

Công khai trên GitHub và hướng dẫn sử dụng

  • Cả agent-shellacp.el đều đã được công khai trên GitHub
    • agent-shell: gói dành cho người dùng agent
    • acp.el: thư viện dành cho nhà phát triển muốn tạo các gói tích hợp liên quan đến agent
  • Cả hai dự án đều đang ở giai đoạn rất sớm (beta), vì vậy tác giả khuyến khích gửi báo lỗi và yêu cầu tính năng
  • Việc sử dụng dịch vụ cloud LLM phát sinh thêm chi phí, và bản thân phát triển mã nguồn mở cũng cần chi phí cùng công sức
  • Nếu dự án hữu ích, tác giả khuyến khích người dùng tham gia hỗ trợ (tài trợ)

1 bình luận

 
GN⁺ 2025-10-14
Ý kiến Hacker News
  • Xenodium đang làm những điều rất tuyệt với Emacs; nếu bạn quan tâm đến Emacs thì rất nên ghé xem blog của Xenodium. Journelly là ứng dụng iOS đầu tiên tôi mua nhờ đề xuất từ những người dùng Emacs khác; đây là một không gian di động để lưu liên kết hoặc ghi chú một cách tiện lợi và có thể xuất sang tệp org (nghe nói sắp tới còn hỗ trợ cả markdown). Tôi không có bất kỳ liên hệ nào với Xenodium. Năm nay khi đào sâu vào Emacs, việc nhìn thấy những đóng góp của anh ấy thực sự rất vui.
    • Cảm ơn rất nhiều, những phản hồi như thế này làm cả ngày trở nên vui vẻ. Cũng rất vui khi biết bạn là fan của Journelly, cảm ơn bạn đã mua ứng dụng. Việc tiếp tục phát triển một ứng dụng ngách là một thử thách lớn.
  • agent-shell mang lại trải nghiệm native để có thể dùng trực tiếp trong Emacs nhiều AI agent khác nhau chạy bằng ACP (Agent Client Protocol). Hiện tại nó có thể tích hợp với Claude Code, Gemini CLI, Codex và Goose, nhưng về mặt kỹ thuật thì bất kỳ agent nào hỗ trợ ACP đều có thể dùng được. Để phát triển bền vững, dự án cần thêm nhà tài trợ; có thể ủng hộ tại github sponsors.
    • Rất thú vị. Tôi từng dùng claude-code-ide nhưng thấy khá bất tiện vì nó không dùng comint-mode. Tôi rất muốn thử agent-shell. Có một câu hỏi là đặc tả ACP có bao phủ cả các tính năng liên quan đến “ide” không (ví dụ: vị trí con trỏ, tích hợp diff như trong Claude code ide), hay nó thực sự chỉ tập trung vào những chức năng rất cơ bản?
  • Agent shell đúng là thứ tôi luôn mong muốn. Tôi đã thử nhiều gói tích hợp Claude code khác nhau nhưng đều vướng ở chỗ phải chạy trong trình giả lập terminal. Agent shell cho cảm giác tự nhiên và tích hợp hơn nhiều. Tôi đặc biệt mong chờ tính năng đọc cấu hình môi trường từ tệp, và sẽ rất hay nếu có ảnh chụp màn hình để thấy agent-shell-sidebar thực sự hoạt động như thế nào.
  • Xenodium đang làm công việc tuyệt vời cho cộng đồng Emacs. Tôi đang dùng agent-shell lúc này, nhưng không thích phần header được thêm ở đầu buffer. Những thông tin tôi cần đã có đầy đủ ở dòng bên dưới. Nếu có thể cho phép tắt riêng dòng đó thì sẽ rất hợp với những người thích tối giản.
    • Nếu bạn không thích header thì hãy gửi feature request. Sẽ rất hay nếu có thể bật/tắt phần header đồ họa một cách tùy chọn.
  • Tôi đã dùng agent-shell vài lần, và dù vẫn là gói còn ở giai đoạn đầu sau khi phát hành, nó vẫn mang lại trải nghiệm rất mượt.
  • Đây là lần đầu tôi nghe về ACP. Tôi tò mò nó khác AG-UI như thế nào. Dĩ nhiên tôi hiểu ACP chuyên cho việc lập trình còn AG-UI thì tổng quát hơn nhiều, nhưng ngoài điểm đó ra thì còn những khác biệt nào khác?
    • Cùng logic như LSP, nhưng áp dụng cho AI agent. Việc phải liên tục tự viết lại wrapper cho từng editor với claude, codex, gemini, aider... là quá đau đớn, nên đội ngũ Zed đã bắt đầu chuẩn hóa giao thức.
  • Cũng có một dự án tên là ECA GitHub ECA. ECA là một giao thức coding agent kiểu LSP dành cho nhiều front-end và editor, đồng thời hỗ trợ trực tiếp nhiều model. Trong khi đó, agent protocol có vẻ cho phép dùng nhiều agent như Gemini CLI, Claude Code... trên nhiều front-end khác nhau tùy theo việc mỗi agent có hỗ trợ giao thức hay không. Có vẻ các coding agent khác nhau cũng có thể áp dụng giao thức ECA.
    • Đúng vậy, dự án ECA cũng có gói cho Emacs. Tôi đang dùng nó gần đây. Khi debug một vấn đề của Emacs, tôi đã lướt qua tài liệu của cả giao thức ECA lẫn ACP; chúng khá giống nhau và đều được tài liệu hóa tốt. Đây là một trường hợp tái phát minh trùng lặp ngoài ý muốn.
    • Tôi đã dùng cả hai và mô tả ở trên là đúng. Bạn phải cấu hình lại MCPs, và ECA có server riêng chạy nền. Vì những điểm đó mà tôi thích agent-shell hơn. Mỗi agent lại có định dạng và vị trí config khác nhau, chưa kể còn có khác biệt giữa config cấp dự án và cấp người dùng, nên sự đơn giản của agent-shell là một lợi thế lớn. Sẽ thật tuyệt nếu sau này cũng có một chuẩn config.
  • Tôi thắc mắc vì sao phải dùng agent-shell thay vì cứ dùng trực tiếp Claude Code.
    • Vì trải nghiệm UI native thống nhất, được tích hợp hoàn toàn vào trình soạn thảo văn bản. Không chỉ Claude Code mà cả Gemini CLI, Codex, Goose và nhiều agent hỗ trợ ACP khác đều có thể dùng theo cùng một cách.
    • Đó chính là phong cách Emacs. Emacs là thứ nuốt chửng cả thế giới.
  • Tôi đang chờ ai đó làm thứ này cho Neovim, mong một vị anh hùng vô danh sớm xuất hiện. Cũng cảm ơn đội ngũ Zed và Google vì đã tạo ra đặc tả này.
    • Hãy sang với phía Emacs đi, mọi phím vim binding đều được hỗ trợ hết.
    • Code Companion cho neovim thực ra đã hỗ trợ ACP từ lâu rồi; xem thêm thông tin tại đây