AIが自分のMacで自律的に働く「スタンド」— Sutando でClaude Code × Gemini 音声エージェントを構築する

タグ SutandoClaude CodeGemini Live API音声エージェント自律AIアシスタントmacOSマルチチャネルエージェントcolumnコラムmacGitHubオープンソースsonichisutando

AIが自分のMacで自律的に働く「スタンド」— Sutando でClaude Code × Gemini 音声エージェントを構築する

ひとことでいうと

Sutando(スタンド)は、自分のMacの上で24時間働き続けるAIアシスタントです。声で話しかければメール・カレンダー・会議参加・ファイル操作をこなし、手が空いているときは自分自身のコードを書き換えて成長し続けます。エンジンには Claude Code CLI(Anthropic社製)を、音声会話には Gemini Live API(Google社製)を採用しており、Claude Codeの月額サブスクリプション($20〜)があれば追加APIコストを最小限に抑えて動かせます。名前は漫画「ジョジョの奇妙な冒険」に登場する「スタンド(己に属する戦闘霊)」にちなんでいて、使い込むほど個性が育ち、自分の名前とアバターを自ら生み出します。

こんな人におすすめ

1. 会議や通話の手間を減らしたい開発者・フリーランスの方 「2時のミーティングに参加して」と一言伝えるだけで、カレンダーを確認してZoomやGoogle Meetに自動参加してくれます。Twilioという電話サービスと連携すれば、電話の発信・着信代行まで任せられます。コミュニケーション業務を手放したい方にぴったりです。

2. 自律エージェントの仕組みを学びたい研究者・エンジニアの方 Claude Code CLIをバックエンドに使った「ファイルブリッジ方式」のマルチチャネルエージェント設計を、実装レベルで読み解けます。自分のプロジェクトにアーキテクチャを応用したいエンジニアの参考例として優れています。

3. Macをキーボードなしで操作したい方 スクリーンの内容を説明させる・ファイルを編集する・メモを保存する・ブラウザを操作する——これらをすべて声だけで完結できます。スマートフォンからZoomで画面共有しながら話しかければ、外出中でも自分のMacを遠隔操作できます。

インストール・使い方

まずは必要なものをそろえてから、コマンド(ターミナル=文字で命令を送る画面)を順番に実行していきましょう。コマンドはすべてコピー&ペーストで入力できます。

事前に必要なもの

  • macOS 15 Sequoia 以降のMac(権限管理の画面がSequoia前提のため)
  • Claude Code(Anthropicが提供するAIコーディングツール)がインストール済みで、claude コマンドでログインが完了していること
  • Node.js 22 以降(JavaScriptの実行環境。brew install node でインストール可能)
  • fswatch(ファイルの変化を監視するツール。brew install fswatch でインストール可能)
  • Gemini APIキー(Google AI Studioで取得。無料枠あり)

Twilio(電話機能)・Telegram・Discordは任意です。最低限 GEMINI_API_KEY だけ設定すれば、音声会話とコアエージェントが動作します。

Step 1: リポジトリをダウンロードする

ターミナルを開き、以下をコピー&ペーストして実行してください。

git clone https://github.com/sonichi/sutando.git
cd sutando

git clone はソースコード(プログラムの設計図)をダウンロードするコマンドです。cd はそのフォルダの中へ移動します。

Step 2: 環境変数を設定する

cp .env.example .env
# .env を編集して GEMINI_API_KEY を設定する

.env は「環境変数(かんきょうへんすう)」と呼ばれる設定ファイルです。APIキーのような秘密情報をここにまとめて書いておくと、プログラムが自動で読み込んでくれます。テキストエディタで .env を開き、GEMINI_API_KEY= の後ろに取得したキーを貼り付けてください。

Step 3: 起動する

bash src/startup.sh

このコマンド一本で、音声エージェント・電話会話サーバー・Webクライアント・ダッシュボード・API・メニューバーアプリのすべてが起動します。自動的に http://localhost:8080 がブラウザで開きます。Macのメニューバー(画面右上のアイコン列)に S のアイコンが表示されれば起動完了です。

Step 4: セットアップを確認する(省略可)

bash src/verify-setup.sh

各サービスが正常に動いているか確認したいときに実行してください。どのサービスが起動していないかをチェックするのに役立ちます。

Step 5: 停止する

bash src/restart.sh   # 全サービスを停止する
pkill -x Sutando      # メニューバーアプリを停止する

startup.sh をCtrl+Cで止めるだけではバックグラウンドで動き続けているサービスは止まりません。完全に停止するには必ず restart.sh を使ってください。

動かしてみた

リポジトリの中身を確認したところ、skills/docs/scripts/src/ の各フォルダがきちんと揃っていました。Pythonスクリプト群(skills/publish.py など)・TypeScriptのソースコード・Swiftでできたメニューバーアプリのコードがひとつのリポジトリにまとまっています。スキル(機能)の一覧は skills/MANIFEST.md に集約されており、何ができるかをざっと確認するのに便利です。

公式READMEに掲載されているデモ動画では、24ツールコール・6タスク・7分間を音声のみで操作する様子が収録されています。YouTubeチャンネル(@sutando-ai)では実際に稼働中のワークフロー映像も公開されており、音声エージェントとしての完成度の高さを確認できます。

本ソフトはmacOS専用のため、試す前に以下を確認しておきましょう。

  • 対応OS: macOS 15 Sequoia 以降のみ
  • 必須権限: スクリーン録画・アクセシビリティ・マイク(macOSのシステム設定から手動許可が必要)
  • 必須ツール: Claude Code CLI・Node.js 22・fswatch・Gemini APIキー
  • 任意連携: Twilio(電話)・Telegram・Discord

デモについて

SutandoはmacOS 15以降のデスクトップ専用アプリケーションです。Claude Code CLI・Gemini APIキー・macOSのシステム権限(スクリーン録画・アクセシビリティ・マイク)がすべて揃って初めて動作するため、ブラウザ上だけで完結するインタラクティブデモの提供は現時点では難しい状況です。実際の動作は、公式READMEおよびYouTubeチャンネル(@sutando-ai)に掲載されている動画でご確認ください。

はじめの一歩——すぐ試せる声かけと操作のコツ

ブラウザで http://localhost:8080 を開き、Connect ボタンを押すと音声接続が始まります。まずは以下の声かけから試してみましょう。

  • 「What’s on my screen?」 — 現在の画面のスクリーンショットを撮り、内容を説明してくれます。
  • 「Take a note: アイデアメモ」 — Markdown形式(見出しや箇条書きが使えるテキスト形式)のメモを notes/ フォルダに自動保存します。
  • 「Tutorial」 — 全機能を対話形式で案内してくれます。初回はここから始めるのがおすすめです。
  • 「Join my next meeting」 — カレンダーを確認してZoom/Meetに自動参加します。

メニューバーアプリを導入後は、キーボードショートカットでも操作できます。

ショートカット操作内容
⌃C選択したテキスト・クリップボードの画像・Finderのファイルをエージェントへ送る
⌃Sアクティブなウィンドウのスクリーンショットを送る
⌃Vブラウザの音声接続をON/OFFする
⌃Mマイクのミュートを切り替える

設定でつまずいたときは: verify-setup.sh を実行して、どのサービスが動いていないかを確認するのが近道です。スクリーン録画・アクセシビリティ・マイクの3つの権限は、macOSの「システム設定 → プライバシーとセキュリティ」から手動で許可する必要があります。起動前に確認しておくと安心です。

活用アイデア

  • 会議の自動サマリー: 「今日のミーティングをまとめてSlackに貼って」と話しかけるだけで、参加した会議のメモをチャンネルに投稿させられます。議事録作成の手間を大幅に減らせます。
  • ニュース動画の自動生成: info-radar スキルと scripts/regen-wire-list.py を組み合わせると、arXiv・GitHub・Hacker Newsを毎日監視して台本を生成し、ナレーション付き動画を自動で作れます。YouTubeチャンネル(@sutando-ai)でも実際に稼働中のワークフローです。
  • 音声プログラミング補助: 「このファイルの関数名をsnake_caseに変えて」といったコード編集を声でハンズフリー化できます。Claude CodeのフルアクセスをそのままAI音声エージェントとして使えるため、ターミナルを触らずに開発作業を進められます。
  • マルチマシン分散: Mac miniにSutandoを追加セットアップすると、メインのエージェントがDiscordチャンネル経由でコマンドを送り、電話対応を24時間専用機に移行させられます。docs/memory-sync.md に記載のプライベートGitリポジトリを使ったメモリ同期機能と組み合わせると、複数台のMacで同一のアイデンティティを維持できます。
  • 声だけのMac遠隔操作: スマートフォンからZoomで画面共有しながら話しかけると、外出中でも自分のMacをリモート操作できます。カフェや移動中に「あのファイルを送って」「メールを返信して」などを音声だけでこなせます。

用語とポイント解説

Gemini Live Googleが提供する、低遅延のストリーミング音声APIです。かんたんに言うと「話しながらリアルタイムで返事をしてくれる通話回線」のようなものです。WebSocket(常時つながる通信方式)で接続し続けることで、話の途中でも素早く応答を返せます。

Claude Code CLI Anthropicが提供するコマンドライン(文字入力)型のAIコーディング支援ツールです。かんたんに言うと「ターミナルから呼び出せる、コードを書いて実行できるAI」です。SutandoではこれをコアエージェントとしてMacの上で常時起動させており、あらゆるタスクの中枢を担っています。

インラインツール 音声エージェントのプロセス(動作中のプログラム)の内部で直接実行される即時ツール群です。かんたんに言うと「外部サービスを呼ばずに、その場で即座に動く道具」です。describe_screen(画面説明)・hang_up(通話終了)・dtmf(電話のボタン操作)などが含まれており、外部との通信がないぶん応答が速くなっています。

tasks/ ブリッジ Telegram・Discord・電話・Webなどのチャネルがタスクをファイルとしてtasksフォルダに書き込み、コアエージェントがそれを読み取って実行し、結果をresultsフォルダに書き戻す仕組みです。かんたんに言うと「どの入口から来た指示でも、同じ一本のパイプで処理するファイル版メッセージキュー」です。チャネルを増やすときにコアエージェント側を変更する必要がなく、拡張がしやすい設計になっています。

proactive-loop(プロアクティブループ) cron(くろん:決まった時間に自動実行する仕組み)で5分ごとに起動するスキルです。かんたんに言うと「Sutandoが手空きの時間に自分でやることを見つけ、自分自身を改善し続けるループ」です。ヘルスチェック・タスク処理・自律ビルドを10分サイクルで回し、リポジトリの多くのコードはこのループでSutando自身が書いたとされています。

STIR/SHAKEN(スター/シェイクン) 電話番号の正規性を通信キャリア(携帯電話会社)レベルで確認する認証規格です。かんたんに言うと「なりすまし電話番号を自動で検知して信頼度を下げる業界標準の仕組み」です。Sutandoはこれを採用することで、迷惑電話や詐欺発信のリスクを軽減しています。

TCC(Transparency, Consent, and Control) macOSの権限管理フレームワーク(枠組み)です。かんたんに言うと「スクリーン録画・マイク・アクセシビリティなど、プライバシーに関わる機能へのアクセスを、ユーザーが明示的に許可しなければ使えない仕組み」です。Sutandoはこれらの権限を幅広く必要とするため、初回セットアップ時にシステム設定からまとめて許可しておく必要があります。

ファイルブリッジ方式 異なるチャネル(Telegram・Discord・電話・Web)からの入力を、ファイルの読み書きを仲介として一本のエージェントにつなぐ設計方式です。かんたんに言うと「どの入口を使っても同じ頭脳に届く、ファイルを橋渡しにしたアーキテクチャ」です。入口(チャネル)を増やすときにコアエージェント側を変更しなくてよいため、機能の追加・変更がしやすくなっています。


Sutandoは、声ひとつでMacを動かす「自分専用のAIスタンド」を手元で育てられる、ユニークなオープンソースプロジェクトです。ぜひ会議の自動参加や音声プログラミング補助、毎日のニュース自動生成などに活用してみてはいかがでしょうか。