@hir4ta/mneme 0.17.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/.claude-plugin/plugin.json +29 -0
  2. package/.mcp.json +18 -0
  3. package/README.ja.md +400 -0
  4. package/README.md +410 -0
  5. package/bin/mneme.js +203 -0
  6. package/dist/lib/db.js +340 -0
  7. package/dist/lib/fuzzy-search.js +214 -0
  8. package/dist/lib/github.js +121 -0
  9. package/dist/lib/similarity.js +193 -0
  10. package/dist/lib/utils.js +62 -0
  11. package/dist/public/apple-touch-icon.png +0 -0
  12. package/dist/public/assets/index-BgqCALAg.css +1 -0
  13. package/dist/public/assets/index-EMvn4VEa.js +330 -0
  14. package/dist/public/assets/react-force-graph-2d-DWoBaKmT.js +46 -0
  15. package/dist/public/favicon-128-max.png +0 -0
  16. package/dist/public/favicon-256-max.png +0 -0
  17. package/dist/public/favicon-32-max.png +0 -0
  18. package/dist/public/favicon-512-max.png +0 -0
  19. package/dist/public/favicon-64-max.png +0 -0
  20. package/dist/public/index.html +15 -0
  21. package/dist/server.js +4791 -0
  22. package/dist/servers/db-server.js +30558 -0
  23. package/dist/servers/search-server.js +30366 -0
  24. package/hooks/default-tags.json +1055 -0
  25. package/hooks/hooks.json +61 -0
  26. package/hooks/post-tool-use.sh +96 -0
  27. package/hooks/pre-compact.sh +187 -0
  28. package/hooks/session-end.sh +567 -0
  29. package/hooks/session-start.sh +380 -0
  30. package/hooks/user-prompt-submit.sh +253 -0
  31. package/package.json +77 -0
  32. package/servers/db-server.ts +993 -0
  33. package/servers/search-server.ts +675 -0
  34. package/skills/AGENTS.override.md +5 -0
  35. package/skills/harvest/skill.md +295 -0
  36. package/skills/init-mneme/skill.md +101 -0
  37. package/skills/plan/skill.md +422 -0
  38. package/skills/report/skill.md +74 -0
  39. package/skills/resume/skill.md +278 -0
  40. package/skills/review/skill.md +419 -0
  41. package/skills/save/skill.md +482 -0
  42. package/skills/search/skill.md +175 -0
  43. package/skills/using-mneme/skill.md +185 -0
@@ -0,0 +1,29 @@
1
+ {
2
+ "name": "mneme",
3
+ "description": "A plugin that provides long-term memory for Claude Code. It automatically saves context lost during auto-compact, offering features for session restoration, recording technical decisions, and learning developer patterns.",
4
+ "version": "0.17.0",
5
+ "author": {
6
+ "name": "hir4ta"
7
+ },
8
+ "homepage": "https://github.com/hir4ta/mneme",
9
+ "repository": "https://github.com/hir4ta/mneme",
10
+ "license": "MIT",
11
+ "keywords": ["memory", "sessions", "decisions", "patterns", "dashboard"],
12
+ "mcpServers": {
13
+ "mneme-search": {
14
+ "command": "node",
15
+ "args": ["${CLAUDE_PLUGIN_ROOT}/dist/servers/search-server.js"],
16
+ "env": {
17
+ "MNEME_DATA_DIR": "${MNEME_DATA_DIR:-}"
18
+ }
19
+ },
20
+ "mneme-db": {
21
+ "command": "node",
22
+ "args": ["${CLAUDE_PLUGIN_ROOT}/dist/servers/db-server.js"],
23
+ "env": {
24
+ "MNEME_DATA_DIR": "${MNEME_DATA_DIR:-}",
25
+ "MNEME_PROJECT_PATH": "${PROJECT_DIR:-}"
26
+ }
27
+ }
28
+ }
29
+ }
package/.mcp.json ADDED
@@ -0,0 +1,18 @@
1
+ {
2
+ "mcpServers": {
3
+ "mneme-search": {
4
+ "command": "node",
5
+ "args": ["./dist/servers/search-server.js"],
6
+ "env": {
7
+ "MNEME_DATA_DIR": "${MNEME_DATA_DIR:-}"
8
+ }
9
+ },
10
+ "mneme-db": {
11
+ "command": "node",
12
+ "args": ["./dist/servers/db-server.js"],
13
+ "env": {
14
+ "MNEME_DATA_DIR": "${MNEME_DATA_DIR:-}"
15
+ }
16
+ }
17
+ }
18
+ }
package/README.ja.md ADDED
@@ -0,0 +1,400 @@
1
+ # mneme
2
+
3
+ > **⚠️ 破壊的変更 (v0.17.0)**: `memoria` から `mneme` に名称変更しました。
4
+ > `@hir4ta/memoria` からアップグレードする場合は再インストールしてください:
5
+ > ```bash
6
+ > claude mcp remove mneme-search mneme-db
7
+ > claude plugin remove @hir4ta/memoria
8
+ > claude plugin add @hir4ta/mneme
9
+ > ```
10
+ > データディレクトリも変更: `.memoria/` → `.mneme/`
11
+ > 手動でリネーム: `mv .memoria .mneme`
12
+
13
+ Claude Codeの長期記憶を実現するプラグイン
14
+
15
+ セッションの自動保存、インテリジェントな記憶検索、Webダッシュボードでの管理を提供します。
16
+
17
+ ## 機能
18
+
19
+ ### コア機能
20
+ - **会話の自動保存**: セッション終了時にjqで自動保存(確実・高速)
21
+ - **自動記憶検索**: プロンプトごとに関連する過去のセッション・判断を自動で注入
22
+ - **PreCompactバックアップ**: Auto-Compact前にinteractionsをバックアップ(コンテキスト95%で発動)
23
+ - **フルデータ抽出**: `/mneme:save` で要約・判断・パターン・ルールを一括保存
24
+ - **記憶参照プランニング**: `/mneme:plan` で過去の知見を活用した設計・計画
25
+ - **セッション再開**: `/mneme:resume` で過去のセッションを再開(チェーン追跡付き)
26
+ - **セッション提案**: セッション開始時に最新3件を提案
27
+ - **ルールベースレビュー**: `dev-rules.json` / `review-guidelines.json` に基づくレビュー
28
+ - **GitHub PRレビュー**: `/mneme:review <PR URL>` でGitHub PRをレビュー
29
+ - **知見の抽出**: `/mneme:harvest` でPRコメントからルール・パターンを抽出
30
+ - **週次レポート**: レビュー結果を集計したMarkdownレポートを自動生成
31
+ - **Webダッシュボード**: セッション・判断・パターン・ルールの閲覧
32
+
33
+ ## 課題と解決(導入メリット)
34
+
35
+ ### Claude Code 開発で起きがちな課題
36
+
37
+ - **コンテキストの消失**: セッション終了やAuto-Compactで会話の文脈が失われる
38
+ - **判断の不透明化**: 「なぜこの設計にしたのか」が後から追えない
39
+ - **同じミスの繰り返し**: 同じエラーを何度も解決(学習されない)
40
+ - **知見の再利用が難しい**: 過去のやり取りや決定を検索・参照しづらい
41
+
42
+ ### mneme でできること
43
+
44
+ - **自動保存 + 再開**で、セッションを跨いだ文脈の継続が可能
45
+ - **自動記憶検索**で、関連する過去の知見が常に会話に反映される
46
+ - **判断・パターン記録**で、理由やエラー解決策を後から追跡
47
+ - **検索とダッシュボード**で、過去の記録を素早く参照
48
+ - **レビュー機能**で、リポジトリ固有の観点に基づいて指摘
49
+
50
+ ### チーム利用のメリット
51
+
52
+ - `.mneme/` のJSONファイルは**Git管理可能**なので、判断や会話の履歴をチームで共有できる
53
+ - オンボーディングやレビュー時に「背景・経緯」を短時間で把握できる
54
+
55
+ ## インストール
56
+
57
+ ### 前提条件
58
+
59
+ - **jq**: フックでJSON処理に使用します
60
+
61
+ ```bash
62
+ # macOS
63
+ brew install jq
64
+
65
+ # Ubuntu/Debian
66
+ sudo apt-get install jq
67
+
68
+ # Windows (Chocolatey)
69
+ choco install jq
70
+
71
+ # Windows (Scoop)
72
+ scoop install jq
73
+
74
+ # Windows (winget)
75
+ winget install jqlang.jq
76
+ ```
77
+
78
+ ### プラグインのインストール
79
+
80
+ Claude Code内で以下を実行
81
+
82
+ ```bash
83
+ /plugin marketplace add hir4ta/mneme-marketplace
84
+ /plugin install mneme@mneme-marketplace
85
+ ```
86
+
87
+ プロジェクトでmnemeを初期化:
88
+
89
+ ```bash
90
+ # Claude Code内で
91
+ /init-mneme
92
+
93
+ # またはターミナルから
94
+ npx @hir4ta/mneme --init
95
+ ```
96
+
97
+ Claude Codeを再起動して完了
98
+
99
+ ## アップデート
100
+
101
+ Claude Code内で以下を実行
102
+
103
+ ```bash
104
+ /plugin marketplace update mneme-marketplace
105
+ ```
106
+
107
+ Claude Codeを再起動
108
+
109
+ ### 自動更新を有効にする(推奨)
110
+
111
+ 1. `/plugin` を実行
112
+ 2. Marketplaces タブを選択
113
+ 3. `mneme-marketplace` を選択
114
+ 4. "Enable auto-update" を有効化
115
+
116
+ これによりClaude Code起動時に自動でアップデートされます
117
+
118
+ ## 使い方
119
+
120
+ ### セッション自動保存
121
+
122
+ **会話ログは自動保存**されます(セッション終了時にjqで抽出)。設定不要。
123
+
124
+ **PreCompact**ではinteractionsを`preCompactBackups`にバックアップします(コンテキスト95%で発動)。要約は自動作成されません。
125
+
126
+ ### 自動記憶検索
127
+
128
+ **プロンプトごとに**、mnemeは自動で:
129
+ 1. メッセージからキーワードを抽出
130
+ 2. sessions/decisions/patternsを検索
131
+ 3. 関連情報をClaudeに注入
132
+
133
+ 手動で検索しなくても、過去の知見が常に活用されます。
134
+
135
+ ### セッション提案
136
+
137
+ セッション開始時に最新3件が表示されます:
138
+
139
+ ```
140
+ **Recent sessions:**
141
+ 1. [abc123] JWT認証の実装 (2026-01-27, main)
142
+ 2. [def456] ダッシュボードUI (2026-01-26, main)
143
+ 3. [ghi789] バグ修正 (2026-01-25, main)
144
+
145
+ Continue from a previous session? Use `/mneme:resume <id>`
146
+ ```
147
+
148
+ ### コマンド
149
+
150
+ | コマンド | 説明 |
151
+ | --------- | ------ |
152
+ | `/init-mneme` | プロジェクトでmnemeを初期化 |
153
+ | `/mneme:save` | 全データ抽出: 要約・判断・パターン・ルール |
154
+ | `/mneme:plan [トピック]` | 記憶参照 + ソクラティック質問 + タスク分割 |
155
+ | `/mneme:resume [id]` | セッションを再開(ID省略で一覧表示) |
156
+ | `/mneme:search "クエリ"` | セッション・判断・パターンを検索 |
157
+ | `/mneme:review [--staged\|--all\|--diff=branch\|--full]` | ルールに基づくレビュー |
158
+ | `/mneme:review <PR URL>` | GitHub PRをレビュー |
159
+ | `/mneme:harvest <PR URL>` | PRレビューコメントから知見を抽出 |
160
+ | `/mneme:report [--from YYYY-MM-DD --to YYYY-MM-DD]` | 週次レビューレポート |
161
+
162
+ ### 推奨ワークフロー
163
+
164
+ ```
165
+ plan → implement → save → review
166
+ ```
167
+
168
+ 1. **plan**: 記憶参照 + ソクラティック質問 + タスク分割
169
+ 2. **implement**: 計画に沿って実装
170
+ 3. **save**: 判断・パターン・ルールを抽出
171
+ 4. **review**: 計画準拠とコード品質をレビュー
172
+
173
+ ### ダッシュボード
174
+
175
+ プロジェクトディレクトリで以下を実行
176
+
177
+ ```bash
178
+ npx @hir4ta/mneme --dashboard
179
+ ```
180
+
181
+ ブラウザで <http://localhost:7777> を開く。
182
+
183
+ ポート変更:
184
+
185
+ ```bash
186
+ npx @hir4ta/mneme --dashboard --port 8080
187
+ ```
188
+
189
+ #### 画面一覧
190
+
191
+ - **Sessions**: セッション一覧・詳細
192
+ - **Decisions**: 技術的な判断の一覧・詳細
193
+ - **Rules**: 開発ルール・レビュー観点の閲覧
194
+ - **Patterns**: 学習済みパターンの閲覧(グッドパターン、アンチパターン、エラー解決策)
195
+ - **Statistics**: アクティビティチャート・セッション統計の表示
196
+ - **Graph**: タグ共有によるセッション関連性の可視化
197
+
198
+ #### 言語切り替え
199
+
200
+ ダッシュボードは日本語と英語に対応しています。ヘッダーの言語切り替えボタン(EN/JA)をクリックして切り替えできます。設定はlocalStorageに保存されます。
201
+
202
+ ### MCPツール
203
+
204
+ mnemeはMCPサーバーを提供し、Claude Codeから直接呼び出せる検索・データベースツールを提供:
205
+
206
+ | サーバー | ツール | 説明 |
207
+ |---------|--------|------|
208
+ | mneme-search | `mneme_search` | 統合検索(FTS5、タグエイリアス解決) |
209
+ | mneme-search | `mneme_get_session` | セッション詳細取得 |
210
+ | mneme-search | `mneme_get_decision` | 決定詳細取得 |
211
+ | mneme-db | `mneme_list_projects` | 全プロジェクト一覧 |
212
+ | mneme-db | `mneme_cross_project_search` | クロスプロジェクト検索 |
213
+
214
+ ### サブエージェント
215
+
216
+ | エージェント | 説明 |
217
+ |-------------|------|
218
+ | `mneme-reviewer` | ルールベースのコードレビュー(独立コンテキスト) |
219
+
220
+ ## 仕組み
221
+
222
+ ```mermaid
223
+ flowchart TB
224
+ subgraph autosave [会話の自動保存]
225
+ A[セッション終了] --> B[SessionEndフック]
226
+ B --> C[jqでトランスクリプトから抽出]
227
+ C --> D[interactions + files + metrics]
228
+ end
229
+
230
+ subgraph autosearch [自動記憶検索]
231
+ E[ユーザープロンプト] --> F[UserPromptSubmitフック]
232
+ F --> G[sessions/decisions/patternsを検索]
233
+ G --> H[関連コンテキストを注入]
234
+ end
235
+
236
+ subgraph backup [PreCompactバックアップ]
237
+ I[コンテキスト95%] --> J[PreCompactフック]
238
+ J --> K[interactionsをpreCompactBackupsに保存]
239
+ end
240
+
241
+ subgraph manual [手動操作]
242
+ L["mneme:save"] --> M[判断 + パターン + ルールを抽出]
243
+ N["mneme:plan"] --> O[記憶参照 + 設計 + タスク分割]
244
+ end
245
+
246
+ subgraph resume [セッション再開]
247
+ P["mneme:resume"] --> Q[一覧から選択]
248
+ Q --> R[過去の文脈を復元 + resumedFrom設定]
249
+ end
250
+
251
+ subgraph review [レビュー]
252
+ S["mneme:review"] --> T[ルールに基づく指摘]
253
+ T --> U[レビュー結果を保存]
254
+ end
255
+
256
+ subgraph dashboard [ダッシュボード]
257
+ V["npx @hir4ta/mneme -d"] --> W[ブラウザで表示]
258
+ W --> X[全データを閲覧]
259
+ end
260
+
261
+ D --> P
262
+ H --> L
263
+ M --> V
264
+ U --> V
265
+ ```
266
+
267
+ ## データ保存
268
+
269
+ mnemeは**ハイブリッドストレージ**方式でプライバシーと共有を両立:
270
+
271
+ | ストレージ | 場所 | 用途 | 共有 |
272
+ |-----------|------|------|------|
273
+ | **JSON** | `.mneme/` | 要約、決定、パターン、ルール | Git管理(チーム共有) |
274
+ | **SQLite** | `.mneme/local.db` | 会話履歴、バックアップ | ローカル専用(gitignored) |
275
+
276
+ **なぜハイブリッド?**
277
+ - **プライバシー**: 会話履歴(interactions)はローカルのみ(gitignored)
278
+ - **軽量化**: JSONファイルが100KB+から約5KBに軽量化(interactions除外)
279
+ - **将来対応**: セマンティック検索用のembeddingsテーブル準備済み
280
+
281
+ ### ディレクトリ構成
282
+
283
+ **プロジェクト内** (`.mneme/`):
284
+ ```text
285
+ .mneme/
286
+ ├── local.db # SQLite(会話履歴)- gitignored
287
+ ├── tags.json # タグマスターファイル(93タグ、表記揺れ防止)
288
+ ├── sessions/ # セッションメタデータ - Git管理
289
+ │ └── YYYY/MM/
290
+ │ └── {id}.json # メタデータのみ(interactionsはlocal.db)
291
+ ├── decisions/ # 技術的な判断(/saveから)- Git管理
292
+ │ └── YYYY/MM/
293
+ │ └── {id}.json
294
+ ├── patterns/ # エラーパターン(/saveから)- Git管理
295
+ │ └── {user}.json
296
+ ├── rules/ # 開発ルール / レビュー観点 - Git管理
297
+ ├── reviews/ # レビュー結果 (YYYY/MM) - Git管理
298
+ └── reports/ # 週次レポート (YYYY-MM) - Git管理
299
+ ```
300
+
301
+ `local.db` は `.mneme/.gitignore` に追加され、会話はプライベートに保たれます。
302
+
303
+ ### セッションJSONスキーマ
304
+
305
+ セッションメタデータはJSONに保存(interactionsはプライバシー保護のためSQLiteに保存):
306
+
307
+ ```json
308
+ {
309
+ "id": "abc12345",
310
+ "sessionId": "claude-code-からの-full-uuid",
311
+ "createdAt": "2026-01-27T10:00:00Z",
312
+ "endedAt": "2026-01-27T12:00:00Z",
313
+ "title": "JWT認証機能の実装",
314
+ "tags": ["auth", "jwt"],
315
+ "context": {
316
+ "branch": "feature/auth",
317
+ "projectDir": "/path/to/project",
318
+ "user": { "name": "tanaka", "email": "tanaka@example.com" }
319
+ },
320
+ "metrics": {
321
+ "userMessages": 5,
322
+ "assistantResponses": 5,
323
+ "thinkingBlocks": 5,
324
+ "toolUsage": [{"name": "Edit", "count": 3}, {"name": "Write", "count": 2}]
325
+ },
326
+ "files": [
327
+ { "path": "src/auth/jwt.ts", "action": "create" }
328
+ ],
329
+ "resumedFrom": "def45678",
330
+ "status": "complete",
331
+
332
+ "summary": {
333
+ "title": "JWT認証機能の実装",
334
+ "goal": "JWTベースの認証機能を実装",
335
+ "outcome": "success",
336
+ "description": "RS256署名でJWT認証を実装",
337
+ "sessionType": "implementation"
338
+ },
339
+
340
+ "plan": {
341
+ "tasks": ["[x] JWT署名方式の選定", "[x] ミドルウェア実装", "[ ] テスト追加"],
342
+ "remaining": ["テスト追加"]
343
+ },
344
+
345
+ "discussions": [
346
+ {
347
+ "topic": "署名方式",
348
+ "decision": "RS256を採用",
349
+ "reasoning": "本番環境でのセキュリティを考慮",
350
+ "alternatives": ["HS256(シンプルだが秘密鍵共有が必要)"]
351
+ }
352
+ ],
353
+
354
+ "errors": [
355
+ {
356
+ "error": "secretOrPrivateKey must be asymmetric",
357
+ "cause": "HS256用の秘密鍵をRS256で使用",
358
+ "solution": "RS256用のキーペアを生成"
359
+ }
360
+ ],
361
+
362
+ "handoff": {
363
+ "stoppedReason": "テスト作成は次回に持ち越し",
364
+ "notes": ["vitest設定済み", "モック用のキーペアは test/fixtures/ に配置"],
365
+ "nextSteps": ["jwt.test.ts を作成", "E2Eテスト追加"]
366
+ },
367
+
368
+ "references": [
369
+ { "url": "https://jwt.io/introduction", "title": "JWT Introduction" }
370
+ ]
371
+ }
372
+ ```
373
+
374
+ ### セッションタイプ
375
+
376
+ `sessionType` フィールドはセッションの種類を分類します。
377
+
378
+ | タイプ | 説明 |
379
+ |--------|------|
380
+ | `decision` | 決定サイクルあり(設計判断、技術選択など) |
381
+ | `implementation` | コード変更あり |
382
+ | `research` | リサーチ・学習・キャッチアップ |
383
+ | `exploration` | コードベース探索 |
384
+ | `discussion` | 議論・相談のみ |
385
+ | `debug` | デバッグ・調査 |
386
+ | `review` | コードレビュー |
387
+
388
+ ### タグ
389
+
390
+ タグは `.mneme/tags.json` から選択され、表記揺れを防止します(例: 「フロント」→「frontend」)。マスターファイルには11カテゴリ93タグが含まれています:
391
+
392
+ - **domain**: frontend, backend, api, db, infra, mobile, cli
393
+ - **phase**: feature, bugfix, refactor, test, docs
394
+ - **ai**: llm, ai-agent, mcp, rag, vector-db, embedding
395
+ - **cloud**: serverless, microservices, edge, wasm
396
+ - その他...
397
+
398
+ ## ライセンス
399
+
400
+ MIT