マイクアイコン、型付き判断パイプライン、音声コマンド例を描いたJev VoiceのmacOSメニューバー音声操作カバー。

Jev Voice:モデルに任せきらず、声でMacを操作するメニューバーアプリ

Jev Voiceは、オンデバイス音声認識、型付きのJev判断、決定的なスロット抽出、Accessibility操作の検証ループを組み合わせ、音声を制限されたmacOSアクションに変換します。

要点
  • Jev VoiceはSwift製のメニューバーアプリで、音声をアプリ起動、入力、検索、スクロール、音量変更などの制限されたmacOS操作に変換します。
  • 音声は端末上で文字起こしされ、Jevは自由形式のシェルコマンドや文章ではなく、型付きの判断を返します。
  • ローカル解析、ショートカット経路、Accessibilityツリー、OCR、Chrome DevTools Protocol、必要に応じたDeepSeekフォールバックを組み合わせます。
  • 現在のv0.9.1はGitHub ReleasesまたはHomebrewからad-hoc署名済みZIPとして配布されています。App Store版は確認できませんでした。

macOSの音声アシスタントは、万能なシェルのように振る舞わない方が面白くなります。Jev Voiceは範囲を絞った設計です。ユーザーが話すと、ローカルコードが文字起こしと引数抽出を行い、Jevが型付きアクションから選び、最後の操作をmacOSが実行します。自由形式の生成テキストに実行を委ねず、アプリ起動、入力、検索、スクロール、システム操作を扱うメニューバーツールです。

プロジェクトはchris-wozniczek/jev-voice-controlで、Swiftで書かれ、MIT Licenseで公開されています。今回確認した最新リリースはJev Voice 0.9.1です。パッケージはmacOS 14以降を対象とし、SpeechAnalyzerストリーミングにはmacOS 26とSwift 6.2以降、Xcode 26が必要です。

意図的に境界を設けたメニューバーアプリ

⌥Spaceを押したまま話し、ショートカットを離して送信します。READMEには「Chromeを開いてgoogle.comへ移動」「Spotifyを終了」「hello worldと入力」「音量を30に設定」「Swift concurrencyを検索」「Chromeを最大化」「Chromeを元に戻す」といった例があります。chrome、code、cmux、settingsなどの別名にも対応します。

選択したmacOS音声で短い実行結果を読み上げることもできます。Settingsで「Ask before running commands」を有効にすれば、実行前に音声確認を挟めます。プッシュ・トゥ・トークではなく、押して開始・停止するトグルモードも用意されています。

複合コマンドも扱えます。「Devinを開いて新しいセッションを開始」のような依頼は、ローカルなアプリ起動とJevによるクリック操作に分けられます。開いたアプリはUIタスクの対象として引き継がれ、取り消しにくそうな操作の前には確認を求めます。

音声を型付きアクションへ変換する

最初の層はローカルです。コマンドパーサーが決定的な操作を認識し、句分割器が複数の動詞を分け、SlotExtractorがURL、検索語、入力文字列、パーセントなどを取り出します。Jevに値を発明させるのではなく、アクションと型付きスロットを選ばせる設計です。

各句は全文、前面アプリ、インストール済みアプリ名、別名などの状態とともにTypeSafe JevのSystem Oneエンドポイントへ送られます。返るのはアクション、対象アプリ、システム操作、URL言及、前面アプリ参照、文章作成、破壊的操作かどうかといった型付き判断です。

この区別が重要です。JevはopenAppやuiTaskを返せますが、実行側がそのまま信頼するシェルコマンドは返しません。信頼度が低い依頼や曖昧な依頼は確認に回し、実際のNSWorkspace、CGEvent、AppleScript、pmset、Accessibility呼び出しはローカル実行側が担当します。

高速経路とComputer Useの二つの道

アプリ、URL、メディア、音量、キーボードの既知の操作は、前提条件が合えば高速経路を通ります。単純な命令まで大きなプランナーへ送らず、ローカルで予測可能に処理できます。同じアプリレジストリが別名とSettingsのユーザー定義別名を支えます。

画面上のコントロールが必要な依頼では、対象アプリのAccessibilityツリーを読み、Jevが次の要素を選び、操作後にもう一度観察して結果を検証します。ツリーが疎な場合はフォーカスやスクロールをきっかけに再走査し、表示ラベルがほとんど公開されない場合はApple VisionのローカルOCRを使えます。

ChromiumやElectronには別のフォールバックがあります。Chromeのリモートデバッグを有効にすると、Chrome DevTools Protocolで表示中のWebコントロールを読み、クリックや入力に使えます。アクセス可能なコントロールがない画面や自由度の高い依頼ではDeepSeekを任意で使え、思考レベルとフォールバックのステップ数・時間は設定できます。

ループは意図的に観測可能です。観察、選択、実行、検証を繰り返します。入力時は各キーパスの前に対象アプリをアクティブにし、入力後にフォーカス中のフィールドを読み戻します。期待した文字列が見えなければ、プロセス内のUnicodeキーボード経路へフォールバックします。

安全性も製品の一部

同梱のResources/policy.jsonは、シェル、支払い、認証情報、取り消せないファイル操作に関する表現をブロックします。標準の確認対象にはdelete、remove、empty trash、publish、payが含まれ、ブラウザー経路ではsend、submit、post、tweet、replyも確認対象です。ユーザーのポリシーで置き換えることができ、Settings › Safetyで読み込まれた内容を確認できます。

未知のスクリプト操作を学習済みツールにすることもできますが、ゲートがあります。生成されたAppleScriptまたはJXAは、コンパイル、ポリシースキャナー、Jevのレビューを通過して初めて確認・実行されます。成功したツールは~/Library/Application Support/Jev Voice/tools/に保存され、個別に有効化・削除できます。

音声アプリにとって有用な境界です。自然言語は制限された操作の候補を選び、コードが前提条件、権限、操作後の状態を確認します。デスクトップ自動化を無リスクにはしませんが、確認と検証を置くべき場所を明確にします。

インストール方法

Jev VoiceのApp Storeページは確認できなかったため、通常ユーザーには公式のGitHub Releasesページを使うのが先です。現在の配布物はJeV-Voice-0.9.1.zipです。リポジトリとcaskの説明ではad-hoc署名で、Developer ID署名ではありません。初回起動時にmacOSの警告が出たり、隔離属性の削除が必要になったりします。

# 最新のReleaseページを開く:
open https://github.com/chris-wozniczek/jev-voice-control/releases/latest

# v0.9.1のZIPを直接取得:
open https://github.com/chris-wozniczek/jev-voice-control/releases/download/v0.9.1/Jev-Voice-0.9.1.zip

ZIPを展開してJev Voice.appを/Applicationsへ移し、メニューバーから起動して歯車メニューのSettingsにTypeSafe API keyを設定します。ad-hoc署名のためmacOSが開けないと表示する場合、公式caskにはxattr -dr com.apple.quarantine "/Applications/Jev Voice.app"という対処が記載されています。

Homebrewも公式の導入経路です。リポジトリのcaskは同じv0.9.1 ZIPを使い、postflightで隔離属性を外してJev Voice.appをインストールします。Homebrew 7以降では、第三者tapの利用前にbrew trust chris-wozniczek/jev-voiceが必要になる場合があります。

権限は機能ごとに分かれています。Microphoneは音声入力、Speech Recognitionは文字起こし、Accessibilityはコントロールの確認と入力、Screen RecordingはローカルOCRとスクリーンショット、AutomationはSystem EventsのAppleScript操作に使います。検出自体はすべての権限なしでも始められますが、実際のデスクトップ操作には経路ごとの許可が必要です。

Jevに送られるもの

選択したエンジンが対応していれば、音声認識は端末上で行われます。Jevの振り分けに使うapi.typesafe.aiへ送られるのは、トランスクリプトと、操作を選ぶのに必要な前面アプリ、候補となるインストール済みアプリ、設定済みの別名などの少量のコンテキストです。API keyはローカルのUserDefaultsに保存されますが、プロバイダーの利用にはアカウントや費用が発生する場合があります。

この設計でJevは判断専用です。音声入力やWeb検索では、文字列や検索語をトランスクリプトからローカルコードが抽出します。文章の返信を作る場合は任意の生成モデルが文面を作成し、デフォルトでは入力前にプレビューします。これはJevの型付きアクション振り分けとは別の経路です。

音声エンジンも進化している

macOS 26では、リリースビルドにApple SpeechAnalyzerストリーミングを組み込めるとデフォルトエンジンになります。Whisperと従来のApple音声認識もSettings › Hearingで選べます。利用可能なSpeechAnalyzerアセットとWhisperは起動時に読み込まれるため、最初のプッシュ・トゥ・トークでモデル読み込みを待つ必要がありません。

Whisperの言語コードを空欄にすれば自動判定になります。音声エネルギーゲートで発話終了を検出し、Smart end of speechは短い無音でコマンドが終わったかをJevに尋ねられますが、設定した無音タイムアウトは上限として残ります。ビルド済みバイナリの対応エンジンは--engine-infoで確認できます。

変更が必要なときだけソースからビルドする

通常はRelease ZIPから始めるのがよいでしょう。開発者は実行ターゲットをビルドし、純粋なロジックのテストを実行し、配布用ZIPを作れます。Swift Package Managerを使い、判断・解析ロジックを担うJevVoiceCoreと、メニューバーアプリを担うJevVoice実行ターゲットに分かれています。

git clone https://github.com/chris-wozniczek/jev-voice-control.git
cd jev-voice-control

make app     # build/Jev Voice.appをビルド
make test    # ユニットテストを実行
make dist    # build/Jev-Voice-<version>.zipを作成しSHA-256を表示

API keyはSettingsから入力するか、defaults write com.chriswozniczek.jevvoice typesafeAPIKey <key>で設定できます。シェルから起動する場合はTYPESAFE_API_KEY=...もREADMEに記載されています。キーは公開せず、ソースビルドでもTypeSafeアカウントやmacOS権限を省略できない点に注意してください。

任意のアプリショートカットは~/Library/Application Support/Jev Voice/app-actions.jsonに保存します。新しいセッションやタブを開くようなフレーズを高速化できますが、このファイルがなくても観察→Jev→実行→検証の汎用ループは動きます。

限界も理解しておきたい

Jev Voiceは自由形式の音声プログラマーではありません。JevはURL、検索語、ディクテーション文字列、シェルコマンドを生成せず、それらはトランスクリプトの決定的なヒューリスティックから得られます。システム操作はAppleScriptとpmsetをベースにするため、明るさのキーコードはハードウェアで異なる場合があります。アプリ起動は標準のmacOSアプリケーション場所と通常の起動中アプリを走査し、その上に別名を重ねます。

デスクトップ自動化としての実際の限界もあります。Accessibilityツリーが疎なアプリ、足りない権限、OCRが必要な画面、確認が必要な破壊的操作です。フォールバックと検証は用意されていますが、すべての第三者UIを自動操作できる保証ではありません。

ライセンス

Jev VoiceはMIT Licenseで公開されています。著作権表示とライセンス表示を残せば、コードを確認、変更し、商用プロジェクトで再利用できます。WhisperKit、TypeSafeサービス、Appleフレームワーク、操作対象となるアプリにはそれぞれのライセンスや利用条件があります。

使ってみるべき?

Macをハンズフリーで操作したい人にとって、任意のコマンドを生成するモデルよりも、型付き判断、ローカル解析、明示的な権限、検証ループを重視するJev Voiceは、設計の境界が分かりやすいオープンソース実験です。まずはv0.9.1のRelease ZIPから始め、ad-hoc署名の注意点を理解し、Accessibility自動化をキーボードやマウスの魔法の代替ではなく、監督しながら使う機能として扱うのがよいでしょう。

プロジェクト情報

ライセンス
MIT
対応環境
macOS 14以降 / SpeechAnalyzerストリーミングはmacOS 26とSwift 6.2以降が必要
実装言語
Swift、SwiftUI、AppKit、WhisperKit、Swift Package Manager
確認したバージョン
v0.9.1(GitHub Release、2026-09-22確認)

インストール

# 最新のGitHub Releaseを開く:
open https://github.com/chris-wozniczek/jev-voice-control/releases/latest

# v0.9.1のZIPを直接ダウンロード:
open https://github.com/chris-wozniczek/jev-voice-control/releases/download/v0.9.1/Jev-Voice-0.9.1.zip

ライセンスの概要

リポジトリはMIT Licenseで公開されています。再配布時には著作権表示とライセンス表示を残してください。TypeSafe、WhisperKit、Appleのフレームワーク、第三者サービスには個別の条件があります。