Communityコーディング&開発github.com

soerenmartius/claude-desktop-profiles

Mac上でClaudeデスクトップアプリを複数のアカウントで同時に使用し、Dockからアカウントを切り替えられるようにするためのスキルです。

claude-desktop-profiles とは?

このスキルは、macOS上でClaudeデスクトップアプリの複数アカウント管理を実現します。公式の `/Applications/Claude.app` を一切変更せず、アカウントごとに `--user-data-dir` を指定した独立したプロファイルフォルダとDockランチャーを作成します。既存のデフォルトプロファイルやサインイン状態はそのまま維持され、元に戻す場合は作成したランチャーとフォルダを削除するだけです。Chad Timblinのガイドを基に、AppleScriptとシェルスクリプトで安全な仕組みを提供します。スキルはプリフライトチェック、メカニズム検証、ビルド、スモークテストの手順に従い、同時に複数のインスタンスが同じプロファイルを使用しないよう厳格に制御します。サインインはユーザーが行い、常に1つのインスタンスのみを起動した状態で実施します。MCPサーバー設定やスケジュールタスクの移行にも対応し、詳細なREADMEを生成します。

対応✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/soerenmartius/skills/tree/HEAD/skills/claude-desktop-profiles

Installed? Explore more コーディング&開発 skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

Claudeデスクトッププロファイル

1つの本物の /Applications/Claude.app に対して、--user-data-dir を通じてアカウントごとに1つのプロファイルフォルダ、そしてアカウントごとにガード付きのDockランチャーを作成します。既存のアプリ、そのサインイン状態、およびデフォルトプロファイルには一切触れません。元に戻すには、ランチャーと追加フォルダを削除するだけです。

Chad Timblinのガイド「各Claudeアカウントに個別のClaudeデスクトップアプリを実行する」から派生しています。macOSのみ対応。Windowsは未確認ですが、そのガイドの付録に既知の注意点が記載されています。

基本ルール

  1. /Applications/Claude.app を決して変更、移動、名前変更、複製、再署名しないでください。 フォールバックとしても行わないでください。ステップ2が失敗した場合は、停止して報告し、クローンを作成しないでください。
  2. デフォルトのプロファイル ~/Library/Application Support/Claude に決して書き込まないでください。
  3. 既に実行中のプロファイルを起動しないでください。 このアプリにはmacOS上のシングルインスタンスロックがありません。1つのフォルダを2回起動すると、そのフォルダを共有する2つのライブプロセスが発生します(2026-11-04 v4.16336.0、2026-07-11 v1.20186.1で確認)。ランチャーのフォーカスパスは、決して再起動にフォールバックしてはいけません。
  4. サインインはユーザーの作業であり、正確に1つのインスタンスを実行した状態で行います。 GoogleおよびSSOログインはブラウザを経由して往復し、claude:// リンクで戻ってきます。macOSはこのリンクを既に実行中のインスタンスに渡します。2つが開いていると、サインインを受け取ったインスタンスがそれを受信し「Google sign-in code does not answer a sign-in this app started; ignoring」とログに記録し、もう一方はログイン画面のままになります。パスワードは決して扱わないでください。
  5. 実行環境に注意してください。 このセッションがClaudeデスクトップアプリ内で実行されている場合、それを終了するとセッションが強制終了されます。そのため、終了手順はユーザーにテキストで伝えてください。~/Library が読み取れない場合は、ターミナルからこのコマンドを実行するようにユーザーに指示してください。
  6. このセッションで作成したテスト用の成果物のみを削除してください。 スクリプトのスモークテストは、実行前に存在していたフォルダには触れません。

スコープ

全作業は約10個のコマンドとREADMEです。インストール済みバージョンに関する情報は、ステップ2の使い捨てテストからのみ取得し、app.asar、エンタイトルメント、ヒューズ、Electron内部を読み取ることは決してしません。カスタムランチャーアイコンは、ユーザーが要求した場合のみ作成します。

手順

S はこのスキルのディレクトリにある scripts/claude-profiles.sh です。bash $S で使い方が表示されます。AppleScriptソースは CLAUDE_LAUNCHER_SOURCES(デフォルト: ~/Documents/claude-multi-account/launcher-sources)に格納されます。ユーザーが別の場所を選択した場合は、ステップ5のREADMEフォルダを指定してください。/Applications に書き込み不可の場合は、CLAUDE_LAUNCHER_DIR=$HOME/Applications を設定してください。verify-mechanism は /tmp/claude-profile-test-<pid> を作成および削除します。

  1. 入力。 プライマリアカウントは現在サインインしているアカウントです。このアカウントはデフォルトプロファイルを保持し、Claude (<ラベル>).app を取得します。他のアカウントはそれぞれフォルダ Claude-<ラベル> と独自の Claude (<ラベル>).app を取得します。ラベルとメールアドレスが指定されていない場合は、ユーザーに確認してください。どのアカウントがサインインしているかを確認するには、デフォルトプロファイルの config.json 内の lastKnownAccountUuid と ~/.claude.json 内の oauthAccount を比較します。それらが異なる場合は、アプリに表示されているメールアドレスをユーザーに確認してください。どのプロファイルフォルダ名も、他のフォルダ名のプレフィックスであってはなりません。build は、既存のフォルダおよび他のランチャーソースによって命名されたフォルダとの競合を拒否します。Application Support の下で Claude で始まるが Cookies ファイルを含まないフォルダ(例: Claude-3p)はプロファイルではありません。そのままにしておいてください。
  2. プリフライトとメカニズム。 bash $S preflight を実行します。ウィンドウが表示されることをユーザーに警告し、その後 bash $S verify-mechanism を実行します。FAIL の場合は停止してユーザーに伝えてください。
  3. ビルドとスモークテスト。 プライマリ: bash $S build <ラベル> default を実行します。他のアカウント: まず bash $S build <ラベル> Claude-<ラベル>、次に bash $S smoke <ラベル> Claude-<ラベル> を実行します。プライマリランチャーは決してスモークテストしないでください。そのフォーカスパスは、ユーザーが予期しないタイミングでAutomationプロンプトをトリガーします。以前の実行からのランチャーまたはREADMEが存在する場合は、READMEフォルダをバックアップし、その場で再ビルドします(build は上書きします)。このセッションで作成していないランチャーは決して削除しないでください。
  4. 移行チェック。 claude.ai側のもの(会話、プロジェクト、コネクタ)はログインに従います。デスクトップ側のものは従いません。MCPサーバーは <プロファイル>/claude_desktop_config.json にあります。エントリを選択的にコピーしてください。すべてをコピーすると、すべてのローカルサーバープロセスが2倍になります。スケジュールされたタスクは <プロファイル>/local-agent-mode-sessions/<uuid>/<uuid>/scheduled-tasks.json と <プロファイル>/claude-code-sessions/... にあり、サインインしているアカウントが実行中のインスタンス内にある間のみ実行されます。移行はターゲットインスタンスを終了した状態で行います。フィールドを正確にコピーし、notifySessionId を削除し、lastRunAt を保持し、古いコピーで enabled: false を設定して保持します。同じファイルの preferences ブロック(Cowork設定、バイパス許可ゲート、許可されたオリジン、フォルダ許可、Chrome拡張機能のペアリング)はデフォルトプロファイルに残ります。READMEに、ユーザーが再度設定する必要があるかもしれないものをリストし、Chrome拡張機能とペアリングするインスタンスは1つだけにする必要があることを記載します。~/.claude はすべてのインスタンスで共有されるため、グローバルなCLAUDE.mdはすべてのインスタンスに適用されます。
  5. README。 references/readme-template.md を、ユーザーが指定したフォルダ(デフォルト: ~/Documents/claude-multi-account)にコピーします。
  6. 引き渡し 以下のテキストを使用して行い、その後停止します。ユーザーがサインインを報告するたびに、bash $S ps を実行して何も出力されないことを確認します。出力された場合は、自分でインスタンスを終了し(kill をPIDに対して実行、SIGTERMはこのアプリのクリーンな終了方法です)、その後にのみユーザーに1つのランチャーをクリックするように指示します。実行中のすべてのウィンドウは同じように見えるため、「サインインしている方を終了する」という手順をユーザーが間違えがちです。
  7. ユーザーからの報告があった場合: bash $S ps で、すべてのインスタンスが異なるプロファイルと異なる account= UUIDで表示されることを確認します。

引き渡し用テキスト

常に1つのインスタンスだけを開いた状態で:

  1. ランチャーをアプリケーションフォルダからDockにドラッグし、通常のClaudeタイルを削除します。複数のインスタンスが実行されると、そのタイルはすべてのインスタンスに対して点灯し、macOSが選択した方にフォーカスします。
  2. すべてのClaudeウィンドウを終了します。各ウィンドウでCmd+Qを押して、すべてがなくなるまで続けてください。すべてのウィンドウは同じように見えるため、1つを残そうとしないでください。サインインは、正確に1つのインスタンスが実行されている場合にのみ完了します。
  3. Claude (<ラベル2>) をクリックし、そのアカウントでサインインし、同じ方法で終了します。他のアカウントについても、常に他に何も実行していない状態で繰り返します。
  4. Claude (<ラベル1>) をクリックします。プライマリアカウントはまだサインインしています。
  5. 以降は任意の組み合わせで開くことができます。1つのインスタンスのみを終了するには、最初にそのウィンドウをクリックし、次にCmd+Qを押します。

ランチャーが実行中のインスタンスに初めてフォーカスするとき、macOSはシステムイベントの制御を許可するかどうかを尋ねます。「許可」をクリックしてください。拒否すると自動フォーカスが無効になるだけです。実行中のタイルは1つのアイコンを共有し、Dockの再起動後に統合される場合があります。どちらも無害です。

注意点

症状対処方法
2つのインスタンスが同じDockアイコンを表示する、または1つのタイルに統合される見た目の問題です。ランチャーはプロセスでインスタンスを見つけます。タイルではありません。
Quick Entryホットキーが1つのインスタンスでのみ機能する両方のインスタンスがホットキーを登録します。一方のインスタンスの設定で変更または無効にしてください。
1つのインスタンスに「再起動して更新」と表示されるすべてのインスタンスを終了し、ランチャーから再起動します。1つのアプリバンドル、1つの更新パスです。
2番目のプロファイルでCoworkを使用する独自のVMバンドル(プロファイルあたり約10 GB)をダウンロードします。
kill $pids が「illegal pid: 1\n2」で失敗するzshは単語分割を行いません。xargs kill にパイプしてください。スクリプトは既にこれを行っています。
インスタンスがまだ実行中にテストフォルダが削除された最初にプロセスを強制終了し、終了を確認してから削除してください。スクリプトは既にこれを行っています。
GoogleまたはSSOログインでブラウザが開き、「Claudeアプリでサインインを完了」で終了し、「Claudeを開く」が機能しない。新しいインスタンスはログイン画面のまま別のインスタンスが実行中で、コールバックを受け取りました。すべてのインスタンスを終了し(ps で確認)、そのランチャーのみを開き、再度サインインしてください。すべてのインスタンスは ~/Library/Logs/Claude/main.log を共有します。[Auth] と sign-in code をgrepして、どのインスタンスがそれを受け取ったかを確認します。試行間でPIDが変更されていない場合は、ユーザーが決して終了していないことを意味します。
セットアップ中にAutomationプロンプトが表示された誰かが、そのインスタンスが既に実行中であるランチャーを開きました。「許可」をクリックしてください。問題はありません。

レッドフラグ

  • 「このアプリにはシングルインスタンスロックがあるので、フォーカス失敗時に再起動しても安全です。」 そのようなロックはありません。ステップ2のみが、このバージョンに関する唯一の情報源です。
  • 「サインインはアプリ内で行われるため、両方のインスタンスを開いたままにできます。」 サインイン中は常に1つのインスタンスにしてください。
  • 「プランB: アプリを複製して再署名する。」 禁止されています。代わりに停止して報告してください。
  • 「まず app.asar / エンタイトルメント / ヒューズを調べさせてください。」 範囲外です。
  • 「ついでにアイコンにバッジを付けます。」 要求された場合のみ。
  • 「プライマリランチャーもテストします。」 そのフォーカスパスはユーザーにプロンプトを表示します。パイプラインチェックのみ行ってください。

復元

非プライマリインスタンスを1つリセットするには: それを終了し、プロファイルフォルダを削除し、そのランチャーをクリックし、再度サインインします。すべてを元に戻すには: ランチャーと追加のプロファイルフォルダを削除します。実際のアプリとデフォルトプロファイルは一切関与しません。ランチャーをそのソースから再構築するには、osacompile -o "/Applications/Claude (<ラベル>).app" <ソース>.applescript を実行します。

関連スキル