linksee-memory 0.2.0 โ 0.4.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.
- package/README.md +39 -13
- package/dist/bin/import-sessions.js +10 -4
- package/dist/db/migrate.js +98 -0
- package/dist/db/schema.sql +6 -4
- package/dist/lib/normalize.d.ts +25 -0
- package/dist/lib/normalize.js +43 -0
- package/dist/lib/session-extractor.js +164 -38
- package/dist/mcp/elicitation.d.ts +24 -0
- package/dist/mcp/elicitation.js +58 -0
- package/dist/mcp/prompts.d.ts +21 -0
- package/dist/mcp/prompts.js +201 -0
- package/dist/mcp/resources.d.ts +18 -0
- package/dist/mcp/resources.js +162 -0
- package/dist/mcp/roots.d.ts +10 -0
- package/dist/mcp/roots.js +64 -0
- package/dist/mcp/sampling.d.ts +16 -0
- package/dist/mcp/sampling.js +78 -0
- package/dist/mcp/server.js +273 -70
- package/dist/skill/SKILL.md +274 -17
- package/package.json +84 -71
package/dist/skill/SKILL.md
CHANGED
|
@@ -74,6 +74,103 @@ remember({
|
|
|
74
74
|
|
|
75
75
|
---
|
|
76
76
|
|
|
77
|
+
## ๐๏ธ 3-Axis Classification (v2) โ REQUIRED for all `remember()` calls
|
|
78
|
+
|
|
79
|
+
The 6-layer system tells you WHICH DRAWER. The 3-axis system tells you WHAT KIND of memory goes in it. Every `content` field must be a JSON string containing these 3 axes:
|
|
80
|
+
|
|
81
|
+
### Axis โ Altitude โ where in the abstraction hierarchy
|
|
82
|
+
|
|
83
|
+
| Level | Description | Survives |
|
|
84
|
+
|---|---|---|
|
|
85
|
+
| `mission` | Company/product-level direction ("KanseiLINK is the intelligence layer for the Agent Economy") | Permanent |
|
|
86
|
+
| `strategy` | Approach to achieving mission ("AEO-first, ๅผใๅบใใซใฟใญใฐ model") | Permanent |
|
|
87
|
+
| `architecture` | System design decisions ("2-layer: Memory=agent-optimized, Dashboard=human-optimized") | Long-lived |
|
|
88
|
+
| `implementation` | Specific code/config changes ("Added FTS5 trigram index") | Auto-archives after 30d if untouched |
|
|
89
|
+
|
|
90
|
+
### Axis โก Type โ what kind of information
|
|
91
|
+
|
|
92
|
+
| Type | Description |
|
|
93
|
+
|---|---|
|
|
94
|
+
| `question` | User asked something, answer pending or delivered |
|
|
95
|
+
| `comparison` | Multiple options analyzed (e.g., Stripe vs Square) |
|
|
96
|
+
| `decision` | A choice was made โ store agent_proposal + user_approval_scope |
|
|
97
|
+
| `work` | Code written, config changed, command run |
|
|
98
|
+
| `outcome` | Result of work (success/failure + what happened) |
|
|
99
|
+
| `learning` | Insight gained, prior belief updated |
|
|
100
|
+
| `note` | General context โ **chitchat = DISCARD, do NOT save** |
|
|
101
|
+
|
|
102
|
+
### Axis โข State โ lifecycle position
|
|
103
|
+
|
|
104
|
+
```
|
|
105
|
+
open โ decided โ in_progress โ done
|
|
106
|
+
โ stalled (blocked, can't proceed)
|
|
107
|
+
โ parked (intentionally paused)
|
|
108
|
+
โ superseded (replaced by newer decision)
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
---
|
|
112
|
+
|
|
113
|
+
## ๐ Structured Content Format โ the JSON schema for `content`
|
|
114
|
+
|
|
115
|
+
**Every `remember()` call MUST use this JSON format in the `content` field:**
|
|
116
|
+
|
|
117
|
+
```json
|
|
118
|
+
{
|
|
119
|
+
"title": "<one-line: WHAT this memory IS โ future-agent skims this>",
|
|
120
|
+
"altitude": "strategy",
|
|
121
|
+
"type": "decision",
|
|
122
|
+
"state": "decided",
|
|
123
|
+
"what": "<the actual content โ 5W1H extracted, NOT raw chat>",
|
|
124
|
+
"why": "<why this matters โ the reasoning>",
|
|
125
|
+
"affects": ["src/mcp/server.ts", "lib/db.ts"],
|
|
126
|
+
"next_action": "Implement the schema migration next session",
|
|
127
|
+
"supersedes_id": null,
|
|
128
|
+
"evidence_refs": [
|
|
129
|
+
{"type": "session", "id": "b78dc5ba", "label": "Architecture discussion"}
|
|
130
|
+
]
|
|
131
|
+
}
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
### Required fields (ALL memories)
|
|
135
|
+
|
|
136
|
+
| Field | Type | Description |
|
|
137
|
+
|---|---|---|
|
|
138
|
+
| `title` | string | One-line summary. Future agents read ONLY this when scanning. Make it specific: "freee OAuth 24h expiry caveat" not "OAuth issue" |
|
|
139
|
+
| `altitude` | enum | mission / strategy / architecture / implementation |
|
|
140
|
+
| `type` | enum | question / comparison / decision / work / outcome / learning |
|
|
141
|
+
| `state` | enum | open / decided / in_progress / done / stalled / parked / superseded |
|
|
142
|
+
| `what` | string | The semantic content. Extract 5W1H from conversation โ NEVER store raw chat like "ใใใ ใญใๅ
จ้จใใใใ" |
|
|
143
|
+
| `why` | string | Why this matters. Without this, future agents can't judge relevance |
|
|
144
|
+
|
|
145
|
+
### Required fields (DECISION type only)
|
|
146
|
+
|
|
147
|
+
| Field | Type | Description |
|
|
148
|
+
|---|---|---|
|
|
149
|
+
| `agent_proposal` | string | What the agent proposed (the full context the user was responding to) |
|
|
150
|
+
| `user_approval_scope` | string | What EXACTLY the user approved โ "ใใๅ
จ้จใใฃใฆ" โ translate to "approved all 6 panels of Agent Brain Dashboard including data layer, API route, and view component" |
|
|
151
|
+
|
|
152
|
+
### Optional but recommended fields
|
|
153
|
+
|
|
154
|
+
| Field | Type | Description |
|
|
155
|
+
|---|---|---|
|
|
156
|
+
| `affects` | string[] | File paths or areas this touches. Critical for future `recall_file` accuracy |
|
|
157
|
+
| `next_action` | string / null | What should happen next. Null if done/completed |
|
|
158
|
+
| `supersedes_id` | number / null | Memory ID this replaces (builds pivot chains) |
|
|
159
|
+
| `prior_belief` | string | What we used to think (for learnings โ enables belief-update tracking) |
|
|
160
|
+
| `evidence_refs` | object[] | Links to evidence: `{"type": "session"|"file"|"url", "id": "...", "label": "..."}`. Store as REFERENCES, never inline the full content |
|
|
161
|
+
|
|
162
|
+
### Content quality rules โ what NOT to save
|
|
163
|
+
|
|
164
|
+
| โ DO NOT | โ
INSTEAD |
|
|
165
|
+
|---|---|
|
|
166
|
+
| Store raw chat: `"ๆฑบใใใใใใงใใใ"` | Extract: `"Decided to use 2-layer architecture splitting Memory (agent-optimized) from Dashboard (human-optimized)"` |
|
|
167
|
+
| Store ambient chat: `"ๆธๆใง็ก็ณใฎใตใคใใผ้ฃฒใใงใ"` | Discard. Not a memory. |
|
|
168
|
+
| Store vague approval: `"ใใๅ
จ้จใใฃใฆ"` | Extract the SCOPE: `"Approved: (1) agent-brain data layer, (2) API route, (3) 6-panel view component implementation"` |
|
|
169
|
+
| Paste back assistant output as memory | Summarize the KEY INSIGHT from the output in YOUR words |
|
|
170
|
+
| Store without `why` | Always include WHY โ without it, memory is noise |
|
|
171
|
+
|
|
172
|
+
---
|
|
173
|
+
|
|
77
174
|
## ๐ Execution flow โ 5 canonical moments
|
|
78
175
|
|
|
79
176
|
### โ Task Start โ Always recall before starting work
|
|
@@ -113,6 +210,30 @@ From past caveat: "Watch out for MCP tool name collisions"
|
|
|
113
210
|
โ Before adding a new tool, check existing tool names first.
|
|
114
211
|
```
|
|
115
212
|
|
|
213
|
+
#### โก Writing effective recall queries
|
|
214
|
+
|
|
215
|
+
The recall engine uses FTS5 full-text search + heat_score ranking. Your query determines what comes back.
|
|
216
|
+
|
|
217
|
+
| Pattern | Query style | Example |
|
|
218
|
+
|---|---|---|
|
|
219
|
+
| Entity + topic | `"<entity> <topic keyword>"` | `"KanseiLink OAuth"` |
|
|
220
|
+
| Error recall | `"<error message core> <technology>"` | `"401 freee token expired"` |
|
|
221
|
+
| Decision recall | `"<entity> decided strategy approach"` | `"Linksee Memory plugin vs MCP"` |
|
|
222
|
+
| File-related | Use `recall_file` instead | `recall_file({ path_substring: "server.ts" })` |
|
|
223
|
+
| Cross-entity | Call recall TWICE for each entity | `recall({ query: "KanseiLink" })` then `recall({ query: "Linksee Memory" })` |
|
|
224
|
+
|
|
225
|
+
**Anti-patterns:**
|
|
226
|
+
- โ `recall({ query: "what happened" })` โ too vague, FTS5 matches everything
|
|
227
|
+
- โ `recall({ query: "the user said to fix the bug in the auth flow" })` โ natural language sentences score poorly in FTS5
|
|
228
|
+
- โ
`recall({ query: "auth bug fix caveat", layer: "caveat" })` โ keywords + layer filter = precise
|
|
229
|
+
|
|
230
|
+
#### ๐ When NOT to recall (save tokens)
|
|
231
|
+
|
|
232
|
+
- Same entity already recalled in this session AND no new context arrived โ **skip**
|
|
233
|
+
- User is just chatting / thinking aloud / no task yet โ **skip** (wait for concrete task)
|
|
234
|
+
- You just wrote a memory 2 turns ago โ **skip** (it's still in your context window)
|
|
235
|
+
- The answer is already in your conversation context โ **skip** (don't waste a tool call)
|
|
236
|
+
|
|
116
237
|
### โก File Edit โ Use recall_file before touching a file
|
|
117
238
|
|
|
118
239
|
Before touching a specific file, check its edit history:
|
|
@@ -168,7 +289,16 @@ mcp__linksee__remember({
|
|
|
168
289
|
entity_name: "<project name or service name>",
|
|
169
290
|
entity_kind: "project",
|
|
170
291
|
layer: "caveat",
|
|
171
|
-
content:
|
|
292
|
+
content: JSON.stringify({
|
|
293
|
+
title: "<one-line: what failed + the rule>",
|
|
294
|
+
altitude: "implementation",
|
|
295
|
+
type: "outcome",
|
|
296
|
+
state: "done",
|
|
297
|
+
what: "<what failed + workaround found>",
|
|
298
|
+
why: "<root cause analysis>",
|
|
299
|
+
affects: ["<file paths where the error occurred>"],
|
|
300
|
+
next_action: null
|
|
301
|
+
}),
|
|
172
302
|
importance: 0.8 // failures are high-importance
|
|
173
303
|
})
|
|
174
304
|
```
|
|
@@ -176,9 +306,15 @@ mcp__linksee__remember({
|
|
|
176
306
|
**Example**:
|
|
177
307
|
```json
|
|
178
308
|
{
|
|
179
|
-
"
|
|
180
|
-
"
|
|
181
|
-
"
|
|
309
|
+
"title": "freee OAuth token expires in 24h โ must refresh proactively",
|
|
310
|
+
"altitude": "implementation",
|
|
311
|
+
"type": "outcome",
|
|
312
|
+
"state": "done",
|
|
313
|
+
"what": "freee MCP OAuth token expires in 24 hours. Reusing access_token directly causes 401. Must call refresh_token endpoint proactively.",
|
|
314
|
+
"why": "freee's OAuth implementation uses short-lived tokens unlike most SaaS (usually 30-90 day expiry)",
|
|
315
|
+
"affects": ["src/integrations/freee/auth.ts"],
|
|
316
|
+
"next_action": null,
|
|
317
|
+
"evidence_refs": [{"type":"session", "id":"02759...", "label":"freee auth_expired incident"}]
|
|
182
318
|
}
|
|
183
319
|
```
|
|
184
320
|
|
|
@@ -193,7 +329,17 @@ mcp__linksee__remember({
|
|
|
193
329
|
entity_name: "<entity>",
|
|
194
330
|
entity_kind: "project | concept | ...",
|
|
195
331
|
layer: "learning",
|
|
196
|
-
content:
|
|
332
|
+
content: JSON.stringify({
|
|
333
|
+
title: "<one-line: what was learned>",
|
|
334
|
+
altitude: "<strategy|architecture|implementation>",
|
|
335
|
+
type: "learning",
|
|
336
|
+
state: "done",
|
|
337
|
+
what: "<the insight>",
|
|
338
|
+
why: "<why this changes how we work>",
|
|
339
|
+
prior_belief: "<what we used to think>",
|
|
340
|
+
affects: ["<file paths if applicable>"],
|
|
341
|
+
next_action: "<follow-up action if any>"
|
|
342
|
+
}),
|
|
197
343
|
importance: 0.7
|
|
198
344
|
})
|
|
199
345
|
```
|
|
@@ -211,6 +357,9 @@ Recording `prior_belief` leaves a **belief-update history**. Later, this becomes
|
|
|
211
357
|
3. **Prefer `read_smart` over `Read` for larger files**
|
|
212
358
|
4. **When an error occurs, record a `caveat` immediately** (on the spot โ don't defer)
|
|
213
359
|
5. **When the user is surprised or says "interesting", record a `learning`**
|
|
360
|
+
6. **Before risky/irreversible actions, proactively recall caveats** (Case H)
|
|
361
|
+
7. **Before finalizing a decision, check for prior decisions on the same topic** (Case D)
|
|
362
|
+
8. **Use keywords + layer filter in recall queries**, not natural language sentences
|
|
214
363
|
|
|
215
364
|
### โ Don't
|
|
216
365
|
|
|
@@ -219,6 +368,8 @@ Recording `prior_belief` leaves a **belief-update history**. Later, this becomes
|
|
|
219
368
|
3. โ Use `Read` everywhere instead of `read_smart` (wastes tokens)
|
|
220
369
|
4. โ Write caveats in a flippant tone โ preserve them seriously
|
|
221
370
|
5. โ Skip `consolidate` during long-running work โ run it weekly
|
|
371
|
+
6. โ Recall the same entity twice in one session without new context (wastes tokens)
|
|
372
|
+
7. โ Write `recall({ query: "what happened last time" })` โ use specific keywords
|
|
222
373
|
|
|
223
374
|
---
|
|
224
375
|
|
|
@@ -275,36 +426,104 @@ User: "Fix server.ts"
|
|
|
275
426
|
5. After editing, record success / failure via implementation layer
|
|
276
427
|
```
|
|
277
428
|
|
|
278
|
-
### Case D โ
|
|
429
|
+
### Case D โ Before finalizing a decision (pre-decision check)
|
|
430
|
+
|
|
431
|
+
User: "Let's switch to Stripe for payments"
|
|
432
|
+
|
|
433
|
+
**Key: BEFORE recording a decision, check if a past decision on the same topic exists. This prevents flip-flopping and builds on prior reasoning.**
|
|
434
|
+
|
|
435
|
+
```
|
|
436
|
+
1. recall({ query: "<entity> <topic> decided strategy", layer: "learning", max_tokens: 1000 })
|
|
437
|
+
โ Look for: type="decision", state="decided" memories on the same topic
|
|
438
|
+
2. If past decision found:
|
|
439
|
+
a. Tell user: "Previously we decided <X> because <reason>. Override?"
|
|
440
|
+
b. If user confirms override โ use supersedes_id to link to old decision
|
|
441
|
+
c. If user says "oh right, keep it" โ no new memory needed, proceed
|
|
442
|
+
3. If no past decision found โ proceed to record (see Case E below)
|
|
443
|
+
```
|
|
444
|
+
|
|
445
|
+
**Example**: Past memory says "Decided: Square over Stripe due to SG tax handling". When user now says "switch to Stripe", surface that context FIRST. The user may not remember the original reasoning.
|
|
446
|
+
|
|
447
|
+
### Case E โ Decision made (recording)
|
|
279
448
|
|
|
280
449
|
User: "Alright, let's switch to Sonnet"
|
|
281
450
|
|
|
451
|
+
**Key: capture WHAT was decided, WHY, and what the user was responding to โ not the raw chat.**
|
|
452
|
+
|
|
282
453
|
```
|
|
283
454
|
1. remember({
|
|
284
455
|
entity_name: "<project>",
|
|
285
456
|
entity_kind: "project",
|
|
286
457
|
layer: "learning",
|
|
287
|
-
content:
|
|
458
|
+
content: JSON.stringify({
|
|
459
|
+
title: "Model switch: Opus โ Sonnet for this project",
|
|
460
|
+
altitude: "architecture",
|
|
461
|
+
type: "decision",
|
|
462
|
+
state: "decided",
|
|
463
|
+
what: "Switched default model from Opus to Sonnet for this project",
|
|
464
|
+
why: "Sonnet is faster and cheaper for implementation-heavy work; Opus reserved for architecture decisions",
|
|
465
|
+
agent_proposal: "Suggested Sonnet for faster iteration on implementation tasks",
|
|
466
|
+
user_approval_scope: "Approved switching default model to Sonnet for all tasks in this project",
|
|
467
|
+
prior_belief: "Was using Opus for everything",
|
|
468
|
+
affects: [".claude/settings.json"],
|
|
469
|
+
next_action: null
|
|
470
|
+
}),
|
|
288
471
|
importance: 0.8
|
|
289
472
|
})
|
|
290
473
|
2. Brief confirmation: "Recorded."
|
|
291
474
|
3. From here, proceed assuming Sonnet
|
|
292
475
|
```
|
|
293
476
|
|
|
294
|
-
### Case
|
|
477
|
+
### Case F โ End of long session
|
|
295
478
|
|
|
296
479
|
User: "That's it for today"
|
|
297
480
|
|
|
481
|
+
**Key: extract the SEMANTIC decisions and outcomes, not raw chat dumps.**
|
|
482
|
+
|
|
298
483
|
```
|
|
299
|
-
1.
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
484
|
+
1. For each major decision made during the session:
|
|
485
|
+
remember({
|
|
486
|
+
entity_name: "<project>",
|
|
487
|
+
entity_kind: "project",
|
|
488
|
+
layer: "learning",
|
|
489
|
+
content: JSON.stringify({
|
|
490
|
+
title: "<one-line: what was decided>",
|
|
491
|
+
altitude: "<strategy|architecture|implementation>",
|
|
492
|
+
type: "decision",
|
|
493
|
+
state: "decided",
|
|
494
|
+
what: "<5W1H extraction of the decision>",
|
|
495
|
+
why: "<reasoning behind it>",
|
|
496
|
+
agent_proposal: "<what you proposed>",
|
|
497
|
+
user_approval_scope: "<what exactly user approved>",
|
|
498
|
+
affects: ["<file paths>"],
|
|
499
|
+
next_action: "<what's next>",
|
|
500
|
+
evidence_refs: [{"type":"session", "id":"<current_session_id>", "label":"<topic>"}]
|
|
501
|
+
}),
|
|
502
|
+
importance: 0.85
|
|
503
|
+
})
|
|
504
|
+
|
|
505
|
+
2. For each failure/lesson:
|
|
506
|
+
remember({
|
|
507
|
+
...,
|
|
508
|
+
layer: "caveat",
|
|
509
|
+
content: JSON.stringify({
|
|
510
|
+
title: "<one-line: what went wrong and the fix>",
|
|
511
|
+
altitude: "implementation",
|
|
512
|
+
type: "outcome",
|
|
513
|
+
state: "done",
|
|
514
|
+
what: "<what failed + workaround found>",
|
|
515
|
+
why: "<root cause>",
|
|
516
|
+
affects: ["<file paths>"],
|
|
517
|
+
next_action: null
|
|
518
|
+
}),
|
|
519
|
+
importance: 0.8
|
|
520
|
+
})
|
|
521
|
+
|
|
522
|
+
3. Report: "Recorded N decisions, M caveats. Retrievable via recall."
|
|
523
|
+
4. Optionally suggest: consolidate({scope:"session", min_age_days: 14})
|
|
305
524
|
```
|
|
306
525
|
|
|
307
|
-
### Case
|
|
526
|
+
### Case G โ User explicitly says "remember this"
|
|
308
527
|
|
|
309
528
|
User: "Remember this: DocuSign is more stable than CloudSign"
|
|
310
529
|
|
|
@@ -313,12 +532,50 @@ User: "Remember this: DocuSign is more stable than CloudSign"
|
|
|
313
532
|
entity_name: "CloudSign vs DocuSign",
|
|
314
533
|
entity_kind: "concept",
|
|
315
534
|
layer: "caveat",
|
|
316
|
-
content:
|
|
535
|
+
content: JSON.stringify({
|
|
536
|
+
title: "DocuSign-JP >> CloudSign for reliability",
|
|
537
|
+
altitude: "strategy",
|
|
538
|
+
type: "comparison",
|
|
539
|
+
state: "decided",
|
|
540
|
+
what: "CloudSign (61% success) is significantly less reliable than DocuSign-JP (100% success). Recommend DocuSign when advising customers.",
|
|
541
|
+
why: "Based on KanseiLINK agent success rate data across multiple integrations",
|
|
542
|
+
affects: [],
|
|
543
|
+
next_action: null
|
|
544
|
+
}),
|
|
317
545
|
importance: 0.9 // user-explicit instruction = high priority
|
|
318
546
|
})
|
|
319
547
|
2. Confirm: "Recorded. Since it's in the caveat layer, it won't be forgotten."
|
|
320
548
|
```
|
|
321
549
|
|
|
550
|
+
### Case H โ Proactive caveat surfacing (the "้้ใใใใใฐใ" pattern)
|
|
551
|
+
|
|
552
|
+
**This is the precision memory killer feature.** When you're about to take an action that could go wrong, check for past caveats BEFORE acting โ even if the user didn't ask.
|
|
553
|
+
|
|
554
|
+
**Trigger**: You are about to do something risky or irreversible:
|
|
555
|
+
- Deploy / publish / push to production
|
|
556
|
+
- Delete / overwrite / destructive operation
|
|
557
|
+
- External API call (payment, email send, etc.)
|
|
558
|
+
- Architecture change affecting multiple files
|
|
559
|
+
- Changing auth/security configuration
|
|
560
|
+
|
|
561
|
+
```
|
|
562
|
+
1. recall({ query: "<entity> <action keyword>", layer: "caveat", max_tokens: 800 })
|
|
563
|
+
2. If caveat found:
|
|
564
|
+
a. STOP before acting
|
|
565
|
+
b. Tell user: "โ ๏ธ Past caveat: <title>. <what>. Proceed anyway?"
|
|
566
|
+
c. Wait for confirmation
|
|
567
|
+
3. If no caveat โ proceed normally
|
|
568
|
+
```
|
|
569
|
+
|
|
570
|
+
**Example**: About to run `npm publish`:
|
|
571
|
+
```
|
|
572
|
+
recall({ query: "npm publish", layer: "caveat", max_tokens: 500 })
|
|
573
|
+
โ Caveat found: "npm token rotation โ always verify token validity before publish"
|
|
574
|
+
โ "โ ๏ธ Past caveat: npm token may need rotation. Want me to check `npm whoami` first?"
|
|
575
|
+
```
|
|
576
|
+
|
|
577
|
+
**Why this matters**: This is what separates precision memory from ambient memory. Ambient memory passively injects everything. Precision memory **actively intervenes at the moment it matters most** โ when you're about to make the same mistake twice.
|
|
578
|
+
|
|
322
579
|
---
|
|
323
580
|
|
|
324
581
|
## ๐ Privacy (when the user asks)
|
|
@@ -368,7 +625,7 @@ Now you have both bodies of knowledge before starting
|
|
|
368
625
|
|
|
369
626
|
---
|
|
370
627
|
|
|
371
|
-
*This skill runs on top of linksee-memory MCP v0.
|
|
628
|
+
*This skill runs on top of linksee-memory MCP v0.4.0+.*
|
|
372
629
|
*Auto-write via Stop hook, explicit read via recall.*
|
|
373
630
|
*Listed in MCP Official Registry, PulseMCP, mcpservers.org, Glama.*
|
|
374
631
|
*MIT License โ Synapse Arrows PTE. LTD.*
|
package/package.json
CHANGED
|
@@ -1,71 +1,84 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "linksee-memory",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"mcpName": "io.github.michielinksee/linksee-memory",
|
|
5
|
-
"description": "Local-first agent memory MCP โ cross-agent brain with 6-layer structured memory + token-saving file diff cache",
|
|
6
|
-
"type": "module",
|
|
7
|
-
"bin": {
|
|
8
|
-
"linksee-memory": "dist/mcp/server.js",
|
|
9
|
-
"linksee-memory-import": "dist/bin/import-sessions.js",
|
|
10
|
-
"linksee-memory-sync": "dist/bin/sync-session.js",
|
|
11
|
-
"linksee-memory-install-skill": "dist/bin/install-skill.js",
|
|
12
|
-
"linksee-memory-stats": "dist/bin/stats.js"
|
|
13
|
-
},
|
|
14
|
-
"main": "./dist/mcp/server.js",
|
|
15
|
-
"files": [
|
|
16
|
-
"dist/**/*.js",
|
|
17
|
-
"dist/**/*.d.ts",
|
|
18
|
-
"dist/db/schema.sql",
|
|
19
|
-
"dist/skill/SKILL.md",
|
|
20
|
-
"README.md",
|
|
21
|
-
"LICENSE"
|
|
22
|
-
],
|
|
23
|
-
"scripts": {
|
|
24
|
-
"build": "tsc && node -e \"require('fs').copyFileSync('src/db/schema.sql','dist/db/schema.sql'); require('fs').mkdirSync('dist/skill',{recursive:true}); require('fs').copyFileSync('src/skill/SKILL.md','dist/skill/SKILL.md')\"",
|
|
25
|
-
"start": "node dist/mcp/server.js",
|
|
26
|
-
"dev": "tsx src/mcp/server.ts",
|
|
27
|
-
"migrate": "node dist/db/migrate.js",
|
|
28
|
-
"migrate:dev": "tsx src/db/migrate.ts",
|
|
29
|
-
"prepublishOnly": "npm run build"
|
|
30
|
-
},
|
|
31
|
-
"keywords": [
|
|
32
|
-
"mcp",
|
|
33
|
-
"model-context-protocol",
|
|
34
|
-
"memory",
|
|
35
|
-
"agent",
|
|
36
|
-
"agent-memory",
|
|
37
|
-
"claude",
|
|
38
|
-
"claude-code",
|
|
39
|
-
"cursor",
|
|
40
|
-
"chatgpt",
|
|
41
|
-
"sqlite",
|
|
42
|
-
"local-first",
|
|
43
|
-
"token-savings",
|
|
44
|
-
"cross-agent"
|
|
45
|
-
],
|
|
46
|
-
"author": "Synapse Arrows PTE. LTD.",
|
|
47
|
-
"license": "MIT",
|
|
48
|
-
"homepage": "https://github.com/michielinksee/linksee-memory",
|
|
49
|
-
"repository": {
|
|
50
|
-
"type": "git",
|
|
51
|
-
"url": "git+https://github.com/michielinksee/linksee-memory.git"
|
|
52
|
-
},
|
|
53
|
-
"bugs": {
|
|
54
|
-
"url": "https://github.com/michielinksee/linksee-memory/issues"
|
|
55
|
-
},
|
|
56
|
-
"dependencies": {
|
|
57
|
-
"@babel/parser": "^7.25.0",
|
|
58
|
-
"@modelcontextprotocol/sdk": "^1.0.0",
|
|
59
|
-
"better-sqlite3": "^
|
|
60
|
-
"sqlite-vec": "^0.1.6"
|
|
61
|
-
},
|
|
62
|
-
"devDependencies": {
|
|
63
|
-
"@types/better-sqlite3": "^7.6.11",
|
|
64
|
-
"@types/node": "^22.7.0",
|
|
65
|
-
"tsx": "^4.19.0",
|
|
66
|
-
"typescript": "^5.6.0"
|
|
67
|
-
},
|
|
68
|
-
"engines": {
|
|
69
|
-
"node": ">=20"
|
|
70
|
-
}
|
|
71
|
-
|
|
1
|
+
{
|
|
2
|
+
"name": "linksee-memory",
|
|
3
|
+
"version": "0.4.0",
|
|
4
|
+
"mcpName": "io.github.michielinksee/linksee-memory",
|
|
5
|
+
"description": "Local-first agent memory MCP โ cross-agent brain with 6-layer structured memory + token-saving file diff cache",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"bin": {
|
|
8
|
+
"linksee-memory": "dist/mcp/server.js",
|
|
9
|
+
"linksee-memory-import": "dist/bin/import-sessions.js",
|
|
10
|
+
"linksee-memory-sync": "dist/bin/sync-session.js",
|
|
11
|
+
"linksee-memory-install-skill": "dist/bin/install-skill.js",
|
|
12
|
+
"linksee-memory-stats": "dist/bin/stats.js"
|
|
13
|
+
},
|
|
14
|
+
"main": "./dist/mcp/server.js",
|
|
15
|
+
"files": [
|
|
16
|
+
"dist/**/*.js",
|
|
17
|
+
"dist/**/*.d.ts",
|
|
18
|
+
"dist/db/schema.sql",
|
|
19
|
+
"dist/skill/SKILL.md",
|
|
20
|
+
"README.md",
|
|
21
|
+
"LICENSE"
|
|
22
|
+
],
|
|
23
|
+
"scripts": {
|
|
24
|
+
"build": "tsc && node -e \"require('fs').copyFileSync('src/db/schema.sql','dist/db/schema.sql'); require('fs').mkdirSync('dist/skill',{recursive:true}); require('fs').copyFileSync('src/skill/SKILL.md','dist/skill/SKILL.md')\"",
|
|
25
|
+
"start": "node dist/mcp/server.js",
|
|
26
|
+
"dev": "tsx src/mcp/server.ts",
|
|
27
|
+
"migrate": "node dist/db/migrate.js",
|
|
28
|
+
"migrate:dev": "tsx src/db/migrate.ts",
|
|
29
|
+
"prepublishOnly": "npm run build"
|
|
30
|
+
},
|
|
31
|
+
"keywords": [
|
|
32
|
+
"mcp",
|
|
33
|
+
"model-context-protocol",
|
|
34
|
+
"memory",
|
|
35
|
+
"agent",
|
|
36
|
+
"agent-memory",
|
|
37
|
+
"claude",
|
|
38
|
+
"claude-code",
|
|
39
|
+
"cursor",
|
|
40
|
+
"chatgpt",
|
|
41
|
+
"sqlite",
|
|
42
|
+
"local-first",
|
|
43
|
+
"token-savings",
|
|
44
|
+
"cross-agent"
|
|
45
|
+
],
|
|
46
|
+
"author": "Synapse Arrows PTE. LTD.",
|
|
47
|
+
"license": "MIT",
|
|
48
|
+
"homepage": "https://github.com/michielinksee/linksee-memory",
|
|
49
|
+
"repository": {
|
|
50
|
+
"type": "git",
|
|
51
|
+
"url": "git+https://github.com/michielinksee/linksee-memory.git"
|
|
52
|
+
},
|
|
53
|
+
"bugs": {
|
|
54
|
+
"url": "https://github.com/michielinksee/linksee-memory/issues"
|
|
55
|
+
},
|
|
56
|
+
"dependencies": {
|
|
57
|
+
"@babel/parser": "^7.25.0",
|
|
58
|
+
"@modelcontextprotocol/sdk": "^1.0.0",
|
|
59
|
+
"better-sqlite3": "^12.9.0",
|
|
60
|
+
"sqlite-vec": "^0.1.6"
|
|
61
|
+
},
|
|
62
|
+
"devDependencies": {
|
|
63
|
+
"@types/better-sqlite3": "^7.6.11",
|
|
64
|
+
"@types/node": "^22.7.0",
|
|
65
|
+
"tsx": "^4.19.0",
|
|
66
|
+
"typescript": "^5.6.0"
|
|
67
|
+
},
|
|
68
|
+
"engines": {
|
|
69
|
+
"node": ">=20"
|
|
70
|
+
},
|
|
71
|
+
"overrides": {
|
|
72
|
+
"ip-address": "^10.2.0",
|
|
73
|
+
"hono": "^4.12.18"
|
|
74
|
+
},
|
|
75
|
+
"pnpm": {
|
|
76
|
+
"onlyBuiltDependencies": [
|
|
77
|
+
"better-sqlite3"
|
|
78
|
+
],
|
|
79
|
+
"overrides": {
|
|
80
|
+
"ip-address": "^10.2.0",
|
|
81
|
+
"hono": "^4.12.18"
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|