Claude CodeやCursorに、コードを書く作業だけでなく「スマホで宅配の再配達を頼んでおいて」くらいは任せたい。そう思っても、実機のスマホを渡す段になると手が止まる。エージェントが操作を誤り、知らない相手に送金したり、大事な写真を消したりしないという保証がどこにもないからだ。
オープンソースツール「Pinky」は、この不安に対して「エージェントに気をつけさせる」のとは別の答えを出した。危険な操作を止めているのは、エージェントへの指示ではない。エージェントとスマホの間に割り込む専用のゲートウェイが操作を保留する。支払いや送金は、人が画面の「Allow」を押すまでスマホ側で実行されない(GitHub README、2026-11-08確認)。
開発したのは、フィードリーダー「RSSHub」などで知られるDIYgod氏だ(DIYgodのGitHub Sponsorsページ、2026-11-08確認)。無料のオープンソースで、ライセンスはApache-2.0、アカウント登録も要らない。
承認は実行の手前で止まる
Pinkyを使うと、エージェントはどうやってスマホを動かすのか。README冒頭のデモはこうだ。Claude Codeに「メッセージアプリに返信を入力して」と頼むと、エージェントは文字をちゃんと打ち込む。ところが送信ボタンだけは押されず、Pinkyの画面に「Allow」の確認が出たまま止まる(GitHub README、2026-11-08確認)。
ここで自分が気になったのは、この「止める」がどこで起きているかだ。てっきり、エージェントに「送信前には確認して」と指示を埋め込んでいるだけだろうと予想していた。それなら、プロンプトの読み違えや細工されたページ内の指示(プロンプトインジェクション)で簡単に破られてしまう。
予想は外れた。READMEは、ルールを強制するのはエージェントではなく、Pinky側のゲートウェイだと明記している。危険な操作はapproval_pendingという状態でエージェントに返される。ユーザーが実際に「Allow」を押すまで、スマホの画面では何も実行されない(GitHub README、2026-11-08確認)。
つまり画面をタップする実行権そのものを、Pinkyが握っている。エージェントが何を考え、何を企てていようと、タップを渡さなければ操作は現実のスマホに届かない。守っているのは「許可が出るまでタップしない」という一点だけだ。エージェントの判断内容そのものは、最初から信用していない設計になる。では、この一点を守るために、具体的にどの操作がタップを止められているのか。
既定で止まるのはお金が動く操作
では、何が承認待ちになるのか。既定で止まるのは支払い・取引・送金の3種類だけだ。それ以外の送信、注文、削除、通話、アプリのインストール、アプリ外へのリンクを開く、設定変更は、設定(Settings › Safety)で個別に承認対象へ追加できる。すべての操作を承認待ちにする「Ask before every action」モードもある。逆に一切操作させない「Read-only mode」も用意されている(GitHub README、2026-11-08確認)。
| 操作の種類 | 既定の扱い |
|---|---|
| 支払い・取引・送金 | 承認待ち(既定) |
| 送信・注文・削除・通話・インストール・外部リンク・設定変更 | 設定で承認対象に追加可能 |
| すべての操作 | 「Ask before every action」で全件承認待ちにできる |
承認そのものにも細工が仕込まれている。承認を求める直前に、画面上のボタンが申請時と同じ位置にあるかを確認する。60秒以内に人が応答しなければ、自動的に拒否扱いになる。ボタンの判定はラベル(表示文字)で行い、10言語に対応する(GitHub README、2026-11-08確認)。自分には、承認を求めた直後に画面を切り替えて別の操作を実行させる、という抜け道をふさぐための仕掛けに見える。
金額や承認対象の設計が分かったところで、次に気になるのは、そもそもエージェントに見せてはいけないアプリ自体をどう扱っているかだ。
見えないアプリと入力できない欄
銀行・ウォレット・パスワード管理アプリは、既定でエージェントから見えない。アプリの中身だけでなく、通知も隠される。タスクの都合で銀行アプリやウォレットを開く必要がある場合は、Pinkyが都度確認し、許可すればそのタスクの間だけ開ける。ただしパスワード管理アプリは、この例外許可の対象そのものに入っていない(GitHub README、2026-11-08確認)。
入力面にも制限がある。パスワード欄やワンタイムコードの入力欄には、エージェントは文字を打ち込めない。通知に表示される認証コードもマスクされ、エージェントからは読み取れない(GitHub README、2026-11-08確認)。
承認の保留とアプリの非表示は、別の層で働く2段構えの防御になっている。承認待ちは「操作の内容」を見て止め、アプリの非表示は「操作の対象」そのものを最初から見せない。片方が抜けても、もう片方が事故を防ぐ形だ。ここまでは操作を止める仕組みを見てきたが、逆に人がエージェントの作業に割り込みたいときはどうするのか。
介入と記録の仕組み
Pinkyのウィンドウには、エージェントが操作しているスマホの画面がそのまま映る。この画面をクリックすると、エージェントは一時停止し、そのまま手動操作に切り替えられる。全部を止めたいときの緊急停止は、Macなら⌥⌘、WindowsとLinuxならCtrl+Alt+.だ(GitHub README、2026-11-08確認)。Android 13以降では、エージェントは隠れた別画面(セカンドスクリーン)の中で作業する。そのため、ユーザー自身が普段使っている画面は占有されない(GitHub README、2026-11-08確認)。
作業の記録も残る。各ステップの説明文、スクリーンショット、画面録画を保存し、あとからHTMLレポートとして書き出せる(GitHub README、2026-11-08確認)。何を承認し、エージェントが実際に何をしたかを、後から見返せる形になっている。
ここまでの安全機構は、裏を返せば複雑な仕組みだ。これだけの作り込みを、公開されたばかりのツールが実機でちゃんとこなせているのかが最後に気になる。
対応機種と現在地点
Pinkyが対応する環境は、コンピュータとスマホの両方に条件がある(GitHub README、2026-11-08確認)。
| 対象 | 条件 |
|---|---|
| コンピュータ | macOS 12以降・Windows 10/11(64bit)・Linux 64bit(Ubuntu 20.04/Debian 11以降) |
| Android | バージョン10〜17 |
| iPhone/iPad(iOS 27以降) | 補助アプリの導入は不要 |
| iPhone/iPad(iOS 17.4〜26) | 補助アプリ「WebDriverAgent」をXcode経由で導入。無料のApple IDでは証明書を7日ごとに入れ直す必要がある |
自動で接続できるエージェントは8つある。Claude Code・Claude Desktop・Codex・Cursor・VS Code・Copilot CLI・Windsurf(Devin Desktop)・Gemini CLIだ。MCPに対応するエージェントなら、これ以外でも手動でつなげる(GitHub README、2026-11-08確認)。
ステータスは「pre-alpha」だ。READMEが動作を確認済みと明記しているのは、Claude CodeによるAndroid(USB接続)とiPhone(iOS 27)の組み合わせに限られる。一部の機能は未検証のままだ(GitHub README、2026-11-08確認)。
この若さは、公開ペースにも表れている。確認できた最も古いリリースは11月7日午後、直近のリリースは11月8日午後だった。この1日あまりの間に、少なくとも25件のリリースを重ねている(pinky Releases、2026-11-08確認)。内容はAndroid端末ごとの接続不良の修正、Wi-Fi経由の再接続、iPhoneの署名切れへの対応など、実機を触らなければ出てこない問題への対応が中心だった。「pre-alpha」を名乗るだけあって、公開後もかなりの速さで不具合をつぶし続けている段階だと分かる。
まとめ
Pinkyは、AIエージェントに実機のスマホを操作させる際の「暴走が怖い」という不安に、エージェントへの指示ではなく実行経路上のゲートウェイで応えるツールだ。承認が必要なのは既定で支払い・取引・送金のみで、銀行・ウォレット・パスワード管理アプリは最初から見えない。ミラー画面のクリックでいつでも手動に切り替えられ、作業はHTMLレポートとして残せる。
ただし現時点ではpre-alpha段階だ。動作確認が取れているのは、Claude CodeでのAndroid(USB)とiPhone(iOS 27)の組み合わせに限られる。無料のApple IDでiOS 17.4〜26のiPhoneをつなぐ場合は、証明書を7日ごとに入れ直す手間も発生する。自分の環境で試す前に、このあたりの対応状況は確認しておきたい。
コメント
気づきや感想をどうぞ記事への補足や、読んで考えたことをお寄せください。個人情報や、他の人を傷つける内容の投稿はお控えください。
投稿にはGoogleログインが必要です。
Googleでログイン投稿にはGoogleアカウントの表示名が公開されます。メールアドレスは取得・公開しません。
コメントを読み込んでいます…