👻

Kiro CLI が ACP 対応!好きなエディタで Kiro CLI を使おう

に公開

はじめに

こんにちは konippi です。最近、AI コーディングエージェントとエディタの統合を標準化する Agent Client Protocol (ACP) が注目されていますね。

先日 Kiro CLI v1.25.0 がリリースされ、Agent Client Protocol (ACP) がサポートされました🎉

この機能により、Kiro CLI を JetBrains IDEs (IntelliJ IDEA、PyCharm、RustRover など) や Zed といった ACP 対応エディタで利用できるようになりました。

本記事では、ACP とは何か、そして Kiro CLI を各エディタで使う方法について解説します。

Agent Client Protocol (ACP) とは

AI コーディングエージェントとエディタは密接に連携していますが、これまで相互運用性は標準化されていませんでした。各エディタはすべてのエージェントに対してカスタム統合を構築する必要があり、エージェントもエディタ固有の API を実装する必要がありました。これにより、以下のような問題が発生していました:

  • 統合のオーバーヘッド: 新しいエージェントとエディタの組み合わせごとにカスタム開発が必要
  • 限定的な互換性: エージェントは利用可能なエディタの一部でしか動作しない
  • 開発者のロックイン: エージェントを選ぶと、利用可能なインターフェースも制限される

ACP は、エージェントとエディタ間の通信を標準化するプロトコルです。Language Server Protocol (LSP) が言語サーバーの統合を標準化したように、ACP はエージェントとエディタの統合を標準化します。

ACP を実装したエージェントは、ACP 対応のすべてのエディタで動作し、ACP をサポートするエディタは、すべての ACP 互換エージェントにアクセスできます。この分離により、両者が独立してイノベーションを進めながら、開発者はワークフローに最適なツールを自由に選択できるようになります。

ACP を使うメリット

エディタのターミナルから kiro-cli chat を実行することもできますが、ACP によるエディタ統合には以下のような利点があります:

  1. エディタ UI との統合

    • ターミナル: 別ウィンドウでの会話、コードとの切り替えが必要
    • ACP: エディタの AI パネル内で会話、コードを見ながらリアルタイムで対話
  2. リッチなコンテキスト共有

    • ACP では、テキスト、画像、音声、埋め込みリソース(ファイル内容)など、様々な形式のコンテンツをプロンプトに含められます
    • エディタが開いているファイルや選択範囲を自動的にエージェントに渡すことも可能
  3. エディタによるファイル操作の仲介

    • エージェントはエディタの fs/read_text_filefs/write_text_file メソッドを使用してファイルにアクセス
    • エディタ内の未保存の変更も含めてファイルを読み取れる
    • エディタがファイル変更を追跡し、変更履歴を管理
  4. ツール実行の可視化と権限管理

    • エージェントのツール呼び出し(ファイル読み取り、編集、削除、検索、コマンド実行など)をリアルタイムで表示
    • ツール実行前にユーザーに権限を確認(一度だけ許可、常に許可、拒否など)
    • Diff 表示により、ファイル変更内容を視覚的に確認
  5. セッション管理

    • エディタがセッションを永続化し、再起動後も会話を継続可能
    • 複数のセッションを同時に管理できる

ACP は、単なる「ターミナルでの CLI 使用」から「エディタに深く統合された AI アシスタント」への進化を実現するプロトコルです。

ACP の設計思想

ACP のアーキテクチャは、以下の重要な原則に従っています:

  1. MCP フレンドリー: JSON-RPC 2.0 上に構築され、可能な限り MCP の型を再利用することで、統合者が共通のデータ型に対して別の表現を構築する必要がありません。エージェントとエディタは stdin/stdout または HTTP/WebSocket 経由で通信します
  2. UX ファースト: AI エージェントとのインタラクションにおける UX の課題を解決するように設計されており、エージェントの意図を明確にレンダリングするための十分な柔軟性を持ちながら、必要以上に抽象的ではありません
  3. 信頼性: ACP は、信頼できるモデルと対話するためにコードエディタを使用する場合に機能します。エージェントのツール呼び出しに対する制御は維持しつつ、コードエディタはエージェントにローカルファイルや MCP サーバーへのアクセスを提供します

詳細は Agent Client Protocol 公式サイトをご確認ください。

エディタのセットアップ

Kiro CLI は、ACP をサポートする任意のエディタで使用できます。エディタの設定ファイルに kiro-cli acp コマンドを指定すると、エージェントへの接続時にエディタが自動的にサブプロセスとして起動します。

JetBrains IDEs

JetBrains IDEs (IntelliJ IDEA、WebStorm、PyCharm など) は、AI Assistant を通じて ACP をサポートしています。詳細は JetBrains ACP ドキュメントをご確認ください。

Kiro をカスタムエージェントとして追加するには:

  1. AI Chat ツールウィンドウを開く
  2. 設定ボタンをクリックし、Add Custom Agent を選択
  3. ~/.jetbrains/acp.json に以下を追加:
{
  "agent_servers": {
    "Kiro Agent": {
      "command": "/full/path/to/kiro-cli",
      "args": ["acp"]
    }
  }
}

エージェントは AI Chat のモードセレクターに表示されます。

Zed

Zed はネイティブで ACP エージェントをサポートしています。詳細は Zed external agents ドキュメントをご確認ください。

Zed の設定 (~/.config/zed/settings.json) に以下を追加します:

{
  "agent_servers": {
    "Kiro Agent": {
      "type": "custom",
      "command": "~/.local/bin/kiro-cli",
      "args": ["acp"],
      "env": {}
    }
  }
}

Zed の AI パネルのエージェントピッカーから「Kiro Agent」を選択します。

その他のエディタ

ACP をサポートする任意のエディタは、kiro-cli acp を起動し、stdio 経由で JSON-RPC で通信することで Kiro を統合できます。プロトコルの詳細については、ACP 仕様をご確認ください。

RustRover で試してみた

私も RustRover (JetBrains IDE の一つ) で Kiro CLI を使ってみました。手順は以下の通りです。

まず、AI Chat ツールウィンドウの右上にある「…」をクリックします。

メニューから「Add Custom Agent」を選択します。

~/.jetbrains/acp.json ファイルが開くので、以下の設定を追加します。command には kiro-cli のフルパスを指定してください。

設定後、AI Chat のモードセレクターに「Kiro CLI」が表示されるので、これを選択すればすぐに使い始められます。

サポートされている ACP メソッド

Kiro CLI は以下の ACP メソッドを実装しており、ACP 対応エディタを通じて Kiro を使用する際に、セッション管理、モデル選択、ストリーミングレスポンスにアクセスできます。

コアプロトコル

メソッド 説明
initialize 接続を初期化し、機能を交換
session/new 新しいチャットセッションを作成
session/load ID で既存のセッションを読み込み
session/prompt エージェントにプロンプトを送信
session/cancel 現在の操作をキャンセル
session/set_mode エージェントモードを切り替え
session/set_model セッションのモデルを変更

エージェント機能

Kiro ACP エージェントは、初期化時に以下の機能を通知します:

  • loadSession: true - 既存セッションの読み込みをサポート
  • promptCapabilities.image: true - プロンプトでの画像コンテンツをサポート

セッション更新

エージェントは session/notification を介して以下のセッション更新タイプを送信します:

更新タイプ 説明
AgentMessageChunk エージェントからのストリーミングテキスト/コンテンツ
ToolCall 名前、パラメータ、ステータスを含むツール呼び出し
ToolCallUpdate 実行中のツールの進行状況更新
TurnEnd エージェントのターンが完了したことを通知

Kiro 拡張機能

Kiro は、スラッシュコマンドMCP サーバーコンテキスト圧縮などの Kiro 固有の機能を公開するために、カスタムメソッド (ACP 仕様に従って _kiro.dev/ プレフィックス付き) で ACP を拡張しています。これらの拡張をサポートしていないクライアントは、安全に無視できます。これらはオプションの拡張機能です。

スラッシュコマンド

メソッド タイプ 説明
_kiro.dev/commands/execute Request スラッシュコマンドを実行 (例: /agent swap, /context add)
_kiro.dev/commands/options Request 部分的なコマンドのオートコンプリート候補を取得
_kiro.dev/commands/available Notification セッション作成後に利用可能なコマンドのリストを送信

MCP サーバーイベント

メソッド タイプ 説明
_kiro.dev/mcp/oauth_request Notification MCP サーバーが認証を必要とする場合に OAuth URL を提供
_kiro.dev/mcp/server_initialized Notification MCP サーバーが初期化を完了し、ツールが利用可能になったことを示す

セッション管理

メソッド タイプ 説明
_kiro.dev/compaction/status Notification 会話コンテキストを圧縮する際の進行状況を報告
_kiro.dev/clear/status Notification セッション履歴をクリアする際のステータスを報告
_session/terminate Notification サブエージェントセッションを終了

初期化の例

ACP クライアントが Kiro との接続を初期化する方法は以下の通りです:

// クライアントが initialize リクエストを送信
{
  "jsonrpc": "2.0",
  "id": 0,
  "method": "initialize",
  "params": {
    "protocolVersion": 1,
    "clientCapabilities": {
      "fs": {
        "readTextFile": true,
        "writeTextFile": true
      },
      "terminal": true
    },
    "clientInfo": {
      "name": "my-editor",
      "version": "1.0.0"
    }
  }
}

// Kiro が機能を返す
{
  "jsonrpc": "2.0",
  "id": 0,
  "result": {
    "protocolVersion": 1,
    "agentCapabilities": {
      "loadSession": true,
      "promptCapabilities": {
        "image": true
      }
    },
    "agentInfo": {
      "name": "kiro-cli",
      "version": "1.5.0"
    }
  }
}

初期化後、セッションを作成してプロンプトを開始します:

// 新しいセッションを作成
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "session/new",
  "params": {
    "cwd": "/home/user/my-project",
    "mcpServers": []
  }
}

// プロンプトを送信
{
  "jsonrpc": "2.0",
  "id": 2,
  "method": "session/prompt",
  "params": {
    "sessionId": "sess_abc123",
    "content": [
      {
        "type": "text",
        "text": "Explain this codebase"
      }
    ]
  }
}

セッションストレージ

ACP セッションは以下の場所にディスクに永続化されます:

~/.kiro/sessions/cli/

各セッションは 2 つのファイルを作成します:

  • <session-id>.json - セッションメタデータと状態
  • <session-id>.jsonl - イベントログ (会話履歴)

ログ

ACP エージェントのログは、標準の Kiro ログの場所に書き込まれます:

プラットフォーム 場所
macOS $TMPDIR/kiro-log/kiro-chat.log
Linux $XDG_RUNTIME_DIR/kiro-log/kiro-chat.log

環境変数でログの詳細度を制御できます:

$ KIRO_LOG_LEVEL=debug kiro-cli acp
$ KIRO_CHAT_LOG_FILE=/path/to/custom.log kiro-cli acp

まとめ

Kiro CLI v1.25.0 の ACP サポートにより、お気に入りのエディタで Kiro のエージェント機能を利用できるようになりました。JetBrains IDEs、Zed、その他の ACP 対応エディタで、統一されたエージェント体験を楽しめます。

ぜひ、お使いのエディタで Kiro CLI を試してみてください!

参考リンク

アマゾン ウェブ サービス ジャパン (有志)

Discussion