@topmindspace/topmind-skills 4.15.4 → 4.15.6

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/README.zh-CN.md CHANGED
@@ -1,180 +1,3 @@
1
- # topmind Skills
1
+ # topmind-skills
2
2
 
3
- 可移植 AI 技能包:在 Claude Code / Codex / OpenCode / Hermes 等 Host 上使用同一套内容约定。
4
-
5
- [简体中文](README.md) · [English](README.en.md) · [产品总览](https://github.com/topmindspace/topmind) · [安装与发布](./INSTALL.md) · [npm](https://www.npmjs.com/package/@topmindspace/topmind-skills)
6
-
7
- ```bash
8
- # 1) npm(推荐 · pack-aware · 含 shared/ · canonical .agents + 多智能体)
9
- npx @topmindspace/topmind-skills add topmindspace/topmind-skills -g
10
- # 只装给部分智能体
11
- npx @topmindspace/topmind-skills add topmindspace/topmind-skills -g -a claude-code -a mimocode
12
- # 升级
13
- npx @topmindspace/topmind-skills update -g
14
-
15
- # 2) 社区 CLI(快速试用;不含 shared/ — 见 INSTALL.md)
16
- npx skills add topmindspace/topmind-skills -g -y
17
-
18
- # 3) Pack-aware 安装器(源码仓内)
19
- npm run add -- topmindspace/topmind-skills -g
20
- npm run update -- -g
21
-
22
- # 4) 从 GitHub Release 装(离线/固定版本)
23
- node bin/install-skills.mjs add release:latest -g
24
-
25
- # 查看矩阵 / 修断链
26
- node bin/install-skills.mjs agents
27
- node bin/install-skills.mjs doctor --repair
28
- ```
29
-
30
- 安装模型:**canonical `.agents/skills` 一份真身** + 私有目录(Claude Code / MiMoCode…)相对软链;与 [`npx skills`](https://github.com/vercel-labs/skills) 一致。详见 [INSTALL.md](./INSTALL.md)。
31
-
32
- **版本与清单真源:** [`topmind-pack.json`](./topmind-pack.json)(`npm run versions`)。
33
- 各 `SKILL.md` 的 `metadata.version` **必须**等于 pack 版本。
34
-
35
- ---
36
-
37
- ## 结构
38
-
39
- ```text
40
- topmind-skills/ # pack 根 = 仓库根
41
- ├── topmind/ # 唯一日常入口(router)
42
- ├── topmind-capture|organize|write|memory|maintain|loop/
43
- ├── topmind-weread|x/ # 可选连接器
44
- ├── topmind-ledger/ # 可选记账(记忆平面账本)
45
- ├── shared/ # 写回回执 · 降级 · 自动建议 · 捕获 …
46
- ├── install-targets/ # Host 安装形状(claude-code / codex / mimocode / …)
47
- ├── evals/evals.json
48
- ├── bin/install-skills.mjs # pack-aware + agent matrix 安装器
49
- ├── scripts/build-pack.mjs
50
- └── topmind-pack.json # 版本真源
51
- ```
52
-
53
- | 类型 | 模块 |
54
- |------|------|
55
- | **入口** | `topmind` only |
56
- | **动作** | capture · organize · write · memory · maintain · loop |
57
- | **连接器** | weread · x(可选) |
58
- | **可选** | ledger(记账 · 记忆平面账本) |
59
- | **外部可选(不随包)** | 公众号 `topmind-wechat-post` 等写作技能(topmind-writing-skills)· `topmind-research` · `topmind-presentation` · `topmind-handoff`;路由见 `shared/trigger-disambiguation.md` |
60
-
61
- > 子 skill 触发词只服务 Host 路由,**不是**第二前台入口。
62
-
63
- ---
64
-
65
- ## 产品契约
66
-
67
- ```text
68
- User experience: capture-first
69
- Data organization: category-first + topic-emerges
70
- Content truth: topmind-workspace
71
- Capability model: action-first
72
- Save settings: auto | confirm
73
- Safety model: reversible by default
74
- Suggestions: L0 auto-land · L1 auto-prepare · L2 confirm-apply — shared/auto-suggest.md
75
- ```
76
-
77
- 日常入口只暴露 `topmind`。Host 会话状态不得成为 topmind 内容真源。
78
- 本 pack **不要求 Desktop**。**UTR 可选** — 没有 UTR 时用 Host 文件工具。
79
-
80
- 工作流:`收进来 -> 继续做 -> 交付/沉淀 -> 找回/调整`
81
- (用户说「收一下」「记一下」「整理」「写成稿」「跑一遍 loop」— router 推断类别 / 专题 / 动作。)
82
-
83
- **想记就记 / 随用随记**:捕获零提问落盘(L0);分类备选 / 待办 / 记忆候选默认 L1 准备——显式行动语待办在 auto 下同轮写入 `memory/todo.md`,其余建议点头再落([`shared/auto-suggest.md`](./shared/auto-suggest.md))。
84
-
85
- ---
86
-
87
- ## SKILL.md frontmatter
88
-
89
- ```yaml
90
- ---
91
- name: <kebab-case-id> # 必填;与目录名一致
92
- description: >- # 必填;做什么 + Use when + Do NOT use
93
- …
94
- license: MIT
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"
106
- ---
107
- ```
108
-
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 第二清单。
110
-
111
- ---
112
-
113
- ## 工作区契约
114
-
115
- ```text
116
- {workspace-root}/
117
- ├── topmind.yaml # contract v4
118
- ├── memory/ # profile.md · periodic/ · topics/ · todo.md · 可选 ledgers/
119
- ├── .topmind/ # rebuildable machine state
120
- ├── 00-Inbox/ # role: buffer (live dir name)
121
- ├── 10-动态/ … # categories (template-driven)
122
- ├── 88-交付/ or 88-Delivery/ # role: delivery
123
- └── 99-归档/ or 99-Archive/ # role: system
124
- ```
125
-
126
- 专题:
127
-
128
- ```text
129
- {category}/{YYYY-theme}/
130
- ├── topic.md # optional
131
- ├── *.md # notes at topic root
132
- └── images/ # optional
133
- ```
134
-
135
- 尚无专题时,散篇放在 `{category}/{note}.md`。
136
-
137
- **不要创建(已废弃):** 默认 `outline.md` / `setting.md` / `style.md`;`project_type` frontmatter;专题内嵌套 `notes/` 或 `outputs/`;顶层 `projects/`;`YYYY-类型-项目名` 命名。
138
-
139
- **类别:** 运行时发现 `{NN-Name}/` + `topmind.yaml` v4(`categories.extensions` / `categories.overrides` 含 `hidden`)。共享解析器:引擎 `lib/workspace-model.mjs`。优先按角色路由,不要写死 `10-` / `20-` 编号。
140
-
141
- 不要硬编码绝对路径 — 从 Host 推断 `workspace_root`,或向用户询问。
142
-
143
- ### 6 条核心规约
144
-
145
- 1. **大类不重叠**
146
- 2. **专题自然涌现**
147
- 3. **动态类特殊**(默认平铺)
148
- 4. **兜底类清理**(约 30 天)
149
- 5. **参考资料定位**
150
- 6. **大类命名稳定**(rename via migration)
151
-
152
- 完整规则:[`shared/project-model-brief.md`](./shared/project-model-brief.md)。
153
-
154
- ---
155
-
156
- ## 行为规则
157
-
158
- - 先捕获;不要因为分类不完美而挡住简单保存
159
- - 信号足够强时自动路由;否则走 **role:buffer**(现场 Inbox 目录,不要只写死 `00-Inbox/`)
160
- - 专题不清时,散篇放在大类根
161
- - 每次写入返回回执(路径、路由原因、下一步)
162
- - `source_type`: `user-original` | `external-capture` | `ai-derived`
163
- - UTR 可选 — Host 文件工具遵守同一契约
164
- - 保存设置协议:`writeback_mode: auto | confirm`
165
- - locked:auto 下可编辑(任务级首写快照);永久删 locked/core 仅用户
166
- - 本 pack 不要求 Desktop
167
- - **复合纪律(不改结构):** organize 把综合写回磁盘;write 先读可选 `topic.md`;memory 仅在明确确认后写;capture 从不改 `topic.md`;**不要**硬造 `INDEX.md` / 平行 wiki 树(见 `shared/project-model-brief.md`)
168
-
169
- ---
170
-
171
- ## 安装目标
172
-
173
- 已打包的 skill 目录(7 个核心 + 2 个可选连接器 + 可选记账;4.15.2 起公众号改由写作包的 `topmind-wechat-post` 提供)可以符号链接或复制到 Claude Code、Codex、OpenCode、Hermes 等。
174
- 优先使用 npm / pack-aware 安装器,保证 `shared/` 与 `topmind-pack.json` 完整 — 见 [`INSTALL.md`](./INSTALL.md)。
175
-
176
- ```bash
177
- npx @topmindspace/topmind-skills add topmindspace/topmind-skills -g
178
- ```
179
-
180
- Host 适配器**不得**改变内容真源、新增并列日常入口,或把内容存进 agent 运行态。见 [`shared/capability-degradation.md`](./shared/capability-degradation.md)。
3
+ 中文说明就是 [README.md](./README.md),本文件只做跳转,内容不再单独维护。English: [README.en.md](./README.en.md)。
@@ -32,7 +32,7 @@
32
32
  * --skill <id> Only install these skill ids (repeatable / comma-separated)
33
33
  * --global / -g Alias: --host claude-code (user-level ~/.claude/skills)
34
34
  * --dry-run Print plan only
35
- * --force Replace non-symlink destinations when using symlink mode
35
+ * --force Downgrade / reinstall same version / replace unrelated folder in symlink mode
36
36
  *
37
37
  * Examples:
38
38
  * # Like `npx skills add topmindspace/topmind-skills -g`
@@ -250,7 +250,12 @@ Options:
250
250
  --skill <id> Only install these skill ids (repeatable / comma-separated)
251
251
  --locale <code> Install locale overlay (e.g. en-US); falls back to topmind_LOCALE env
252
252
  -n, --dry-run Print plan only
253
- --force Replace non-symlink destinations when using symlink mode
253
+ --force Allow downgrading a newer installed skill, reinstall an up-to-date one,
254
+ or replace an unrelated folder in symlink mode
255
+ Upgrade behaviour: a newer packaged skill overwrites the installed copy in place
256
+ (no backup, "Upgraded <skill> <old> -> <new>"); the same version is skipped
257
+ ("Already up to date"); a newer installed version is refused unless --force.
258
+ In symlink mode a previous plain-folder install of the same skill is replaced.
254
259
 
255
260
  Examples:
256
261
  node bin/install-skills.mjs add topmindspace/topmind-skills -g
@@ -701,12 +706,75 @@ async function applyLocaleOverlay(overlayDir, targetDir) {
701
706
  }
702
707
  }
703
708
 
704
- async function installCopy(skillsRoot, dest, entries, locale) {
709
+ /** Read name + version from <dir>/SKILL.md frontmatter (metadata.version or top-level version). */
710
+ async function readSkillMeta(dir) {
711
+ try {
712
+ const t = await fs.readFile(path.join(dir, "SKILL.md"), "utf8");
713
+ const fm = (t.match(/^---\r?\n([\s\S]*?)\r?\n---/) || [])[1] || "";
714
+ const name = ((fm.match(/^name:\s*(.+?)\s*$/m) || [])[1] || "").replace(/^["']|["']$/g, "");
715
+ const v =
716
+ fm.match(/^metadata:\s*\n(?:[ \t]+.*\n)*?[ \t]+version:\s*(.+?)\s*$/m) || fm.match(/^version:\s*(.+?)\s*$/m);
717
+ return { name, version: v ? v[1].replace(/^["']|["']$/g, "") : "" };
718
+ } catch {
719
+ return null;
720
+ }
721
+ }
722
+
723
+ function parseVer(v) {
724
+ const m = String(v || "").trim().replace(/^v/, "").match(/^(\d+)\.(\d+)\.(\d+)/);
725
+ return m ? m.slice(1, 4).map(Number) : null;
726
+ }
727
+
728
+ /** a vs b: 1 / 0 / -1. Missing or unparseable b counts as oldest (upgrade). */
729
+ function compareVersions(a, b) {
730
+ const pa = parseVer(a);
731
+ const pb = parseVer(b);
732
+ if (!pb) return 1;
733
+ if (!pa) return -1;
734
+ for (let i = 0; i < 3; i++) if (pa[i] !== pb[i]) return pa[i] > pb[i] ? 1 : -1;
735
+ return 0;
736
+ }
737
+
738
+ /** Existing non-symlink dst is a previous install of this skill (same SKILL.md name) or an installer-owned file. */
739
+ async function isPreviousInstall(src, dst) {
740
+ const st = await fs.lstat(dst).catch(() => null);
741
+ if (!st) return false;
742
+ const sst = await fs.lstat(src).catch(() => null);
743
+ if (sst && sst.isFile() && st.isFile()) return true;
744
+ if (!st.isDirectory()) return false;
745
+ const a = await readSkillMeta(src);
746
+ const b = await readSkillMeta(dst);
747
+ return !!(a && b && a.name && a.name === b.name);
748
+ }
749
+
750
+ async function installCopy(skillsRoot, dest, entries, locale, { force = false } = {}) {
705
751
  await fs.mkdir(dest, { recursive: true });
752
+ // Pre-pass: never silently downgrade a skill that is newer than the packaged one.
753
+ const plan = new Map();
754
+ const newer = [];
755
+ for (const name of entries) {
756
+ const src = path.join(skillsRoot, name);
757
+ const dst = path.join(dest, name);
758
+ const sm = await readSkillMeta(src);
759
+ if (!sm) continue;
760
+ const dm = (await fs.lstat(dst).catch(() => null))?.isSymbolicLink() ? null : await readSkillMeta(dst);
761
+ if (!dm) continue;
762
+ const cmp = compareVersions(sm.version, dm.version);
763
+ plan.set(name, { cmp, old: dm.version || "unknown", now: sm.version || "unknown" });
764
+ if (cmp < 0) newer.push(`${name} ${dm.version} > ${sm.version}`);
765
+ }
766
+ if (newer.length && !force) {
767
+ fail(`installed version is newer than packaged (${newer.join(", ")}); not downgrading — pass --force to downgrade`);
768
+ }
706
769
  for (const name of entries) {
707
770
  const src = path.join(skillsRoot, name);
708
771
  const dst = path.join(dest, name);
709
772
  if (!(await pathExists(src))) continue;
773
+ const pv = plan.get(name);
774
+ if (pv && pv.cmp === 0 && !force) {
775
+ log(` = Already up to date: ${name} ${pv.now}`);
776
+ continue;
777
+ }
710
778
  const st = await fs.lstat(src);
711
779
  if (await pathExists(dst)) await fs.rm(dst, { recursive: true, force: true });
712
780
  if (st.isDirectory()) {
@@ -727,7 +795,9 @@ async function installCopy(skillsRoot, dest, entries, locale) {
727
795
  } else {
728
796
  await fs.copyFile(src, dst);
729
797
  }
730
- log(` + ${name}`);
798
+ if (pv && pv.cmp > 0) log(` ↑ Upgraded ${name} ${pv.old} -> ${pv.now}`);
799
+ else if (pv) log(` + Reinstalled ${name} ${pv.now} (--force)`);
800
+ else log(` + ${name}`);
731
801
  }
732
802
  }
733
803
 
@@ -739,8 +809,8 @@ async function installSymlink(skillsRoot, dest, entries, { force }) {
739
809
  if (!(await pathExists(src))) continue;
740
810
  if (await pathExists(dst)) {
741
811
  const st = await fs.lstat(dst);
742
- if (st.isSymbolicLink() || force) await fs.rm(dst, { recursive: true, force: true });
743
- else fail(`${dst} exists and is not a symlink (pass --force)`);
812
+ if (st.isSymbolicLink() || force || (await isPreviousInstall(src, dst))) await fs.rm(dst, { recursive: true, force: true });
813
+ else fail(`${dst} is an unrelated folder (no matching SKILL.md name) — pass --force to replace it`);
744
814
  }
745
815
  await fs.symlink(src, dst, "junction");
746
816
  log(` ~ ${name} → ${src}`);
@@ -794,9 +864,9 @@ async function linkPackEntries(canonicalRoot, agentRoot, entryNames, { force })
794
864
  if ((await pathExists(dst)) || (await isBrokenSymlink(dst))) {
795
865
  const st = await fs.lstat(dst).catch(() => null);
796
866
  if (st && st.isSymbolicLink()) await fs.rm(dst, { recursive: true, force: true });
797
- else if (force) await fs.rm(dst, { recursive: true, force: true });
867
+ else if (force || (await isPreviousInstall(src, dst))) await fs.rm(dst, { recursive: true, force: true });
798
868
  else {
799
- log(` ! ${dst} exists (not symlink) — skip (pass --force to replace)`);
869
+ log(` ! ${dst} is an unrelated folder (no matching SKILL.md name) — skipped; pass --force to replace it`);
800
870
  continue;
801
871
  }
802
872
  }
@@ -845,7 +915,7 @@ async function installViaMatrix(skillsRoot, plan, opts) {
845
915
  }
846
916
 
847
917
  // 1) Full pack body → canonical
848
- await installCopy(skillsRoot, canonical, plan.entries, opts.locale);
918
+ await installCopy(skillsRoot, canonical, plan.entries, opts.locale, opts);
849
919
 
850
920
  // 2) Private agent dirs: symlink entries (default) or copy
851
921
  for (const t of targets) {
@@ -854,7 +924,7 @@ async function installViaMatrix(skillsRoot, plan, opts) {
854
924
  continue;
855
925
  }
856
926
  if (linkMode === "copy") {
857
- await installCopy(skillsRoot, t.root, plan.entries, opts.locale);
927
+ await installCopy(skillsRoot, t.root, plan.entries, opts.locale, opts);
858
928
  } else {
859
929
  await linkPackEntries(canonical, t.root, plan.entries, opts);
860
930
  }
@@ -1014,7 +1084,7 @@ async function cmdAdd(opts, sourceOverride) {
1014
1084
  }
1015
1085
  await installSymlink(skillsRoot, dest, plan.entries, opts);
1016
1086
  } else {
1017
- await installCopy(skillsRoot, dest, plan.entries, opts.locale);
1087
+ await installCopy(skillsRoot, dest, plan.entries, opts.locale, opts);
1018
1088
  }
1019
1089
 
1020
1090
  await writeInstallReceipt(dest, {
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",
4
+ "version": "4.15.6",
5
5
  "evals": [
6
6
  {
7
7
  "id": 1,
@@ -16,5 +16,5 @@ Codex consumes topmind through the same portable skill pack as other hosts.
16
16
  - Content truth is `topmind-workspace`.
17
17
  - Daily entry is `topmind`; no parallel daily entrypoints.
18
18
  - **Desktop is not required** for the skill pack.
19
- - Naming and frontmatter follow `PROJECT-MODEL.md` / `TOOLS.md`.
19
+ - Naming and frontmatter follow `PROJECT-MODEL.md` / `TOOLS.md` in the [topmind](https://github.com/topmindspace/topmind) repo.
20
20
  - Bulk structure fixes may use `workspace-transform.migrate-v4` (UTR advanced).
@@ -16,4 +16,4 @@ Hermes consumes topmind as a portable skill pack, not a second workspace model.
16
16
  - Content truth is `topmind-workspace`.
17
17
  - Daily entry is `topmind`; no parallel daily entrypoints.
18
18
  - **Desktop is not required** for the skill pack.
19
- - Naming and frontmatter follow `PROJECT-MODEL.md` / `TOOLS.md`.
19
+ - Naming and frontmatter follow `PROJECT-MODEL.md` / `TOOLS.md` in the [topmind](https://github.com/topmindspace/topmind) repo.
@@ -28,6 +28,6 @@ Repo root `opencode.json` is machine-local (gitignored); share shapes via this e
28
28
  ## Must not
29
29
 
30
30
  - Change content truth or add parallel daily entrypoints
31
- - Introduce naming/command surfaces outside `PROJECT-MODEL.md` / `TOOLS.md`
31
+ - Introduce naming/command surfaces outside `PROJECT-MODEL.md` / `TOOLS.md` (in the [topmind](https://github.com/topmindspace/topmind) repo)
32
32
  - Treat `topmind-loop` as a `topmind-maintain` sub-action (loop is independent)
33
33
  - Treat OpenCode state as workspace content truth
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@topmindspace/topmind-skills",
3
- "version": "4.15.4",
4
- "description": "topmind Agent Skills pack — spec-valid Markdown skills for capture, organize, write, memory, maintain, loop.",
3
+ "version": "4.15.6",
4
+ "description": "topmind Agent Skills pack: one daily entry (topmind) routing to capture, organize, write, memory, maintain and loop, plus optional WeRead, X and ledger skills.",
5
5
  "type": "module",
6
6
  "license": "MIT",
7
7
  "author": "TopMindSpace",
package/skills.md CHANGED
@@ -1,40 +1,30 @@
1
- # topmind Skills Package Index (包索引)
1
+ # topmind Skills 包索引
2
2
 
3
- > [!NOTE]
4
- > **每日唯一入口**:`topmind` (router)。包内还有 6 个 action、2 个 optional connector、1 个 optional 记账(连 router 共 10 个目录)。公众号 `topmind-wechat-post` 在外部写作包,不计入本包。
5
- > **通用与可移植**:兼容 Claude Code / OpenCode / Codex / Hermes 等 Agent Host。
6
- > **版本真源**:`topmind-pack.json`(可执行 `npm run versions` 查看完整版本号)。
7
- > 详见权威说明:[Skills README](./README.md)(简体中文) · [English](./README.en.md) · [安装与部署指南 (INSTALL.md)](./INSTALL.md)。
3
+ 日常入口只有 `topmind`。包内另有 6 个动作技能、2 个可选连接器、1 个可选记账,连入口共 10 个目录。公众号技能 `topmind-wechat-post` 在外部写作包 [topmind-writing-skills](https://github.com/topmindspace/topmind-writing-skills),不计入本包。
8
4
 
9
- ---
5
+ 版本以 [`topmind-pack.json`](./topmind-pack.json) 为准(`npm run versions`)。使用说明见 [README](./README.md)([English](./README.en.md)),安装见 [INSTALL.md](./INSTALL.md)。
10
6
 
11
- ## Skill 包清单
7
+ ## 技能清单
12
8
 
13
- | # | Skill 名称 | 模块类型 | 关键触发词 / 场景 | 职责描述 |
9
+ | # | 技能 | 类型 | 常见说法 | 做什么 |
14
10
  |---|---|---|---|---|
15
- | 1 | `topmind` | **Router** | `topmind` / 记一下 / 整理 / 模糊多意图 | **主入口 router**:解析用户意图与工作区上下文,自动路由动作与大类 |
16
- | 2 | `topmind-capture` | Action | 记一下 / capture / 抓取链接 | **捕获动作**:处理速记、网页链接、知识文件加工并安全落盘 |
17
- | 3 | `topmind-organize` | Action | 整理 / organize / 提炼结构 | **整理动作**:归纳笔记、整理专题、提取证据链与知识留痕 |
18
- | 4 | `topmind-write` | Action | 写 / 起草 / 润色 / 出稿 | **写作动作**:根据专题与参考资料起草长文、润色及生成 Deliverable |
19
- | 5 | `topmind-memory` | Action | 记住 / 更新我的情况 / memory | **记忆动作**:维护 `memory/profile.md` 与周期反思(非默认写 `topic.md`) |
20
- | 6 | `topmind-maintain` | Action | doctor / 诊断 / 清理 | **体检动作**:检查目录健康、孤立文件、配置校验与环境诊断 |
21
- | 7 | `topmind-loop` | Action | loop / 巡检 / 自动盘点 | **巡检动作**:可恢复的工作区全量语义巡检与盘点 |
22
- | 8 | `topmind-weread` | Connector | 微信读书 / weread | **微信读书连接器**:同步划线、书评与阅读笔记 |
23
- | 9 | `topmind-x` | Connector | X / 推特 / twitter | **X (Twitter) 连接器**:归档推特帖子、书签与时间线 |
24
- | 10 | `topmind-ledger` | Memory(可选) | 记账 / 记一笔 / 花了 / 存入 | **记账**:默认个人账本,用户自建账本/分类,写入 `memory/ledgers/` |
25
- | — | ~~`topmind-wechat`~~ | 4.15.2 起移出 | 公众号 / 微信排版 / 定稿 | 改用写作包 topmind-writing-skills 的 `topmind-wechat-post`(外部可选,不随本包发布);已装旧 `topmind-wechat` 的请删除 |
26
-
27
- ---
28
-
29
- ## 核心约定与规约
30
-
31
- 1. **唯一前台入口**:AI Agent 日常激活只需推荐 `topmind`。
32
- 2. **渐进式披露 (Progressive Disclosure)**:Discovery (`name+description`) → Activation (`SKILL.md`) → Deep Procedures (`shared/` / `references/`)。
33
- 3. **文件系统即真源**:不引入独立的数据库或 Agent state 依赖。
34
- 4. **遵从 6 条核心规约**:见 [`shared/project-model-brief.md`](./shared/project-model-brief.md)。
35
- 5. **自动建议阶梯**:真源 [`shared/auto-suggest.md`](./shared/auto-suggest.md)(材料 L0 落盘;显式行动语待办在 auto 下同轮写入;其余建议点头再落;L2 才动记忆/删档/建专题)。待办是 `memory/todo.md` 卫星,不是第六概念。
36
-
37
- 👉 **详细架构、Frontmatter Schema 与安装方法请参阅**:
38
- - [Skills README](./README.md)(简体中文) · [English](./README.en.md)
39
- - [多 Host 安装教程 (INSTALL.md)](./INSTALL.md)
40
- - Pack 真源:[`topmind-pack.json`](./topmind-pack.json)
11
+ | 1 | `topmind` | 入口 | topmind、待办、意图不明确或一次说了几件事 | 判断你要做什么,交给对应技能;多件事拆成几步 |
12
+ | 2 | `topmind-capture` | 动作 | 记一下、收进、保存链接 | 速记、链接、文件落盘,行动语提取待办 |
13
+ | 3 | `topmind-organize` | 动作 | 整理本周、整理、总结、对比 | 理顺动态,在专题内整理、研究、分析,分流 Inbox |
14
+ | 4 | `topmind-write` | 动作 | 写、起草、润色、出稿 | 依据专题与资料起草、改稿、交付 |
15
+ | 5 | `topmind-memory` | 动作 | 记住这个、更新我的情况 | 维护 `memory/profile.md` 与周期反思 |
16
+ | 6 | `topmind-maintain` | 动作 | 体检、doctor、清理 | 目录与配置的确定性检查和可回退清理 |
17
+ | 7 | `topmind-loop` | 动作 | 跑一遍 loop、巡检 | 全工作区语义巡检,可中断续跑 |
18
+ | 8 | `topmind-weread` | 连接器(可选) | 微信读书、同步划线 | 同步划线、想法与阅读统计到专题 |
19
+ | 9 | `topmind-x` | 连接器(可选) | 发推、推特、x.com | X 归档、搜索与发帖 |
20
+ | 10 | `topmind-ledger` | 记账(可选) | 记账、记一笔、花了、存入 | 默认个人账本,可自建账本与分类,写入 `memory/ledgers/` |
21
+
22
+ 旧技能 `topmind-wechat` 已在 4.15.2 移出本包,由写作包的 `topmind-wechat-post` 接替。已装旧目录的请删除,否则两者会抢同一批说法。
23
+
24
+ ## 核心约定
25
+
26
+ 1. 只向用户推荐 `topmind` 一个入口,子技能的触发词只服务助手路由。
27
+ 2. 按需加载:先读技能名和描述,触发后读 `SKILL.md`,需要细节时再读 `shared/` 和 `references/`。
28
+ 3. 文件就是数据来源,不依赖数据库或助手会话状态。
29
+ 4. 遵守 6 条工作区规约,见 [`shared/project-model-brief.md`](./shared/project-model-brief.md)。
30
+ 5. 自动建议分级见 [`shared/auto-suggest.md`](./shared/auto-suggest.md):材料直接落盘;明确说了要做的事,auto 模式下同轮写入待办;其余建议等你点头;动记忆、删档、建专题要确认。待办放在 `memory/todo.md`。
package/topmind/SKILL.md CHANGED
@@ -9,14 +9,14 @@ compatibility: >-
9
9
  topmind workspace with {NN-Name}/ categories. Host file tools primary; UTR optional.
10
10
  Install with shared/ sibling for progressive disclosure links.
11
11
  metadata:
12
- version: "4.15.4"
12
+ version: "4.15.6"
13
13
  action_category: "router"
14
14
  entrypoint: "true"
15
15
  triggers: "topmind, 知识库, 工作区, 待办, 有什么要做的, 要做的事, todo, todo list"
16
16
  tags: "router, entrypoint, topmind"
17
17
  author: "TopMindSpace"
18
18
  homepage: "https://github.com/topmindspace/topmind-skills"
19
- updated: "2026-10-16"
19
+ updated: "2026-10-24"
20
20
  degradation: "../shared/capability-degradation.md"
21
21
  ---
22
22
 
@@ -8,14 +8,14 @@ description: >-
8
8
  license: MIT
9
9
  compatibility: topmind workspace. Host file tools or optional UTR capture-note.
10
10
  metadata:
11
- version: "4.15.4"
11
+ version: "4.15.6"
12
12
  action_category: "capture"
13
13
  entrypoint: "false"
14
14
  triggers: "收集, 收进, 保存, 剪藏, 记一下, 临时存放, 随手记, 想法, 灵感, 暂存沉淀, 记录, 备忘, 存一下, 暂存, 笔记, 抄下来, 摘录, 记一下要做, 别忘了, 要做, capture, note, save, Note it"
15
15
  tags: "capture, inbox, note, material"
16
16
  author: "TopMindSpace"
17
17
  homepage: "https://github.com/topmindspace/topmind-skills"
18
- updated: "2026-10-16"
18
+ updated: "2026-10-24"
19
19
  degradation: "../shared/capability-degradation.md"
20
20
  ---
21
21
 
@@ -6,14 +6,14 @@ description: >-
6
6
  license: MIT
7
7
  compatibility: Host file tools or Kernel writeback. Desktop optional mini-app. Feishu/lark-cli is not required.
8
8
  metadata:
9
- version: "4.15.4"
9
+ version: "4.15.6"
10
10
  action_category: "memory"
11
11
  entrypoint: "false"
12
12
  triggers: "记账, 记一笔, 花了, 存入, 查看账单, 账户余额, bookkeeping, log expense"
13
13
  tags: "ledger, bookkeeping, memory, optional"
14
14
  author: "TopMindSpace"
15
15
  homepage: "https://github.com/topmindspace/topmind-skills"
16
- updated: "2026-10-16"
16
+ updated: "2026-10-24"
17
17
  degradation: "../shared/capability-degradation.md"
18
18
  ---
19
19
 
@@ -4,7 +4,7 @@
4
4
 
5
5
  ## Why Loop Exists
6
6
 
7
- UTR 提供 **8 域 / 35** 条确定性命令;`doctor-workspace` 做规则健康检查。Loop 在之上增加**语义层**:阅读 `topic.md` 与笔记、对照 skill 契约、再调用 UTR 修复。
7
+ UTR 提供 **8 域 / 38** 条确定性命令(以 topmind 仓库 `TOOLS.md` 为准);`doctor-workspace` 做规则健康检查。Loop 在之上增加**语义层**:阅读 `topic.md` 与笔记、对照 skill 契约、再调用 UTR 修复。
8
8
 
9
9
  ## Design Choice — Skill + Agent + State File, Not CLI
10
10
 
@@ -6,14 +6,14 @@ description: >-
6
6
  license: MIT
7
7
  compatibility: topmind workspace. Progress under .topmind/loop/*. Host LLM runs the walk; UTR optional.
8
8
  metadata:
9
- version: "4.15.4"
9
+ version: "4.15.6"
10
10
  action_category: "loop"
11
11
  entrypoint: "false"
12
12
  triggers: "跑一遍 loop, loop 一下, 整体体检, 工作区复盘, 把工作区跑一遍, 巡检, 继续 loop, 从断点继续, 全面检查, 复盘, review, audit, walk"
13
13
  tags: "loop, audit, walk, resumable, cyclic"
14
14
  author: "TopMindSpace"
15
15
  homepage: "https://github.com/topmindspace/topmind-skills"
16
- updated: "2026-10-16"
16
+ updated: "2026-10-24"
17
17
  degradation: "../shared/capability-degradation.md"
18
18
  ---
19
19
 
@@ -6,14 +6,14 @@ description: >-
6
6
  license: MIT
7
7
  compatibility: topmind engine and/or workspace. Prefer read-only diagnostics first.
8
8
  metadata:
9
- version: "4.15.4"
9
+ version: "4.15.6"
10
10
  action_category: "maintain"
11
11
  entrypoint: "false"
12
12
  triggers: "快速体检, 体检, 诊断, doctor, 健康检查, 清理, 修复, 快速检查, 检查, 状态, workspace check, scan, fix, maintain"
13
13
  tags: "maintain, doctor, cleanup, audit, health-check"
14
14
  author: "TopMindSpace"
15
15
  homepage: "https://github.com/topmindspace/topmind-skills"
16
- updated: "2026-10-16"
16
+ updated: "2026-10-24"
17
17
  degradation: "../shared/capability-degradation.md"
18
18
  ---
19
19
 
@@ -78,6 +78,7 @@ metadata:
78
78
  - `project_type:`
79
79
  - 废弃命令名 `create-project` 等(现行 `workspace-*`)
80
80
  - ensure 时复活用户已删的可选模板类
81
+ - 跟随指向库外的符号链接,或递归 `.app` / `.framework` / `node_modules` / `dist` 等包与依赖目录
81
82
 
82
83
  ## Capability Degradation
83
84
 
@@ -6,14 +6,14 @@ description: >-
6
6
  license: MIT
7
7
  compatibility: workspace core profile (memory/profile.md) + periodic reflections.
8
8
  metadata:
9
- version: "4.15.4"
9
+ version: "4.15.6"
10
10
  action_category: "memory"
11
11
  entrypoint: "false"
12
12
  triggers: "写入专题记忆, 更新我的情况, stable memory, 追加确认结论, 记住这个, 记住我, 加到专题记忆, 沉淀结论, 提炼到记忆, update profile, memory"
13
13
  tags: "memory, stable, core-profile, 我的情况"
14
14
  author: "TopMindSpace"
15
15
  homepage: "https://github.com/topmindspace/topmind-skills"
16
- updated: "2026-10-16"
16
+ updated: "2026-10-24"
17
17
  degradation: "../shared/capability-degradation.md"
18
18
  ---
19
19
 
@@ -72,7 +72,7 @@ Host: 读 profile(活跃段)→ ADD / UPDATE 原位 / RETIRE 到 ## 历史
72
72
 
73
73
  - 路径:`memory/periodic/{YYYY}/{YYYY-Www}.md` 等
74
74
  - 来源:活动窗口 AI 建议(`stream_digest` / `ai_summary`)**确认后**写入
75
- - **反思非摘要**:不是「本周发生了什么」,而是「本周揭示了什么」——关注焦点、知识与见解、行为信号、偏好变化、线索
75
+ - **反思非摘要**:写「本周揭示了什么」,不罗列「本周发生了什么」。重点是关注焦点、知识与见解、行为信号、偏好变化、线索
76
76
  - 与 profile 同属记忆平面;**不是**专题目录
77
77
 
78
78
  ## 可选:专题语义记忆(非默认)
@@ -6,14 +6,14 @@ description: >-
6
6
  license: MIT
7
7
  compatibility: topmind workspace with stream period notes, topics, or Inbox.
8
8
  metadata:
9
- version: "4.15.4"
9
+ version: "4.15.6"
10
10
  action_category: "organize"
11
11
  entrypoint: "false"
12
12
  triggers: "整理本周, 理顺本周, 周复盘, 整理, 组织, 研究, 分析, 对比, 提取, 梳理, 归纳, 证据, 实体, 质量审查, 总结, 概括, 汇总, 提纲, 分类整理, 找关联, 总结成笔记要点, organize, summarize, analyze, weekly review"
13
13
  tags: "organize, research, analyze, stream, weekly-review"
14
14
  author: "TopMindSpace"
15
15
  homepage: "https://github.com/topmindspace/topmind-skills"
16
- updated: "2026-10-16"
16
+ updated: "2026-10-24"
17
17
  degradation: "../shared/capability-degradation.md"
18
18
  ---
19
19
 
@@ -103,7 +103,7 @@ metadata:
103
103
 
104
104
  ## 通用流程:读 → 做 → 报
105
105
 
106
- 1. **读** `topic.md`(若有)+ 当前对象;不预加载整专题
106
+ 1. **读** `topic.md`(若有)+ 当前对象;不预加载整专题。扫描跳过库外符号链接、应用包 / 依赖目录,并认 Obsidian `userIgnoreFilters`
107
107
  2. **做** 标记 `source_type`;原始与 AI 分析用分隔线 + `[AI整理]`
108
108
  3. **报** 结果 + 路径回执 + 下一步;**综合默认落专题根**(auto 直接写 / confirm 先审阅);不自动 write/memory
109
109
  - 入口先确认类别表(`list-categories` / 扫盘);跳过 hidden;不硬编码编号
@@ -112,7 +112,7 @@ metadata:
112
112
 
113
113
  ## 目录偏好
114
114
 
115
- 专题根扁平;分类靠 frontmatter 与文件名,不硬建子目录树。**禁止**维护 `INDEX.md` 硬索引、禁止为「像 wiki」新建平行目录;`state.json` 非内容真源。位置靠类别+专题树 + 搜索即可。
115
+ 专题根扁平;分类靠 frontmatter 与文件名,不硬建子目录树。**禁止**维护 `INDEX.md` 硬索引、禁止为「像 wiki」新建平行目录;`state.json` 非内容真源。位置靠类别+专题树 + 搜索即可。扫描不进入库外链接、`.app` / `.framework` / `node_modules` / `dist`,并跳过 Obsidian `userIgnoreFilters` 排除的路径。
116
116
 
117
117
  ## Capability Degradation
118
118
 
package/topmind-pack.json CHANGED
@@ -4,8 +4,8 @@
4
4
  "label": "topmind",
5
5
  "description": "topmind skill pack: single daily entry topmind + progressive disclosure (shared/ + references/), Agent Skills spec-valid frontmatter (custom fields under metadata, checked by agentskills validate), capture-first template-driven categories, optional connectors topmind-weread and topmind-x, optional topmind-ledger (记账). None of the optional skills is an extra user concept. WeChat (公众号) and other writing skills live in the external topmind-writing-skills pack (topmind-wechat-post etc.) and are routed only when installed. File-system-first content truth; UTR optional.",
6
6
  "daily_entry": "topmind",
7
- "version": "4.15.4",
8
- "updated": "2026-10-16",
7
+ "version": "4.15.6",
8
+ "updated": "2026-10-24",
9
9
  "license": "MIT",
10
10
  "locales": {
11
11
  "default": "zh-CN",