Rust製MCP対応AIエージェント『Goose』の技術概要

Gooseとは何か

block.github.io

BlockのAIチームが開発していたAIエージェント「Goose」が先日公開された。

これは、Rustで書かれたコマンドラインとウェブサーバーのコアモジュール、それを呼び出すElectron製のデスクトップアプリという構成になっている。

ユーザーは対話型シェルやデスクトップアプリのチャットUIを通じて、Cline*1やOnlook*2のようにローカルファイルを編集しながらコーディングをアシストしてもらう。

12月時点ではコアがPythonで書かれていたが、ベータリリース時にRustで書き直された。どうやらユーザー環境にPythonをインストールしてもらう必要があるのを避けたかったようだ*3

github.com

Gooseのコントリビューターなんか大人数で作っている・・

Gooseの目新しい点は、VS Codeなどのエディタから独立したプログラムとして実行できるところにある。

さらに、プロンプトエンジニアリングを駆使して気合いで実装されたClineとは異なり、Goose内部のツールはMCPサーバーとしてモジュール化されて構築されている。おさらいすると、MCPサーバーというのはAIの外部ツール呼び出しを汎用化した仕組みのことだ。

ちょうど筆者が以前サンプルで書いたMCPクライアント型コーディングツール「mini-coder」*4を、OSSとしてしっかり作り直したような設計でもある。ただし、アーキテクチャ的にはLangchainとPythonシェルで動的にスクリプトやSQLを実行してヒヤリハットしていた頃に戻っているともいえる。LLMサイドのToolingやMCPのエコシステムの変化はあるとはいえ、そういった時代を少し思い出させる。

このGooseを紹介する目的は、「さらなる自動化のためにヘッドレス版Clineが欲しい」とか「Devinのようにサーバー上で動かしてタスクを丸投げしたい」といったニーズを探究する人向けの参照実装を示すことにある。いわゆるDevinのようなAIエージェントを自作したい人たちに向いた情報だ。

「爆速で個人開発したいんじゃ〜」という人は、おとなしくCursorなりClineなどを使ってほしい。

DevinのOSS相当プロジェクトとしてはOpenHandsというものもあるが、GooseはユーザーPCとMCPサーバーを連携する基盤のみを提供するという点でレイヤーが異なる。もしSlackやGitHubからGooseに話しかけたいなら、コマンドラインを経由してGooseを呼び出すプログラムを自作するのが良いだろう。

使い方

インストールとセットアップについては、公式ドキュメントに従ってほしい。

block.github.io

コマンドラインでGooseを使っている様子

コマンドラインでの利用は、 - goose session で会話を開始する。 - goose run -t $TEXT でワンショット実行を行うインターフェイスになる。

デスクトップでの利用は、Electronアプリ上にチャットが表示され、上記の会話セッションに相当する操作を行うことができる。

設定ファイルは ~/.config/goose/config.yaml に保存される。

GOOSE_MODEL: gemini-2.0-flash-exp
extensions:
  developer:
    enabled: true
    name: developer
    type: builtin
GOOSE_PROVIDER: google

ちなみに、会話セッションもこのディレクトリに JSONL 形式でまるごと保存されている。goose session -r で会話に復帰できる。

ドキュメントではLLMプロバイダとして gemini-2.0-flash-exp を設定しているが、これは推奨というよりもコストが一番安いため、何も知らずに実行した人から怒られが出ないようにするための対策だろう。

私たちが行うようなWebやアプリ開発では、依然として Claude 3.5 Sonnet の覇権が続いている。数ある新規AI開発サービスのバックエンドで利用されているし、アーリーアダプタたちの評判もいい。個人的には学習データの鮮度が昨今のモダンフロントエンドのニーズにたまたま合致している状況で、今後別のモデルのがいいじゃんという展開になってもおかしくないと思っている。

拡張機能(Extensions)

Gooseにおける「Extensions」は、LLMにおける「ツール(Tool)」に相当し、さらにMCP(Model Context Protocol)サーバーの実装でもある。ファイル編集やコマンド実行などの組み込みExtensionsは、すべて内部MCPサーバーとして実装されている。

また、ユーザーは独自のMCPサーバーをGooseに追加することも可能だ。たとえばGitHubのMCPサーバーを追加すれば、Gooseにプルリクエストを立てる能力を持たせることができる。

デフォルトでは「Google Drive上のファイルを取得する拡張」や「メモリー機能(過去の会話を保存して記憶をロードする。セッションとは別)」などが追加できるようになっている。

Gooseを拡張してツールと作る場合は、単にMCPサーバーを実装するだけでよいし、他のMCPクライアントにもそれが応用できる。MCPバンザイ。

Computer Controller

「Computer Controller」という拡張機能も追加できるオプションで、これはGoose版の「Computer Use」といえそうだ。 スクレイピングやウェブ検索、PCの自動操作などを行ってくれるらしい。

ただしスクレイピングはRustのHTTPクライアントを使用しているため、JavaScriptで動的にレイアウトが決まるようなサイトには対応が難しいだろう。またウェブ検索にはDuckDuckGoのAPIが利用されている。昨今のブラウザを自動操縦して視覚情報を取ってきてーーというエージェントと比較すると物足りない。

Goose を使ったAIエージェントコーディングやPuppeteer MCP Server によるブラウザ操作自動化」という記事ではPuppeteer MCP Serverを追加設定してこの問題に対応しているので参考になる。

PCの自動操作に関しては、AppleScripts、シェルスクリプト、Rubyスクリプトの動的書き出しを経由して実行されるようになっている。