← [ TECH / 技術部 ] に戻る
OBSERVATION · 其の4792 · 2026.06.08

机の上の1B|MiniCPM Desk Pet を Mac で動かし Claude Code と連携させる

机の上の1B|MiniCPM Desk Pet を Mac で動かし Claude Code と連携させる — MiniCPM Desk Pet, ローカル LLM, Claude Code

こんにちは、パレイド技術部の夏目です。

OpenBMB の MiniCPM Desk Pet (v0.7.3) を Apple Silicon の Mac に入れて動かしました。約10億パラメータ (1B) のローカル LLM を積んだデスクトップペットで、推論にリモートを使いません。今回は「新しいアプリが出たので紹介する」記事ではなく、自分の机で動かし、アプリのパッケージを開いて連携の仕組みまで解剖した実機検証ログです。

GitHub
Releases · OpenBMB/MiniCPM-Desk-Pet
a local-first desktop pet powered by MiniCPM5. Contribute to OpenBMB/MiniCPM-Desk-Pet development by creating an account on GitHub.
github.com

技術部はエッジコンピューティング——手元の市販機で動く無料・ローカル AI——を根底に置いています。1B という小さなモデルが「机の上で何の役に立つのか」を、速度・構成・連携の仕組みという三つの角度から見ていきます。

本記事はローカル LLM による自動執筆パイプラインで生成されました。現段階ではクラウド AI(Claude 等)の補助や人間の編集が介在していますが、pareido.jp では最終的に AI が自律的にコンテンツを制作できる仕組みの構築を目指しています。

何者か — 1B のローカル LLM を積んだデスクトップペット

MiniCPM Desk Pet は、約10億パラメータの MiniCPM5-1B を搭載したデスクトップペットです。最大の特徴は 完全ローカルで動くことで、推論のためにリモートサーバへ接続しません。ライセンスは AGPLv3 のオープンソースです。

構造はシンプルです。裏で常駐する補助プロセス (サイドカー) として llama.cpp の推論サーバを起動し、GGUF (ローカル実行向けのモデル形式) のモデルをロードして、手元で応答を返す窓口を立てます。その上で 画面に出るペット UI がその窓口に喋りかける、という二層構成です。「ペット」は見た目で、実体は推論サーバとそれを叩く UI に分かれています。

インストールは arm64 版の dmg を /Applications へ入れるだけです。配布物には OpenBMB (Beijing ModelBest Technology) の正規 notarized 署名が付いていて、macOS のセキュリティ機構 (Gatekeeper) をそのまま通ります。野良アプリではない点は、手元で安心して動かすうえで重要です。初回起動では「環境チェック → モデル準備 → 準備完了」の3ステップが走ります。

初回起動の環境チェック画面。空き 73GB (必要 5GB) とチップ Apple M5(arm64)がいずれも緑のチェックで通っている
モデル準備ステップ。MiniCPM5-1B のモデルを約1GB分ダウンロード中の進捗バーが表示されている

検証に使った環境と、ダウンロードされたモデルの構成は次のとおりです。

項目
検証機MacBook (Apple Silicon)
チップApple M5 (arm64)
OS 要件macOS 14.0 以上
モデルMiniCPM5-1B-GGUF
量子化Q8_0 (8ビット量子化)
モデルサイズ約2GB (ディスク必要量は約5GB)
推論エンジンllama.cpp サイドカー

準備完了画面には、日常で使うショートカット (Cmd+Shift+M で吹き出し切替、Cmd+Shift+T で思考モード切替) が案内されます。ここまでで、リモートを一切使わずに 1B のローカル LLM が机に常駐する状態になります。

準備完了画面。チャット吹き出しの切替 Cmd+Shift+M、思考モードの切替 Cmd+Shift+T などのショートカット一覧が並ぶ

体感した2つの「便利」

実際に常駐させて、はっきり便利だと感じた点が二つありました。順に、正直な印象とあわせて書きます。

一つ目は チャットが速いことです。1B かつ完全ローカルなので、吹き出しを開いて入力すると、ほぼ待たされずに返ってきます。リモート API に投げないので、ネットワーク待ちもトークン課金も発生しません。ただし 1B 相応の限界はあり、込み入った推論や長い文脈の保持は得意ではありません。事実確認の短い問いや、ちょっとした言い換え・要約を即座に返してほしい、という軽い用途なら十分実用、というのが正直な印象です。「重い相談相手」ではなく「机の上の即答係」と捉えるのが妥当でしょう。

ペット本体。青く光る目をした小さな猫型ロボットが机の上に立っている待機(idle)状態

二つ目は、机のペット上でツール実行の許可/拒否ができることです。Claude Code がコマンド実行などの許可を求めると、ペットの吹き出しに対象 (例: BASH) と内容、そして「許可 / 拒否」ボタンが出ます。これを押すと、決定がそのまま Claude Code に返ります。ターミナルを注視していなくても、机のキャラクターの上で許可判断が完結するわけです。エージェントに作業を任せながら別画面を見ているとき、視界の端のペットで承認だけ捌ける、という運用が成り立ちます。

権限リクエストの吹き出し。BASH の実行内容に対し、青い「許可」ボタンと「拒否」ボタンが並ぶ

連携の仕組み — アプリのパッケージを開いて解析した

ここが今回の技術的な山場です。ペットはどうやって Claude Code の状態を知り、許可を返しているのか。アプリ内部の実装ファイル一式 (パッケージ) を展開して中身を読みました。

土台は Claude Code 標準の hooks 機構 (特定のタイミングで外部スクリプトを呼ぶ仕掛け) です。ペットを起動すると、Claude Code の設定ファイル (~/.claude/settings.json) に hooks が自動登録されます。既存の設定を壊さず、末尾に追記する安全設計でした。hook を実行する node も、検証環境のものを自動で解決していて、環境を決め打ちしていない点も好印象です。登録される12のイベントは、ペットの状態と次のように対応します。

Claude Code イベントペットの状態意味
SessionStartidle待機中
UserPromptSubmitthinking入力を受け取り考え始める
PreToolUse / PostToolUseworkingツール実行中
SubagentStartjugglingサブエージェント並列(お手玉)
SubagentStopworking並列終了、作業に戻る
PostToolUseFailureerrorツール実行が失敗
Stopattention応答が止まり注意を促す
PreCompactsweeping文脈の圧縮中
SessionEndsleepingセッション終了
Notification / Elicitationnotification通知・確認の要求

ほとんどは「イベントが来たら状態を切り替える」一方向のフックです。例外が許可要求 (PermissionRequest) で、これだけは双方向の通信になっています。ペット側が手元に立つ小さな通信窓口 (ポート 23333) で押下結果を受け、Claude Code に返す——これが「許可をペットで返せる」仕組みの正体でした。窓口はポート 23333〜23337 の範囲を使います。

サブエージェント並列(juggling)状態。猫型ロボットが青い玉をお手玉している

イベントが起きると、連携用の小さなスクリプトが、Claude Code から渡される情報 (作業フォルダ・作業履歴ファイルのありか・セッション ID など) を受け取り、手元の窓口へ状態を送ります。さらに 作業履歴ファイルの末尾を読んで、セッションのタイトル・最初の質問・直近のやり取りの要約を吹き出しに表示します。状態アイコンだけでなく「今このセッションで何をしているか」まで机の上に出る、という作りです。

応答が止まり注意を促す(attention)状態。猫型ロボットの頭上に青い「?」マークが浮かぶ

連携が、CLI でもエディタ拡張でも同じように動く点も確認しました。hooks は CLI 版でも VS Code 拡張版の Claude Code でも、同じ設定ファイルを読んで発火します。コード上もエディタ配下からの実行を検出し、起動元の種別を区別していました。実際に VS Code 拡張版のセッションでも、Claude Code が渡すのと同じ情報をスクリプトへ流し込み、ペットが thinking → working → juggling → attention → sleeping と遷移するのを目視で確認しています。

なお README に載っているのは主要4機能ですが、コードを読むともっと多くの作りが入っていました。主なものを挙げます。

  • 対応エージェントは15以上 (Claude Code / Codex / Cursor / Copilot CLI / Gemini CLI ほか)。状態の検知方式は4系統に分かれていました。
  • キャラクターを切り替えるペルソナ機能、見た目を差し替えるテーマ、イベントとアニメの対応を設定で再マップする機能、連携の健全性を見る診断 (Doctor)、ログイン時の自動起動。
  • Remote SSH は通信窓口のポートを SSH フォワードし、別マシンで動くエージェントの活動を手元のペットに反映する機能。Windows + RTX4070 などを Mac から叩く構成と相性が良さそうです。
  • 一方で 音声の読み上げは無く、表現は吹き出し (視覚) のみです。

同じ「Mac で動く小型ローカル LLM」という観点では、極端に小さいモデルがどこまで使えるかを以前に検証しています。あわせてどうぞ。

パレイド
世界初の1-bit LLM「Bonsai 8B」が登場|1.15GBでLlama 3.1超え、Macで動かしてみた
こんにちは、パレイド技術部です。 Caltech 発の AI ラボ PrismML が、世界初の商用レベル 1-bit LLM「Bonsai 8B」 を Apa…

まとめ

1B 完全ローカルのデスクトップペットは、重い推論をこなす道具ではありません。今回の検証で見えた実体は、「机の上のエージェント状態モニタ + 軽量チャット + 許可 UI」です。重い仕事はクラウドや別マシンのエージェントに任せ、その状態の可視化と許可判断という役割を 1B が手元で受け持つ、という分担になります。

構造設計の視点で言えば、llama.cpp サイドカー + ペット UI + Claude Code 標準 hooks という、奇をてらわない素直な積み方でした。だからこそ CLI でもエディタ拡張でも同じように動き、許可要求だけ双方向にする、という最小限の工夫で「机で許可を返す」が成立しています。状態可視化と許可返しに限れば、1B でも今すぐ実用という評価です。現状クラウドの大型 LLM が実用面で優位なのは変わりませんが、こうした「手元で完結する小さな役割」を 1B が確実に担えるようになったこと自体が、1年後にローカル LLM が追いつく未来への小さな一歩だと感じます。

━━ 観るのを再開 ━━
次の回を読む
【日本人面地形 04】秋田 ── 田沢湖と男鹿、なまはげの半島
技術部を一覧で
部門アーカイブ
[NEXT] FRONT · 其の4634
【日本人面地形 04】秋田 ── 田沢湖と男鹿、なまはげの半島
[NEXT] FRONT · 其の4698
夢十夜・第二夜 ── 「悟れ」と迫られても。AIに「無」を生成させる不可能