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.
- {memu_cli-0.2.0 → memu_cli-0.4.0}/.github/workflows/publish-memu-cli.yml +11 -16
- {memu_cli-0.2.0 → memu_cli-0.4.0}/.github/workflows/release-please.yml +3 -7
- {memu_cli-0.2.0 → memu_cli-0.4.0}/CHANGELOG.md +100 -0
- memu_cli-0.4.0/INSTALL-LATEST.md +134 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/PKG-INFO +31 -15
- {memu_cli-0.2.0 → memu_cli-0.4.0}/README.md +29 -13
- memu_cli-0.4.0/SKILL.md +97 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/docs/adr/0009-codex-packaging-cli-and-config.md +1 -1
- memu_cli-0.4.0/docs/adr/0010-multi-host-adapters.md +167 -0
- memu_cli-0.4.0/docs/adr/0011-generic-host-adapter.md +85 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/docs/adr/README.md +2 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/npm/README.md +2 -2
- {memu_cli-0.2.0 → memu_cli-0.4.0}/npm/bin/memu.js +1 -2
- {memu_cli-0.2.0 → memu_cli-0.4.0}/npm/package.json +1 -1
- {memu_cli-0.2.0 → memu_cli-0.4.0}/pyproject.toml +12 -3
- {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/app/agentic.py +17 -4
- {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/cli.py +8 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/embedding/http_client.py +60 -5
- {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/embedding/openai_sdk.py +21 -2
- {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/env.py +20 -1
- {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/hosts/base.py +8 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/hosts/bridging/layout.py +15 -2
- {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/hosts/bridging/manifest.py +8 -4
- {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/hosts/bridging/pipeline.py +24 -4
- {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/hosts/bridging/transcripts.py +14 -7
- memu_cli-0.4.0/src/memu/hosts/claude_code/BRIDGING_TASK.md +118 -0
- memu_cli-0.4.0/src/memu/hosts/claude_code/INSTALL.md +197 -0
- memu_cli-0.4.0/src/memu/hosts/claude_code/UNINSTALL.md +108 -0
- memu_cli-0.4.0/src/memu/hosts/claude_code/__init__.py +11 -0
- memu_cli-0.4.0/src/memu/hosts/claude_code/cli.py +53 -0
- memu_cli-0.4.0/src/memu/hosts/claude_code/sessions.py +74 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/hosts/codex/BRIDGING_TASK.md +21 -10
- {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/hosts/codex/INSTALL.md +69 -20
- memu_cli-0.4.0/src/memu/hosts/codex/UNINSTALL.md +101 -0
- memu_cli-0.4.0/src/memu/hosts/codex/cli.py +74 -0
- memu_cli-0.4.0/src/memu/hosts/codex/sessions.py +80 -0
- memu_cli-0.4.0/src/memu/hosts/cursor/BRIDGING_TASK.md +112 -0
- memu_cli-0.4.0/src/memu/hosts/cursor/INSTALL.md +159 -0
- memu_cli-0.4.0/src/memu/hosts/cursor/UNINSTALL.md +105 -0
- memu_cli-0.4.0/src/memu/hosts/cursor/__init__.py +11 -0
- memu_cli-0.4.0/src/memu/hosts/cursor/cli.py +49 -0
- memu_cli-0.4.0/src/memu/hosts/cursor/sessions.py +74 -0
- memu_cli-0.4.0/src/memu/hosts/generic/BRIDGING_TASK.md +144 -0
- memu_cli-0.4.0/src/memu/hosts/generic/INSTALL.md +184 -0
- memu_cli-0.4.0/src/memu/hosts/generic/UNINSTALL.md +108 -0
- memu_cli-0.4.0/src/memu/hosts/generic/__init__.py +12 -0
- memu_cli-0.4.0/src/memu/hosts/generic/cli.py +86 -0
- memu_cli-0.4.0/src/memu/hosts/generic/detect.py +207 -0
- memu_cli-0.4.0/src/memu/hosts/generic/sessions.py +141 -0
- memu_cli-0.4.0/src/memu/hosts/hermes/BRIDGING_TASK.md +115 -0
- memu_cli-0.4.0/src/memu/hosts/hermes/INSTALL.md +174 -0
- memu_cli-0.4.0/src/memu/hosts/hermes/UNINSTALL.md +114 -0
- memu_cli-0.4.0/src/memu/hosts/hermes/__init__.py +12 -0
- memu_cli-0.4.0/src/memu/hosts/hermes/cli.py +56 -0
- memu_cli-0.4.0/src/memu/hosts/hermes/sessions.py +129 -0
- memu_cli-0.4.0/src/memu/hosts/host_cli.py +317 -0
- memu_cli-0.4.0/src/memu/hosts/instruction.py +320 -0
- memu_cli-0.4.0/src/memu/hosts/openclaw/BRIDGING_TASK.md +139 -0
- memu_cli-0.4.0/src/memu/hosts/openclaw/INSTALL.md +179 -0
- memu_cli-0.4.0/src/memu/hosts/openclaw/UNINSTALL.md +112 -0
- memu_cli-0.4.0/src/memu/hosts/openclaw/__init__.py +11 -0
- memu_cli-0.4.0/src/memu/hosts/openclaw/cli.py +54 -0
- memu_cli-0.4.0/src/memu/hosts/openclaw/sessions.py +93 -0
- memu_cli-0.4.0/src/memu/hosts/workbuddy/BRIDGING_TASK.md +115 -0
- memu_cli-0.4.0/src/memu/hosts/workbuddy/INSTALL.md +162 -0
- memu_cli-0.4.0/src/memu/hosts/workbuddy/UNINSTALL.md +96 -0
- memu_cli-0.4.0/src/memu/hosts/workbuddy/__init__.py +11 -0
- memu_cli-0.4.0/src/memu/hosts/workbuddy/cli.py +48 -0
- memu_cli-0.4.0/src/memu/hosts/workbuddy/sessions.py +86 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/tests/test_agentic.py +8 -3
- memu_cli-0.4.0/tests/test_bridging_promotion.py +125 -0
- memu_cli-0.4.0/tests/test_cli_stdio.py +47 -0
- memu_cli-0.4.0/tests/test_doctor_proxy_hint.py +169 -0
- memu_cli-0.4.0/tests/test_embedding_proxy.py +200 -0
- memu_cli-0.4.0/tests/test_env_passthrough.py +72 -0
- memu_cli-0.4.0/tests/test_host_generic.py +145 -0
- memu_cli-0.4.0/tests/test_host_instruction.py +294 -0
- memu_cli-0.4.0/tests/test_host_sessions.py +402 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/uv.lock +1 -1
- memu_cli-0.2.0/src/memu/hosts/codex/cli.py +0 -167
- memu_cli-0.2.0/src/memu/hosts/codex/sessions.py +0 -52
- memu_cli-0.2.0/src/memu/hosts/instruction.py +0 -148
- memu_cli-0.2.0/tests/test_host_instruction.py +0 -91
- {memu_cli-0.2.0 → memu_cli-0.4.0}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/.github/ISSUE_TEMPLATE/hackathon_task.yml +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/.github/ISSUE_TEMPLATE/improvement_suggestion.yml +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/.github/workflows/build.yml +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/.github/workflows/pr-title.yml +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/.gitignore +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/.pre-commit-config.yaml +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/.python-version +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/AGENTS.md +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/CONTRIBUTING.md +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/Cargo.lock +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/Cargo.toml +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/LICENSE.txt +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/MANIFEST.in +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/Makefile +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/assets/banner.png +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/assets/benchmark.png +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/assets/memUbot.png +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/assets/memorize.png +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/assets/partners/Clawdchat.png +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/assets/partners/LazyLLM.png +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/assets/partners/buddie.png +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/assets/partners/bytebase.png +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/assets/partners/jazz.png +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/assets/partners/openagents.png +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/assets/partners/xroute.png +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/assets/qrcode.png +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/assets/retrieve.png +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/assets/star.gif +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/assets/structure-v2.png +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/assets/structure.png +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/assets/usecase/ai_companion-0000.jpg +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/assets/usecase/ai_creation-0000.jpg +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/assets/usecase/ai_edu-0000.jpg +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/assets/usecase/ai_ip-0000.png +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/assets/usecase/ai_robot-0000.jpg +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/assets/usecase/ai_role_play-0000.jpg +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/assets/usecase/ai_therapy-0000.jpg +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/docs/adr/0001-workflow-pipeline-architecture.md +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/docs/adr/0002-pluggable-storage-and-vector-strategy.md +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/docs/adr/0003-user-scope-in-data-model.md +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/docs/adr/0004-workspace-memorize-and-memory-file-system.md +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/docs/adr/0005-dedicated-embedding-package.md +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/docs/adr/0006-from-memory-item-category-to-tracked-workspace-memorization.md +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/docs/adr/0007-three-independent-memory-lines-wiki-graph.md +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/docs/adr/0008-two-integration-surfaces-hooks-and-api.md +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/docs/sqlite.md +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/scripts/db.py +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/setup.cfg +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/src/lib.rs +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/__init__.py +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/__main__.py +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/_core.pyi +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/app/__init__.py +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/app/client_pool.py +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/app/service.py +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/app/settings.py +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/database/__init__.py +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/database/factory.py +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/database/inmemory/__init__.py +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/database/inmemory/models.py +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/database/inmemory/repo.py +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/database/inmemory/repositories/__init__.py +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/database/inmemory/repositories/filter.py +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/database/inmemory/repositories/recall_file_repo.py +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/database/inmemory/repositories/recall_file_resource_repo.py +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/database/inmemory/repositories/recall_file_segment_repo.py +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/database/inmemory/repositories/resource_repo.py +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/database/inmemory/state.py +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/database/inmemory/vector.py +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/database/interfaces.py +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/database/models.py +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/database/postgres/__init__.py +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/database/postgres/migration.py +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/database/postgres/migrations/__init__.py +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/database/postgres/migrations/env.py +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/database/postgres/migrations/script.py.mako +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/database/postgres/migrations/versions/20260703_0001_initial_schema.py +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/database/postgres/models.py +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/database/postgres/postgres.py +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/database/postgres/repositories/__init__.py +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/database/postgres/repositories/base.py +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/database/postgres/repositories/recall_file_repo.py +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/database/postgres/repositories/recall_file_resource_repo.py +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/database/postgres/repositories/recall_file_segment_repo.py +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/database/postgres/repositories/resource_repo.py +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/database/postgres/schema.py +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/database/postgres/session.py +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/database/repositories/__init__.py +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/database/repositories/recall_file.py +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/database/repositories/recall_file_resource.py +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/database/repositories/recall_file_segment.py +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/database/repositories/resource.py +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/database/sqlite/__init__.py +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/database/sqlite/models.py +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/database/sqlite/repositories/__init__.py +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/database/sqlite/repositories/base.py +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/database/sqlite/repositories/recall_file_repo.py +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/database/sqlite/repositories/recall_file_resource_repo.py +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/database/sqlite/repositories/recall_file_segment_repo.py +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/database/sqlite/repositories/resource_repo.py +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/database/sqlite/schema.py +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/database/sqlite/session.py +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/database/sqlite/sqlite.py +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/database/state.py +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/embedding/__init__.py +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/embedding/backends/__init__.py +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/embedding/backends/base.py +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/embedding/backends/doubao.py +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/embedding/backends/jina.py +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/embedding/backends/openai.py +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/embedding/backends/openrouter.py +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/embedding/backends/voyage.py +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/embedding/base.py +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/embedding/defaults.py +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/embedding/gateway.py +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/hosts/__init__.py +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/hosts/bridging/__init__.py +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/hosts/bridging/instructions.py +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/hosts/bridging/recall_files.py +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/hosts/bridging/resources.py +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/hosts/codex/__init__.py +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/hosts/retrieval.py +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/src/memu/vector.py +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/tests/__init__.py +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/tests/rust_entry_test.py +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/tests/test_cli.py +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/tests/test_embedding.py +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/tests/test_postgres_migration_config.py +0 -0
- {memu_cli-0.2.0 → memu_cli-0.4.0}/tests/test_vector.py +0 -0
|
@@ -1,10 +1,9 @@
|
|
|
1
|
-
# Publishes the engine
|
|
1
|
+
# Publishes the engine to PyPI as `memu-cli` — the one and only distribution.
|
|
2
2
|
#
|
|
3
|
-
# `memu-cli`
|
|
4
|
-
#
|
|
5
|
-
#
|
|
6
|
-
#
|
|
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 (
|
|
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:
|
|
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
|
-
|
|
66
|
-
grep -
|
|
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:
|
|
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
|
-
|
|
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.
|
|
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:
|
|
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
|
-

|
|
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
|
|
37
|
+
**Across Sessions. Across Agents. Across Devices.**
|
|
38
38
|
|
|
39
39
|
[](https://badge.fury.io/py/memu-cli)
|
|
40
40
|
[](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
|
|
136
|
+
## Host adapters: memory for desktop coding agents
|
|
127
137
|
|
|
128
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
-

|
|
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
|
|
9
|
+
**Across Sessions. Across Agents. Across Devices.**
|
|
10
10
|
|
|
11
11
|
[](https://badge.fury.io/py/memu-cli)
|
|
12
12
|
[](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
|
|
108
|
+
## Host adapters: memory for desktop coding agents
|
|
99
109
|
|
|
100
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
|
memu_cli-0.4.0/SKILL.md
ADDED
|
@@ -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-
|
|
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
|
|