@pcircle/memesh 4.6.2 → 4.7.2
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/.claude-plugin/marketplace.json +2 -2
- package/.claude-plugin/plugin.json +2 -2
- package/AGENTS.md +9 -2
- package/README.de.md +80 -17
- package/README.md +22 -11
- package/README.zh-TW.md +79 -17
- package/dashboard/dist/index.html +6 -6
- package/dist/core/analytics.d.ts.map +1 -1
- package/dist/core/analytics.js +1 -1
- package/dist/core/analytics.js.map +1 -1
- package/dist/core/briefing.d.ts.map +1 -1
- package/dist/core/briefing.js +1 -0
- package/dist/core/briefing.js.map +1 -1
- package/dist/core/citation-rule.d.ts +24 -0
- package/dist/core/citation-rule.d.ts.map +1 -0
- package/dist/core/citation-rule.js +71 -0
- package/dist/core/citation-rule.js.map +1 -0
- package/dist/core/conflict-candidates.d.ts.map +1 -1
- package/dist/core/conflict-candidates.js +4 -12
- package/dist/core/conflict-candidates.js.map +1 -1
- package/dist/core/conflict-judge.d.ts +11 -0
- package/dist/core/conflict-judge.d.ts.map +1 -1
- package/dist/core/conflict-judge.js +1 -1
- package/dist/core/conflict-judge.js.map +1 -1
- package/dist/core/demo.d.ts.map +1 -1
- package/dist/core/demo.js +22 -3
- package/dist/core/demo.js.map +1 -1
- package/dist/core/digest-validator.d.ts.map +1 -1
- package/dist/core/digest-validator.js +3 -3
- package/dist/core/digest-validator.js.map +1 -1
- package/dist/core/doctor.d.ts.map +1 -1
- package/dist/core/doctor.js +130 -22
- package/dist/core/doctor.js.map +1 -1
- package/dist/core/dreamer.d.ts.map +1 -1
- package/dist/core/dreamer.js +10 -6
- package/dist/core/dreamer.js.map +1 -1
- package/dist/core/install-channel.d.ts +7 -2
- package/dist/core/install-channel.d.ts.map +1 -1
- package/dist/core/install-channel.js +44 -7
- package/dist/core/install-channel.js.map +1 -1
- package/dist/core/install-hooks.d.ts +6 -0
- package/dist/core/install-hooks.d.ts.map +1 -1
- package/dist/core/install-hooks.js +0 -0
- package/dist/core/install-hooks.js.map +1 -1
- package/dist/core/kg-backfill.d.ts.map +1 -1
- package/dist/core/kg-backfill.js +1 -1
- package/dist/core/kg-backfill.js.map +1 -1
- package/dist/core/lesson-engine.d.ts.map +1 -1
- package/dist/core/lesson-engine.js +3 -3
- package/dist/core/lesson-engine.js.map +1 -1
- package/dist/core/lifecycle.js +2 -2
- package/dist/core/llm-client.d.ts.map +1 -1
- package/dist/core/llm-client.js +7 -3
- package/dist/core/llm-client.js.map +1 -1
- package/dist/core/llm-telemetry.d.ts.map +1 -1
- package/dist/core/llm-telemetry.js +5 -2
- package/dist/core/llm-telemetry.js.map +1 -1
- package/dist/core/operations.d.ts +2 -0
- package/dist/core/operations.d.ts.map +1 -1
- package/dist/core/operations.js +2 -2
- package/dist/core/operations.js.map +1 -1
- package/dist/core/paths.d.ts.map +1 -1
- package/dist/core/paths.js +3 -2
- package/dist/core/paths.js.map +1 -1
- package/dist/core/patterns.d.ts +0 -5
- package/dist/core/patterns.d.ts.map +1 -1
- package/dist/core/patterns.js +1 -43
- package/dist/core/patterns.js.map +1 -1
- package/dist/core/schema-export.js +1 -1
- package/dist/core/schema-export.js.map +1 -1
- package/dist/core/serializer.d.ts.map +1 -1
- package/dist/core/serializer.js +53 -10
- package/dist/core/serializer.js.map +1 -1
- package/dist/core/signal-scorer.d.ts +0 -1
- package/dist/core/signal-scorer.d.ts.map +1 -1
- package/dist/core/signal-scorer.js +12 -8
- package/dist/core/signal-scorer.js.map +1 -1
- package/dist/core/transcript-extractor.d.ts +2 -0
- package/dist/core/transcript-extractor.d.ts.map +1 -1
- package/dist/core/transcript-extractor.js +10 -5
- package/dist/core/transcript-extractor.js.map +1 -1
- package/dist/core/types.d.ts +11 -0
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/updater.d.ts.map +1 -1
- package/dist/core/updater.js +1 -1
- package/dist/core/updater.js.map +1 -1
- package/dist/core/why.d.ts +1 -1
- package/dist/core/why.d.ts.map +1 -1
- package/dist/core/why.js +5 -0
- package/dist/core/why.js.map +1 -1
- package/dist/db.d.ts.map +1 -1
- package/dist/db.js +20 -27
- package/dist/db.js.map +1 -1
- package/dist/knowledge-graph.d.ts +3 -1
- package/dist/knowledge-graph.d.ts.map +1 -1
- package/dist/knowledge-graph.js +44 -28
- package/dist/knowledge-graph.js.map +1 -1
- package/dist/skills-manifest.json +25 -20
- package/dist/storage/fts-index.d.ts.map +1 -1
- package/dist/storage/fts-index.js.map +1 -1
- package/dist/storage/schema.d.ts.map +1 -1
- package/dist/storage/schema.js +18 -22
- package/dist/storage/schema.js.map +1 -1
- package/dist/storage/vector-index.d.ts.map +1 -1
- package/dist/storage/vector-index.js +10 -4
- package/dist/storage/vector-index.js.map +1 -1
- package/dist/transports/cli/cli.js +131 -49
- package/dist/transports/cli/cli.js.map +1 -1
- package/dist/transports/http/server.d.ts.map +1 -1
- package/dist/transports/http/server.js +58 -3
- package/dist/transports/http/server.js.map +1 -1
- package/dist/transports/mcp/handlers.d.ts +5 -3
- package/dist/transports/mcp/handlers.d.ts.map +1 -1
- package/dist/transports/mcp/handlers.js +27 -18
- package/dist/transports/mcp/handlers.js.map +1 -1
- package/dist/transports/schemas.d.ts +0 -1
- package/dist/transports/schemas.d.ts.map +1 -1
- package/dist/transports/schemas.js +4 -3
- package/dist/transports/schemas.js.map +1 -1
- package/hooks/hooks.json +4 -2
- package/llms-install.md +28 -0
- package/package.json +2 -2
- package/scripts/hooks/_generated/citation-rule.js +78 -0
- package/scripts/hooks/_generated/core-paths.js +3 -2
- package/scripts/hooks/_generated/schema.js +18 -22
- package/scripts/hooks/_shared.js +75 -4
- package/scripts/hooks/guard-check.js +5 -0
- package/scripts/hooks/pre-compact.js +14 -7
- package/scripts/hooks/pre-edit-recall.js +22 -0
- package/scripts/hooks/session-start.js +106 -3
- package/scripts/hooks/session-summary.js +41 -4
- package/scripts/upgrade-plugin.sh +9 -1
|
@@ -7,8 +7,8 @@
|
|
|
7
7
|
{
|
|
8
8
|
"name": "memesh",
|
|
9
9
|
"source": "./",
|
|
10
|
-
"description": "MeMesh
|
|
11
|
-
"version": "4.
|
|
10
|
+
"description": "MeMesh \u2014 agentic memory for coding agents. Captured from the agent's real work via hooks, recalled when it acts. One SQLite file, zero cloud required.",
|
|
11
|
+
"version": "4.7.2",
|
|
12
12
|
"author": {
|
|
13
13
|
"name": "PCIRCLE AI"
|
|
14
14
|
},
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "memesh",
|
|
3
|
-
"description": "MeMesh
|
|
3
|
+
"description": "MeMesh \u2014 agentic memory for coding agents. Captured from the agent's real work via hooks, recalled when it acts. One SQLite file, zero cloud required.",
|
|
4
4
|
"author": {
|
|
5
5
|
"name": "PCIRCLE AI"
|
|
6
6
|
},
|
|
7
|
-
"version": "4.
|
|
7
|
+
"version": "4.7.2",
|
|
8
8
|
"homepage": "https://github.com/PCIRCLE-AI/memesh",
|
|
9
9
|
"repository": "https://github.com/PCIRCLE-AI/memesh",
|
|
10
10
|
"license": "MIT",
|
package/AGENTS.md
CHANGED
|
@@ -91,8 +91,15 @@ injected), and do not `remember` commits or session summaries by hand. Manual
|
|
|
91
91
|
calls are for what hooks cannot see — decisions and their rationale, lessons
|
|
92
92
|
worth keeping, and user-stated task state.
|
|
93
93
|
|
|
94
|
-
|
|
95
|
-
|
|
94
|
+
On a host with no hooks (Gemini CLI, Cursor, an MCP-only setup, …) the loop is
|
|
95
|
+
fully manual, and it is worth running.
|
|
96
|
+
|
|
97
|
+
Codex CLI can be either. Wired as an MCP server it has no hooks, like the
|
|
98
|
+
above. Installed as a plugin (`codex plugin add memesh@pcircle-memesh`) it
|
|
99
|
+
reads the same `hooks/hooks.json` manifest Claude Code does and runs the same
|
|
100
|
+
hook scripts, so the topology is injected for you there too. If you are unsure
|
|
101
|
+
which one you are in, `memesh doctor` names it: the "Hooks wired into Claude
|
|
102
|
+
Code" row says which plugin runtime it found.
|
|
96
103
|
|
|
97
104
|
## Working on this repository (contributing agents)
|
|
98
105
|
|
package/README.de.md
CHANGED
|
@@ -16,11 +16,13 @@
|
|
|
16
16
|
|
|
17
17
|
---
|
|
18
18
|
|
|
19
|
-
**MeMesh**
|
|
19
|
+
**MeMesh** ist eine **Open-Source-Speicherschicht** für KI-Coding-Agenten — für Claude Code, Codex, Gemini, Cursor und andere MCP-Clients.
|
|
20
|
+
|
|
21
|
+
Sie erfasst Memories aus dem, was der Agent wirklich tut, und gibt das Passende genau dann zurück, wenn er handelt. Widersprechen sich zwei Memories, sagt sie es. Alles liegt in einer SQLite-Datei, ohne Cloud.
|
|
20
22
|
|
|
21
23
|
## Installation
|
|
22
24
|
|
|
23
|
-
**In Claude Code** — diese zwei Zeilen im Chat eingeben (Hooks, Memory-Tools und der `/memesh`-Skill werden automatisch
|
|
25
|
+
**In Claude Code** — diese zwei Zeilen im Chat eingeben (Hooks, Memory-Tools und der `/memesh`-Skill werden automatisch eingerichtet):
|
|
24
26
|
|
|
25
27
|
```
|
|
26
28
|
/plugin marketplace add PCIRCLE-AI/memesh
|
|
@@ -36,15 +38,26 @@ npm install -g @pcircle/memesh
|
|
|
36
38
|
memesh doctor # prüft diese Installation Ende-zu-Ende
|
|
37
39
|
```
|
|
38
40
|
|
|
39
|
-
Die meisten Claude-Code-Nutzer
|
|
41
|
+
Die meisten Claude-Code-Nutzer installieren am Ende **beides**. Beide nutzen dieselbe Datenbank und kommen sich nicht in die Quere. Details, weitere Agenten und Upgrades stehen unten unter „In 60 Sekunden starten".
|
|
40
42
|
|
|
41
43
|
## Das Problem
|
|
42
44
|
|
|
43
|
-
Ihr Coding-Agent vergisst nicht nur Fakten
|
|
45
|
+
Ihr Coding-Agent vergisst zwischen zwei Sessions nicht nur Fakten. Schlimmer: er **macht dieselbe Arbeit noch einmal**.
|
|
46
|
+
|
|
47
|
+
- Er schlägt wieder den Ansatz vor, den Sie letzten Monat abgelehnt haben
|
|
48
|
+
- Er stolpert erneut über denselben fehlschlagenden Test
|
|
49
|
+
- Er „entdeckt" die Einschränkung wieder, die im März die Produktion lahmgelegt hat
|
|
50
|
+
- Er bittet Sie, ihm die Architektur zu erklären, die er selbst mitentworfen hat
|
|
51
|
+
|
|
52
|
+
Das ist kein Problem des Chatverlaufs. Was zwischen Sessions überleben muss, ist nicht das Gespräch, sondern die *Arbeit*: welche Entscheidungen gefallen sind, warum, was fehlgeschlagen ist, wie es behoben wurde — und wie das alles zusammenhängt.
|
|
44
53
|
|
|
45
|
-
|
|
54
|
+
**Genau diese Lücke füllt MeMesh.** Es tut drei Dinge:
|
|
46
55
|
|
|
47
|
-
**
|
|
56
|
+
- **Automatisch festhalten**: Hooks erfassen, was der Agent wirklich tut — Sessions, Commits, Fehlschläge. Keine handgeschriebenen Notizen
|
|
57
|
+
- **Zurückgeben, wenn es zählt**: beim Session-Start und vor jeder Dateibearbeitung landen die passenden Memories vor dem Agenten
|
|
58
|
+
- **Nicht verrotten lassen**: neue Entscheidungen lösen alte ab, und widersprechen sich zwei Memories, beurteilt ein LLM den Konflikt und markiert ihn
|
|
59
|
+
|
|
60
|
+
Installation über npm, gespeichert wird in `~/.memesh/knowledge-graph.db`, angebunden an Claude Code oder jeden MCP-fähigen Client.
|
|
48
61
|
|
|
49
62
|
> [!IMPORTANT]
|
|
50
63
|
> **Aktiv entwickeltes Projekt** — Funktionen entwickeln sich kontinuierlich weiter und können sich zwischen Releases ändern. Bei Bugs oder Feature-Wünschen bitte [ein Issue eröffnen](https://github.com/PCIRCLE-AI/memesh/issues).
|
|
@@ -65,7 +78,7 @@ flowchart TB
|
|
|
65
78
|
subgraph clients["Where you use memesh from"]
|
|
66
79
|
direction LR
|
|
67
80
|
CC["Claude Code<br/>(chat + agent)"]:::client
|
|
68
|
-
TERM["Terminal / other<br/>MCP clients<br/>(
|
|
81
|
+
TERM["Terminal / other<br/>MCP clients<br/>(Codex, Gemini, Cursor...)"]:::client
|
|
69
82
|
end
|
|
70
83
|
|
|
71
84
|
subgraph paths["Two install paths"]
|
|
@@ -152,7 +165,7 @@ memesh setup --check # Prüfung auf Maschinenebene: liest die Host-Confi
|
|
|
152
165
|
|
|
153
166
|
Die Hooks existieren neben Ihren bestehenden Custom-Hooks unter `~/.claude/hooks/` — `install-hooks` schreibt additiv und überschreibt nie Ihre Einträge. Zum Entfernen: `memesh uninstall-hooks`.
|
|
154
167
|
|
|
155
|
-
### Dieselben Memories aus Codex CLI und
|
|
168
|
+
### Dieselben Memories aus Codex CLI, Gemini CLI, Cursor und anderen MCP-Clients
|
|
156
169
|
|
|
157
170
|
`memesh-mcp` ist ein gewöhnlicher stdio-MCP-Server — jeder MCP-fähige Host kann ihn nutzen, nicht nur Claude Code. Mit installierter Option B (`memesh-mcp` im `PATH`) einmal pro Host registrieren:
|
|
158
171
|
|
|
@@ -164,7 +177,18 @@ codex mcp add memesh -- memesh-mcp
|
|
|
164
177
|
gemini mcp add -s user memesh memesh-mcp
|
|
165
178
|
```
|
|
166
179
|
|
|
167
|
-
|
|
180
|
+
Für Cursor fügen Sie denselben stdio-Server in `~/.cursor/mcp.json` (global)
|
|
181
|
+
oder in `.cursor/mcp.json` (projektspezifisch) ein:
|
|
182
|
+
|
|
183
|
+
```json
|
|
184
|
+
{
|
|
185
|
+
"mcpServers": {
|
|
186
|
+
"memesh": { "command": "memesh-mcp" }
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
Jeder Host liest und schreibt dieselbe `~/.memesh/knowledge-graph.db` — eine in einem Agenten gespeicherte Memory ist aus Codex, Gemini, Cursor oder einem anderen MCP-Client abrufbar. Prüfen:
|
|
168
192
|
|
|
169
193
|
```bash
|
|
170
194
|
codex mcp list # memesh sollte als enabled gelistet sein
|
|
@@ -264,8 +288,8 @@ Denselben Block erhält Claude Code automatisch beim Session-Start, und jeder an
|
|
|
264
288
|
|---------------|---------------------|
|
|
265
289
|
| **Claude Code verwenden** | Projektentscheidungen, dateispezifische Erkenntnisse und vergangene Fehler während der Arbeit automatisch abrufen |
|
|
266
290
|
| **Power-User von Coding-Agenten** | Eine lokale Speicherschicht über MCP-kompatible Tools verteilen |
|
|
267
|
-
| **
|
|
268
|
-
| **
|
|
291
|
+
| **Codex, Gemini, Cursor, Claude Code oder einen anderen MCP-Client einzeln nutzt** | Eine lokale Speicherschicht über Agenten und Sessions hinweg verwenden |
|
|
292
|
+
| **einen Agenten integrieren** | Lokalen Speicher via MCP, HTTP oder CLI hinzufügen |
|
|
269
293
|
|
|
270
294
|
---
|
|
271
295
|
|
|
@@ -402,12 +426,12 @@ Wenn npm eine installierte Version als veraltet kennzeichnet (typischerweise ein
|
|
|
402
426
|
|
|
403
427
|
**🔄 Wissensentwicklung** — Entscheidungen ändern sich. `forget` archiviert alte Memories (löscht nie). `supersedes`-Relationen verbinden alt → neu. Ihr KI sieht immer die aktuelle Version.
|
|
404
428
|
|
|
405
|
-
**⚠️ Konflikterkennung** —
|
|
429
|
+
**⚠️ Konflikterkennung** — `memesh dream conflicts` lässt das LLM Ihre semantisch nächstliegenden Memory-Paare auf Widerspruch, Supersession oder Duplikat prüfen und legt die Treffer als Vorschläge ab. Nichts wird von selbst übernommen: Sie prüfen mit `dream list` / `dream show`, und erst ein akzeptierter Vorschlag erstellt die Relation — danach trägt jedes `recall`, das eine der beiden Memories betrifft, die Warnung. Kausalität wird nie aus Zeitstempeln abgeleitet; die Urteile beruhen darauf, was die Memories tatsächlich aussagen.
|
|
406
430
|
|
|
407
431
|
**🕸️ Wissensgraph-Konnektivität** — `memesh kg backfill-relations --all-rules` verknüpft verwaiste Entitäten über Tag-Kookurrenz, Projekt-Clustering, Sitzungskontext und Namensähnlichkeit — ohne LLM.
|
|
408
432
|
|
|
409
|
-
**📦
|
|
410
|
-
Importierte Bundles bleiben durchsuchbar, aber MeMesh injiziert importierte Memories nicht automatisch in
|
|
433
|
+
**📦 Persönliches Backup und Migration** — `memesh export > memesh-backup.json` → auf einen anderen Rechner kopieren → `memesh import memesh-backup.json`
|
|
434
|
+
Importierte Bundles bleiben durchsuchbar, aber MeMesh injiziert importierte Memories nicht automatisch in den Host-Kontext, bis Sie sie überprüfen oder lokal neu speichern.
|
|
411
435
|
|
|
412
436
|
---
|
|
413
437
|
|
|
@@ -416,14 +440,53 @@ Importierte Bundles bleiben durchsuchbar, aber MeMesh injiziert importierte Memo
|
|
|
416
440
|
> "MeMesh hat sich daran erinnert, dass wir vor drei Wochen PKCE gegenüber Implicit Flow gewählt haben. Als ich Claude erneut nach Auth fragte, wusste es bereits Bescheid — keine Wiederholungen nötig."
|
|
417
441
|
> — **Einzelentwickler, baut eine SaaS**
|
|
418
442
|
|
|
419
|
-
> "
|
|
420
|
-
> — **
|
|
443
|
+
> "Eine in Claude Code gespeicherte Entscheidung war am nächsten Tag aus Codex abrufbar. Dieselbe lokale Memory folgt meiner Arbeit statt einem einzelnen Agenten."
|
|
444
|
+
> — **Einzelentwickler mit mehreren Coding-Agenten**
|
|
421
445
|
|
|
422
446
|
> "Das Dashboard zeigte mir, dass 90 % meiner Memories automatisch generierte Session-Logs waren. Ich begann, `remember` bewusst für Architekturentscheidungen zu nutzen. Ein Spielwechsel."
|
|
423
447
|
> — **Entwickler, der das Analytics-Panel entdeckte**
|
|
424
448
|
|
|
425
449
|
---
|
|
426
450
|
|
|
451
|
+
## Rezepte
|
|
452
|
+
|
|
453
|
+
### Einen Widerspruch erkennen, bevor er zum Problem wird
|
|
454
|
+
|
|
455
|
+
Zwei Entscheidungen, Wochen auseinander getroffen, die nicht beide wahr sein können — genau das Fehlerbild, das eine Memory-Schicht abfangen soll:
|
|
456
|
+
|
|
457
|
+
```bash
|
|
458
|
+
memesh remember --name retry-policy --type decision \
|
|
459
|
+
--obs "Alle HTTP-Clients wiederholen fehlgeschlagene Requests bis zu 5-mal mit exponentiellem Backoff."
|
|
460
|
+
# ...Wochen später entscheidet jemand das Gegenteil...
|
|
461
|
+
memesh remember --name retry-policy-v2 --type decision \
|
|
462
|
+
--obs "HTTP-Clients dürfen niemals automatisch wiederholen — sofort fehlschlagen und den Fehler melden."
|
|
463
|
+
|
|
464
|
+
memesh dream conflicts # markiert das Paar, mit Begründung
|
|
465
|
+
memesh dream show 1 # Urteil, Auszüge und Folgen der Annahme lesen
|
|
466
|
+
memesh dream accept 1 # SIE entscheiden — nichts wird je automatisch verknüpft
|
|
467
|
+
memesh recall "retry policy" # → Warnung: Konflikte erkannt
|
|
468
|
+
```
|
|
469
|
+
|
|
470
|
+
Ab dann wird jedem Assistenten, der eine der beiden Entscheidungen abruft, gesagt, dass sie im Widerspruch stehen — statt selbstbewusst die zuerst gefundene zu zitieren.
|
|
471
|
+
|
|
472
|
+
### Eine Erinnerung, drei Assistenten
|
|
473
|
+
|
|
474
|
+
MeMesh ist ein MCP-Server, daher bedient dieselbe SQLite-Datei jeden MCP-Client auf der Maschine. Einmal pro Tool registrieren (die genauen Befehle stehen oben unter „In 60 Sekunden starten") — und eine in Claude Code gespeicherte Entscheidung wird mitten in der Session von Codex oder Gemini CLI abgerufen: kein erneutes Erklären, kein Kontext zwischen Anbietern hin- und herkopieren.
|
|
475
|
+
|
|
476
|
+
### Entscheidungen so festhalten, dass sie auffindbar bleiben
|
|
477
|
+
|
|
478
|
+
Auto-Capture hält die Session-Historie fest, aber die Erinnerungen, die sich wirklich auszahlen, sind die bewusst gespeicherten:
|
|
479
|
+
|
|
480
|
+
```bash
|
|
481
|
+
memesh remember --name auth-approach --type decision \
|
|
482
|
+
--obs "JWT mit RS256; PKCE statt Implicit Flow, weil der Client öffentlich ist." \
|
|
483
|
+
--tags "project:myapp" "topic:auth"
|
|
484
|
+
```
|
|
485
|
+
|
|
486
|
+
Verknüpfen Sie dann Folgen mit ihren Ursachen, sobald sie eintreten — von jedem MCP-Client aus, in normalen Worten: „diesen Vorfall als Lektion speichern, beeinflusst von auth-approach". Das `remember`-Tool nimmt frei formulierte Relationen entgegen, und `caused` / `influenced` sind das dokumentierte Kausal-Vokabular (Ursache → Wirkung, explizit angegeben — MeMesh leitet Kausalität nie aus Zeitstempeln ab). Wochen später liefert `memesh recall "warum haben wir uns für PKCE entschieden"` die Entscheidung samt der aufgezeichneten Folgen — nachvollziehbare Begründung, nicht nur zufällig passender Text.
|
|
487
|
+
|
|
488
|
+
---
|
|
489
|
+
|
|
427
490
|
## Smart Mode freischalten (optional)
|
|
428
491
|
|
|
429
492
|
MeMesh funktioniert standardmäßig offline — Recall bleibt strikt LLM-frei (95,60 % R@5 auf LongMemEval-S, ohne LLM). Fügen Sie einen LLM API-Schlüssel nur hinzu, wenn Sie LLM-augmentierte Analyseflüsse zusätzlich nutzen möchten: intelligentere Session-Extraktion, Auto-Tagging neuer Memories, Lektionen aus Fehlern und `dream` Kompression:
|
|
@@ -471,7 +534,7 @@ Wechselst du zu einer anderen Dimension (z. B. 768 → 1536), wird **nichts gel
|
|
|
471
534
|
| `remember` | Wissen mit Beobachtungen, Relationen und Tags speichern |
|
|
472
535
|
| `recall` | FTS5 + sqlite-vec Suche mit Multi-Faktor-Bewertung (Relevanz, Aktualität, Häufigkeit, Konfidenz, Abruf-Auswirkung) — kein LLM auf dem Hot Path |
|
|
473
536
|
| `forget` | Soft-Archivierung (löscht nie) oder entfernt spezifische Beobachtungen |
|
|
474
|
-
| `export` | Memories als JSON
|
|
537
|
+
| `export` | Memories als JSON sichern, migrieren oder zwischen kompatiblen Agenten übertragen |
|
|
475
538
|
| `import` | Memories mit Merge-Strategien importieren (Skip / Overwrite / Append) |
|
|
476
539
|
| `learn` | Strukturierte Lektionen aus Fehlern erfassen (Fehler, Grundursache, Behebung, Prävention) |
|
|
477
540
|
| `task_state` | Arbeitsstand lesen oder festhalten — Ziel, nächster Schritt, Blocker, gerade Erledigtes |
|
package/README.md
CHANGED
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
|
|
17
17
|
---
|
|
18
18
|
|
|
19
|
-
**MeMesh** — open-source **agentic memory** for Claude Code
|
|
19
|
+
**MeMesh** — open-source **agentic memory** for individual AI coding agents: compatible with Claude Code, Codex, Gemini, Cursor, and other MCP clients. Captured from the agent's real work, injected at the moment it acts, kept honest when it contradicts itself. One SQLite file. No cloud.
|
|
20
20
|
|
|
21
21
|
## Install
|
|
22
22
|
|
|
@@ -67,7 +67,7 @@ flowchart TB
|
|
|
67
67
|
subgraph clients["Where you use memesh from"]
|
|
68
68
|
direction LR
|
|
69
69
|
CC["Claude Code<br/>(chat + agent)"]:::client
|
|
70
|
-
TERM["Terminal / other<br/>MCP clients<br/>(
|
|
70
|
+
TERM["Terminal / other<br/>MCP clients<br/>(Codex, Gemini, Cursor...)"]:::client
|
|
71
71
|
end
|
|
72
72
|
|
|
73
73
|
subgraph paths["Two install paths"]
|
|
@@ -162,7 +162,7 @@ memesh setup --check # machine-level verification: reads the hosts' own
|
|
|
162
162
|
|
|
163
163
|
The hooks coexist with any custom hooks you already have under `~/.claude/hooks/` — `install-hooks` writes additive entries and never overwrites yours. To remove later: `memesh uninstall-hooks`.
|
|
164
164
|
|
|
165
|
-
### Same memory from Codex CLI and
|
|
165
|
+
### Same memory from Codex CLI, Gemini CLI, Cursor, and other MCP clients
|
|
166
166
|
|
|
167
167
|
`memesh-mcp` is a plain stdio MCP server, so any MCP-capable host can talk to it — not just Claude Code. With Option B installed (`memesh-mcp` on your `PATH`), register it once per host:
|
|
168
168
|
|
|
@@ -174,7 +174,18 @@ codex mcp add memesh -- memesh-mcp
|
|
|
174
174
|
gemini mcp add -s user memesh memesh-mcp
|
|
175
175
|
```
|
|
176
176
|
|
|
177
|
-
|
|
177
|
+
For Cursor, add the same stdio server to `~/.cursor/mcp.json` (global) or
|
|
178
|
+
`.cursor/mcp.json` (project-local):
|
|
179
|
+
|
|
180
|
+
```json
|
|
181
|
+
{
|
|
182
|
+
"mcpServers": {
|
|
183
|
+
"memesh": { "command": "memesh-mcp" }
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
Every host reads and writes the same `~/.memesh/knowledge-graph.db`, so a memory stored from one agent is recallable from Codex, Gemini, Cursor, or another MCP client. Verify from the host by asking it to call the `recall` tool, or from a terminal:
|
|
178
189
|
|
|
179
190
|
```bash
|
|
180
191
|
codex mcp list # memesh should be listed as enabled
|
|
@@ -276,8 +287,8 @@ This same block is what Claude Code receives automatically at session start, and
|
|
|
276
287
|
|---------------|---------------------|
|
|
277
288
|
| **A developer using Claude Code** | Auto-recall project decisions, file-specific lessons, and past failures as you work |
|
|
278
289
|
| **A coding-agent power user** | Share one local memory layer across MCP-compatible tools |
|
|
279
|
-
| **
|
|
280
|
-
| **
|
|
290
|
+
| **An individual using Codex, Gemini, Cursor, Claude Code, or another MCP client** | Use one local memory layer across agents and sessions |
|
|
291
|
+
| **A developer integrating an agent** | Add local memory through MCP, HTTP, or the CLI |
|
|
281
292
|
|
|
282
293
|
---
|
|
283
294
|
|
|
@@ -419,8 +430,8 @@ When npm flags an installed version as deprecated (typically a security advisory
|
|
|
419
430
|
|
|
420
431
|
**🕸️ Knowledge Graph Connectivity** — `memesh kg backfill-relations --all-rules` links orphan entities using tag co-occurrence, project clustering, session context, and name similarity — no LLM required.
|
|
421
432
|
|
|
422
|
-
**📦
|
|
423
|
-
Imported bundles stay searchable, but MeMesh does not auto-inject imported memories into
|
|
433
|
+
**📦 Personal backup and migration** — `memesh export > memesh-backup.json` → copy it to another machine → `memesh import memesh-backup.json`
|
|
434
|
+
Imported bundles stay searchable, but MeMesh does not auto-inject imported memories into host context until you review or re-store them locally.
|
|
424
435
|
|
|
425
436
|
---
|
|
426
437
|
|
|
@@ -429,8 +440,8 @@ Imported bundles stay searchable, but MeMesh does not auto-inject imported memor
|
|
|
429
440
|
> "MeMesh remembered that we chose PKCE over implicit flow three weeks ago. When I asked Claude about auth again, it already knew — no re-explaining needed."
|
|
430
441
|
> — **Solo developer, building a SaaS**
|
|
431
442
|
|
|
432
|
-
> "
|
|
433
|
-
> — **
|
|
443
|
+
> "I stored a decision from Claude Code and recalled it from Codex the next day. The same local memory followed my work instead of one agent."
|
|
444
|
+
> — **Solo developer using multiple coding agents**
|
|
434
445
|
|
|
435
446
|
> "The dashboard showed me that 90% of my memories were auto-generated session logs. I started using `remember` deliberately for architecture decisions. Game changer."
|
|
436
447
|
> — **Developer who discovered the analytics panel**
|
|
@@ -538,7 +549,7 @@ If you switch to an embedder with a different dimension (e.g. 768 → 1536), **n
|
|
|
538
549
|
| `remember` | Store knowledge with observations, relations, and tags |
|
|
539
550
|
| `recall` | FTS5 + sqlite-vec search with multi-factor scoring (relevance, recency, frequency, confidence, recall impact) — no LLM in the hot path |
|
|
540
551
|
| `forget` | Soft-archive (never deletes) or remove specific observations |
|
|
541
|
-
| `export` |
|
|
552
|
+
| `export` | Back up, migrate, or move memories as JSON between compatible agents |
|
|
542
553
|
| `import` | Import memories with merge strategies (skip / overwrite / append) |
|
|
543
554
|
| `learn` | Record structured lessons from mistakes (error, root cause, fix, prevention) |
|
|
544
555
|
| `task_state` | Read or record where the work stands — goal, next step, blocker, what was just finished |
|
package/README.zh-TW.md
CHANGED
|
@@ -16,7 +16,9 @@
|
|
|
16
16
|
|
|
17
17
|
---
|
|
18
18
|
|
|
19
|
-
**MeMesh**
|
|
19
|
+
**MeMesh** 是給 AI 程式開發代理用的**開源記憶層**,支援 Claude Code、Codex、Gemini、Cursor 和其他 MCP 用戶端。
|
|
20
|
+
|
|
21
|
+
它從代理實際做的事情裡擷取記憶,在代理要動手的那一刻把相關的部分送回去。記憶彼此矛盾時,它會說出來。全部存在一個 SQLite 檔案裡,不需要雲端。
|
|
20
22
|
|
|
21
23
|
## 安裝
|
|
22
24
|
|
|
@@ -36,15 +38,26 @@ npm install -g @pcircle/memesh
|
|
|
36
38
|
memesh doctor # 端到端驗證這份安裝
|
|
37
39
|
```
|
|
38
40
|
|
|
39
|
-
|
|
41
|
+
多數 Claude Code 使用者兩種都會裝。它們共用同一個資料庫,不會互相干擾。想知道細節、其他代理怎麼接、怎麼升級,看下面的「60 秒快速開始」。
|
|
40
42
|
|
|
41
43
|
## 問題所在
|
|
42
44
|
|
|
43
|
-
|
|
45
|
+
你的代理換一次對話就忘光,這還不是最糟的。最糟的是它會**把做過的事再做一次**:
|
|
46
|
+
|
|
47
|
+
- 重新提議你上個月否決掉的做法
|
|
48
|
+
- 再一次被同一個測試絆倒
|
|
49
|
+
- 重新「發現」三月那條弄壞 production 的限制
|
|
50
|
+
- 要你重講一遍當初它也有份設計的架構
|
|
51
|
+
|
|
52
|
+
這不是「聊天記錄沒存好」的問題。要留下來的不是對話,是*工作本身*——做過什麼決定、為什麼那樣決定、哪裡失敗過、後來怎麼修的,以及這些事情之間的關係。
|
|
44
53
|
|
|
45
|
-
|
|
54
|
+
**MeMesh 補的就是這一塊。** 它做三件事:
|
|
46
55
|
|
|
47
|
-
|
|
56
|
+
- **自動記下來**:hooks 從代理真正做過的事情擷取——session、commit、失敗,不用你手動寫筆記
|
|
57
|
+
- **在需要的時候送回去**:session 開始時、要改檔案之前,把相關記憶放進代理眼前
|
|
58
|
+
- **不讓記憶爛掉**:新的決定會取代舊的,兩筆記憶互相矛盾時由 LLM 判斷並標記出來
|
|
59
|
+
|
|
60
|
+
用 npm 裝,記憶放在 `~/.memesh/knowledge-graph.db`,接上 Claude Code 或任何支援 MCP 的用戶端就能用。
|
|
48
61
|
|
|
49
62
|
> [!IMPORTANT]
|
|
50
63
|
> **持續開發中的專案** — 功能會持續更新,版本之間可能會有變動。遇到問題或想要新功能,請[開 issue](https://github.com/PCIRCLE-AI/memesh/issues)。
|
|
@@ -65,7 +78,7 @@ flowchart TB
|
|
|
65
78
|
subgraph clients["Where you use memesh from"]
|
|
66
79
|
direction LR
|
|
67
80
|
CC["Claude Code<br/>(chat + agent)"]:::client
|
|
68
|
-
TERM["Terminal / other<br/>MCP clients<br/>(
|
|
81
|
+
TERM["Terminal / other<br/>MCP clients<br/>(Codex, Gemini, Cursor...)"]:::client
|
|
69
82
|
end
|
|
70
83
|
|
|
71
84
|
subgraph paths["Two install paths"]
|
|
@@ -158,7 +171,7 @@ memesh setup --check # 機器層級驗證:讀各主機自己的設定
|
|
|
158
171
|
|
|
159
172
|
這些 hooks 會跟你既有的 `~/.claude/hooks/` 自訂 hooks 共存 — `install-hooks` 用追加方式寫入,從不覆寫你的東西。要移除:`memesh uninstall-hooks`。
|
|
160
173
|
|
|
161
|
-
### 從 Codex CLI
|
|
174
|
+
### 從 Codex CLI、Gemini CLI、Cursor 與其他 MCP 用戶端使用同一份記憶
|
|
162
175
|
|
|
163
176
|
`memesh-mcp` 是標準的 stdio MCP server,任何支援 MCP 的主機都能用 — 不限 Claude Code。裝好選項 B(`memesh-mcp` 在 `PATH` 上)之後,每個主機註冊一次:
|
|
164
177
|
|
|
@@ -170,7 +183,17 @@ codex mcp add memesh -- memesh-mcp
|
|
|
170
183
|
gemini mcp add -s user memesh memesh-mcp
|
|
171
184
|
```
|
|
172
185
|
|
|
173
|
-
|
|
186
|
+
Cursor 請將同一個 stdio server 加入 `~/.cursor/mcp.json`(全域),或專案內的 `.cursor/mcp.json`:
|
|
187
|
+
|
|
188
|
+
```json
|
|
189
|
+
{
|
|
190
|
+
"mcpServers": {
|
|
191
|
+
"memesh": { "command": "memesh-mcp" }
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
每個主機讀寫的都是同一個 `~/.memesh/knowledge-graph.db`,所以在任何代理儲存的記憶,Codex、Gemini、Cursor 和其他 MCP 用戶端都能回憶得到。請從主機要求它呼叫 `recall` 工具驗證:
|
|
174
197
|
|
|
175
198
|
```bash
|
|
176
199
|
codex mcp list # memesh 應顯示為 enabled
|
|
@@ -272,8 +295,8 @@ Claude Code 在 session 開始時自動收到的就是同一個區塊,其他 M
|
|
|
272
295
|
|---------------|---------------------|
|
|
273
296
|
| **使用 Claude Code 的開發者** | 在工作時自動回憶專案決策、檔案特定的經驗教訓和過去的失敗 |
|
|
274
297
|
| **程式開發代理進階使用者** | 在多個 MCP 相容工具間共享一層在地記憶 |
|
|
275
|
-
|
|
|
276
|
-
|
|
|
298
|
+
| **使用 Codex、Gemini、Cursor、Claude Code 或其他 MCP 用戶端的個人** | 在不同代理與 session 之間使用同一層在地記憶 |
|
|
299
|
+
| **整合 AI 代理的開發者** | 透過 MCP、HTTP 或 CLI 添加在地記憶 |
|
|
277
300
|
|
|
278
301
|
---
|
|
279
302
|
|
|
@@ -411,12 +434,12 @@ MeMesh 的檢索引擎**只用 FTS5**(熱路徑上不使用 LLM、不使用嵌
|
|
|
411
434
|
|
|
412
435
|
**🔄 知識演進** — 決策會改變。`forget` 歸檔舊記憶(永不刪除)。`supersedes` 關係連結舊 → 新。你的 AI 總是看到最新版本。
|
|
413
436
|
|
|
414
|
-
**⚠️ 衝突偵測** —
|
|
437
|
+
**⚠️ 衝突偵測** — `memesh dream conflicts` 會讓 LLM 判定語意上最接近的記憶配對,找出矛盾、汰換或重複,並把結果暫存成提案。沒有東西會自動套用:你用 `dream list` / `dream show` 檢視,只有被接受的提案才會建立關係 —— 之後每次 `recall` 碰到其中任一筆記憶都會帶上警告。因果關係從不從時間戳推論;判決依據的是記憶內容本身怎麼說。
|
|
415
438
|
|
|
416
439
|
**🕸️ 知識圖連通性** — `memesh kg backfill-relations --all-rules` 使用標籤共現、專案叢集、會話上下文和名稱相似度連結孤立實體 — 無需 LLM。
|
|
417
440
|
|
|
418
|
-
**📦
|
|
419
|
-
匯入的組合保持可搜尋,但 MeMesh 不會自動將匯入的記憶注入
|
|
441
|
+
**📦 個人備份與搬遷** — `memesh export > memesh-backup.json` → 複製到另一台機器 → `memesh import memesh-backup.json`
|
|
442
|
+
匯入的組合保持可搜尋,但 MeMesh 不會自動將匯入的記憶注入 host context,直到你檢查或在本地重新儲存。
|
|
420
443
|
|
|
421
444
|
---
|
|
422
445
|
|
|
@@ -425,14 +448,53 @@ MeMesh 的檢索引擎**只用 FTS5**(熱路徑上不使用 LLM、不使用嵌
|
|
|
425
448
|
> 「MeMesh 記得我們三週前選擇了 PKCE 而不是隱式流程。當我再次問 Claude 關於身份驗證的問題時,它已經知道了——不需要重新解釋。」
|
|
426
449
|
> — **獨立開發者,正在打造 SaaS**
|
|
427
450
|
|
|
428
|
-
>
|
|
429
|
-
> —
|
|
451
|
+
> 「我在 Claude Code 儲存的決策,隔天可以從 Codex 找回來。同一份在地記憶跟著工作走,不會被綁在單一代理上。」
|
|
452
|
+
> — **使用多個程式開發代理的個人開發者**
|
|
430
453
|
|
|
431
454
|
> 「儀表板顯示我 90% 的記憶是自動生成的對話日誌。我開始有意使用 `remember` 來記錄架構決策。改變了遊戲規則。」
|
|
432
455
|
> — **發現分析面板的開發者**
|
|
433
456
|
|
|
434
457
|
---
|
|
435
458
|
|
|
459
|
+
## 食譜
|
|
460
|
+
|
|
461
|
+
### 在矛盾咬你之前先抓到它
|
|
462
|
+
|
|
463
|
+
兩個決策,隔了好幾週做的,卻不可能同時為真 — 這正是記憶層存在的目的,就是要抓到這種失敗模式:
|
|
464
|
+
|
|
465
|
+
```bash
|
|
466
|
+
memesh remember --name retry-policy --type decision \
|
|
467
|
+
--obs "所有 HTTP client 在請求失敗時都用指數退避重試,最多 5 次。"
|
|
468
|
+
# ...幾週後,有人做了完全相反的決定...
|
|
469
|
+
memesh remember --name retry-policy-v2 --type decision \
|
|
470
|
+
--obs "HTTP client 絕對不能自動重試 — 立刻失敗並把錯誤丟出來。"
|
|
471
|
+
|
|
472
|
+
memesh dream conflicts # 判定器標出這一對,附上判斷理由
|
|
473
|
+
memesh dream show 1 # 看完整的判決、引用的段落,接受後會建立什麼
|
|
474
|
+
memesh dream accept 1 # 由你決定 — 沒有東西會自動連起來
|
|
475
|
+
memesh recall "retry policy" # → 警告:偵測到衝突
|
|
476
|
+
```
|
|
477
|
+
|
|
478
|
+
從此之後,任何回憶到這兩個決策之一的代理都會被告知它們互相矛盾 — 而不是自信地引用剛好先找到的那一個。
|
|
479
|
+
|
|
480
|
+
### 一份記憶,三個代理
|
|
481
|
+
|
|
482
|
+
MeMesh 是一個 MCP server,所以同一個 SQLite 檔案能服務機器上的每一個 MCP 用戶端。每個工具只要註冊一次(確切指令見上方「60 秒快速開始」),在 Claude Code 記錄的決策,session 進行到一半時就能被 Codex 或 Gemini CLI 回憶起來 — 不用重新解釋,不用在不同廠商之間複製貼上 context。
|
|
483
|
+
|
|
484
|
+
### 記錄決策讓它們保持可被找到
|
|
485
|
+
|
|
486
|
+
自動擷取會保留 session 歷史,但真正划算的是那些刻意記下的記憶:
|
|
487
|
+
|
|
488
|
+
```bash
|
|
489
|
+
memesh remember --name auth-approach --type decision \
|
|
490
|
+
--obs "JWT 搭配 RS256;選 PKCE 而不是 implicit flow,因為 client 是公開的。" \
|
|
491
|
+
--tags "project:myapp" "topic:auth"
|
|
492
|
+
```
|
|
493
|
+
|
|
494
|
+
事情發生時,用平常講話的方式把結果連回原因 — 從任何 MCP 用戶端都行,像是:「把這次事故記成一個教訓,受 auth-approach 影響」。`remember` 工具接受自由格式的關係,`caused`/`influenced` 是文件裡定義的因果詞彙(因 → 果,要明確說出來 — MeMesh 從不從時間戳推論因果關係)。幾週後,`memesh recall "為什麼選 PKCE"` 會回傳那個決策,連同它記錄下來的後續影響一起 — 是可以追溯的推理,不只是剛好比對到的文字。
|
|
495
|
+
|
|
496
|
+
---
|
|
497
|
+
|
|
436
498
|
## 解鎖智慧模式(可選)
|
|
437
499
|
|
|
438
500
|
MeMesh 預設離線運作 — 回憶嚴格保持 LLM-free(開箱即用就有 LongMemEval-S 上 95.60% R@5)。只有當你想要在上層加入 LLM 增強的分析流程時,才需要加入 LLM API 金鑰:更聰明的 session 擷取、新記憶的自動標籤、從失敗產生教訓,以及 `dream` 壓縮:
|
|
@@ -480,7 +542,7 @@ memesh config set embedder.provider openai # or: ollama
|
|
|
480
542
|
| `remember` | 用觀察、關係和標籤儲存知識 |
|
|
481
543
|
| `recall` | FTS5 + sqlite-vec 搜尋,包含多因素評分(相關性、近期性、頻率、信心、回憶影響)— 熱路徑上不使用 LLM |
|
|
482
544
|
| `forget` | 軟歸檔(永不刪除)或移除特定觀察 |
|
|
483
|
-
| `export` |
|
|
545
|
+
| `export` | 以 JSON 備份、搬遷記憶,或在相容代理之間轉移 |
|
|
484
546
|
| `import` | 匯入記憶,包含合併策略(跳過 / 覆寫 / 追加) |
|
|
485
547
|
| `learn` | 記錄來自錯誤的結構化教訓(錯誤、根本原因、修復、預防) |
|
|
486
548
|
| `task_state` | 讀取或記下工作進度——目標、下一步、卡住的地方、剛完成的事 |
|
|
@@ -547,7 +609,7 @@ Session 開始時,有新版本可下載時會跳一行 banner(每版本每 2
|
|
|
547
609
|
```bash
|
|
548
610
|
git clone https://github.com/PCIRCLE-AI/memesh
|
|
549
611
|
cd memesh && npm install && npm run build
|
|
550
|
-
npm test
|
|
612
|
+
npm test
|
|
551
613
|
npm run test:e2e-dashboard
|
|
552
614
|
```
|
|
553
615
|
|