| name | qiaomu-blog-publish |
| description | 将 Markdown 文件、文本内容或 URL 发布到自己的 Qiaomu Blog,支持分类选择、状态控制、本地和远程图片自动上传 |
| trigger | /qiaomu-blog-publish |
| user_invocable | true |
qiaomu-blog-publish: 发布内容到 Qiaomu Blog
触发方式
Slash command:
/qiaomu-blog-publish path/to/file.md
/qiaomu-blog-publish https://example.com/article
/qiaomu-blog-publish 然后粘贴 Markdown 或正文
自然语言:
- “发布到博客”
- “发布成草稿”
- “发到 Qiaomu Blog”
- “把这篇文章发到自己的博客”
- “publish to blog”
- “publish draft”
配置
API Base URL: https://your-domain.com
Token 读取优先级:
- 环境变量
QIAOMU_BLOG_API_TOKEN
- 环境变量
QMBLOG_API_TOKEN(兼容旧配置)
- 配置文件
~/.claude/skills/qiaomu-blog-publish/config.json
如果没有 token,提示用户:
- 打开
https://your-domain.com/admin/settings
- 在
API Token 页面生成 token
- 保存到:
{
"apiUrl": "https://your-domain.com",
"token": "qm_xxx"
}
工作流
1. 判断输入来源
- 文件路径:读取本地 Markdown 或文本文件
- URL:抓取正文并转成 Markdown
- 纯文本:直接作为正文使用
2. 读取配置
优先读取环境变量;如果没有,再读取 config.json 中的 apiUrl 和 token。
3. 拉取分类
curl -s "https://your-domain.com/api/admin/categories" \
-H "Authorization: Bearer $TOKEN"
让用户选择分类;如果不选,可以留空,后续再在后台调整。
4. 解析内容
标题优先级:
- YAML frontmatter 的
title
- 第一条
# Heading
- 文件名
正文处理:
- 去掉 frontmatter
- 如果标题来自第一条
# Heading,则移除这条 heading,避免重复
- 其余 Markdown 原样保留
5. 上传本地媒体
需要识别这些引用:

![[image.png]]
- 音频 / 视频 / 附件本地路径
上传接口:
curl -s -X POST "https://your-domain.com/api/uploads" \
-H "Authorization: Bearer $TOKEN" \
-F "file=@/absolute/path/to/file"
拿到返回 URL 后,替换正文中的本地引用。
6. 转存第三方图片
如果 Markdown 中有第三方远程图片:
- 先下载到临时文件
- 再上传到博客
- 替换成博客自己的图片 URL
如果下载失败,保留原图 URL,并在最终结果里提示。
7. 让用户确认发布参数
确认三件事:
- 标题
- 分类
- 状态:
draft 或 published
默认用 draft。
8. 发布
curl -s -X POST "https://your-domain.com/api/posts" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"title": "The Title",
"content": "Full processed Markdown content",
"category": "selected-category-or-empty",
"status": "draft"
}'
9. 输出结果
Published successfully!
Title: xxx
Status: draft
Category: xxx
Edit: https://your-domain.com/editor?slug=2026-04-16-abc123
View: https://your-domain.com/posts/2026-04-16-abc123
Files: Uploaded N files
错误处理
- 没有 token:提示去后台生成
401:提示 token 失效或错误
- 上传失败:保留原始引用并提示失败项
- 抓取 URL 失败:提示用户直接粘贴正文
- 内容为空:终止并要求补充内容
说明
- 默认发布为草稿
- 支持图片、音频、视频、PDF、Epub 等常见文件上传
- 适合和这个仓库里的
ecosystem/chrome-clipper、ecosystem/obsidian-publisher 一起使用