James 博客写作 Skill
为 Hexo 博客 James的成长之路(I:\Blog)写新文章。密钥只保存在本机 ~/.james-blog/config.json,禁止写入仓库、禁止在回复里打印 Secret。
SKILL_DIR = 本文件所在目录。脚本:python {SKILL_DIR}/scripts/james_blog.py <cmd>
每次开始
python {SKILL_DIR}/scripts/james_blog.py doctor- 若缺少配置:
python {SKILL_DIR}/scripts/james_blog.py init --from-picgo - PicGo 不存在时,向用户要 R2 的 Access Key / Secret / Endpoint / Bucket,然后:
python {SKILL_DIR}/scripts/james_blog.py init --access-key-id ... --secret-access-key ... --endpoint ... --bucket ...
不要把密钥回显到对话里。缺依赖时:pip install -r {SKILL_DIR}/scripts/requirements.txt
写作风格见 STYLE.md。
工作流
复制并勾选:
- [ ] doctor / init 通过
- [ ] 确定标题、tags、categories、文件名
- [ ] next-abbrlink
- [ ] 写正文(可含 mermaid 草稿)
- [ ] 封面:知名图 / GenerateImage / SVG
- [ ] mermaid → PNG → 上传 → 替换
- [ ] 所有图片水印后上传 R2
- [ ] 写入 I:\Blog\source\_posts\<slug>.md
1. 元数据
python {SKILL_DIR}/scripts/james_blog.py next-abbrlink
Frontmatter 必须与现有文章一致:
---
title: <中文标题>
tags:
- AI Infra
- <专题>
categories:
- AI Infra
- <专题>
cover: 'https://imgs.james-blog.top/imgs/<md5>.png'
toc: true
mathjax: true
abbrlink: <next>
date: YYYY-MM-DD HH:mm:ss
description: <通常与 title 相同>
---
- 文件名:英文 kebab-case,如
mini-sglang-1-core-concepts-tech.md。中文文件名仅在用户明确要求时使用。 - 输出路径:
I:\Blog\source\_posts\<slug>.md - 时区:Asia/Shanghai,用当天日期。
- 不要改已有文章,除非用户明确要求。
2. 封面(三选一,按优先级)
| 情况 | 做法 |
|---|---|
| 公众熟知的 Logo / 架构图 / 产品图(CUDA、PyTorch、NVIDIA、Wikipedia 词条等) | 用官方文档或 Wikimedia 的 可公开使用 图片。python {SKILL_DIR}/scripts/james_blog.py fetch URL --upload |
| 抽象主题、需要原创插画 | 调用 Cursor GenerateImage:aspect_ratio=16:9,文件名 cover.png,风格偏深色技术插画,不要在图里写长段中文 |
| 没有生图工具,或生图失败 | python {SKILL_DIR}/scripts/james_blog.py cover --title "标题" --subtitle "专题" --out cover.png --upload |
fetch / cover --upload / upload 都会打右下角水印再上传,标准输出只有 CDN URL,填进 cover:。
禁止使用来源不明、明显侵权或带内部信息的图。Wikimedia 优先于随机谷歌结果。
3. Mermaid → 图片
博客 不支持 文中 mermaid。草稿里可以先写 ```mermaid,定稿前必须转成图:
python {SKILL_DIR}/scripts/james_blog.py mermaid --file draft.md
或单张:
python {SKILL_DIR}/scripts/james_blog.py mermaid --code "graph TD; A-->B" --out diagram.png --upload
替换为 。最终 .md 里不能留下 mermaid 代码块。
4. 其它图片
本地文件:
python {SKILL_DIR}/scripts/james_blog.py upload path/to/image.png
正文用  或 。不要把图片拷进 source/。
配置与密钥
- 本地配置:
~/.james-blog/config.json(Windows:C:\Users\<user>\.james-blog\config.json) - 默认从
%APPDATA%\picgo\data.json的picBed.aws-s3+picgo-plugin-watermark导入 - 图床:Cloudflare R2,对象键
imgs/{md5}.{ext},公开域https://imgs.james-blog.top/{path} - 水印:文字
James的成长之路,字体C:\Windows\Fonts\FZSTK.TTF,右下角rb,最小50*50。大图会按宽度放大字号;深色角落自动改浅色,保证看得见 show命令只打印脱敏后的 AccessKey- 永远不要把
config.json、Access Key、Secret、Endpoint 账号 ID 提交到 git 或写进文章
改配置:编辑 ~/.james-blog/config.json,或重新 init --from-picgo。
正文要求
- 中文,技术深度对齐现有
_posts(RDMA / Mini-SGLang / Mooncake 那一档) - 公式用
$...$/$$...$$(mathjax: true) - 代码块标语言;引用论文或仓库用 blockquote
- 结构用
## 一、或## 1.,开头可有 3–8 句导读 - 不编造未核实的性能数字、集群规模、内部实现
- 写完后确认:frontmatter 完整、封面是 CDN、无 mermaid、无本地路径图片、无密钥
命令速查
python {SKILL_DIR}/scripts/james_blog.py init --from-picgo
python {SKILL_DIR}/scripts/james_blog.py doctor
python {SKILL_DIR}/scripts/james_blog.py next-abbrlink
python {SKILL_DIR}/scripts/james_blog.py upload image.png
python {SKILL_DIR}/scripts/james_blog.py cover --title "标题" --subtitle "AI Infra" --out cover.png --upload
python {SKILL_DIR}/scripts/james_blog.py mermaid --file post.md
python {SKILL_DIR}/scripts/james_blog.py fetch https://example.com/logo.png --upload