sync-check-updateslisted
Install: claude install-skill lllloo/ai-config-sync
比對本機 skill 檔與上游來源,找出**已安裝但有更新**的 skills。
> agents 已不在同步範圍(`everything-claude-code` agent 庫已整批移除),本 skill 只檢查 skills。
## 檢查範圍
| 類別 | 本機位置 | 上游 |
|---|---|---|
| skills | `skills-lock.json` 各項 `source` | 各自上游 repo |
`claude/skills/pen-design/`、`claude/commands/*.md`、`claude/CLAUDE.md`、`claude/settings.json` 為自維護內容,**不檢查**。
## 步驟
### 1. skills 檢查(真比對 SKILL.md blob SHA)
**前提**:精確版本比對的是 `SKILL.md` 的 blob SHA。若 skill 的 `references/`、`scripts/`、`assets/` 有更動但 SKILL.md 沒改,此檢查會漏報——實務上影響不大,因為 SKILL.md 是主要入口。
**步驟**:
1. 讀 `skills-lock.json`,產出 `<name>\t<source>` 清單:
```bash
node -e "const d=JSON.parse(require('fs').readFileSync('skills-lock.json','utf8'));for(const[k,v] of Object.entries(d.skills))console.log(k+'\t'+v.source);"
```
2. 計算本機 `~/.claude/skills/<name>/SKILL.md` 的 blob SHA(若不存在標記 `NOT_INSTALLED`):
```bash
for name in <names>; do
f="$HOME/.claude/skills/$name/SKILL.md"
if [ -f "$f" ]; then
git hash-object "$f"
else
echo "NOT_INSTALLED"
fi
done
```
`git hash-object` 算出的是 git blob SHA,與 GitHub tree API 回傳的 `sha` 同源可直接比對。
3. 對每個**獨特的** source repo(同一 repo 可能被多個 skill 共用,合併呼叫避免浪費 API quota),抓一次 recursive tree:
```bash
gh api "repos/<source>/git/trees/HEAD?recursive=1" \
--jq '.tree[] | select(.type=="blob" and (.path | endswith("SKILL.md"))) | "\(.path)\t\(.sha)"'
```
**注意**:用 `HEAD` 而非 `main`,因為有些 repo 的 default branch 是 `master`。若 404,fallback 用 `main`。
4. 對每個 `<name>`,在該 repo 的 SKILL.md