@topmindspace/topmind-writing-skills 0.8.46 → 0.8.47
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +27 -1
- package/README.en.md +120 -146
- package/README.md +118 -150
- package/package.json +1 -1
- package/topmind-briefs/README.en.md +1 -1
- package/topmind-briefs/README.md +1 -1
- package/topmind-briefs/SKILL.md +4 -3
- package/topmind-briefs/package.json +1 -1
- package/topmind-briefs/references/core-voice.md +3 -3
- package/topmind-briefs/references/emoji-system.md +1 -1
- package/topmind-briefs/references/information-design.md +1 -1
- package/topmind-briefs/references/platform-specs.md +17 -0
- package/topmind-briefs/references/revision-workflow.md +1 -1
- package/topmind-briefs/references/x-delivery-contract.md +1 -1
- package/topmind-briefs/references/x-post-format.md +1 -1
- package/topmind-briefs/scripts/md2wechat.py +52 -4
- package/topmind-briefs/scripts/md2x-html.py +48 -1
- package/topmind-cover/README.en.md +1 -1
- package/topmind-cover/README.md +2 -2
- package/topmind-cover/SKILL.md +2 -2
- package/topmind-cover/package.json +1 -1
- package/topmind-cover/references/core-voice.md +3 -3
- package/topmind-cover/references/cover-styles.md +14 -14
- package/topmind-cover/references/impact-language.md +2 -2
- package/topmind-cover/references/information-design.md +1 -1
- package/topmind-cover/references/md3-foundation.md +4 -1
- package/topmind-format/README.en.md +1 -1
- package/topmind-format/README.md +1 -1
- package/topmind-format/SKILL.md +2 -2
- package/topmind-format/package.json +1 -1
- package/topmind-format/references/core-voice.md +3 -3
- package/topmind-format/references/emoji-system.md +1 -1
- package/topmind-format/references/information-design.md +1 -1
- package/topmind-format/references/x-delivery-contract.md +1 -1
- package/topmind-format/references/x-post-format.md +1 -1
- package/topmind-poster/README.en.md +1 -1
- package/topmind-poster/README.md +1 -1
- package/topmind-poster/SKILL.md +3 -3
- package/topmind-poster/package.json +1 -1
- package/topmind-poster/references/information-design.md +1 -1
- package/topmind-revise/README.en.md +8 -5
- package/topmind-revise/README.md +7 -6
- package/topmind-revise/SKILL.md +5 -4
- package/topmind-revise/package.json +1 -1
- package/topmind-revise/references/core-voice.md +3 -3
- package/topmind-revise/references/information-design.md +1 -1
- package/topmind-revise/references/revision-workflow.md +1 -1
- package/topmind-revise/scripts/check_article.py +16 -4
- package/topmind-viral-posts/README.en.md +1 -1
- package/topmind-viral-posts/README.md +1 -1
- package/topmind-viral-posts/SKILL.md +9 -8
- package/topmind-viral-posts/package.json +1 -1
- package/topmind-viral-posts/references/core-voice.md +3 -3
- package/topmind-viral-posts/references/emoji-system.md +1 -1
- package/topmind-viral-posts/references/information-design.md +1 -1
- package/topmind-viral-posts/references/patterns.md +6 -6
- package/topmind-viral-posts/references/revision-workflow.md +1 -1
- package/topmind-viral-posts/references/x-delivery-contract.md +1 -1
- package/topmind-viral-posts/references/x-post-format.md +1 -1
- package/topmind-wechat-post/README.en.md +2 -2
- package/topmind-wechat-post/README.md +2 -2
- package/topmind-wechat-post/SKILL.md +7 -7
- package/topmind-wechat-post/package.json +1 -1
- package/topmind-wechat-post/references/core-voice.md +3 -3
- package/topmind-wechat-post/references/element-spec.md +2 -2
- package/topmind-wechat-post/references/information-design.md +1 -1
- package/topmind-wechat-post/references/known-pits.md +1 -1
- package/topmind-wechat-post/references/revision-workflow.md +1 -1
- package/topmind-wechat-post/references/theme-map.md +2 -2
- package/topmind-wechat-post/references/typography-rules.md +2 -2
- package/topmind-wechat-post/references/wechat-constraints.md +2 -2
- package/topmind-wechat-post/references/workspace.md +14 -2
- package/topmind-wechat-post/references/writing-quality.md +4 -4
- package/topmind-wechat-post/references/x-delivery-contract.md +1 -1
- package/topmind-wechat-post/references/x-post-format.md +1 -1
- package/topmind-wechat-post/scripts/article_scaffold.py +21 -7
- package/topmind-wechat-post/scripts/check_article.py +16 -4
- package/topmind-wechat-post/scripts/md2wechat.py +52 -4
- package/topmind-wechat-post/scripts/negative_tests.py +27 -0
- package/topmind-wechat-post/scripts/new-article.py +8 -5
- package/topmind-x-article/README.en.md +4 -2
- package/topmind-x-article/README.md +4 -2
- package/topmind-x-article/SKILL.md +3 -3
- package/topmind-x-article/package.json +1 -1
- package/topmind-x-article/references/core-voice.md +3 -3
- package/topmind-x-article/references/information-design.md +1 -1
- package/topmind-x-article/references/publish-checklist.md +1 -1
- package/topmind-x-article/references/revision-workflow.md +1 -1
- package/topmind-x-article/references/workspace.md +14 -2
- package/topmind-x-article/references/x-delivery-contract.md +1 -1
- package/topmind-x-article/references/x-post-format.md +1 -1
- package/topmind-x-article/scripts/article_scaffold.py +21 -7
- package/topmind-x-article/scripts/check_article.py +16 -4
- package/topmind-x-article/scripts/md2x-html.py +48 -1
- package/topmind-x-article/scripts/md2x.py +49 -1
- package/topmind-x-article/scripts/negative_tests.py +14 -0
- package/topmind-briefs/references/style-guide.md +0 -48
- package/topmind-briefs/references/writing-principles.md +0 -17
- package/topmind-viral-posts/references/writing-principles.md +0 -17
- package/topmind-wechat-post/references/writing-principles.md +0 -17
- package/topmind-x-article/references/writing-principles.md +0 -17
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,29 @@
|
|
|
1
|
+
## [0.8.47] - 2026-10-18
|
|
2
|
+
|
|
3
|
+
> 全面整理文档:README 和各技能文档按「原则优先」四层结构重写,剩余的「铁律」措辞改成「原则 + 怎么判断」,清理废弃文件和过时说明;新增多环境协作字段,渲染脚本去掉 HTML 注释。
|
|
4
|
+
> 根包 0.8.46 → **0.8.47**(patch);技能版本:topmind-briefs 0.2.25 → 0.2.26、topmind-cover 0.4.14 → 0.4.15、topmind-format 0.1.10 → 0.1.11、topmind-poster 0.1.7 → 0.1.8、topmind-revise 0.1.2 → 0.1.3、topmind-viral-posts 0.3.17 → 0.3.18、topmind-wechat-post 0.3.17 → 0.3.18、topmind-x-article 0.4.23 → 0.4.24。
|
|
5
|
+
|
|
6
|
+
### 优化(文档整理)
|
|
7
|
+
|
|
8
|
+
- 根 README(中 / 英)重写:结论先行,技能表带当前版本,新增「写作理念」四层表(第 0 层写作原则 → 第 1 层信息设计 → 第 2 层措辞口吻 → 第 3 层审稿)、文章文件夹结构(`骨架.md`、`参考/`)和多环境协作说明;旧版本号表更新。
|
|
9
|
+
- 深层参考里剩余的「铁律 / 红线 / 纪律」改成「原则 + 怎么判断」:cover 的 `cover-styles.md`(各风格「怎么判断」)、`md3-foundation.md`,wechat-post 的 `known-pits.md`(「怎么避免」)、`typography-rules.md`、`writing-quality.md`、`theme-map.md`,viral-posts 的 `patterns.md`,poster 的内容原则。真正的硬约束(安全区、原创、事实、不改字、平台格式检测、交付格式)保留并标「硬约束」。
|
|
10
|
+
- 「必读必守」统一改成「必读(交付格式是硬约束)」,「核心经验对照」改名「措辞原则对照」。
|
|
11
|
+
- topmind-revise:流程写明「声明 + 备份 → ⓪ 结构 → ① 事实 → …」;README 的「三层规则」换成四层表;第 ⑤ 步按 `core-voice.md` 十条原则和人设抽查。
|
|
12
|
+
- topmind-briefs:删除无引用的 `style-guide.md`(禁止清单式写法),其中的开头写法和发前自检改写成表格并入 `platform-specs.md`;写作步骤加上人设一行。
|
|
13
|
+
- topmind-revise、topmind-viral-posts 的 SKILL.md 补上 `research-mode.md` 入口(之前分发了但没有链接)。
|
|
14
|
+
- topmind-x-article README 的文件夹说明补上 `骨架.md`、`参考/` 和多环境字段。
|
|
15
|
+
- topmind-wechat-post `element-spec.md` 的 `:::` 容器一节标明「只用于旧交付包」;脚本帮助文本同步说明 `:::` 和扩展标记只为旧稿兼容。
|
|
16
|
+
- 公开仓库清理:去掉示例里的私有环境名和「用户偏好」类个人化表述,示例改用中性名称。
|
|
17
|
+
- `core-voice.md` 原则 9 的人设改成「还在学习的普通人」:不是专家,不像科普老师,可以带一点老司机式的自嘲;topmind-viral-posts 的写作要点同步。
|
|
18
|
+
- 删除 `writing-principles.md` 迁移说明文件(0.8.46 已按内容拆到各层,仓库里不再有引用),`shared/manifest.json` 同步去掉;briefs / viral-posts / wechat-post / x-article 不再带这份副本。
|
|
19
|
+
|
|
20
|
+
### 特性支持
|
|
21
|
+
|
|
22
|
+
- 渲染脚本(`md2wechat.py`、`md2x-html.py`、`md2x.py`)去掉 HTML 注释:源稿里临时写的 `<!-- 提示 -->`(可跨行)不进公众号版和 X 版;代码块和行内代码里的注释原样保留。负例测试同步。
|
|
23
|
+
- 多环境协作字段:`article_scaffold.py`(以及 wechat-post 的 `new-article.py`)新建源稿时写 `updated_at`(当前时间,ISO 8601 带时区)、`updated_env`、`updated_by`,后两项用 `--env` / `--by` 填,缺省留空;文章文件夹多建一个 `参考/`,放其他环境写的同主题稿件和素材(`参考-<环境>-<YYYYMMDD>.md`,永远不当源稿)。
|
|
24
|
+
- `check_article.py` 新增 H1 提示:`updated_at` 写了但没有时区时提醒;三个字段都是可选的,旧稿缺了不报,退出码不变。
|
|
25
|
+
- `workspace.md` 新增「多环境协作」一条:字段写法、新旧以 `updated_at` 为准、两边都改过时不覆盖而是存进 `参考/`、提交信息带一致前缀(wechat-post / x-article 的 SKILL.md 与 README 的文件夹说明同步)。
|
|
26
|
+
|
|
1
27
|
## [0.8.46] - 2026-10-18
|
|
2
28
|
|
|
3
29
|
> 经过 8 轮对练,写作技能改为原则优先:先想清楚要传达什么、内容用什么形式最好读,再谈措辞;去 AI 味改成成稿后的审稿步骤,脚本只提示、人来判断。
|
|
@@ -1257,7 +1283,7 @@
|
|
|
1257
1283
|
交付包 / 审校改写 / 质量三关(事实·逻辑·去 AI 味 ≥85)/ 状态同步 / 微信内联排版(`md2wechat --embed-images`)/ 发布清单。
|
|
1258
1284
|
适配点:frontmatter 去 topmind-pack 专有键(`degradation`/`action_category`/`entrypoint`),
|
|
1259
1285
|
跨 skill 引用改为通用表述,`writing-quality.md` 改用技能自带 `scan_ai_flavor.py`
|
|
1260
|
-
|
|
1286
|
+
(原引用本机私有路径),`md2wechat.py` 缺失输入改干净报错(原 Traceback)。
|
|
1261
1287
|
- **topmind-x-article `0.1.0`**:X 长文一键发布。`md2x.py` 把 Markdown 转可直接粘贴进
|
|
1262
1288
|
X Article 编辑器的纯文本(标题→纯文本行、加粗/斜体去标记、链接→`文字(url)`、
|
|
1263
1289
|
图片→`[图N]`+文末配图清单、表格→"项:值"列表);`references/publish-checklist.md`
|
package/README.en.md
CHANGED
|
@@ -2,228 +2,202 @@
|
|
|
2
2
|
|
|
3
3
|
**[中文](./README.md)** | English
|
|
4
4
|
|
|
5
|
-
>
|
|
5
|
+
> Chinese is the default (`README.md`); this file is the English parallel.
|
|
6
6
|
|
|
7
7
|
[](https://github.com/topmindspace/topmind-writing-skills/releases)
|
|
8
8
|
[](https://www.npmjs.com/package/@topmindspace/topmind-writing-skills)
|
|
9
9
|
[](https://github.com/topmindspace/topmind-writing-skills/actions/workflows/ci.yml)
|
|
10
10
|
[](LICENSE)
|
|
11
11
|
|
|
12
|
-
**TopMindSpace writing
|
|
12
|
+
**TopMindSpace writing skills**: WeChat articles, X long-form, short briefs, viral short posts, formatting, revision, covers and long images — eight skills, one repo. Principles first: decide what you want to say and which form reads best, then worry about wording. Scripts hint; people decide.
|
|
13
13
|
|
|
14
14
|
<p align="center">
|
|
15
15
|
<img src="docs/assets/writing-cover.png" alt="topmind-writing-skills · writing skills collection" width="960" />
|
|
16
16
|
</p>
|
|
17
17
|
|
|
18
|
-
> The formal business presentation skill now lives on its own: [`topmind-presentation`](https://github.com/topmindspace/topmind-presentation) (repo `topmind-presentation`; the repo is the skill — clone and copy the root into your skills directory).
|
|
19
|
-
|
|
20
|
-
### topmind-wechat-post · WeChat article authoring
|
|
21
|
-
|
|
22
|
-
Full lifecycle for WeChat articles: single-source article folder (`<title>/<title>.md`), review & rewrite, three quality gates (run by topmind-revise by default: facts / logic / de-AI-flavor), WeChat inline typography on request (images must be embedded, output goes to `out/`), publish checklist and status sync. Hand-written heading numbers are kept as written; legacy `公众号稿.md` packages stay readable. Python stdlib only — zero dependencies.
|
|
23
|
-
|
|
24
18
|
```bash
|
|
25
|
-
npx @topmindspace/topmind-writing-skills
|
|
19
|
+
npx @topmindspace/topmind-writing-skills list
|
|
20
|
+
npx @topmindspace/topmind-writing-skills install topmind-briefs
|
|
26
21
|
```
|
|
27
22
|
|
|
28
|
-
|
|
23
|
+
## Skills
|
|
29
24
|
|
|
30
|
-
|
|
25
|
+
> Terms: **short post (短文)** = a plain-text X post, up to about 1000 Chinese characters (no 280-character limit); **long-form (长文)** = an X Article or a WeChat article; **duanzi (段子)** = a one-sentence-per-line short-post style.
|
|
31
26
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
27
|
+
| Skill | Version | What it does |
|
|
28
|
+
|---|---|---|
|
|
29
|
+
| [`topmind-wechat-post`](./topmind-wechat-post/) | **0.3.18** | WeChat long-form: single-source article folder, three quality gates (revise by default), inline typography on request (images embedded), publish checklist and status sync |
|
|
30
|
+
| [`topmind-x-article`](./topmind-x-article/) | **0.4.24** | X long-form: single-source Markdown (revise by default) → on-request one-click-copy HTML / plain-text fallback + cover + checklist |
|
|
31
|
+
| [`topmind-briefs`](./topmind-briefs/) | **0.2.26** | Short briefs (X + WeChat): one topic, stop when done; sources → original images → content → layout; one copy-ready plain-text X block, links and images sent separately |
|
|
32
|
+
| [`topmind-viral-posts`](./topmind-viral-posts/) | **0.3.18** | X viral short posts: 18 templates + hook × body × closer combinations; duanzi layout with no emoji |
|
|
33
|
+
| [`topmind-format`](./topmind-format/) | **0.1.11** | X plain-text formatter: to duanzi / to short post; layout only, words unchanged, with a fidelity check |
|
|
34
|
+
| [`topmind-revise`](./topmind-revise/) | **0.1.3** | Revision and quality check: ⓪ structure → facts → logic → de-AI → fidelity audit; four modes; every change maps to a rule code |
|
|
35
|
+
| [`topmind-cover`](./topmind-cover/) | **0.4.15** | Cover art (X 1500×600 / WeChat 900×383): 22 styles, seven-layer scene recipe, whole-image generation + title proofing |
|
|
36
|
+
| [`topmind-poster`](./topmind-poster/) | **0.1.8** | HTML+CSS → high-res long image / poster / infographic: headless Chrome 2× + auto-trim; one image per section |
|
|
35
37
|
|
|
36
|
-
|
|
38
|
+
Installer [`@topmindspace/topmind-writing-skills`](https://www.npmjs.com/package/@topmindspace/topmind-writing-skills) is **0.8.47** (whole-repo, same-tag releases).
|
|
37
39
|
|
|
38
|
-
|
|
40
|
+
## Writing philosophy: principles first
|
|
39
41
|
|
|
40
|
-
|
|
41
|
-
npx @topmindspace/topmind-writing-skills install topmind-briefs
|
|
42
|
-
```
|
|
42
|
+
Social posts exist to get information and a point of view across: clear, simple, easy to read; use images, tables and lists instead of long paragraphs wherever the content allows. All writing skills share one layered rule set (single source `shared/references/`, copied into each skill so standalone installs work):
|
|
43
43
|
|
|
44
|
-
|
|
44
|
+
| Layer | Files | Covers |
|
|
45
|
+
|---|---|---|
|
|
46
|
+
| 0 · Principles | `social-writing-principles.md` | 8 principles: know what to say, conclusion first, every sentence adds something, form follows content, everyday words, originals and data over paraphrase, the reader's side, honest and measured |
|
|
47
|
+
| 1 · Information design | `information-design.md` | Skeleton first, content → form table (list / table / image / paragraph), length and density, spotting padding, what the I1–I8 hints mean |
|
|
48
|
+
| 2 · Voice | `core-voice.md` | Ten wording principles; V01–V33 are worked examples for titles, openings, numbers, quotes, replies, jokes |
|
|
49
|
+
| 3 · Review | `topmind-revise` + `de-ai-rules.md` | ⓪ structure → facts → logic → cut → de-AI → layout → fidelity audit; the de-AI rules are for reviewing finished drafts, not for drafting |
|
|
45
50
|
|
|
46
|
-
|
|
51
|
+
Practices shared by every skill:
|
|
47
52
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
53
|
+
- **Principles are written as why + how to judge + example**: examples show the thinking, not a word list. Only real hard constraints (platform limits, facts, compliance) stay strict, labeled 「硬约束」 (hard constraint).
|
|
54
|
+
- **Persona: an ordinary person who is still learning** — not an expert, not a lecturer; a little self-mockery is fine; say so when unsure.
|
|
55
|
+
- **Originals first** (`image-sourcing.md`): find official / original-post / third-party images before writing and log sources in `素材来源.md`; self-made charts are a fallback, labeled 自制 with the data source.
|
|
56
|
+
- **Scripts hint**: E errors must be zero; each W warning needs a decision; H hints and I1–I8 information-design hints are advisory and never part of `--strict`.
|
|
57
|
+
- **Revise only what is wrong**: keep rewrite boundaries (wording only, never facts or certainty); reordering sections needs `depth=structure`.
|
|
51
58
|
|
|
52
|
-
###
|
|
59
|
+
### The long-form article folder
|
|
53
60
|
|
|
54
|
-
|
|
61
|
+
One article, one folder, one source file; `article_scaffold.py` (or wechat-post's `new-article.py`) creates it:
|
|
55
62
|
|
|
56
|
-
```
|
|
57
|
-
|
|
63
|
+
```text
|
|
64
|
+
<title>/
|
|
65
|
+
├─ <title>.md the only source (readable in Obsidian; HTML comments with writing notes never reach derived output)
|
|
66
|
+
├─ 骨架.md skeleton: main message, reader, per-section points / form / chart plan / length
|
|
67
|
+
├─ 素材来源.md source for every image and number
|
|
68
|
+
├─ images/ cover/
|
|
69
|
+
├─ raw/ originals, screenshots, notes (not published)
|
|
70
|
+
├─ out/ derived output: X HTML, plain text, WeChat HTML (rebuild any time)
|
|
71
|
+
└─ 参考/ same-topic drafts and assets from other environments (reference only, never the source)
|
|
58
72
|
```
|
|
59
73
|
|
|
60
|
-
|
|
74
|
+
Multi-environment work (optional): the source frontmatter carries `updated_at` (ISO 8601 with time zone), `updated_env` and `updated_by`; `updated_at` decides which copy is newer. When both sides changed and the order is unclear, nothing is overwritten — the older copy goes into `参考/`. See `workspace.md`. Legacy `公众号稿.md` packages stay readable.
|
|
61
75
|
|
|
62
|
-
|
|
76
|
+
## Which skill, and how they combine
|
|
63
77
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
78
|
+
| Task | Skill | Typical combination |
|
|
79
|
+
|---|---|---|
|
|
80
|
+
| A data-driven brief (numbers, rankings, launches) | `topmind-briefs` | → `topmind-format` for layout; no original image → ask, then `topmind-cover` 16:9 |
|
|
81
|
+
| Engagement jokes, follower posts | `topmind-viral-posts` | → `topmind-format` to re-lay duanzi |
|
|
82
|
+
| Existing text, layout only | `topmind-format` | words unchanged; rewriting → `topmind-revise` |
|
|
83
|
+
| Edit, tighten, de-AI, quality check | `topmind-revise` | standalone, or called by the long-form skills |
|
|
84
|
+
| Thousands-of-words X article | `topmind-x-article` | + `topmind-revise` + `topmind-cover` (5:2) |
|
|
85
|
+
| WeChat long-form & layout | `topmind-wechat-post` | + `topmind-revise` + `topmind-cover`; 300–800-character pieces → briefs |
|
|
86
|
+
| Long images, posters, infographics | `topmind-poster` | copy written first by briefs / wechat-post |
|
|
69
87
|
|
|
70
|
-
|
|
88
|
+
## Skill highlights
|
|
71
89
|
|
|
72
|
-
|
|
73
|
-
|---|---|
|
|
74
|
-
| `x-delivery-contract.md` (must read) | Short-post workflow: sources → original post/images → content → layout; emoji optional for short posts (bullets default to 「·」, 「1)」 for longer lists, emoji only for short lists, 【headings】 for longer posts), none at all in duanzi; never `- ` / `1. `; the X short-post / duanzi body is one copy-ready plain-text block (hashtags last); **links (including sources), original images and generated images are sent separately**; X long-form and WeChat articles may keep in-text links |
|
|
75
|
-
| `x-post-format.md` | No Markdown, bullet sets, spacing, sources, skeletons, images, WeChat → X |
|
|
76
|
-
| `emoji-system.md` | The TopMind emoji system (short posts only, optional): 0–2 persona motifs (🐔 🐱 🌱) at start/end; 0–1 keyword-matched title emoji; one bullet set per post |
|
|
77
|
-
| `x-layout-patterns.md` | Layout patterns in our own words |
|
|
90
|
+
### topmind-wechat-post · WeChat long-form
|
|
78
91
|
|
|
79
|
-
|
|
92
|
+
- Single-source article folder; review and rewrite through `topmind-revise` by default; typography output goes to `out/` with base64-embedded images.
|
|
93
|
+
- Hand-written heading numbers are kept as written; Python stdlib only.
|
|
80
94
|
|
|
81
|
-
### topmind-
|
|
95
|
+
### topmind-x-article · X long-form
|
|
82
96
|
|
|
83
|
-
|
|
97
|
+
- Delivers only `<title>.md` by default; for X, derives one-click-copy HTML (images embedded in `![]()` order, 「来源:」 lines as captions) or a plain-text fallback (`md2x.py`: images → `[图N]`, tables → "item: value", lists → 「·」 / 「1)」).
|
|
98
|
+
- Publishing is a manual paste; fetch the post back afterwards to verify.
|
|
84
99
|
|
|
85
|
-
|
|
86
|
-
npx @topmindspace/topmind-writing-skills install topmind-cover
|
|
87
|
-
```
|
|
100
|
+
### topmind-briefs · Short briefs
|
|
88
101
|
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
</p>
|
|
102
|
+
- No HTML by default: verify first-hand sources → find the original post and images → write → lay out.
|
|
103
|
+
- The X version is one copy-ready plain-text block (emoji optional, 0–2 hashtags); links (with source and publish time) and images are sent separately; the WeChat version is about 300–800 characters. Draft only.
|
|
92
104
|
|
|
93
|
-
|
|
105
|
+
### topmind-viral-posts · X viral short posts
|
|
94
106
|
|
|
95
|
-
|
|
107
|
+
- 18 templates (advice, self-mockery, hot news, little-known facts, contrast, self-Q&A, …) + hook × body × closer combinations; all examples are original.
|
|
108
|
+
- Duanzi layout: one sentence per line, blank lines between, no emoji; 1–3 hashtags on the last line, classification tags listed separately.
|
|
96
109
|
|
|
97
|
-
|
|
110
|
+
### topmind-format · X plain-text formatter
|
|
98
111
|
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
```
|
|
112
|
+
- **To duanzi**: one sentence per line with blank lines, emoji and bullets removed; **to short post**: paragraphing, lists as 「·」 / 「1)」 or emoji.
|
|
113
|
+
- `format_text.py` changes layout only and checks fidelity; links, source lines and image notes are pulled out to be sent separately.
|
|
102
114
|
|
|
103
|
-
|
|
115
|
+
### topmind-revise · Revision and quality check
|
|
104
116
|
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
> Also do not install the old package's `^2` (2.0.0–2.1.1 deprecated).
|
|
117
|
+
- Four modes: audit (report only), revise (back up, then write back), embed (called by long-form skills; returns only the final draft), quick (titles, short posts, one-liners, replies).
|
|
118
|
+
- `revise_check.py` diffs numbers, quotes, proper nouns and hedging words, and reports the share of clean paragraphs that were rewritten anyway.
|
|
108
119
|
|
|
120
|
+
### topmind-cover · Cover art
|
|
109
121
|
|
|
110
|
-
|
|
122
|
+
- Theme → seven-layer scene recipe → 2–3 style combos → layered prompt → seven-item score; whole-image generation with character proofing by default, `title-engine.py` overlay as a fallback.
|
|
123
|
+
- `crop-cover.py` crops both platform sizes; style index in [`cover-styles.md`](./topmind-cover/references/cover-styles.md).
|
|
111
124
|
|
|
112
|
-
|
|
125
|
+
<p align="center">
|
|
126
|
+
<img src="https://github.com/topmindspace/topmind-writing-skills/raw/main/topmind-cover/assets/examples/overview.png" alt="topmind-cover · 22 cover-style overview" width="960" />
|
|
127
|
+
</p>
|
|
113
128
|
|
|
114
|
-
|
|
115
|
-
|---|---|---|
|
|
116
|
-
| 0 · Principles | `social-writing-principles.md` | 8 principles: know what you want to say, lead with the conclusion, every sentence adds something new, form follows content, plain everyday words, originals and data over paraphrase, stand on the reader's side, honest and measured |
|
|
117
|
-
| 1 · Information design | `information-design.md` | Skeleton before prose, a content → form decision table (list / table / image / paragraph), length and density reference lines, ways to spot padding |
|
|
118
|
-
| 2 · Voice | `core-voice.md` | Ten wording principles; V01–V33 are worked examples for titles, openings, numbers, quotes, replies, jokes |
|
|
119
|
-
| Review · De-AI | `de-ai-rules.md` + `de_ai_lint.py` | Pattern table (Z / E / P) grouped by root cause; used for self-review and revision only, not while drafting |
|
|
120
|
-
| Execution | `topmind-revise` | ⓪ structure review → facts → logic → cut redundancy → de-AI → layout → fidelity check → over-edit check, with a revision report |
|
|
129
|
+
### topmind-poster · HTML → high-res long image
|
|
121
130
|
|
|
122
|
-
|
|
131
|
+
- HTML+CSS layout → headless Chrome 2× screenshot → auto-trim, all in `render_poster.py`; layout recipes in [`layout-recipes.md`](./topmind-poster/references/layout-recipes.md).
|
|
132
|
+
- Why not an image model: rankings carry text and numbers that must be exact, and generation mangles them. Covers have no dense text and go through `topmind-cover`.
|
|
123
133
|
|
|
124
|
-
|
|
125
|
-
- **Originals first** (`image-sourcing.md`): find official / original-post / third-party images before writing and log sources in the private `素材来源.md` inside the article folder; self-made charts are a fallback and must be labeled 自制 with the data source.
|
|
126
|
-
- **Long-form starts with a skeleton**: `article_scaffold.py` creates `骨架.md` in the article folder (main message, reader, per-section points / form / chart plan / length), so the form is decided before drafting.
|
|
127
|
-
- **Scripts hint, people decide**: each W warning needs a decision (not a zero count); H hints and I1–I8 information-design hints are advisory and never part of `--strict`; the regression sets `scripts/test_lint_rules.py` and `scripts/test_info_design.py` keep normal writing from being flagged.
|
|
128
|
-
- **Revise only what is wrong**: rewrite boundaries first (change wording, never facts or certainty); by default only low-risk structural edits (parallel paragraphs → list, comparisons → table, remove repeats); reordering sections needs `depth=structure`.
|
|
134
|
+
> The business presentation skill lives in its own repo: [`topmind-presentation`](https://github.com/topmindspace/topmind-presentation).
|
|
129
135
|
|
|
130
|
-
##
|
|
136
|
+
## Shared X plain-text rules
|
|
131
137
|
|
|
132
|
-
|
|
138
|
+
Used by every skill that outputs X text (`shared/references/`):
|
|
133
139
|
|
|
134
|
-
|
|
|
140
|
+
| Doc | Covers |
|
|
135
141
|
|---|---|
|
|
136
|
-
|
|
|
137
|
-
|
|
|
138
|
-
|
|
|
139
|
-
|
|
|
140
|
-
| topmind-x-article (X long-form) | [`topmind-x-article/examples/`](./topmind-x-article/examples/) |
|
|
141
|
-
| topmind-wechat-post (WeChat) | [`topmind-wechat-post/examples/`](./topmind-wechat-post/examples/) |
|
|
142
|
-
| topmind-poster (posters) | [`topmind-poster/examples/`](./topmind-poster/examples/) |
|
|
143
|
-
| topmind-cover (covers) | [`topmind-cover/assets/examples/`](./topmind-cover/assets/examples/) |
|
|
144
|
-
|
|
145
|
-
## Skills
|
|
146
|
-
|
|
147
|
-
> Terms: **short post (短文)** = a plain-text X post, anything up to about 1000 Chinese characters (no 280-character limit); **long-form (长文)** = an X Article; **duanzi (段子)** = a one-sentence-per-line short-post style.
|
|
142
|
+
| `x-delivery-contract.md` | Short-post workflow (sources → original post/images → content → layout); one copy-ready plain-text body, hashtags last; links and images sent separately |
|
|
143
|
+
| `x-post-format.md` | No Markdown, bullet sets, spacing, sources, images, WeChat → X |
|
|
144
|
+
| `emoji-system.md` | Emoji system (short posts only, optional): 0–2 persona motifs, 0–1 title emoji, one bullet set per post |
|
|
145
|
+
| `x-layout-patterns.md` | Layout patterns: conclusion on the first line, list lead-ins, 【headings】 |
|
|
148
146
|
|
|
147
|
+
Three output levels of `lint_x_post.py` / `de_ai_lint.py`:
|
|
149
148
|
|
|
150
|
-
|
|
|
151
|
-
|
|
152
|
-
|
|
|
153
|
-
|
|
|
154
|
-
|
|
|
155
|
-
| [`topmind-briefs`](./topmind-briefs/) | **0.2.24** | Short-form briefs (WeChat + X): one topic, one chart; data rankings / paper explainers / product alerts / mechanism explainers; sources → images → content → layout; one copy-ready plain-text X block (no HTML by default, emoji optional, no AI tone), links / images sent separately; asks before generating any image |
|
|
156
|
-
| [`topmind-viral-posts`](./topmind-viral-posts/) | **0.3.16** | X viral short posts: 18 template types + combinations, duanzi layout (blank lines, no emoji, plain bullet lines), one copy-ready plain-text block per post with hashtags last, links / images sent separately, classification tags listed separately; asks before generating an image |
|
|
157
|
-
| [`topmind-format`](./topmind-format/) | **0.1.9** | X plain-text formatter: to duanzi (blank lines, no emoji) / to short post (paragraphing + sensible lists, emoji optional); layout only, words unchanged, with a fidelity check; one copy-ready plain-text body, links / images sent separately |
|
|
158
|
-
| [`topmind-revise`](./topmind-revise/) | **0.1.1** | Revision and quality check: edit, tighten, de-AI, three quality gates and fidelity audit; four modes (audit / revise / embed / quick); every change maps to a rule code, with an over-edit guard; the long-form skills use it by default |
|
|
159
|
-
| [`topmind-poster`](./topmind-poster/) | **0.1.6** | HTML+CSS → high-res long image / poster / infographic PNG: headless Chrome 2× screenshot + auto-trim; "one image per section" batch workflow (generator + renderer) |
|
|
160
|
-
|
|
161
|
-
Installer [`@topmindspace/topmind-writing-skills`](https://www.npmjs.com/package/@topmindspace/topmind-writing-skills) is **0.8.46** (whole-repo same-tag releases).
|
|
149
|
+
| Level | Meaning | Required |
|
|
150
|
+
|---|---|---|
|
|
151
|
+
| E error | Markdown leftovers (E1–E9); URLs / source lines / image notes in the body (E10–E12) | must be zero |
|
|
152
|
+
| W warning | AI-sounding phrases, long first line, long paragraphs, structural patterns, punctuation tics, unlabeled self-made images, … | each needs a decision: fix, or note why it stays |
|
|
153
|
+
| H hint / I1–I8 | context words, parallel closers, emoji density; information design (long runs of prose, list / table candidates, opening that doesn't deliver, …) | advisory, never in `--strict` |
|
|
162
154
|
|
|
163
|
-
|
|
155
|
+
Pick the genre with `--genre long|short|duanzi|reply|title`; hide hints with `--no-hints`.
|
|
164
156
|
|
|
165
|
-
|
|
166
|
-
|---|---|---|
|
|
167
|
-
| A data-driven brief (numbers, rankings, launches) | `topmind-briefs` | → `topmind-format` for layout; no original image → `topmind-cover` 16:9 |
|
|
168
|
-
| Engagement jokes, follower posts | `topmind-viral-posts` | → `topmind-format` to re-lay duanzi; pair with a briefs version for the same event |
|
|
169
|
-
| Existing text, layout only | `topmind-format` | words unchanged; rewriting → `topmind-revise` |
|
|
170
|
-
| Edit, tighten, de-AI, quality check | `topmind-revise` | standalone, or called by x-article / wechat-post after drafting |
|
|
171
|
-
| Thousands-of-words X article | `topmind-x-article` | + `topmind-revise` + `topmind-cover` (5:2); shorter than a post → briefs |
|
|
172
|
-
| WeChat long-form & layout | `topmind-wechat-post` | + `topmind-revise` + `topmind-cover`; 300–800-char briefs → briefs |
|
|
173
|
-
| Long images, posters, infographics | `topmind-poster` | copy written first by briefs / wechat-post |
|
|
157
|
+
## Original examples
|
|
174
158
|
|
|
175
|
-
|
|
159
|
+
All examples are written by us (fictional or neutral topics; no third-party text or images): [viral-posts](./topmind-viral-posts/examples/) · [briefs](./topmind-briefs/examples/) · [format](./topmind-format/examples/) · [revise](./topmind-revise/examples/) · [x-article](./topmind-x-article/examples/) · [wechat-post](./topmind-wechat-post/examples/) · [poster](./topmind-poster/examples/) · [cover](./topmind-cover/assets/examples/).
|
|
176
160
|
|
|
177
161
|
## Install
|
|
178
162
|
|
|
179
|
-
**npm = pinned snapshot
|
|
163
|
+
**npm = pinned snapshot; GitHub = repo HEAD.**
|
|
180
164
|
|
|
181
165
|
```bash
|
|
182
|
-
npx @topmindspace/topmind-writing-skills list
|
|
183
|
-
npx @topmindspace/topmind-writing-skills install topmind-briefs
|
|
184
166
|
npx @topmindspace/topmind-writing-skills install topmind-briefs --to ./.claude/skills
|
|
185
|
-
npx @topmindspace/topmind-writing-skills@latest install topmind-briefs # upgrade: older install is overwritten
|
|
167
|
+
npx @topmindspace/topmind-writing-skills@latest install topmind-briefs # upgrade: an older install is overwritten
|
|
186
168
|
npx @topmindspace/topmind-writing-skills install topmind-briefs --force # reinstall same version / downgrade
|
|
187
|
-
npx @topmindspace/topmind-writing-skills@0.8.4 install topmind-briefs
|
|
169
|
+
npx @topmindspace/topmind-writing-skills@0.8.4 install topmind-briefs # pin a version
|
|
188
170
|
npx @topmindspace/topmind-writing-skills uninstall topmind-briefs --to ./.claude/skills
|
|
171
|
+
npx github:topmindspace/topmind-writing-skills install topmind-briefs # track HEAD
|
|
189
172
|
```
|
|
190
173
|
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
```
|
|
195
|
-
|
|
196
|
-
Default probe order: `./.agents` → `./.claude` → `./.cursor` → `./.codex` → `./.mimocode`, then user-level `~/.claude`, etc. Or pass `--to`. When `--to` is omitted, the install summary explicitly prints the auto-detected target directory. Do not `npm install topmind-briefs` (skill id is not a standalone package).
|
|
197
|
-
|
|
198
|
-
`install` details: upgrades by default: if the installed version is older (or unreadable), it is overwritten in place (no backup) and `Upgraded <skill> <old> -> <new>` is printed; the same version prints `Already up to date` (`--force` reinstalls); an installed version newer than the package is refused unless `--force`. On success, a three-line summary is printed: where it was installed / installed skill version and installer version / next steps.
|
|
174
|
+
- Default probe order: `./.agents` → `./.claude` → `./.cursor` → `./.codex` → `./.mimocode`, then user-level `~/.claude`, etc.; the install summary prints the actual target.
|
|
175
|
+
- An older install is overwritten (`Upgraded <skill> <old> -> <new>`); the same version prints `Already up to date`; a newer installed version is never downgraded without `--force`.
|
|
176
|
+
- Do not `npm install topmind-briefs`: skill ids are not standalone packages. The old `tms-skills` package is no longer updated, and its `^2` (2.0.0–2.1.1) is deprecated.
|
|
199
177
|
|
|
200
178
|
## Repo layout
|
|
201
179
|
|
|
202
|
-
```
|
|
180
|
+
```text
|
|
203
181
|
topmind-writing-skills/
|
|
204
|
-
├─ topmind
|
|
205
|
-
├─
|
|
206
|
-
├─ topmind-
|
|
207
|
-
├─
|
|
208
|
-
├─
|
|
209
|
-
├─
|
|
210
|
-
|
|
211
|
-
├─ topmind-x-article/ # skill
|
|
212
|
-
├─ bin/topmind-writing-skills.js # CLI: list / install / uninstall
|
|
213
|
-
├─ shared/ # single source for shared scripts + writing principles (manifest.json lists targets)
|
|
214
|
-
├─ evals/ # routing eval cases (not shipped to npm)
|
|
215
|
-
├─ docs/ # publishing guide · CI notes
|
|
216
|
-
├─ scripts/ # repo gates / privacy scan
|
|
217
|
-
├─ package.json # @topmindspace/topmind-writing-skills
|
|
218
|
-
└─ LICENSE · CHANGELOG.md · README.md · README.en.md
|
|
182
|
+
├─ topmind-*/ # eight skills (SKILL.md + references + scripts + examples)
|
|
183
|
+
├─ shared/ # single source for shared scripts and writing rules (manifest.json lists targets)
|
|
184
|
+
├─ bin/topmind-writing-skills.js # CLI: list / install / uninstall
|
|
185
|
+
├─ evals/ # routing eval cases (not shipped to npm)
|
|
186
|
+
├─ docs/ # publishing guide · CI notes
|
|
187
|
+
├─ scripts/ # repo gates, sync, privacy scan
|
|
188
|
+
└─ package.json · CHANGELOG.md · LICENSE
|
|
219
189
|
```
|
|
220
190
|
|
|
191
|
+
- Edit shared files only in `shared/`, then run `npm run sync:shared`; CI checks that every skill copy is byte-identical.
|
|
192
|
+
- SKILL.md frontmatter keeps only Agent Skills spec keys at the top level (`name` / `description` / `license` / `metadata`), so `skills-ref validate` passes.
|
|
193
|
+
- The npm package ships only `overview.png` from the cover examples; per-style samples are on GitHub and in the Release zip.
|
|
194
|
+
|
|
221
195
|
## Release & CI
|
|
222
196
|
|
|
223
197
|
| Action | GitHub | npm |
|
|
224
|
-
|
|
225
|
-
| push main | live |
|
|
226
|
-
| tag `vX.Y.Z` | Release + zip |
|
|
198
|
+
|---|:---:|:---:|
|
|
199
|
+
| push main | live | unchanged |
|
|
200
|
+
| tag `vX.Y.Z` | Release + zip | auto publish |
|
|
227
201
|
|
|
228
202
|
```bash
|
|
229
203
|
npm run check && npm run audit && npm run privacy
|