世界を動かす技術を、日本語で。

Emacs エージェントシェル(ACPによる提供)

概要

acp.el は、Emacsで ACP (Agent Client Protocol) を利用可能にする新しいクライアントライブラリ。 agent-shell は、Emacs上でエージェントと対話できるシェル環境を提供。 複数のAIエージェント(例:Gemini, Claude Code)を 統一的な操作感 で切り替え可能。 トラフィック監視フェイクエージェント によるデバッグ機能も搭載。 GitHubで公開中、フィードバックや支援を歓迎。

EmacsでAIエージェントを自在に操る:agent-shellとacp.elの紹介

  • acp.el は、 ZedGoogle が策定した Agent Client Protocol (ACP) をEmacsで実装したパッケージ。
  • chatgpt-shell の開発経験を活かし、AIエージェントとの連携を Emacs 上で実現。
  • agent-shell は、 comint-mode をベースにしたEmacsネイティブのシェルバッファ。
    • 通常のEmacsバッファと同様の操作性。
    • char/lineモードの切り替え不要。
  • エージェント非依存設計 により、複数のAIエージェントを統一プロトコルで利用可能。
    • 設定例:Gemini CLIとClaude Codeの切り替え。
      • Gemini用:APIキー認証、コマンドパラメータ設定
      • Claude Code用:Anthropic APIキー環境変数設定
  • 他のエージェントにも対応可能。Pull Requestも歓迎。

トラフィック監視とフェイクエージェント

  • acp.el のプロトコル理解を深めるため、 トラフィック監視バッファ を開発。
    • M-x agent-shell-view-trafficで通信内容を確認可能。
  • 有料エージェント の利用コスト削減と開発効率向上のため フェイクエージェント 機能を実装。
    • 通信内容(トラフィック)を保存し、後でリプレイ可能。
    • 問題のあるセッションを1回記録→何度も再生してデバッグ
    • リプレイには制約もあるが、実用面で十分効果あり。

今後の展望とユーザーへの呼びかけ

  • Agent Client Protocol Schema の実装はまだ発展途上。
  • 利用体験(UX)をEmacsらしく進化させるため、継続的に改善予定。
    • 例:許可ダイアログ横にn/pキーで操作できるdiffバッファの実験
  • agent-shellacp.el はどちらも GitHub で公開中。
    • 一般ユーザーはagent-shell
    • パッケージ開発者はacp.elを推奨
  • バグ報告機能要望資金援助 を歓迎
    • クラウドLLMサービス利用者は、支援も検討
    • 企業利用者は、会社からの支援も呼びかけ

関連リンク・追加情報


agent-shellacp.el は、EmacsユーザーにとってAIエージェント活用の新たな道を切り拓くパッケージ。 気軽に試して、フィードバックや支援で開発を盛り上げてほしい。

Hackerたちの意見

エージェントシェルは、ずっと欲しかったものだよ。いろんなClaudeコードの統合パッケージを使ってきたけど、どれもすごく良いんだ。でも、ターミナルエミュレーターで動かさなきゃいけないから、ちょっとストレスがあるんだよね。エージェントシェルだと、もっと統合されて自然に感じる。これらの改善が本当に楽しみで、特にファイルから環境変数を読み込む機能が嬉しい。ただ、エージェントシェルサイドバーのスクリーンショットがあったら、実際に何をするのか見られるのになぁ。

エージェントシェル:ACP(エージェントクライアントプロトコル)を使って、さまざまなAIエージェントとやり取りするためのネイティブなEmacs体験。 https://agentclientprotocol.com 現在、エージェントシェルはClaude Code、Gemini CLI、Codex、Gooseとやり取りできるけど、技術的にはどんなACP対応エージェントとも使えるよ。追記:エージェントシェルが持続可能になるためには、もっとスポンサーが必要だね。 https://github.com/sponsors/xenodium

すごくワクワクする!claude-code-ideを使ってたけど、comint-modeを使ってないのがめんどくさいんだよね。これを試すのが楽しみ!ちょっと聞いてもいい?ACPの仕様はまだ詳しく見てないんだけど、「ide」機能もカバーしてるのかな(Claude code ideみたいに。主にエージェントにカーソルの位置を教えたり、diff統合をする感じ)?それとも基本的なことだけ?

何回か使ってみたけど、かなりスムーズな体験だよ。新しいパッケージにしてはね。

誰かがこれをNeovim用に作ってくれるのを待ってる。頼むよ、知られざるヒーロー!(ZedチームとGoogleには仕様を作ってくれてありがとうと言いたい)

Emacs側に遊びに来てね ;) Vimのバインディングもあるよ!

neovimのためのCode Companionは、しばらく前からACPをサポートしてるよ。詳細はここを見てね: https://agentclientprotocol.com/overview/clients

ECAっていう別のプロジェクトもあるよ。 https://github.com/editor-code-assistant/eca ECAは、さまざまなフロントエンドやエディタに対応したLSPライクなプロトコルを持つコーディングエージェントだと思う。それに対して、エージェントプロトコルは、Gemini CLIやClaude Codeのような多くのエージェントを使えるようにしてくれるんだ。もちろん、プロトコルをサポートしている前提だけどね。もしかしたら、他のコーディングエージェントもECAプロトコルを採用するかもしれないね。

そうだね、ECAプロジェクトにはEmacsパッケージも含まれてるよ。最近使ってるんだ。Emacsの問題をデバッグするためにECAプロトコルをちょっと掘り下げてみたけど、ACP(エージェントクライアントプロトコル)のドキュメントをちらっと見た感じ、ECAとACPのプロトコルはすごく似てて、どっちもよくドキュメントされてるみたい。再発明の偶然だね。

両方試してみたけど、その通りだね。MCPの設定をもう一度しなきゃいけなかったし、バックグラウンドで自分のサーバーを動かすからね。それだけでもagent-shellの方が好きかな。エージェントごとに設定形式や場所が違うし、プロジェクトレベルとユーザーレベルの設定の違いもあるから、もうそれだけで面倒くさいよ。いつかその辺のスタンダードができるといいな。

じゃあ、直接Claude Codeを使うのと比べて、これを使う理由は何なの?

テキストエディタに組み込まれた統一されたネイティブユーザー体験。Claude Codeだけじゃなくて、Gemini CLI、Codex、Gooseなど、ACPに対応した他のエージェントとも使えるよ。

それがEmacsのやり方だよ - Emacsが世界を飲み込む!

ACPのことは初めて聞いたけど… AG-UIと比べてどうなの? まあ、明らかにこれはコーディング特化だし、AG-UIは汎用的を目指してるけど… それ以外に何か違いはある?

LSPと同じポイントだけど、AIエージェントが関わってる。各エディタごとにclaudeラッパーやcodexラッパー、geminiラッパー、aiderラッパーを実装するのは面倒だから、zedの人たちがプロトコルの標準化に取り組み始めたんだ。

XenodiumはEmacsに素晴らしいことをしてるよ。もしこれが気に入ったり、Emacsに興味があるなら、彼のブログをチェックしてみてね @ https://xenodium.com/ 他のEmacsユーザーのおすすめで初めてiOSアプリを購入したんだけど、その作者のアプリ、Journellyだよ。リンクやメモを保存して、orgファイルとしてエクスポートできるシンプルでポータブルな場所(オプションの一つとして;マークダウンも対応予定らしい)。 https://xenodium.com/journelly-for-ios Xenodiumとは関係ないけど、今年Emacsにハマり始めて、彼の貢献を見るのが好きなんだ。

ありがとう!これで本当に嬉しい気分になったよ。Journellyのファンだって聞いて嬉しい。購入してくれてありがとう。ニッチなアプリを持続可能に作るのは本当に大変なんだ。

XenodiumはEmacsコミュニティのために素晴らしい仕事をしてるね。今はagent-shellを使ってるけど、バッファの上に追加されたヘッダーが好きじゃないんだ。下に欲しい情報は全部あるし、ミニマリストのためにそれをオプションにしてほしいな。

バッファの上に追加されたヘッダーが好きじゃないんだ ぜひ機能リクエストを出して、グラフィカルヘッダーをオプションにできるようにしよう!: https://github.com/xenodium/agent-shell/issues