basic-memory 0.9.0__tar.gz → 0.10.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.

Potentially problematic release.


This version of basic-memory might be problematic. Click here for more details.

Files changed (239) hide show
  1. basic_memory-0.10.0/.github/dependabot.yml +12 -0
  2. {basic_memory-0.9.0 → basic_memory-0.10.0}/.gitignore +5 -0
  3. {basic_memory-0.9.0 → basic_memory-0.10.0}/CHANGELOG.md +70 -0
  4. {basic_memory-0.9.0 → basic_memory-0.10.0}/CLAUDE.md +39 -1
  5. {basic_memory-0.9.0 → basic_memory-0.10.0}/CONTRIBUTING.md +38 -34
  6. basic_memory-0.10.0/Dockerfile +16 -0
  7. basic_memory-0.10.0/PKG-INFO +386 -0
  8. basic_memory-0.10.0/README.md +352 -0
  9. basic_memory-0.10.0/SECURITY.md +13 -0
  10. {basic_memory-0.9.0 → basic_memory-0.10.0}/docs/AI Assistant Guide.md +1 -1
  11. {basic_memory-0.9.0 → basic_memory-0.10.0}/docs/Getting Started with Basic Memory.md +106 -15
  12. basic_memory-0.10.0/docs/Technical Information.md +243 -0
  13. {basic_memory-0.9.0 → basic_memory-0.10.0}/docs/User Guide.md +64 -26
  14. basic_memory-0.10.0/docs/Welcome to Basic memory.md +68 -0
  15. basic_memory-0.10.0/docs/attachments/Claude-Obsidian-Demo.mp4 +0 -0
  16. basic_memory-0.10.0/docs/attachments/disk-ai-logo.png +0 -0
  17. basic_memory-0.10.0/docs/publish.js +5 -0
  18. {basic_memory-0.9.0 → basic_memory-0.10.0}/pyproject.toml +1 -1
  19. basic_memory-0.10.0/smithery.yaml +15 -0
  20. {basic_memory-0.9.0 → basic_memory-0.10.0}/src/basic_memory/__init__.py +1 -1
  21. {basic_memory-0.9.0 → basic_memory-0.10.0}/src/basic_memory/api/routers/project_info_router.py +3 -4
  22. {basic_memory-0.9.0 → basic_memory-0.10.0}/src/basic_memory/cli/commands/import_chatgpt.py +5 -6
  23. {basic_memory-0.9.0 → basic_memory-0.10.0}/src/basic_memory/cli/commands/import_claude_conversations.py +5 -6
  24. {basic_memory-0.9.0 → basic_memory-0.10.0}/src/basic_memory/cli/commands/import_claude_projects.py +5 -6
  25. {basic_memory-0.9.0 → basic_memory-0.10.0}/src/basic_memory/config.py +3 -4
  26. {basic_memory-0.9.0 → basic_memory-0.10.0}/src/basic_memory/file_utils.py +3 -3
  27. {basic_memory-0.9.0 → basic_memory-0.10.0}/src/basic_memory/markdown/markdown_processor.py +1 -1
  28. {basic_memory-0.9.0 → basic_memory-0.10.0}/src/basic_memory/mcp/prompts/ai_assistant_guide.py +5 -4
  29. {basic_memory-0.9.0 → basic_memory-0.10.0}/src/basic_memory/services/file_service.py +3 -5
  30. {basic_memory-0.9.0 → basic_memory-0.10.0}/src/basic_memory/sync/watch_service.py +23 -13
  31. basic_memory-0.10.0/tests/sync/test_tmp_files.py +181 -0
  32. {basic_memory-0.9.0 → basic_memory-0.10.0}/uv.lock +12 -11
  33. basic_memory-0.9.0/PKG-INFO +0 -736
  34. basic_memory-0.9.0/README.md +0 -702
  35. basic_memory-0.9.0/docs/.obsidian/app.json +0 -1
  36. basic_memory-0.9.0/docs/.obsidian/appearance.json +0 -1
  37. basic_memory-0.9.0/docs/.obsidian/core-plugins.json +0 -31
  38. basic_memory-0.9.0/docs/.obsidian/publish.json +0 -6
  39. basic_memory-0.9.0/docs/.obsidian/workspace.json +0 -167
  40. basic_memory-0.9.0/docs/Technical Information.md +0 -99
  41. basic_memory-0.9.0/docs/Welcome to Basic memory.md +0 -181
  42. basic_memory-0.9.0/docs/attachments/Obsidian-CoffeeKnowledgeBase-examples-overlays.gif +0 -0
  43. basic_memory-0.9.0/docs/attachments/Obsidian-CoffeeKnowledgeBase-examples.gif +0 -0
  44. basic_memory-0.9.0/examples/.basic-memory/memory.db +0 -0
  45. basic_memory-0.9.0/examples/.obsidian/app.json +0 -3
  46. basic_memory-0.9.0/examples/.obsidian/appearance.json +0 -1
  47. basic_memory-0.9.0/examples/.obsidian/community-plugins.json +0 -3
  48. basic_memory-0.9.0/examples/.obsidian/core-plugins.json +0 -31
  49. basic_memory-0.9.0/examples/.obsidian/graph.json +0 -22
  50. basic_memory-0.9.0/examples/.obsidian/plugins/optimize-canvas-connections/main.js +0 -158
  51. basic_memory-0.9.0/examples/.obsidian/plugins/optimize-canvas-connections/manifest.json +0 -10
  52. basic_memory-0.9.0/examples/.obsidian/publish.json +0 -6
  53. basic_memory-0.9.0/examples/.obsidian/workspace.json +0 -186
  54. basic_memory-0.9.0/examples/Untitled.md +0 -0
  55. {basic_memory-0.9.0 → basic_memory-0.10.0}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  56. {basic_memory-0.9.0 → basic_memory-0.10.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  57. {basic_memory-0.9.0 → basic_memory-0.10.0}/.github/ISSUE_TEMPLATE/documentation.md +0 -0
  58. {basic_memory-0.9.0 → basic_memory-0.10.0}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  59. {basic_memory-0.9.0 → basic_memory-0.10.0}/.github/workflows/pr-title.yml +0 -0
  60. {basic_memory-0.9.0 → basic_memory-0.10.0}/.github/workflows/release.yml +0 -0
  61. {basic_memory-0.9.0 → basic_memory-0.10.0}/.github/workflows/test.yml +0 -0
  62. {basic_memory-0.9.0 → basic_memory-0.10.0}/.python-version +0 -0
  63. {basic_memory-0.9.0 → basic_memory-0.10.0}/CITATION.cff +0 -0
  64. {basic_memory-0.9.0 → basic_memory-0.10.0}/CLA.md +0 -0
  65. {basic_memory-0.9.0 → basic_memory-0.10.0}/CODE_OF_CONDUCT.md +0 -0
  66. {basic_memory-0.9.0 → basic_memory-0.10.0}/LICENSE +0 -0
  67. {basic_memory-0.9.0 → basic_memory-0.10.0}/Makefile +0 -0
  68. {basic_memory-0.9.0 → basic_memory-0.10.0}/basic-memory.md +0 -0
  69. {basic_memory-0.9.0 → basic_memory-0.10.0}/docs/CLI Reference.md +0 -0
  70. {basic_memory-0.9.0 → basic_memory-0.10.0}/docs/Canvas.md +0 -0
  71. {basic_memory-0.9.0 → basic_memory-0.10.0}/docs/Knowledge Format.md +0 -0
  72. {basic_memory-0.9.0 → basic_memory-0.10.0}/docs/Obsidian Integration.md +0 -0
  73. {basic_memory-0.9.0 → basic_memory-0.10.0}/docs/attachments/Canvas.png +0 -0
  74. {basic_memory-0.9.0 → basic_memory-0.10.0}/docs/attachments/Prompt.png +0 -0
  75. {basic_memory-0.9.0 → basic_memory-0.10.0}/docs/attachments/prompt 1.png +0 -0
  76. {basic_memory-0.9.0 → basic_memory-0.10.0}/docs/attachments/prompt2.png +0 -0
  77. {basic_memory-0.9.0 → basic_memory-0.10.0}/docs/attachments/prompt3.png +0 -0
  78. {basic_memory-0.9.0 → basic_memory-0.10.0}/docs/attachments/prompt4.png +0 -0
  79. {basic_memory-0.9.0 → basic_memory-0.10.0}/examples/Coffee Notes/Brewing Equipment.md +0 -0
  80. {basic_memory-0.9.0 → basic_memory-0.10.0}/examples/Coffee Notes/Coffee Bean Origins.md +0 -0
  81. {basic_memory-0.9.0 → basic_memory-0.10.0}/examples/Coffee Notes/Coffee Brewing Methods.md +0 -0
  82. {basic_memory-0.9.0 → basic_memory-0.10.0}/examples/Coffee Notes/Coffee Flavor Map.md +0 -0
  83. {basic_memory-0.9.0 → basic_memory-0.10.0}/examples/Coffee Notes/Coffee Knowledge Base.md +0 -0
  84. {basic_memory-0.9.0 → basic_memory-0.10.0}/examples/Coffee Notes/Flavor Extraction.md +0 -0
  85. {basic_memory-0.9.0 → basic_memory-0.10.0}/examples/Coffee Notes/Perfect Pour Over Coffee Method.canvas +0 -0
  86. {basic_memory-0.9.0 → basic_memory-0.10.0}/examples/Coffee Notes/Tasting Notes.md +0 -0
  87. {basic_memory-0.9.0 → basic_memory-0.10.0}/installer/Basic.icns +0 -0
  88. {basic_memory-0.9.0 → basic_memory-0.10.0}/installer/README.md +0 -0
  89. {basic_memory-0.9.0 → basic_memory-0.10.0}/installer/icon.svg +0 -0
  90. {basic_memory-0.9.0 → basic_memory-0.10.0}/installer/installer.py +0 -0
  91. {basic_memory-0.9.0 → basic_memory-0.10.0}/installer/make_icons.sh +0 -0
  92. {basic_memory-0.9.0 → basic_memory-0.10.0}/installer/setup.py +0 -0
  93. {basic_memory-0.9.0 → basic_memory-0.10.0}/memory.json +0 -0
  94. {basic_memory-0.9.0 → basic_memory-0.10.0}/scripts/install.sh +0 -0
  95. {basic_memory-0.9.0 → basic_memory-0.10.0}/src/basic_memory/alembic/alembic.ini +0 -0
  96. {basic_memory-0.9.0 → basic_memory-0.10.0}/src/basic_memory/alembic/env.py +0 -0
  97. {basic_memory-0.9.0 → basic_memory-0.10.0}/src/basic_memory/alembic/migrations.py +0 -0
  98. {basic_memory-0.9.0 → basic_memory-0.10.0}/src/basic_memory/alembic/script.py.mako +0 -0
  99. {basic_memory-0.9.0 → basic_memory-0.10.0}/src/basic_memory/alembic/versions/3dae7c7b1564_initial_schema.py +0 -0
  100. {basic_memory-0.9.0 → basic_memory-0.10.0}/src/basic_memory/alembic/versions/502b60eaa905_remove_required_from_entity_permalink.py +0 -0
  101. {basic_memory-0.9.0 → basic_memory-0.10.0}/src/basic_memory/alembic/versions/b3c3938bacdb_relation_to_name_unique_index.py +0 -0
  102. {basic_memory-0.9.0 → basic_memory-0.10.0}/src/basic_memory/alembic/versions/cc7172b46608_update_search_index_schema.py +0 -0
  103. {basic_memory-0.9.0 → basic_memory-0.10.0}/src/basic_memory/api/__init__.py +0 -0
  104. {basic_memory-0.9.0 → basic_memory-0.10.0}/src/basic_memory/api/app.py +0 -0
  105. {basic_memory-0.9.0 → basic_memory-0.10.0}/src/basic_memory/api/routers/__init__.py +0 -0
  106. {basic_memory-0.9.0 → basic_memory-0.10.0}/src/basic_memory/api/routers/knowledge_router.py +0 -0
  107. {basic_memory-0.9.0 → basic_memory-0.10.0}/src/basic_memory/api/routers/memory_router.py +0 -0
  108. {basic_memory-0.9.0 → basic_memory-0.10.0}/src/basic_memory/api/routers/resource_router.py +0 -0
  109. {basic_memory-0.9.0 → basic_memory-0.10.0}/src/basic_memory/api/routers/search_router.py +0 -0
  110. {basic_memory-0.9.0 → basic_memory-0.10.0}/src/basic_memory/cli/__init__.py +0 -0
  111. {basic_memory-0.9.0 → basic_memory-0.10.0}/src/basic_memory/cli/app.py +0 -0
  112. {basic_memory-0.9.0 → basic_memory-0.10.0}/src/basic_memory/cli/commands/__init__.py +0 -0
  113. {basic_memory-0.9.0 → basic_memory-0.10.0}/src/basic_memory/cli/commands/db.py +0 -0
  114. {basic_memory-0.9.0 → basic_memory-0.10.0}/src/basic_memory/cli/commands/import_memory_json.py +0 -0
  115. {basic_memory-0.9.0 → basic_memory-0.10.0}/src/basic_memory/cli/commands/mcp.py +0 -0
  116. {basic_memory-0.9.0 → basic_memory-0.10.0}/src/basic_memory/cli/commands/project.py +0 -0
  117. {basic_memory-0.9.0 → basic_memory-0.10.0}/src/basic_memory/cli/commands/project_info.py +0 -0
  118. {basic_memory-0.9.0 → basic_memory-0.10.0}/src/basic_memory/cli/commands/status.py +0 -0
  119. {basic_memory-0.9.0 → basic_memory-0.10.0}/src/basic_memory/cli/commands/sync.py +0 -0
  120. {basic_memory-0.9.0 → basic_memory-0.10.0}/src/basic_memory/cli/commands/tool.py +0 -0
  121. {basic_memory-0.9.0 → basic_memory-0.10.0}/src/basic_memory/cli/main.py +0 -0
  122. {basic_memory-0.9.0 → basic_memory-0.10.0}/src/basic_memory/db.py +0 -0
  123. {basic_memory-0.9.0 → basic_memory-0.10.0}/src/basic_memory/deps.py +0 -0
  124. {basic_memory-0.9.0 → basic_memory-0.10.0}/src/basic_memory/markdown/__init__.py +0 -0
  125. {basic_memory-0.9.0 → basic_memory-0.10.0}/src/basic_memory/markdown/entity_parser.py +0 -0
  126. {basic_memory-0.9.0 → basic_memory-0.10.0}/src/basic_memory/markdown/plugins.py +0 -0
  127. {basic_memory-0.9.0 → basic_memory-0.10.0}/src/basic_memory/markdown/schemas.py +0 -0
  128. {basic_memory-0.9.0 → basic_memory-0.10.0}/src/basic_memory/markdown/utils.py +0 -0
  129. {basic_memory-0.9.0 → basic_memory-0.10.0}/src/basic_memory/mcp/__init__.py +0 -0
  130. {basic_memory-0.9.0 → basic_memory-0.10.0}/src/basic_memory/mcp/async_client.py +0 -0
  131. {basic_memory-0.9.0 → basic_memory-0.10.0}/src/basic_memory/mcp/main.py +0 -0
  132. {basic_memory-0.9.0 → basic_memory-0.10.0}/src/basic_memory/mcp/prompts/__init__.py +0 -0
  133. {basic_memory-0.9.0 → basic_memory-0.10.0}/src/basic_memory/mcp/prompts/continue_conversation.py +0 -0
  134. {basic_memory-0.9.0 → basic_memory-0.10.0}/src/basic_memory/mcp/prompts/recent_activity.py +0 -0
  135. {basic_memory-0.9.0 → basic_memory-0.10.0}/src/basic_memory/mcp/prompts/search.py +0 -0
  136. {basic_memory-0.9.0 → basic_memory-0.10.0}/src/basic_memory/mcp/prompts/utils.py +0 -0
  137. {basic_memory-0.9.0 → basic_memory-0.10.0}/src/basic_memory/mcp/server.py +0 -0
  138. {basic_memory-0.9.0 → basic_memory-0.10.0}/src/basic_memory/mcp/tools/__init__.py +0 -0
  139. {basic_memory-0.9.0 → basic_memory-0.10.0}/src/basic_memory/mcp/tools/build_context.py +0 -0
  140. {basic_memory-0.9.0 → basic_memory-0.10.0}/src/basic_memory/mcp/tools/canvas.py +0 -0
  141. {basic_memory-0.9.0 → basic_memory-0.10.0}/src/basic_memory/mcp/tools/delete_note.py +0 -0
  142. {basic_memory-0.9.0 → basic_memory-0.10.0}/src/basic_memory/mcp/tools/project_info.py +0 -0
  143. {basic_memory-0.9.0 → basic_memory-0.10.0}/src/basic_memory/mcp/tools/read_content.py +0 -0
  144. {basic_memory-0.9.0 → basic_memory-0.10.0}/src/basic_memory/mcp/tools/read_note.py +0 -0
  145. {basic_memory-0.9.0 → basic_memory-0.10.0}/src/basic_memory/mcp/tools/recent_activity.py +0 -0
  146. {basic_memory-0.9.0 → basic_memory-0.10.0}/src/basic_memory/mcp/tools/search.py +0 -0
  147. {basic_memory-0.9.0 → basic_memory-0.10.0}/src/basic_memory/mcp/tools/utils.py +0 -0
  148. {basic_memory-0.9.0 → basic_memory-0.10.0}/src/basic_memory/mcp/tools/write_note.py +0 -0
  149. {basic_memory-0.9.0 → basic_memory-0.10.0}/src/basic_memory/models/__init__.py +0 -0
  150. {basic_memory-0.9.0 → basic_memory-0.10.0}/src/basic_memory/models/base.py +0 -0
  151. {basic_memory-0.9.0 → basic_memory-0.10.0}/src/basic_memory/models/knowledge.py +0 -0
  152. {basic_memory-0.9.0 → basic_memory-0.10.0}/src/basic_memory/models/search.py +0 -0
  153. {basic_memory-0.9.0 → basic_memory-0.10.0}/src/basic_memory/repository/__init__.py +0 -0
  154. {basic_memory-0.9.0 → basic_memory-0.10.0}/src/basic_memory/repository/entity_repository.py +0 -0
  155. {basic_memory-0.9.0 → basic_memory-0.10.0}/src/basic_memory/repository/observation_repository.py +0 -0
  156. {basic_memory-0.9.0 → basic_memory-0.10.0}/src/basic_memory/repository/project_info_repository.py +0 -0
  157. {basic_memory-0.9.0 → basic_memory-0.10.0}/src/basic_memory/repository/relation_repository.py +0 -0
  158. {basic_memory-0.9.0 → basic_memory-0.10.0}/src/basic_memory/repository/repository.py +0 -0
  159. {basic_memory-0.9.0 → basic_memory-0.10.0}/src/basic_memory/repository/search_repository.py +0 -0
  160. {basic_memory-0.9.0 → basic_memory-0.10.0}/src/basic_memory/schemas/__init__.py +0 -0
  161. {basic_memory-0.9.0 → basic_memory-0.10.0}/src/basic_memory/schemas/base.py +0 -0
  162. {basic_memory-0.9.0 → basic_memory-0.10.0}/src/basic_memory/schemas/delete.py +0 -0
  163. {basic_memory-0.9.0 → basic_memory-0.10.0}/src/basic_memory/schemas/memory.py +0 -0
  164. {basic_memory-0.9.0 → basic_memory-0.10.0}/src/basic_memory/schemas/project_info.py +0 -0
  165. {basic_memory-0.9.0 → basic_memory-0.10.0}/src/basic_memory/schemas/request.py +0 -0
  166. {basic_memory-0.9.0 → basic_memory-0.10.0}/src/basic_memory/schemas/response.py +0 -0
  167. {basic_memory-0.9.0 → basic_memory-0.10.0}/src/basic_memory/schemas/search.py +0 -0
  168. {basic_memory-0.9.0 → basic_memory-0.10.0}/src/basic_memory/services/__init__.py +0 -0
  169. {basic_memory-0.9.0 → basic_memory-0.10.0}/src/basic_memory/services/context_service.py +0 -0
  170. {basic_memory-0.9.0 → basic_memory-0.10.0}/src/basic_memory/services/entity_service.py +0 -0
  171. {basic_memory-0.9.0 → basic_memory-0.10.0}/src/basic_memory/services/exceptions.py +0 -0
  172. {basic_memory-0.9.0 → basic_memory-0.10.0}/src/basic_memory/services/link_resolver.py +0 -0
  173. {basic_memory-0.9.0 → basic_memory-0.10.0}/src/basic_memory/services/search_service.py +0 -0
  174. {basic_memory-0.9.0 → basic_memory-0.10.0}/src/basic_memory/services/service.py +0 -0
  175. {basic_memory-0.9.0 → basic_memory-0.10.0}/src/basic_memory/sync/__init__.py +0 -0
  176. {basic_memory-0.9.0 → basic_memory-0.10.0}/src/basic_memory/sync/sync_service.py +0 -0
  177. {basic_memory-0.9.0 → basic_memory-0.10.0}/src/basic_memory/utils.py +0 -0
  178. {basic_memory-0.9.0 → basic_memory-0.10.0}/static/ai_assistant_guide.md +0 -0
  179. {basic_memory-0.9.0 → basic_memory-0.10.0}/static/json_canvas_spec_1_0.md +0 -0
  180. {basic_memory-0.9.0 → basic_memory-0.10.0}/tests/Non-MarkdownFileSupport.pdf +0 -0
  181. {basic_memory-0.9.0 → basic_memory-0.10.0}/tests/Screenshot.png +0 -0
  182. {basic_memory-0.9.0 → basic_memory-0.10.0}/tests/__init__.py +0 -0
  183. {basic_memory-0.9.0 → basic_memory-0.10.0}/tests/api/conftest.py +0 -0
  184. {basic_memory-0.9.0 → basic_memory-0.10.0}/tests/api/test_knowledge_router.py +0 -0
  185. {basic_memory-0.9.0 → basic_memory-0.10.0}/tests/api/test_memory_router.py +0 -0
  186. {basic_memory-0.9.0 → basic_memory-0.10.0}/tests/api/test_project_info_router.py +0 -0
  187. {basic_memory-0.9.0 → basic_memory-0.10.0}/tests/api/test_resource_router.py +0 -0
  188. {basic_memory-0.9.0 → basic_memory-0.10.0}/tests/api/test_search_router.py +0 -0
  189. {basic_memory-0.9.0 → basic_memory-0.10.0}/tests/cli/conftest.py +0 -0
  190. {basic_memory-0.9.0 → basic_memory-0.10.0}/tests/cli/test_cli_tools.py +0 -0
  191. {basic_memory-0.9.0 → basic_memory-0.10.0}/tests/cli/test_import_chatgpt.py +0 -0
  192. {basic_memory-0.9.0 → basic_memory-0.10.0}/tests/cli/test_import_claude_conversations.py +0 -0
  193. {basic_memory-0.9.0 → basic_memory-0.10.0}/tests/cli/test_import_claude_projects.py +0 -0
  194. {basic_memory-0.9.0 → basic_memory-0.10.0}/tests/cli/test_import_memory_json.py +0 -0
  195. {basic_memory-0.9.0 → basic_memory-0.10.0}/tests/cli/test_project_commands.py +0 -0
  196. {basic_memory-0.9.0 → basic_memory-0.10.0}/tests/cli/test_project_info.py +0 -0
  197. {basic_memory-0.9.0 → basic_memory-0.10.0}/tests/cli/test_status.py +0 -0
  198. {basic_memory-0.9.0 → basic_memory-0.10.0}/tests/cli/test_sync.py +0 -0
  199. {basic_memory-0.9.0 → basic_memory-0.10.0}/tests/cli/test_version.py +0 -0
  200. {basic_memory-0.9.0 → basic_memory-0.10.0}/tests/conftest.py +0 -0
  201. {basic_memory-0.9.0 → basic_memory-0.10.0}/tests/edit_file_test.py +0 -0
  202. {basic_memory-0.9.0 → basic_memory-0.10.0}/tests/markdown/__init__.py +0 -0
  203. {basic_memory-0.9.0 → basic_memory-0.10.0}/tests/markdown/test_entity_parser.py +0 -0
  204. {basic_memory-0.9.0 → basic_memory-0.10.0}/tests/markdown/test_markdown_plugins.py +0 -0
  205. {basic_memory-0.9.0 → basic_memory-0.10.0}/tests/markdown/test_markdown_processor.py +0 -0
  206. {basic_memory-0.9.0 → basic_memory-0.10.0}/tests/markdown/test_observation_edge_cases.py +0 -0
  207. {basic_memory-0.9.0 → basic_memory-0.10.0}/tests/markdown/test_parser_edge_cases.py +0 -0
  208. {basic_memory-0.9.0 → basic_memory-0.10.0}/tests/markdown/test_relation_edge_cases.py +0 -0
  209. {basic_memory-0.9.0 → basic_memory-0.10.0}/tests/markdown/test_task_detection.py +0 -0
  210. {basic_memory-0.9.0 → basic_memory-0.10.0}/tests/mcp/conftest.py +0 -0
  211. {basic_memory-0.9.0 → basic_memory-0.10.0}/tests/mcp/test_prompts.py +0 -0
  212. {basic_memory-0.9.0 → basic_memory-0.10.0}/tests/mcp/test_resources.py +0 -0
  213. {basic_memory-0.9.0 → basic_memory-0.10.0}/tests/mcp/test_tool_canvas.py +0 -0
  214. {basic_memory-0.9.0 → basic_memory-0.10.0}/tests/mcp/test_tool_memory.py +0 -0
  215. {basic_memory-0.9.0 → basic_memory-0.10.0}/tests/mcp/test_tool_notes.py +0 -0
  216. {basic_memory-0.9.0 → basic_memory-0.10.0}/tests/mcp/test_tool_project_info.py +0 -0
  217. {basic_memory-0.9.0 → basic_memory-0.10.0}/tests/mcp/test_tool_read_note.py +0 -0
  218. {basic_memory-0.9.0 → basic_memory-0.10.0}/tests/mcp/test_tool_resource.py +0 -0
  219. {basic_memory-0.9.0 → basic_memory-0.10.0}/tests/mcp/test_tool_search.py +0 -0
  220. {basic_memory-0.9.0 → basic_memory-0.10.0}/tests/mcp/test_tool_utils.py +0 -0
  221. {basic_memory-0.9.0 → basic_memory-0.10.0}/tests/repository/test_entity_repository.py +0 -0
  222. {basic_memory-0.9.0 → basic_memory-0.10.0}/tests/repository/test_observation_repository.py +0 -0
  223. {basic_memory-0.9.0 → basic_memory-0.10.0}/tests/repository/test_relation_repository.py +0 -0
  224. {basic_memory-0.9.0 → basic_memory-0.10.0}/tests/repository/test_repository.py +0 -0
  225. {basic_memory-0.9.0 → basic_memory-0.10.0}/tests/schemas/test_memory_url.py +0 -0
  226. {basic_memory-0.9.0 → basic_memory-0.10.0}/tests/schemas/test_schemas.py +0 -0
  227. {basic_memory-0.9.0 → basic_memory-0.10.0}/tests/schemas/test_search.py +0 -0
  228. {basic_memory-0.9.0 → basic_memory-0.10.0}/tests/services/test_context_service.py +0 -0
  229. {basic_memory-0.9.0 → basic_memory-0.10.0}/tests/services/test_entity_service.py +0 -0
  230. {basic_memory-0.9.0 → basic_memory-0.10.0}/tests/services/test_file_service.py +0 -0
  231. {basic_memory-0.9.0 → basic_memory-0.10.0}/tests/services/test_link_resolver.py +0 -0
  232. {basic_memory-0.9.0 → basic_memory-0.10.0}/tests/services/test_search_service.py +0 -0
  233. {basic_memory-0.9.0 → basic_memory-0.10.0}/tests/sync/test_sync_service.py +0 -0
  234. {basic_memory-0.9.0 → basic_memory-0.10.0}/tests/sync/test_watch_service.py +0 -0
  235. {basic_memory-0.9.0 → basic_memory-0.10.0}/tests/sync/test_watch_service_edge_cases.py +0 -0
  236. {basic_memory-0.9.0 → basic_memory-0.10.0}/tests/test_basic_memory.py +0 -0
  237. {basic_memory-0.9.0 → basic_memory-0.10.0}/tests/test_config.py +0 -0
  238. {basic_memory-0.9.0 → basic_memory-0.10.0}/tests/utils/test_file_utils.py +0 -0
  239. {basic_memory-0.9.0 → basic_memory-0.10.0}/tests/utils/test_permalink_formatting.py +0 -0
@@ -0,0 +1,12 @@
1
+ # To get started with Dependabot version updates, you'll need to specify which
2
+ # package ecosystems to update and where the package manifests are located.
3
+ # Please see the documentation for all configuration options:
4
+ # https://docs.github.com/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file
5
+
6
+ version: 2
7
+ updates:
8
+ - package-ecosystem: "" # See documentation for possible values
9
+ directory: "/" # Location of package manifests
10
+ schedule:
11
+ interval: "weekly"
12
+
@@ -43,3 +43,8 @@ ENV/
43
43
  # macOS
44
44
  .DS_Store
45
45
  /.coverage.*
46
+
47
+ # obsidian docs:
48
+ /docs/.obsidian/
49
+ /examples/.obsidian/
50
+ /examples/.basic-memory/
@@ -1,6 +1,76 @@
1
1
  # CHANGELOG
2
2
 
3
3
 
4
+ ## v0.10.0 (2025-03-15)
5
+
6
+ ### Bug Fixes
7
+
8
+ - Ai_resource_guide.md path
9
+ ([`da97353`](https://github.com/basicmachines-co/basic-memory/commit/da97353cfc3acc1ceb0eca22ac6af326f77dc199))
10
+
11
+ Signed-off-by: phernandez <paul@basicmachines.co>
12
+
13
+ - Ai_resource_guide.md path
14
+ ([`c4732a4`](https://github.com/basicmachines-co/basic-memory/commit/c4732a47b37dd2e404139fb283b65556c81ce7c9))
15
+
16
+ - Ai_resource_guide.md path
17
+ ([`2e9d673`](https://github.com/basicmachines-co/basic-memory/commit/2e9d673e54ad6a63a971db64f01fc2f4e59c2e69))
18
+
19
+ Signed-off-by: phernandez <paul@basicmachines.co>
20
+
21
+ - Don't sync *.tmp files on watch ([#31](https://github.com/basicmachines-co/basic-memory/pull/31),
22
+ [`6b110b2`](https://github.com/basicmachines-co/basic-memory/commit/6b110b28dd8ba705ebfc0bcb41faf2cb993da2c3))
23
+
24
+ Fixes #30
25
+
26
+ Signed-off-by: phernandez <paul@basicmachines.co>
27
+
28
+ - Drop search_index table on db reindex
29
+ ([`31cca6f`](https://github.com/basicmachines-co/basic-memory/commit/31cca6f913849a0ab8fc944803533e3072e9ef88))
30
+
31
+ Signed-off-by: phernandez <paul@basicmachines.co>
32
+
33
+ - Improve utf-8 support for file reading/writing
34
+ ([#32](https://github.com/basicmachines-co/basic-memory/pull/32),
35
+ [`eb5e4ec`](https://github.com/basicmachines-co/basic-memory/commit/eb5e4ec6bd4d2fe757087be030d867f4ca1d38ba))
36
+
37
+ fixes #29
38
+
39
+ Signed-off-by: phernandez <paul@basicmachines.co>
40
+
41
+ ### Chores
42
+
43
+ - Remove logfire
44
+ ([`9bb8a02`](https://github.com/basicmachines-co/basic-memory/commit/9bb8a020c3425a02cb3a88f6f02adcd281bccee2))
45
+
46
+ Signed-off-by: phernandez <paul@basicmachines.co>
47
+
48
+ ### Documentation
49
+
50
+ - Add glama badge. Fix typos in README.md
51
+ ([#28](https://github.com/basicmachines-co/basic-memory/pull/28),
52
+ [`9af913d`](https://github.com/basicmachines-co/basic-memory/commit/9af913da4fba7bb4908caa3f15f2db2aa03777ec))
53
+
54
+ Signed-off-by: phernandez <paul@basicmachines.co>
55
+
56
+ - Update CLAUDE.md with GitHub integration capabilities
57
+ ([#25](https://github.com/basicmachines-co/basic-memory/pull/25),
58
+ [`fea2f40`](https://github.com/basicmachines-co/basic-memory/commit/fea2f40d1b54d0c533e6d7ee7ce1aa7b83ad9a47))
59
+
60
+ This PR updates the CLAUDE.md file to document the GitHub integration capabilities that enable
61
+ Claude to participate directly in the development workflow.
62
+
63
+ ### Features
64
+
65
+ - Add Smithery integration for easier installation
66
+ ([#24](https://github.com/basicmachines-co/basic-memory/pull/24),
67
+ [`eb1e7b6`](https://github.com/basicmachines-co/basic-memory/commit/eb1e7b6088b0b3dead9c104ee44174b2baebf417))
68
+
69
+ This PR adds support for deploying Basic Memory on the Smithery platform.
70
+
71
+ Signed-off-by: bm-claudeai <claude@basicmachines.co>
72
+
73
+
4
74
  ## v0.9.0 (2025-03-07)
5
75
 
6
76
  ### Chores
@@ -130,4 +130,42 @@ of using AI just for code generation, we've developed a true collaborative workf
130
130
  5. Results improve through iterative collaboration and shared understanding
131
131
 
132
132
  This approach has allowed us to tackle more complex challenges and build a more robust system than either humans or AI
133
- could achieve independently.
133
+ could achieve independently.
134
+
135
+ ## GitHub Integration
136
+
137
+ Basic Memory has taken AI-Human collaboration to the next level by integrating Claude directly into the development workflow through GitHub:
138
+
139
+ ### GitHub MCP Tools
140
+
141
+ Using the GitHub Model Context Protocol server, Claude can now:
142
+
143
+ - **Repository Management**:
144
+ - View repository files and structure
145
+ - Read file contents
146
+ - Create new branches
147
+ - Create and update files
148
+
149
+ - **Issue Management**:
150
+ - Create new issues
151
+ - Comment on existing issues
152
+ - Close and update issues
153
+ - Search across issues
154
+
155
+ - **Pull Request Workflow**:
156
+ - Create pull requests
157
+ - Review code changes
158
+ - Add comments to PRs
159
+
160
+ This integration enables Claude to participate as a full team member in the development process, not just as a code generation tool. Claude's GitHub account ([bm-claudeai](https://github.com/bm-claudeai)) is a member of the Basic Machines organization with direct contributor access to the codebase.
161
+
162
+ ### Collaborative Development Process
163
+
164
+ With GitHub integration, the development workflow includes:
165
+
166
+ 1. **Direct code review** - Claude can analyze PRs and provide detailed feedback
167
+ 2. **Contribution tracking** - All of Claude's contributions are properly attributed in the Git history
168
+ 3. **Branch management** - Claude can create feature branches for implementations
169
+ 4. **Documentation maintenance** - Claude can keep documentation updated as the code evolves
170
+
171
+ This level of integration represents a new paradigm in AI-human collaboration, where the AI assistant becomes a full-fledged team member rather than just a tool for generating code snippets.
@@ -1,6 +1,7 @@
1
1
  # Contributing to Basic Memory
2
2
 
3
- Thank you for considering contributing to Basic Memory! This document outlines the process for contributing to the project and how to get started as a developer.
3
+ Thank you for considering contributing to Basic Memory! This document outlines the process for contributing to the
4
+ project and how to get started as a developer.
4
5
 
5
6
  ## Getting Started
6
7
 
@@ -65,61 +66,64 @@ Thank you for considering contributing to Basic Memory! This document outlines t
65
66
 
66
67
  This project is designed for collaborative development between humans and LLMs (Large Language Models):
67
68
 
68
- 1. **CLAUDE.md**: The repository includes a `CLAUDE.md` file that serves as a project guide for both humans and LLMs. This file contains:
69
- - Key project information and architectural overview
70
- - Development commands and workflows
71
- - Code style guidelines
72
- - Documentation standards
69
+ 1. **CLAUDE.md**: The repository includes a `CLAUDE.md` file that serves as a project guide for both humans and LLMs.
70
+ This file contains:
71
+ - Key project information and architectural overview
72
+ - Development commands and workflows
73
+ - Code style guidelines
74
+ - Documentation standards
73
75
 
74
76
  2. **AI-Human Collaborative Workflow**:
75
- - We encourage using LLMs like Claude for code generation, reviews, and documentation
76
- - When possible, save context in markdown files that can be referenced later
77
- - This enables seamless knowledge transfer between different development sessions
78
- - Claude can help with implementation details while you focus on architecture and design
77
+ - We encourage using LLMs like Claude for code generation, reviews, and documentation
78
+ - When possible, save context in markdown files that can be referenced later
79
+ - This enables seamless knowledge transfer between different development sessions
80
+ - Claude can help with implementation details while you focus on architecture and design
79
81
 
80
82
  3. **Adding to CLAUDE.md**:
81
- - If you discover useful project information or common commands, consider adding them to CLAUDE.md
82
- - This helps all contributors (human and AI) maintain consistent knowledge of the project
83
+ - If you discover useful project information or common commands, consider adding them to CLAUDE.md
84
+ - This helps all contributors (human and AI) maintain consistent knowledge of the project
83
85
 
84
86
  ## Pull Request Process
85
87
 
86
88
  1. **Create a Pull Request**: Open a PR against the `main` branch with a clear title and description.
87
- 2. **Sign the Developer Certificate of Origin (DCO)**: All contributions require signing our DCO, which certifies that you have the right to submit your contributions. This will be automatically checked by our CLA assistant when you create a PR.
89
+ 2. **Sign the Developer Certificate of Origin (DCO)**: All contributions require signing our DCO, which certifies that
90
+ you have the right to submit your contributions. This will be automatically checked by our CLA assistant when you
91
+ create a PR.
88
92
  3. **PR Description**: Include:
89
- - What the PR changes
90
- - Why the change is needed
91
- - How you tested the changes
92
- - Any related issues (use "Fixes #123" to automatically close issues)
93
+ - What the PR changes
94
+ - Why the change is needed
95
+ - How you tested the changes
96
+ - Any related issues (use "Fixes #123" to automatically close issues)
93
97
  4. **Code Review**: Wait for code review and address any feedback.
94
98
  5. **CI Checks**: Ensure all CI checks pass.
95
99
  6. **Merge**: Once approved, a maintainer will merge your PR.
96
100
 
97
101
  ## Developer Certificate of Origin
98
102
 
99
- By contributing to this project, you agree to the [Developer Certificate of Origin (DCO)](CLA.md). This means you certify that:
103
+ By contributing to this project, you agree to the [Developer Certificate of Origin (DCO)](CLA.md). This means you
104
+ certify that:
105
+
100
106
  - You have the right to submit your contributions
101
107
  - You're not knowingly submitting code with patent or copyright issues
102
108
  - Your contributions are provided under the project's license (AGPL-3.0)
103
109
 
104
- This is a lightweight alternative to a Contributor License Agreement and helps ensure that all contributions can be properly incorporated into the project and potentially used in commercial applications.
110
+ This is a lightweight alternative to a Contributor License Agreement and helps ensure that all contributions can be
111
+ properly incorporated into the project and potentially used in commercial applications.
105
112
 
106
113
  ### Signing Your Commits
107
114
 
108
- You can sign your commits in one of two ways:
115
+ Sign your commit:
109
116
 
110
- 1. **Using the `-s` or `--signoff` flag**:
111
- ```bash
112
- git commit -s -m "Your commit message"
113
- ```
114
- This adds a `Signed-off-by` line to your commit message, certifying that you adhere to the DCO.
117
+ **Using the `-s` or `--signoff` flag**:
115
118
 
116
- 2. **Configuring Git to automatically sign off**:
117
- ```bash
118
- git config --global alias.cs 'commit -s'
119
- ```
120
- Then use `git cs -m "Your commit message"` to commit with sign-off.
119
+ ```bash
120
+ git commit -s -m "Your commit message"
121
+ ```
122
+
123
+ This adds a `Signed-off-by` line to your commit message, certifying that you adhere to the DCO.
121
124
 
122
- The sign-off certifies that you have the right to submit your contribution under the project's license and verifies your agreement to the DCO.
125
+ The sign-off certifies that you have the right to submit your contribution under the project's license and verifies your
126
+ agreement to the DCO.
123
127
 
124
128
  ## Code Style Guidelines
125
129
 
@@ -135,10 +139,10 @@ The sign-off certifies that you have the right to submit your contribution under
135
139
 
136
140
  - **Coverage Target**: We aim for 100% test coverage for all code
137
141
  - **Test Framework**: Use pytest for unit and integration tests
138
- - **Mocking**: Use pytest-mock for mocking dependencies
142
+ - **Mocking**: Use pytest-mock for mocking dependencies only when necessary
139
143
  - **Edge Cases**: Test both normal operation and edge cases
140
144
  - **Database Testing**: Use in-memory SQLite for testing database operations
141
- - **Fixtures**: Use pytest fixtures for setup and teardown
145
+ - **Fixtures**: Use async pytest fixtures for setup and teardown
142
146
 
143
147
  ## Creating Issues
144
148
 
@@ -156,4 +160,4 @@ All contributors must follow the [Code of Conduct](CODE_OF_CONDUCT.md).
156
160
 
157
161
  ## Thank You!
158
162
 
159
- Your contributions help make Basic Memory better for everyone. We appreciate your time and effort!
163
+ Your contributions help make Basic Memory better. We appreciate your time and effort!
@@ -0,0 +1,16 @@
1
+ # Generated by https://smithery.ai. See: https://smithery.ai/docs/config#dockerfile
2
+ FROM python:3.12-slim
3
+
4
+ WORKDIR /app
5
+
6
+ # Copy the project files
7
+ COPY . .
8
+
9
+ # Install pip and build dependencies
10
+ RUN pip install --upgrade pip \
11
+ && pip install . --no-cache-dir --ignore-installed
12
+
13
+ # Expose port if necessary (e.g., uv might use a port, but MCP over stdio so not needed here)
14
+
15
+ # Use the basic-memory entrypoint to run the MCP server
16
+ CMD ["basic-memory", "mcp"]
@@ -0,0 +1,386 @@
1
+ Metadata-Version: 2.4
2
+ Name: basic-memory
3
+ Version: 0.10.0
4
+ Summary: Local-first knowledge management combining Zettelkasten with knowledge graphs
5
+ Project-URL: Homepage, https://github.com/basicmachines-co/basic-memory
6
+ Project-URL: Repository, https://github.com/basicmachines-co/basic-memory
7
+ Project-URL: Documentation, https://github.com/basicmachines-co/basic-memory#readme
8
+ Author-email: Basic Machines <hello@basic-machines.co>
9
+ License: AGPL-3.0-or-later
10
+ License-File: LICENSE
11
+ Requires-Python: >=3.12.1
12
+ Requires-Dist: aiosqlite>=0.20.0
13
+ Requires-Dist: alembic>=1.14.1
14
+ Requires-Dist: dateparser>=1.2.0
15
+ Requires-Dist: fastapi[standard]>=0.115.8
16
+ Requires-Dist: greenlet>=3.1.1
17
+ Requires-Dist: icecream>=2.1.3
18
+ Requires-Dist: loguru>=0.7.3
19
+ Requires-Dist: markdown-it-py>=3.0.0
20
+ Requires-Dist: mcp>=1.2.0
21
+ Requires-Dist: pillow>=11.1.0
22
+ Requires-Dist: pydantic-settings>=2.6.1
23
+ Requires-Dist: pydantic[email,timezone]>=2.10.3
24
+ Requires-Dist: pyright>=1.1.390
25
+ Requires-Dist: python-frontmatter>=1.1.0
26
+ Requires-Dist: pyyaml>=6.0.1
27
+ Requires-Dist: qasync>=0.27.1
28
+ Requires-Dist: rich>=13.9.4
29
+ Requires-Dist: sqlalchemy>=2.0.0
30
+ Requires-Dist: typer>=0.9.0
31
+ Requires-Dist: unidecode>=1.3.8
32
+ Requires-Dist: watchfiles>=1.0.4
33
+ Description-Content-Type: text/markdown
34
+
35
+ [![License: AGPL v3](https://img.shields.io/badge/License-AGPL_v3-blue.svg)](https://www.gnu.org/licenses/agpl-3.0)
36
+ [![PyPI version](https://badge.fury.io/py/basic-memory.svg)](https://badge.fury.io/py/basic-memory)
37
+ [![Python 3.12+](https://img.shields.io/badge/python-3.12+-blue.svg)](https://www.python.org/downloads/)
38
+ [![Tests](https://github.com/basicmachines-co/basic-memory/workflows/Tests/badge.svg)](https://github.com/basicmachines-co/basic-memory/actions)
39
+ [![Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff)
40
+ [![smithery badge](https://smithery.ai/badge/@basicmachines-co/basic-memory)](https://smithery.ai/server/@basicmachines-co/basic-memory)
41
+
42
+ # Basic Memory
43
+
44
+ Basic Memory lets you build persistent knowledge through natural conversations with Large Language Models (LLMs) like
45
+ Claude, while keeping everything in simple Markdown files on your computer. It uses the Model Context Protocol (MCP) to
46
+ enable any compatible LLM to read and write to your local knowledge base.
47
+
48
+ - Website: http://basicmachines.co
49
+ - Documentation: http://memory.basicmachines.co
50
+
51
+ ## Pick up your conversation right where you left off
52
+
53
+ - AI assistants can load context from local files in a new conversation
54
+ - Notes are saved locally as Markdown files in real time
55
+ - No project knowledge or special prompting required
56
+
57
+ https://github.com/user-attachments/assets/a55d8238-8dd0-454a-be4c-8860dbbd0ddc
58
+
59
+ ## Quick Start
60
+
61
+ ```bash
62
+ # Install with uv (recommended)
63
+ uv tool install basic-memory
64
+
65
+ # Configure Claude Desktop (edit ~/Library/Application Support/Claude/claude_desktop_config.json)
66
+ # Add this to your config:
67
+ {
68
+ "mcpServers": {
69
+ "basic-memory": {
70
+ "command": "uvx",
71
+ "args": [
72
+ "basic-memory",
73
+ "mcp"
74
+ ]
75
+ }
76
+ }
77
+ }
78
+ # Now in Claude Desktop, you can:
79
+ # - Write notes with "Create a note about coffee brewing methods"
80
+ # - Read notes with "What do I know about pour over coffee?"
81
+ # - Search with "Find information about Ethiopian beans"
82
+
83
+ ```
84
+
85
+ You can view shared context via files in `~/basic-memory` (default directory location).
86
+
87
+ ### Alternative Installation via Smithery
88
+
89
+ You can use [Smithery](https://smithery.ai/server/@basicmachines-co/basic-memory) to automatically configure Basic
90
+ Memory for Claude Desktop:
91
+
92
+ ```bash
93
+ npx -y @smithery/cli install @basicmachines-co/basic-memory --client claude
94
+ ```
95
+
96
+ This installs and configures Basic Memory without requiring manual edits to the Claude Desktop configuration file. The
97
+ Smithery server hosts the MCP server component, while your data remains stored locally as Markdown files.
98
+
99
+ ### Glama.ai
100
+
101
+ <a href="https://glama.ai/mcp/servers/o90kttu9ym">
102
+ <img width="380" height="200" src="https://glama.ai/mcp/servers/o90kttu9ym/badge" alt="basic-memory MCP server" />
103
+ </a>
104
+
105
+ ## Why Basic Memory?
106
+
107
+ Most LLM interactions are ephemeral - you ask a question, get an answer, and everything is forgotten. Each conversation
108
+ starts fresh, without the context or knowledge from previous ones. Current workarounds have limitations:
109
+
110
+ - Chat histories capture conversations but aren't structured knowledge
111
+ - RAG systems can query documents but don't let LLMs write back
112
+ - Vector databases require complex setups and often live in the cloud
113
+ - Knowledge graphs typically need specialized tools to maintain
114
+
115
+ Basic Memory addresses these problems with a simple approach: structured Markdown files that both humans and LLMs can
116
+ read
117
+ and write to. The key advantages:
118
+
119
+ - **Local-first:** All knowledge stays in files you control
120
+ - **Bi-directional:** Both you and the LLM read and write to the same files
121
+ - **Structured yet simple:** Uses familiar Markdown with semantic patterns
122
+ - **Traversable knowledge graph:** LLMs can follow links between topics
123
+ - **Standard formats:** Works with existing editors like Obsidian
124
+ - **Lightweight infrastructure:** Just local files indexed in a local SQLite database
125
+
126
+ With Basic Memory, you can:
127
+
128
+ - Have conversations that build on previous knowledge
129
+ - Create structured notes during natural conversations
130
+ - Have conversations with LLMs that remember what you've discussed before
131
+ - Navigate your knowledge graph semantically
132
+ - Keep everything local and under your control
133
+ - Use familiar tools like Obsidian to view and edit notes
134
+ - Build a personal knowledge base that grows over time
135
+
136
+ ## How It Works in Practice
137
+
138
+ Let's say you're exploring coffee brewing methods and want to capture your knowledge. Here's how it works:
139
+
140
+ 1. Start by chatting normally:
141
+
142
+ ```
143
+ I've been experimenting with different coffee brewing methods. Key things I've learned:
144
+
145
+ - Pour over gives more clarity in flavor than French press
146
+ - Water temperature is critical - around 205°F seems best
147
+ - Freshly ground beans make a huge difference
148
+ ```
149
+
150
+ ... continue conversation.
151
+
152
+ 2. Ask the LLM to help structure this knowledge:
153
+
154
+ ```
155
+ "Let's write a note about coffee brewing methods."
156
+ ```
157
+
158
+ LLM creates a new Markdown file on your system (which you can see instantly in Obsidian or your editor):
159
+
160
+ ```markdown
161
+ ---
162
+ title: Coffee Brewing Methods
163
+ permalink: coffee-brewing-methods
164
+ tags:
165
+ - coffee
166
+ - brewing
167
+ ---
168
+
169
+ # Coffee Brewing Methods
170
+
171
+ ## Observations
172
+
173
+ - [method] Pour over provides more clarity and highlights subtle flavors
174
+ - [technique] Water temperature at 205°F (96°C) extracts optimal compounds
175
+ - [principle] Freshly ground beans preserve aromatics and flavor
176
+
177
+ ## Relations
178
+
179
+ - relates_to [[Coffee Bean Origins]]
180
+ - requires [[Proper Grinding Technique]]
181
+ - affects [[Flavor Extraction]]
182
+ ```
183
+
184
+ The note embeds semantic content and links to other topics via simple Markdown formatting.
185
+
186
+ 3. You see this file on your computer in real time in the current project directory (default `~/$HOME/basic-memory`).
187
+
188
+ - Realtime sync can be enabled via running `basic-memory sync --watch`
189
+
190
+ 4. In a chat with the LLM, you can reference a topic:
191
+
192
+ ```
193
+ Look at `coffee-brewing-methods` for context about pour over coffee
194
+ ```
195
+
196
+ The LLM can now build rich context from the knowledge graph. For example:
197
+
198
+ ```
199
+ Following relation 'relates_to [[Coffee Bean Origins]]':
200
+ - Found information about Ethiopian Yirgacheffe
201
+ - Notes on Colombian beans' nutty profile
202
+ - Altitude effects on bean characteristics
203
+
204
+ Following relation 'requires [[Proper Grinding Technique]]':
205
+ - Burr vs. blade grinder comparisons
206
+ - Grind size recommendations for different methods
207
+ - Impact of consistent particle size on extraction
208
+ ```
209
+
210
+ Each related document can lead to more context, building a rich semantic understanding of your knowledge base.
211
+
212
+ This creates a two-way flow where:
213
+
214
+ - Humans write and edit Markdown files
215
+ - LLMs read and write through the MCP protocol
216
+ - Sync keeps everything consistent
217
+ - All knowledge stays in local files.
218
+
219
+ ## Technical Implementation
220
+
221
+ Under the hood, Basic Memory:
222
+
223
+ 1. Stores everything in Markdown files
224
+ 2. Uses a SQLite database for searching and indexing
225
+ 3. Extracts semantic meaning from simple Markdown patterns
226
+ - Files become `Entity` objects
227
+ - Each `Entity` can have `Observations`, or facts associated with it
228
+ - `Relations` connect entities together to form the knowledge graph
229
+ 4. Maintains the local knowledge graph derived from the files
230
+ 5. Provides bidirectional synchronization between files and the knowledge graph
231
+ 6. Implements the Model Context Protocol (MCP) for AI integration
232
+ 7. Exposes tools that let AI assistants traverse and manipulate the knowledge graph
233
+ 8. Uses memory:// URLs to reference entities across tools and conversations
234
+
235
+ The file format is just Markdown with some simple markup:
236
+
237
+ Each Markdown file has:
238
+
239
+ ### Frontmatter
240
+
241
+ ```markdown
242
+ title: <Entity title>
243
+ type: <The type of Entity> (e.g. note)
244
+ permalink: <a uri slug>
245
+
246
+ - <optional metadata> (such as tags)
247
+ ```
248
+
249
+ ### Observations
250
+
251
+ Observations are facts about a topic.
252
+ They can be added by creating a Markdown list with a special format that can reference a `category`, `tags` using a
253
+ "#" character, and an optional `context`.
254
+
255
+ Observation Markdown format:
256
+
257
+ ```markdown
258
+ - [category] content #tag (optional context)
259
+ ```
260
+
261
+ Examples of observations:
262
+
263
+ ```markdown
264
+ - [method] Pour over extracts more floral notes than French press
265
+ - [tip] Grind size should be medium-fine for pour over #brewing
266
+ - [preference] Ethiopian beans have bright, fruity flavors (especially from Yirgacheffe)
267
+ - [fact] Lighter roasts generally contain more caffeine than dark roasts
268
+ - [experiment] Tried 1:15 coffee-to-water ratio with good results
269
+ - [resource] James Hoffman's V60 technique on YouTube is excellent
270
+ - [question] Does water temperature affect extraction of different compounds differently?
271
+ - [note] My favorite local shop uses a 30-second bloom time
272
+ ```
273
+
274
+ ### Relations
275
+
276
+ Relations are links to other topics. They define how entities connect in the knowledge graph.
277
+
278
+ Markdown format:
279
+
280
+ ```markdown
281
+ - relation_type [[WikiLink]] (optional context)
282
+ ```
283
+
284
+ Examples of relations:
285
+
286
+ ```markdown
287
+ - pairs_well_with [[Chocolate Desserts]]
288
+ - grown_in [[Ethiopia]]
289
+ - contrasts_with [[Tea Brewing Methods]]
290
+ - requires [[Burr Grinder]]
291
+ - improves_with [[Fresh Beans]]
292
+ - relates_to [[Morning Routine]]
293
+ - inspired_by [[Japanese Coffee Culture]]
294
+ - documented_in [[Coffee Journal]]
295
+ ```
296
+
297
+ ## Using with Claude Desktop
298
+
299
+ Basic Memory is built using the MCP (Model Context Protocol) and works with the Claude desktop app (https://claude.ai/):
300
+
301
+ 1. Configure Claude Desktop to use Basic Memory:
302
+
303
+ Edit your MCP configuration file (usually located at `~/Library/Application Support/Claude/claude_desktop_config.json`
304
+ for OS X):
305
+
306
+ ```json
307
+ {
308
+ "mcpServers": {
309
+ "basic-memory": {
310
+ "command": "uvx",
311
+ "args": [
312
+ "basic-memory",
313
+ "mcp"
314
+ ]
315
+ }
316
+ }
317
+ }
318
+ ```
319
+
320
+ If you want to use a specific project (see [Multiple Projects](#multiple-projects) below), update your Claude Desktop
321
+ config:
322
+
323
+ ```json
324
+ {
325
+ "mcpServers": {
326
+ "basic-memory": {
327
+ "command": "uvx",
328
+ "args": [
329
+ "basic-memory",
330
+ "mcp",
331
+ "--project",
332
+ "your-project-name"
333
+ ]
334
+ }
335
+ }
336
+ }
337
+ ```
338
+
339
+ 2. Sync your knowledge:
340
+
341
+ ```bash
342
+ # One-time sync of local knowledge updates
343
+ basic-memory sync
344
+
345
+ # Run realtime sync process (recommended)
346
+ basic-memory sync --watch
347
+ ```
348
+
349
+ 3. In Claude Desktop, the LLM can now use these tools:
350
+
351
+ ```
352
+ write_note(title, content, folder, tags) - Create or update notes
353
+ read_note(identifier, page, page_size) - Read notes by title or permalink
354
+ build_context(url, depth, timeframe) - Navigate knowledge graph via memory:// URLs
355
+ search(query, page, page_size) - Search across your knowledge base
356
+ recent_activity(type, depth, timeframe) - Find recently updated information
357
+ canvas(nodes, edges, title, folder) - Generate knowledge visualizations
358
+ ```
359
+
360
+ 5. Example prompts to try:
361
+
362
+ ```
363
+ "Create a note about our project architecture decisions"
364
+ "Find information about JWT authentication in my notes"
365
+ "Create a canvas visualization of my project components"
366
+ "Read my notes on the authentication system"
367
+ "What have I been working on in the past week?"
368
+ ```
369
+
370
+ ## Futher info
371
+
372
+ See the [Documentation](https://memory.basicmachines.co/) for more info, including:
373
+
374
+ - [Complete User Guide](https://memory.basicmachines.co/docs/user-guide)
375
+ - [CLI tools](https://memory.basicmachines.co/docs/cli-reference)
376
+ - [Managing multiple Projects](https://memory.basicmachines.co/docs/cli-reference#project)
377
+ - [Importing data from OpenAI/Claude Projects](https://memory.basicmachines.co/docs/cli-reference#import)
378
+
379
+ ## License
380
+
381
+ AGPL-3.0
382
+
383
+ Contributions are welcome. See the [Contributing](CONTRIBUTING.md) guide for info about setting up the project locally
384
+ and submitting PRs.
385
+
386
+ Built with ♥️ by Basic Machines