hmem-mcp 1.2.0 → 1.6.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 CHANGED
@@ -56,16 +56,44 @@ write_memory(prefix="L", content="Always restart MCP server after recompiling Ty
56
56
  On spawn, the agent receives all Level 1 summaries. Deeper levels are fetched on demand — by ID, one branch at a time.
57
57
 
58
58
  ```
59
- read_memory() # → all L1 summaries (~20 tokens)
59
+ read_memory() # → all L1 summaries
60
60
  read_memory(id="L0003") # → L1 + direct L2 children for this entry
61
61
  read_memory(id="L0003.2") # → that L2 node + its L3 children
62
62
  ```
63
63
 
64
64
  Each node gets a compound ID (`L0003.2.1`) so any branch is individually addressable.
65
65
 
66
+ ### Updating Memory
67
+
68
+ Entries can be updated without deleting and recreating them:
69
+
70
+ ```
71
+ update_memory(id="L0003", content="Corrected L1 summary")
72
+ update_memory(id="L0003.2", content="Fixed sub-node text")
73
+ append_memory(id="L0003", content="New finding\n\tSub-detail")
74
+ ```
75
+
76
+ `update_memory` replaces the text of a single node (children preserved). `append_memory` adds new child nodes to an existing entry.
77
+
78
+ ### Obsolete Entries
79
+
80
+ When an entry is outdated, mark it as obsolete — never delete it:
81
+
82
+ ```
83
+ update_memory(id="E0023", content="...", obsolete=true)
84
+ ```
85
+
86
+ Obsolete entries are **hidden from bulk reads** and replaced by a summary line at the bottom:
87
+
88
+ ```
89
+ --- 3 obsolete entries hidden (E0023, D0007, L0012) — use read_memory(id=X) to view ---
90
+ ```
91
+
92
+ They remain fully searchable and accessible by ID. Past errors still teach future agents what not to do — knowledge is never destroyed, only archived.
93
+
66
94
  ### Memory Curation
67
95
 
68
- A dedicated curator agent runs periodically to maintain memory health. It tracks retrieval counts per entry, promotes frequently accessed memories, and prunes rarely accessed ones — a form of the Ebbinghaus Forgetting Curve.
96
+ A dedicated curator agent runs periodically to maintain memory health. It detects duplicates, merges fragmented entries, marks stale pointers, and prunes low-value content — a form of the Ebbinghaus Forgetting Curve.
69
97
 
70
98
  ---
71
99
 
@@ -74,9 +102,14 @@ A dedicated curator agent runs periodically to maintain memory health. It tracks
74
102
  - **Hierarchical retrieval** — lazy loading of detail levels saves tokens
75
103
  - **True tree structure** — multiple siblings at the same depth (not just one chain)
76
104
  - **Persistent across sessions** — agents remember previous work even after restart
105
+ - **Editable without deletion** — `update_memory` and `append_memory` modify entries in place
106
+ - **Obsolete flag** — mark outdated entries as obsolete; hidden from bulk reads but still searchable — knowledge is never destroyed, only archived
107
+ - **Favorite flag** — mark any entry as `[♥]` to always see it with L2 detail, regardless of category
108
+ - **Access-count promotion** — the top-N most-accessed entries are automatically shown with L2 detail (`[★]`)
109
+ - **Effective-date sorting** — entries with recent appends surface to the top (old P entries grow over time without losing their position)
110
+ - **Token-efficient bulk reads** — only the most recent L2 child is shown in bulk reads, with a "+N more" hint
77
111
  - **Per-agent memory** — each agent has its own `.hmem` file (SQLite)
78
112
  - **Shared company knowledge** — `FIRMENWISSEN` store with role-based access control
79
- - **Retrieval counting** — built-in importance scoring based on access frequency
80
113
  - **Skill-file driven** — agents are instructed via skill files, no hardcoded logic
81
114
  - **MCP-native** — works with Claude Code, Gemini CLI, OpenCode, and any MCP-compatible tool
82
115
 
@@ -173,24 +206,33 @@ In Claude Code, run `/mcp` to check the server status.
173
206
 
174
207
  ## Skill Files
175
208
 
176
- Skill files teach your AI tool how to use hmem correctly. Copy them to your tool's global skills directory.
177
-
178
- > **Note:** `hmem init` copies skills automatically. Only use the manual steps below if you skipped the installer.
209
+ Skill files teach your AI tool how to use hmem correctly. Copy them to your tool's global skills directory, then restart your AI tool.
179
210
 
180
211
  > **After copying skills, fully restart your terminal and AI tool** — skills are loaded at startup and won't appear in a running session.
181
212
 
182
- If you installed via npm, find the skills in the package directory:
213
+ ### Available skills
214
+
215
+ | Slash command | What it does |
216
+ |---|---|
217
+ | `/hmem-read` | Load your memory at session start — call at the beginning of every session |
218
+ | `/hmem-write` | Protocol for writing memories correctly (prefixes, hierarchy, anti-patterns) |
219
+ | `/hmem-save` | Save session learnings to memory, then commit + push |
220
+ | `/hmem-config` | View and adjust memory settings (`hmem.config.json`) interactively |
221
+ | `/hmem-curate` | Audit and clean up memory entries (curator role required) |
222
+
223
+ ### Copy skills to your tool
224
+
225
+ Find the skills directory in the installed package:
183
226
 
184
227
  ```bash
185
- HMEM_DIR="$(npm root -g)/hmem" # global install
186
- # or: HMEM_DIR="$(dirname $(realpath $(which hmem)))"
228
+ HMEM_DIR="$(npm root -g)/hmem-mcp"
187
229
  ```
188
230
 
189
231
  If you cloned from source, the skills are in the `skills/` directory.
190
232
 
191
233
  **Claude Code:**
192
234
  ```bash
193
- for skill in hmem-read hmem-write save memory-curate; do
235
+ for skill in hmem-read hmem-write hmem-save hmem-config hmem-curate; do
194
236
  mkdir -p ~/.claude/skills/$skill
195
237
  cp "$HMEM_DIR/skills/$skill/SKILL.md" ~/.claude/skills/$skill/SKILL.md
196
238
  done
@@ -198,7 +240,7 @@ done
198
240
 
199
241
  **Gemini CLI:**
200
242
  ```bash
201
- for skill in hmem-read hmem-write save memory-curate; do
243
+ for skill in hmem-read hmem-write hmem-save hmem-config hmem-curate; do
202
244
  mkdir -p ~/.gemini/skills/$skill
203
245
  cp "$HMEM_DIR/skills/$skill/SKILL.md" ~/.gemini/skills/$skill/SKILL.md
204
246
  done
@@ -206,7 +248,7 @@ done
206
248
 
207
249
  **OpenCode:**
208
250
  ```bash
209
- for skill in hmem-read hmem-write save memory-curate; do
251
+ for skill in hmem-read hmem-write hmem-save hmem-config hmem-curate; do
210
252
  mkdir -p ~/.config/opencode/skills/$skill
211
253
  cp "$HMEM_DIR/skills/$skill/SKILL.md" ~/.config/opencode/skills/$skill/SKILL.md
212
254
  done
@@ -222,6 +264,8 @@ done
222
264
  |------|-------------|
223
265
  | `read_memory` | Read hierarchical memories — L1 summaries or drill into any node by ID |
224
266
  | `write_memory` | Save new memory entries with tab-indented hierarchy |
267
+ | `update_memory` | Update the text of an existing entry or sub-node (children preserved) |
268
+ | `append_memory` | Append new child nodes to an existing entry without overwriting it |
225
269
  | `search_memory` | Full-text search across all agent `.hmem` databases |
226
270
 
227
271
  ### Curator Tools (role: ceo)
@@ -230,8 +274,9 @@ done
230
274
  |------|-------------|
231
275
  | `get_audit_queue` | List agents whose memory has changed since last audit |
232
276
  | `read_agent_memory` | Read any agent's full memory (for curation) |
233
- | `fix_agent_memory` | Correct a specific memory entry |
234
- | `delete_agent_memory` | Delete a memory entry (use sparingly) |
277
+ | `fix_agent_memory` | Correct a specific entry or sub-node in any agent's memory |
278
+ | `append_agent_memory` | Add content to an existing entry in any agent's memory (for merging duplicates) |
279
+ | `delete_agent_memory` | Delete a memory entry (prefer `fix_agent_memory(obsolete=true)` — deletion is permanent) |
235
280
  | `mark_audited` | Mark an agent as audited |
236
281
 
237
282
  ---
@@ -289,41 +334,70 @@ Place an optional `hmem.config.json` in your `HMEM_PROJECT_DIR` to tune behavior
289
334
  "maxL1Chars": 120,
290
335
  "maxLnChars": 50000,
291
336
  "maxDepth": 5,
292
- "defaultReadLimit": 100,
337
+ "accessCountTopN": 5,
293
338
  "recentDepthTiers": [
294
339
  { "count": 10, "depth": 2 },
295
340
  { "count": 3, "depth": 3 }
296
341
  ],
297
342
  "prefixes": {
298
- "P": "Project",
299
- "L": "Lesson",
300
- "T": "Task",
301
- "E": "Error",
302
- "D": "Decision",
303
- "M": "Milestone",
304
- "S": "Skill",
305
- "F": "Favorite"
343
+ "R": "Research"
306
344
  }
307
345
  }
308
346
  ```
309
347
 
310
- ### Custom prefixes
348
+ ### Memory prefixes
311
349
 
312
- The default prefixes (P, L, T, E, D, M, S, F) cover most use cases. To add your own, add entries to the `"prefixes"` key:
350
+ The default prefixes cover most use cases:
351
+
352
+ | Prefix | Category | When to use |
353
+ |--------|----------|-------------|
354
+ | `P` | Project | Project experiences, summaries |
355
+ | `L` | Lesson | Lessons learned, best practices |
356
+ | `E` | Error | Bugs, errors + their fix |
357
+ | `D` | Decision | Architecture decisions with reasoning |
358
+ | `T` | Task | Task notes, work progress |
359
+ | `M` | Milestone | Key milestones, releases |
360
+ | `S` | Skill | Skills, processes, how-to guides |
361
+ | `N` | Navigator | Code pointers — where something lives in the codebase |
362
+
363
+ To add your own, add entries to the `"prefixes"` key in `hmem.config.json`. Custom prefixes are **merged** with the defaults — you don't need to repeat the built-in ones.
364
+
365
+ ### Favorites
366
+
367
+ Any entry can be marked as a **favorite** — regardless of its prefix category. Favorites always appear with their L2 detail in bulk reads, marked with `[♥]`.
368
+
369
+ ```
370
+ write_memory(prefix="D", content="...", favorite=true) # set at creation
371
+ update_memory(id="D0010", content="...", favorite=true) # set on existing entry
372
+ update_memory(id="D0010", content="...", favorite=false) # clear the flag
373
+ ```
374
+
375
+ Use favorites for reference info you need to see every session — key decisions, API endpoints, frequently consulted patterns. Use sparingly: if everything is a favorite, nothing is.
376
+
377
+ ### Access-count auto-promotion (`accessCountTopN`)
378
+
379
+ The top-N most-accessed entries are automatically promoted to L2 depth in bulk reads, marked with `[★]`. This creates "organic favorites" — entries that proved important in practice rise to the surface automatically.
313
380
 
314
381
  ```json
315
- {
316
- "prefixes": {
317
- "R": "Research",
318
- "B": "Bookmark",
319
- "Q": "Question"
320
- }
321
- }
382
+ { "accessCountTopN": 5 }
322
383
  ```
323
384
 
324
- Custom prefixes are **merged** with the defaults — you don't need to repeat the built-in ones. After adding prefixes, restart your AI tool so the MCP server picks up the new config.
385
+ Set to `0` to disable. Default: `5`.
386
+
387
+ | Mechanism | When useful |
388
+ |---|---|
389
+ | **favorite flag** | Entries you know are important from day 1 — even with zero access history |
390
+ | **accessCountTopN** | Entries that proved important over time — emerges from actual usage |
391
+
392
+ ### Token-efficient bulk reads
393
+
394
+ In a default `read_memory()` call, each entry shows only its **most recently added** L2 child (with that child's timestamp). A `+N more` hint indicates when additional L2 nodes exist. This keeps the bulk output compact while remaining discoverable.
395
+
396
+ To see all children of an entry, use `read_memory(id="P0005")`.
397
+
398
+ ### Effective-date sorting
325
399
 
326
- **Note:** Favorites (F) are special they are always loaded with L2 detail, regardless of recency position.
400
+ Entries are sorted by `effective_date` — the most recent timestamp across the entry and all its nodes. This means a project entry (`P0005`) that was first written months ago but had a new session note appended today will appear near the top of the listing, alongside truly recent entries.
327
401
 
328
402
  ### Character limits
329
403
 
@@ -365,7 +439,7 @@ Result:
365
439
 
366
440
  This mirrors how human memory works: you remember today's events in full detail, last week's in outline, older ones only as headlines.
367
441
 
368
- Set to `[]` to disable recency inlining (L1-only for all entries, same as before v1.1).
442
+ Set to `[]` to disable recency inlining (L1-only for all entries).
369
443
 
370
444
  **Backward compat:** The old `"recentChildrenCount": N` key is still accepted and treated as `[{ "count": N, "depth": 2 }]`.
371
445
 
package/dist/cli-init.js CHANGED
@@ -21,6 +21,14 @@ const TOOLS = {
21
21
  projectFile: ".mcp.json",
22
22
  format: "standard",
23
23
  detect: () => fs.existsSync(path.join(HOME, ".claude")),
24
+ globalInstructions: {
25
+ path: path.join(HOME, ".claude", "CLAUDE.md"),
26
+ mode: "append",
27
+ },
28
+ projectInstructions: {
29
+ path: "CLAUDE.md",
30
+ mode: "append",
31
+ },
24
32
  },
25
33
  "opencode": {
26
34
  name: "OpenCode",
@@ -30,6 +38,10 @@ const TOOLS = {
30
38
  projectFile: "opencode.json",
31
39
  format: "opencode",
32
40
  detect: () => fs.existsSync(path.join(HOME, ".config", "opencode")),
41
+ // OpenCode reads CLAUDE.md as fallback — skip to avoid duplicate writes
42
+ globalInstructions: null,
43
+ projectInstructions: null,
44
+ instructionsManual: "OpenCode reads CLAUDE.md automatically — no separate file needed.",
33
45
  },
34
46
  "cursor": {
35
47
  name: "Cursor",
@@ -39,6 +51,14 @@ const TOOLS = {
39
51
  projectFile: "mcp.json",
40
52
  format: "standard",
41
53
  detect: () => fs.existsSync(path.join(HOME, ".cursor")),
54
+ // Cursor has no global instructions file — only GUI (Settings > Rules)
55
+ globalInstructions: null,
56
+ projectInstructions: {
57
+ path: path.join(".cursor", "rules", "hmem.mdc"),
58
+ mode: "standalone",
59
+ },
60
+ instructionsManual: "Cursor: add the following to Settings → Rules (cursor.com/settings):\n" +
61
+ " \"At the start of every session, call read_memory() to load your long-term memory.\"",
42
62
  },
43
63
  "windsurf": {
44
64
  name: "Windsurf",
@@ -47,8 +67,16 @@ const TOOLS = {
47
67
  projectDir: ".windsurf",
48
68
  projectFile: "mcp.json",
49
69
  format: "standard",
50
- detect: () => fs.existsSync(path.join(HOME, ".codeium", "windsurf"))
51
- || fs.existsSync(path.join(HOME, ".windsurf")),
70
+ detect: () => fs.existsSync(path.join(HOME, ".codeium", "windsurf")) ||
71
+ fs.existsSync(path.join(HOME, ".windsurf")),
72
+ globalInstructions: {
73
+ path: path.join(HOME, ".codeium", "windsurf", "memories", "global_rules.md"),
74
+ mode: "append",
75
+ },
76
+ projectInstructions: {
77
+ path: path.join(".windsurf", "rules", "hmem.md"),
78
+ mode: "standalone",
79
+ },
52
80
  },
53
81
  "cline": {
54
82
  name: "Cline / Roo Code (VS Code)",
@@ -58,6 +86,16 @@ const TOOLS = {
58
86
  projectFile: "mcp.json",
59
87
  format: "standard",
60
88
  detect: () => fs.existsSync(path.join(HOME, ".vscode")),
89
+ // Cline: ~/Documents/Cline/Rules/ | Roo Code: ~/.roo/rules/
90
+ // Both are directory-based → create a dedicated hmem.md file in each
91
+ globalInstructions: {
92
+ path: path.join(HOME, "Documents", "Cline", "Rules", "hmem.md"),
93
+ mode: "standalone",
94
+ },
95
+ projectInstructions: {
96
+ path: path.join(".clinerules", "hmem.md"),
97
+ mode: "standalone",
98
+ },
61
99
  },
62
100
  "gemini-cli": {
63
101
  name: "Gemini CLI",
@@ -67,8 +105,58 @@ const TOOLS = {
67
105
  projectFile: "settings.json",
68
106
  format: "standard",
69
107
  detect: () => fs.existsSync(path.join(HOME, ".gemini")),
108
+ globalInstructions: {
109
+ path: path.join(HOME, ".gemini", "GEMINI.md"),
110
+ mode: "append",
111
+ },
112
+ projectInstructions: {
113
+ path: "GEMINI.md",
114
+ mode: "append",
115
+ },
70
116
  },
71
117
  };
118
+ // ---- Instructions content ----
119
+ const HMEM_MARKER = "## hmem — Persistent Memory";
120
+ const HMEM_APPEND_SECTION = `
121
+
122
+ ## hmem — Persistent Memory
123
+
124
+ At the start of every session, call \`read_memory()\` to load your long-term memory before doing anything else.
125
+ `;
126
+ const HMEM_STANDALONE_CONTENT = `# hmem — Persistent Memory
127
+
128
+ At the start of every session, call \`read_memory()\` to load your long-term memory before doing anything else.
129
+ `;
130
+ /**
131
+ * Writes hmem instructions to a file.
132
+ * - append mode: appends a section to an existing file; skips if already present.
133
+ * - standalone mode: creates a dedicated file; skips if already exists.
134
+ * Returns "created" | "updated" | "skipped".
135
+ */
136
+ function writeInstructions(target) {
137
+ const dir = path.dirname(target.path);
138
+ if (!fs.existsSync(dir)) {
139
+ fs.mkdirSync(dir, { recursive: true });
140
+ }
141
+ if (target.mode === "standalone") {
142
+ if (fs.existsSync(target.path))
143
+ return "skipped";
144
+ fs.writeFileSync(target.path, HMEM_STANDALONE_CONTENT, "utf-8");
145
+ return "created";
146
+ }
147
+ // append mode
148
+ if (fs.existsSync(target.path)) {
149
+ const content = fs.readFileSync(target.path, "utf-8");
150
+ if (content.includes(HMEM_MARKER))
151
+ return "skipped";
152
+ fs.appendFileSync(target.path, HMEM_APPEND_SECTION, "utf-8");
153
+ return "updated";
154
+ }
155
+ else {
156
+ fs.writeFileSync(target.path, HMEM_APPEND_SECTION.trimStart(), "utf-8");
157
+ return "created";
158
+ }
159
+ }
72
160
  // ---- Readline helpers ----
73
161
  let rl;
74
162
  function ask(question) {
@@ -114,7 +202,7 @@ function standardMcpEntry(projectDir) {
114
202
  mcpServers: {
115
203
  hmem: {
116
204
  command: "npx",
117
- args: ["-y", "hmem", "serve"],
205
+ args: ["-y", "hmem-mcp", "serve"],
118
206
  env: {
119
207
  HMEM_PROJECT_DIR: projectDir,
120
208
  },
@@ -130,7 +218,7 @@ function opencodeMcpEntry(projectDir) {
130
218
  mcp: {
131
219
  hmem: {
132
220
  type: "local",
133
- command: ["npx", "-y", "hmem", "serve"],
221
+ command: ["npx", "-y", "hmem-mcp", "serve"],
134
222
  environment: {
135
223
  HMEM_PROJECT_DIR: projectDir,
136
224
  },
@@ -212,7 +300,7 @@ export async function runInit() {
212
300
  : detected;
213
301
  if (allToolIds.length === 0) {
214
302
  console.log("\n No supported tools detected for this scope.");
215
- console.log(" Install Claude Code, OpenCode, Cursor, Windsurf, or Gemini CLI first.\n");
303
+ console.log(" Install Claude Code, OpenCode, Cursor, Windsurf, Gemini CLI, or Cline first.\n");
216
304
  return;
217
305
  }
218
306
  const toolChoices = allToolIds.map(id => TOOLS[id].name);
@@ -228,8 +316,8 @@ export async function runInit() {
228
316
  fs.mkdirSync(absMemDir, { recursive: true });
229
317
  console.log(` Created: ${absMemDir}`);
230
318
  }
231
- // Step 5: Write configs
232
- console.log("\n Writing configuration...\n");
319
+ // Step 5: Write MCP configs
320
+ console.log("\n Writing MCP configuration...\n");
233
321
  for (const toolId of selectedTools) {
234
322
  const tool = TOOLS[toolId];
235
323
  // Determine file path
@@ -241,12 +329,10 @@ export async function runInit() {
241
329
  const projDir = path.join(process.cwd(), tool.projectDir);
242
330
  configPath = path.join(projDir, tool.projectFile);
243
331
  }
244
- // Build project dir for env var
245
- const envProjectDir = absMemDir;
246
332
  // Generate MCP entry
247
333
  const entry = tool.format === "opencode"
248
- ? opencodeMcpEntry(envProjectDir)
249
- : standardMcpEntry(envProjectDir);
334
+ ? opencodeMcpEntry(absMemDir)
335
+ : standardMcpEntry(absMemDir);
250
336
  // Read existing config (if any) and merge
251
337
  let existing = {};
252
338
  if (fs.existsSync(configPath)) {
@@ -261,6 +347,41 @@ export async function runInit() {
261
347
  writeConfigFile(configPath, merged);
262
348
  console.log(` [ok] ${tool.name}: ${configPath}`);
263
349
  }
350
+ // Step 6: Write instructions files (session-start memory trigger)
351
+ console.log("\n Writing session-start instructions...\n");
352
+ const manualHints = [];
353
+ for (const toolId of selectedTools) {
354
+ const tool = TOOLS[toolId];
355
+ const target = isGlobal ? tool.globalInstructions : tool.projectInstructions;
356
+ if (target) {
357
+ // Resolve project-local paths against cwd
358
+ const resolvedTarget = isGlobal
359
+ ? target
360
+ : { ...target, path: path.resolve(process.cwd(), target.path) };
361
+ const result = writeInstructions(resolvedTarget);
362
+ const label = result === "skipped" ? "already set" : result;
363
+ console.log(` [${label}] ${tool.name}: ${resolvedTarget.path}`);
364
+ }
365
+ else if (tool.instructionsManual) {
366
+ manualHints.push(` ${tool.name}: ${tool.instructionsManual}`);
367
+ }
368
+ }
369
+ // Also write Roo Code global instructions alongside Cline (both use cline toolId)
370
+ if (selectedTools.includes("cline") && isGlobal) {
371
+ const rooTarget = {
372
+ path: path.join(HOME, ".roo", "rules", "hmem.md"),
373
+ mode: "standalone",
374
+ };
375
+ const result = writeInstructions(rooTarget);
376
+ const label = result === "skipped" ? "already set" : result;
377
+ console.log(` [${label}] Roo Code: ${rooTarget.path}`);
378
+ }
379
+ if (manualHints.length > 0) {
380
+ console.log("\n Manual steps required:");
381
+ for (const hint of manualHints) {
382
+ console.log(`\n${hint}`);
383
+ }
384
+ }
264
385
  // Step 7: Create default hmem.config.json if not exists
265
386
  const hmemConfigPath = path.join(absMemDir, "hmem.config.json");
266
387
  if (!fs.existsSync(hmemConfigPath)) {
@@ -275,11 +396,19 @@ export async function runInit() {
275
396
  ],
276
397
  };
277
398
  writeConfigFile(hmemConfigPath, defaultConfig);
278
- console.log(` [ok] Config: ${hmemConfigPath}`);
399
+ console.log(`\n [ok] Config: ${hmemConfigPath}`);
279
400
  }
280
401
  console.log(`\n Done! Restart your AI tool(s) to activate hmem.\n`);
281
402
  console.log(` Memory directory: ${absMemDir}`);
282
- console.log(`\n Test: Open your AI tool and call read_memory() it should respond.\n`);
403
+ console.log(`\n Available slash commands (after copying skill filessee README):\n`);
404
+ console.log(` /hmem-read — Load your memory at session start`);
405
+ console.log(` /save — Save session learnings to memory,`);
406
+ console.log(` then commit + push (only if in a git repo with uncommitted changes)`);
407
+ console.log(` /hmem-config — View and adjust memory settings`);
408
+ console.log(` /memory-curate — Audit and clean up memory entries`);
409
+ console.log(` (advanced — untested, use with caution)\n`);
410
+ console.log(` Skill files: https://github.com/Bumblebiber/hmem#skill-files\n`);
411
+ console.log(` Test: Open your AI tool and call read_memory() — it should respond.\n`);
283
412
  }
284
413
  finally {
285
414
  rl.close();
@@ -1 +1 @@
1
- {"version":3,"file":"cli-init.js","sourceRoot":"","sources":["../src/cli-init.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli-init.js","sourceRoot":"","sources":["../src/cli-init.ts"],"names":[],"mappings":"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"}
@@ -59,10 +59,16 @@ export interface HmemConfig {
59
59
  defaultReadLimit: number;
60
60
  /**
61
61
  * Memory category prefixes. Keys are single uppercase letters, values are human-readable names.
62
- * Default: P=Project, L=Lesson, T=Task, E=Error, D=Decision, M=Milestone, S=Skill, F=Favorite.
62
+ * Default: P=Project, L=Lesson, T=Task, E=Error, D=Decision, M=Milestone, S=Skill, N=Navigator.
63
63
  * Users can add custom prefixes (e.g. "R": "Research") in hmem.config.json.
64
64
  */
65
65
  prefixes: Record<string, string>;
66
+ /**
67
+ * Number of top-accessed entries that are automatically promoted to L2 depth in bulk reads.
68
+ * These are entries with the highest access_count (excluding zero) — "organic favorites".
69
+ * Set to 0 to disable. Default: 5.
70
+ */
71
+ accessCountTopN: number;
66
72
  }
67
73
  export declare const DEFAULT_PREFIXES: Record<string, string>;
68
74
  export declare const DEFAULT_CONFIG: HmemConfig;
@@ -8,7 +8,7 @@ export const DEFAULT_PREFIXES = {
8
8
  D: "Decision",
9
9
  M: "Milestone",
10
10
  S: "Skill",
11
- F: "Favorite",
11
+ N: "Navigator",
12
12
  };
13
13
  export const DEFAULT_CONFIG = {
14
14
  maxCharsPerLevel: [120, 2_500, 10_000, 25_000, 50_000],
@@ -19,6 +19,7 @@ export const DEFAULT_CONFIG = {
19
19
  ],
20
20
  defaultReadLimit: 100,
21
21
  prefixes: { ...DEFAULT_PREFIXES },
22
+ accessCountTopN: 5,
22
23
  };
23
24
  /**
24
25
  * Format prefix map as "P=Project, L=Lesson, ..." for tool descriptions.
@@ -67,6 +68,8 @@ export function loadHmemConfig(projectDir) {
67
68
  cfg.maxDepth = raw.maxDepth;
68
69
  if (typeof raw.defaultReadLimit === "number" && raw.defaultReadLimit > 0)
69
70
  cfg.defaultReadLimit = raw.defaultReadLimit;
71
+ if (typeof raw.accessCountTopN === "number" && raw.accessCountTopN >= 0)
72
+ cfg.accessCountTopN = raw.accessCountTopN;
70
73
  // Recency tiers: explicit array > legacy recentChildrenCount > default
71
74
  if (Array.isArray(raw.recentDepthTiers)) {
72
75
  const tiers = raw.recentDepthTiers.filter((t) => typeof t.count === "number" &&
@@ -1 +1 @@
1
- {"version":3,"file":"hmem-config.js","sourceRoot":"","sources":["../src/hmem-config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hmem-config.js","sourceRoot":"","sources":["../src/hmem-config.ts"],"names":[],"mappings":"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"}