
ljg-push
熱門將 `~/.agents/skills/ljg-*` 中所有更新過的 skills 同步至 GitHub repo (ljg-skills),先推送 master 分支(org-mode 輸出風格),再切換至 md 分支(markdown 輸出風格)進行基礎 markdown 化後推送。適用於使用者輸入 '/ljg-push'、'push skills'、'推送 skills'、'同步 skills'、'sync ljg',或是 ljg-* skills 有更新需要發布時。請勿用於推送非 ljg 的 skills 或任意 git repos。
將 `~/.agents/skills/ljg-*` 中所有更新過的 skills 同步至 GitHub repo (ljg-skills),先推送 master 分支(org-mode 輸出風格),再切換至 md 分支(markdown 輸出風格)進行基礎 markdown 化後推送。適用於使用者輸入 '/ljg-push'、'push skills'、'推送 skills'、'同步 skills'、'sync ljg',或是 ljg-* skills 有更新需要發布時。請勿用於推送非 ljg 的 skills 或任意 git repos。
ljg-push: 推送 ljg-* skills
將本地 ~/.agents/skills/ljg-* 修改過的 skills,一鍵同步至 GitHub repo,涵蓋 master 與 md 兩個分支。
儲存庫路徑(硬編碼)
SKILLS_REPO="$HOME/code/ljg-skills" # 本地工作 repo
SKILLS_LOCAL="$HOME/.agents/skills" # 本地 skill 來源
REPO_URL="git@github.com:lijigang/ljg-skills.git"
如果 $SKILLS_REPO 不存在,腳本會自動 clone。如果已存在但非 ljg-skills 的 git repo,腳本會報錯退出(不破壞既有目錄)。
兩條分支的差異
| 分支 | 輸出格式 | 檔案副檔名 | 粗體 | 標頭檔 (Header) |
|---|---|---|---|---|
master(預設) |
org-mode | .org |
*bold* |
#+title: 等 |
md |
markdown | .md |
**bold** |
YAML frontmatter |
~/.agents/skills/ 中的 skill 為 master 風格(來源版本)。md 分支的差異由腳本自動轉換,必要時輔以人工補齊。
腳本推送完 md 後會自動切回 master。本地 $HOME/code/ljg-skills 應始終保持在來源分支,方便下次檢視與安裝。
工作流
依 Workflows/Push.md 步驟執行 → 呼叫 Tools/Push.sh。
README 一致性(硬性關卡)
每次 push 前,腳本強制執行一件事:將 README 與本地 skills 進行比對。
- 列出
~/.agents/skills/ljg-*的全部 skill 名稱 - grep
$SKILLS_REPO/README.md中出現的ljg-xxx - 找出本地存在但 README 缺漏的——幾乎代表 README 漏未更新
- 觸發命中 → 中止 push 並回報差異
每次 push 都是檢視 README 的時機。請自問:
- 新增 skill 了嗎?README 的 skill 清單 / 安裝命令需補上一行
- 刪除 skill 了嗎?README 對應行需刪除
- 某個 skill 的描述大幅修改了嗎?README 的簡介可能需要同步更新
確認 README 已審核、確實無需更新時,可跳過此關卡:
/ljg-push --skip-readme-check
自動轉換的範圍
md 分支同步時自動轉換(2026-06-12 起包含 org 檔案本體):
- org 檔案本體:skill 內每個
.org檔案(assets/ 除外)轉為同名.md並刪除原檔——org 標頭區塊→YAML frontmatter(含---圍欄,filetags→tags)、*標題→#標題(保留階層)、刪除#+ATTR_*行、[[file:x]]→、#+begin_src→``` 圍欄。其他 .md 檔案中對被改名檔案的引用同步進行全域改寫 - 檔案副檔名引用:
__qa.org→__qa.md、__paper.org→__paper.md等(denote 命名約定) - 關鍵字:
org-mode→markdown、Org-mode→Markdown - org 式格式指令:
加粗用 *bold*(單星號)…→加粗用 **bold**(雙星號)、標題層級從 * 開始→從 # 開始、Org 文件頭→Markdown 標頭、行首#+title:等 8 個範例鍵 → YAML 鍵值行
仍不自動轉換(按需求人工處理):
- 正文中的
*bold*標記:markdown 中*x*代表斜體,盲目替換會破壞文件本身的格式 - SKILL.md 範例區塊中轉換出的 YAML 鍵值行不帶
---圍欄(已知樣式調整項,不影響語意)
Voice Notification
curl -s -X POST http://localhost:31337/notify \
-H "Content-Type: application/json" \
-d '{"message": "Running Push in ljg-push"}' \
> /dev/null 2>&1 &
輸出文字:Running **Push** in **ljg-push**...
Examples
Example 1: 一鍵推送
User: /ljg-push
→ 檢測 ~/.agents/skills/ljg-* 中與 repo 有差異的 skills
→ master: rsync + bump version + commit + push
→ md: rsync + mdize + bump version + commit + push
→ 切回 master
→ 報告:推送了哪些 skills、新版本號、剩餘的人工差異
Example 2: 檢視擬推送內容但不實際執行
User: /ljg-push --dry-run
→ 列出將被同步的 skills
→ 列出將執行的 markdown 化轉換
→ 不執行 rsync / commit / push
Gotchas
- README 偏差是最容易被忽略的——新增 skill 後直接推送,README 仍停留在舊清單。腳本目前設有硬性關卡進行攔截;被攔下時請勿盲目加上
--skip-readme-check,請先確認 README - 腳本前提為 Git 憑證已配置完成(SSH key 或 PAT)—— ljg-push 不處理驗證,驗證失敗時直接報錯
- master 必須先推送——md 分支的 markdown 化是基於 master 的 org 版本進行轉換。反向推送會破壞執行順序
- 未追蹤 (untracked) 的雜檔(如
assets/measure.js)會被 rsync 同步至 repo——若不想推送,請先在本地刪除,或加入.gitignore - org 檔案本體已自動轉換(自 2026-06-12 起)——template.org 等會被轉為 .md 並刪除原檔,每次推送時重新生成(rsync --delete 覆蓋亦無妨,具備冪等性)。遺留的人工處理項僅剩正文中的
*bold*標記。新增帶有複雜構件的 org reference 檔案後,建議先以--dry-run或在沙盒中執行 mdize 檢視轉換效果 - 腳本會自動在 plugin.json + marketplace.json 中 bump patch version——若欲調整 minor / major 版本,請先手動修改後再執行腳本,腳本僅會追加 patch 版本號
- 若 md 分支的遠端版本比本地更新(例如在另一台機器推送過),腳本在
pull --rebase失敗時會嘗試執行reset --hard origin/md重新應用——這會捨棄本地未推送的 md 分支 commit。執行腳目前會跳出提示 - 當前路徑:skill 來源固定為
~/.agents/skills/,工作 repo 固定為~/code/ljg-skills/;請勿從歷史備份目錄讀取或推送





