@pcircle/memesh 4.8.3 → 4.9.0

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.
Files changed (254) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/.claude-plugin/plugin.json +2 -1
  3. package/.codex-plugin/mcp.json +6 -4
  4. package/.codex-plugin/plugin.json +1 -1
  5. package/AGENTS.md +68 -17
  6. package/README.de.md +83 -555
  7. package/README.md +83 -581
  8. package/README.zh-TW.md +84 -572
  9. package/dashboard/dist/index.html +10 -10
  10. package/dist/cli/view-live.d.ts.map +1 -1
  11. package/dist/cli/view-live.js +154 -384
  12. package/dist/cli/view-live.js.map +1 -1
  13. package/dist/core/agent-message-inbox.d.ts +2 -1
  14. package/dist/core/agent-message-inbox.d.ts.map +1 -1
  15. package/dist/core/agent-message-inbox.js +23 -4
  16. package/dist/core/agent-message-inbox.js.map +1 -1
  17. package/dist/core/agent-messaging.d.ts.map +1 -1
  18. package/dist/core/agent-messaging.js +23 -15
  19. package/dist/core/agent-messaging.js.map +1 -1
  20. package/dist/core/agent-router.d.ts +11 -10
  21. package/dist/core/agent-router.d.ts.map +1 -1
  22. package/dist/core/agent-router.js +29 -14
  23. package/dist/core/agent-router.js.map +1 -1
  24. package/dist/core/agent-scope-id.d.ts +11 -0
  25. package/dist/core/agent-scope-id.d.ts.map +1 -0
  26. package/dist/core/agent-scope-id.js +40 -0
  27. package/dist/core/agent-scope-id.js.map +1 -0
  28. package/dist/core/analytics.d.ts.map +1 -1
  29. package/dist/core/analytics.js.map +1 -1
  30. package/dist/core/briefing.d.ts.map +1 -1
  31. package/dist/core/briefing.js +8 -2
  32. package/dist/core/briefing.js.map +1 -1
  33. package/dist/core/config.d.ts +4 -40
  34. package/dist/core/config.d.ts.map +1 -1
  35. package/dist/core/config.js +75 -141
  36. package/dist/core/config.js.map +1 -1
  37. package/dist/core/demo.d.ts.map +1 -1
  38. package/dist/core/demo.js +6 -6
  39. package/dist/core/demo.js.map +1 -1
  40. package/dist/core/doctor.d.ts +2 -6
  41. package/dist/core/doctor.d.ts.map +1 -1
  42. package/dist/core/doctor.js +120 -154
  43. package/dist/core/doctor.js.map +1 -1
  44. package/dist/core/dreamer.d.ts +32 -47
  45. package/dist/core/dreamer.d.ts.map +1 -1
  46. package/dist/core/dreamer.js +214 -704
  47. package/dist/core/dreamer.js.map +1 -1
  48. package/dist/core/install-channel.d.ts.map +1 -1
  49. package/dist/core/install-channel.js +4 -47
  50. package/dist/core/install-channel.js.map +1 -1
  51. package/dist/core/install-id.d.ts.map +1 -1
  52. package/dist/core/install-id.js.map +1 -1
  53. package/dist/core/kg-backfill.d.ts.map +1 -1
  54. package/dist/core/kg-backfill.js.map +1 -1
  55. package/dist/core/lesson-engine.d.ts +0 -5
  56. package/dist/core/lesson-engine.d.ts.map +1 -1
  57. package/dist/core/lesson-engine.js +0 -25
  58. package/dist/core/lesson-engine.js.map +1 -1
  59. package/dist/core/lifecycle.d.ts.map +1 -1
  60. package/dist/core/lifecycle.js +58 -49
  61. package/dist/core/lifecycle.js.map +1 -1
  62. package/dist/core/memory-tool.d.ts.map +1 -1
  63. package/dist/core/memory-tool.js +20 -18
  64. package/dist/core/memory-tool.js.map +1 -1
  65. package/dist/core/operations.d.ts +3 -27
  66. package/dist/core/operations.d.ts.map +1 -1
  67. package/dist/core/operations.js +10 -245
  68. package/dist/core/operations.js.map +1 -1
  69. package/dist/core/paths.d.ts +4 -1
  70. package/dist/core/paths.d.ts.map +1 -1
  71. package/dist/core/paths.js +88 -14
  72. package/dist/core/paths.js.map +1 -1
  73. package/dist/core/product-improvements.js +2 -2
  74. package/dist/core/product-improvements.js.map +1 -1
  75. package/dist/core/project-tags.d.ts +2 -0
  76. package/dist/core/project-tags.d.ts.map +1 -1
  77. package/dist/core/project-tags.js +29 -1
  78. package/dist/core/project-tags.js.map +1 -1
  79. package/dist/core/schema-export.d.ts.map +1 -1
  80. package/dist/core/schema-export.js +13 -3
  81. package/dist/core/schema-export.js.map +1 -1
  82. package/dist/core/semver.d.ts +7 -0
  83. package/dist/core/semver.d.ts.map +1 -0
  84. package/dist/core/semver.js +49 -0
  85. package/dist/core/semver.js.map +1 -0
  86. package/dist/core/serializer.d.ts.map +1 -1
  87. package/dist/core/serializer.js +69 -57
  88. package/dist/core/serializer.js.map +1 -1
  89. package/dist/core/signal-scorer.d.ts.map +1 -1
  90. package/dist/core/signal-scorer.js.map +1 -1
  91. package/dist/core/transcript-extractor.d.ts +1 -85
  92. package/dist/core/transcript-extractor.d.ts.map +1 -1
  93. package/dist/core/transcript-extractor.js +5 -364
  94. package/dist/core/transcript-extractor.js.map +1 -1
  95. package/dist/core/transcript-source.d.ts +22 -6
  96. package/dist/core/transcript-source.d.ts.map +1 -1
  97. package/dist/core/transcript-source.js +108 -69
  98. package/dist/core/transcript-source.js.map +1 -1
  99. package/dist/core/types.d.ts +1 -17
  100. package/dist/core/types.d.ts.map +1 -1
  101. package/dist/core/version-check.d.ts +1 -0
  102. package/dist/core/version-check.d.ts.map +1 -1
  103. package/dist/core/version-check.js +46 -1
  104. package/dist/core/version-check.js.map +1 -1
  105. package/dist/db.d.ts +0 -34
  106. package/dist/db.d.ts.map +1 -1
  107. package/dist/db.js +6 -287
  108. package/dist/db.js.map +1 -1
  109. package/dist/host-runtime/acp.d.ts.map +1 -1
  110. package/dist/host-runtime/acp.js +4 -3
  111. package/dist/host-runtime/acp.js.map +1 -1
  112. package/dist/host-runtime/claude.d.ts.map +1 -1
  113. package/dist/host-runtime/claude.js +11 -11
  114. package/dist/host-runtime/claude.js.map +1 -1
  115. package/dist/host-runtime/codex-session.d.ts +9 -1
  116. package/dist/host-runtime/codex-session.d.ts.map +1 -1
  117. package/dist/host-runtime/codex-session.js +474 -29
  118. package/dist/host-runtime/codex-session.js.map +1 -1
  119. package/dist/host-runtime/codex.d.ts.map +1 -1
  120. package/dist/host-runtime/codex.js +4 -3
  121. package/dist/host-runtime/codex.js.map +1 -1
  122. package/dist/host-runtime/config.d.ts +1 -0
  123. package/dist/host-runtime/config.d.ts.map +1 -1
  124. package/dist/host-runtime/config.js +4 -0
  125. package/dist/host-runtime/config.js.map +1 -1
  126. package/dist/host-runtime/entry.d.ts +5 -0
  127. package/dist/host-runtime/entry.d.ts.map +1 -0
  128. package/dist/host-runtime/entry.js +11 -0
  129. package/dist/host-runtime/entry.js.map +1 -0
  130. package/dist/host-runtime/router-client.d.ts.map +1 -1
  131. package/dist/host-runtime/router-client.js +62 -15
  132. package/dist/host-runtime/router-client.js.map +1 -1
  133. package/dist/host-runtime/router.js +2 -2
  134. package/dist/host-runtime/router.js.map +1 -1
  135. package/dist/knowledge-graph.d.ts +0 -1
  136. package/dist/knowledge-graph.d.ts.map +1 -1
  137. package/dist/knowledge-graph.js +77 -60
  138. package/dist/knowledge-graph.js.map +1 -1
  139. package/dist/mcp/THIRD_PARTY_NOTICES.txt +217 -0
  140. package/dist/mcp/server.js +30685 -38
  141. package/dist/mcp/server.js.map +6 -1
  142. package/dist/skills-manifest.json +39 -34
  143. package/dist/storage/entity-index.d.ts +3 -0
  144. package/dist/storage/entity-index.d.ts.map +1 -0
  145. package/dist/storage/entity-index.js +8 -0
  146. package/dist/storage/entity-index.js.map +1 -0
  147. package/dist/storage/fts-index.d.ts.map +1 -1
  148. package/dist/storage/fts-index.js +11 -7
  149. package/dist/storage/fts-index.js.map +1 -1
  150. package/dist/storage/graph-repairs.d.ts +7 -2
  151. package/dist/storage/graph-repairs.d.ts.map +1 -1
  152. package/dist/storage/graph-repairs.js +89 -13
  153. package/dist/storage/graph-repairs.js.map +1 -1
  154. package/dist/storage/schema.d.ts +1 -1
  155. package/dist/storage/schema.d.ts.map +1 -1
  156. package/dist/storage/schema.js +1 -2
  157. package/dist/storage/schema.js.map +1 -1
  158. package/dist/storage/sqlite.d.ts +0 -1
  159. package/dist/storage/sqlite.d.ts.map +1 -1
  160. package/dist/storage/sqlite.js.map +1 -1
  161. package/dist/transports/agent-messaging.d.ts.map +1 -1
  162. package/dist/transports/agent-messaging.js +5 -7
  163. package/dist/transports/agent-messaging.js.map +1 -1
  164. package/dist/transports/cli/cli.d.ts.map +1 -1
  165. package/dist/transports/cli/cli.js +75 -686
  166. package/dist/transports/cli/cli.js.map +1 -1
  167. package/dist/transports/http/retired-routes.js +1 -1
  168. package/dist/transports/http/retired-routes.js.map +1 -1
  169. package/dist/transports/http/server.d.ts.map +1 -1
  170. package/dist/transports/http/server.js +13 -232
  171. package/dist/transports/http/server.js.map +1 -1
  172. package/dist/transports/mcp/handlers.d.ts +130 -4
  173. package/dist/transports/mcp/handlers.d.ts.map +1 -1
  174. package/dist/transports/mcp/handlers.js +56 -7
  175. package/dist/transports/mcp/handlers.js.map +1 -1
  176. package/dist/transports/schemas.d.ts +71 -19
  177. package/dist/transports/schemas.d.ts.map +1 -1
  178. package/dist/transports/schemas.js +57 -11
  179. package/dist/transports/schemas.js.map +1 -1
  180. package/docs/platforms/README.md +6 -5
  181. package/docs/platforms/agent-messaging.md +241 -20
  182. package/hooks/hooks.json +23 -2
  183. package/llms-install.md +62 -30
  184. package/package.json +12 -9
  185. package/scripts/hooks/_generated/agent-message-inbox.js +23 -4
  186. package/scripts/hooks/_generated/core-paths.js +88 -14
  187. package/scripts/hooks/_generated/fts-index.js +11 -7
  188. package/scripts/hooks/_generated/schema.js +1 -2
  189. package/scripts/hooks/_shared.js +65 -23
  190. package/scripts/hooks/decision-nudge.js +152 -0
  191. package/scripts/hooks/post-commit.js +11 -0
  192. package/scripts/hooks/pre-compact.js +12 -4
  193. package/scripts/hooks/session-start.js +32 -9
  194. package/scripts/hooks/session-summary.js +19 -374
  195. package/scripts/upgrade-plugin.sh +71 -2
  196. package/skills/memesh/SKILL.md +24 -15
  197. package/skills/memesh-review/SKILL.md +7 -6
  198. package/dist/core/auto-tagger.d.ts +0 -10
  199. package/dist/core/auto-tagger.d.ts.map +0 -1
  200. package/dist/core/auto-tagger.js +0 -63
  201. package/dist/core/auto-tagger.js.map +0 -1
  202. package/dist/core/conflict-candidates.d.ts +0 -20
  203. package/dist/core/conflict-candidates.d.ts.map +0 -1
  204. package/dist/core/conflict-candidates.js +0 -71
  205. package/dist/core/conflict-candidates.js.map +0 -1
  206. package/dist/core/conflict-judge.d.ts +0 -58
  207. package/dist/core/conflict-judge.d.ts.map +0 -1
  208. package/dist/core/conflict-judge.js +0 -189
  209. package/dist/core/conflict-judge.js.map +0 -1
  210. package/dist/core/digest-validator.d.ts +0 -18
  211. package/dist/core/digest-validator.d.ts.map +0 -1
  212. package/dist/core/digest-validator.js +0 -85
  213. package/dist/core/digest-validator.js.map +0 -1
  214. package/dist/core/embedder.d.ts +0 -20
  215. package/dist/core/embedder.d.ts.map +0 -1
  216. package/dist/core/embedder.js +0 -242
  217. package/dist/core/embedder.js.map +0 -1
  218. package/dist/core/failure-analyzer.d.ts +0 -19
  219. package/dist/core/failure-analyzer.d.ts.map +0 -1
  220. package/dist/core/failure-analyzer.js +0 -83
  221. package/dist/core/failure-analyzer.js.map +0 -1
  222. package/dist/core/json-utils.d.ts +0 -3
  223. package/dist/core/json-utils.d.ts.map +0 -1
  224. package/dist/core/json-utils.js +0 -46
  225. package/dist/core/json-utils.js.map +0 -1
  226. package/dist/core/llm-client.d.ts +0 -22
  227. package/dist/core/llm-client.d.ts.map +0 -1
  228. package/dist/core/llm-client.js +0 -203
  229. package/dist/core/llm-client.js.map +0 -1
  230. package/dist/core/llm-telemetry.d.ts +0 -47
  231. package/dist/core/llm-telemetry.d.ts.map +0 -1
  232. package/dist/core/llm-telemetry.js +0 -117
  233. package/dist/core/llm-telemetry.js.map +0 -1
  234. package/dist/core/llm-validator.d.ts +0 -20
  235. package/dist/core/llm-validator.d.ts.map +0 -1
  236. package/dist/core/llm-validator.js +0 -231
  237. package/dist/core/llm-validator.js.map +0 -1
  238. package/dist/core/ollama-host.d.ts +0 -6
  239. package/dist/core/ollama-host.d.ts.map +0 -1
  240. package/dist/core/ollama-host.js +0 -30
  241. package/dist/core/ollama-host.js.map +0 -1
  242. package/dist/core/output-language.d.ts +0 -6
  243. package/dist/core/output-language.d.ts.map +0 -1
  244. package/dist/core/output-language.js +0 -25
  245. package/dist/core/output-language.js.map +0 -1
  246. package/dist/core/prompt-safety.d.ts +0 -4
  247. package/dist/core/prompt-safety.d.ts.map +0 -1
  248. package/dist/core/prompt-safety.js +0 -20
  249. package/dist/core/prompt-safety.js.map +0 -1
  250. package/dist/storage/vector-index.d.ts +0 -3
  251. package/dist/storage/vector-index.d.ts.map +0 -1
  252. package/dist/storage/vector-index.js +0 -13
  253. package/dist/storage/vector-index.js.map +0 -1
  254. /package/{.mcp.json → .claude-plugin/mcp.json} +0 -0
package/README.zh-TW.md CHANGED
@@ -3,8 +3,8 @@
3
3
  <p align="center">
4
4
  <h1 align="center">MeMesh</h1>
5
5
  <p align="center">
6
- <strong>給程式開發代理的共享記憶與耐久化本機協作層。</strong><br />
7
- 一個 SQLite 檔案。不需要 Docker。不需要雲端。
6
+ <strong>讓 AI 寫程式助手記得住事情,換了對話也不會忘。</strong><br />
7
+ 一個 SQLite 檔案。不用 Docker,不用雲端。
8
8
  </p>
9
9
  <p align="center">
10
10
  <a href="https://www.npmjs.com/package/@pcircle/memesh"><img src="https://img.shields.io/npm/v/@pcircle/memesh?style=flat-square&color=3b82f6&label=npm" alt="npm" /></a>
@@ -16,557 +16,133 @@
16
16
 
17
17
  ---
18
18
 
19
- **MeMesh** 是給 AI 程式開發代理用的**開源本機協作層**:讓 Claude Code、Codex、Cursor、自訂或 Ollama-backed agents 與相容的本機 MCP 用戶端共享記憶、交換耐久化單一收件人訊息,並把有價值的經驗轉成受治理的產品改善提案。全部存在一個 SQLite 檔案裡,不需要 Docker,也不需要雲端。
19
+ ## 它能做什麼
20
20
 
21
- ### 新的協作入口
21
+ 每次開新對話,AI 寫程式助手(agent)都像失憶一樣:上個月你否決過的做法,它又提一次;同一個測試失敗,它又踩一次;連它自己參與設計的架構,都要你重新解釋。
22
22
 
23
- - `message` 讓本機 agent 擁有可恢復 cursor、可明確記錄 receipt 的單一收件人耐久化 inbox,MCPHTTPCLI 三個 surface 都可用。
24
- - `message discover` 提供有界、限定 project 的活動 agent directory,回傳 session、principal、host kind、宣告的 model/work(或明確 unknown)與 active lease;不會進行訊息或 receipt 操作。
25
- - `improvement` 讓 active memories 直接進入有證據連結的產品工作提案;agent 能發起與查狀態,但只有人類能接受或拒絕。
23
+ MeMesh 幫它記住。Claude Code hooks 會記錄並還原日常工作脈絡;支援的用戶端會透過各自文件列出的整合方式,共用同一個本機 SQLite 資料庫。Claude CodeCodexCursor 和其他 MCP 用戶端都能用。
26
24
 
27
- ## 安裝
28
-
29
- **在 Claude Code 裡** — 在對話框輸入這兩行(hooks、記憶工具和 `/memesh` skill 會自動接好):
30
-
31
- ```
32
- /plugin marketplace add PCIRCLE-AI/memesh
33
- /plugin install memesh@pcircle-memesh
34
25
  ```
35
-
36
- 重開 Claude Code。下一個 session 開頭出現 `◉ MeMesh` 狀態列,代表 SessionStart hook 已輸出狀態列。
37
-
38
- **在終端機裡** — `memesh` CLI、儀表板,以及給 Codex / Cursor 與相容本機 MCP 用戶端用的 `memesh-mcp` server(需要 [Node 22.13+](https://nodejs.org)):
39
-
40
- ```bash
41
- npm install -g @pcircle/memesh
42
- memesh doctor # 端到端驗證這份安裝
26
+ you work with the agent
27
+ |
28
+ v
29
+ +------------------+ +------------------+
30
+ | capture | | recall |
31
+ | sessions, | ---> | at session |
32
+ | commits, fixes | | start and |
33
+ | (automatic) | | before edits |
34
+ +------------------+ +------------------+
35
+ | ^
36
+ v |
37
+ +----------------------------------------+
38
+ | ~/.memesh/knowledge-graph.db |
39
+ | decisions, lessons, links between them |
40
+ +----------------------------------------+
43
41
  ```
44
42
 
45
- 多數 Claude Code 使用者兩種都會裝。它們共用同一個資料庫,不會互相干擾。想知道細節、其他代理怎麼接、怎麼升級,看下面的「60 秒快速開始」。
46
-
47
- ## 問題所在
48
-
49
- 你的代理換一次對話就忘光,這還不是最糟的。最糟的是它會**把做過的事再做一次**:
50
-
51
- - 重新提議你上個月否決掉的做法
52
- - 再一次被同一個測試絆倒
53
- - 重新「發現」三月那條弄壞 production 的限制
54
- - 要你重講一遍當初它也有份設計的架構
55
-
56
- 這不是「聊天記錄沒存好」的問題。要留下來的不是對話,是*工作本身*——做過什麼決定、為什麼那樣決定、哪裡失敗過、後來怎麼修的,以及這些事情之間的關係。
57
-
58
- **MeMesh 補的就是這一塊。** 它做三件事:
59
-
60
- - **自動記下來**:hooks 從代理真正做過的事情擷取——session、commit、失敗,不用你手動寫筆記
61
- - **在需要的時候送回去**:session 開始時、要改檔案之前,把相關記憶放進代理眼前
62
- - **不讓記憶爛掉**:新的決定會取代舊的,兩筆記憶互相矛盾時由 LLM 判斷並標記出來
43
+ 左邊是自動記錄(對話、commit、修掉的錯誤),右邊是適時提醒(開新對話時、改檔案之前),中間是存放決定、教訓與關聯的那個檔案。
63
44
 
64
- npm 裝,記憶放在 `~/.memesh/knowledge-graph.db`,接上 Claude Code 或任何支援 MCP 的用戶端就能用。
65
-
66
- > [!IMPORTANT]
67
- > **持續開發中的專案** 功能會持續更新,版本之間可能會有變動。遇到問題或想要新功能,請[開 issue](https://github.com/PCIRCLE-AI/memesh/issues)。
45
+ - **在適當時機記錄、提醒與防護。** MeMesh Claude Code Codex 整合共提供 **9 個 hook command**:其中 8 個 Claude Code hook 分別在開新對話、改檔案前、`git commit` 後、計畫核准或你回答問題後、Claude 停下來時、對話被壓縮前、你說「記下來」時(聽得懂 5 種語言),以及執行可能重犯已接受教訓的危險指令前運作。計畫/問題與「記下來」hook 只會提醒 agent 呼叫 `remember`;第 9 個 command 同時處理 Codex SessionStart 與 SessionEnd,註冊並退場符合資格的一般 Codex CLI session。
46
+ - **所有工具共用一份記憶。** 今天在 Claude Code 存的決定,明天 Codex 或 Cursor 也用得到。
47
+ - **agent 之間可以留言。** 本機的耐久收件匣可跨重啟保存;在 macOS 或 Linux 上,確切且活動中的一般 Codex CLI session 裝有 MeMesh plugin 時,也能透過原生 queue 收到有界訊息。
48
+ - **有儀表板** 可以瀏覽全部內容:5 個分頁、11 種語言,在 `http://localhost:3737/dashboard`。
68
49
 
69
50
  ---
70
51
 
71
- ## Local Agent Collaboration,要說真話
72
-
73
- MeMesh 有一個很強的跨代理優勢:凡是連到同一個本機 MeMesh instance 的 host,都能共享持久化記憶;`message` tool 則提供 MCP、HTTP 與 CLI 共用的明確單一收件人訊息路徑。
74
-
75
- 可選的安全 host-native 喚醒 runtime 目前支援 macOS 與 Linux。Windows 仍可使用 MeMesh 核心記憶、耐久化 message storage 與 MCP tools;Windows host-native 喚醒目前尚未支援。
76
-
77
- - 今天就能做的:MCP、HTTP 或 CLI sender 可把一份 JSON 編碼後不超過 65,536 UTF-8 bytes(64 KiB)的不受信任 payload 耐久化送給一個指定的本機 recipient。接收端可另行擷取、在重啟後用 opaque cursor 補收,並把 intake、acknowledgement、workflow disposition 與 host activation 分開記錄。
78
- - 啟用 MeMesh Codex plugin 並完成 owner-private 的 `memesh agent setup codex-session` opt-in 後,確切活動中的 Codex session 可在沒有輪詢或人工提醒下透過原生 queue 收到一則完整訊息,也不需要再次 fetch inbox。包含 routing metadata 與 payload 的完整 native envelope 另有 16,384 bytes(16 KiB)上限。exact-session send 只有在原生 queue 接受後才成功;完整 envelope 過大時回報 `native_message_too_large`,其他無法使用或拒絕的 session 則回報 `recipient_unavailable`。scope 相符的 recovery data 仍會保留,Principal target 在無法原生傳遞時仍保有 durable store-and-forward。
79
- - 成功的原生 admission(`host_accept`)只代表本機 Codex queue 接受了這則有界訊息;它不代表 agent 已讀、已確認收到,或接受了工作。Codex 目前只提供 `--message` 參數傳入文字,因此同一使用者的 process inspection 可能在 queue command 執行期間看到內容;原生訊息不要放 secrets。
80
- - Durable message storage 由 owner policy 控制,不會偷偷刪除未解決訊息:`memesh message storage report` 會顯示 logical payload、protected rows、可重用 SQLite pages 與 WAL 大小;bounded prune 預設只 dry-run,且只 tombstone 舊的 terminal payload。可選的 `MEMESH_AGENT_MESSAGE_STORAGE_QUOTA_BYTES` 會在交易內原子拒絕超額 send。詳見 [bounded storage and audit retention](docs/platforms/agent-messaging.md#bounded-storage-and-audit-retention)。
81
- - 已停止、缺失或斷線的 Codex session 不會被喚醒或取代。它的耐久化 inbox 仍可供稽核與復原;`poll` 與 `memesh message watch` 是相容與診斷路徑。原生傳遞不會自動恢復已停止的模型 session、不會執行 payload,也不代表已確認收到。
82
- - 協作式信任邊界:recipient 名稱只是邏輯 routing ID,不是每個 agent 各自登入的身分或 ACL。能存取同一本機 MeMesh instance 的 caller 都必須視為受信任的 workspace participant;host adapter 仍需自行落實權限與人工核准規則。
83
- - Adapter 邊界:這裡的原生喚醒只指已設定的本機 Codex-session 路徑。其他本機 MCP loop 可使用自己 host loop 支援的耐久化 message 操作;這不是通用 host 支援宣告。
52
+ ## 支援哪些平台
84
53
 
85
- 完整 lifecycle、現況邊界、支援矩陣和剩餘 adapter 工作,請看 [Local Agent Messaging Guide](docs/platforms/agent-messaging.md)。
54
+ | 平台 | 怎麼接 | 說明 |
55
+ |---|---|---|
56
+ | Claude Code | plugin:hook、MCP 工具、`/memesh` skill | 自動記錄與提醒都有 |
57
+ | Codex CLI | Plugin,或 MCP server(`memesh-mcp`) | 零設定 plugin 安裝,或 `codex mcp add memesh -- memesh-mcp` |
58
+ | Gemini CLI | MCP server(`memesh-mcp`) | `gemini mcp add -s user memesh memesh-mcp` |
59
+ | Cursor、Cline 與其他 MCP 用戶端 | MCP server(`memesh-mcp`) | 把用戶端指向 `memesh-mcp` |
60
+ | Hermes Agent | 原生記憶 plugin | [docs/platforms/hermes-agent.md](docs/platforms/hermes-agent.md) |
61
+ | OpenClaw | 原生記憶 plugin | 只有原始碼,尚未發佈或完成真實環境測試:[docs/platforms/openclaw.md](docs/platforms/openclaw.md) |
62
+ | 你自己的程式或腳本 | `memesh serve` 提供的 HTTP API | [docs/platforms/universal.md](docs/platforms/universal.md) |
63
+ | ChatGPT、Gemini 網頁版等線上聊天 | 透過你自己架的本機橋接走 HTTP API | [docs/platforms/README.md](docs/platforms/README.md) |
86
64
 
87
- ### agent 經驗轉成受審核的產品工作
65
+ Claude Code 8 個 hook 提供自動記錄、回想、提醒與防護。Codex plugin 會自動接好 SessionStart 整合與 MCP 工具。只使用 MCP 的其他用戶端則要自行呼叫 `recall` 和 `briefing`。
88
66
 
89
- `improvement` tool 能把仍有效的記憶與教訓轉成有證據連結的產品改善提案,不再讓有價值的 feedback 只停在 inbox。Agent 可以提案與查狀態,但不能核准自己的建議;人類透過既有 review surface 接受或拒絕。接受後,MeMesh 會保留全部來源記憶、把工作項目連回證據,並讓它出現在後續 project briefing。這讓學習真正進入產品流程,同時避免 agent 建議在沒有人工授權下直接變成產品政策。
67
+ 回想與擷取維持本機且可預測:SQLite FTS5 搜尋、明確的記憶工具與規則式 hooks。這個版本不設定也不呼叫 LLM、embedding vector provider。舊版留下的 provider 設定仍保留在磁碟上但會被忽略;`memesh doctor` 只會列出頂層欄位名稱,不會讀取或印出它們的值。
90
68
 
91
69
  ---
92
70
 
93
- ## 安裝路徑一覽
94
-
95
- MeMesh 有**兩條會共存的安裝路徑**。多數使用者兩條都需要。它們寫入**同一份記憶資料庫**(`~/.memesh/knowledge-graph.db`),所以 Claude Code 對話裡記下的東西在 terminal 也看得到,反之亦然。
96
-
97
- ```mermaid
98
- flowchart TB
99
- classDef client fill:#1f2937,stroke:#4b5563,color:#f9fafb,stroke-width:1px
100
- classDef pathA fill:#1e3a8a,stroke:#3b82f6,color:#eff6ff,stroke-width:2px
101
- classDef pathB fill:#14532d,stroke:#22c55e,color:#f0fdf4,stroke-width:2px
102
- classDef db fill:#7c2d12,stroke:#f97316,color:#fff7ed,stroke-width:2px
71
+ ## 怎麼安裝
103
72
 
104
- subgraph clients["Where you use memesh from"]
105
- direction LR
106
- CC["Claude Code<br/>(chat + agent)"]:::client
107
- TERM["Terminal / other<br/>MCP clients<br/>(Codex, Cursor...)"]:::client
108
- end
73
+ Plugin npm-global CLI 共用同一個資料庫。Claude Code 使用者通常同時安裝 Claude plugin 與 CLI;Codex 可使用自己的 plugin,或使用 CLI 提供的 MCP server。
109
74
 
110
- subgraph paths["Two install paths"]
111
- direction LR
112
- A["<b>Path A — /plugin install</b><br/>───────────────<br/>Lives in <code>~/.claude/plugins/</code><br/><br/>• MCP tools in chat<br/>• Auto-capture hooks<br/>• <code>/memesh</code> skill<br/>• Session-start banner"]:::pathA
113
- B["<b>Path B — npm install -g</b><br/>───────────────<br/>Lives in <code>$(npm prefix -g)/bin/</code><br/><br/>• <code>memesh</code> shell command<br/>• <code>memesh-mcp</code>, <code>-http</code> bins<br/>• For Cursor / Cline / other MCP"]:::pathB
114
- end
115
-
116
- DB[("Shared memory DB<br/><code>~/.memesh/knowledge-graph.db</code><br/>Same data, both paths see it")]:::db
117
-
118
- CC -->|uses| A
119
- TERM -->|uses| B
120
- A --> DB
121
- B --> DB
122
75
  ```
123
-
124
- **你需要哪一條?**
125
-
126
- | 你想做什麼 | 安裝路徑 |
127
- |---|---|
128
- | Claude Code 對話裡用 `/memesh` skill | Path A(plugin)|
129
- | Claude Code 自動 capture(session → 教訓 → 下次 recall)| Path A(plugin)|
130
- | 在任何 terminal 跑 `memesh remember` / `memesh recall` / `memesh doctor` | Path B(npm-global)|
131
- | 用 `memesh serve` 直接開 dashboard(沒有 `npx` 啟動延遲)| Path B(npm-global)|
132
- | 把 `memesh-mcp` 接到 Cursor、Cline 或其他 MCP client | Path B(npm-global)|
133
- | 以上都要 | **兩條都裝** — 不會衝突 |
134
-
135
- > **常見誤會(小心踩雷)**:Claude Code 的 plugin **不會** 把 `memesh` 放到你的 shell `PATH` 上。如果你只跑 `/plugin install`,然後在 terminal 打 `memesh reindex`,你會看到 `command not found`。這是正常的 — 還要加 `npm install -g @pcircle/memesh` 才有 shell 指令。
136
-
137
- ### ⚠️ 裝 plugin 不會裝 CLI
138
-
139
- 這個是最常見的踩坑點,讀一次省下未來的循環:
140
-
141
- - 從 Claude Code 跑 `/plugin install memesh@pcircle-memesh` → 只裝 **Path A**。給你 MCP 工具、hooks、`/memesh` skill。**不會**把 `memesh` 放到你的 shell `PATH`。
142
- - 在 terminal 打 `memesh reindex` / `memesh update` / `memesh doctor` → 需要 **Path B**(npm-global)。沒裝就會 `zsh: command not found: memesh`。
143
- - **Claude Code 使用者建議的安裝方式**:**兩條都裝**。共存、共用同一份資料庫、不衝突。
144
-
145
- ```bash
146
- # 跑完 /plugin install ... 之後,再跑這個:
147
- npm install -g @pcircle/memesh
76
+ Claude Code chat Terminal, Codex, Cursor
77
+ | |
78
+ v v
79
+ +-----------------+ +------------------+
80
+ | A: plugin | | B: npm global |
81
+ | /plugin install | | npm install -g |
82
+ | hooks + tools | | memesh CLI |
83
+ | + /memesh skill | | + memesh-mcp |
84
+ +-----------------+ +------------------+
85
+ | |
86
+ +---------------+------------------+
87
+ v
88
+ ~/.memesh/knowledge-graph.db
89
+ (one file, both paths)
148
90
  ```
149
91
 
150
- 如果你只透過 Claude Code 對話用 memesh(從不在 terminal 打 `memesh`),Path A 自己就夠了。其他人請兩條都裝。
151
-
152
- ---
153
-
154
- ## 60 秒快速開始
155
-
156
- ### 選項 A — Claude Code 外掛(一行安裝)
157
-
158
- 如果你使用 Claude Code,從 CLI 內把 MeMesh 當外掛安裝:
92
+ **A. Claude Code 裡裝**(hook、工具和 `/memesh` skill 會自動設定好):
159
93
 
160
94
  ```
161
95
  /plugin marketplace add PCIRCLE-AI/memesh
162
96
  /plugin install memesh@pcircle-memesh
163
97
  ```
164
98
 
165
- Claude Code 會自動接好 hooks、skills 和 MCP server。你會獲得對話內自動擷取、主動回憶、可在 Claude Code 對話中使用的 `/memesh` skill(remember / recall / learn / forget),以及代理可呼叫的 `remember` / `recall` / `forget` / `learn` MCP 工具。
166
-
167
- **驗證方式:**重開 Claude Code、開任何 session。開頭出現像 `◉ MeMesh ready · no memories for "your-project" yet` 的狀態列 — 這直接驗證 SessionStart hook 有輸出;單憑這一行不能證明後續 capture 或 recall 已運作。(有記憶之後會改顯示數量。)CLI 與本地儀表板無需任何額外的全域安裝就能完整使用 — `npx @pcircle/memesh <command>` 可執行所有 CLI 指令,`npx @pcircle/memesh` 可在 `localhost:3737` 啟動儀表板。MCP server 直接從外掛內建的編譯產物啟動 — 不需要 `npx` 查找、不需要 `npm install -g`、不需要本地建置步驟。memesh 透過 Node 內建的 `node:sqlite`(22.13+)存放資料,所以升級 Node 不會留下一個為錯誤 runtime 編譯的二進位檔。
99
+ 重開 Claude Code。下次對話開頭會出現 `◉ MeMesh`。
168
100
 
169
- ### 選項 B npm 全域安裝(可選最佳化)
170
-
171
- 如果你希望二進位執行檔直接放在 shell `PATH` 上(讓 `memesh`、`memesh-mcp` 等指令能在任何終端機直接執行,省去每次呼叫的 `npx` 查找),或想將 `memesh-mcp` 以固定路徑的 stdio 指令暴露給**非 Claude Code 的 MCP 用戶端**(Cursor、Cline、純終端機流程):
101
+ **B. 在終端機裝**(需要 [Node 22.13 以上](https://nodejs.org)):
172
102
 
173
103
  ```bash
174
104
  npm install -g @pcircle/memesh
105
+ memesh doctor # 檢查本機安裝健康狀態並列出修復方式
106
+ memesh install-hooks # 沒裝 A 才需要:幫 Claude Code 接上 hook,不動你原本的設定
175
107
  ```
176
108
 
177
- > **首次安裝注意事項(一次性):**
178
- > - **不需要編譯器** — 資料庫引擎就是 Node 自己的 `node:sqlite`。負責「用意思搜尋」的 `sqlite-vec` 以預先編譯好的檔案形式提供 macOS(arm64/x64)、Linux(x64/arm64)和 Windows x64;在其他平台它就是不存在,回憶維持關鍵字搜尋。這裡沒有任何東西會執行安裝腳本,所以 `npm install --ignore-scripts` 也能裝出完全可用的 memesh。
179
- > - **語意搜尋是選用的** — 預設的檢索路徑是關鍵字搜尋(FTS5),不需要模型也不需要下載。以語意(意義)為基礎的搜尋需要一個 embedder:在本地執行 [Ollama](https://ollama.com),或設定一個雲端 embedder(見下方「嵌入」)。沒有設定時,memesh 只使用關鍵字搜尋。
180
-
181
- ### 第一步半:把 MeMesh 接進 Claude Code(僅 npm 路徑需要)
182
-
183
- 如果你透過**選項 A**(`/plugin install memesh@pcircle-memesh`)安裝,請略過此步驟 — Claude Code 會自動接好外掛 hooks。
184
-
185
- 如果你透過**選項 B**(`npm install -g`)安裝,CLI 已在 PATH 上 — 但**還沒有任何東西接進 Claude Code**:npm 套件刻意不執行安裝腳本,把 MCP server 和 hooks 接進 Claude Code 的是外掛(選項 A)。npm 路徑自己能接的是 session hooks。沒有這些 hooks 還是可以手動使用 `memesh remember` / `recall`,但**自動擷取迴路**(session → 教訓 → 下次 session 主動回憶)就會靜默不動。
186
-
187
- ```bash
188
- memesh setup # 檢查本機 host 接線並回報結果
189
- ```
190
-
191
- 或手動逐步:
192
-
193
- ```bash
194
- memesh install-hooks # 把 memesh hooks 加進 ~/.claude/settings.json
195
- memesh setup --check # 機器層級驗證:讀各主機自己的設定,什麼都不改
196
- ```
197
-
198
- 這些 hooks 會跟你既有的 `~/.claude/hooks/` 自訂 hooks 共存 — `install-hooks` 用追加方式寫入,從不覆寫你的東西。要移除:`memesh uninstall-hooks`。
199
-
200
- ### 從 Codex CLI、Cursor 與其他 MCP 用戶端使用同一份記憶
201
-
202
- `memesh-mcp` 是標準的 stdio MCP server,任何支援 MCP 的主機都能用 — 不限 Claude Code。裝好選項 B(`memesh-mcp` 在 `PATH` 上)之後,每個主機註冊一次:
203
-
204
- ```bash
205
- # OpenAI Codex CLI — 會把 [mcp_servers.memesh] 寫進 ~/.codex/config.toml
206
- codex mcp add memesh -- memesh-mcp
207
-
208
- ```
209
-
210
- Cursor 請將同一個 stdio server 加入 `~/.cursor/mcp.json`(全域),或專案內的 `.cursor/mcp.json`:
211
-
212
- ```json
213
- {
214
- "mcpServers": {
215
- "memesh": { "command": "memesh-mcp" }
216
- }
217
- }
218
- ```
219
-
220
- 每個已設定的本機 host 讀寫的都是同一個 `~/.memesh/knowledge-graph.db`,所以在任何代理儲存的記憶,Codex、Cursor 和其他 MCP 用戶端都能回憶得到。請從主機要求它呼叫 `recall` 工具驗證:
221
-
222
- ```bash
223
- codex mcp list # memesh 應顯示為 enabled
224
- ```
225
-
226
- > **設定的指令要用 `memesh-mcp`,不要用 `npx -p @pcircle/memesh`。**當主機的工作目錄在這個 repo 的 checkout 裡時,`npx -p` 會解析到*本地*套件,靜默執行工作樹當下的狀態而不是安裝好的正式版。
227
-
228
- ### 原生整合:Hermes Agent
229
-
230
- **Hermes Agent** (NousResearch) 有一套第一方 `MemoryProvider` 外掛系統 — MeMesh 整合的層級與 Hermes 自己內建的記憶後端(honcho、mem0、hindsight)相同,不是 HTTP 橋接。與 MCP 模式手動呼叫工具不同,Hermes 的 provider 系統在每一輪自動執行 `recall`/`remember`。
109
+ Codex 零設定安裝:執行 `codex plugin marketplace add PCIRCLE-AI/memesh` 與 `codex plugin add memesh@pcircle-memesh`。手動替代方案是 `codex mcp add memesh -- memesh-mcp`。Cursor:把 `{ "mcpServers": { "memesh": { "command": "memesh-mcp" } } }` 加進 `~/.cursor/mcp.json`。
231
110
 
232
- 整合將 Hermes `prefetch()` `sync_turn()` hooks 直接對應到 MeMesh HTTP API。完整指南包含 provider 程式結構、設定,以及來自真實部署的四個陷阱:**[docs/platforms/hermes-agent.md](docs/platforms/hermes-agent.md)**
111
+ > **裝了 plugin 不等於有 `memesh` 指令。** `/plugin install` 之後,在終端機打 `memesh` 會出現 `command not found`,要再跑 `npm install -g @pcircle/memesh` 才會有。只在 Claude Code 對話裡用的話,裝 A 就夠了。
233
112
 
234
- ### 原生整合:OpenClaw
235
-
236
- **OpenClaw** 有一套第一方記憶能力外掛系統 — MeMesh 整合的層級與 OpenClaw 自己內建的後端(LanceDB)相同,不是 HTTP 橋接。外掛透過 `api.registerMemoryCapability()` 註冊,並提供 `memory_recall`/`memory_store`/`memory_forget` 工具,以及在 `before_prompt_build` hook 上自動 recall。
237
-
238
- **與 Hermes 的關鍵差異**:OpenClaw 的自動擷取有門檻控制(觸發時每輪最多 3 筆記憶),而非每一輪都擷取。整合對應到 MeMesh 的 HTTP API(`/v1/recall`、`/v1/remember`、`/v1/forget`)。完整 TypeScript 外掛合約、設定形狀與陷阱:**[docs/platforms/openclaw.md](docs/platforms/openclaw.md)**
239
-
240
- 目前狀態:source plugin 已存在於 `extensions/memory-memesh/`,但尚未發布,也尚未在真實 OpenClaw runtime 驗證。
241
-
242
- ### 第二步:保存一個決策
243
-
244
- > 下方的 bash 範例假設 `memesh` 已在 `PATH` 上(選項 B)。選項 A(純外掛)使用者有兩條等價路徑:在 Claude Code 對話中發問(`/memesh` skill 與 MCP 工具涵蓋同樣的流程),或將任何 shell 中的 `memesh` 替換為 `npx @pcircle/memesh` — 旗標相同,不需要全域安裝。
245
-
246
- ```bash
247
- memesh remember "Use OAuth 2.0 with PKCE for the new auth"
248
- ```
249
-
250
- 或使用顯式形式,當你想要穩定的名稱與類型以便日後篩選:
251
-
252
- ```bash
253
- memesh remember --name "auth-decision" --type "decision" --obs "Use OAuth 2.0 with PKCE"
254
- ```
255
-
256
- ### 第三步:稍後回憶它
257
-
258
- ```bash
259
- memesh recall "login security"
260
- # → 找到 "OAuth 2.0 with PKCE" 即使你搜尋的是不同的詞彙
261
- ```
262
-
263
- **完成。** MeMesh 現在已經在跨對話記憶和回憶。
264
-
265
- 如果你想驗證安裝和本地連線的整個流程:
266
-
267
- ```bash
268
- memesh doctor
269
- ```
270
-
271
- 開啟儀表板來探索你的記憶:
272
-
273
- ```bash
274
- memesh serve
275
- ```
276
-
277
- <p align="center">
278
- <img src="docs/images/dashboard-search.png" alt="MeMesh — 瞬間找到任何記憶" width="100%" />
279
- </p>
280
-
281
- <p align="center">
282
- <img src="docs/images/dashboard-analytics.png" alt="MeMesh 分析面板 — 健康分數、時間線、模式、知識涵蓋範圍" width="100%" />
283
- </p>
284
-
285
- <p align="center">
286
- <img src="docs/images/dashboard-graph.png" alt="MeMesh 圖表 — 互動式知識圖,具有類型篩選和自我中心模式" width="100%" />
287
- </p>
288
-
289
- ### 看看它幫你記了什麼
290
-
291
- 任何時候一條指令,就能印出你的代理對目前專案知道什麼 — 工作做到哪、決策、教訓、近期活動(以參考資料的形式包好):
292
-
293
- ```bash
294
- memesh briefing
295
- ```
296
-
297
- ```text
298
- Where "your-project" was left off (today):
299
- - Goal: Ship the payment retry logic
300
- - Next: Open the PR once CI is green
301
-
302
- Decisions and direction for "your-project":
303
- - [decision] Use FTS5 as the retrieval baseline
304
- ```
305
-
306
- Claude Code 在 session 開始時自動收到的就是同一個區塊,其他 MCP 用戶端呼叫 `briefing` 工具也拿到同一份 — 代理一開場就有方向,不用重讀整個 repo,你也不用再重講上禮拜的事。儀表板(`memesh serve`)是完整的視覺化版本。一般 `briefing` 與 SessionStart 情境不帶 recipient 身分,因此不會顯示未讀訊息。要檢查收件匣,請提供確切的 `project` 與 `recipient`;MeMesh 只回報該 recipient 尚未擷取的訊息,並要求先 poll,再逐筆 fetch。
307
-
308
- ### 你的資料
309
-
310
- - **就一個本機檔案。**所有東西都在 `~/.memesh/knowledge-graph.db` — SQLite、在你的硬碟上。沒有雲端帳號;除非你自己設定雲端 embedder 或 LLM,否則什麼都不會離開你的機器。
311
- - **備份 = 複製那個檔案。**還原 = 複製回去。
312
- - **隨時暫停擷取**:`export MEMESH_AUTO_CAPTURE=false`。
313
- - **全部刪除**:移除 `~/.memesh/`。
113
+ **更新:** Claude Code plugin 用 `memesh upgrade-plugin`(沒有 CLI 時可用 `npx @pcircle/memesh upgrade-plugin`);Codex plugin 用 `codex plugin marketplace upgrade pcircle-memesh && codex plugin add memesh@pcircle-memesh`;npm-global CLI 用 `memesh update`。**想讓 AI 幫你裝?** 把 [llms-install.md](llms-install.md) 丟給它。
314
114
 
315
115
  ---
316
116
 
317
- ## 誰應該用 MeMesh?
318
-
319
- | 如果你是... | MeMesh 幫你... |
320
- |---------------|---------------------|
321
- | **使用 Claude Code 的開發者** | 在工作時自動回憶專案決策、檔案特定的經驗教訓和過去的失敗 |
322
- | **程式開發代理進階使用者** | 在多個 MCP 相容工具間共享一層在地記憶 |
323
- | **使用 Codex、Cursor、Claude Code 或其他 MCP 用戶端的個人** | 在不同代理與 session 之間使用同一層在地記憶 |
324
- | **整合 AI 代理的開發者** | 透過 MCP、HTTP 或 CLI 添加在地記憶 |
117
+ ## 怎麼開始
325
118
 
326
- ---
327
-
328
- ## 專為程式開發代理設計
329
-
330
- <table>
331
- <tr>
332
- <td width="33%" align="center">
333
-
334
- **Claude Code / Desktop**
335
119
  ```bash
336
- memesh-mcp
337
- ```
338
- MCP 工具 + Claude Code hooks
339
-
340
- </td>
341
- <td width="33%" align="center">
120
+ memesh remember "登入功能用 OAuth 2.0 加 PKCE"
121
+ memesh recall "登入"
122
+ # -> 找到那筆 PKCE 的決定
342
123
 
343
- **任何 HTTP 用戶端**
344
- ```bash
345
- curl localhost:3737/v1/recall \
346
- -H "Content-Type: application/json" \
347
- -d '{"query":"auth"}'
124
+ memesh briefing # agent 對這個專案知道多少、上次做到哪
125
+ memesh serve # 啟動本機 server 並印出儀表板網址
348
126
  ```
349
- `memesh serve`(REST API)
350
127
 
351
- </td>
352
- <td width="33%" align="center">
128
+ 讓 `memesh serve` 保持執行,再開啟它印出的網址。在 Claude Code 裡使用記憶工具時連終端機都不用開:在對話裡說「記下來」就好,每次開新對話也會自動先收到摘要。
353
129
 
354
- **任何 LLM(OpenAI 格式)**
355
- ```bash
356
- memesh export-schema \
357
- --format openai
358
- ```
359
- 貼到任何 API 呼叫中
360
-
361
- </td>
362
- </tr>
363
- </table>
364
-
365
- ---
366
-
367
- ## 為什麼選 MeMesh 而不是 OpenMemory、Cursor Memories、Mem0 或 Zep?
368
-
369
- | | **MeMesh** | OpenMemory | Cursor Memories | Mem0 | Zep / Graphiti |
370
- |---|---|---|---|---|---|
371
- | **最佳用途** | 程式開發代理的在地記憶 | 本地/跨用戶端 MCP 記憶 | Cursor 原生專案記憶 | 受管應用/代理記憶 | 時間性知識圖 |
372
- | **安裝方式** | `npm install -g @pcircle/memesh` | 本地應用/伺服器流程 | 內建於 Cursor | 雲端 API / SDK / MCP | 服務/框架設定 |
373
- | **儲存位置** | 單一本地 SQLite 檔案 | 本地記憶堆疊 | Cursor 管理的規則/記憶 | 託管或自管堆疊 | 圖形資料庫 |
374
- | **需要雲端** | 否 | 否(本地模式) | 取決於 Cursor 帳戶/設定 | 是(平台) | 通常是/自管 |
375
- | **Claude Code hooks** | 一級支援 | MCP 工具 | 否 | MCP 工具 | 不特別針對 Claude Code |
376
- | **儀表板** | 內建 | 內建 | Cursor 設定 | 平台儀表板 | 平台/圖表工具 |
377
- | **取捨** | 簡潔的本地方案,不適合企業規模 | 更寬泛的本地應用足跡 | 綁定到 Cursor | 強大的受管平台,較少本地優先 | 強大的圖形模型,設定更複雜 |
378
-
379
- **MeMesh 用立即可用的本地設定、可檢查的儲存和程式開發代理工作流 hooks 來交換企業級受管基礎設施。**
130
+ 有了記憶之後,兩件值得知道的事:
380
131
 
381
- ---
382
-
383
- ## 基準測試 — 95.60% R@5 on LongMemEval-S
384
-
385
- MeMesh 的檢索引擎**只用 FTS5**(熱路徑上不使用 LLM、不使用嵌入),對照公開的 [LongMemEval-S](https://huggingface.co/datasets/xiaowu0162/longmemeval) 基準測試(500 題,MIT 授權)量測:
386
-
387
- | 系統 | R@5 | 來源 |
388
- |---|---|---|
389
- | **MeMesh(Mode A,經由 `recallEnhanced()`)** | **95.60%** | [benchmarks/longmemeval/RESULTS.md](benchmarks/longmemeval/RESULTS.md) |
390
- | MemPalace | 96.6% | 廠商自行回報 |
391
- | Supermemory | ~82% | 廠商估計值 |
392
- | Zep | 63.8% | LongMemEval 論文 |
393
- | Mem0 | 49.0% | LongMemEval 論文 |
132
+ - `forget` 是把整筆記憶封存,不是刪掉。新的記憶可以蓋過舊的。
133
+ - 執行中的 agent 可呼叫 `work_package`,準備一份日曆摘要,或從最新且符合資格的近期 Claude Code transcript 取得有界限的可見輪次。Transcript 模式要求 client 提供唯一符合的 MCP file root;root 缺失或不明確,以及有界掃描失敗時都會封閉失敗。提交會保留遮蔽後的來源輪次,且只暫存為待人工審核提案;agent 不能自行套用或拒絕,MeMesh 也不會呼叫 provider。確切的探索上限請見 [API reference](docs/api/API_REFERENCE.md#work_package)。
394
134
 
395
- 重現指令、資料集 SHA256、原始逐題結果與已知失敗分析全部都在 [`benchmarks/longmemeval/`](benchmarks/longmemeval/)。約 10 秒可重跑一次。
135
+ 完整指令與工具說明:[docs/api/API_REFERENCE.md](docs/api/API_REFERENCE.md)。架構:[docs/ARCHITECTURE.md](docs/ARCHITECTURE.md)。參與開發:[CONTRIBUTING.md](CONTRIBUTING.md)。
396
136
 
397
137
  ---
398
138
 
399
- ## Claude Code 自動進行的事情
400
-
401
- 你不需要手動記住所有事情。MeMesh 有 **8 個 hooks**,會在你工作時自動擷取與注入知識:
402
-
403
- | 何時 | MeMesh 做什麼 |
404
- |------|------------------|
405
- | **每次 session 開始時** | 載入最相關的記憶 + 來自過去教訓的主動警告 |
406
- | **編輯檔案前** | 回憶與檔案或專案相關的記憶,再讓 Claude 寫程式碼 |
407
- | **當你要求記住** | 偵測「remember this」/「guardar en memesh」/「sauvegarder dans memesh」/「記下來」意圖(5 種語言)並提醒 Claude 使用 memesh |
408
- | **每次 `git commit` 之後** | 記錄你的變更,包含 diff 統計 |
409
- | **Claude 停止時** | 擷取已編輯的檔案、已修復的錯誤,並從失敗自動產生結構化教訓 |
410
- | **上下文壓縮前** | 在知識被上下文限制丟掉之前先保存 |
411
- | **危險指令與編輯前** | 觸發你接受過的教訓守衛——在記錄過的錯誤即將重演的那一刻發出警告 |
412
- | **已 opt-in 的 Codex session 啟動或恢復時** | 註冊該確切活動 thread 以接收有界完整訊息的原生傳遞;其他 workspace 與已停止 session 不會被附掛 |
413
-
414
- > **隨時退出:** `export MEMESH_AUTO_CAPTURE=false`
415
-
416
- ---
417
-
418
- ## 設定
419
-
420
- 所有設定都透過環境變數。預設是純本地、零網路 — 你不需要設定任何東西就能取得可運作的系統。
421
-
422
- | 變數 | 預設值 | 用途 |
423
- |---|---|---|
424
- | `MEMESH_DB_PATH` | `~/.memesh/knowledge-graph.db` | 覆寫 SQLite 資料庫位置。 |
425
- | `MEMESH_AUTO_CAPTURE` | `true` | 完全停用自動擷取 hooks(`Stop`、`PreCompact`)。 |
426
- | `MEMESH_AUTO_DETECT_LLM` | 未設定(自動偵測**開啟**) | 設為 `0` 讓 memesh 不使用它在 shell 環境中找到的 API 金鑰。預設情況下,如果設定了 `ANTHROPIC_API_KEY` / `OPENAI_API_KEY` / `OLLAMA_HOST` 且你沒有在 `~/.memesh/config.json` 設定供應商,memesh 會用它來跑寫入側的 LLM 功能(整合、經驗提取、自動打標籤、dream)。嵌入不受影響 —— 除非你把 `embedder.provider` 明確設定為 `ollama` 或 `openai`,否則保持僅關鍵字(FTS5)。 |
427
- | `MEMESH_AUTO_UPDATE` | `off` | 自動更新策略。`off`(預設)永不自動更新;`patch` 允許 `X.Y.Z → X.Y.Z+N`;`minor` 加上 `X.Y.Z → X.Y+1.0`;`major` 允許任何升級。允許時,分離的 `npm install -g` 會在 session 結束時(Stop hook)執行,避免阻塞你的工作 — 結果寫入 `~/.memesh/auto-update.log`。也可在 `~/.memesh/config.json` 中以 `autoUpdate` 設定(環境變數優先)。維護者的 deprecated 警示絕不會覆寫 `off`:請手動更新,或選擇允許該升級的 policy。 |
428
- | `OPENAI_API_KEY` | 未設定 | 你的 OpenAI 金鑰。除非你設定 `MEMESH_AUTO_DETECT_LLM=0` 或明確設定供應商,否則會自動用於 LLM 功能。 |
429
- | `OLLAMA_HOST` | `http://localhost:11434` | 使用本地 Ollama 供應商時覆寫 Ollama 的端點。 |
430
-
431
- `memesh doctor` 會印出已解析的設定,讓你看到目前實際生效的內容。
432
-
433
- **備援 LLM 供應商(Smart Mode)。** 在 dashboard 的 **Settings → 「Fallback providers」** 可以設定一條有順序的備援鏈——當你的主要供應商掛掉時,memesh 會依序改用清單裡的下一個。可以加本機的 [Ollama](https://ollama.com) 備援,或雲端的(OpenAI / Anthropic,需要 API key)。隱私取捨:一旦用到雲端備援,記憶內容(可能是私密的)會被送到那個供應商,所以如果你為了隱私只跑本機,這點要留意。
434
-
435
- 當 npm 將已安裝版本標為 deprecated(通常是安全公告),下次 session-start 會在前面附上強警示橫幅 `⚠️ MeMesh <ver> is DEPRECATED`,`memesh update-status` 也會持續顯示同一行直到你升級為止。檢查結果會被快取於 `~/.memesh/update-check.<version>.json`,以避免短暫網路失敗讓警示變淡。
436
-
437
- ---
438
-
439
- ## 儀表板
440
-
441
- 5 個分頁、11 種語言、零外部相依性。伺服器執行時可在 `http://localhost:3737/dashboard` 存取。
442
-
443
- | 分頁 | 你會看到 |
444
- |-----|-------------|
445
- | **Home** | memesh 為你做了什麼 — 以 dreamer 洞察開場:每週摘要和模式提案,一鍵接受/拒絕;完整的分析內容(記憶健康分數、30 天時間線、PM 速度 + KG 連通性、工作模式)收在可展開的區塊裡,需要時再打開 |
446
- | **Memories** | 整座記憶庫集中在同一個介面 — 即時過濾,按 Enter 由伺服器排名搜尋(全文 + 向量);範圍籤在工作層(目標/決策/教訓/計畫)、佐證、全部、已歸檔之間切換;叢集組成長條;每列可展開細節(教訓保留結構化的錯誤/根本原因/修復/預防檢視);歸檔/復原直接在列上操作 |
447
- | **Project** | 單一專案的歷史 — 透過專案選擇器檢視路線圖(階段、里程碑、關鍵教訓) |
448
- | **Graph** | 互動式力導向知識圖,具有類型篩選、搜尋、自我中心模式、近期熱力圖 |
449
- | **Settings** | LLM 供應商設定、即時語言選擇器 |
450
-
451
- ---
452
-
453
- ## 智慧功能
454
-
455
- **🧠 智慧搜尋** — 搜尋「登入安全」並找到關於「OAuth PKCE」的記憶。MeMesh 用 FTS5 + sqlite-vec 在熱路徑上保持 LLM-free,仍能跨同義詞匹配。
456
-
457
- **🌏 支援不用空格分詞的文字** — 中文、日文、韓文、泰文、寮文、高棉文和半形片假名都會拆成相鄰兩字一組來建索引,所以寫成「資料庫遷移前一定要先備份」的記憶,搜尋「備份」就找得到,不必打出一模一樣的全文。寫入和查詢兩邊都會做 NFC 正規化,因此在 macOS 上或用韓文、越南文輸入法打的記憶,兩種寫法都找得到。
458
-
459
- **📊 評分排名** — 結果按相關性(30%)+ 近期性(25%)+ 頻率(18%)+ 信心(17%)+ 回憶影響(10%)排名。
460
-
461
- **🔄 知識演進** — 決策會改變。`forget` 歸檔舊記憶(永不刪除)。`supersedes` 關係連結舊 → 新。你的 AI 總是看到最新版本。
462
-
463
- **⚠️ 衝突偵測** — `memesh dream conflicts` 會讓 LLM 判定語意上最接近的記憶配對,找出矛盾、汰換或重複,並把結果暫存成提案。沒有東西會自動套用:你用 `dream list` / `dream show` 檢視,只有被接受的提案才會建立關係 —— 之後每次 `recall` 碰到其中任一筆記憶都會帶上警告。因果關係從不從時間戳推論;判決依據的是記憶內容本身怎麼說。
464
-
465
- **🕸️ 知識圖連通性** — `memesh kg backfill-relations --all-rules` 使用標籤共現、專案叢集、會話上下文和名稱相似度連結孤立實體 — 無需 LLM。
466
-
467
- **📦 個人備份與搬遷** — `memesh export > memesh-backup.json` → 複製到另一台機器 → `memesh import memesh-backup.json`
468
- 匯入的組合保持可搜尋,但 MeMesh 不會自動將匯入的記憶注入 host context,直到你檢查或在本地重新儲存。
469
-
470
- ---
471
-
472
- ## 使用範例
473
-
474
- > 「MeMesh 記得我們三週前選擇了 PKCE 而不是隱式流程。當我再次問 Claude 關於身份驗證的問題時,它已經知道了——不需要重新解釋。」
475
- > — **獨立開發者,正在打造 SaaS**
476
-
477
- > 「我在 Claude Code 儲存的決策,隔天可以從 Codex 找回來。同一份在地記憶跟著工作走,不會被綁在單一代理上。」
478
- > — **使用多個程式開發代理的個人開發者**
479
-
480
- > 「儀表板顯示我 90% 的記憶是自動生成的對話日誌。我開始有意使用 `remember` 來記錄架構決策。改變了遊戲規則。」
481
- > — **發現分析面板的開發者**
482
-
483
- ---
484
-
485
- ## 食譜
486
-
487
- ### 在矛盾咬你之前先抓到它
488
-
489
- 兩個決策,隔了好幾週做的,卻不可能同時為真 — 這正是記憶層存在的目的,就是要抓到這種失敗模式:
490
-
491
- ```bash
492
- memesh remember --name retry-policy --type decision \
493
- --obs "所有 HTTP client 在請求失敗時都用指數退避重試,最多 5 次。"
494
- # ...幾週後,有人做了完全相反的決定...
495
- memesh remember --name retry-policy-v2 --type decision \
496
- --obs "HTTP client 絕對不能自動重試 — 立刻失敗並把錯誤丟出來。"
497
-
498
- memesh dream conflicts # 判定器標出這一對,附上判斷理由
499
- memesh dream show 1 # 看完整的判決、引用的段落,接受後會建立什麼
500
- memesh dream accept 1 # 由你決定 — 沒有東西會自動連起來
501
- memesh recall "retry policy" # → 警告:偵測到衝突
502
- ```
503
-
504
- 從此之後,任何回憶到這兩個決策之一的代理都會被告知它們互相矛盾 — 而不是自信地引用剛好先找到的那一個。
505
-
506
- ### 一份記憶,三個代理
507
-
508
- MeMesh 是一個 MCP server,所以同一個 SQLite 檔案能服務機器上的每一個 MCP 用戶端。每個工具只要註冊一次(確切指令見上方「60 秒快速開始」),在 Claude Code 記錄的決策,session 進行到一半時就能被 Codex 或另一個已設定的本機 MCP client 回憶起來 — 不用重新解釋,不用在不同廠商之間複製貼上 context。
509
-
510
- ### 記錄決策讓它們保持可被找到
511
-
512
- 自動擷取會保留 session 歷史,但真正划算的是那些刻意記下的記憶:
513
-
514
- ```bash
515
- memesh remember --name auth-approach --type decision \
516
- --obs "JWT 搭配 RS256;選 PKCE 而不是 implicit flow,因為 client 是公開的。" \
517
- --tags "project:myapp" "topic:auth"
518
- ```
519
-
520
- 事情發生時,用平常講話的方式把結果連回原因 — 從任何 MCP 用戶端都行,像是:「把這次事故記成一個教訓,受 auth-approach 影響」。`remember` 工具接受自由格式的關係,`caused`/`influenced` 是文件裡定義的因果詞彙(因 → 果,要明確說出來 — MeMesh 從不從時間戳推論因果關係)。幾週後,`memesh recall "為什麼選 PKCE"` 會回傳那個決策,連同它記錄下來的後續影響一起 — 是可以追溯的推理,不只是剛好比對到的文字。
521
-
522
- ---
523
-
524
- ## 解鎖智慧模式(可選)
525
-
526
- MeMesh 預設離線運作 — 回憶嚴格保持 LLM-free(開箱即用就有 LongMemEval-S 上 95.60% R@5)。只有當你想要在上層加入 LLM 增強的分析流程時,才需要加入 LLM API 金鑰:更聰明的 session 擷取、新記憶的自動標籤、從失敗產生教訓,以及 `dream` 壓縮:
527
-
528
- ```bash
529
- memesh config set llm.provider anthropic
530
- memesh config set llm.api-key sk-ant-...
531
- ```
532
-
533
- 或使用儀表板 Settings 分頁(視覺化設定):
534
-
535
- ```bash
536
- memesh serve # 開啟儀表板 → Settings 分頁
537
- ```
538
-
539
- **把過去的對話挖成記憶。** `memesh dream run --from-transcripts` 會讀這個專案的 Claude Code 對話記錄,請 LLM 找出藏在對話裡的決策與教訓,再把它們暫存成提案——不會自動寫進你的知識圖譜。用 `memesh dream show <id>` 逐一檢視,挑值得留的 accept。
540
-
541
- ### 自帶嵌入(可選)
542
-
543
- 預設情況下 MeMesh 只做**關鍵字**召回(FTS5)—— 無需 API 金鑰,無需下載模型,資料不離開你的機器。語意(以意義為基礎的)搜尋是選用的,需要一個嵌入器。設定其中之一:
544
-
545
- ```bash
546
- memesh config set embedder.provider openai # or: ollama
547
- ```
548
-
549
- 嵌入器**獨立於對話 LLM** 設定 —— 更改 `llm.provider` 絕不會悄悄改變你的嵌入。每個 provider 自己固定模型與維度(`ollama` → nomic-embed-text 768 維、`openai` → text-embedding-3-small 1536 維);模型不另外提供選項,因為一個向量索引的維度是固定的,換第二個模型會把另一個嵌入空間的向量寫進同一個索引。
550
-
551
- 如果切換到不同維度(如 768 → 1536),**不會刪掉任何東西**。MeMesh 保留現有索引,並在開啟時提示你執行 `memesh reindex`:新索引會建在舊索引旁邊,等到每一筆記憶都有向量才切換過去 —— 所以重建中途被打斷不會損失任何東西,下次會從斷點繼續。這段期間語意搜尋是關閉的,召回只走關鍵字搜尋;`recall` 會回報 `degraded`,不會假裝搜過了。支援的 `embedder.provider` 取值:`ollama`(本地)、`openai`(託管)。兩者都不設定時,召回保持關鍵字搜尋。
552
-
553
- | | 等級 0(預設) | 等級 1(智慧模式) |
554
- |---|---|---|
555
- | **搜尋** | FTS5 + sqlite-vec,95.60% R@5 | 不變 — 回憶在每個等級都保持 LLM-free |
556
- | **自動擷取** | 基於規則的模式 | + LLM 擷取決策與教訓 |
557
- | **自動標籤** | 僅手動標籤 | + LLM 為新記憶產生標籤 |
558
- | **失敗分析** | 不可用 | + LLM 將 session 錯誤轉為結構化教訓 |
559
- | **壓縮** | 不可用 | `dream` 壓縮冗長記憶 |
560
- | **成本** | 免費,無需 API 金鑰 | 約 $0.0001 / 次分析呼叫(Haiku) |
561
-
562
- ---
563
-
564
- ## 全部 11 個記憶與協作工具
139
+ ## 全部 12 個記憶與協作工具
565
140
 
566
141
  | 工具 | 做什麼 |
567
142
  |------|--------|
143
+ | `work_package` | 準備一份有界限且不受信任的日曆摘要,或從唯一符合的 MCP workspace root 準備 Claude Code transcript 套件;提交一份嚴格結果等待人工審核,或延後而不產生耐久變更。Transcript 提交會保留有界且已遮蔽的來源輪次;不會暴露檔案路徑、隱藏推理、provider、embedding 或 vector 資料。 |
568
144
  | `remember` | 用觀察、關係和標籤儲存知識 |
569
- | `recall` | FTS5 + sqlite-vec 搜尋,包含多因素評分(相關性、近期性、頻率、信心、回憶影響)— 熱路徑上不使用 LLM |
145
+ | `recall` | 本機 FTS5 搜尋,包含多因素評分(相關性、近期性、頻率、信心、回憶影響) |
570
146
  | `forget` | 軟歸檔(永不刪除)或移除特定觀察 |
571
147
  | `export` | 以 JSON 備份、搬遷記憶,或在相容代理之間轉移 |
572
148
  | `import` | 匯入記憶,包含合併策略(跳過 / 覆寫 / 追加) |
@@ -579,81 +155,17 @@ memesh config set embedder.provider openai # or: ollama
579
155
 
580
156
  ---
581
157
 
582
- ## 架構
583
-
584
- ```
585
- ┌─────────────────┐
586
- │ 核心引擎 │
587
- │ 核心操作 │
588
- └────────┬────────┘
589
- ┌─────────────────┼─────────────────┐
590
- │ │ │
591
- CLI (memesh) HTTP API (serve) MCP (memesh-mcp)
592
- │ │ │
593
- └─────────────────┼─────────────────┘
594
-
595
- SQLite + FTS5 + sqlite-vec
596
- (~/.memesh/knowledge-graph.db)
597
- ```
598
-
599
- 核心與框架無關。同一邏輯從終端、HTTP 或 MCP 執行。
600
-
601
- ---
602
-
603
- ## 升級
604
-
605
- Claude Code 的 plugin marketplace 在安裝時把版本釘住,**不會**自動更新。要拿到新版本:
606
-
607
- **方法 A — `/plugin` 介面**:先 uninstall `memesh@pcircle-memesh`,再重新安裝。Claude Code 會抓 marketplace 最新版。
608
-
609
- **方法 B — 一行指令**(不用點 UI、可重複執行;需要 npm CLI,`npm install -g @pcircle/memesh`):
610
-
611
- ```bash
612
- memesh upgrade-plugin
613
- ```
614
-
615
- 它會自己找到已安裝的 plugin 版本、確認前置工具都在,再幫你執行內建的升級腳本。前置工具:PATH 上要有 `node`、`npm`、`rsync`(macOS 內建 rsync;Debian/Ubuntu:`sudo apt install rsync`)。
616
-
617
- 只裝了 plugin、沒裝 npm CLI 的人,仍然可以手動執行腳本 — 把路徑裡的版本換成你安裝的版本:
618
-
619
- ```bash
620
- bash ~/.claude/plugins/cache/pcircle-memesh/memesh/<current-version>/scripts/upgrade-plugin.sh
621
-
622
- # v4.2.5 之前的安裝還沒內建這個腳本,改用 npm-global 的副本
623
- # (參考上面「安裝路徑一覽」):
624
- bash "$(npm prefix -g)/lib/node_modules/@pcircle/memesh/scripts/upgrade-plugin.sh"
625
- ```
626
-
627
- 腳本會 fast-forward marketplace cache、把新版本放進 `~/.claude/plugins/cache/`、安裝 runtime deps,然後把 `installed_plugins.json` 重指向新版本。執行完請重啟 Claude Code 讓 MCP server 重連。
628
-
629
- **npm-global 安裝**(`npm install -g @pcircle/memesh`)可以直接 `memesh update` 自動更新。Source checkout 請先安裝 npm,再執行 `git pull && npm install && npm run build`。
630
-
631
- **Codex plugin marketplace 安裝**(使用 Codex CLI):
632
-
633
- ```bash
634
- codex plugin marketplace add PCIRCLE-AI/memesh
635
- codex plugin add memesh@pcircle-memesh
636
- ```
158
+ ## 細節
637
159
 
638
- marketplace snapshot 已過期,先執行 `codex plugin marketplace upgrade pcircle-memesh`,再用 `codex plugin remove memesh` 後重新執行 `codex plugin add memesh@pcircle-memesh`。
160
+ **評分排序** 結果依相關性(30%)+ 近期性(25%)+ 頻率(18%)+ 信心(17%)+ 回想影響(10%)排序。
639
161
 
640
- Session 開始時,有新版本可下載時會跳一行 banner(每版本每 24 小時節流一次),`memesh doctor` 會回報升級目標版本與對應指令。
641
-
642
- ---
162
+ **agent 訊息的完整規則**(完整說明:[docs/platforms/agent-messaging.md](docs/platforms/agent-messaging.md)):
643
163
 
644
- ## 貢獻
645
-
646
- ```bash
647
- git clone https://github.com/PCIRCLE-AI/memesh
648
- cd memesh && npm install && npm run build
649
- npm test
650
- npm run test:e2e-dashboard
651
- ```
652
-
653
- 儀表板:`cd dashboard && npm install && npm run dev`
164
+ - 今天就能做的:MCP、HTTP 或 CLI sender 可把一份 JSON 編碼後不超過 65,536 UTF-8 bytes(64 KiB)的不受信任 payload 耐久化送給一個指定的本機 recipient。接收端可另行擷取、在重啟後用 opaque cursor 補收,並把 intake、acknowledgement、workflow disposition 與 host activation 分開記錄。
165
+ - 啟用 MeMesh Codex plugin 後,每個具有有效 thread identity 與現有工作目錄、並新啟動或恢復的一般 Codex CLI thread,都會自動以 thread-scoped identity 註冊,不需要手動執行 `agent setup`。SessionStart 會啟動 owner-private detached companion,因為 Codex CLI 結束時會回收 async hook child;SessionEnd 保留 45 秒的有限 idle queue 視窗,resume 會取代前一個 exact generation,逾時則移除 registration。在 idle 視窗內被 queue 接受的訊息,會在同一 thread resume 時進入模型;這不代表已停止的 UI 被自動喚醒。只有某個 workspace 需要穩定的命名 principal 時,才需選用 `memesh agent setup codex-session`。包含 routing metadata 與 payload 的完整 native envelope 另有 16,384 bytes(16 KiB)上限。exact-session send 只有在原生 queue 接受後才成功;完整 envelope 過大時回報 `native_message_too_large`,其他無法使用或拒絕的 session 則回報 `recipient_unavailable`。scope 相符的 recovery data 仍會保留,Principal target 在無法原生傳遞時仍保有 durable store-and-forward。原生接受不代表 acknowledgement 或 workflow disposition,原生訊息不得包含 secrets。
166
+ - 已停止、缺失或斷線的 Codex session 不會被喚醒,也不會被別的對話頂替;失敗的 exact-session 原生傳遞不會自動重播,sender 必須明確重試。scope 相符的 recovery data 仍會保留,`memesh message storage report` 可以看目前存了什麼。原生傳遞目前只支援 macOS 和 Linux。
167
+ - 這條文件化的原生路徑涵蓋一般 Codex CLI。除非確切且正在執行的 session 出現在 `message discover`,否則不要假設 Codex Desktop 或未連接的 task 已註冊;這是證據邊界,不代表這些 host 一律不相容。
654
168
 
655
169
  ---
656
170
 
657
- <p align="center">
658
- <strong>MIT</strong> — 由 <a href="https://pcircle.com">PCIRCLE AI</a> 製作
659
- </p>
171
+ <p align="center"><strong>MIT 授權</strong></p>