OpenCode APIと連携するmacOSメニューバーアプリケーション
- 📸 スクリーンショットの取得と添付
- 💬 OpenCode APIとのメッセージ送受信
- 🔄 セッション管理
- 🍎 Swift 5.9+ / macOS 14+
- 🎯 メニューバーアプリとして動作
- macOS 14.0 以降
- Swift 5.9 以降
- Xcode 15.0 以降(またはSwift Toolchain)
swift build.config.jsonにAPIキーを設定します:
{
"apiKey": "your-opencode-api-key",
"apiEndpoint": "https://api.opencode.ai",
"sessionTimeout": 3600
}./.build/arm64-apple-macosx/debug/OpenCodeAppまたはデバッグビルド:
swift run- メニューバーのアイコンをクリック
- ポップアップが開きます
- 「セッション作成」ボタンをクリック
- 新しいセッションが作成され、チャットが開始されます
- テキストフィールドにメッセージを入力
- Enterキーまたは「送信」ボタンをクリック
- OpenCode APIにメッセージが送信されます
- Shift+マウスドラッグで矩形選択
- 入力ランチャーが開き、スクリーンショットが添付された状態になります
- テキストあり/なしのどちらでも送信可能です
- 結果は会話ログに追加されます
- Shiftキーを押しながらマウスをドラッグ
- 選択範囲を矩形で指定(最小50x50px)
- マウスを離すとスクリーンショットが取得され、入力ランチャーが開きます
- 必要に応じてテキストを入力して送信します(テキストなしでも送信可)
- 結果は会話ログに追加されます
- ESCキーで選択をキャンセル
重要: この機能を使用するには、以下の手順でアクセシビリティ権限を許可する必要があります:
- システム環境設定 > プライバシーとセキュリティ > アクセシビリティ
- 「OpenCodeMenuApp」または実行中のバイナリを探す
- スイッチをオンにして許可
OpenCodeのAIにMac操作を依頼すると、AppleScript MCPサーバーを使用して自動化できます。
例:
「Chromeを開いてGoogleを表示して」
「FinderでDocumentsフォルダを開いて」
「System Eventsを使ってCommand+Sを押して」
使用可能な操作:
- アプリの起動・終了
- ウィンドウの操作
- メニューバー操作
- キーボード入力
- マウス操作
- テキストの入力
権限管理:
- 許可リストで実行するアプリを管理
- ドライランモードでコードを確認
- 実行前確認で安全に実行
詳細は ~/.config/opencode/mcp-servers/applescript-mcp-server/README.md を参照してください。
Cmd+Shift+O: チャットウィンドウの表示/非表示切り替え
Cmd+Shift+I: 入力ランチャーを表示
Shift+マウスドラッグ: 矩形選択スクリーンショット(入力ランチャーを表示)
ESC: 矩形選択キャンセル
メニューバーアイコンをクリックすると以下のメニューが表示されます:
- チャットウィンドウを表示 (Cmd+O): フローティングチャットウィンドウを表示
- 入力ランチャーを表示 (Cmd+I): 簡易入力ウィンドウを表示
- 再起動: アプリケーションを再起動
- 終了 (Cmd+Q): アプリケーションを終了
独立したチャットウィンドウとして動作します:
- 340x600サイズ
- リサイズ可能
- フローティングレベルで最前面に表示
- 画面左側に配置
クイック入力用の簡易ウィンドウ:
- 560x320サイズ
- 画面中央に表示
- メッセージ送信後自動クローズ
- キャンセルまたはEscでクローズ
- スクリーンショット添付時はテキストなしでも送信可能
Sources/
├── App/
│ ├── AppDelegate.swift # アプリデリゲート
│ └── MenuBarManager.swift # メニューバー管理
├── Models/
│ ├── Config.swift # 設定モデル
│ ├── OpenCodeMessage.swift # メッセージモデル
│ └── OpenCodeSession.swift # セッションモデル
├── Services/
│ ├── ConfigManager.swift # 設定ファイル管理
│ ├── OpenCodeAPIClient.swift # APIクライアント
│ └── ScreenshotCapture.swift # スクリーンショット取得
├── ViewModels/
│ └── OpenCodeViewModel.swift # ビューモデル
├── Views/
│ └── ContentView.swift # メインビュー
└── OpenCodeApp.swift # エントリーポイント
- CGWindowListCreateImageは非推奨(将来バージョンでScreenCaptureKitに移行予定)
.config.jsonは.gitignoreに含まれているため、手動で設定が必要
- APIキーは
.config.jsonに保存されます(Gitにはコミットされません) - APIキーは機密情報のため、共有しないでください
.config.jsonは.gitignoreに含まれています
MIT License
プルリクエストを歓迎します。詳細は開発ガイドを参照してください。