mcpField
H
hunch

hunch

ローカル
github.com/PrithviSeran生産性225 日前に更新

hunch について

Hunchは、macOSのネイティブアプリ、ブラウザー、ファイルなどを操作するMCPサーバー兼Pythonライブラリです。バックグラウンドでフォーカスを奪わない操作を優先し、アクセシビリティで扱えないアプリには確認付きのスクリーンショット操作を用意しています。

主な機能

  1. 01Macネイティブアプリのバックグラウンド操作
  2. 02アクセシビリティによるUIの読み取りと操作
  3. 03AppleScriptとOS APIによるファイル操作
  4. 04Safari拡張機能またはCDP経由のブラウザー操作
  5. 05危険な操作やフォーカスを奪う操作の承認

活用シーン

  1. 01ログイン済みMacアプリのタスク自動化
  2. 02前面の作業を妨げないUI確認
  3. 03バックグラウンドでのブラウザーワークフロー実行
  4. 04PythonからのMac操作のスクリプト化

MCP 対応

MCPホストが起動するローカルstdio MCPサーバーとして、macOSアプリ、アクセシビリティ、ファイル、ブラウザー操作のツールを公開します。同じ操作機能はPythonライブラリからも利用できます。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"prithviseran-hunch": {
"command": "uvx",
"args": [
"hunch-sdk"
]
}
}
}
起動コマンドuvx hunch-sdk

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
pypihunch-sdk0.6.6

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

Hunch

Hunch

あらゆる LLM で Mac を操作:画面を占有せず、バックグラウンドで、MCP 経由で。

Hunch は、LLM エージェントが あなたの Mac を操作できるようにする MCP サーバーです。インストール済みのアプリ、ログイン済みのセッション、ファイルにアクセスできますが、画面を占有することはありません。手前で作業を続けている間に、エージェントはバックグラウンドアプリの UI を読み取り、ボタンをクリックしたり、AppleScript で Mail や Music を操作したり、ウェブフォームに入力したり、ファイルを移動したりできます。ブラウザーだけでなく、実際のネイティブアプリでも動作します。

最新の LLM で最もよく動作します。 Hunch には、MCP サーバーの指示として詳細なプレイブックが付属しています。ツールを使いこなせるモデル(Claude Sonnet/Opus クラス以上)であれば、適切に従います。小型のモデルでは、ツリーの読み取りやクリックではなく、スクリーンショットやキー入力といった、より回りくどい方法を選ぶ場合があります。

4 つのレイヤー

Hunch は常に、最も直接的なレイヤーを優先します。処理が速く、信頼性が高いうえ、最後のレイヤーを除き、画面に触れることもありません。

レイヤーツール用途
OS-APItrash file_op open_file clipboard_* launch_app …直接 API 呼び出しによるファイル、クリップボード、アプリのライフサイクルの操作
AppleScriptapplescriptMail、Messages、Notes、Calendar、Music、Finder、Safari など、スクリプト操作に対応したアプリ
Webweb_open web_snapshot web_act web_login …同梱の拡張機能を介した Safari、または CDP 経由の Chromium/Electron をバックグラウンドで操作
アクセシビリティsnapshot actあらゆるネイティブアプリの UI:ツリーの読み取り、参照によるクリック/選択/入力

アクセシビリティツリーが本当に空のアプリ向けに、条件付きで利用できる最終手段(screenshot + 座標クリック/キー入力)もあります。画面にフォーカスを奪うため、実行前に確認を求めます。

Safari でフォーカスを奪わずに視覚的な操作を行うには、web_open(..., app="Safari", new_window=True) で拡張機能専用のウィンドウを開きます。web_screenshot はそのバックグラウンドウィンドウをキャプチャし、web_act は共有のマウス、キーボード、または前面のウィンドウを動かさずに、返されたピクセル座標を使用できます。拡張機能は引き続き必要です。隔離された Safari ウィンドウを所有し、物理画面のキャプチャでは実行できないレンダラー内のアクションをディスパッチするためです。

仕組み(サーバーもクラウドも不要)

「MCP サーバー」という呼び方では、これがどれほどローカルで動作するかが伝わりません。hunch serve は通常の Python プロセスで、MCP ホスト(Claude Desktop、Cursor など)が 子プロセス として起動し、MCP の stdio トランスポートを使って 標準入力/標準出力上の JSON-RPC で通信します。HTTP エンドポイントも、Hunch が待ち受けるポートも、デーモンも、テレメトリーもありません。ホストを終了すると、Hunch も終了します。

ツールは、プロセス内で macOS API を直接呼び出します。pyobjc 経由のアクセシビリティフレームワーク、AppleScript 用の osascript、ファイル/クリップボード用の OS API、Chromium の DevTools ポートへのローカル WebSocket、署名済みのローカル Safari 拡張機能ブリッジを使用します。オプションの Safari コンパニオンは、Apple のサンドボックス内で動作する拡張機能に型付きコマンドを中継する目的に限り、認証済みのループバック接続を使用します。ブラウジングの通信は、引き続き選択したブラウザーから行われます。モデルが認識するのは、ツールがホスト経由で返す情報だけです。それ以外の情報がマシンの外に送信されることはありません。

ベンチマーク

Hunch は、実際にログインした Mac 上で、ほかの macOS コンピューター操作エージェントと比較して評価されています。評価には mac-agent-bench を使用しています。同じ頭脳、異なる手: タスクごとに同一の claude -p を使用し、異なるのは MCP アダプターのみです。プログラムによるチェッカーでタスクの成功を評価するとともに、エージェントが作業中にカーソルやフォアグラウンドをどれだけ奪うかという妨害度も評価します。

複雑な複数ステップのタスク 5 件(n=3)での結果:

ツール成功率コスト妨害度(フォーカス·カーソル)タイムアウト
Hunch15/15$1.521·00
Peekaboo13/15$14.6022·162
cua-driver15/15$17.7022·00

高い信頼性を実現し、コストは約 10 分の 1、速度は約 5〜10 倍です。また、画面にほとんど干渉しません(15 回の試行でカーソル移動は 0 回、フォーカス切り替えは 1 回)。詳しい評価方法とタスクごとの表は、 ベンチマークのリポジトリをご覧ください。

インストール

macOS 13 以降が必要です。PyPI からインストールする場合(配布名は hunch-sdk、インポート名と CLI は hunch です):

pipx install hunch-sdk          # or: pip install hunch-sdk
pip install 'hunch-sdk[subscription]'    # + the agent loop on Claude   (provider="claude")
pip install --pre 'hunch-sdk[codex]'     # + the agent loop on OpenAI Codex (provider="codex")

または Homebrew 経由でインストールできます。Python 環境を管理していない場合におすすめです。安定したパスに分離された Python が含まれるため、macOS の権限付与がより予測しやすくなります。

brew install prithviseran/hunch/hunch

続いて、一度だけ次を実行します。

hunch setup      # walk the macOS permission grants
hunch doctor     # verify every layer; fix anything it flags
hunch connect claude-desktop   # or: claude-code, cursor

MCP ホストを再起動し、「hunch を使って…」と依頼してください。

権限について、正直に説明します

macOS の信頼設定は、サーバーを実行するアプリ、つまり「hunch」自体ではなく、MCP ホスト(Claude Desktop、Cursor、ターミナル)に適用されます。hunch setup が設定を案内します。

  • アクセシビリティ(必須):Hunch がアプリの UI を読み取り、フォーカスを移動せずにクリックできるようにします。システム設定 → プライバシーとセキュリティ → アクセシビリティで、MCP ホストアプリに許可を付与してください。
  • オートメーション(アプリごと、自動):Hunch がアプリを初めて操作するとき、macOS に「制御を許可」するための確認画面が一度だけ表示されます。
  • 画面収録(任意):スクリーンショット/ビジョンのフォールバックにのみ使用します。

許可済みの項目は hunch doctor で確認できます。注:アクセシビリティの行に表示されるのは、実行元のターミナルに付与された権限です。サーバーはホストに付与された権限を引き継ぎます。

Python SDK(ライブラリとして使用)

Hunch はインポート可能なライブラリでもあります。MCP ツールと同じフォーカス不要のプリミティブを、LLM を必要とせず、独自の Python(cron ジョブ、テストハーネス、独自のエージェントループなど)から決定論的に実行できます。配布名は hunch-sdk、インポート名は hunch です:

from hunch import Hunch

mac = Hunch()                              # your machine, your logged-in apps
print(mac.snapshot("Mail"))                # accessibility tree, focus-free
mac.act([{"action": "click", "ref": "e12"}])
mac.web.open(url="https://github.com")     # real persistent Chrome profile over CDP
mac.web.open(url="https://github.com", app="Safari")  # user's Safari session via extension
print(mac.web.snapshot())
mac.files.trash(["~/Downloads/old.zip"])   # reversible delete, no Finder
mac.applescript('tell application "Music" to play')

コンストラクターの設定項目:app(初期スナップショットの対象)、confirm="dialog"|"off"(以下を参照)、check_permissions(事前のアクセシビリティチェック)、simultaneous(フォアグラウンド/カーソル/キーボードには一切触れません)、cdp_port。

Chromium/Electron CDP セッションでホバーメニューやツールチップを表示するには、最新の web_snapshot にある ref を使います:

mac.web.act([{"action": "hover", "ref": "e12"}], detailed=True)
print(mac.web.snapshot())  # verify the revealed UI and get fresh refs before clicking

MCP で同等の操作を行うには、同じアクションを指定して web_act を使います。ホバーはクリック、アプリのアクティブ化、Mac カーソルの移動を行わず、レンダラー内でマウス移動イベントを送信します。要求されたフィールドが明示的な事後条件で検証されない限り、結果は performed_unverified です。Safari は未対応です(詳細な呼び出しでは、アクションは一切試行されず blocked が返されます)。ネイティブの act ではホバーは提供されません。

  • 権限:ライブラリとして使用する場合、アクセシビリティ権限が必要なのはスクリプトを実行するもの(ターミナルまたは IDE)です。MCP サーバーの場合は、ホストアプリに付与された権限を使います。コンストラクターは権限を確認し、手順を示す AccessibilityNotGranted を送出します。screenshot() にはさらに画面収録の権限が必要です。
  • 安全ゲートはデフォルトで ON:MCP サーバーと同じワンクリックの「続行」ダイアログと ~/.hunch/config.json のゲートが適用されます。Hunch(confirm="off") はそのインスタンスに限り自動承認します。無人スクリプトで使用する場合は、auto_approve_all と同じ注意事項があります。
  • エラー:メソッドはステータス文字列を返します(REFUSED を確認してください)。SDK が送出する例外は ApprovalDenied(ユーザーがダイアログで拒否)、AccessibilityNotGranted、WebNotOpen(.web.open() より前に .web を使用)、StaleRef(再スナップショットが必要)、CDP ブラウザーを開けない場合の HunchError のみです(古いインスタンスは web.restart() で復旧します)。
  • 認証情報:mac.web.fill_login(service) / fill_secret(service, ref) は Keychain の値をページに直接入力し、その値を返しません。ドメインとの紐付けが適用されます。
  • 共存:SDK と MCP サーバーは CDP ポート(9337)と永続的な Hunch ブラウザープロファイルを共有します。どちらかが先に開いた場合はそれが再利用されますが、web.restart() / web.login() はポートを使用しているプロセスを終了します。

実行可能なスクリプトは examples/ にあります。

エージェントループ(mac.agent)

インスタンス SDK は決定論的なプリミティブを提供します。エージェントループでは、LLM が主導役となります。平易な英語でタスクを渡すと、あなたのマシン上で、あなたがログイン済みのアプリを通じ、同じプリミティブを使って Mac を操作します。プロバイダー(Anthropic の Claude または OpenAI の Codex)を構築時に一度選ぶだけで、その後はプロバイダーに依存しません。これはオプションの追加機能です(ベースのインストールにモデル用 SDK を含めずに済みます):

pip install 'hunch-sdk[subscription]'                    # Claude
# or, for Codex (the SDK is beta):  pip install --pre 'hunch-sdk[codex]'
python -c 'import hunch; hunch.provider("claude").login()'   # sign-in (browser OAuth) — no API key
from hunch import Hunch

mac = Hunch(provider="claude")          # or Hunch(provider="codex")
result = mac.agent.run("reply to Sarah's latest email, but don't send it")
print(result.text)          # the model's final summary
print(result.turns, result.usage)
サインイン

認証はプロバイダーごとに明示的に指定する仕組みであり、情報をひそかに探し出すことはありません。ベンダーを一度選ぶだけで、同じプレフィックスなしのメソッドを使って操作できます。

mac = Hunch(provider="codex")       # or "claude" (the default)
mac.login()                         # codex: ChatGPT browser sign-in · claude: Claude sign-in
mac.status()                        # -> AuthStatus(provider, logged_in, method, email, plan)
mac.logout()
mac.agent.run(task)                 # runs on the configured provider

Mac インスタンスを使わずに、認証だけを単独で実行することもできます(オンボーディングスクリプトなど)。

import hunch

st = hunch.provider("codex").status()
if not st.logged_in:
    hunch.provider("codex").login()               # browser OAuth (blocks until done)
    # headless/remote box instead:
    #   h = hunch.provider("codex").device_login()
    #   print(h.verification_url, h.user_code); h.wait()
プロバイダーサインイン方法費用
claudemac.login() / hunch.provider("claude").login() — Claude Code と同じブラウザー OAuth を使用します。この Mac で Claude Code にすでにサインインしている場合は、これで完了です。Hunch がその認証を再利用します。Claude プラン(トークンごとの費用なし)
codexmac.login() / codex login — ChatGPT/Codex のブラウザーサインインを使用します。ChatGPT/Codex プラン

どちらもサブスクリプション/ログインを通じて実行されます。従量課金制の API キーは意図的に公開していません。有効なサインインがない場合、run() は login() に戻るよう案内するエラーを返します。推測で処理することはありません。

  • 動作を確認するには、on_event(kind, data) コールバックを使用します。kind は text(推論)、tool({name, input})、tool_result(プレビュー)、done(最終テキスト)、error のいずれかです。
  • 継続:後続の run() 呼び出しでも会話が続きます(モデルは Sarah のメールアドレスがどれかを引き続き把握しています)。mac.agent.reset() を呼び出すと、新しいタスクを開始します。
  • レイヤーを自由に組み合わせる:mac.agent.run(...) の前後に mac.snapshot(...) / mac.clipboard.get() を決定論的に呼び出せます。これは、クラウドサンドボックスでは実際のマシン上で行えない操作です。
  • 設定項目:run(task, model=None, max_turns=40, effort=None, on_event=None, system_suffix="") — model=None の場合、プロバイダー独自のデフォルトモデルが使われます。AgentResult には text、turns、stop_reason、usage、aborted が含まれます。
  • 安全性:ループの動作はインスタンスのゲート設定に従います。デフォルトの confirm="dialog" では、フォーカスを奪う操作やリスクのある操作の前に、実際の「続行しますか?」ダイアログが表示されます。マシンの前にいる場合は便利ですが、ゲートで保留された操作があると、ダイアログのタイムアウトまで無人実行が停止することがあります。cron ジョブでは Hunch(confirm="off") を使い、リスクを受け入れてください。ただし、取り消せない操作や外部への操作の前には、モデルが引き続き notify_user を通じてあなたに確認を求めます。ゲートで拒否された操作は REFUSED の結果として返されるため、ループはクラッシュせずに動作を調整します。
  • 費用:実行ではプロバイダーのプランの使用量上限が適用されます。トークンごとの請求はありません。max_turns で上限を設定できます。

Codex に関する注記: codex プロバイダーは、MCP(別プロセスの hunch serve)経由で Hunch のツールにアクセスする OpenAI Codex エージェントを動作させます。そのため、危険な動詞の承認には、ホストの can_use_tool コールバックではなく、Hunch 独自のクリックして承認するダイアログが使われます。

その他のモデル:インスタンス SDK のプリミティブはプロバイダーに依存しません。mac.snapshot() / mac.act() をツールとして独自の OpenAI/Gemini などのエージェントループに組み込めます。

Hunch 上でアプリを構築する

SDK は開発者を第一に考えて設計されています。一貫したセマンティクスを備え、すべてがインスタンスに所有され、明示的に有効にしない限り、暗黙のグローバル状態はありません。 上記の MCP サーバー自体も、この SDK 上に構築された最初のアプリにすぎません。「個人向け」の動作(~/.hunch/config.json のポリシー、「Hunch」ブランドのダイアログ、共有ブラウザープロファイル)は、すべてコンストラクター引数にすぎません。

from hunch import Hunch, ConsentRequest, OAuthToken

mac = Hunch(
    provider="claude",                  # which LLM vendor drives mac.agent ("claude" | "codex")
    app_id="com.acme.mailbot",          # pure namespacing — own Keychain slots, browser
                                        #   profile, and CDP port; never a behavior switch
    app_name="Acme Mailbot",            # what consent dialogs + notifications say
    confirm=my_consent_callback,        # ConsentRequest -> bool, rendered in YOUR UI
    notify=my_toast_handler,            # callback, or True for native macOS banners (default: off)
    policy={"gates": {"shell": True}},  # instance-owned safety; the user's personal
                                        #   config can never disarm your app
    auth=OAuthToken(token),             # the exact Claude subscription token YOUR app manages
    can_use_tool=my_approver,           # optional: route every tool through your Approve/Deny UI
)

これにより、次のことが可能になります。

  • 共存 — 異なる app_id を持つ 2 つのアプリには、それぞれ独立した Keychain サービス、認証情報ストア、ブラウザープロファイル、CDP ポートが割り当てられます。一方のアプリがもう一方のログイン情報を読み取ったり、ログアウトさせたり、ブラウザーセッションを終了させたりすることはできません。慣例ではなく、構造によって保証されます。
  • 独自のブランド、独自の UX — すべてのダイアログ、拒否通知、通知に app_name が表示されます。confirm= と notify= を使えば、osascript のダイアログや macOS のバナーではなく、アプリ経由で同意とアラートを処理できます。同意コールバックに問題がある場合は、常に拒否されます。
  • 分離された安全性の方針 — マシンの hunch config(および HUNCH_NO_INTERNAL_GATE)が適用されるのは個人用の MCP サーバーのみで、独自のインスタンスには適用されません。
  • 明示的な認証 — auth=hunch.OAuthToken(...) とともに provider="claude" を指定すると、そのサブスクリプショントークンのみが使用されます(repr では値がマスクされます)。そのため、アプリがエンドユーザー自身の Claude サインインを暗黙的に利用することはありません。(codex プロバイダーは mac.login()/codex login 経由で認証します。)

プログラムからの認証情報管理にも、同じ名前空間が使用されます。例:hunch.creds.set_credential(name, user, pw, namespace=your_app_id)。実行可能な手順は examples/embedded_app.py にあります。

認証情報:エージェントは認証情報を使いますが、見ることはありません

hunch creds add github --domain github.com
hunch creds list

値はmacOS Keychainに直接保存されます。エージェントはサービスの名前だけを指定して web_fill_login("github") を呼び出し、サインインします。Hunch が Keychain からシークレットを読み取り、CDP 経由でページに入力します。値がモデルのコンテキスト、ログ、プロバイダーのサーバーに渡ることはありません。

ドメインのバインド:--domain github.com を指定して追加した認証情報は、github.com(およびそのサブドメイン)にのみ入力されます。混乱したエージェントやプロンプトインジェクションを受けたエージェントが、見た目の似たページにアクセスした場合、入力は拒否されます。すべての認証情報をドメインにバインドしてください。空欄(すべてのサイトに適用)は互換性のためだけに存在します。

保存済みの認証情報がない場合、エージェントは web_login にフォールバックします。タグ付きのブラウザーウィンドウが開き、ユーザー自身がサインインできます。その後、セッションは Hunch 専用のブラウザープロファイルに保持されます。

確認ゲート

MCP ホストのツール承認が、主な権限レイヤーです。Hunch は、重大なケース向けに、コンテンツを認識する第 2 のゲートとしてワンクリックの macOS ダイアログを追加します。

ゲート発動条件
gates.focus_stealキーボードやカーソルを奪う操作(key、click_xy、参照なしのタイピング)
gates.app_to_frontアプリが前面に表示されるとき(全画面表示の途中でも、フォーカスが切り替わるとき)
gates.shelldo shell script を含む AppleScript
gates.destructive_applescript削除/送信/ゴミ箱を空にする/システム終了など

1 回の承認で、その後の処理も許可されます。request_focus、ゲート対象の act、またはアプリを前面に表示するダイアログで「続行」をクリックすると、通知された切り替えが約 15 秒間許可されます。その間は 2 回目のダイアログは表示されず、フォーカス切り替えの通知も抑制されます。切り替えは、必ず「確認される」か「通知される」かのどちらかで、両方になることも、通知なしで行われることもありません(gates.app_to_front をオフにすると、切り替えは通知に切り替わります)。

すべてデフォルトで有効です。MCP サーバーでは、hunch config show / hunch config set gates.shell off で設定を変更できます。変更は、稼働中のサーバーにも即時に適用されます。auto_approve_all はすべてを無効にし、リスクを理解していることの確認を求めます。

SDK インスタンスでは、ゲートはインスタンスごとに管理されます。Hunch() はデフォルトですべてのゲートを有効にし、設定ファイルは読み込みません。自身のスクリプトで設定ファイルの内容を動的に反映するには、policy={"gates": {...}}、callable(category) -> bool、または policy="personal" を渡してください。

また、Hunch はファイルツールを通じて、エージェントが ~/.hunch/(自身のポリシーと認証情報のメタデータ)の下にあるファイルを編集できないようにします。権限の変更は、ターミナルで人間が行う必要があります。

環境変数

変数効果
HUNCH_NO_INTERNAL_GATE=1すべての内部ダイアログを抑制します(独自の承認 UX を提供するホストアプリ向け)
HUNCH_FORCE_SANDBOX=1ウェブレイヤーで、ログアウト状態の使い捨てブラウザープロファイルを使用します
HUNCH_NOTIFY_FOCUS=0「Hunch がアプリを切り替えています」という通知を停止します(ダイアログで確認されない切り替えでのみ表示されます)

ユーザーの注意を促すデスクトップ通知は、オプトイン方式です。パーソナル MCP サーバーでは、hunch config set notifications.user_attention on で有効にします。SDK アプリでは、ネイティブの macOS バナーには notify=True、独自 UI には notify(message, title) コールバックを渡します。デフォルトでは無効です。

FAQ

すべてのツリー読み取りで「(no window for …)」が返され、AppleScript が「-25211 not allowed assistive access」で失敗します。 原因の 1 つとして、Hunch をホストするアプリに アクセシビリティ の許可が付与されていないことが考えられます。 許可がないと AX API は何も返さず、アプリが開いていてもウィンドウがないように見えます。 ホストに許可を付与してください(次の質問を参照)。すでに一覧にある場合は、いったんオフにしてからオンにしてください。 アプリの更新時に、macOS が許可を通知なく無効にすることがあります。その後、ホストを再起動してください。

どのアプリに許可を付与すればよいですか? hunch serve を起動するアプリです。Claude Desktop、 Cursor、またはターミナルアプリ(Claude Code の場合)です。許可はそのアプリの識別情報に紐付き、「hunch」自体には紐付きません。 このため、hunch doctor の結果が誤解を招くこともあります。実行したターミナルの許可が報告されますが、MCP ホストの許可とは異なる場合があります。

screenshot だけ失敗し、ほかはすべて動作します。 これは 画面収録 の許可が原因です。この許可が必要なのは、スクリーンショット/ビジョンのフォールバックだけです。システム設定 → プライバシーとセキュリティ → 画面収録でホストに許可を付与するか、許可が不要な snapshot をエージェントに使わせてください。

昨日は動作していたのに、今日は動きません。 ホストアプリ(または macOS)の更新により、許可がリセットされた可能性があります。アクセシビリティ(画面収録を使う場合は画面収録も)でホストをいったんオフにしてからオンにし、ホストを再起動してください。

アプリのツリーが空、またはサイドバーしか表示されません。 対応状況は、操作、プロセス、許可、ウィンドウの状態によって異なります。snapshot はアプリを再起動しません。app_target を使って正確なプロセス/ウィンドウを調べてから、app_capabilities で範囲を限定した復旧オプションを確認してください。app_recover は、許可されたアクセシビリティまたはデバッグによる復旧を実行できます。結果の操作を確認してください。ツリーが空でも、アプリに AX がないとは限りません。

ウェブレイヤーに接続できません。 Chrome 136 以降では、デフォルトのプロファイルの CDP デバッグポートがブロックされるため、Hunch は普段使いの Chrome ではなく、独自の Chrome(~/.hunch/chrome-cdp にある別のデータディレクトリ)を操作します。そのプロファイルで Google アカウントに一度ログインしてください(hunch setup または web_login を使用)。Chrome Sync によりログイン情報が同期されるため、以降はログイン済みの状態になります。

Safari の場合、最初の hunch serve の実行時に署名済みコンパニオンがインストールされ、Safari → 設定 → 機能拡張で Hunch を有効にし、ウェブサイトへのアクセスを許可するよう一度だけ求められます。確認の回数を最小限にするには、すべてのウェブサイトへのアクセスを選択してください。それでも Hunch は、すべての操作を正確なタブ、URL、オリジン、ドキュメントの世代に紐付けます。Hunch が Apple 所有のこれらの許可を自ら付与することはできません。hunch setup と hunch doctor でも同じ手順を確認できます。

ホストに表示されるサーバーの説明が途中で切れています。 表示上の問題です。一部のホスト UI では、サーバー情報の表示でプレイブックが短縮されますが、モデルにはすべての内容が渡されます。

セキュリティ

SECURITY.md をお読みください。主な脅威モデル(プロンプトインジェクション)、各種ゲートで対応できることとできないこと、脆弱性の報告方法について説明しています。

プロジェクトの状況

Hunch は現在、個人のオープンソースプロジェクトとしてメンテナンスされています。Mac 上の実際のアプリ、ファイル、ブラウザーセッション、認証情報を操作するため、ソースを確認し、承認を有効にしたまま、最小権限の認証情報を使用してください。本ソフトウェアは、Apache License 2.0 に基づき、保証や条件を伴わない “AS IS” ベースで提供されます。

ライセンス

Apache-2.0。詳細は LICENSE を参照してください。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。