Emacs agent-shell (ACP 기반)
(xenodium.com)- agent-shell은 Emacs에서 AI 에이전트를 직접 제어할 수 있게 해주는 comint-mode 기반 네이티브 셸임
- ACP(Agent Client Protocol) 을 사용하여 특정 에이전트에 종속되지 않고 다양한 에이전트와 통신할 수 있는 유연함이 있음
- 실시간 트래픽 분석 기능과 가짜(fak) 에이전트 리플레이 기능으로 테스트와 개발 효율 상승
- 아직 프로토콜 전 기능 미탑재 상태이나, 빠르게 실사용 가능한 수준의 구현을 보여줌
- agent-shell과 acp.el 모두 GitHub에서 공개되어 있으며, 추가 기능이나 버그에 대한 사용자 피드백을 환영함
소개
- 최근 Emacs Lisp로 구현된 acp.el을 통해 Zed와 Google이 공동 개발한 Agent Client Protocol (ACP) 과의 연동이 가능해졌음
- 기존에는 chatgpt-shell 등 LLM과의 기본 연동만 제공되었으나, AI 에이전트의 본격 활용은 느린 편이었음
- ACP의 도입으로 Emacs 환경 내에서 에이전트 연동 요구가 커지면서 Emacs 네이티브 agent-shell 개발을 시작하게 됨
agent-shell 개요
-
agent-shell
은 comint-mode를 기반으로 하여 Emacs의 익숙한 버퍼 시스템 내에서 동작함 - 별도의 문자 및 라인 모드 변환 없이 일반 Emacs 셸과 동일하게 사용할 수 있는 환경 제공됨
Agent-agnostic (에이전트 비종속성)
- ACP 덕분에 하나의 프로토콜로 다양한 에이전트와 통신할 수 있는 일관된 사용자 경험 구현 가능
- 설정 예시를 통해 Gemini CLI, Claude Code 등의 다양한 에이전트를 간단한 코드 변경만으로 적용 가능함
- 예시 코드: 각각의 에이전트를 위한 인증, 명령어, 환경 변수 설정 방식 설명
- 타 에이전트도 같은 방식으로 쉽게 연동 가능
트래픽 보기 기능
- ACP 프로토콜 사용에 익숙하지 않아, 통신 트래픽을 실시간 분석할 필요성이 있었음
- agent-shell에서 별도의 트래픽 뷰어 버퍼를 제공하여,
M-x agent-shell-view-traffic
명령으로 Json 기반 트래픽을 시각적으로 확인 가능
Fake agents (가짜 에이전트 및 리플레이)
- 실제 유료 에이전트로 개발 시 비용과 시간적 비효율 문제로 인해 가짜 에이전트 리플레이 기능을 도입함
- 트래픽 버퍼를 통해 저장한 통신 데이터를 재생(replay)해, 여러 번 빠른 테스트가 가능해짐
- 일부 제약이나 한계는 있으나, 디버깅 및 개발 프로세스가 크게 효율화됨
향후 계획 및 현재 상태
- Agent Client Protocol Schema의 일부만 구현된 상태로 미완성 부분이 남아있음
- n/p 키 기반의 퀵(diff) 버퍼와 permission dialog 등 혁신적인 UX 실험 진행 중
- 프로토콜 기능 전체 파악 및 추가 구현 예정
GitHub 공개 및 활용 안내
-
agent-shell과 acp.el은 모두 GitHub에서 공개되어 있음
- agent-shell: 에이전트 사용자를 위한 패키지
- acp.el: 에이전트 관련 연동 패키지를 만들고 싶은 개발자를 위한 라이브러리
- 두 프로젝트 모두 매우 초기(beta) 단계로, 버그 및 기능 요청 제출을 권장함
- 클라우드 LLM 서비스 사용 시 발생하는 추가 비용, 그리고 오픈소스 개발 자체에도 비용과 노력이 소요됨
- 프로젝트가 유용하다면 서포트(후원) 참여를 독려함
Hacker News 의견
- Xenodium이 emacs에서 멋진 일들을 하고 있음, emacs에 관심이 있다면 Xenodium 블로그를 꼭 확인해보길 추천함, 다른 emacs 사용자들의 추천으로 처음 구입한 iOS 앱이 Journelly임, 이 앱은 링크나 노트를 간편하게 저장하고 org 파일로 내보내기할 수 있는 포터블 공간임 (앞으로 markdown도 지원 예정이라 함), Xenodium과는 아무런 관계 없음, 올해 emacs를 파면서 그의 기여를 보는 것이 매우 즐거움
- 정말 고마움, 이런 피드백이 하루를 행복하게 해줌, Journelly 팬이라는 것도 반가움, 구입해줘서 고마움, 니치 앱을 지속적으로 개발하는 것은 큰 도전임
- agent-shell은 ACP (Agent Client Protocol)로 구동되는 다양한 AI 에이전트를 emacs에서 직접 사용할 수 있게 하는 네이티브 경험을 제공함, 현재 Claude Code, Gemini CLI, Codex, Goose와 연동이 가능하지만 기술적으로는 ACP 지원 에이전트라면 누구나 사용 가능함, 지속 가능한 개발을 위해 스폰서가 더 필요함 github sponsors에서 후원 가능함
- 매우 흥미로움, claude-code-ide를 사용했었지만 comint-mode를 쓰지 않아서 불편함이 컸음, agent-shell을 꼭 써보고 싶음, 질문이 있는데 ACP 명세가 “ide” 관련 기능도 커버하는지 궁금함 (예: Claude code ide에서 지원하는 커서 위치, diff 연동 같은 것), 아니면 정말 기본적인 기능에만 초점을 맞추는지 궁금함
- Agent shell은 내가 항상 원하던 것이었음, 다양한 Claude code 연동 패키지를 사용해봤지만 터미널 에뮬레이터에서 실행해야 하는 번거로움이 있었음, agent shell은 훨씬 더 자연스럽고 통합된 느낌임, 환경 설정을 파일에서 읽어오는 기능이 특히 기대됨, agent-shell-sidebar가 실제로 어떻게 동작하는지 볼 수 있게 스크린샷이 있었으면 함
- Xenodium이 emacs 커뮤니티를 위해 멋진 작업을 해주고 있음, 현재 agent-shell을 사용 중인데 버퍼 상단에 추가되는 header가 마음에 들지 않음, 내가 원하는 정보는 이미 하단에 모두 있음, 하단 줄을 선택적으로 비활성화할 수 있도록 하면 미니멀리스트들에게 좋을 것 같음
- header가 마음에 들지 않으면 feature request를 올려줬으면 함, 그래픽 헤더를 선택적으로 켜고 끌 수 있도록 만드는 것이 좋겠음
- agent-shell을 몇 번 사용해봤는데, 출시 초반 패키지임에도 불구하고 매우 부드러운 경험을 제공함
- 처음으로 ACP에 대해 들었음, AG-UI와 비교해 어떻게 다른지 궁금함, 물론 ACP는 코딩 특화이고 AG-UI는 훨씬 더 범용적이라는 차이는 알겠지만 그 외에 다른 차이점에 대해 궁금함
- LSP와 동일한 논리지만 AI 에이전트에 적용된 것임, claude, codex, gemini, aider 등 각 에디터에 대해 wrapper를 매번 새로 구현하는 것은 고통임, 그래서 zed 팀이 프로토콜 표준화를 시작함
- ECA라는 프로젝트도 있음 ECA 깃허브, ECA는 여러 front-end와 editor를 위한 LSP 스타일의 코딩 에이전트 프로토콜임, 다양한 모델을 직접 지원함, 반면 agent protocol은 Gemini CLI, Claude Code 등 여러 에이전트를 각각의 프로토콜 지원 여부에 따라 다양한 front-end에서 사용할 수 있도록 해주는 것 같음, 다양한 코딩 에이전트도 ECA 프로토콜을 채택할 수도 있을 것 같음
- 맞음, ECA 프로젝트는 emacs 패키지도 있음, 최근에 사용 중임, emacs 이슈를 디버깅하면서 ECA 프로토콜과 ACP 문서를 훑어봤는데 둘은 상당히 유사하고 모두 문서화가 잘 되어 있음, 의도하지 않은 중복 발명임
- 두 가지 다 써봤고 위 설명이 맞음, MCPs를 다시 설정해야 하고 ECA는 자체 서버가 백그라운드에서 동작함, 그런 점 때문에 agent-shell이 더 마음에 들었음, 에이전트마다 config 포맷과 위치가 다르고 프로젝트와 사용자 수준의 config까지 차이가 있어서 agent-shell의 단순함이 큰 장점임, 나중에 config 표준도 생기면 정말 좋겠음
- 왜 Claude Code만 직접 쓰지 않고 굳이 agent-shell을 써야 하는지 궁금함
- 텍스트 에디터에 완전히 통합된 유니파이드 네이티브 UI 경험 때문임, Claude Code 뿐만 아니라 Gemini CLI, Codex, Goose 등 ACP를 지원하는 여러 에이전트를 같은 방식으로 쓸 수 있음
- 이게 바로 emacs 스타일임, emacs는 세상을 집어삼키는 존재임
- 누군가 이걸 Neovim용으로 만들어줬으면 기다리는 중임, 이름을 모르는 영웅이 어서 등장하길 바람, spec을 만들어준 Zed팀과 Google에도 감사함
- emacs 쪽으로 오렴, vim 바인딩도 다 지원함
- Code Companion for neovim이 이미 ACP를 오래전부터 지원해왔음, 여기에서 추가 정보 확인 가능