はじめに
Claude Desktopには、CoworkとCode on Desktopという2つの主要なサービスがあります。どちらもローカルファイルにアクセスでき、カスタムスキルを使って特定のワークフローをClaudeに覚えさせることができます。
今回の検証では、「1つのカスタムスキルをCoworkとCode on Desktopの両方で共有できるか」 という問いに向き合いました。特に以下の要件を前提としています:
- プログレッシブ・ディスクロージャー:ユーザーが明示的に呼び出さなくても、コンテキストに応じてClaudeが自動的にスキルを読み込む
- 動的な拡張:セッション中にスキル内容が改善・更新され、次のセッションでも反映される
- 永続性:セッションをまたいでスキルが保持される
結論から言うと、現時点ではWindows上で2つのサービス間でスキルを共有する信頼できる方法はありません。 以下にその理由を検証過程とともに詳しく説明します。
TL;DR
詳細を読む時間がない方向けに結論だけまとめます。
| サービス | カスタムスキルの利用 | 回避策 |
|---|---|---|
| Cowork | △ UIアップロードまたは manifest.json 手動編集してskillフォルダに追加 |
手動追加は非公式だが動作するのでUIでのアップロードを推奨 |
| Code on Desktop | △ ~/.claude/skills/ に配置 |
leveldb キャッシュ削除+再起動で認識される |
| 2サービス間の共有 | ✗ | 現時点では方法なし |
詳細が気になる方は、このまま読み進めてください。
検証環境
- OS:Windows(MSIX形式でインストールされたClaude Desktop)
- アプリ:Claude Desktop v2.1.138
- 対象サービス:Cowork、Code on Desktop(ローカルセッション)
- 検証日:2026年5月15日
前提知識:Claude の利用形態とスキルの仕組み
まず各サービスの動作環境を整理します。
| サービス | 実行環境 | ファイルアクセス |
|---|---|---|
| claude.ai(web) | Anthropicのクラウドコンテナ | アップロードしたファイルのみ |
| Cowork | ローカルPC(許可したフォルダ) | 許可フォルダ内のファイル |
| Code on Desktop(ローカル) | ローカルPC | 指定プロジェクトのファイル |
CoworkとCode on Desktopは同じWindows上で動作するため、理論上は同じファイルパスを参照できるはずです。これが今回の検証の出発点でした。
検証手順
Step 1:ファイルシステムの探索
Claude Desktopがデータを保存している場所を特定するため、PowerShellで調査しました。
Get-ChildItem "C:\Users\user\AppData\Local\Packages\Claude_{uuid}\LocalCache\Roaming\Claude" | Select-Object FullName
注意:Claude DesktopはMSIX形式でインストールされているため、データの実際の保存先は通常のドキュメントが示す %APPDATA%\Claude ではなく、以下のMSIX仮想化パスになります。
C:\Users\user\AppData\Local\Packages\Claude_{uuid}\LocalCache\Roaming\Claude\
このパスの中に以下のディレクトリが見つかりました:
local-agent-mode-sessions\ ← Coworkのセッションデータ claude-code-sessions\ ← Code on Desktopのセッションデータ claude-code\ ← Code on Desktopの実行ファイル claude-code-vm\ ← Code on DesktopのVMランタイム
Step 2:Coworkのスキル管理構造を解明
local-agent-mode-sessions の中を掘り下げると、スキルの実体が見えてきました。
local-agent-mode-sessions\
└── skills-plugin\
└── <account-guid>\
└── <space-guid>\
├── manifest.json ← スキルレジストリ
└── skills\
└── <skillId>\
└── SKILL.md
manifest.json の中身(抜粋):
{ "lastUpdated": XXXXXXXXXXXXX, "skills": [ { "skillId": "skill_XXXXXXXXXXXXXXXX", "name": "<skill名>", "description": "...", "creatorType": "user", "enabled": true } ] }
ここで重要な発見がありました。Coworkはスキルディレクトリをスキャンするのではなく、この manifest.json を内部レジストリとして参照しているということです。
つまり、スキルフォルダに直接ファイルを置いても、manifest.json に対応するエントリがなければCoworkはそのスキルを認識しません。これはUIからZIPでアップロードした場合のみレジストリに登録されます。
Step 3:Code on Desktopのスキルパスを確認
ドキュメントによれば、Code on Desktopのスキルは ~/.claude/skills/ に配置するとされています。
Test-Path "C:\Users\user\.claude" # → True Get-ChildItem "C:\Users\user\.claude\skills" | Select-Object FullName # → カスタム skill が手動で追加しています
~/.claude/skills/ は存在し、スキルフォルダも正しく配置されていました。しかし、Code on Desktopはこれらのスキルを一切認識しませんでした。
Step 4:2つのシステムの関係を確認
claude-code-sessions フォルダを調べると、CoworkとCode on Desktopが同じアカウント・スペースのGUIDを共有していることがわかりました:
claude-code-sessions\<同じaccount-guid>\<同じspace-guid>\local_xxxxx\ local-agent-mode-sessions\<同じaccount-guid>\<同じspace-guid>\...
GUIDは共有されていますが、スキルのストレージは完全に分離されています。
Step 5:キャッシュ削除による追加検証
Code on Desktopがスキルを認識しない原因をさらに追うため、以下の操作を試みました。
- Claude Desktopアプリを完全に終了する
- 以下のフォルダを削除する
C:\Users\user\AppData\Local\Packages\Claude_{uuid}\LocalCache\Roaming\Claude\Local Storage\leveldb
- Claude Desktopを再起動し、Code on Desktopで新規セッションを開始する
結果:
~/.claude/skills/に登録されているスキルが新規セッションで正常に認識されることを確認しました。
これにより、~/.claude/skills/ パス自体は正しく、Code on Desktopのスキルディスカバリの仕組みも機能していることがわかりました。問題の原因は leveldb に蓄積されたキャッシュであり、このキャッシュが古い状態でスキルディスカバリをブロックしていたと考えられます。
結果
現状のスキルアーキテクチャ(Windows)
| Cowork | Code on Desktop | |
|---|---|---|
| スキルレジストリ | manifest.json(MSIX仮想化パス内) |
~/.claude/skills/ |
| ディスカバリ方法 | 内部レジストリ読み込み(ディレクトリスキャンなし) | ディレクトリスキャン(leveldbキャッシュ削除後に正常動作) |
| カスタムスキル | UIアップロードまたはmanifest.json手動編集で動作 |
leveldbキャッシュ削除後に動作 |
| 共有パス | なし | なし |
確認された問題
Cowork側:
- ディレクトリをスキャンしないため、ファイルを直接配置しても認識されない
manifest.jsonを手動編集すれば追加可能だが、公式サポートされた方法ではない
Code on Desktop側:
~/.claude/skills/は正しいパスであり、スキルディスカバリの仕組み自体は機能している- ただし
Local Storage\leveldbのキャッシュが蓄積されるとスキルが認識されなくなる - 回避策:
leveldbフォルダを削除してアプリを再起動することで、新規セッションでスキルが正常に認識される - 複数のGitHub Issueで同様の問題が報告されている(#26131, #43095, #31597)
MSIXパッケージの影響:
- 公式ドキュメントが示すパス(
%APPDATA%\Claude)と実際の保存先が異なる - これにより、ドキュメントに従ってもスキルが機能しないケースが多発している
考察
なぜ共有できないのか
2つのサービスは、同じClaude Desktopアプリ上で動作しているにもかかわらず、スキル管理の設計思想が根本的に異なります。
- Cowork は「管理されたスキルカタログ」モデル。UIから登録されたスキルのみを信頼し、ファイルシステムの任意パスは参照しない
- Code on Desktop は「ファイルシステムベースのスキル発見」モデル。
~/.claude/skills/を起動時にスキャンするが、leveldbキャッシュが蓄積されるとスキルが認識されなくなる。キャッシュ削除後は正常に動作する
動的拡張への影響
プログレッシブ・ディスクロージャーと動的拡張を両立するには、「セッション中にClaudeがスキルを更新し、次のセッションで自動的に読み込む」仕組みが必要です。しかし現状では:
- Cowork:
manifest.jsonを介した管理は可能だが、動的書き戻しには非公式の操作が必要 - Code on Desktop:
leveldbキャッシュ削除後はスキルが認識されるため、動的拡張・永続化の議論が可能になった。ただしキャッシュが再蓄積されると再度認識されなくなる可能性があり、運用上の注意が必要
まとめ
| 要件 | Cowork | Code on Desktop |
|---|---|---|
| カスタムスキルの利用 | △(UIまたは手動編集) | △(leveldbキャッシュ削除が必要) |
| プログレッシブ・ディスクロージャー | ✓(登録済みスキルのみ) | ✓(キャッシュ削除後) |
| 動的拡張・永続化 | △(非公式) | △(キャッシュ再蓄積に注意) |
| 2サービス間の共有 | ✗ | ✗ |
現時点でWindows上のClaude Desktopにおいて、CoworkとCode on Desktop間でカスタムスキルを共有する公式・信頼できる方法は存在しません。 ただし各サービス単体では以下の方法でカスタムスキルを利用できます。
- Cowork:
manifest.jsonを理解した上で手動管理する - Code on Desktop:
~/.claude/skills/にスキルを配置し、スキルが認識されなくなったらLocal Storage\leveldbを削除してアプリを再起動するleveldbキャッシュ問題はAnthropicによる修正が望まれますが、回避策があることで実用上のハードルは大きく下がりました。
この状況が改善されることを期待しつつ、以下のGitHub Issueをウォッチすることをお勧めします:
- #26131 - Cowork user skills not recognized on Windows
- #43095 - Desktop Skills panel doesn't show local skills
- #31597 - Skills from ~/.claude/skills/ not shown in Customize panel
おわりに
本記事の検証はclaude.aiのチャットインターフェース上でClaudeと対話しながら行いました。PowerShellコマンドの実行結果をClaudeに共有し、ファイルシステム構造を一緒に解析するという形で進めました。Claudeがローカルファイルシステムに直接アクセスできないという制約の中でも、Claudeと協力して未知の構造を解明できることを示す好例になったと感じています。
ロータッヘイ(執筆記事の一覧)
24卒入社の香港人です。
2025 Japan All AWS Certifications Engineers
リンゴちゃん(デボンレックス)にいつも癒されています。