@topmindspace/topmind-skills 4.15.1 → 4.15.3
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 +43 -0
- package/INSTALL.md +11 -3
- package/README.en.md +18 -14
- package/README.md +19 -15
- package/README.zh-CN.md +19 -15
- package/bin/install-skills.mjs +48 -8
- package/evals/evals.json +85 -3
- package/install-targets/claude-code.json +1 -2
- package/install-targets/codex.json +1 -2
- package/install-targets/hermes.json +1 -2
- package/install-targets/mimocode.json +1 -2
- package/install-targets/opencode.json +1 -2
- package/install-targets/universal.json +1 -2
- package/package.json +3 -3
- package/shared/host-loading.md +3 -3
- package/shared/trigger-disambiguation.md +14 -2
- package/skills.md +1 -1
- package/topmind/SKILL.md +18 -23
- package/topmind-capture/SKILL.md +11 -34
- package/topmind-ledger/SKILL.md +11 -18
- package/topmind-loop/SKILL.md +11 -23
- package/topmind-maintain/SKILL.md +11 -24
- package/topmind-memory/SKILL.md +11 -21
- package/topmind-organize/SKILL.md +11 -35
- package/topmind-pack.json +48 -28
- package/topmind-weread/SKILL.md +11 -18
- package/topmind-write/SKILL.md +15 -32
- package/topmind-x/SKILL.md +13 -19
- package/topmind-wechat/DESIGN.md +0 -50
- package/topmind-wechat/SKILL.md +0 -229
- package/topmind-wechat/assets/themes/amber-review.json +0 -35
- package/topmind-wechat/assets/themes/graphite.json +0 -35
- package/topmind-wechat/assets/themes/minimal-ink.json +0 -35
- package/topmind-wechat/assets/themes/newsprint.json +0 -35
- package/topmind-wechat/assets/themes/tech-blue.json +0 -35
- package/topmind-wechat/references/element-spec.md +0 -162
- package/topmind-wechat/references/known-pits.md +0 -86
- package/topmind-wechat/references/theme-map.md +0 -139
- package/topmind-wechat/references/typography-rules.md +0 -62
- package/topmind-wechat/references/wechat-constraints.md +0 -106
- package/topmind-wechat/references/workflow.md +0 -113
- package/topmind-wechat/references/writing-quality.md +0 -137
- package/topmind-wechat/scripts/audit-provenance.py +0 -366
- package/topmind-wechat/scripts/lint-wechat.py +0 -446
- package/topmind-wechat/scripts/md2wechat.py +0 -1599
- package/topmind-wechat/scripts/new-article.py +0 -183
- package/topmind-wechat/scripts/push-to-topstream.py +0 -226
- package/topmind-wechat/scripts/scan_ai_flavor.py +0 -101
- package/topmind-wechat/scripts/sync-mapping.py +0 -220
- package/topmind-wechat/scripts/sync-status.py +0 -187
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
topmind-skills 的版本记录。GitHub 只保留最近 2 个 Release,本文件是完整历史的入口;更早的版本见 git tag(`v4.13.x` 起)与 `git log`。
|
|
4
|
+
|
|
5
|
+
版本真源:`topmind-pack.json`。`package.json`、每个 `SKILL.md` 的 `metadata.version`、`evals/evals.json` 与之一致。
|
|
6
|
+
|
|
7
|
+
## 4.15.3 — 2026-10-10
|
|
8
|
+
|
|
9
|
+
### 优化
|
|
10
|
+
|
|
11
|
+
- 安装文档 `INSTALL.md` 的技能目录站点链接指向通用页面。
|
|
12
|
+
- GitHub Actions 改用 Node 24 运行时的版本:`actions/checkout` v5 → v7、`actions/setup-node` v5 → v7、`actions/setup-python` v5 → v7、`actions/upload-artifact` v5 → v7;CI 与 Release 的 `node-version` 已是 24,不变。
|
|
13
|
+
- `runs-on` 由 `ubuntu-latest` 固定为 `ubuntu-24.04`:GitHub 在 2026-10-19 至 11-19 期间把 `ubuntu-latest` 逐步切到 Ubuntu 26.04,先停在当前已验证的镜像,切 26.04 另行验证后再改。
|
|
14
|
+
- `.gitignore` 补充 Release 附件、npm pack 输出等再生成产物。
|
|
15
|
+
- 技能内容不变,仅版本号随包同步。
|
|
16
|
+
|
|
17
|
+
## 4.15.2 — 2026-10-08
|
|
18
|
+
|
|
19
|
+
### 不兼容变更(请先看)
|
|
20
|
+
|
|
21
|
+
- **移除 `topmind-wechat`。** 公众号能力统一由写作包 [topmind-writing-skills](https://github.com/topmindspace/topmind-writing-skills) 的 `topmind-wechat-post` 提供,两边不再各维护一份。
|
|
22
|
+
- 已安装旧版的用户:请删除技能目录里的 `topmind-wechat/`(例如 `~/.agents/skills/topmind-wechat`、`~/.claude/skills/topmind-wechat`,或你的宿主技能目录下同名文件夹),再安装写作包的 `topmind-wechat-post`。两者触发词相同,同时存在会互相抢路由。
|
|
23
|
+
- 本包安装器重装或 `update` 不会自动删除旧目录,需要手动删。
|
|
24
|
+
- topmind Desktop 的「公众号创作」会优先找 `topmind-wechat-post`,找不到时仍认旧目录。
|
|
25
|
+
- **SKILL.md frontmatter 改为 Agent Skills 规范格式。** 顶层只保留 `name / description / license / compatibility / metadata`;`version / action_category / entrypoint / triggers / tags / author / homepage / updated / degradation` 移到 `metadata` 下,值一律为字符串,`triggers` 与 `tags` 改为逗号分隔。
|
|
26
|
+
- 自己解析 SKILL.md 顶层字段的工具需要改为同时读 `metadata.*`。topmind Desktop 的解析器已同步优化(引擎仓库同批提交);未升级的旧版 Desktop 会把这些技能都显示为默认分类,router 的入口标记也读不到,内容与路由不受影响。
|
|
27
|
+
|
|
28
|
+
### 优化
|
|
29
|
+
|
|
30
|
+
- 路由消歧真源 `shared/trigger-disambiguation.md`:公众号改指外部可选 `topmind-wechat-post`;新增写短文、发推、X 长文、研究报告、复盘与汇报材料、交接、配图与长图七类裁决行,覆盖 `topmind-x-article`、`topmind-briefs`、`topmind-viral-posts`、`topmind-cover`、`topmind-poster`、`topmind-presentation`、`topmind-handoff`;表头列出外部可选技能清单,并写明任何技能都不代用户发布。
|
|
31
|
+
- `topmind` router 与 `topmind-write` 的路由表同步:公众号、X 长文、短文、幻灯片、交接都标为外部可选,未安装时回退到 write 或在回执里说明。
|
|
32
|
+
- `topmind-pack.json`:去掉「markdown-only / pure-markdown」的说法,改为 `runtime: markdown-instructions` 并说明 npm 包附带 Node 安装器;`content_schema` 按规范拆成顶层字段与 `metadata` 字段;新增 `external_optional_skills`,记录外部技能与已移除的 `topmind-wechat`。
|
|
33
|
+
- 所有 `SKILL.md` 的 `metadata.homepage` 统一指向 topmind-skills 仓库。
|
|
34
|
+
- 安装器:安装外部技能仓库(没有 `topmind-pack.json` 的普通 Agent Skills 布局,例如写作包)时只装技能目录,不再把仓库根的 `evals/`、`LICENSE`、`README.md`、`INSTALL.md`、`install-targets/` 铺进宿主技能目录;只有 SKILL.md 链接了 `../shared/` 才带上 `shared/`;回执写到单独的 `.topmind-skills-install.<包名>.json`,不再覆盖 topmind 本包的回执。
|
|
35
|
+
- `INSTALL.md`:去掉旧包 `@topmindspace/tms-skills` 的提法;写明 `npx skills` 不装 `shared/` 的后果(子文档打不开、路由消歧表缺席、宿主不报错)与补救步骤。
|
|
36
|
+
- `evals/evals.json`:新增 8 条外部技能路由用例(公众号 2 条,含「不代发」;干货短文、引流短帖、X 长文、研究报告转幻灯片、交接、封面与长图各 1 条),字段 `external_skills` 由测试校验必须出现在消歧表里且不属于本包。
|
|
37
|
+
- CI:引擎交叉校验的 checkout 不再 `continue-on-error`,3 项交叉校验每次都跑;新增官方校验器 `agentskills validate`(skills-ref 0.1.1)逐个检查技能。
|
|
38
|
+
- Release:缺少 `NPM_TOKEN` 时「Publish to npm」步骤直接失败并给出提示,与其他 topmind 仓库一致,避免 Release 成功而 npm 未发布。
|
|
39
|
+
- 新增本 CHANGELOG,并加入 npm 包。
|
|
40
|
+
|
|
41
|
+
### 包体积
|
|
42
|
+
|
|
43
|
+
- `npm pack --dry-run`:4.15.1 为 tarball 159,771 B / 解包 460,031 B / 72 个文件;4.15.2 约为 tarball 92 kB / 解包 278 kB / 51 个文件(移除 `topmind-wechat`,新增 CHANGELOG)。
|
package/INSTALL.md
CHANGED
|
@@ -12,7 +12,7 @@ universal tools that read .agents/skills need nothing else
|
|
|
12
12
|
private Claude Code / MiMoCode / Hermes … ← relative symlink (or --copy)
|
|
13
13
|
```
|
|
14
14
|
|
|
15
|
-
安装模型与开源生态 [`npx skills`](https://github.com/vercel-labs/skills) / [skills.sh](https://skills.sh)
|
|
15
|
+
安装模型与开源生态 [`npx skills`](https://github.com/vercel-labs/skills) / [skills.sh](https://skills.sh) 对齐。旧包 `@topmindspace/tms-skills` 已不再维护,请改用 `@topmindspace/topmind-skills`。
|
|
16
16
|
|
|
17
17
|
---
|
|
18
18
|
|
|
@@ -120,12 +120,20 @@ npx skills update -g -y
|
|
|
120
120
|
npx skills add topmindspace/topmind-skills -l
|
|
121
121
|
```
|
|
122
122
|
|
|
123
|
-
**注意:社区 CLI 不会装 `shared/`。** topmind skill 有 `../shared/*.md`
|
|
123
|
+
**注意:社区 CLI 不会装 `shared/`。** topmind skill 有 `../shared/*.md` 链接,缺了的后果:
|
|
124
|
+
|
|
125
|
+
- 路由消歧表(`trigger-disambiguation.md`)、写回回执、能力降级、自动建议等子文档打不开,宿主只能按 SKILL.md 正文行事,碰撞词更容易路由错;
|
|
126
|
+
- 用 `-s` 只装单个子技能时同样如此,且 router 不在场,多意图拆步不可用;
|
|
127
|
+
- 宿主不会报错,看起来「装上了」,所以要主动补齐。
|
|
128
|
+
|
|
129
|
+
补救:装完后再跑一次 pack-aware(或手动拷 `shared/`),然后用 `doctor` 检查:
|
|
124
130
|
|
|
125
131
|
```bash
|
|
126
132
|
npx @topmindspace/topmind-skills add topmindspace/topmind-skills -g
|
|
127
133
|
# 或
|
|
128
134
|
cp -R /path/to/topmind-skills/shared ~/.agents/skills/shared
|
|
135
|
+
# 检查
|
|
136
|
+
npx @topmindspace/topmind-skills doctor
|
|
129
137
|
```
|
|
130
138
|
|
|
131
139
|
日志末尾若出现 `Failed to install 9` 且指向 **PromptScript**,是该 host 不支持 global 安装,可忽略;topmind 本身已装上。
|
|
@@ -247,7 +255,7 @@ npm publish --access public
|
|
|
247
255
|
|
|
248
256
|
### skills.sh
|
|
249
257
|
|
|
250
|
-
公开 GitHub 仓即可被 `npx skills` / [skills.sh](https://skills.sh
|
|
258
|
+
公开 GitHub 仓即可被 `npx skills` / [skills.sh](https://skills.sh) 索引,无需额外注册:
|
|
251
259
|
|
|
252
260
|
```bash
|
|
253
261
|
npx skills add topmindspace/topmind-skills -g -y
|
package/README.en.md
CHANGED
|
@@ -27,10 +27,10 @@ node bin/install-skills.mjs agents
|
|
|
27
27
|
node bin/install-skills.mjs doctor --repair
|
|
28
28
|
```
|
|
29
29
|
|
|
30
|
-
Install model: **one canonical body under `.agents/skills`** plus relative symlinks into private host roots (Claude Code, MiMoCode, …) — same as [`npx skills`](https://github.com/vercel-labs/skills)
|
|
30
|
+
Install model: **one canonical body under `.agents/skills`** plus relative symlinks into private host roots (Claude Code, MiMoCode, …) — same as [`npx skills`](https://github.com/vercel-labs/skills). See [INSTALL.md](./INSTALL.md).
|
|
31
31
|
|
|
32
32
|
**Version and manifest truth:** [`topmind-pack.json`](./topmind-pack.json) (`npm run versions`).
|
|
33
|
-
Each `SKILL.md` `version` **must** equal the pack version.
|
|
33
|
+
Each `SKILL.md` `metadata.version` **must** equal the pack version.
|
|
34
34
|
|
|
35
35
|
---
|
|
36
36
|
|
|
@@ -42,7 +42,6 @@ topmind-skills/ # pack root = repo root
|
|
|
42
42
|
├── topmind-capture|organize|write|memory|maintain|loop/
|
|
43
43
|
├── topmind-weread|x/ # optional connectors
|
|
44
44
|
├── topmind-ledger/ # optional bookkeeping (memory-plane ledgers)
|
|
45
|
-
├── topmind-wechat/ # optional WeChat write sub-skill (not a peer entry)
|
|
46
45
|
├── shared/ # write receipts · degradation · auto-suggest · capture …
|
|
47
46
|
├── install-targets/ # host install shapes
|
|
48
47
|
├── evals/evals.json
|
|
@@ -56,7 +55,8 @@ topmind-skills/ # pack root = repo root
|
|
|
56
55
|
| **Entry** | `topmind` only |
|
|
57
56
|
| **Actions** | capture · organize · write · memory · maintain · loop |
|
|
58
57
|
| **Connectors** | weread · x (optional) |
|
|
59
|
-
| **Optional** |
|
|
58
|
+
| **Optional** | ledger (记账 · memory-plane books) |
|
|
59
|
+
| **External optional (not bundled)** | WeChat `topmind-wechat-post` and other writing skills (topmind-writing-skills) · `topmind-research` · `topmind-presentation` · `topmind-handoff`; routing in `shared/trigger-disambiguation.md` |
|
|
60
60
|
|
|
61
61
|
> Sub-skill trigger words exist for host routing. They are **not** a second product front door.
|
|
62
62
|
|
|
@@ -88,20 +88,24 @@ Workflow: `收进来 -> 继续做 -> 交付/沉淀 -> 找回/调整`
|
|
|
88
88
|
```yaml
|
|
89
89
|
---
|
|
90
90
|
name: <kebab-case-id> # required; matches directory name
|
|
91
|
-
|
|
92
|
-
description: >- # required; Use when + Do not use
|
|
91
|
+
description: >- # required; what + Use when + Do NOT use
|
|
93
92
|
…
|
|
94
|
-
action_category: capture # skill taxonomy (not user note category)
|
|
95
|
-
triggers: [...]
|
|
96
|
-
entrypoint: false # only topmind router is true
|
|
97
|
-
author: TopMindSpace
|
|
98
93
|
license: MIT
|
|
99
|
-
|
|
100
|
-
|
|
94
|
+
compatibility: … # optional; environment notes (≤500 chars)
|
|
95
|
+
metadata: # Agent Skills spec: custom fields live here, string values
|
|
96
|
+
version: "<pack.version>" # required; = topmind-pack.json version
|
|
97
|
+
action_category: "capture" # skill taxonomy (not user note category)
|
|
98
|
+
entrypoint: "false" # only the topmind router is "true"
|
|
99
|
+
triggers: "记一下, 收进, capture" # comma-separated
|
|
100
|
+
tags: "capture, inbox"
|
|
101
|
+
author: "TopMindSpace"
|
|
102
|
+
homepage: "https://github.com/topmindspace/topmind-skills"
|
|
103
|
+
updated: "YYYY-MM-DD"
|
|
104
|
+
degradation: "../shared/capability-degradation.md"
|
|
101
105
|
---
|
|
102
106
|
```
|
|
103
107
|
|
|
104
|
-
|
|
108
|
+
Top level allows only `name / description / license / compatibility / metadata / allowed-tools`; CI runs the official validator `agentskills validate` (skills-ref) on every skill, and `tests/package-manifest.test.mjs` enforces fields and versions. The topmind Desktop parser reads both the legacy top-level layout and `metadata.*`.
|
|
105
109
|
|
|
106
110
|
---
|
|
107
111
|
|
|
@@ -165,7 +169,7 @@ Full rules: [`shared/project-model-brief.md`](./shared/project-model-brief.md).
|
|
|
165
169
|
|
|
166
170
|
## Install targets
|
|
167
171
|
|
|
168
|
-
Packaged skill directories (7 core + 2 optional connectors + optional ledger
|
|
172
|
+
Packaged skill directories (7 core + 2 optional connectors + optional ledger; since 4.15.2 WeChat comes from `topmind-wechat-post` in the writing pack) can be symlinked/copied into Claude Code, Codex, OpenCode, Hermes, and similar hosts.
|
|
169
173
|
Prefer the pack-aware installer so `shared/` and `topmind-pack.json` stay intact — see [`INSTALL.md`](./INSTALL.md).
|
|
170
174
|
|
|
171
175
|
Host adapters must **not** change content truth, add parallel daily entries, or store content in agent runtime state. See [`shared/capability-degradation.md`](./shared/capability-degradation.md).
|
package/README.md
CHANGED
|
@@ -27,10 +27,10 @@ node bin/install-skills.mjs agents
|
|
|
27
27
|
node bin/install-skills.mjs doctor --repair
|
|
28
28
|
```
|
|
29
29
|
|
|
30
|
-
安装模型:**canonical `.agents/skills` 一份真身** + 私有目录(Claude Code / MiMoCode…)相对软链;与 [`npx skills`](https://github.com/vercel-labs/skills)
|
|
30
|
+
安装模型:**canonical `.agents/skills` 一份真身** + 私有目录(Claude Code / MiMoCode…)相对软链;与 [`npx skills`](https://github.com/vercel-labs/skills) 一致。详见 [INSTALL.md](./INSTALL.md)。
|
|
31
31
|
|
|
32
32
|
**版本与清单真源:** [`topmind-pack.json`](./topmind-pack.json)(`npm run versions`)。
|
|
33
|
-
各 `SKILL.md` 的 `version` **必须**等于 pack 版本。
|
|
33
|
+
各 `SKILL.md` 的 `metadata.version` **必须**等于 pack 版本。
|
|
34
34
|
|
|
35
35
|
---
|
|
36
36
|
|
|
@@ -42,7 +42,6 @@ topmind-skills/ # pack 根 = 仓库根
|
|
|
42
42
|
├── topmind-capture|organize|write|memory|maintain|loop/
|
|
43
43
|
├── topmind-weread|x/ # 可选连接器
|
|
44
44
|
├── topmind-ledger/ # 可选记账(记忆平面账本)
|
|
45
|
-
├── topmind-wechat/ # 可选公众号 write 子技能(不是并列入口)
|
|
46
45
|
├── shared/ # 写回回执 · 降级 · 自动建议 · 捕获 …
|
|
47
46
|
├── install-targets/ # Host 安装形状(claude-code / codex / mimocode / …)
|
|
48
47
|
├── evals/evals.json
|
|
@@ -56,7 +55,8 @@ topmind-skills/ # pack 根 = 仓库根
|
|
|
56
55
|
| **入口** | `topmind` only |
|
|
57
56
|
| **动作** | capture · organize · write · memory · maintain · loop |
|
|
58
57
|
| **连接器** | weread · x(可选) |
|
|
59
|
-
| **可选** |
|
|
58
|
+
| **可选** | ledger(记账 · 记忆平面账本) |
|
|
59
|
+
| **外部可选(不随包)** | 公众号 `topmind-wechat-post` 等写作技能(topmind-writing-skills)· `topmind-research` · `topmind-presentation` · `topmind-handoff`;路由见 `shared/trigger-disambiguation.md` |
|
|
60
60
|
|
|
61
61
|
> 子 skill 触发词只服务 Host 路由,**不是**第二前台入口。
|
|
62
62
|
|
|
@@ -88,21 +88,25 @@ Suggestions: L0 auto-land · L1 auto-prepare · L2 confirm-apply — sha
|
|
|
88
88
|
|
|
89
89
|
```yaml
|
|
90
90
|
---
|
|
91
|
-
name: <kebab-case-id> #
|
|
92
|
-
|
|
93
|
-
description: >- # required; Use when + Do not use
|
|
91
|
+
name: <kebab-case-id> # 必填;与目录名一致
|
|
92
|
+
description: >- # 必填;做什么 + Use when + Do NOT use
|
|
94
93
|
…
|
|
95
|
-
action_category: capture # skill taxonomy (not user note category)
|
|
96
|
-
triggers: [...]
|
|
97
|
-
entrypoint: false # only topmind router is true
|
|
98
|
-
author: TopMindSpace
|
|
99
94
|
license: MIT
|
|
100
|
-
|
|
101
|
-
|
|
95
|
+
compatibility: … # 可选;运行环境说明(≤500 字符)
|
|
96
|
+
metadata: # Agent Skills 规范:自定义字段一律放这里,值为字符串
|
|
97
|
+
version: "<pack.version>" # 必填;= topmind-pack.json version
|
|
98
|
+
action_category: "capture" # skill 分类(不是用户笔记的 category)
|
|
99
|
+
entrypoint: "false" # 只有 topmind router 是 "true"
|
|
100
|
+
triggers: "记一下, 收进, capture" # 逗号分隔
|
|
101
|
+
tags: "capture, inbox"
|
|
102
|
+
author: "TopMindSpace"
|
|
103
|
+
homepage: "https://github.com/topmindspace/topmind-skills"
|
|
104
|
+
updated: "YYYY-MM-DD"
|
|
105
|
+
degradation: "../shared/capability-degradation.md"
|
|
102
106
|
---
|
|
103
107
|
```
|
|
104
108
|
|
|
105
|
-
|
|
109
|
+
顶层只允许 `name / description / license / compatibility / metadata / allowed-tools`,CI 用官方校验器 `agentskills validate`(skills-ref)逐个检查;字段与版本由 `tests/package-manifest.test.mjs` 强制校验。topmind Desktop 的解析器同时认顶层旧写法与 `metadata.*`。一个 pack JSON([`topmind-pack.json`](./topmind-pack.json)),无 per-skill 第二清单。
|
|
106
110
|
|
|
107
111
|
---
|
|
108
112
|
|
|
@@ -166,7 +170,7 @@ degradation: ../shared/capability-degradation.md
|
|
|
166
170
|
|
|
167
171
|
## 安装目标
|
|
168
172
|
|
|
169
|
-
已打包的 skill 目录(7 个核心 + 2 个可选连接器 +
|
|
173
|
+
已打包的 skill 目录(7 个核心 + 2 个可选连接器 + 可选记账;4.15.2 起公众号改由写作包的 `topmind-wechat-post` 提供)可以符号链接或复制到 Claude Code、Codex、OpenCode、Hermes 等。
|
|
170
174
|
优先使用 npm / pack-aware 安装器,保证 `shared/` 与 `topmind-pack.json` 完整 — 见 [`INSTALL.md`](./INSTALL.md)。
|
|
171
175
|
|
|
172
176
|
```bash
|
package/README.zh-CN.md
CHANGED
|
@@ -27,10 +27,10 @@ node bin/install-skills.mjs agents
|
|
|
27
27
|
node bin/install-skills.mjs doctor --repair
|
|
28
28
|
```
|
|
29
29
|
|
|
30
|
-
安装模型:**canonical `.agents/skills` 一份真身** + 私有目录(Claude Code / MiMoCode…)相对软链;与 [`npx skills`](https://github.com/vercel-labs/skills)
|
|
30
|
+
安装模型:**canonical `.agents/skills` 一份真身** + 私有目录(Claude Code / MiMoCode…)相对软链;与 [`npx skills`](https://github.com/vercel-labs/skills) 一致。详见 [INSTALL.md](./INSTALL.md)。
|
|
31
31
|
|
|
32
32
|
**版本与清单真源:** [`topmind-pack.json`](./topmind-pack.json)(`npm run versions`)。
|
|
33
|
-
各 `SKILL.md` 的 `version` **必须**等于 pack 版本。
|
|
33
|
+
各 `SKILL.md` 的 `metadata.version` **必须**等于 pack 版本。
|
|
34
34
|
|
|
35
35
|
---
|
|
36
36
|
|
|
@@ -42,7 +42,6 @@ topmind-skills/ # pack 根 = 仓库根
|
|
|
42
42
|
├── topmind-capture|organize|write|memory|maintain|loop/
|
|
43
43
|
├── topmind-weread|x/ # 可选连接器
|
|
44
44
|
├── topmind-ledger/ # 可选记账(记忆平面账本)
|
|
45
|
-
├── topmind-wechat/ # 可选公众号 write 子技能(不是并列入口)
|
|
46
45
|
├── shared/ # 写回回执 · 降级 · 自动建议 · 捕获 …
|
|
47
46
|
├── install-targets/ # Host 安装形状(claude-code / codex / mimocode / …)
|
|
48
47
|
├── evals/evals.json
|
|
@@ -56,7 +55,8 @@ topmind-skills/ # pack 根 = 仓库根
|
|
|
56
55
|
| **入口** | `topmind` only |
|
|
57
56
|
| **动作** | capture · organize · write · memory · maintain · loop |
|
|
58
57
|
| **连接器** | weread · x(可选) |
|
|
59
|
-
| **可选** |
|
|
58
|
+
| **可选** | ledger(记账 · 记忆平面账本) |
|
|
59
|
+
| **外部可选(不随包)** | 公众号 `topmind-wechat-post` 等写作技能(topmind-writing-skills)· `topmind-research` · `topmind-presentation` · `topmind-handoff`;路由见 `shared/trigger-disambiguation.md` |
|
|
60
60
|
|
|
61
61
|
> 子 skill 触发词只服务 Host 路由,**不是**第二前台入口。
|
|
62
62
|
|
|
@@ -88,21 +88,25 @@ Suggestions: L0 auto-land · L1 auto-prepare · L2 confirm-apply — sha
|
|
|
88
88
|
|
|
89
89
|
```yaml
|
|
90
90
|
---
|
|
91
|
-
name: <kebab-case-id> #
|
|
92
|
-
|
|
93
|
-
description: >- # required; Use when + Do not use
|
|
91
|
+
name: <kebab-case-id> # 必填;与目录名一致
|
|
92
|
+
description: >- # 必填;做什么 + Use when + Do NOT use
|
|
94
93
|
…
|
|
95
|
-
action_category: capture # skill taxonomy (not user note category)
|
|
96
|
-
triggers: [...]
|
|
97
|
-
entrypoint: false # only topmind router is true
|
|
98
|
-
author: TopMindSpace
|
|
99
94
|
license: MIT
|
|
100
|
-
|
|
101
|
-
|
|
95
|
+
compatibility: … # 可选;运行环境说明(≤500 字符)
|
|
96
|
+
metadata: # Agent Skills 规范:自定义字段一律放这里,值为字符串
|
|
97
|
+
version: "<pack.version>" # 必填;= topmind-pack.json version
|
|
98
|
+
action_category: "capture" # skill 分类(不是用户笔记的 category)
|
|
99
|
+
entrypoint: "false" # 只有 topmind router 是 "true"
|
|
100
|
+
triggers: "记一下, 收进, capture" # 逗号分隔
|
|
101
|
+
tags: "capture, inbox"
|
|
102
|
+
author: "TopMindSpace"
|
|
103
|
+
homepage: "https://github.com/topmindspace/topmind-skills"
|
|
104
|
+
updated: "YYYY-MM-DD"
|
|
105
|
+
degradation: "../shared/capability-degradation.md"
|
|
102
106
|
---
|
|
103
107
|
```
|
|
104
108
|
|
|
105
|
-
|
|
109
|
+
顶层只允许 `name / description / license / compatibility / metadata / allowed-tools`,CI 用官方校验器 `agentskills validate`(skills-ref)逐个检查;字段与版本由 `tests/package-manifest.test.mjs` 强制校验。topmind Desktop 的解析器同时认顶层旧写法与 `metadata.*`。一个 pack JSON([`topmind-pack.json`](./topmind-pack.json)),无 per-skill 第二清单。
|
|
106
110
|
|
|
107
111
|
---
|
|
108
112
|
|
|
@@ -166,7 +170,7 @@ degradation: ../shared/capability-degradation.md
|
|
|
166
170
|
|
|
167
171
|
## 安装目标
|
|
168
172
|
|
|
169
|
-
已打包的 skill 目录(7 个核心 + 2 个可选连接器 +
|
|
173
|
+
已打包的 skill 目录(7 个核心 + 2 个可选连接器 + 可选记账;4.15.2 起公众号改由写作包的 `topmind-wechat-post` 提供)可以符号链接或复制到 Claude Code、Codex、OpenCode、Hermes 等。
|
|
170
174
|
优先使用 npm / pack-aware 安装器,保证 `shared/` 与 `topmind-pack.json` 完整 — 见 [`INSTALL.md`](./INSTALL.md)。
|
|
171
175
|
|
|
172
176
|
```bash
|
package/bin/install-skills.mjs
CHANGED
|
@@ -624,14 +624,22 @@ async function listInstallEntries(skillsRoot, skillsFilter) {
|
|
|
624
624
|
let version = "unknown";
|
|
625
625
|
let name = "skills";
|
|
626
626
|
let ids = [];
|
|
627
|
+
const topmindPack = await pathExists(packPath);
|
|
627
628
|
|
|
628
|
-
if (
|
|
629
|
+
if (topmindPack) {
|
|
629
630
|
const pack = JSON.parse(await fs.readFile(packPath, "utf8"));
|
|
630
631
|
version = pack.version || version;
|
|
631
632
|
name = pack.name || name;
|
|
632
633
|
ids = (pack.skills || []).map((s) => s.id || s.path).filter(Boolean);
|
|
633
634
|
} else {
|
|
634
|
-
// bare Agent Skills layout
|
|
635
|
+
// bare Agent Skills layout (external pack, e.g. topmind-writing-skills)
|
|
636
|
+
try {
|
|
637
|
+
const pkg = JSON.parse(await fs.readFile(path.join(skillsRoot, "package.json"), "utf8"));
|
|
638
|
+
if (pkg.version) version = pkg.version;
|
|
639
|
+
if (pkg.name) name = String(pkg.name).replace(/^@[^/]+\//u, "");
|
|
640
|
+
} catch {
|
|
641
|
+
name = path.basename(skillsRoot) || name;
|
|
642
|
+
}
|
|
635
643
|
const entries = await fs.readdir(skillsRoot, { withFileTypes: true });
|
|
636
644
|
for (const e of entries) {
|
|
637
645
|
if (e.isDirectory() && (await pathExists(path.join(skillsRoot, e.name, "SKILL.md")))) {
|
|
@@ -646,6 +654,21 @@ async function listInstallEntries(skillsRoot, skillsFilter) {
|
|
|
646
654
|
}
|
|
647
655
|
|
|
648
656
|
const entries = new Set(ids);
|
|
657
|
+
if (!topmindPack) {
|
|
658
|
+
// External single-skill packs: install only the skill dirs. Repo-level evals/,
|
|
659
|
+
// LICENSE, README, INSTALL, install-targets stay out of the host skills root
|
|
660
|
+
// (they would collide with other packs). shared/ only when a SKILL.md links it.
|
|
661
|
+
if (await pathExists(path.join(skillsRoot, "shared"))) {
|
|
662
|
+
for (const id of ids) {
|
|
663
|
+
const body = await fs.readFile(path.join(skillsRoot, id, "SKILL.md"), "utf8").catch(() => "");
|
|
664
|
+
if (body.includes("../shared/")) {
|
|
665
|
+
entries.add("shared");
|
|
666
|
+
break;
|
|
667
|
+
}
|
|
668
|
+
}
|
|
669
|
+
}
|
|
670
|
+
return { version, name, entries: [...entries], skillIds: ids, topmindPack };
|
|
671
|
+
}
|
|
649
672
|
// Pack support files (needed for progressive disclosure)
|
|
650
673
|
if (!skillsFilter) {
|
|
651
674
|
for (const e of ["shared", "install-targets", "evals"]) {
|
|
@@ -660,7 +683,7 @@ async function listInstallEntries(skillsRoot, skillsFilter) {
|
|
|
660
683
|
if (await pathExists(path.join(skillsRoot, "topmind-pack.json"))) entries.add("topmind-pack.json");
|
|
661
684
|
}
|
|
662
685
|
|
|
663
|
-
return { version, name, entries: [...entries], skillIds: ids };
|
|
686
|
+
return { version, name, entries: [...entries], skillIds: ids, topmindPack };
|
|
664
687
|
}
|
|
665
688
|
|
|
666
689
|
async function applyLocaleOverlay(overlayDir, targetDir) {
|
|
@@ -724,6 +747,13 @@ async function installSymlink(skillsRoot, dest, entries, { force }) {
|
|
|
724
747
|
}
|
|
725
748
|
}
|
|
726
749
|
|
|
750
|
+
/** topmind pack keeps RECEIPT_NAME; external packs get their own file so they never overwrite it. */
|
|
751
|
+
function receiptFileName(meta) {
|
|
752
|
+
if (meta.topmindPack !== false) return RECEIPT_NAME;
|
|
753
|
+
const slug = String(meta.name || "external").replace(/[^A-Za-z0-9._-]+/gu, "-");
|
|
754
|
+
return RECEIPT_NAME.replace(/\.json$/u, `.${slug}.json`);
|
|
755
|
+
}
|
|
756
|
+
|
|
727
757
|
async function writeInstallReceipt(dest, meta) {
|
|
728
758
|
const receipt = {
|
|
729
759
|
schema: 2,
|
|
@@ -750,7 +780,7 @@ async function writeInstallReceipt(dest, meta) {
|
|
|
750
780
|
agents: meta.agents || null,
|
|
751
781
|
},
|
|
752
782
|
};
|
|
753
|
-
await fs.writeFile(path.join(dest,
|
|
783
|
+
await fs.writeFile(path.join(dest, receiptFileName(meta)), JSON.stringify(receipt, null, 2) + "\n", "utf8");
|
|
754
784
|
}
|
|
755
785
|
|
|
756
786
|
/** Relative-symlink each pack entry from an agent root back to the canonical body. */
|
|
@@ -842,11 +872,16 @@ async function installViaMatrix(skillsRoot, plan, opts) {
|
|
|
842
872
|
agents: targets.map((t) => t.agent.id),
|
|
843
873
|
skillIds: plan.skillIds,
|
|
844
874
|
locale: opts.locale,
|
|
875
|
+
topmindPack: plan.topmindPack,
|
|
845
876
|
});
|
|
846
877
|
|
|
847
878
|
log(`done → ${canonical}`);
|
|
848
|
-
|
|
849
|
-
|
|
879
|
+
if (plan.topmindPack) {
|
|
880
|
+
log(`daily entry: ${path.join(canonical, "topmind", "SKILL.md")}`);
|
|
881
|
+
log(`update later: node bin/install-skills.mjs update -g`);
|
|
882
|
+
} else {
|
|
883
|
+
log(`update later: re-run add ${opts.source || "<source>"} (update only follows the topmind pack receipt)`);
|
|
884
|
+
}
|
|
850
885
|
return { canonical, targets, plan };
|
|
851
886
|
}
|
|
852
887
|
|
|
@@ -994,11 +1029,16 @@ async function cmdAdd(opts, sourceOverride) {
|
|
|
994
1029
|
agents: opts.agents,
|
|
995
1030
|
skillIds: plan.skillIds,
|
|
996
1031
|
locale: opts.locale,
|
|
1032
|
+
topmindPack: plan.topmindPack,
|
|
997
1033
|
});
|
|
998
1034
|
|
|
999
1035
|
log(`done → ${dest}`);
|
|
1000
|
-
|
|
1001
|
-
|
|
1036
|
+
if (plan.topmindPack) {
|
|
1037
|
+
log(`daily entry: ${path.join(dest, "topmind", "SKILL.md")}`);
|
|
1038
|
+
log(`update later: node bin/install-skills.mjs update --dest ${dest}`);
|
|
1039
|
+
} else {
|
|
1040
|
+
log(`update later: re-run add ${sourceRaw} --dest ${dest} (update only follows the topmind pack receipt)`);
|
|
1041
|
+
}
|
|
1002
1042
|
} finally {
|
|
1003
1043
|
await fs.rm(tmpRoot, { recursive: true, force: true }).catch(() => {});
|
|
1004
1044
|
}
|
package/evals/evals.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"skill_name": "topmind",
|
|
3
3
|
"daily_entry": "topmind",
|
|
4
|
-
"version": "4.15.
|
|
4
|
+
"version": "4.15.3",
|
|
5
5
|
"evals": [
|
|
6
6
|
{
|
|
7
7
|
"id": 1,
|
|
@@ -130,10 +130,10 @@
|
|
|
130
130
|
},
|
|
131
131
|
{
|
|
132
132
|
"id": 18,
|
|
133
|
-
"prompt": "[schema validation] Verify all SKILL.md files
|
|
133
|
+
"prompt": "[schema validation] Verify all SKILL.md files pass the Agent Skills spec: top level only name, description, license, compatibility, metadata (allowed-tools); topmind fields metadata.version, metadata.action_category, metadata.triggers present as strings. Verify action_category values are within the enum. Verify name matches directory name in kebab-case.",
|
|
134
134
|
"primary_skill": "topmind-maintain",
|
|
135
135
|
"extra_skills": [],
|
|
136
|
-
"expected_output": "Validates frontmatter schema across all SKILL.md files (
|
|
136
|
+
"expected_output": "Validates frontmatter schema across all SKILL.md files (10 total: 7 core + 2 connector + optional ledger). Reports non-spec top-level keys, missing metadata fields, invalid action_category values, or name/directory mismatches; agentskills validate passes on every skill."
|
|
137
137
|
},
|
|
138
138
|
{
|
|
139
139
|
"id": 19,
|
|
@@ -275,6 +275,88 @@
|
|
|
275
275
|
"primary_skill": "topmind",
|
|
276
276
|
"extra_skills": [],
|
|
277
277
|
"expected_output": "Router splits into ordered steps per shared/trigger-disambiguation.md: official announcements, technical reports and papers → optional external topmind-research (collect); community discussion → optional external last30days. Does not route to topmind-organize 整理本周 (that phrase means the workspace stream category) and does not use TopStream每日精选 unless the user asks for the daily digest. Any skill that is not installed falls back to topmind-organize on saved workspace materials, and the receipt says so. Each step returns its own receipt; no auto chaining."
|
|
278
|
+
},
|
|
279
|
+
{
|
|
280
|
+
"id": 38,
|
|
281
|
+
"prompt": "帮我把这篇稿子排成公众号格式,定稿发公众号。",
|
|
282
|
+
"primary_skill": "topmind",
|
|
283
|
+
"extra_skills": [],
|
|
284
|
+
"external_skills": [
|
|
285
|
+
"topmind-wechat-post"
|
|
286
|
+
],
|
|
287
|
+
"expected_output": "Router follows shared/trigger-disambiguation.md: 公众号 / 微信排版 / 定稿发公众号 → optional external topmind-wechat-post (topmind-writing-skills) when installed; it builds the delivery package, runs the quality gates and produces WeChat HTML, and does not publish on the user's behalf. If topmind-wechat-post is not installed → topmind-write with a receipt suggesting the optional install. Never routes to the retired bundled topmind-wechat."
|
|
288
|
+
},
|
|
289
|
+
{
|
|
290
|
+
"id": 39,
|
|
291
|
+
"prompt": "写一篇公众号文章,然后直接帮我发出去。",
|
|
292
|
+
"primary_skill": "topmind",
|
|
293
|
+
"extra_skills": [],
|
|
294
|
+
"external_skills": [
|
|
295
|
+
"topmind-wechat-post"
|
|
296
|
+
],
|
|
297
|
+
"expected_output": "Writes via topmind-wechat-post when installed; if it is not installed → topmind-write. Publishing is not performed: the receipt says the skill only produces the draft and the user publishes in the WeChat backend; no auto-send."
|
|
298
|
+
},
|
|
299
|
+
{
|
|
300
|
+
"id": 40,
|
|
301
|
+
"prompt": "把这周的模型发布整理成一篇干货短文,数据要准。",
|
|
302
|
+
"primary_skill": "topmind",
|
|
303
|
+
"extra_skills": [],
|
|
304
|
+
"external_skills": [
|
|
305
|
+
"topmind-briefs"
|
|
306
|
+
],
|
|
307
|
+
"expected_output": "Information-dense short post → optional external topmind-briefs; not topmind-viral-posts (that is for hook / engagement posts). Not installed → topmind-write. No posting without explicit user confirmation."
|
|
308
|
+
},
|
|
309
|
+
{
|
|
310
|
+
"id": 41,
|
|
311
|
+
"prompt": "帮我写几条引流的短帖,带钩子,想涨粉。",
|
|
312
|
+
"primary_skill": "topmind",
|
|
313
|
+
"extra_skills": [],
|
|
314
|
+
"external_skills": [
|
|
315
|
+
"topmind-viral-posts"
|
|
316
|
+
],
|
|
317
|
+
"expected_output": "Engagement-style short posts → optional external topmind-viral-posts; not topmind-briefs. Not installed → topmind-write. Sending to X goes through topmind-x only after the user confirms each post."
|
|
318
|
+
},
|
|
319
|
+
{
|
|
320
|
+
"id": 42,
|
|
321
|
+
"prompt": "把这份笔记改写成一篇 X 长文,要能一键复制。",
|
|
322
|
+
"primary_skill": "topmind",
|
|
323
|
+
"extra_skills": [],
|
|
324
|
+
"external_skills": [
|
|
325
|
+
"topmind-x-article"
|
|
326
|
+
],
|
|
327
|
+
"expected_output": "X Articles long-form → optional external topmind-x-article; short posts never go to x-article. Not installed → topmind-write. topmind-x is only used to post, and only with user confirmation."
|
|
328
|
+
},
|
|
329
|
+
{
|
|
330
|
+
"id": 43,
|
|
331
|
+
"prompt": "做一份大模型推理成本的研究报告,最后做成可以翻页的幻灯片。",
|
|
332
|
+
"primary_skill": "topmind",
|
|
333
|
+
"extra_skills": [],
|
|
334
|
+
"external_skills": [
|
|
335
|
+
"topmind-research",
|
|
336
|
+
"topmind-presentation"
|
|
337
|
+
],
|
|
338
|
+
"expected_output": "Ordered steps per shared/trigger-disambiguation.md: evidence gathering and fact checking → optional external topmind-research first; the receipt suggests topmind-presentation for the HTML/PPTX deck. No auto chaining. If research is missing → topmind-organize on saved materials; if presentation is missing → topmind-write."
|
|
339
|
+
},
|
|
340
|
+
{
|
|
341
|
+
"id": 44,
|
|
342
|
+
"prompt": "把我的记忆和进行中的工作打包,换到另一个工具里接着用。",
|
|
343
|
+
"primary_skill": "topmind",
|
|
344
|
+
"extra_skills": [],
|
|
345
|
+
"external_skills": [
|
|
346
|
+
"topmind-handoff"
|
|
347
|
+
],
|
|
348
|
+
"expected_output": "Cross-tool export → optional external topmind-handoff; not topmind-memory (which only updates this workspace's 我的情况) and not topmind-write export. If handoff is not installed, the receipt says so and nothing is packed automatically."
|
|
349
|
+
},
|
|
350
|
+
{
|
|
351
|
+
"id": 45,
|
|
352
|
+
"prompt": "给这篇文章做一张封面,再出一张长图海报。",
|
|
353
|
+
"primary_skill": "topmind",
|
|
354
|
+
"extra_skills": [],
|
|
355
|
+
"external_skills": [
|
|
356
|
+
"topmind-cover",
|
|
357
|
+
"topmind-poster"
|
|
358
|
+
],
|
|
359
|
+
"expected_output": "Cover / header image → optional external topmind-cover; long vertical poster → optional external topmind-poster; a paged deck would be topmind-presentation. Each step returns its own receipt. Skills that are not installed are reported, not improvised."
|
|
278
360
|
}
|
|
279
361
|
]
|
|
280
362
|
}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@topmindspace/topmind-skills",
|
|
3
|
-
"version": "4.15.
|
|
4
|
-
"description": "topmind Agent Skills pack —
|
|
3
|
+
"version": "4.15.3",
|
|
4
|
+
"description": "topmind Agent Skills pack — spec-valid Markdown skills for capture, organize, write, memory, maintain, loop.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"author": "TopMindSpace",
|
|
@@ -31,7 +31,6 @@
|
|
|
31
31
|
"topmind-maintain/",
|
|
32
32
|
"topmind-memory/",
|
|
33
33
|
"topmind-organize/",
|
|
34
|
-
"topmind-wechat/",
|
|
35
34
|
"topmind-weread/",
|
|
36
35
|
"topmind-write/",
|
|
37
36
|
"topmind-x/",
|
|
@@ -41,6 +40,7 @@
|
|
|
41
40
|
"README.md",
|
|
42
41
|
"README.zh-CN.md",
|
|
43
42
|
"README.en.md",
|
|
43
|
+
"CHANGELOG.md",
|
|
44
44
|
"LICENSE"
|
|
45
45
|
],
|
|
46
46
|
"engines": {
|