memu-cli 0.2.0__tar.gz → 0.4.0__tar.gz

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 (216) hide show
  1. {memu_cli-0.2.0 → memu_cli-0.4.0}/.github/workflows/publish-memu-cli.yml +11 -16
  2. {memu_cli-0.2.0 → memu_cli-0.4.0}/.github/workflows/release-please.yml +3 -7
  3. {memu_cli-0.2.0 → memu_cli-0.4.0}/CHANGELOG.md +100 -0
  4. memu_cli-0.4.0/INSTALL-LATEST.md +134 -0
  5. {memu_cli-0.2.0 → memu_cli-0.4.0}/PKG-INFO +31 -15
  6. {memu_cli-0.2.0 → memu_cli-0.4.0}/README.md +29 -13
  7. memu_cli-0.4.0/SKILL.md +97 -0
  8. {memu_cli-0.2.0 → memu_cli-0.4.0}/docs/adr/0009-codex-packaging-cli-and-config.md +1 -1
  9. memu_cli-0.4.0/docs/adr/0010-multi-host-adapters.md +167 -0
  10. memu_cli-0.4.0/docs/adr/0011-generic-host-adapter.md +85 -0
  11. {memu_cli-0.2.0 → memu_cli-0.4.0}/docs/adr/README.md +2 -0
  12. {memu_cli-0.2.0 → memu_cli-0.4.0}/npm/README.md +2 -2
  13. {memu_cli-0.2.0 → memu_cli-0.4.0}/npm/bin/memu.js +1 -2
  14. {memu_cli-0.2.0 → memu_cli-0.4.0}/npm/package.json +1 -1
  15. {memu_cli-0.2.0 → memu_cli-0.4.0}/pyproject.toml +12 -3
  16. {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/app/agentic.py +17 -4
  17. {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/cli.py +8 -0
  18. {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/embedding/http_client.py +60 -5
  19. {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/embedding/openai_sdk.py +21 -2
  20. {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/env.py +20 -1
  21. {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/hosts/base.py +8 -0
  22. {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/hosts/bridging/layout.py +15 -2
  23. {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/hosts/bridging/manifest.py +8 -4
  24. {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/hosts/bridging/pipeline.py +24 -4
  25. {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/hosts/bridging/transcripts.py +14 -7
  26. memu_cli-0.4.0/src/memu/hosts/claude_code/BRIDGING_TASK.md +118 -0
  27. memu_cli-0.4.0/src/memu/hosts/claude_code/INSTALL.md +197 -0
  28. memu_cli-0.4.0/src/memu/hosts/claude_code/UNINSTALL.md +108 -0
  29. memu_cli-0.4.0/src/memu/hosts/claude_code/__init__.py +11 -0
  30. memu_cli-0.4.0/src/memu/hosts/claude_code/cli.py +53 -0
  31. memu_cli-0.4.0/src/memu/hosts/claude_code/sessions.py +74 -0
  32. {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/hosts/codex/BRIDGING_TASK.md +21 -10
  33. {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/hosts/codex/INSTALL.md +69 -20
  34. memu_cli-0.4.0/src/memu/hosts/codex/UNINSTALL.md +101 -0
  35. memu_cli-0.4.0/src/memu/hosts/codex/cli.py +74 -0
  36. memu_cli-0.4.0/src/memu/hosts/codex/sessions.py +80 -0
  37. memu_cli-0.4.0/src/memu/hosts/cursor/BRIDGING_TASK.md +112 -0
  38. memu_cli-0.4.0/src/memu/hosts/cursor/INSTALL.md +159 -0
  39. memu_cli-0.4.0/src/memu/hosts/cursor/UNINSTALL.md +105 -0
  40. memu_cli-0.4.0/src/memu/hosts/cursor/__init__.py +11 -0
  41. memu_cli-0.4.0/src/memu/hosts/cursor/cli.py +49 -0
  42. memu_cli-0.4.0/src/memu/hosts/cursor/sessions.py +74 -0
  43. memu_cli-0.4.0/src/memu/hosts/generic/BRIDGING_TASK.md +144 -0
  44. memu_cli-0.4.0/src/memu/hosts/generic/INSTALL.md +184 -0
  45. memu_cli-0.4.0/src/memu/hosts/generic/UNINSTALL.md +108 -0
  46. memu_cli-0.4.0/src/memu/hosts/generic/__init__.py +12 -0
  47. memu_cli-0.4.0/src/memu/hosts/generic/cli.py +86 -0
  48. memu_cli-0.4.0/src/memu/hosts/generic/detect.py +207 -0
  49. memu_cli-0.4.0/src/memu/hosts/generic/sessions.py +141 -0
  50. memu_cli-0.4.0/src/memu/hosts/hermes/BRIDGING_TASK.md +115 -0
  51. memu_cli-0.4.0/src/memu/hosts/hermes/INSTALL.md +174 -0
  52. memu_cli-0.4.0/src/memu/hosts/hermes/UNINSTALL.md +114 -0
  53. memu_cli-0.4.0/src/memu/hosts/hermes/__init__.py +12 -0
  54. memu_cli-0.4.0/src/memu/hosts/hermes/cli.py +56 -0
  55. memu_cli-0.4.0/src/memu/hosts/hermes/sessions.py +129 -0
  56. memu_cli-0.4.0/src/memu/hosts/host_cli.py +317 -0
  57. memu_cli-0.4.0/src/memu/hosts/instruction.py +320 -0
  58. memu_cli-0.4.0/src/memu/hosts/openclaw/BRIDGING_TASK.md +139 -0
  59. memu_cli-0.4.0/src/memu/hosts/openclaw/INSTALL.md +179 -0
  60. memu_cli-0.4.0/src/memu/hosts/openclaw/UNINSTALL.md +112 -0
  61. memu_cli-0.4.0/src/memu/hosts/openclaw/__init__.py +11 -0
  62. memu_cli-0.4.0/src/memu/hosts/openclaw/cli.py +54 -0
  63. memu_cli-0.4.0/src/memu/hosts/openclaw/sessions.py +93 -0
  64. memu_cli-0.4.0/src/memu/hosts/workbuddy/BRIDGING_TASK.md +115 -0
  65. memu_cli-0.4.0/src/memu/hosts/workbuddy/INSTALL.md +162 -0
  66. memu_cli-0.4.0/src/memu/hosts/workbuddy/UNINSTALL.md +96 -0
  67. memu_cli-0.4.0/src/memu/hosts/workbuddy/__init__.py +11 -0
  68. memu_cli-0.4.0/src/memu/hosts/workbuddy/cli.py +48 -0
  69. memu_cli-0.4.0/src/memu/hosts/workbuddy/sessions.py +86 -0
  70. {memu_cli-0.2.0 → memu_cli-0.4.0}/tests/test_agentic.py +8 -3
  71. memu_cli-0.4.0/tests/test_bridging_promotion.py +125 -0
  72. memu_cli-0.4.0/tests/test_cli_stdio.py +47 -0
  73. memu_cli-0.4.0/tests/test_doctor_proxy_hint.py +169 -0
  74. memu_cli-0.4.0/tests/test_embedding_proxy.py +200 -0
  75. memu_cli-0.4.0/tests/test_env_passthrough.py +72 -0
  76. memu_cli-0.4.0/tests/test_host_generic.py +145 -0
  77. memu_cli-0.4.0/tests/test_host_instruction.py +294 -0
  78. memu_cli-0.4.0/tests/test_host_sessions.py +402 -0
  79. {memu_cli-0.2.0 → memu_cli-0.4.0}/uv.lock +1 -1
  80. memu_cli-0.2.0/src/memu/hosts/codex/cli.py +0 -167
  81. memu_cli-0.2.0/src/memu/hosts/codex/sessions.py +0 -52
  82. memu_cli-0.2.0/src/memu/hosts/instruction.py +0 -148
  83. memu_cli-0.2.0/tests/test_host_instruction.py +0 -91
  84. {memu_cli-0.2.0 → memu_cli-0.4.0}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  85. {memu_cli-0.2.0 → memu_cli-0.4.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  86. {memu_cli-0.2.0 → memu_cli-0.4.0}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  87. {memu_cli-0.2.0 → memu_cli-0.4.0}/.github/ISSUE_TEMPLATE/hackathon_task.yml +0 -0
  88. {memu_cli-0.2.0 → memu_cli-0.4.0}/.github/ISSUE_TEMPLATE/improvement_suggestion.yml +0 -0
  89. {memu_cli-0.2.0 → memu_cli-0.4.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  90. {memu_cli-0.2.0 → memu_cli-0.4.0}/.github/workflows/build.yml +0 -0
  91. {memu_cli-0.2.0 → memu_cli-0.4.0}/.github/workflows/pr-title.yml +0 -0
  92. {memu_cli-0.2.0 → memu_cli-0.4.0}/.gitignore +0 -0
  93. {memu_cli-0.2.0 → memu_cli-0.4.0}/.pre-commit-config.yaml +0 -0
  94. {memu_cli-0.2.0 → memu_cli-0.4.0}/.python-version +0 -0
  95. {memu_cli-0.2.0 → memu_cli-0.4.0}/AGENTS.md +0 -0
  96. {memu_cli-0.2.0 → memu_cli-0.4.0}/CONTRIBUTING.md +0 -0
  97. {memu_cli-0.2.0 → memu_cli-0.4.0}/Cargo.lock +0 -0
  98. {memu_cli-0.2.0 → memu_cli-0.4.0}/Cargo.toml +0 -0
  99. {memu_cli-0.2.0 → memu_cli-0.4.0}/LICENSE.txt +0 -0
  100. {memu_cli-0.2.0 → memu_cli-0.4.0}/MANIFEST.in +0 -0
  101. {memu_cli-0.2.0 → memu_cli-0.4.0}/Makefile +0 -0
  102. {memu_cli-0.2.0 → memu_cli-0.4.0}/assets/banner.png +0 -0
  103. {memu_cli-0.2.0 → memu_cli-0.4.0}/assets/benchmark.png +0 -0
  104. {memu_cli-0.2.0 → memu_cli-0.4.0}/assets/memUbot.png +0 -0
  105. {memu_cli-0.2.0 → memu_cli-0.4.0}/assets/memorize.png +0 -0
  106. {memu_cli-0.2.0 → memu_cli-0.4.0}/assets/partners/Clawdchat.png +0 -0
  107. {memu_cli-0.2.0 → memu_cli-0.4.0}/assets/partners/LazyLLM.png +0 -0
  108. {memu_cli-0.2.0 → memu_cli-0.4.0}/assets/partners/buddie.png +0 -0
  109. {memu_cli-0.2.0 → memu_cli-0.4.0}/assets/partners/bytebase.png +0 -0
  110. {memu_cli-0.2.0 → memu_cli-0.4.0}/assets/partners/jazz.png +0 -0
  111. {memu_cli-0.2.0 → memu_cli-0.4.0}/assets/partners/openagents.png +0 -0
  112. {memu_cli-0.2.0 → memu_cli-0.4.0}/assets/partners/xroute.png +0 -0
  113. {memu_cli-0.2.0 → memu_cli-0.4.0}/assets/qrcode.png +0 -0
  114. {memu_cli-0.2.0 → memu_cli-0.4.0}/assets/retrieve.png +0 -0
  115. {memu_cli-0.2.0 → memu_cli-0.4.0}/assets/star.gif +0 -0
  116. {memu_cli-0.2.0 → memu_cli-0.4.0}/assets/structure-v2.png +0 -0
  117. {memu_cli-0.2.0 → memu_cli-0.4.0}/assets/structure.png +0 -0
  118. {memu_cli-0.2.0 → memu_cli-0.4.0}/assets/usecase/ai_companion-0000.jpg +0 -0
  119. {memu_cli-0.2.0 → memu_cli-0.4.0}/assets/usecase/ai_creation-0000.jpg +0 -0
  120. {memu_cli-0.2.0 → memu_cli-0.4.0}/assets/usecase/ai_edu-0000.jpg +0 -0
  121. {memu_cli-0.2.0 → memu_cli-0.4.0}/assets/usecase/ai_ip-0000.png +0 -0
  122. {memu_cli-0.2.0 → memu_cli-0.4.0}/assets/usecase/ai_robot-0000.jpg +0 -0
  123. {memu_cli-0.2.0 → memu_cli-0.4.0}/assets/usecase/ai_role_play-0000.jpg +0 -0
  124. {memu_cli-0.2.0 → memu_cli-0.4.0}/assets/usecase/ai_therapy-0000.jpg +0 -0
  125. {memu_cli-0.2.0 → memu_cli-0.4.0}/docs/adr/0001-workflow-pipeline-architecture.md +0 -0
  126. {memu_cli-0.2.0 → memu_cli-0.4.0}/docs/adr/0002-pluggable-storage-and-vector-strategy.md +0 -0
  127. {memu_cli-0.2.0 → memu_cli-0.4.0}/docs/adr/0003-user-scope-in-data-model.md +0 -0
  128. {memu_cli-0.2.0 → memu_cli-0.4.0}/docs/adr/0004-workspace-memorize-and-memory-file-system.md +0 -0
  129. {memu_cli-0.2.0 → memu_cli-0.4.0}/docs/adr/0005-dedicated-embedding-package.md +0 -0
  130. {memu_cli-0.2.0 → memu_cli-0.4.0}/docs/adr/0006-from-memory-item-category-to-tracked-workspace-memorization.md +0 -0
  131. {memu_cli-0.2.0 → memu_cli-0.4.0}/docs/adr/0007-three-independent-memory-lines-wiki-graph.md +0 -0
  132. {memu_cli-0.2.0 → memu_cli-0.4.0}/docs/adr/0008-two-integration-surfaces-hooks-and-api.md +0 -0
  133. {memu_cli-0.2.0 → memu_cli-0.4.0}/docs/sqlite.md +0 -0
  134. {memu_cli-0.2.0 → memu_cli-0.4.0}/scripts/db.py +0 -0
  135. {memu_cli-0.2.0 → memu_cli-0.4.0}/setup.cfg +0 -0
  136. {memu_cli-0.2.0 → memu_cli-0.4.0}/src/lib.rs +0 -0
  137. {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/__init__.py +0 -0
  138. {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/__main__.py +0 -0
  139. {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/_core.pyi +0 -0
  140. {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/app/__init__.py +0 -0
  141. {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/app/client_pool.py +0 -0
  142. {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/app/service.py +0 -0
  143. {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/app/settings.py +0 -0
  144. {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/database/__init__.py +0 -0
  145. {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/database/factory.py +0 -0
  146. {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/database/inmemory/__init__.py +0 -0
  147. {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/database/inmemory/models.py +0 -0
  148. {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/database/inmemory/repo.py +0 -0
  149. {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/database/inmemory/repositories/__init__.py +0 -0
  150. {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/database/inmemory/repositories/filter.py +0 -0
  151. {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/database/inmemory/repositories/recall_file_repo.py +0 -0
  152. {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/database/inmemory/repositories/recall_file_resource_repo.py +0 -0
  153. {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/database/inmemory/repositories/recall_file_segment_repo.py +0 -0
  154. {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/database/inmemory/repositories/resource_repo.py +0 -0
  155. {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/database/inmemory/state.py +0 -0
  156. {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/database/inmemory/vector.py +0 -0
  157. {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/database/interfaces.py +0 -0
  158. {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/database/models.py +0 -0
  159. {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/database/postgres/__init__.py +0 -0
  160. {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/database/postgres/migration.py +0 -0
  161. {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/database/postgres/migrations/__init__.py +0 -0
  162. {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/database/postgres/migrations/env.py +0 -0
  163. {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/database/postgres/migrations/script.py.mako +0 -0
  164. {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/database/postgres/migrations/versions/20260703_0001_initial_schema.py +0 -0
  165. {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/database/postgres/models.py +0 -0
  166. {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/database/postgres/postgres.py +0 -0
  167. {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/database/postgres/repositories/__init__.py +0 -0
  168. {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/database/postgres/repositories/base.py +0 -0
  169. {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/database/postgres/repositories/recall_file_repo.py +0 -0
  170. {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/database/postgres/repositories/recall_file_resource_repo.py +0 -0
  171. {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/database/postgres/repositories/recall_file_segment_repo.py +0 -0
  172. {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/database/postgres/repositories/resource_repo.py +0 -0
  173. {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/database/postgres/schema.py +0 -0
  174. {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/database/postgres/session.py +0 -0
  175. {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/database/repositories/__init__.py +0 -0
  176. {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/database/repositories/recall_file.py +0 -0
  177. {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/database/repositories/recall_file_resource.py +0 -0
  178. {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/database/repositories/recall_file_segment.py +0 -0
  179. {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/database/repositories/resource.py +0 -0
  180. {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/database/sqlite/__init__.py +0 -0
  181. {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/database/sqlite/models.py +0 -0
  182. {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/database/sqlite/repositories/__init__.py +0 -0
  183. {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/database/sqlite/repositories/base.py +0 -0
  184. {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/database/sqlite/repositories/recall_file_repo.py +0 -0
  185. {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/database/sqlite/repositories/recall_file_resource_repo.py +0 -0
  186. {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/database/sqlite/repositories/recall_file_segment_repo.py +0 -0
  187. {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/database/sqlite/repositories/resource_repo.py +0 -0
  188. {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/database/sqlite/schema.py +0 -0
  189. {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/database/sqlite/session.py +0 -0
  190. {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/database/sqlite/sqlite.py +0 -0
  191. {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/database/state.py +0 -0
  192. {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/embedding/__init__.py +0 -0
  193. {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/embedding/backends/__init__.py +0 -0
  194. {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/embedding/backends/base.py +0 -0
  195. {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/embedding/backends/doubao.py +0 -0
  196. {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/embedding/backends/jina.py +0 -0
  197. {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/embedding/backends/openai.py +0 -0
  198. {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/embedding/backends/openrouter.py +0 -0
  199. {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/embedding/backends/voyage.py +0 -0
  200. {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/embedding/base.py +0 -0
  201. {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/embedding/defaults.py +0 -0
  202. {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/embedding/gateway.py +0 -0
  203. {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/hosts/__init__.py +0 -0
  204. {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/hosts/bridging/__init__.py +0 -0
  205. {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/hosts/bridging/instructions.py +0 -0
  206. {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/hosts/bridging/recall_files.py +0 -0
  207. {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/hosts/bridging/resources.py +0 -0
  208. {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/hosts/codex/__init__.py +0 -0
  209. {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/hosts/retrieval.py +0 -0
  210. {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/vector.py +0 -0
  211. {memu_cli-0.2.0 → memu_cli-0.4.0}/tests/__init__.py +0 -0
  212. {memu_cli-0.2.0 → memu_cli-0.4.0}/tests/rust_entry_test.py +0 -0
  213. {memu_cli-0.2.0 → memu_cli-0.4.0}/tests/test_cli.py +0 -0
  214. {memu_cli-0.2.0 → memu_cli-0.4.0}/tests/test_embedding.py +0 -0
  215. {memu_cli-0.2.0 → memu_cli-0.4.0}/tests/test_postgres_migration_config.py +0 -0
  216. {memu_cli-0.2.0 → memu_cli-0.4.0}/tests/test_vector.py +0 -0
@@ -1,10 +1,9 @@
1
- # Publishes the engine snapshot to PyPI under the distribution name `memu-cli`.
1
+ # Publishes the engine to PyPI as `memu-cli` — the one and only distribution.
2
2
  #
3
- # `memu-cli` is the CLI release channel: it ships the same `memu` module and
4
- # entry points as `memu-py`, but versions independently of the release-please
5
- # train so the npm launcher and docs can point at a stable install target.
6
- # The rename happens at build time only — pyproject.toml in the repo always
7
- # says `memu-py`.
3
+ # `memu-cli` versions independently of the release-please train (which still
4
+ # cuts GitHub releases and the changelog), so the npm launcher and docs can
5
+ # point at a stable install target; the version is set at build time from the
6
+ # workflow input.
8
7
  #
9
8
  # First-time setup: add a trusted publisher on PyPI for project `memu-cli`
10
9
  # (workflow: publish-memu-cli.yml, environment: pypi).
@@ -13,7 +12,7 @@ on:
13
12
  workflow_dispatch:
14
13
  inputs:
15
14
  version:
16
- description: "memu-cli version to publish (independent of memu-py, e.g. 0.1.1)"
15
+ description: "memu-cli version to publish (e.g. 0.2.1)"
17
16
  required: true
18
17
  type: string
19
18
 
@@ -57,14 +56,12 @@ jobs:
57
56
 
58
57
  # No $ anchors: Windows runners check out with CRLF line endings,
59
58
  # where a trailing \r sits between the closing quote and the newline.
60
- - name: Rename distribution to memu-cli
59
+ - name: Set memu-cli version
61
60
  shell: bash
62
61
  run: |
63
- perl -pi -e 's/^name = "memu-py"/name = "memu-cli"/' pyproject.toml
64
62
  perl -pi -e 's/^version = "[^"]*"/version = "${{ inputs.version }}"/ if $. < 10' pyproject.toml
65
- perl -pi -e 's/^description = "[^"]*"/description = "CLI distribution channel for memU (same engine as memu-py). Personal memory as files."/' pyproject.toml
66
- grep -q '^name = "memu-cli"' pyproject.toml || { echo "::error::rename to memu-cli did not apply"; exit 1; }
67
- grep -E '^(name|version|description) = ' pyproject.toml | head -3
63
+ grep -q '^name = "memu-cli"' pyproject.toml || { echo "::error::pyproject is not memu-cli"; exit 1; }
64
+ grep -E '^(name|version) = ' pyproject.toml | head -2
68
65
 
69
66
  - name: Install uv
70
67
  uses: astral-sh/setup-uv@v7
@@ -108,13 +105,11 @@ jobs:
108
105
  steps:
109
106
  - uses: actions/checkout@v6
110
107
 
111
- - name: Rename distribution to memu-cli
108
+ - name: Set memu-cli version
112
109
  shell: bash
113
110
  run: |
114
- perl -pi -e 's/^name = "memu-py"/name = "memu-cli"/' pyproject.toml
115
111
  perl -pi -e 's/^version = "[^"]*"/version = "${{ inputs.version }}"/ if $. < 10' pyproject.toml
116
- perl -pi -e 's/^description = "[^"]*"/description = "CLI distribution channel for memU (same engine as memu-py). Personal memory as files."/' pyproject.toml
117
- grep -q '^name = "memu-cli"' pyproject.toml || { echo "::error::rename to memu-cli did not apply"; exit 1; }
112
+ grep -q '^name = "memu-cli"' pyproject.toml || { echo "::error::pyproject is not memu-cli"; exit 1; }
118
113
 
119
114
  - name: Install uv
120
115
  uses: astral-sh/setup-uv@v7
@@ -120,6 +120,9 @@ jobs:
120
120
  path: dist/*.tar.gz
121
121
  if-no-files-found: error
122
122
 
123
+ # Release artifacts go to the GitHub release only. PyPI publishing happens
124
+ # exclusively through publish-memu-cli.yml (the `memu-cli` distribution,
125
+ # versioned independently of this release train).
123
126
  publish:
124
127
  name: publish release artifacts
125
128
  runs-on: ubuntu-latest
@@ -128,9 +131,7 @@ jobs:
128
131
  - build-wheels
129
132
  - build-sdist
130
133
  if: ${{ needs.release-please.outputs.releases_created == 'true' && needs.release-please.outputs.tag_name != '' }}
131
- environment: pypi
132
134
  permissions:
133
- id-token: write
134
135
  contents: write
135
136
  steps:
136
137
  - name: Download wheel artifacts
@@ -153,8 +154,3 @@ jobs:
153
154
  file: dist/*
154
155
  tag: ${{ needs.release-please.outputs.tag_name }}
155
156
  file_glob: true
156
-
157
- - name: Publish to PyPI
158
- uses: pypa/gh-action-pypi-publish@release/v1
159
- with:
160
- packages-dir: dist/
@@ -1,5 +1,105 @@
1
1
  # Changelog
2
2
 
3
+ ## [2.0.0-beta.0](https://github.com/NevaMind-AI/memU/compare/v1.5.1...v2.0.0-beta.0) (2026-07-23)
4
+
5
+
6
+ ### Features
7
+
8
+ * **blob:** ingest rich documents (PDF/Office/HTML) via MarkItDown ([#447](https://github.com/NevaMind-AI/memU/issues/447)) ([1e16341](https://github.com/NevaMind-AI/memU/commit/1e1634131f84ceb023d03cd87bcf062317abd5ba))
9
+ * Codex session-bridging pipeline and scheduled-task skill ([#477](https://github.com/NevaMind-AI/memU/issues/477)) ([1a8edb5](https://github.com/NevaMind-AI/memU/commit/1a8edb57110ebfd208b2fe1f52e3998058fed408))
10
+ * **doctor:** diagnose proxy hijacking instead of printing a bare 502 ([7c41eec](https://github.com/NevaMind-AI/memU/commit/7c41eecd53e4c13b1a5c25b01b70f484147295fb))
11
+ * **env:** config.env carries NO_PROXY; MEMU_HTTP_PROXY works from the file ([5265945](https://github.com/NevaMind-AI/memU/commit/5265945e3063529819415194e79c46b7614d6081))
12
+ * from memory item/category to tracked entry/file for workspace memorization (ADR 0006) ([#456](https://github.com/NevaMind-AI/memU/issues/456)) ([68877da](https://github.com/NevaMind-AI/memU/commit/68877da10a1a18be5c708ec1ab7eb6c45b80ae50))
13
+ * **hermes:** install retrieval as a skill ([#536](https://github.com/NevaMind-AI/memU/issues/536)) ([8766d3d](https://github.com/NevaMind-AI/memU/commit/8766d3d3903383a3d4ff38d0f0d620cdf97418ec))
14
+ * **hosts:** add Claude Code, Cursor, OpenClaw, and Hermes host adapters ([#494](https://github.com/NevaMind-AI/memU/issues/494)) ([24d1b3b](https://github.com/NevaMind-AI/memU/commit/24d1b3b4f345106f07f1262dc2756b49fb7102cf))
15
+ * **hosts:** add memu-agent, a generic adapter for any other agent ([#496](https://github.com/NevaMind-AI/memU/issues/496)) ([e46a1f0](https://github.com/NevaMind-AI/memU/commit/e46a1f04a216a80b3a38064866420c79205fbe22))
16
+ * **hosts:** agent-driven uninstall — remove-instruction, docs uninstall, per-host guides ([#509](https://github.com/NevaMind-AI/memU/issues/509)) ([f51673e](https://github.com/NevaMind-AI/memU/commit/f51673e6e80b23c570a7364b415bf61481956971))
17
+ * **hosts:** install retrieval as a skill on Codex and Claude Code ([#535](https://github.com/NevaMind-AI/memU/issues/535)) ([2ed480e](https://github.com/NevaMind-AI/memU/commit/2ed480ebe462fe4008fdb4315cf5ab9e0316dba4))
18
+ * layered, track-aware workspace memorize & retrieve ([#466](https://github.com/NevaMind-AI/memU/issues/466)) ([094e22f](https://github.com/NevaMind-AI/memU/commit/094e22f0e10e7fe71c079608407b6a01b4d67e55))
19
+ * **llm,vlm:** multi-provider LLM gateway, modular preprocessing, and VLM package ([#442](https://github.com/NevaMind-AI/memU/issues/442)) ([6f1b0bc](https://github.com/NevaMind-AI/memU/commit/6f1b0bc19d600e77abe7d6ec82d4196d1efe1516))
20
+ * **memory_fs:** workspace memorize + markdown memory file system ([#439](https://github.com/NevaMind-AI/memU/issues/439)) ([1b1ad61](https://github.com/NevaMind-AI/memU/commit/1b1ad61bdb96030f00e169b14d7864c1f6adb931))
21
+ * memu CLI, npm launcher, and agent skills for the workspace pair ([#467](https://github.com/NevaMind-AI/memU/issues/467)) ([c861974](https://github.com/NevaMind-AI/memU/commit/c8619744b13c67f7efc3322c060e6090255a8522))
22
+ * **npm:** point the launcher at the memu-cli PyPI channel ([#483](https://github.com/NevaMind-AI/memU/issues/483)) ([5056389](https://github.com/NevaMind-AI/memU/commit/505638905f279e0b2fac61572ea551f819007aa1))
23
+ * **openclaw:** install retrieval as a skill ([#537](https://github.com/NevaMind-AI/memU/issues/537)) ([3cef5ae](https://github.com/NevaMind-AI/memU/commit/3cef5ae2610ce9227de6471a63cc139ff09cf63c))
24
+ * **preprocess:** classify audio type and add an overview on ingest ([#448](https://github.com/NevaMind-AI/memU/issues/448)) ([f7601da](https://github.com/NevaMind-AI/memU/commit/f7601daf4ed89815af5c1c1c9011db6af63c1fa5))
25
+ * **vlm,preprocess:** native whole-video understanding via OpenRouter ([#450](https://github.com/NevaMind-AI/memU/issues/450)) ([1de5784](https://github.com/NevaMind-AI/memU/commit/1de57847e0ffc430cbf5d6dc17183f33d08be8fe))
26
+
27
+
28
+ ### Bug Fixes
29
+
30
+ * **app:** unpack the (vectors, raw_response) tuple embed() returns ([#504](https://github.com/NevaMind-AI/memU/issues/504)) ([9b2a70c](https://github.com/NevaMind-AI/memU/commit/9b2a70ca214cd3a5b22e902cad0dc19ad07bfeb9))
31
+ * **bridging:** advance the cursor and snapshot at commit, not prepare ([#531](https://github.com/NevaMind-AI/memU/issues/531)) ([0ceaa19](https://github.com/NevaMind-AI/memU/commit/0ceaa190d92f8c7c6705db0dcfd6628581d10213))
32
+ * **ci:** sort workbuddy cli imports so make check passes ([#522](https://github.com/NevaMind-AI/memU/issues/522)) ([151298c](https://github.com/NevaMind-AI/memU/commit/151298c3c03a6b3cc9ef371d8211b469fffc2469))
33
+ * **cli:** force UTF-8 stdio so piped output survives non-UTF-8 Windows code pages ([#513](https://github.com/NevaMind-AI/memU/issues/513)) ([b521453](https://github.com/NevaMind-AI/memU/commit/b5214536c5fce628c174c9c074b9c1d0a53da2ca))
34
+ * **codex:** drop harness-injected user records from the conversation seam ([#511](https://github.com/NevaMind-AI/memU/issues/511)) ([c827157](https://github.com/NevaMind-AI/memU/commit/c827157ead066f0a859cb2f1e5deac62ffbe63a5))
35
+ * **embedding:** never route loopback embedding calls through a proxy ([#519](https://github.com/NevaMind-AI/memU/issues/519)) ([df6cfba](https://github.com/NevaMind-AI/memU/commit/df6cfba6b9741cc062b7d219af042ddddffcbb5c))
36
+ * handle multiple root-level XML elements from non-conformant LLMs ([#409](https://github.com/NevaMind-AI/memU/issues/409)) ([fed42b6](https://github.com/NevaMind-AI/memU/commit/fed42b6142ec1e9f9820e46d8899823d68de8276))
37
+ * **hermes:** escape the state.db path when building the SQLite URI ([#503](https://github.com/NevaMind-AI/memU/issues/503)) ([3135132](https://github.com/NevaMind-AI/memU/commit/313513204d87e7156d6a7d459df1bcac64469044))
38
+ * **llm/vlm:** correct OpenAI token-limit param and simplify conversation preprocess ([#449](https://github.com/NevaMind-AI/memU/issues/449)) ([ff3c2be](https://github.com/NevaMind-AI/memU/commit/ff3c2bee2ec96ebd303f3e22dae1977ff6388120))
39
+ * make lazyllm an optional dependency (fixes [#373](https://github.com/NevaMind-AI/memU/issues/373)) ([#402](https://github.com/NevaMind-AI/memU/issues/402)) ([7652982](https://github.com/NevaMind-AI/memU/commit/7652982a016b2a2426d20bc11c46491d909704d0))
40
+ * **memory_fs:** restore LLM-free skill bypass and unify synthesis paths ([#444](https://github.com/NevaMind-AI/memU/issues/444)) ([bc13bd4](https://github.com/NevaMind-AI/memU/commit/bc13bd43c6ed3d480b671736bab987434675c717))
41
+ * **openclaw:** scan only main session transcripts, not trajectory/checkpoint sidecars ([0245de9](https://github.com/NevaMind-AI/memU/commit/0245de9710f8f73a8b21361442ac3dfd6c7829c7))
42
+ * optimize category initialization to avoid unnecessary embedding ([#388](https://github.com/NevaMind-AI/memU/issues/388)) ([a92f266](https://github.com/NevaMind-AI/memU/commit/a92f2666bf94336f8c6bf950088249e611915e7d))
43
+ * remove broken memu-server entry point (fixes [#354](https://github.com/NevaMind-AI/memU/issues/354)) ([#398](https://github.com/NevaMind-AI/memU/issues/398)) ([0672b56](https://github.com/NevaMind-AI/memU/commit/0672b56725e12c35bd46061bb23ccd93690a5fbb))
44
+ * remove duplicate document text from preprocess prompt ([#420](https://github.com/NevaMind-AI/memU/issues/420)) ([44aa5ff](https://github.com/NevaMind-AI/memU/commit/44aa5ff0cbceae56ab283848e722a9d4bd8eddd0))
45
+ * remove stale memu-server script entry point (fixes [#393](https://github.com/NevaMind-AI/memU/issues/393)) ([#403](https://github.com/NevaMind-AI/memU/issues/403)) ([c5fe493](https://github.com/NevaMind-AI/memU/commit/c5fe493b0596d68479b0ce6c6d83e362ffb04e90))
46
+ * resolve SQLite embedding TypeError by using sa_column=False ([#401](https://github.com/NevaMind-AI/memU/issues/401)) ([7e198f3](https://github.com/NevaMind-AI/memU/commit/7e198f3718fa6028c809ba7d816a96541fe7e13f))
47
+ * return empty list for non-positive top_k in cosine_topk ([#423](https://github.com/NevaMind-AI/memU/issues/423)) ([39023a8](https://github.com/NevaMind-AI/memU/commit/39023a81d758eb4447ed7d88503b8d782aecaf73))
48
+ * **tests:** pin UTF-8 on test file I/O so the suite passes on non-UTF-8-locale Windows ([#501](https://github.com/NevaMind-AI/memU/issues/501)) ([dda515a](https://github.com/NevaMind-AI/memU/commit/dda515a4eb3117ff804cd7ce1ae66e03c23028b6))
49
+
50
+
51
+ ### Documentation
52
+
53
+ * add ADR 0008 — trajectory as the source, hooks over API ([#476](https://github.com/NevaMind-AI/memU/issues/476)) ([ff90dac](https://github.com/NevaMind-AI/memU/commit/ff90dac6976bc920667e03d295a75d5da8626f75))
54
+ * add INSTALL-LATEST.md and register the WorkBuddy adapter ([#527](https://github.com/NevaMind-AI/memU/issues/527)) ([4871c55](https://github.com/NevaMind-AI/memU/commit/4871c558d5b84c7649d822015dab617a095d678f))
55
+ * add SKILL.md, one routing entry point for agent-driven install ([#497](https://github.com/NevaMind-AI/memU/issues/497)) ([bf7aaf3](https://github.com/NevaMind-AI/memU/commit/bf7aaf3bf95cb37f723e7a81b6d5bcdaf35a0f2e))
56
+ * add the architecture image the README references ([#492](https://github.com/NevaMind-AI/memU/issues/492)) ([c07b905](https://github.com/NevaMind-AI/memU/commit/c07b9055dc245680c67df02199d4c95cd7a9a62f))
57
+ * add under-construction notice, stabilizing ~July 15 ([#472](https://github.com/NevaMind-AI/memU/issues/472)) ([6426ff0](https://github.com/NevaMind-AI/memU/commit/6426ff02aacca12e9d4efbcfc89f53eeed2ae55b))
58
+ * ADR 0007 — drop the graph, retrieval is hybrid (embedding + BM25) ([#464](https://github.com/NevaMind-AI/memU/issues/464)) ([3dd7d5c](https://github.com/NevaMind-AI/memU/commit/3dd7d5c055fc6a3244d4c2390f7b8e6bc4321857))
59
+ * ADR 0007 — invert L1/L2 (L1 = coarse doc, L2 = item slices) ([#465](https://github.com/NevaMind-AI/memU/issues/465)) ([0afbcc5](https://github.com/NevaMind-AI/memU/commit/0afbcc550ac5b816e5ae9ad309e62adbdf4b80b4))
60
+ * ADR 0007 — replace the explicit item graph with entity linking ([#463](https://github.com/NevaMind-AI/memU/issues/463)) ([0bd3c77](https://github.com/NevaMind-AI/memU/commit/0bd3c7765ac791020941de8791ba5b7c50ecc5e0))
61
+ * ADR 0007 — three independent memory lines on a layered wiki-graph kernel ([#461](https://github.com/NevaMind-AI/memU/issues/461)) ([a6cf62e](https://github.com/NevaMind-AI/memU/commit/a6cf62e069765b7b234597e537ec170d169d751c))
62
+ * align architecture.md and READMEs with ADR 0006 data model ([#460](https://github.com/NevaMind-AI/memU/issues/460)) ([8062b91](https://github.com/NevaMind-AI/memU/commit/8062b91776e69757fd467e79e56cd72eba62c72c))
63
+ * consolidate agent skills into one memu SKILL.md, link it atop README ([#469](https://github.com/NevaMind-AI/memU/issues/469)) ([6f0ae82](https://github.com/NevaMind-AI/memU/commit/6f0ae82aaf9d1193841b8e082a2f9fed8753ed70))
64
+ * drop the API and CLI reference sections from the README ([#489](https://github.com/NevaMind-AI/memU/issues/489)) ([94a1111](https://github.com/NevaMind-AI/memU/commit/94a11117cf5684888fb7858356c51203c903e9bb))
65
+ * expand the README; rename provider var to MEMU_EMBED_PROVIDER ([#486](https://github.com/NevaMind-AI/memU/issues/486)) ([96da89b](https://github.com/NevaMind-AI/memU/commit/96da89bfe048b86516faa4b86f69b508fb4c4c3c))
66
+ * focus readme on workspace APIs ([9241f31](https://github.com/NevaMind-AI/memU/commit/9241f3112e912bd47add2fabe6dc2611a4bdac8c))
67
+ * **grok:** fix MemoryService initialization example ([#405](https://github.com/NevaMind-AI/memU/issues/405)) ([96e693a](https://github.com/NevaMind-AI/memU/commit/96e693aa09add032f67b342e21b86fa96078611b))
68
+ * highlight self-evolving skills in README and description ([#452](https://github.com/NevaMind-AI/memU/issues/452)) ([fb68d22](https://github.com/NevaMind-AI/memU/commit/fb68d22c3caa4a9b6f5cb2a57d185bb9b5e22a5f))
69
+ * **hosts:** bind the session cursor's lifecycle to the store's ([75959a6](https://github.com/NevaMind-AI/memU/commit/75959a6e72727c35929f4296c087ed00c97971bf))
70
+ * **hosts:** correct the Claude Code multi-block claim and pin it with tests ([#502](https://github.com/NevaMind-AI/memU/issues/502)) ([5995e05](https://github.com/NevaMind-AI/memU/commit/5995e05f27c7d90231468bcb062713af30813b08))
71
+ * **hosts:** default bridging schedule to hourly ([#516](https://github.com/NevaMind-AI/memU/issues/516)) ([c1046bb](https://github.com/NevaMind-AI/memU/commit/c1046bb1954c3dd7b16ced769da030d8a02c8d32))
72
+ * **hosts:** name the OS system-wide proxy as a 502 source ([#523](https://github.com/NevaMind-AI/memU/issues/523)) ([2b79803](https://github.com/NevaMind-AI/memU/commit/2b79803612872e65201a40dde95ac00541f93fae))
73
+ * **hosts:** no-key local fallback hint; default bridging schedule to cron ([#508](https://github.com/NevaMind-AI/memU/issues/508)) ([d155c48](https://github.com/NevaMind-AI/memU/commit/d155c48ac6a35465ad47848927b271f34e2dc4d0))
74
+ * **hosts:** scheduled runs drain leftover jobs first; config repairs stay at the connection layer ([9195d14](https://github.com/NevaMind-AI/memU/commit/9195d14cef2d308cff3fcb853a6274e1f0db9d31))
75
+ * **hosts:** the scheduler's PATH is not your shell's — fix and honest verify for the bridging guides ([#530](https://github.com/NevaMind-AI/memU/issues/530)) ([19302d2](https://github.com/NevaMind-AI/memU/commit/19302d24260c7b941bdfee66bba8f16b6b47c8c2))
76
+ * lead the README with the one-message agent-driven install ([#498](https://github.com/NevaMind-AI/memU/issues/498)) ([aae3d44](https://github.com/NevaMind-AI/memU/commit/aae3d44b0a4332981c4459e7da9258298bcc0fb1))
77
+ * make the workspace pair primary, mark memorize/retrieve as legacy ([#470](https://github.com/NevaMind-AI/memU/issues/470)) ([6f3c1be](https://github.com/NevaMind-AI/memU/commit/6f3c1beb36bba21a7d640b0dbdead9361a90a811))
78
+ * never fall back to legacy memorize/retrieve ([#471](https://github.com/NevaMind-AI/memU/issues/471)) ([28ee09d](https://github.com/NevaMind-AI/memU/commit/28ee09de54de5bd74f4f6bb1e0185c854ecf1053))
79
+ * pitch memU as a 500-line memory system ([#488](https://github.com/NevaMind-AI/memU/issues/488)) ([2a8f8b3](https://github.com/NevaMind-AI/memU/commit/2a8f8b3403548a8d8917a19d5ac0015adf4eab17))
80
+ * point the README at the memu-cli package ([#491](https://github.com/NevaMind-AI/memU/issues/491)) ([9ceea5b](https://github.com/NevaMind-AI/memU/commit/9ceea5b32a2694cf4ab5e5f0069b029ac13800b3))
81
+ * **readme:** readme accuracy updates ([#430](https://github.com/NevaMind-AI/memU/issues/430)) ([5f17725](https://github.com/NevaMind-AI/memU/commit/5f1772579c8d0881ec1c9ab071404aea6b3bfadc))
82
+ * **readme:** reframe intro around MEMORY.md, SKILL.md, and INDEX.md ([#434](https://github.com/NevaMind-AI/memU/issues/434)) ([ca0c755](https://github.com/NevaMind-AI/memU/commit/ca0c755dcc06874c227df811d6b7a3ca972f6be2))
83
+ * **readme:** reframe README around file-system-as-memory narrative ([#432](https://github.com/NevaMind-AI/memU/issues/432)) ([cd8150a](https://github.com/NevaMind-AI/memU/commit/cd8150ac7d68f4972d9a9e8268e3169da9b4cfc3))
84
+ * **readme:** reframe README around workspace-runtime narrative ([#438](https://github.com/NevaMind-AI/memU/issues/438)) ([7c104b1](https://github.com/NevaMind-AI/memU/commit/7c104b1eb0883437d49bea0edae3a24eea12f275))
85
+ * **readme:** sync translated READMEs to file-system-as-memory narrative ([#433](https://github.com/NevaMind-AI/memU/issues/433)) ([f4e82ce](https://github.com/NevaMind-AI/memU/commit/f4e82cec1898e34f82612ec3628f8de1faedf701))
86
+ * refine ADR 0007 with the L0/L1/L2 layer model ([#462](https://github.com/NevaMind-AI/memU/issues/462)) ([6456c35](https://github.com/NevaMind-AI/memU/commit/6456c357b22039a3b12ba2f2bc0294a8693bceb5))
87
+ * Refine OpenClaw reference and feature descriptions ([#410](https://github.com/NevaMind-AI/memU/issues/410)) ([707b80e](https://github.com/NevaMind-AI/memU/commit/707b80e5f4394b8e4aafff1ef23fd331a8b557f8))
88
+ * refine README memory filesystem positioning ([#429](https://github.com/NevaMind-AI/memU/issues/429)) ([dda0374](https://github.com/NevaMind-AI/memU/commit/dda03743b007c0863c7fe7237592f7e4a0de32b6))
89
+ * refine README positioning around personal memory as files ([#455](https://github.com/NevaMind-AI/memU/issues/455)) ([88982d3](https://github.com/NevaMind-AI/memU/commit/88982d3d22640501be09ced1876520e95d956312))
90
+ * reframe README and description around personal-information memory ([#451](https://github.com/NevaMind-AI/memU/issues/451)) ([6b5b11c](https://github.com/NevaMind-AI/memU/commit/6b5b11c0787704c119b8d2e2d3c779bd56ee66fa))
91
+ * refresh memory diagrams ([#473](https://github.com/NevaMind-AI/memU/issues/473)) ([0d8770f](https://github.com/NevaMind-AI/memU/commit/0d8770f0c9d49f3a09e6ac33ca72b34c8128a855))
92
+ * retitle around file-based memory and trim README ([#453](https://github.com/NevaMind-AI/memU/issues/453)) ([2c1cc86](https://github.com/NevaMind-AI/memU/commit/2c1cc86ba66f31ffb7c6afcd0717f7e1880c0fd0))
93
+ * rewrite README — raw data → memory → agent ([#426](https://github.com/NevaMind-AI/memU/issues/426)) ([c2a2aac](https://github.com/NevaMind-AI/memU/commit/c2a2aac52b4424583955f85f5a35776e76beb68a))
94
+ * swap the tagline to lead with Across Agents ([#490](https://github.com/NevaMind-AI/memU/issues/490)) ([6e0fc06](https://github.com/NevaMind-AI/memU/commit/6e0fc068a1e3a2212dfea52f52438b438dae88f3))
95
+ * tagline across sessions/agents/devices, lowercase memU in banner alt ([#515](https://github.com/NevaMind-AI/memU/issues/515)) ([1f4f831](https://github.com/NevaMind-AI/memU/commit/1f4f8315bc0a68a6d2c2fa8018d64e7f22e5b164))
96
+ * tighten the README intro to two sentences ([#487](https://github.com/NevaMind-AI/memU/issues/487)) ([da160f2](https://github.com/NevaMind-AI/memU/commit/da160f2155439923bfe744ac770733c1c9824cd9))
97
+
98
+
99
+ ### Miscellaneous Chores
100
+
101
+ * release 2.0.0-beta.0 ([#541](https://github.com/NevaMind-AI/memU/issues/541)) ([3dc60ce](https://github.com/NevaMind-AI/memU/commit/3dc60cea094e29f86ead2fad148ea0fbeab198c3))
102
+
3
103
  ## [1.5.1](https://github.com/NevaMind-AI/memU/compare/v1.5.0...v1.5.1) (2026-03-23)
4
104
 
5
105
 
@@ -0,0 +1,134 @@
1
+ ---
2
+ name: install-memu-latest
3
+ description: Install the latest development build of memU-cli from git (main HEAD). Use when the user wants the newest unreleased code — clean any old install, install from git, verify, then set up.
4
+ ---
5
+
6
+ # Install the latest (development) memU
7
+
8
+ > **Audience: the agent.** A user pointed you here ("read this and install the
9
+ > latest memU"). Do the install yourself — the user should not run commands by
10
+ > hand. This installs memU-cli from **git `main`**, the latest source.
11
+
12
+ ## Step 1 — remove any existing memU install
13
+
14
+ An older memU already on the machine can stay on `PATH` and **shadow the one you
15
+ are about to install**, so the version that actually runs would not be the
16
+ latest. Remove it first — try each installer, ignore "not installed":
17
+
18
+ ```
19
+ uv tool uninstall memu-cli
20
+ pipx uninstall memu-cli
21
+ pip uninstall -y memu-cli
22
+ ```
23
+
24
+ **Tell the user what you removed** — the name and version, or "no previous
25
+ install found" — so they know their old version is gone before you continue.
26
+
27
+ This removes only the memU **package** (the binaries). The store and
28
+ `~/.memu/config.env` live under `~/.memu/` and are **not** touched, so the
29
+ user's memories and settings carry straight over — Step 4 reuses the existing
30
+ `config.env` instead of asking again. (If this newer build needs a config value
31
+ the old file lacks, Step 4's `doctor` gate names exactly what to add.)
32
+
33
+ ## Step 2 — install from git, persistently
34
+
35
+ The install **must persist on `PATH`**: the scheduled bridging task will call
36
+ these binaries later from a bare, non-interactive shell. So install as a durable
37
+ tool — **never** with an ephemeral runner (`uvx`, `npx`), which vanish after one
38
+ command and leave nothing for the task to find.
39
+
40
+ Requirement: `git` on `PATH`. Then take the first option that fits the machine:
41
+
42
+ - **uv (preferred — isolated, global, on `PATH`):**
43
+ ```
44
+ uv tool install "git+https://github.com/NevaMind-AI/memU"
45
+ ```
46
+ - **no uv, but you can install it:** install uv, then run the command above.
47
+ ```
48
+ curl -LsSf https://astral.sh/uv/install.sh | sh # macOS / Linux
49
+ powershell -c "irm https://astral.sh/uv/install.ps1 | iex" # Windows
50
+ ```
51
+ - **pip fallback (only into a stable, on-`PATH` environment):**
52
+ ```
53
+ pip install "git+https://github.com/NevaMind-AI/memU"
54
+ ```
55
+
56
+ To pin an exact commit instead of the moving `main`, append `@<sha>` to the URL.
57
+
58
+ The installer prints the exact commit it resolved — with uv, a line like
59
+ `Building memu-cli @ git+…@<sha>`. Note that SHA; you confirm it to the user in
60
+ Step 3, before the setup.
61
+
62
+ ## Step 3 — verify, then confirm the version with the user
63
+
64
+ From a **fresh** shell (not the one that ran the installer, whose `PATH` may be
65
+ stale):
66
+
67
+ ```
68
+ memu --help
69
+ memu-<your-host> --help # e.g. memu-claude-code, memu-codex
70
+ ```
71
+
72
+ Both must print usage. If they do not, the install's bin directory is not on
73
+ `PATH` (with uv it is `~/.local/bin`) — fix that before continuing, since the
74
+ scheduled task depends on the same resolution.
75
+
76
+ Then confirm the version with the user — **before the setup below**, since setup
77
+ is the long part and a wrong or stale build is painful to discover afterward. A
78
+ bare SHA is hard to judge, so report what the commit actually **is**:
79
+
80
+ - the SHA (from Step 2),
81
+ - its **subject line and date**, and
82
+ - the link to inspect it: `https://github.com/NevaMind-AI/memU/commit/<sha>`.
83
+
84
+ Fetch the subject and date from the GitHub API — no clone needed:
85
+
86
+ ```
87
+ curl -s https://api.github.com/repos/NevaMind-AI/memU/commits/<sha>
88
+ ```
89
+
90
+ read `.commit.message` (first line) and `.commit.author.date`. Then offer a
91
+ **one-tap choice** — not an open question the user has to answer in a sentence.
92
+ If your host can render selectable options, present exactly these two; otherwise
93
+ accept a plain "yes":
94
+
95
+ - **Use this version** → continue straight into Step 4 and run it to completion
96
+ **yourself**; do not make the user run `docs install` or any setup command.
97
+ Pause again only if you genuinely need them (e.g. an embedding API key).
98
+ - **Pick a different commit** → ask which, reinstall it (Step 2 with `@<sha>`),
99
+ then confirm again here.
100
+
101
+ A bare "yes" / "ok" means **Use this version** — default to proceeding.
102
+
103
+ ## Step 4 — set up memU
104
+
105
+ You now have the latest binaries. Identify **which agent you are** and use its
106
+ binary — memU has seven host adapters:
107
+
108
+ | You are | Your binary |
109
+ | --- | --- |
110
+ | Codex | `memu-codex` |
111
+ | Claude Code | `memu-claude-code` |
112
+ | Cursor | `memu-cursor` |
113
+ | OpenClaw | `memu-openclaw` |
114
+ | Hermes | `memu-hermes` |
115
+ | WorkBuddy | `memu-workbuddy` |
116
+ | anything else | `memu-agent` — run `memu-agent detect` if unsure |
117
+
118
+ Then print your host's packaged guide and follow it to the letter:
119
+
120
+ ```
121
+ memu-<your-host> docs install
122
+ ```
123
+
124
+ It walks you through configuring the store in `~/.memu/config.env`, registering
125
+ the scheduled bridging task, and patching your instruction file, each behind a
126
+ verify gate.
127
+
128
+ Because the existing `config.env` is reused, also **check it against the settings
129
+ this build documents** (the guide lists them): if this version recognizes any
130
+ `MEMU_*` option the user's file does not set, tell the user its name and what it
131
+ does — that is configuration this newer build introduces. Optional ones keep
132
+ working on their defaults; a required one is caught by the `doctor` gate.
133
+
134
+ When done, report which seams (memorization / retrieval) are now active.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: memu-cli
3
- Version: 0.2.0
3
+ Version: 0.4.0
4
4
  Classifier: Development Status :: 4 - Beta
5
5
  Classifier: Intended Audience :: Developers
6
6
  Classifier: Operating System :: OS Independent
@@ -17,7 +17,7 @@ Requires-Dist: pgvector>=0.3.4 ; extra == 'postgres'
17
17
  Requires-Dist: sqlalchemy[postgresql-psycopgbinary]>=2.0.36 ; extra == 'postgres'
18
18
  Provides-Extra: postgres
19
19
  License-File: LICENSE.txt
20
- Summary: CLI distribution channel for memU (same engine as memu-py). Personal memory as files.
20
+ Summary: Personal memory as files fast retrieval, higher accuracy, lower cost.
21
21
  Keywords: agent,agentic,agent-harness,harness,loop-engineering,context-engineering,context-window,memory,personal-information,workspace,retrieval,llm
22
22
  Author-email: MemU Team <contact@nevamind.ai>
23
23
  Requires-Python: >=3.13
@@ -26,7 +26,7 @@ Project-URL: Bug Tracker, https://github.com/NevaMind-AI/MemU/issues
26
26
  Project-URL: Documentation, https://github.com/NevaMind-AI/MemU#readme
27
27
  Project-URL: Homepage, https://github.com/NevaMind-AI/MemU
28
28
 
29
- ![MemU Banner](assets/banner.png)
29
+ ![memU Banner](assets/banner.png)
30
30
 
31
31
  <div align="center">
32
32
 
@@ -34,7 +34,7 @@ Project-URL: Homepage, https://github.com/NevaMind-AI/MemU
34
34
 
35
35
  ### Personal memory, stored as files
36
36
 
37
- **Across Agents. Fast retrieval. Lower cost.**
37
+ **Across Sessions. Across Agents. Across Devices.**
38
38
 
39
39
  [![PyPI version](https://badge.fury.io/py/memu-cli.svg)](https://badge.fury.io/py/memu-cli)
40
40
  [![License: Apache 2.0](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)
@@ -50,6 +50,16 @@ Project-URL: Homepage, https://github.com/NevaMind-AI/MemU
50
50
 
51
51
  memU is a 500-line memory system for AI agents. Agents write what's worth keeping as Markdown; memU stores it, embeds it, and retrieves ranked context in a single call — embeddings are the only model calls it makes. The entire memory logic lives in [`agentic.py`](src/memu/app/agentic.py) + [`service.py`](src/memu/app/service.py); everything else is pluggable storage and embedding transport.
52
52
 
53
+ **Installation is agent-driven.** The guides are written for the agent, not for you. One message is the whole setup — tell your agent:
54
+
55
+ > Read https://raw.githubusercontent.com/NevaMind-AI/MemU/main/SKILL.md and follow it to install memU.
56
+
57
+ It works for Codex, Claude Code, Cursor, OpenClaw, Hermes, WorkBuddy — and any other agent, via detection. Details in [Host adapters](#host-adapters-memory-for-desktop-coding-agents).
58
+
59
+ Want to follow the latest development instead? Install from the newest source (git `main`) — tell your agent:
60
+
61
+ > Read https://raw.githubusercontent.com/NevaMind-AI/MemU/main/INSTALL-LATEST.md and follow it to install the latest memU.
62
+
53
63
  ## Quick start
54
64
 
55
65
  ```python
@@ -123,26 +133,32 @@ Segments are reconciled on every commit: lines that disappeared are deleted, onl
123
133
 
124
134
  There is no intention routing, sufficiency checking, or summarization — one embedding call in, ranked context out.
125
135
 
126
- ## Host adapter: memory for desktop coding agents
136
+ ## Host adapters: memory for desktop coding agents
127
137
 
128
- `memu-codex` runs memU as a sidecar to Codex-style agents (ADR 0008/0009). It binds two seams:
138
+ memU runs as a sidecar to a desktop agent (ADR 0008/0009/0010), one binary per host. Each binds two seams:
129
139
 
130
140
  - **record** — a scheduled bridging task slices new session logs into self-contained job files; the agent itself distills them into memory/skill Markdown; `commit` submits whatever the agent left on disk back through `commit_results`.
131
- - **inject** — a standing instruction in the host's global instruction file (`~/.codex/AGENTS.md`) tells the agent to run `memu-codex retrieve` (→ `progressive_retrieve`) before answering.
141
+ - **inject** — a standing instruction in the host's instruction file tells the agent to run `<binary> retrieve` (→ `progressive_retrieve`) before answering.
132
142
 
133
- **Installation is agent-driven.** The install guide is written for the agent, not for you — install the package, then hand the guide to your agent and let it do the rest (configure the store, register the scheduled bridging task, patch the instruction file each step ends with a verify gate):
143
+ | Host | Binary | Session log it mines | Instruction file it patches |
144
+ | --- | --- | --- | --- |
145
+ | Codex | `memu-codex` | `~/.codex/sessions/**/*.jsonl` | `~/.codex/AGENTS.md` |
146
+ | Claude Code | `memu-claude-code` | `~/.claude/projects/<project>/<session>.jsonl` | `~/.claude/CLAUDE.md` |
147
+ | Cursor (Agent/CLI) | `memu-cursor` | `~/.cursor/projects/<project>/agent-transcripts/**.jsonl` | `./AGENTS.md` (per project) |
148
+ | OpenClaw | `memu-openclaw` | `~/.openclaw/agents/<agentId>/sessions/*.jsonl` | `~/.openclaw/workspace/AGENTS.md` |
149
+ | Hermes Agent | `memu-hermes` | `~/.hermes/state.db` (SQLite, read-only) | `~/.hermes/SOUL.md` |
150
+ | WorkBuddy | `memu-workbuddy` | `~/.workbuddy/projects/<project>/<session>.jsonl` | `~/.workbuddy/MEMORY.md` |
151
+ | **any other agent** | `memu-agent` | found by `memu-agent detect` (JSONL dialect sniffed) | found by `detect` (AGENTS.md / CLAUDE.md / SOUL.md / …) |
134
152
 
135
- ```bash
136
- pip install memu-cli # puts memu + memu-codex on PATH
137
- ```
153
+ For agents without a dedicated binary, `memu-agent detect` probes the machine and reports per agent whether **memorization** works (a recognizable session log exists) and whether **retrieval** works (an instruction file exists to patch) — then the same verbs run against what it found.
138
154
 
139
- Then tell your agent:
155
+ All hosts share one store and one embedding space via `~/.memu/config.env` — what one host's sessions taught memU, another host retrieves.
140
156
 
141
- > Run `memu-codex docs install`, read the guide it prints, and follow it to install memU.
157
+ Installation is the one-message setup at the top of this README. [SKILL.md](SKILL.md) is the routing skill it hands your agent: install the package, identify which host you are (falling back to `memu-agent detect` for anything without a dedicated adapter), print that host's packaged install guide (`<binary> docs install`), and follow it configure the store, register the scheduled bridging task, patch the instruction file, each step behind a verify gate — then report which seams (memorization / retrieval) are now active.
142
158
 
143
- Afterwards `memu-codex doctor` proves the whole loop resolves: config, store, and a live retrieval.
159
+ Afterwards `<binary> doctor` proves the whole loop resolves: config, store, and a live retrieval.
144
160
 
145
- Adding another host means implementing one `TranscriptSource` (where its session logs live, how its records are shaped) plus a thin CLI — the pipeline and instruction text are shared.
161
+ Adding another host means implementing one `TranscriptSource` (where its session logs live, how its records are shaped) plus a `HostSpec`-sized CLI — the pipeline, verbs, and instruction text are shared (ADR 0010).
146
162
 
147
163
  ## Installation
148
164
 
@@ -1,4 +1,4 @@
1
- ![MemU Banner](assets/banner.png)
1
+ ![memU Banner](assets/banner.png)
2
2
 
3
3
  <div align="center">
4
4
 
@@ -6,7 +6,7 @@
6
6
 
7
7
  ### Personal memory, stored as files
8
8
 
9
- **Across Agents. Fast retrieval. Lower cost.**
9
+ **Across Sessions. Across Agents. Across Devices.**
10
10
 
11
11
  [![PyPI version](https://badge.fury.io/py/memu-cli.svg)](https://badge.fury.io/py/memu-cli)
12
12
  [![License: Apache 2.0](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)
@@ -22,6 +22,16 @@
22
22
 
23
23
  memU is a 500-line memory system for AI agents. Agents write what's worth keeping as Markdown; memU stores it, embeds it, and retrieves ranked context in a single call — embeddings are the only model calls it makes. The entire memory logic lives in [`agentic.py`](src/memu/app/agentic.py) + [`service.py`](src/memu/app/service.py); everything else is pluggable storage and embedding transport.
24
24
 
25
+ **Installation is agent-driven.** The guides are written for the agent, not for you. One message is the whole setup — tell your agent:
26
+
27
+ > Read https://raw.githubusercontent.com/NevaMind-AI/MemU/main/SKILL.md and follow it to install memU.
28
+
29
+ It works for Codex, Claude Code, Cursor, OpenClaw, Hermes, WorkBuddy — and any other agent, via detection. Details in [Host adapters](#host-adapters-memory-for-desktop-coding-agents).
30
+
31
+ Want to follow the latest development instead? Install from the newest source (git `main`) — tell your agent:
32
+
33
+ > Read https://raw.githubusercontent.com/NevaMind-AI/MemU/main/INSTALL-LATEST.md and follow it to install the latest memU.
34
+
25
35
  ## Quick start
26
36
 
27
37
  ```python
@@ -95,26 +105,32 @@ Segments are reconciled on every commit: lines that disappeared are deleted, onl
95
105
 
96
106
  There is no intention routing, sufficiency checking, or summarization — one embedding call in, ranked context out.
97
107
 
98
- ## Host adapter: memory for desktop coding agents
108
+ ## Host adapters: memory for desktop coding agents
99
109
 
100
- `memu-codex` runs memU as a sidecar to Codex-style agents (ADR 0008/0009). It binds two seams:
110
+ memU runs as a sidecar to a desktop agent (ADR 0008/0009/0010), one binary per host. Each binds two seams:
101
111
 
102
112
  - **record** — a scheduled bridging task slices new session logs into self-contained job files; the agent itself distills them into memory/skill Markdown; `commit` submits whatever the agent left on disk back through `commit_results`.
103
- - **inject** — a standing instruction in the host's global instruction file (`~/.codex/AGENTS.md`) tells the agent to run `memu-codex retrieve` (→ `progressive_retrieve`) before answering.
113
+ - **inject** — a standing instruction in the host's instruction file tells the agent to run `<binary> retrieve` (→ `progressive_retrieve`) before answering.
104
114
 
105
- **Installation is agent-driven.** The install guide is written for the agent, not for you — install the package, then hand the guide to your agent and let it do the rest (configure the store, register the scheduled bridging task, patch the instruction file each step ends with a verify gate):
115
+ | Host | Binary | Session log it mines | Instruction file it patches |
116
+ | --- | --- | --- | --- |
117
+ | Codex | `memu-codex` | `~/.codex/sessions/**/*.jsonl` | `~/.codex/AGENTS.md` |
118
+ | Claude Code | `memu-claude-code` | `~/.claude/projects/<project>/<session>.jsonl` | `~/.claude/CLAUDE.md` |
119
+ | Cursor (Agent/CLI) | `memu-cursor` | `~/.cursor/projects/<project>/agent-transcripts/**.jsonl` | `./AGENTS.md` (per project) |
120
+ | OpenClaw | `memu-openclaw` | `~/.openclaw/agents/<agentId>/sessions/*.jsonl` | `~/.openclaw/workspace/AGENTS.md` |
121
+ | Hermes Agent | `memu-hermes` | `~/.hermes/state.db` (SQLite, read-only) | `~/.hermes/SOUL.md` |
122
+ | WorkBuddy | `memu-workbuddy` | `~/.workbuddy/projects/<project>/<session>.jsonl` | `~/.workbuddy/MEMORY.md` |
123
+ | **any other agent** | `memu-agent` | found by `memu-agent detect` (JSONL dialect sniffed) | found by `detect` (AGENTS.md / CLAUDE.md / SOUL.md / …) |
106
124
 
107
- ```bash
108
- pip install memu-cli # puts memu + memu-codex on PATH
109
- ```
125
+ For agents without a dedicated binary, `memu-agent detect` probes the machine and reports per agent whether **memorization** works (a recognizable session log exists) and whether **retrieval** works (an instruction file exists to patch) — then the same verbs run against what it found.
110
126
 
111
- Then tell your agent:
127
+ All hosts share one store and one embedding space via `~/.memu/config.env` — what one host's sessions taught memU, another host retrieves.
112
128
 
113
- > Run `memu-codex docs install`, read the guide it prints, and follow it to install memU.
129
+ Installation is the one-message setup at the top of this README. [SKILL.md](SKILL.md) is the routing skill it hands your agent: install the package, identify which host you are (falling back to `memu-agent detect` for anything without a dedicated adapter), print that host's packaged install guide (`<binary> docs install`), and follow it configure the store, register the scheduled bridging task, patch the instruction file, each step behind a verify gate — then report which seams (memorization / retrieval) are now active.
114
130
 
115
- Afterwards `memu-codex doctor` proves the whole loop resolves: config, store, and a live retrieval.
131
+ Afterwards `<binary> doctor` proves the whole loop resolves: config, store, and a live retrieval.
116
132
 
117
- Adding another host means implementing one `TranscriptSource` (where its session logs live, how its records are shaped) plus a thin CLI — the pipeline and instruction text are shared.
133
+ Adding another host means implementing one `TranscriptSource` (where its session logs live, how its records are shaped) plus a `HostSpec`-sized CLI — the pipeline, verbs, and instruction text are shared (ADR 0010).
118
134
 
119
135
  ## Installation
120
136
 
@@ -0,0 +1,97 @@
1
+ ---
2
+ name: install-memu
3
+ description: Install or uninstall memU for whatever agent you are — identify your host, print its packaged guide, and follow it to wire (or unwire) both seams (record and inject). Use when the user asks to install, set up, integrate, remove, or uninstall memU.
4
+ ---
5
+
6
+ # Install memU
7
+
8
+ > **Audience: the agent.** A user has pointed you at this file ("read SKILL.md
9
+ > and follow it to install memU"). This skill does not contain the install
10
+ > steps — it routes you to the right guide, which ships inside the memU package
11
+ > and is always in sync with the installed code. Do not install from memory or
12
+ > from blog posts; print the guide and follow it to the letter.
13
+
14
+ memU integrates with a host agent through two seams: **record** (a scheduled
15
+ bridging task mines your session log into durable memory) and **inject** (a
16
+ standing instruction in your instruction file makes you retrieve before
17
+ answering). Each supported host has its own adapter binary carrying its own
18
+ install guide. Your job here is three steps: install the package, pick your
19
+ binary, print and follow its guide.
20
+
21
+ ## Step 1 — install the package
22
+
23
+ ```
24
+ pip install memu-cli
25
+ ```
26
+
27
+ This puts `memu` and every host-adapter binary on `PATH`. If `pip` is not the
28
+ right tool for this machine (managed Python, uv-only), use the equivalent —
29
+ what matters is that the binaries below resolve from a bare, non-interactive
30
+ shell.
31
+
32
+ ## Step 2 — pick your host binary
33
+
34
+ Identify **which agent you are** (not which agents are installed — the one
35
+ executing this skill):
36
+
37
+ | You are | Your binary |
38
+ | --- | --- |
39
+ | Codex | `memu-codex` |
40
+ | Claude Code | `memu-claude-code` |
41
+ | Cursor (Agent/CLI) | `memu-cursor` |
42
+ | OpenClaw | `memu-openclaw` |
43
+ | Hermes Agent | `memu-hermes` |
44
+ | WorkBuddy | `memu-workbuddy` |
45
+ | anything else | `memu-agent` |
46
+
47
+ Unsure, or not in the table? You are `memu-agent`. Run:
48
+
49
+ ```
50
+ memu-agent detect
51
+ ```
52
+
53
+ It probes this machine and reports, per agent, whether **memorization** works
54
+ (a recognizable session log exists) and whether **retrieval** works (an
55
+ instruction file exists to patch) — and it will redirect you to a dedicated
56
+ binary if your host turns out to have one.
57
+
58
+ ## Step 3 — print your guide and follow it
59
+
60
+ ```
61
+ <your-binary> docs install
62
+ ```
63
+
64
+ Read what it prints, top to bottom, and follow it exactly. Every guide has the
65
+ same shape — configure the store once in `~/.memu/config.env`, register the
66
+ scheduled bridging task (record), patch your instruction file (inject) — and
67
+ every part ends with a **verify gate**; do not proceed past a failing one.
68
+
69
+ Two rules that hold for every host:
70
+
71
+ - **One store.** If `~/.memu/config.env` already exists (another agent on this
72
+ machine is already integrated), reuse it as is. A second store would split
73
+ the embedding space and both installs would silently retrieve nothing from
74
+ each other.
75
+ - **Report the outcome.** When done, tell the user which seams are now active —
76
+ memorization, retrieval, or both — and where (the session log being mined,
77
+ the instruction file patched). For `memu-agent`, the detect report decides
78
+ this; a retrieval-only integration is a valid outcome to report, not a
79
+ failure to hide.
80
+
81
+ ## Uninstall
82
+
83
+ Same routing, in reverse. If the user asked to **uninstall** memU instead:
84
+ identify your binary exactly as in Step 2, then print and follow its removal
85
+ guide —
86
+
87
+ ```
88
+ <your-binary> docs uninstall
89
+ ```
90
+
91
+ It unregisters the bridging task, removes the instruction block
92
+ (`<your-binary> remove-instruction` — never hand-edit it out), then applies
93
+ the defaults: the user's memory — the shared store and `~/.memu/config.env` —
94
+ is **kept** (deleted only if they explicitly asked to erase it), while this
95
+ host's residue and, if no other host still uses it, the package are
96
+ **removed**. Close by reporting exactly those two things: what was kept, and
97
+ what was removed.
@@ -48,7 +48,7 @@ silently returns nothing.
48
48
 
49
49
  ### 1. Distribute via pip; do not ship a parallel npm package
50
50
 
51
- memU is installed as a Python package (`pip install memu-py`), exposing two console entrypoints:
51
+ memU is installed as a Python package (`pip install memu-cli`), exposing two console entrypoints:
52
52
  `memu` (the library's own surface) and `memu-codex` (the host adapter — see Decision 2). No npm
53
53
  package is built for this integration.
54
54