ljg-push
把 ~/.agents/skills/ljg-* 里所有更新过的 skills 同步到 github repo (ljg-skills),先推 master 分支(org-mode 输出风格),再切 md 分支(markdown 输出风格)做基础 markdown 化后推。Use when user says '/ljg-push', 'push skills', '推送 skills', '同步 skills', 'sync ljg', or whenever ljg-* skills get updated and need shipping. NOT FOR pushing non-lj
By lijigang · 4,516 installs
npx skills add lijigang/ljg-skills --skill ljg-push
Source repository · Upstream listing
ljg push: 推送 ljg skills
把本地 ~/.agents/skills/ljg 里改过的 skills,一键同步到 github repo,覆盖 master 和 md 两个分支。
仓库路径(硬编码)
如果 $SKILLS REPO 不存在,脚本会自动 clone。如果它存在但不是 ljg skills 的 git repo,脚本会报错退出(不破坏现有目录)。
两条分支的差异
分支 输出格式 文件扩展 加粗 文件头
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 一致性(硬 gate)
每次 push 前,脚本强制做一件事: 把 README 跟 local skills 对一遍 。
列出 ~/.agents/skills/ljg 全部 skill 名
grep $SKILLS REPO/README.md 里出现的 ljg xxx
找出 local 有但 README 没有的—— 几乎肯定意味着 README 漏更新
命中 → push 中止,报告差异
每次 push 都是检视 README 的机会。问自己:
1. 新增 skill 了吗 ?README 的 skill 清单 / 安装命令需要加一行
2. 删了 skill 吗 ?README 对应行要删
3. 某个 skill 的描述大改了吗 ?README 的简介可能要同步
确认 README 已审、确实不需要更新时,绕过 gate:
自动转换的范围
md 分支同步时自动转换(2026 06 12 起含 org 文件本体):
Org 文件中的 +begin example / +end example 图块转为 text 围栏,保留块内文字,不将其中的星号或井号误当标题和注释。标记兼容大小写。
org 文件本体 :skill 内每个 .org 文件(assets/ 除外)转成同名 .md 并删除原件——org 头块→YAML frontmatter(含 围栏, filetags → tags )、 标题→ 标题(层级保留)、 +ATTR 行删除、 [[file:x]] →  、 +begin src → org 模板,以及首行就是 +key: 的无语言围栏模板,都会转为 bash
curl s X POST http://localhost:31337/notify \
H "Content Type: application/json" \
d '{"message": "Running Push in ljg push"}' \
/dev/null 2 &1 &
User: /ljg push
→ 检测 ~/.agents/skills/ljg 中跟 repo 有差异的 skills
→ master: rsync + bump version + commit + push
→ md: rsync + mdize + bump version + commit + push
→ 切回 master
→ 报告:哪些 skills 推了,新版本号,剩余手工差异
User: /ljg push dry run
→ 列出会被同步的 skills
→ 列出会做的 markdown 化转换
→ 不执行 rsync / commit / push
org 或无语言围栏里的 +title 、星号标题与 Org 链接必须作为一个语义单元转换;转换器会生成带 的 YAML、Markdown 标题与链接,同时保留原文件的纯 CRLF/LF 换行风格,避免无意义的全文件 diff
输出格式残留不能只扫动词短语 ——「写 Org 文件时」转掉后,同段的「所有生成的 Org 文件」仍可能留下,令 md 分支继续要求生成 Org。转换器和提交前审计都要覆盖这种保存路径句式;否则一次成功 push 会把旧格式契约重新带回远端
输出契约不只在 Markdown 文档里 —— evals/ .json 的 prompt / expected output 会直接要求技能生成某种格式,运行时代码里的 stdin .org 还会选择默认解析器。mdize 与提交前审计必须覆盖这两类消费者,同时保留显式 Org 输入兼容测试
互斥格式句不能只替换格式名 ——一句同时声明「必须使用源格式」和「禁止目标格式」时,逐词替换会让肯定项与禁止项重合。mdize 必须整句交换目标与排除项,残留审计也必须拒绝两端相同的句子
格式名变了不等于语法规则也变了 —— org mode 被替换为 markdown 后,单星号加粗、 ~code~ 与「不用反引号」仍会命令模型输出 Org。转换器必须把这组互斥规则整体改成 Markdown 规则,审计也要把旧规则视为阻断
脚本会自动 bump patch version 在 plugin.json + marketplace.json ——如果你想 bump minor / major,先手动改完再跑脚本,脚本只追加 patch
如果 md 分支的远端比本地新(继刚另一台机器推过) ,脚本会 pull rebase 失败时尝试一次 reset hard origin/md 重新应用——这会丢弃本地未推的 md 分支 commit。脚本前会提示
当前路径 :skill 源固定在 ~/.agents/skills/ ,工作 repo 固定在 ~/code/ljg skills/ ;不要从历史备份目录读取或推送