300多MB的 Skills 存了3份,我讓 Codex、Claude Code、Antigravity 共用同一個skills文件夾
整理版優先睇
用 Windows Junction 統一管理 Claude Code、Codex、Antigravity 嘅 Skills,告別重複儲存同更新煩惱
作者整理電腦時發現同一批 Skills 喺三個 AI 工具(Claude Code、Codex、Antigravity)各自存咗一份,其中 Claude Code 嘅 Skills 目錄已經超過 300MB。唔單止浪費空間,每次更新一個 Skill 都要手動喺三個位置替換,好麻煩。
為咗解決呢個問題,作者用 Windows 嘅 Junction(目錄聯接)將三個 Skills 目錄指向同一個真實文件夾,實現共享。佢詳細講解咗點樣合併目錄、處理同名衝突、保留 Codex 嘅 .system 系統 Skills,同埋建立 Junction 嘅 PowerShell 命令。
最終結論係:呢個方法可以顯著減少重複儲存,簡化更新流程,而且所有工具照常運作,唔會影響功能。
- 使用 Windows Junction 可以將多個 AI 工具嘅 Skills 目錄指向同一文件夾,節省空間同維護成本
- 合併前要先處理同名 Skill 衝突,確認保留邊個版本,再將獨有嘅 Skills 搬入共享目錄
- Codex 嘅 .system 系統 Skills 要特別處理,唔可以直接刪除,應一併遷入共享目錄
- 建立 Junction 前最好將原目錄改名備份,避免創建失敗導致資料遺失
- 驗證步驟:用 Get-Item 檢查 LinkType 同 Target,確保所有工具都指到同一個真實路徑
PowerShell Skills 合併與 Junction 建立步驟
定義路徑 -> 合併目錄(避免同名衝突)-> 遷移 .system -> 改名舊目錄 -> 建立 Junction -> 驗證。具體命令見文章。
內容結構
C:\Users\你的用戶名\.agents\skills 真實文件
C:\Users\你的用戶名\.claude\skills 指向真實文件
C:\Users\你的用戶名\.codex\skills 指向真實文件
C:\Users\你的用戶名\.gemini\config\skills 指向真實文件
發現問題:Skills 重複儲存,更新要跑三個地方
作者整理電腦時發現,同一批 Skills 竟然喺 Claude Code、Codex 同 Antigravity 各存咗一份,單係 Claude Code 嘅 Skills 目錄就已經超過 300MB。
唔單止佔空間,每次更新一個 Skill 都要手動喺三個位置替換
咁樣好唔方便,所以佢諗到將三個目錄指向同一份真實文件,用 Windows 嘅 Junction 嚟實現。
解決方案:用 Junction 建立共享文件夾
Junction 類似文件夾嘅別名,建立之後幾乎唔額外佔用空間,幾個路徑訪問嘅係同一批文件。
真實文件放喺 C:\Users\你的用戶名\.agents\skills
然後將 Claude Code、Codex、Antigravity 嘅 Skills 目錄用 Junction 指過去,就可以共用同一份 Skills。
實際步驟:合併目錄、保留 .system、建立 Junction
首先退出所有工具,備份現有 Skills,然後用 PowerShell 定義路徑變數,方便之後操作。
- 1 合併三個目錄:先列出同名 Skills,確認保留版本,再將獨有 Skills 搬入共享目錄。
- 2 Codex 嘅 .system 目錄特別重要,要成個移入共享目錄,如果同名就逐項合併。
- 3 將原目錄改名做 skills.backup,然後用 New-Item -ItemType Junction 建立 Junction 指向共享目錄。
- 4 用 Get-Item 檢查三個路徑嘅 LinkType 同 Target,確認全部指向同一位置。
作者特別提醒:如果目標位置已經存在同名目錄,Junction 會創建失敗,所以一定要先改名
完成之後,喺共享目錄裝一個新 Skill,三個工具都可以讀到,確認成功。
點樣驗證同日常使用?
用 Get-Item 命令檢查每個 Junction 嘅 LinkType 應該係 Junction,Target 指向共享目錄就代表設定正確。
以後只需要喺 .agents\skills 入面管理所有 Skills,Claude Code、Codex、Antigravity 都會自動讀到最新版本
作者仲提醒:如果想還原,只要刪除 Junction 並將備份嘅文件夾改名返就得,好靈活。
今日整理電腦嘅時候,發現同一批 Skills,我竟然存咗三份,
Claude Code 一份,Codex 一份,Antigravity 仲有一份。其中淨係 Claude Code 嘅 Skills 目錄就已經超過 300MB。
佔空間仲係小事,更麻煩嘅係,同一個 Skill 更新咗之後,我要喺三個目錄裏面分別替換。
於是我將三套 Skills 合併到一個目錄裏面,只保留一份真實檔案,等 Claude Code、Codex 同 Antigravity 可以共同讀取
而家我嘅目錄關係係:
C:\Users\你的用戶名\.agents\skills 真實文件
C:\Users\你的用戶名\.claude\skills 指向真實文件
C:\Users\你的用戶名\.codex\skills 指向真實文件
C:\Users\你的用戶名\.gemini\config\skills 指向真實文件
用嘅係 Windows 嘅 Junction,中文通常叫「目錄聯接」。
Junction 到底係咩
可以將 Junction 理解成資料夾嘅別名。
假設真實檔案放喺:
C:\Users\你的用戶名\.agents\skills
我再建立一個 Junction,Junction 幾乎唔會額外佔用空間,幾個路徑存取嘅係同一批檔案。
C:\Users\你的用戶名\.claude\skills
以後 Claude Code 存取自己嘅 skills 資料夾時,呢個資料夾指向嘅係.agents\skills。
遷移過程
準備工作
退出 Claude Code、Codex 同 Antigravity,避免遷移時檔案正被佔用。
備份現有 Skills。首先將呢啲 skills 複製到一個臨時備份位置 .agents\skills-backup
打開 PowerShell ,
先定義幾個路徑,咁樣就唔使喺每條命令入面重複輸入用戶名:
$homePath = $env:USERPROFILE
$shared = Join-Path $homePath '.agents\skills'
$claude = Join-Path $homePath '.claude\skills'
$codex = Join-Path $homePath '.codex\skills'
$gemini = Join-Path $homePath '.gemini\config\skills'
建立共享目錄:
New-Item -ItemType Directory -Force -Path $shared
第一步:合併三個目錄裏面嘅 Skills
唔可以直接將一個目錄覆蓋到另一個目錄,因為三個目錄入面可能存在同名 skill,而且內容同版本未必一樣。
所以要事先處理一下:
先列出同名項目。
確認要保留邊個版本。
再將其他目錄入面獨有嘅 Skills 移入共享目錄。
查看兩個目錄入面同名嘅 Skills:
$sharedNames = Get-ChildItem -LiteralPath $shared -Directory |
Select-Object -ExpandProperty Name
$claudeNames = Get-ChildItem -LiteralPath $claude -Directory |
Select-Object -ExpandProperty Name
Compare-Object $sharedNames $claudeNames -IncludeEqual |
Where-Object SideIndicator -eq '==' |
Select-Object -ExpandProperty InputObject
確認同名項目之後,再遷移 Claude Code 入面冇衝突嘅 Skills:
$sharedNames = Get-ChildItem -LiteralPath $shared -Directory |
Select-Object -ExpandProperty Name
Get-ChildItem -LiteralPath $claude -Directory |
Where-Object { $_.Name -notin $sharedNames } |
ForEach-Object {
Move-Item -LiteralPath $_.FullName -Destination $shared
}
Antigravity 目錄都按同樣嘅方法處理:
$sharedNames = Get-ChildItem -LiteralPath $shared -Directory |
Select-Object -ExpandProperty Name
Get-ChildItem -LiteralPath $gemini -Directory |
Where-Object { $_.Name -notin $sharedNames } |
ForEach-Object {
Move-Item -LiteralPath $_.FullName -Destination $shared
}
第二步:唔好誤刪 Codex 嘅 .system
Codex 嘅 Skills 目錄同另外兩個有少少唔同。
我的:
C:\Users\你的用戶名\.codex\skills
下面有一個 .system 目錄,入面係 Codex 自帶嘅系統 Skills,例如:
imagegen
openai-docs
plugin-creator
skill-creator
skill-installer
呢個目錄唔可以刪除,

先將佢整體遷入共享目錄:
$codexSystem = Join-Path $codex '.system'
$sharedSystem = Join-Path $shared '.system'
if (Test-Path $codexSystem) {
Move-Item -LiteralPath $codexSystem -Destination $sharedSystem
}
如果共享目錄入面已經存在 .system,唔好強行覆蓋,先比較兩邊內容,再逐項合併。
第三步:將原目錄改成 Junction
所有 Skills 都放曬入 .agents\skills 之後,就可以將原來嘅三個目錄替換成 Junction。
呢度最穩妥嘅做法係先將舊目錄改名,
Rename-Item -LiteralPath $claude -NewName 'skills.backup'
Rename-Item -LiteralPath $codex -NewName 'skills.backup'
Rename-Item -LiteralPath $gemini -NewName 'skills.backup'
然後建立 Junction:
New-Item -ItemType Junction -Path $claude -Target $shared
New-Item -ItemType Junction -Path $codex -Target $shared
New-Item -ItemType Junction -Path $gemini -Target $shared
注意:如果目標位置已經有同名目錄,Junction 會建立失敗。一定要先確認原目錄已經改名或者移走。
第四步:檢查係咪真係指向同一個目錄
運行:
Get-Item $claude, $codex, $gemini |
Select-Object FullName, LinkType, Target
正常情況下,三行嘅 LinkType 都應該顯示:
Junction
Target 都應該指向:
C:\Users\你的用戶名\.agents\skills

喺 .agents\skills 入面安裝一個新嘅 screenshot skill:

喺 Claude Code、Codex 同 Antigravity 檢查係咪讀到呢個新裝嘅 skill。

多謝你睇到呢度,如果你覺得有用,可以按一下關注,唔好迷路~
今天整理電腦時,發現同一批 Skills,我竟然存了三份,
Claude Code 一份,Codex 一份,Antigravity 還有一份。其中僅 Claude Code 的 Skills 目錄就已經超過 300MB。
佔空間還只是小事,更麻煩的是,同一個 Skill 更新後,我得在三個目錄裏分別替換。
於是我把三套 Skills 合併到一個目錄裏,只保留一份真實文件,讓 Claude Code、Codex 和 Antigravity 能共同讀取
現在我的目錄關係是:
C:\Users\你的用戶名\.agents\skills 真實文件
C:\Users\你的用戶名\.claude\skills 指向真實文件
C:\Users\你的用戶名\.codex\skills 指向真實文件
C:\Users\你的用戶名\.gemini\config\skills 指向真實文件
用的是 Windows 的 Junction,中文通常叫“目錄聯接”。
Junction 到底是什麼
可以把 Junction 理解成文件夾的別名。
假設真實文件放在:
C:\Users\你的用戶名\.agents\skills
我再創建一個 Junction,Junction 幾乎不額外佔用空間,幾個路徑訪問的是同一批文件。
C:\Users\你的用戶名\.claude\skills
以後 Claude Code 訪問自己的 skills 文件夾時,這個文件夾指向的是.agents\skills。
遷移過程
準備工作
退出 Claude Code、Codex 和 Antigravity,避免遷移時文件正在被佔用。
備份現有 Skills。先把這些skills複製到一個臨時備份位置 .agents\skills-backup
打開 PowerShell ,
先定義幾個路徑,這樣不用在每條命令裏重複輸入用戶名:
$homePath = $env:USERPROFILE
$shared = Join-Path $homePath '.agents\skills'
$claude = Join-Path $homePath '.claude\skills'
$codex = Join-Path $homePath '.codex\skills'
$gemini = Join-Path $homePath '.gemini\config\skills'
創建共享目錄:
New-Item -ItemType Directory -Force -Path $shared
第一步:合併三個目錄裏的 Skills
不能直接把一個目錄覆蓋到另一個目錄,因為三個目錄裏可能存在同名 skill,而內容和版本並不一定相同。
所以要先做一下處理:
先列出同名項。
確認要保留哪個版本。
再把其他目錄中的獨有 Skills 移入共享目錄。
查看兩個目錄中的同名 Skills:
$sharedNames = Get-ChildItem -LiteralPath $shared -Directory |
Select-Object -ExpandProperty Name
$claudeNames = Get-ChildItem -LiteralPath $claude -Directory |
Select-Object -ExpandProperty Name
Compare-Object $sharedNames $claudeNames -IncludeEqual |
Where-Object SideIndicator -eq '==' |
Select-Object -ExpandProperty InputObject
確認同名項後,再遷移 Claude Code 中不存在衝突的 Skills:
$sharedNames = Get-ChildItem -LiteralPath $shared -Directory |
Select-Object -ExpandProperty Name
Get-ChildItem -LiteralPath $claude -Directory |
Where-Object { $_.Name -notin $sharedNames } |
ForEach-Object {
Move-Item -LiteralPath $_.FullName -Destination $shared
}
Antigravity 目錄也按同樣的方法處理:
$sharedNames = Get-ChildItem -LiteralPath $shared -Directory |
Select-Object -ExpandProperty Name
Get-ChildItem -LiteralPath $gemini -Directory |
Where-Object { $_.Name -notin $sharedNames } |
ForEach-Object {
Move-Item -LiteralPath $_.FullName -Destination $shared
}
第二步:別誤刪 Codex 的 .system
Codex 的 Skills 目錄和另外兩個有一點不同。
我的:
C:\Users\你的用戶名\.codex\skills
下面有一個 .system 目錄,裏面是 Codex 自帶的系統 Skills,例如:
imagegen
openai-docs
plugin-creator
skill-creator
skill-installer
這個目錄不能刪,

先把它整體遷入共享目錄:
$codexSystem = Join-Path $codex '.system'
$sharedSystem = Join-Path $shared '.system'
if (Test-Path $codexSystem) {
Move-Item -LiteralPath $codexSystem -Destination $sharedSystem
}
如果共享目錄裏已經存在 .system,不要強行覆蓋,先比較兩邊內容,再逐項合併。
第三步:把原目錄改成 Junction
所有 Skills 都放入 .agents\skills 後,就可以把原來的三個目錄替換成 Junction。
這裏最穩妥的做法是先把舊目錄改名,
Rename-Item -LiteralPath $claude -NewName 'skills.backup'
Rename-Item -LiteralPath $codex -NewName 'skills.backup'
Rename-Item -LiteralPath $gemini -NewName 'skills.backup'
然後創建 Junction:
New-Item -ItemType Junction -Path $claude -Target $shared
New-Item -ItemType Junction -Path $codex -Target $shared
New-Item -ItemType Junction -Path $gemini -Target $shared
注意:如果目標位置已經存在同名目錄,Junction 會創建失敗。必須先確認原目錄已經改名或移走。
第四步:檢查是否真的指向同一目錄
運行:
Get-Item $claude, $codex, $gemini |
Select-Object FullName, LinkType, Target
正常情況下,三行的 LinkType 都應該顯示:
Junction
Target 都應該指向:
C:\Users\你的用戶名\.agents\skills

在.agents\skills中安裝一個新的screenshot skill:

在Claude Code、Codex 和 Antigravity 檢查是否能讀到這個新裝的skill。

謝謝你看到這裏,如果你覺得有用,可以點一下關注,不迷路~