claude-memory-layer 1.0.27 → 1.0.29
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.env.example +7 -0
- package/AGENTS.md +11 -0
- package/README.md +374 -49
- package/benchmarks/replay/anonymized-real-sessions.json +48 -0
- package/dist/cli/index.js +10097 -6003
- package/dist/cli/index.js.map +4 -4
- package/dist/core/index.js +9745 -5587
- package/dist/core/index.js.map +4 -4
- package/dist/hooks/post-tool-use.js +6545 -5270
- package/dist/hooks/post-tool-use.js.map +4 -4
- package/dist/hooks/semantic-daemon.js +6646 -5354
- package/dist/hooks/semantic-daemon.js.map +4 -4
- package/dist/hooks/session-end.js +6618 -5347
- package/dist/hooks/session-end.js.map +4 -4
- package/dist/hooks/session-start.js +6619 -5354
- package/dist/hooks/session-start.js.map +4 -4
- package/dist/hooks/stop.js +6614 -5325
- package/dist/hooks/stop.js.map +4 -4
- package/dist/hooks/user-prompt-submit.js +6702 -5356
- package/dist/hooks/user-prompt-submit.js.map +4 -4
- package/dist/index.js +13537 -0
- package/dist/index.js.map +7 -0
- package/dist/mcp/index.js +20770 -0
- package/dist/mcp/index.js.map +7 -0
- package/dist/server/api/index.js +6632 -5319
- package/dist/server/api/index.js.map +4 -4
- package/dist/server/index.js +6667 -5340
- package/dist/server/index.js.map +4 -4
- package/dist/services/memory-service.js +6568 -5350
- package/dist/services/memory-service.js.map +4 -4
- package/dist/ui/assets/js/bootstrap.js +244 -0
- package/dist/ui/assets/js/chat.js +373 -0
- package/dist/ui/assets/js/disclosure.js +232 -0
- package/dist/ui/assets/js/modals.js +298 -0
- package/dist/ui/assets/js/overview.js +655 -0
- package/dist/ui/assets/js/state.js +72 -0
- package/dist/ui/assets/js/views.js +468 -0
- package/dist/ui/index.html +43 -1
- package/dist/ui/index.ts +3 -0
- package/dist/ui/style.css +222 -0
- package/docs/ARCHITECTURE_COMPARISON_AND_RECOMMENDATIONS.md +627 -0
- package/docs/HERMES_MEMORY_INGESTION_ANALYSIS.md +440 -0
- package/docs/MEMORY_USEFULNESS_AUDIT.md +371 -0
- package/docs/MEMORY_USEFULNESS_AUDIT_RAW.json +80 -0
- package/docs/MEMSEARCH_PROJECT_STRUCTURE_ANALYSIS.md +333 -0
- package/docs/PRODUCT_VALIDATION_MATRIX.md +82 -0
- package/docs/PROJECT_STRUCTURE_ANALYSIS.md +421 -0
- package/docs/REFACTORING_MILESTONES_AND_ISSUES.md +501 -0
- package/docs/REFACTORING_PLAN_THIN_CORE.md +414 -0
- package/docs/REFERENCE_PROJECT_ANALYSES.md +25 -0
- package/docs/SUPERLOCALMEMORY_PROJECT_STRUCTURE_ANALYSIS.md +452 -0
- package/docs/TARGET_ARCHITECTURE_AND_FOLDER_STRUCTURE.md +446 -0
- package/docs/architecture/comparison-index.md +47 -0
- package/docs/reports/codex-real-data-validation-20260505T040447Z.md +46 -0
- package/package.json +12 -5
- package/scripts/build.ts +25 -8
- package/scripts/generate-session-qrels.ts +126 -0
- package/scripts/postinstall-embedding-backend.cjs +142 -0
- package/scripts/replay-retrieval-benchmark.ts +69 -0
- package/specs/thin-core-refactor/context.md +275 -0
- package/specs/thin-core-refactor/plan.md +536 -0
- package/specs/thin-core-refactor/spec.md +465 -0
- package/src/adapters/claude/capture/index.ts +3 -0
- package/src/adapters/claude/context/index.ts +3 -0
- package/src/adapters/claude/hooks/index.ts +21 -0
- package/src/adapters/claude/hooks/post-tool-use.ts +239 -0
- package/src/adapters/claude/hooks/prompt-injection-policy.ts +104 -0
- package/src/adapters/claude/hooks/semantic-daemon-client.ts +209 -0
- package/src/adapters/claude/hooks/semantic-daemon.ts +283 -0
- package/src/adapters/claude/hooks/session-end.ts +59 -0
- package/src/adapters/claude/hooks/session-start.ts +73 -0
- package/src/adapters/claude/hooks/stop.ts +128 -0
- package/src/adapters/claude/hooks/user-prompt-submit.ts +361 -0
- package/src/adapters/claude/index.ts +4 -0
- package/src/adapters/claude/transcript/index.ts +4 -0
- package/src/adapters/claude/transcript/transcript-reader.ts +57 -0
- package/src/adapters/claude/transcript/turn-reconstructor.ts +65 -0
- package/src/apps/cli/claude-settings-hooks.ts +138 -0
- package/src/apps/cli/codex-import-runner.ts +125 -0
- package/src/apps/cli/codex-validation-output.ts +95 -0
- package/src/apps/cli/hermes-import-runner.ts +130 -0
- package/src/apps/cli/hermes-validation-output.ts +91 -0
- package/src/apps/cli/index.ts +1731 -0
- package/src/apps/cli/mcp-install.ts +106 -0
- package/src/apps/cli/retrieval-disclosure-output.ts +196 -0
- package/src/apps/dashboard/assets/js/bootstrap.js +244 -0
- package/src/apps/dashboard/assets/js/chat.js +373 -0
- package/src/apps/dashboard/assets/js/disclosure.js +232 -0
- package/src/apps/dashboard/assets/js/modals.js +298 -0
- package/src/apps/dashboard/assets/js/overview.js +655 -0
- package/src/apps/dashboard/assets/js/state.js +72 -0
- package/src/apps/dashboard/assets/js/views.js +468 -0
- package/src/{ui → apps/dashboard}/index.html +43 -1
- package/src/apps/dashboard/index.ts +3 -0
- package/src/{ui → apps/dashboard}/style.css +222 -0
- package/src/apps/index.ts +5 -0
- package/src/apps/server/api/chat.ts +244 -0
- package/src/apps/server/api/citations.ts +105 -0
- package/src/apps/server/api/events.ts +137 -0
- package/src/apps/server/api/health.ts +53 -0
- package/src/apps/server/api/index.ts +26 -0
- package/src/apps/server/api/projects.ts +74 -0
- package/src/apps/server/api/search.ts +184 -0
- package/src/apps/server/api/sessions.ts +115 -0
- package/src/apps/server/api/stats.ts +723 -0
- package/src/apps/server/api/turns.ts +143 -0
- package/src/apps/server/api/utils.ts +65 -0
- package/src/apps/server/index.ts +111 -0
- package/src/cli/index.ts +2 -1311
- package/src/cli/retrieval-disclosure-output.ts +2 -0
- package/src/compat/index.ts +5 -0
- package/src/core/derive/fact-deriver.ts +170 -0
- package/src/core/derive/index.ts +2 -0
- package/src/core/derive/summary-deriver.ts +76 -0
- package/src/core/embedder.ts +4 -152
- package/src/core/engine/embedding-maintenance-service.ts +187 -0
- package/src/core/engine/endless-memory-services.ts +4 -0
- package/src/core/engine/index.ts +19 -0
- package/src/core/engine/memory-engine-services.ts +170 -0
- package/src/core/engine/memory-ingest-service.ts +317 -0
- package/src/core/engine/memory-query-service.ts +173 -0
- package/src/core/engine/memory-runtime-service.ts +162 -0
- package/src/core/engine/memory-service-composition.ts +231 -0
- package/src/core/engine/retrieval-analytics-service.ts +181 -0
- package/src/core/engine/retrieval-disclosure-service.ts +420 -0
- package/src/core/engine/retrieval-orchestrator.ts +377 -0
- package/src/core/engine/retrieval-services.ts +176 -0
- package/src/core/engine/shared-memory-services.ts +4 -0
- package/src/core/entity-repo.ts +1 -3
- package/src/core/event-store.ts +3 -3
- package/src/core/evidence-aligner.ts +2 -2
- package/src/core/external-market-context.ts +582 -0
- package/src/core/graduation.ts +2 -3
- package/src/core/index.ts +21 -0
- package/src/core/matcher.ts +2 -4
- package/src/core/model/memory-fact.ts +30 -0
- package/src/core/model/memory-rule.ts +14 -0
- package/src/core/model/memory-summary.ts +21 -0
- package/src/core/model/raw-event.ts +28 -0
- package/src/core/model/retrieval-result.ts +35 -0
- package/src/core/privacy/filter.ts +21 -10
- package/src/core/product-validation-matrix.ts +314 -0
- package/src/core/progressive-retriever.ts +1 -2
- package/src/core/registry/project-path.ts +54 -0
- package/src/core/registry/session-registry.ts +69 -0
- package/src/core/replay-evaluator.ts +625 -0
- package/src/core/retrieval-benchmark.ts +117 -0
- package/src/core/retrieval-quality.ts +109 -0
- package/src/core/retriever.ts +53 -15
- package/src/core/session-qrels.ts +360 -0
- package/src/core/shared-event-store.ts +1 -1
- package/src/core/sqlite-event-store.ts +35 -11
- package/src/core/task/blocker-resolver.ts +2 -2
- package/src/core/task/task-resolver.ts +0 -1
- package/src/core/vector-outbox.ts +1 -10
- package/src/core/vector-worker.ts +1 -1
- package/src/extensions/endless-memory/endless-memory-services.ts +350 -0
- package/src/extensions/endless-memory/index.ts +1 -0
- package/src/extensions/index.ts +5 -0
- package/src/extensions/mcp/handlers.ts +960 -0
- package/src/extensions/mcp/index.ts +48 -0
- package/src/extensions/mcp/tools.ts +252 -0
- package/src/extensions/shared-memory/index.ts +1 -0
- package/src/extensions/shared-memory/shared-memory-services.ts +211 -0
- package/src/extensions/vector/embedder.ts +197 -0
- package/src/extensions/vector/index.ts +1 -0
- package/src/hooks/post-tool-use.ts +3 -236
- package/src/hooks/semantic-daemon-client.ts +1 -208
- package/src/hooks/semantic-daemon.ts +6 -271
- package/src/hooks/session-end.ts +4 -79
- package/src/hooks/session-start.ts +4 -73
- package/src/hooks/stop.ts +3 -173
- package/src/hooks/user-prompt-submit.ts +3 -338
- package/src/index.ts +13 -0
- package/src/mcp/handlers.ts +2 -212
- package/src/mcp/index.ts +3 -46
- package/src/mcp/tools.ts +2 -78
- package/src/server/api/chat.ts +2 -244
- package/src/server/api/citations.ts +2 -105
- package/src/server/api/events.ts +2 -137
- package/src/server/api/health.ts +2 -53
- package/src/server/api/index.ts +2 -26
- package/src/server/api/projects.ts +2 -74
- package/src/server/api/search.ts +2 -102
- package/src/server/api/sessions.ts +2 -115
- package/src/server/api/stats.ts +2 -724
- package/src/server/api/turns.ts +2 -143
- package/src/server/api/utils.ts +2 -46
- package/src/server/index.ts +2 -100
- package/src/services/bootstrap-organizer.ts +46 -26
- package/src/services/codex-session-history-importer.ts +521 -29
- package/src/services/hermes-session-history-importer.ts +733 -0
- package/src/services/memory-service-config.ts +36 -0
- package/src/services/memory-service-registry.ts +150 -0
- package/src/services/memory-service.ts +211 -1325
- package/src/services/session-history-importer.ts +58 -14
- package/tests/README.md +23 -0
- package/tests/adapters/claude/claude-semantic-daemon-adapter.test.ts +54 -0
- package/tests/adapters/claude/claude-transcript-reconstructor.test.ts +98 -0
- package/tests/adapters/claude-hook-prompt-injection-policy.test.ts +99 -0
- package/tests/apps/app-layer-boundary.test.ts +48 -0
- package/tests/apps/claude-settings-hooks.test.ts +107 -0
- package/tests/apps/cli-disclosure-output.test.ts +212 -0
- package/tests/apps/codex-import-runner.test.ts +99 -0
- package/tests/apps/codex-validation-output.test.ts +100 -0
- package/tests/apps/hermes-import-runner.test.ts +99 -0
- package/tests/apps/mcp-install-command.test.ts +59 -0
- package/tests/apps/package-build-entrypoints.test.ts +30 -0
- package/tests/apps/postinstall-embedding-backend.test.ts +167 -0
- package/tests/apps/search-api-disclosure.test.ts +162 -0
- package/tests/apps/stats-api-lightweight.test.ts +67 -0
- package/tests/apps/ui-disclosure-output.test.ts +140 -0
- package/tests/{bootstrap-organizer.test.ts → core/bootstrap-organizer.test.ts} +1 -1
- package/tests/{canonical-key.test.ts → core/canonical-key.test.ts} +1 -1
- package/tests/core/codex-session-history-importer-validation.test.ts +185 -0
- package/tests/{consolidation-worker.test.ts → core/consolidation-worker.test.ts} +2 -2
- package/tests/core/embedding-maintenance-service.test.ts +282 -0
- package/tests/{evidence-aligner.test.ts → core/evidence-aligner.test.ts} +1 -1
- package/tests/core/external-market-context.test.ts +209 -0
- package/tests/core/fact-deriver.test.ts +79 -0
- package/tests/core/hermes-session-history-importer-validation.test.ts +609 -0
- package/tests/{ingest-interceptor.test.ts → core/ingest-interceptor.test.ts} +1 -1
- package/tests/{markdown-mirror.test.ts → core/markdown-mirror.test.ts} +2 -2
- package/tests/{matcher.test.ts → core/matcher.test.ts} +1 -1
- package/tests/{md-mirror.test.ts → core/md-mirror.test.ts} +2 -2
- package/tests/core/memory-engine-services.test.ts +240 -0
- package/tests/core/memory-ingest-service.test.ts +296 -0
- package/tests/core/memory-query-service.test.ts +129 -0
- package/tests/core/memory-runtime-service.test.ts +201 -0
- package/tests/core/memory-service-composition.test.ts +192 -0
- package/tests/core/memory-service-config.test.ts +41 -0
- package/tests/core/memory-service-facade.test.ts +30 -0
- package/tests/core/memory-service-registry.test.ts +206 -0
- package/tests/core/product-validation-matrix.test.ts +61 -0
- package/tests/core/project-registry.test.ts +78 -0
- package/tests/core/replay-evaluator.test.ts +181 -0
- package/tests/core/retrieval-analytics-service.test.ts +210 -0
- package/tests/core/retrieval-benchmark.test.ts +93 -0
- package/tests/core/retrieval-disclosure-service.test.ts +264 -0
- package/tests/core/retrieval-orchestrator.test.ts +403 -0
- package/tests/core/retrieval-quality.test.ts +31 -0
- package/tests/core/retrieval-services.test.ts +185 -0
- package/tests/{retriever-fallback-chain.test.ts → core/retriever-fallback-chain.test.ts} +3 -3
- package/tests/{retriever-strategy-scope.test.ts → core/retriever-strategy-scope.test.ts} +70 -3
- package/tests/{retriever.memu-adoption.test.ts → core/retriever.memu-adoption.test.ts} +3 -3
- package/tests/core/session-history-importer-filter.test.ts +78 -0
- package/tests/core/session-qrels.test.ts +250 -0
- package/tests/{sqlite-event-store-replication.test.ts → core/sqlite-event-store-replication.test.ts} +36 -1
- package/tests/core/summary-deriver.test.ts +66 -0
- package/tests/extensions/embedder-warning-suppression.test.ts +53 -0
- package/tests/extensions/endless-memory-extension-boundary.test.ts +17 -0
- package/tests/extensions/endless-memory-services.test.ts +325 -0
- package/tests/extensions/mcp-context-tools.test.ts +905 -0
- package/tests/extensions/mcp-extension-boundary.test.ts +21 -0
- package/tests/extensions/mcp-package-build.test.ts +22 -0
- package/tests/extensions/mcp-project-aware-tools.test.ts +102 -0
- package/tests/extensions/shared-memory-extension-boundary.test.ts +24 -0
- package/tests/extensions/shared-memory-services.test.ts +309 -0
- package/tests/extensions/vector-extension-boundary.test.ts +21 -0
- package/.claude/settings.local.json +0 -25
- package/.npm-cache/_cacache/content-v2/sha512/04/76/c098f88dfe584a2b80870bff7421b05d17d3d9ee1027f77772332a22d3f93a9a57101a2855107f6ad82077a818bba912b2bc317f2361b5ddb09ad284d9ce +0 -0
- package/.npm-cache/_cacache/content-v2/sha512/60/25/d2ecd39cfc7cab58351162814be77f935c6d6491c10c3745d456da7ddb2117ffd90c10e53fe3c0f1ed16b403307841543634504398b16ee4e6b6dd8e0c45 +0 -0
- package/.npm-cache/_cacache/index-v5/2b/9a/7f8f40206ed8a2e0a84efaa953ccaed1f5d001e14b931083f2e7a0738007 +0 -2
- package/.npm-cache/_cacache/index-v5/2e/d9/fcfa5c6a6abdc2a3644ab84a95936047298c465a2f47ee03db8f7fe1e946 +0 -3
- package/.npm-cache/_cacache/index-v5/a9/42/e519633356d12d3d2f19da66a8301016d496c8f5c3e0554124aaa62dc043 +0 -2
- package/.npm-cache/_logs/2026-02-26T12_04_52_729Z-debug-0.log +0 -256
- package/.npm-cache/_logs/2026-02-26T12_05_36_835Z-debug-0.log +0 -18
- package/.npm-cache/_logs/2026-02-26T12_05_45_982Z-debug-0.log +0 -32
- package/.npm-cache/_logs/2026-02-26T12_05_48_515Z-debug-0.log +0 -260
- package/.npm-cache/_logs/2026-02-26T12_05_53_567Z-debug-0.log +0 -69
- package/.npm-cache/_update-notifier-last-checked +0 -0
- package/bootstrap-kb/decisions/decisions.md +0 -244
- package/bootstrap-kb/glossary/glossary.md +0 -46
- package/bootstrap-kb/modules/.claude-plugin.md +0 -22
- package/bootstrap-kb/modules/agents.md.md +0 -15
- package/bootstrap-kb/modules/claude.md.md +0 -15
- package/bootstrap-kb/modules/context.md.md +0 -15
- package/bootstrap-kb/modules/docs.md +0 -18
- package/bootstrap-kb/modules/handoff.md.md +0 -15
- package/bootstrap-kb/modules/package-lock.json.md +0 -15
- package/bootstrap-kb/modules/package.json.md +0 -15
- package/bootstrap-kb/modules/plan.md.md +0 -15
- package/bootstrap-kb/modules/readme.md.md +0 -15
- package/bootstrap-kb/modules/scripts.md +0 -26
- package/bootstrap-kb/modules/spec.md.md +0 -15
- package/bootstrap-kb/modules/specs.md +0 -20
- package/bootstrap-kb/modules/src.md +0 -51
- package/bootstrap-kb/modules/tests.md +0 -42
- package/bootstrap-kb/modules/tsconfig.json.md +0 -15
- package/bootstrap-kb/modules/vitest.config.ts.md +0 -15
- package/bootstrap-kb/overview/overview.md +0 -40
- package/bootstrap-kb/sources/manifest.json +0 -950
- package/bootstrap-kb/sources/manifest.md +0 -227
- package/bootstrap-kb/timeline/timeline.md +0 -57
- package/claude-memory-layer-1.0.14.tgz +0 -0
- package/d.sh +0 -3
- package/deploy.sh +0 -3
- package/dist/ui/app.js +0 -2101
- package/memory/.claude-plugin/commands/2026-02-25.md +0 -263
- package/memory/_index.md +0 -419
- package/memory/agent_response/uncategorized/2026-02-26.md +0 -176
- package/memory/agent_response/uncategorized/2026-03-03.md +0 -14
- package/memory/agent_response/uncategorized/2026-03-04.md +0 -1421
- package/memory/agent_response/uncategorized/2026-03-05.md +0 -157
- package/memory/default/uncategorized/2026-02-25.md +0 -4839
- package/memory/session_summary/uncategorized/2026-02-26.md +0 -13
- package/memory/session_summary/uncategorized/2026-03-03.md +0 -5
- package/memory/session_summary/uncategorized/2026-03-04.md +0 -50
- package/memory/specs/20260207-dashboard-upgrade/2026-02-25.md +0 -142
- package/memory/specs/citations-system/2026-02-25.md +0 -1121
- package/memory/specs/endless-mode/2026-02-25.md +0 -1392
- package/memory/specs/entity-edge-model/2026-02-25.md +0 -1263
- package/memory/specs/evidence-aligner-v2/2026-02-25.md +0 -1028
- package/memory/specs/mcp-desktop-integration/2026-02-25.md +0 -1334
- package/memory/specs/post-tool-use-hook/2026-02-25.md +0 -1164
- package/memory/specs/private-tags/2026-02-25.md +0 -1057
- package/memory/specs/progressive-disclosure/2026-02-25.md +0 -1436
- package/memory/specs/task-entity-system/2026-02-25.md +0 -924
- package/memory/specs/vector-outbox-v2/2026-02-25.md +0 -1510
- package/memory/specs/web-viewer-ui/2026-02-25.md +0 -1709
- package/memory/tool_observation/uncategorized/2026-02-26.md +0 -209
- package/memory/tool_observation/uncategorized/2026-03-03.md +0 -21
- package/memory/tool_observation/uncategorized/2026-03-04.md +0 -1033
- package/memory/tool_observation/uncategorized/2026-03-05.md +0 -33
- package/memory/user_prompt/uncategorized/2026-02-26.md +0 -25
- package/memory/user_prompt/uncategorized/2026-03-04.md +0 -634
- package/memory/user_prompt/uncategorized/2026-03-05.md +0 -6
- package/specs/optional-duckdb/context.md +0 -77
- package/specs/optional-duckdb/plan.md +0 -142
- package/specs/optional-duckdb/spec.md +0 -35
- package/src/ui/app.js +0 -2101
package/.env.example
ADDED
package/AGENTS.md
CHANGED
|
@@ -3,6 +3,17 @@
|
|
|
3
3
|
이 저장소는 **Claude Code용 메모리 플러그인 + CLI + 로컬 대시보드 서버**입니다.
|
|
4
4
|
Codex(또는 다른 코딩 에이전트)가 작업할 때 아래 규칙을 우선으로 따르세요.
|
|
5
5
|
|
|
6
|
+
## Project Memory Bootstrap
|
|
7
|
+
|
|
8
|
+
작업 시작/재개 전에 Claude Memory Layer MCP 도구가 사용 가능하면 먼저 프로젝트 맥락을 가져오세요.
|
|
9
|
+
|
|
10
|
+
- 트리거: `continue`, `next`, `이어서`, `다음 단계`, 버그 수정, PR/merge/검증, 이전 결정/작업 맥락이 중요한 요청
|
|
11
|
+
- 우선 호출: `mem-context-pack` / Hermes 도구명 `mcp_claude_memory_layer_mem_context_pack`
|
|
12
|
+
- 권장 인자: `query=<현재 요청 요약>`, `projectPath=<현재 저장소 루트>`, `topK=5`, `recentLimit=30`, `sessionLimit=5`
|
|
13
|
+
- MCP 도구가 없으면 막히지 말고 기존 AGENTS.md 규칙대로 진행하세요.
|
|
14
|
+
- 결과는 배경 맥락으로만 사용하고, secret/token/credential 또는 transcript DB path 같은 민감한 metadata는 출력하지 마세요.
|
|
15
|
+
- live agent session id를 CML `sessionId`로 넘기지 마세요. source-session 필터가 명시된 경우에만 사용하세요.
|
|
16
|
+
|
|
6
17
|
## Quick Commands
|
|
7
18
|
|
|
8
19
|
```bash
|
package/README.md
CHANGED
|
@@ -16,37 +16,80 @@ Claude Memory Layer는 Claude Code에서 사용자와 AI 간의 모든 대화를
|
|
|
16
16
|
|
|
17
17
|
### 0) 최초 1회(머신 전체) 설치
|
|
18
18
|
|
|
19
|
+
권장 설치 방식은 npm에 배포된 패키지를 **전역 설치**하는 것입니다. `install`은 Claude Code hook 파일 경로를 `~/.claude/settings.json`에 저장하므로, 일회성 `npx claude-memory-layer install`보다 전역 설치 또는 고정된 로컬 checkout을 쓰는 것이 안전합니다.
|
|
20
|
+
|
|
19
21
|
```bash
|
|
20
|
-
|
|
22
|
+
npm install -g claude-memory-layer@latest
|
|
23
|
+
claude-memory-layer install
|
|
24
|
+
claude-memory-layer status
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
로컬 개발 checkout에서 설치할 때:
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
git clone https://github.com/buzzni/claude-memory-layer.git
|
|
31
|
+
cd claude-memory-layer
|
|
21
32
|
npm install
|
|
22
33
|
npm run build
|
|
23
34
|
npx claude-memory-layer install
|
|
35
|
+
npx claude-memory-layer status
|
|
24
36
|
```
|
|
25
37
|
|
|
26
38
|
- `install`은 **한 번만** 하면 됩니다(Claude Code hooks 등록).
|
|
39
|
+
- Linux x64 + CUDA 11 환경에서는 설치 중 optional embedding backend를 CPU-only ONNX Runtime으로 자동 복구합니다.
|
|
27
40
|
- 이후 프로젝트별로 메모리 저장소가 자동 분리됩니다.
|
|
41
|
+
- `install` / `uninstall`은 `~/.claude/settings.json`을 수정합니다.
|
|
42
|
+
|
|
43
|
+
#### CUDA 11 / `onnxruntime-node` 설치 에러
|
|
44
|
+
|
|
45
|
+
Linux x64 서버에 CUDA 11이 설치되어 있으면 `@huggingface/transformers`의 하위 의존성인 `onnxruntime-node`가 `nvcc --version`을 감지한 뒤 CUDA 11용 GPU 바이너리를 자동 설치하려고 합니다. 현재 해당 install script는 CUDA 11 자동 설치를 지원하지 않아 다음 오류로 `npm install`이 실패할 수 있습니다.
|
|
46
|
+
|
|
47
|
+
```text
|
|
48
|
+
Error: CUDA 11 binaries are not supported by this script yet.
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
Claude Memory Layer는 설치 시 Linux x64 + CUDA 11 환경을 감지하면 `@huggingface/transformers`를 optional dependency로 처리한 뒤 CPU-only ONNX Runtime 설정으로 자동 복구합니다. 그래서 일반적으로 사용자가 환경변수를 직접 지정할 필요는 없습니다.
|
|
52
|
+
|
|
53
|
+
만약 구버전 패키지를 설치 중이거나 postinstall 복구가 실패하면 아래처럼 수동으로 CUDA 바이너리 다운로드만 건너뛰어 재설치할 수 있습니다.
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
# 실패한 전역 설치가 일부 남아 있으면 먼저 제거
|
|
57
|
+
npm uninstall -g claude-memory-layer || true
|
|
58
|
+
|
|
59
|
+
# 수동 fallback: CPU-only ONNX Runtime으로 재설치
|
|
60
|
+
ONNXRUNTIME_NODE_INSTALL_CUDA=skip npm install -g claude-memory-layer@latest
|
|
61
|
+
claude-memory-layer --version
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
로컬 checkout 개발 환경에서 구버전 의존성 설치가 같은 오류를 내면 아래처럼 수동 fallback을 사용할 수 있습니다.
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
ONNXRUNTIME_NODE_INSTALL_CUDA=skip npm install
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
`npm warn deprecated ...` 경고는 하위 의존성 경고이며 설치 실패 원인이 아닙니다.
|
|
28
71
|
|
|
29
72
|
### 1) 새 프로젝트에서 초기 메모리 생성
|
|
30
73
|
|
|
31
74
|
```bash
|
|
32
75
|
cd /path/to/your-project
|
|
33
|
-
|
|
76
|
+
claude-memory-layer import
|
|
34
77
|
```
|
|
35
78
|
|
|
36
|
-
- 현재 프로젝트의 기존 Claude 세션(`~/.claude/projects/...`)을 읽어와 메모리로 적재합니다.
|
|
79
|
+
- 현재 프로젝트의 기존 Claude Code 세션(`~/.claude/projects/...`)을 읽어와 메모리로 적재합니다.
|
|
37
80
|
- 벡터 임베딩까지 한 번에 처리됩니다.
|
|
38
81
|
|
|
39
82
|
### 2) 사용 중 확인
|
|
40
83
|
|
|
41
84
|
```bash
|
|
42
85
|
# 프로젝트 메모리 검색
|
|
43
|
-
|
|
86
|
+
claude-memory-layer search "인증 구조"
|
|
44
87
|
|
|
45
88
|
# 통계 확인
|
|
46
|
-
|
|
89
|
+
claude-memory-layer stats
|
|
47
90
|
|
|
48
91
|
# 대시보드 실행
|
|
49
|
-
|
|
92
|
+
claude-memory-layer dashboard --no-open
|
|
50
93
|
```
|
|
51
94
|
|
|
52
95
|
### 3) 다른 프로젝트에도 동일하게 적용?
|
|
@@ -55,8 +98,8 @@ npx claude-memory-layer dashboard
|
|
|
55
98
|
|
|
56
99
|
```bash
|
|
57
100
|
cd /path/to/another-project
|
|
58
|
-
|
|
59
|
-
|
|
101
|
+
claude-memory-layer import
|
|
102
|
+
claude-memory-layer search "배포 이슈"
|
|
60
103
|
```
|
|
61
104
|
|
|
62
105
|
프로젝트마다 내부적으로 별도 저장소(`~/.claude-code/memory/projects/<hash>`)를 사용하므로,
|
|
@@ -66,6 +109,7 @@ npx claude-memory-layer search "배포 이슈"
|
|
|
66
109
|
|
|
67
110
|
- 특정 프로젝트를 명시하고 싶으면 대부분 명령에 `--project <path>` 사용 가능
|
|
68
111
|
- 대규모 리임포트가 필요하면 `import --force` 사용
|
|
112
|
+
- 최근 일부만 가져오고 싶으면 `--session-limit <n>` 또는 `--limit <n>` 사용
|
|
69
113
|
- 백그라운드 worker가 못 처리한 임베딩은 `process`로 수동 처리
|
|
70
114
|
- 상태 점검:
|
|
71
115
|
- `GET /health` (서버 헬스)
|
|
@@ -79,6 +123,144 @@ npx claude-memory-layer search "배포 이슈"
|
|
|
79
123
|
|
|
80
124
|
---
|
|
81
125
|
|
|
126
|
+
## 다른 서버 초기 세팅 & 이전 대화 ingest
|
|
127
|
+
|
|
128
|
+
새 서버에서 Claude Memory Layer를 설치하고 기존 Claude Code/Codex/Hermes 대화 기록을 처음 적재할 때는 아래 체크리스트를 따르세요.
|
|
129
|
+
|
|
130
|
+
### 1) 새 서버 준비
|
|
131
|
+
|
|
132
|
+
```bash
|
|
133
|
+
node --version # Node.js >= 18 필수
|
|
134
|
+
npm --version
|
|
135
|
+
npm install -g claude-memory-layer@latest
|
|
136
|
+
claude-memory-layer install
|
|
137
|
+
claude-memory-layer status
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
> `claude-memory-layer install`은 Claude Code hooks를 등록합니다. 이미 Claude Code가 실행 중이면 재시작해야 hook이 반영됩니다.
|
|
141
|
+
|
|
142
|
+
### 2) 이전 서버의 원본 대화 기록 가져오기
|
|
143
|
+
|
|
144
|
+
가장 안전한 방식은 **원본 대화 기록을 새 서버로 복사한 뒤 새 서버에서 다시 import**하는 것입니다. 필요한 것만 선택해서 복사하세요. 이 디렉토리/DB에는 민감한 대화와 경로가 포함될 수 있으므로 공개 저장소에 커밋하거나 공유하지 말고, SSH/사설망 등 신뢰할 수 있는 경로로만 복사하세요.
|
|
145
|
+
|
|
146
|
+
```bash
|
|
147
|
+
# Claude Code 원본 세션(JSONL)
|
|
148
|
+
mkdir -p ~/.claude/projects
|
|
149
|
+
rsync -a OLD_HOST:~/.claude/projects/ ~/.claude/projects/
|
|
150
|
+
|
|
151
|
+
# Codex CLI 원본 세션(JSONL) - Codex 기록도 가져올 때만
|
|
152
|
+
mkdir -p ~/.codex/sessions
|
|
153
|
+
rsync -a OLD_HOST:~/.codex/sessions/ ~/.codex/sessions/
|
|
154
|
+
|
|
155
|
+
# Hermes Agent SessionDB - Hermes 기록도 가져올 때만
|
|
156
|
+
# 권장: OLD_HOST에서 Hermes/gateway/agent 프로세스를 먼저 멈춘 뒤 SQLite sidecar까지 함께 복사
|
|
157
|
+
mkdir -p ~/.hermes
|
|
158
|
+
rsync -a OLD_HOST:'~/.hermes/state.db*' ~/.hermes/
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
Hermes를 멈출 수 없는 운영 서버라면, `state.db` 파일을 직접 복사하는 대신 OLD_HOST에서 SQLite `.backup`으로 일관된 스냅샷을 만든 뒤 가져오세요.
|
|
162
|
+
|
|
163
|
+
```bash
|
|
164
|
+
ssh OLD_HOST 'sqlite3 ~/.hermes/state.db ".backup /tmp/hermes-state.db.backup"'
|
|
165
|
+
mkdir -p ~/.hermes
|
|
166
|
+
rsync -a OLD_HOST:/tmp/hermes-state.db.backup ~/.hermes/state.db
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
이미 처리된 CML 저장소를 그대로 옮기고 싶다면, 이전/새 서버의 관련 agent, dashboard, semantic daemon/worker 등 모든 CML writer를 멈춘 뒤 아래처럼 복사할 수도 있습니다. 단, 재현성과 모델/버전 migration을 위해서는 위의 원본 기록 re-ingest 방식을 우선 권장합니다.
|
|
170
|
+
|
|
171
|
+
```bash
|
|
172
|
+
mkdir -p ~/.claude-code
|
|
173
|
+
rsync -a OLD_HOST:~/.claude-code/memory/ ~/.claude-code/memory/
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
### 3) 프로젝트별로 read-only 검증 후 import
|
|
177
|
+
|
|
178
|
+
프로젝트 메모리는 프로젝트 경로 기준으로 분리됩니다. 새 서버의 실제 repo 경로를 `PROJECT`에 넣고, 필요한 importer만 실행하세요.
|
|
179
|
+
|
|
180
|
+
중요: Codex/Hermes/Claude Code 원본 세션의 project filter는 **대화가 생성될 당시의 절대 경로**를 기준으로 매칭합니다. 새 서버에서도 repo 절대 경로가 이전 서버와 같으면 아래 project import를 그대로 쓰면 됩니다.
|
|
181
|
+
|
|
182
|
+
```bash
|
|
183
|
+
export PROJECT=/path/to/your-project
|
|
184
|
+
cd "$PROJECT"
|
|
185
|
+
|
|
186
|
+
# Claude Code 기록: import 가능한 세션 확인 후 프로젝트 메모리로 적재
|
|
187
|
+
claude-memory-layer list --project "$PROJECT"
|
|
188
|
+
claude-memory-layer import --project "$PROJECT" --verbose
|
|
189
|
+
|
|
190
|
+
# Codex 기록: 먼저 읽기 전용 리포트로 확인한 뒤 명시적으로 import
|
|
191
|
+
claude-memory-layer codex validate --project "$PROJECT" --format markdown
|
|
192
|
+
claude-memory-layer codex import --project "$PROJECT" --verbose
|
|
193
|
+
|
|
194
|
+
# Hermes 기록: 먼저 읽기 전용 리포트로 확인한 뒤 명시적으로 import
|
|
195
|
+
claude-memory-layer hermes validate --project "$PROJECT" --format markdown
|
|
196
|
+
claude-memory-layer hermes import --project "$PROJECT" --verbose
|
|
197
|
+
|
|
198
|
+
# pending embedding이 남아 있으면 수동 처리
|
|
199
|
+
claude-memory-layer process --project "$PROJECT"
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
이전 서버와 새 서버의 repo 절대 경로가 다르면, `OLD_PROJECT`로 원본 세션을 찾고 특정 session 파일/id를 새 프로젝트 저장소(`NEW_PROJECT`)로 가져오세요.
|
|
203
|
+
|
|
204
|
+
```bash
|
|
205
|
+
export OLD_PROJECT=/old/server/path/to/your-project
|
|
206
|
+
export NEW_PROJECT=/path/to/your-project
|
|
207
|
+
cd "$NEW_PROJECT"
|
|
208
|
+
|
|
209
|
+
# Claude Code: list 출력의 JSONL session file path를 확인해서 사용
|
|
210
|
+
claude-memory-layer list --project "$OLD_PROJECT"
|
|
211
|
+
claude-memory-layer import --project "$NEW_PROJECT" --session /path/to/claude-session.jsonl --verbose
|
|
212
|
+
|
|
213
|
+
# Codex: validate 결과에서 session JSONL 파일을 확인한 뒤 import
|
|
214
|
+
claude-memory-layer codex validate --project "$OLD_PROJECT" --format markdown
|
|
215
|
+
claude-memory-layer codex import --project "$NEW_PROJECT" --session /path/to/codex-session.jsonl --verbose
|
|
216
|
+
|
|
217
|
+
# Hermes: validate 결과에서 Hermes session id를 확인한 뒤 import
|
|
218
|
+
claude-memory-layer hermes validate --project "$OLD_PROJECT" --format markdown
|
|
219
|
+
claude-memory-layer hermes import --project "$NEW_PROJECT" --session 20260505_010203_abcd1234 --verbose
|
|
220
|
+
|
|
221
|
+
claude-memory-layer process --project "$NEW_PROJECT"
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
주의:
|
|
225
|
+
|
|
226
|
+
- `claude-memory-layer import --all`은 모든 Claude Code 세션을 전역 저장소로 가져옵니다. 프로젝트별 컨텍스트 품질이 중요하면 각 repo에서 `--project <path>` 방식으로 반복하는 것을 권장합니다.
|
|
227
|
+
- `codex import --all`, `hermes import --all`도 의도적으로 전역 메모리를 만들 때만 사용하세요.
|
|
228
|
+
- import/validate/list 결과에는 대화 내용 일부나 로컬 경로가 포함될 수 있습니다. 외부 공유 전에는 민감정보와 경로를 제거하고, Codex validate 리포트는 필요하면 `--anonymize-projects`를 함께 사용하세요.
|
|
229
|
+
- import는 콘텐츠 해시 기반으로 중복을 건너뛰므로 여러 번 실행해도 같은 내용이 중복 저장되지 않습니다. 단, `--force`는 기존 import 이벤트를 지우고 재적재하므로 신중히 사용하세요.
|
|
230
|
+
|
|
231
|
+
### 4) 검증
|
|
232
|
+
|
|
233
|
+
```bash
|
|
234
|
+
export VERIFY_PROJECT=/path/to/your-project # 위에서 쓴 PROJECT 또는 NEW_PROJECT
|
|
235
|
+
claude-memory-layer stats --project "$VERIFY_PROJECT"
|
|
236
|
+
claude-memory-layer search "최근에 하던 작업" --project "$VERIFY_PROJECT" --top-k 5
|
|
237
|
+
claude-memory-layer dashboard --no-open --port 37777
|
|
238
|
+
# 다른 터미널에서: curl http://localhost:37777/api/health
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
### 5) MCP/다른 agent에 연결
|
|
242
|
+
|
|
243
|
+
Claude Desktop은 CLI로 자동 등록할 수 있습니다. GUI 앱에서 shell `PATH`가 다를 수 있으면 stdio binary의 절대 경로를 command로 넣는 방식이 더 견고합니다.
|
|
244
|
+
|
|
245
|
+
```bash
|
|
246
|
+
claude-memory-layer mcp install --command "$(command -v claude-memory-layer-mcp)"
|
|
247
|
+
# Claude Desktop 재시작
|
|
248
|
+
```
|
|
249
|
+
|
|
250
|
+
Codex/Hermes 등 MCP client에도 전역 설치된 stdio binary를 등록하면 됩니다.
|
|
251
|
+
|
|
252
|
+
```bash
|
|
253
|
+
# Codex 예시
|
|
254
|
+
codex mcp add claude-memory-layer -- claude-memory-layer-mcp
|
|
255
|
+
|
|
256
|
+
# Hermes 예시
|
|
257
|
+
hermes mcp add claude-memory-layer --command claude-memory-layer-mcp
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
MCP client가 환경에 따라 PATH를 못 찾으면 `command -v claude-memory-layer-mcp`로 절대 경로를 확인해서 command에 넣으세요.
|
|
261
|
+
|
|
262
|
+
---
|
|
263
|
+
|
|
82
264
|
## Features
|
|
83
265
|
|
|
84
266
|
### Core Features
|
|
@@ -93,10 +275,10 @@ npx claude-memory-layer search "배포 이슈"
|
|
|
93
275
|
### Advanced Features
|
|
94
276
|
|
|
95
277
|
- **Citations System**: 메모리 출처 추적 (`[mem:abc123]` 형식)으로 검색 결과의 원본 확인 가능
|
|
96
|
-
- **Endless Mode**: 세션 경계 없는 연속적 메모리 스트림, Biomimetic Memory Architecture 기반
|
|
278
|
+
- **Endless Mode**: 세션 경계 없는 연속적 메모리 스트림, Biomimetic Memory Architecture 기반 *(experimental extension)*
|
|
97
279
|
- **Entity-Edge Model**: entries/entities/edges 3-layer 모델로 데이터 관계 명시적 모델링
|
|
98
280
|
- **Evidence Aligner V2**: Quote 기반 3단계 정렬 (exact → normalized → fuzzy)
|
|
99
|
-
- **MCP Desktop Integration**: Claude Desktop용 MCP 서버로 CLI와 동일한 메모리 공유
|
|
281
|
+
- **MCP Desktop Integration**: Claude Desktop용 MCP 서버로 CLI와 동일한 메모리 공유 *(stdio server bin: `claude-memory-layer-mcp`)*
|
|
100
282
|
- **PostToolUse Hook**: 도구 실행 결과 (Read, Write, Bash 등) 캡처 및 저장
|
|
101
283
|
- **Private Tags**: `<private>` 태그로 민감 정보를 명시적으로 제외
|
|
102
284
|
- **Progressive Disclosure**: 3-Layer 검색 (인덱스 → 타임라인 → 상세)으로 토큰 효율화
|
|
@@ -104,9 +286,21 @@ npx claude-memory-layer search "배포 이슈"
|
|
|
104
286
|
- **Append-only Markdown Mirror**: 저장 이벤트를 `memory/<namespace>/<category...>/YYYY-MM-DD.md`에도 동기 append (기본값: `namespace=default`, `category=uncategorized`, 경로 세그먼트 sanitize)
|
|
105
287
|
- `memory/_index.md` 인덱스를 자동 갱신
|
|
106
288
|
- **Task Entity System**: Task를 Entity로 승격하여 세션 간 상태 추적
|
|
107
|
-
- **Vector Outbox V2**: Transactional Outbox 패턴으로
|
|
289
|
+
- **Vector Outbox V2**: Transactional Outbox 패턴으로 SQLite-LanceDB 정합성 보장
|
|
108
290
|
- **Web Viewer UI**: localhost:37777 대시보드로 실시간 메모리 모니터링
|
|
109
291
|
|
|
292
|
+
### 현재 feature status
|
|
293
|
+
|
|
294
|
+
| 영역 | 상태 | 비고 |
|
|
295
|
+
|------|------|------|
|
|
296
|
+
| Claude Code hooks / CLI / Dashboard | Stable | `install`, `search`, `import`, `stats`, `dashboard` 중심 |
|
|
297
|
+
| SQLite event store / project registry | Stable | canonical source of truth |
|
|
298
|
+
| LanceDB vector index / Embedder | Stable accelerator | `src/extensions/vector/embedder.ts`; VectorStore/VectorWorker는 아직 core compatibility path 유지 |
|
|
299
|
+
| Progressive disclosure search/API/CLI/dashboard | Implemented | `search --disclosure`, `expand`, `source` mental model |
|
|
300
|
+
| Shared memory / Endless mode | Experimental extension | 구현은 `src/extensions/shared-memory`, `src/extensions/endless-memory` 아래에 있고 기존 path는 shim 유지 |
|
|
301
|
+
| MCP Desktop integration | Implemented | 구현은 `src/extensions/mcp`; package bin은 `claude-memory-layer-mcp`; `claude-memory-layer mcp install`로 Claude Desktop config 자동 등록 |
|
|
302
|
+
| Mongo sync / Entity graph / Task entity | Experimental | 고급/운영 옵션으로 취급 |
|
|
303
|
+
|
|
110
304
|
## 설치 방법
|
|
111
305
|
|
|
112
306
|
### 1. 의존성 설치
|
|
@@ -124,13 +318,14 @@ npm run build
|
|
|
124
318
|
|
|
125
319
|
### 3. Claude Code에 플러그인 등록
|
|
126
320
|
|
|
127
|
-
|
|
321
|
+
Claude Code hook 설정은 CLI가 등록합니다:
|
|
128
322
|
|
|
129
323
|
```bash
|
|
130
|
-
|
|
131
|
-
cp -r dist/.claude-plugin ~/.claude/plugins/claude-memory-layer/
|
|
324
|
+
npx claude-memory-layer install
|
|
132
325
|
```
|
|
133
326
|
|
|
327
|
+
> 주의: `install` / `uninstall`은 `~/.claude/settings.json`을 수정합니다. 자동 테스트나 임의 실행 대신, 실제 사용자가 설치/해제를 원할 때만 실행하세요.
|
|
328
|
+
|
|
134
329
|
## 사용 방법
|
|
135
330
|
|
|
136
331
|
### 자동 동작 (Hooks)
|
|
@@ -334,7 +529,7 @@ SECRET_TOKEN=abc123
|
|
|
334
529
|
🔍 Search Results:
|
|
335
530
|
|
|
336
531
|
#1 [mem:a7Bc3x] (score: 0.94)
|
|
337
|
-
"
|
|
532
|
+
"SQLite/WAL을 사용하여 이벤트 소싱 패턴을..."
|
|
338
533
|
📅 2026-01-30 | 🔗 Session abc123
|
|
339
534
|
```
|
|
340
535
|
|
|
@@ -349,10 +544,10 @@ claude-memory-layer show mem:a7Bc3x
|
|
|
349
544
|
|
|
350
545
|
```bash
|
|
351
546
|
# Endless Mode 활성화
|
|
352
|
-
claude-memory-layer
|
|
547
|
+
claude-memory-layer endless enable
|
|
353
548
|
|
|
354
549
|
# 상태 확인
|
|
355
|
-
claude-memory-layer status
|
|
550
|
+
claude-memory-layer endless status
|
|
356
551
|
|
|
357
552
|
# 출력 예시:
|
|
358
553
|
# Mode: Endless
|
|
@@ -371,31 +566,75 @@ claude-memory-layer status
|
|
|
371
566
|
|
|
372
567
|
## MCP Desktop Integration
|
|
373
568
|
|
|
374
|
-
|
|
569
|
+
> 현재 상태: MCP server implementation은 `src/extensions/mcp/`로 이동되어 있고,
|
|
570
|
+
> `src/mcp/*`는 compatibility shim입니다. package bin으로
|
|
571
|
+
> `claude-memory-layer-mcp`가 제공됩니다.
|
|
572
|
+
|
|
573
|
+
Claude Desktop 설정은 CLI로 자동 등록할 수 있습니다:
|
|
375
574
|
|
|
376
575
|
```bash
|
|
377
|
-
# MCP 서버 설치
|
|
378
576
|
claude-memory-layer mcp install
|
|
577
|
+
# Config: ~/Library/Application Support/Claude/claude_desktop_config.json (macOS)
|
|
578
|
+
```
|
|
579
|
+
|
|
580
|
+
이 명령은 Claude Desktop config의 기존 값을 보존하면서 다음 MCP server entry를 추가/갱신합니다:
|
|
379
581
|
|
|
380
|
-
|
|
582
|
+
```json
|
|
381
583
|
{
|
|
382
584
|
"mcpServers": {
|
|
383
585
|
"claude-memory-layer": {
|
|
384
|
-
"command": "
|
|
385
|
-
"args": [
|
|
586
|
+
"command": "claude-memory-layer-mcp",
|
|
587
|
+
"args": []
|
|
386
588
|
}
|
|
387
589
|
}
|
|
388
590
|
}
|
|
389
591
|
```
|
|
390
592
|
|
|
593
|
+
옵션:
|
|
594
|
+
|
|
595
|
+
```bash
|
|
596
|
+
claude-memory-layer mcp install --dry-run
|
|
597
|
+
claude-memory-layer mcp install --config-path /path/to/claude_desktop_config.json
|
|
598
|
+
claude-memory-layer mcp install --server-name claude-memory-layer --command claude-memory-layer-mcp
|
|
599
|
+
```
|
|
600
|
+
|
|
601
|
+
설정 후 Claude Desktop을 재시작하면 MCP 서버가 로드됩니다. Codex/Hermes처럼 MCP client가 있는 다른 agent에는 로컬 checkout의 built server를 직접 등록할 수 있습니다:
|
|
602
|
+
|
|
603
|
+
```bash
|
|
604
|
+
# Codex
|
|
605
|
+
codex mcp add claude-memory-layer -- node /path/to/claude-memory-layer/dist/mcp/index.js
|
|
606
|
+
|
|
607
|
+
# Hermes
|
|
608
|
+
hermes mcp add claude-memory-layer --command node --args /path/to/claude-memory-layer/dist/mcp/index.js
|
|
609
|
+
```
|
|
610
|
+
|
|
611
|
+
로컬 checkout에서 서버만 바로 테스트하려면 `npm run build` 후 다음처럼 직접 실행할 수도 있습니다:
|
|
612
|
+
|
|
613
|
+
```bash
|
|
614
|
+
node dist/mcp/index.js
|
|
615
|
+
```
|
|
616
|
+
|
|
391
617
|
### 제공되는 MCP 도구
|
|
392
618
|
|
|
393
619
|
| 도구 | 설명 |
|
|
394
620
|
|------|------|
|
|
395
|
-
| `mem-search` | 메모리 검색 |
|
|
396
|
-
| `mem-timeline` |
|
|
397
|
-
| `mem-details` | 상세 정보 조회 |
|
|
398
|
-
| `mem-stats` | 통계 조회 |
|
|
621
|
+
| `mem-search` | 메모리 검색 (`projectPath`를 주면 프로젝트별 저장소 검색) |
|
|
622
|
+
| `mem-timeline` | 특정 memory IDs 주변 chronological context 조회 (`projectPath` 지원) |
|
|
623
|
+
| `mem-details` | 상세 정보 조회 (`projectPath` 지원) |
|
|
624
|
+
| `mem-stats` | 통계 조회 (`projectPath` 지원) |
|
|
625
|
+
| `mem-context-pack` | 작업 시작용 compact context pack. query 관련 memory + 최근 project timeline + follow-up refs를 한 번에 반환 |
|
|
626
|
+
| `mem-project-timeline` | 최근 project memory를 session/source/event-count/safe-preview 기준으로 요약 |
|
|
627
|
+
| `mem-source-ref` | `mem:<citation>` 또는 `event:<id>`를 privacy-safe source reference와 redacted preview로 해석 |
|
|
628
|
+
|
|
629
|
+
예시 workflow:
|
|
630
|
+
|
|
631
|
+
```text
|
|
632
|
+
1. 새 작업 시작: mem-context-pack(projectPath, query)
|
|
633
|
+
2. 최근 흐름 확인: mem-project-timeline(projectPath)
|
|
634
|
+
3. 근거가 더 필요할 때: mem-source-ref(projectPath, ids=["mem:abc123"])
|
|
635
|
+
```
|
|
636
|
+
|
|
637
|
+
이 workflow는 Hermes/Codex/Claude Code가 같은 project-scoped memory backend를 공유할 때 특히 유용합니다. `mem-source-ref`는 raw transcript를 그대로 덤프하지 않고 allowlisted metadata와 privacy-filtered preview만 반환합니다.
|
|
399
638
|
|
|
400
639
|
## Web Viewer
|
|
401
640
|
|
|
@@ -451,6 +690,50 @@ Skipped duplicates: 0
|
|
|
451
690
|
Embeddings processed: 342
|
|
452
691
|
```
|
|
453
692
|
|
|
693
|
+
### Codex 세션 임포트
|
|
694
|
+
|
|
695
|
+
Codex CLI 기록(`~/.codex/sessions`)은 기본적으로 read-only validate/replay로 먼저 확인하고, 명시적 import 명령으로만 메모리에 저장합니다:
|
|
696
|
+
|
|
697
|
+
```bash
|
|
698
|
+
# 읽기 전용 검증/리포트
|
|
699
|
+
npx claude-memory-layer codex validate --project /path/to/project --format markdown
|
|
700
|
+
|
|
701
|
+
# 현재 프로젝트 Codex 세션을 프로젝트별 메모리로 import
|
|
702
|
+
cd /path/to/project
|
|
703
|
+
npx claude-memory-layer codex import
|
|
704
|
+
|
|
705
|
+
# 특정 세션만 import
|
|
706
|
+
npx claude-memory-layer codex import --project /path/to/project --session /path/to/session.jsonl
|
|
707
|
+
|
|
708
|
+
# 모든 Codex 세션 import (전역 저장소 사용; 필요할 때만)
|
|
709
|
+
npx claude-memory-layer codex import --all --verbose
|
|
710
|
+
```
|
|
711
|
+
|
|
712
|
+
옵션: `--sessions-dir`, `--limit`, `--force`, `--no-process-embeddings`.
|
|
713
|
+
|
|
714
|
+
### Hermes 세션 임포트
|
|
715
|
+
|
|
716
|
+
Hermes Agent 기록(`~/.hermes/state.db`)도 원본 DB를 read-only validate/replay로 먼저 확인하고, 명시적 import 명령으로만 프로젝트별 메모리에 저장합니다. 기본 전략은 live sync가 아니라 **SessionDB → CML explicit derived import**입니다:
|
|
717
|
+
|
|
718
|
+
```bash
|
|
719
|
+
# 읽기 전용 검증/리포트
|
|
720
|
+
npx claude-memory-layer hermes validate --project /path/to/project --format markdown
|
|
721
|
+
|
|
722
|
+
# 현재 프로젝트 Hermes 세션을 프로젝트별 메모리로 import
|
|
723
|
+
cd /path/to/project
|
|
724
|
+
npx claude-memory-layer hermes import
|
|
725
|
+
|
|
726
|
+
# 특정 Hermes session id만 import
|
|
727
|
+
npx claude-memory-layer hermes import --project /path/to/project --session 20260505_010203_abcd1234
|
|
728
|
+
|
|
729
|
+
# 모든 Hermes 세션 import (전역 저장소 사용; 필요할 때만)
|
|
730
|
+
npx claude-memory-layer hermes import --all --verbose
|
|
731
|
+
```
|
|
732
|
+
|
|
733
|
+
옵션: `--state-db`, `--limit`, `--force`, `--no-process-embeddings`.
|
|
734
|
+
|
|
735
|
+
Hermes import는 user/assistant turn만 저장하고 tool/system 메시지는 건너뜁니다. 검증 리포트에는 aggregate count만 포함되며 transcript 본문은 포함하지 않습니다.
|
|
736
|
+
|
|
454
737
|
### 중복 처리
|
|
455
738
|
|
|
456
739
|
임포트는 콘텐츠 해시 기반으로 중복을 자동 감지합니다. 여러 번 실행해도 같은 내용이 중복 저장되지 않습니다.
|
|
@@ -462,7 +745,7 @@ Embeddings processed: 342
|
|
|
462
745
|
```
|
|
463
746
|
사용자 프롬프트 입력
|
|
464
747
|
↓
|
|
465
|
-
EventStore에 저장 (
|
|
748
|
+
EventStore에 저장 (SQLite/WAL, append-only)
|
|
466
749
|
↓
|
|
467
750
|
Outbox에 임베딩 요청 등록
|
|
468
751
|
↓
|
|
@@ -530,7 +813,7 @@ Embeddings processed: 342
|
|
|
530
813
|
▼ ▼
|
|
531
814
|
┌───────────────┐ ┌───────────────┐
|
|
532
815
|
│ EventStore │ ──── Outbox ────▶ │ VectorStore │
|
|
533
|
-
│
|
|
816
|
+
│ (SQLite/WAL) │ (V2 Pattern) │ (LanceDB) │
|
|
534
817
|
└───────────────┘ └───────────────┘
|
|
535
818
|
```
|
|
536
819
|
|
|
@@ -583,12 +866,12 @@ Layer 1: Search Index (~50-100 tokens/result)
|
|
|
583
866
|
|
|
584
867
|
## AXIOMMIND 7 원칙
|
|
585
868
|
|
|
586
|
-
1. **Single Source of Truth**:
|
|
869
|
+
1. **Single Source of Truth**: SQLite/WAL EventStore가 유일한 진실의 원천
|
|
587
870
|
2. **Append-Only**: 이벤트는 수정/삭제 없이 추가만
|
|
588
871
|
3. **Idempotency**: dedupe_key로 중복 이벤트 감지
|
|
589
872
|
4. **Evidence Alignment**: 주장이 실제 소스에 기반했는지 검증
|
|
590
873
|
5. **Entity-Based Tasks**: canonical_key로 일관된 엔티티 식별
|
|
591
|
-
6. **Vector Store Consistency**:
|
|
874
|
+
6. **Vector Store Consistency**: SQLite outbox → LanceDB 단방향 흐름
|
|
592
875
|
7. **Standard JSON**: 모든 데이터는 이식 가능한 JSON 형식
|
|
593
876
|
|
|
594
877
|
## 저장 위치
|
|
@@ -629,15 +912,15 @@ npm run dev
|
|
|
629
912
|
|
|
630
913
|
## 기술 스택
|
|
631
914
|
|
|
632
|
-
- **
|
|
633
|
-
- **LanceDB**: 벡터 저장소 (
|
|
634
|
-
- **@
|
|
915
|
+
- **SQLite / WAL**: 이벤트 저장소 (canonical append/read model)
|
|
916
|
+
- **LanceDB**: 벡터 저장소 (derived acceleration index)
|
|
917
|
+
- **@huggingface/transformers**: 로컬 임베딩 생성 (lazy import; Embedder는 `src/extensions/vector/`)
|
|
635
918
|
- **Zod**: 런타임 타입 검증
|
|
636
919
|
- **Commander**: CLI 인터페이스
|
|
637
920
|
- **TypeScript**: 타입 안전한 코드
|
|
638
|
-
- **
|
|
921
|
+
- **Node.js + Hono**: HTTP 서버 / Web Viewer
|
|
639
922
|
- **Hono**: 경량 라우터
|
|
640
|
-
- **MCP SDK**: Claude Desktop 통합
|
|
923
|
+
- **MCP SDK**: Claude Desktop 통합 (`claude-memory-layer-mcp` stdio server)
|
|
641
924
|
|
|
642
925
|
## Specification Documents
|
|
643
926
|
|
|
@@ -660,30 +943,72 @@ npm run dev
|
|
|
660
943
|
## Roadmap
|
|
661
944
|
|
|
662
945
|
### Phase 1: Core (완료)
|
|
663
|
-
- [x] Event Store (
|
|
946
|
+
- [x] Event Store (SQLite/WAL)
|
|
664
947
|
- [x] Vector Store (LanceDB)
|
|
665
948
|
- [x] Memory Graduation (L0→L4)
|
|
666
949
|
- [x] Evidence Alignment
|
|
667
950
|
- [x] History Import
|
|
668
951
|
|
|
669
952
|
### Phase 2: Advanced Features (진행 중)
|
|
670
|
-
- [
|
|
671
|
-
- [
|
|
672
|
-
- [ ] Entity-Edge Model
|
|
673
|
-
- [
|
|
674
|
-
- [
|
|
953
|
+
- [x] Citations System
|
|
954
|
+
- [x] Endless Mode service boundary *(experimental extension)*
|
|
955
|
+
- [ ] Entity-Edge Model productization
|
|
956
|
+
- [x] Evidence Aligner V2
|
|
957
|
+
- [x] Private Tags
|
|
675
958
|
|
|
676
959
|
### Phase 3: Integration
|
|
677
|
-
- [
|
|
678
|
-
- [
|
|
679
|
-
- [
|
|
680
|
-
- [
|
|
681
|
-
|
|
682
|
-
### Phase 4: Optimization
|
|
683
|
-
- [
|
|
684
|
-
- [
|
|
960
|
+
- [x] MCP Desktop Integration *(stdio server bin exists; auto install command pending)*
|
|
961
|
+
- [x] Web Viewer UI
|
|
962
|
+
- [x] PostToolUse Hook
|
|
963
|
+
- [x] Progressive Disclosure
|
|
964
|
+
|
|
965
|
+
### Phase 4: Optimization / Extension Isolation
|
|
966
|
+
- [x] Vector Outbox V2
|
|
967
|
+
- [x] Embedder extension boundary
|
|
968
|
+
- [ ] VectorStore / VectorWorker extension boundary
|
|
969
|
+
- [ ] Task Entity System productization
|
|
685
970
|
- [ ] Performance Tuning
|
|
686
971
|
|
|
687
972
|
## License
|
|
688
973
|
|
|
689
974
|
MIT
|
|
975
|
+
|
|
976
|
+
## External Market Context (DART/FRED/Finnhub)
|
|
977
|
+
|
|
978
|
+
`claude-memory-layer market-context` fetches read-only external company and market data from environment-configured providers and returns a structured `MarketContextSnapshot` plus a Markdown analysis report.
|
|
979
|
+
|
|
980
|
+
Example:
|
|
981
|
+
|
|
982
|
+
```bash
|
|
983
|
+
export DART_API_KEY=... # env-only; never commit real keys
|
|
984
|
+
export FRED_API_KEY=...
|
|
985
|
+
export FINNHUB_API_KEY=...
|
|
986
|
+
claude-memory-layer market-context \
|
|
987
|
+
--company 삼성전자 \
|
|
988
|
+
--dart-corp-code 00126380 \
|
|
989
|
+
--symbol 005930.KS \
|
|
990
|
+
--providers dart,fred,finnhub \
|
|
991
|
+
--fred-series FEDFUNDS,CPIAUCSL \
|
|
992
|
+
--json
|
|
993
|
+
```
|
|
994
|
+
|
|
995
|
+
Security and behavior:
|
|
996
|
+
|
|
997
|
+
- API keys are read only from `DART_API_KEY`, `FRED_API_KEY`, and `FINNHUB_API_KEY`.
|
|
998
|
+
- `.env*` files are ignored; `.env.example` is placeholder-only.
|
|
999
|
+
- Missing provider keys produce skipped-provider statuses rather than hard failures.
|
|
1000
|
+
- Provider requests use bounded timeouts; large FRED series lists are capped to the first 10 unique series.
|
|
1001
|
+
- Empty Finnhub profile responses are treated as skipped-provider/no-data results, not profile evidence.
|
|
1002
|
+
- Provider errors and rendered reports redact credential-bearing query params such as `crtfc_key`, `api_key`, and `token`.
|
|
1003
|
+
- The MCP `external-market-context` tool is read-only and does not initialize or mutate memory storage.
|
|
1004
|
+
- `--no-snapshot` / MCP `includeSnapshot: false` disables both `analysis.marketSnapshot` and the DART company snapshot.
|
|
1005
|
+
|
|
1006
|
+
`MarketContextSnapshot` includes:
|
|
1007
|
+
|
|
1008
|
+
- `schemaVersion: market-context-snapshot.v1`
|
|
1009
|
+
- `subject`: company, DART corpCode, ticker symbol
|
|
1010
|
+
- `coverage`: DART/FRED/Finnhub provider status and counts
|
|
1011
|
+
- `bullCases`, `bearCases`, `risks`, `catalysts`: deterministic evidence-backed insights
|
|
1012
|
+
- `watchlist` and `followUpQuestions`
|
|
1013
|
+
|
|
1014
|
+
The Markdown report includes a `### MarketContextSnapshot` section with **Bull case**, **Bear case**, **Risks**, and **Catalysts**. DART analysis uses all fetched filings; only the rendered filing list is truncated. If `dartCorpCode` is omitted, company-name fallback is marked low-confidence, so exact DART corp codes are recommended for customer-facing analysis.
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "anonymized-real-session-replay-v1",
|
|
3
|
+
"description": "Anonymized real-session-style retrieval replay fixture for Precision@k / Recall@k / nDCG@k / no-match checks.",
|
|
4
|
+
"ks": [1, 3, 5],
|
|
5
|
+
"queries": [
|
|
6
|
+
{
|
|
7
|
+
"queryId": "q-cli-fast",
|
|
8
|
+
"query": "fast search should avoid embedding startup",
|
|
9
|
+
"expectation": "match",
|
|
10
|
+
"expectedIds": ["m-cli-fast", "m-runtime-light"],
|
|
11
|
+
"expectedRelevance": { "m-cli-fast": 3, "m-runtime-light": 2 },
|
|
12
|
+
"knownAnswer": "CLI search --strategy fast uses keyword retrieval and should not start embedding model initialization."
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
"queryId": "q-hook-policy",
|
|
16
|
+
"query": "hook should not inject weak keyword rescue",
|
|
17
|
+
"expectation": "match",
|
|
18
|
+
"expectedIds": ["m-hook-policy", "m-hook-threshold"],
|
|
19
|
+
"expectedRelevance": { "m-hook-policy": 3, "m-hook-threshold": 2 },
|
|
20
|
+
"knownAnswer": "Claude hook prompt injection has a separate conservative policy for high-confidence memories."
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"queryId": "q-replay-bench",
|
|
24
|
+
"query": "precision recall replay benchmark output",
|
|
25
|
+
"expectation": "match",
|
|
26
|
+
"expectedIds": ["m-benchmark", "m-metrics"],
|
|
27
|
+
"expectedRelevance": { "m-benchmark": 3, "m-metrics": 2 },
|
|
28
|
+
"knownAnswer": "Replay benchmark reports Precision@k and Recall@k over anonymized session queries."
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
"queryId": "q-no-match-command-artifact",
|
|
32
|
+
"query": "local-command-stdout command-name opus",
|
|
33
|
+
"expectation": "no_match",
|
|
34
|
+
"expectedIds": [],
|
|
35
|
+
"expectedRelevance": {},
|
|
36
|
+
"forbiddenIds": ["m-cli-fast", "m-hook-policy", "m-benchmark"]
|
|
37
|
+
}
|
|
38
|
+
],
|
|
39
|
+
"memories": [
|
|
40
|
+
{ "id": "m-cli-fast", "content": "CLI search --strategy fast uses keyword retrieval and should not start embedding model initialization." },
|
|
41
|
+
{ "id": "m-runtime-light", "content": "Lightweight read paths initialize SQLite event-store only and avoid vector/embedder workers." },
|
|
42
|
+
{ "id": "m-hook-policy", "content": "Claude hook prompt injection has a separate conservative policy for high-confidence memories." },
|
|
43
|
+
{ "id": "m-hook-threshold", "content": "Low-confidence keyword fallback can remain searchable but should not be injected into prompts." },
|
|
44
|
+
{ "id": "m-benchmark", "content": "Replay benchmark reports Precision@k and Recall@k over anonymized session queries." },
|
|
45
|
+
{ "id": "m-metrics", "content": "Metric summaries average per-query precision and recall for k values one three and five." },
|
|
46
|
+
{ "id": "m-noise", "content": "Unrelated dashboard styling note for visual spacing." }
|
|
47
|
+
]
|
|
48
|
+
}
|