memgineering 0.24.0 → 0.25.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/CHANGELOG.md CHANGED
@@ -11,6 +11,90 @@ language the reader wants. The bilingual rule the monorepo applies to
11
11
 
12
12
  ## [Unreleased]
13
13
 
14
+ ## [0.25.0] — 2026-10-04
15
+
16
+ ### Added
17
+
18
+ - **Hosted recall says which search found each card.** Every card carries
19
+ `matched` (`words`, `meaning` or `both`), and a card found by meaning alone is
20
+ marked "matched by meaning only — none of the question's words are in this
21
+ note", in the terminal and in `brain_recall` alike.
22
+ - **Hosted brains label untouched starter templates too.** `recall` and `open`
23
+ say "not filled in yet" for a `01_BASE/` file that is still exactly the
24
+ template, as folder brains always did (`scaffolding` in `--json`).
25
+ - **`recall` says when one project filled the whole answer** — "All 8 cards are
26
+ from `owner/beta`. Also in this brain: `owner/alpha` — add `--scope <name>`"
27
+ (`scope_spread` in `--json`). Declared scopes only; folder names are not
28
+ projects.
29
+ - **`setup --help` says how a chat app reaches your brain** — ChatGPT, Claude.ai,
30
+ Claude Desktop and Cowork connect to a hosted brain at
31
+ `https://mcp.memgineering.com/mcp`, with no install on this machine.
32
+ - **`remember` shows the scope it stamped and where it came from** — the git
33
+ remote, the folder's name, `--scope`, or a name set with `memgineering
34
+ project` (`scope_via` in `--json`).
35
+
36
+ ### Changed
37
+
38
+ - **Common English words no longer count as a match.** `i`, `is`, `what`,
39
+ `about`, `do` and the like used to match first-person starter notes whatever
40
+ the question was about. Recall now matches on the words that carry the
41
+ question; Korean queries are unchanged, and a question made only of such
42
+ words ("who am I") still works.
43
+ - **At most two untouched starter templates per recall.** The rest are counted
44
+ and named as left out (`templates_withheld`); nothing you wrote is ever held
45
+ back. A mixed answer now says how many of its cards are still templates.
46
+ - **`resurface` ranks by what you opened and what answered, not by what was
47
+ merely listed.** A card that trailed at the bottom of many recalls no longer
48
+ climbs the page; the reason line reads "opened 2× · surfaced 10× in this
49
+ project" or "…, never opened".
50
+ - **`auto-update: on` now installs.** Once a day, when a newer version exists,
51
+ a global install updates itself in the background — never from a session hook,
52
+ never under CI, and never a project-local or npx copy (a project under a broad
53
+ npm prefix such as `prefix=$HOME` counts as project-local). One install runs
54
+ at a time: `memgineering update` typed while a background install runs says
55
+ so (`update_in_progress` in `--json`) instead of starting a second. A failed
56
+ attempt is reported on the next run with how to turn it off.
57
+ - **The setup reminder informs instead of ordering, and is shorter after the
58
+ first time.** It says what `setup --web` does — opens a setup screen in the
59
+ user's browser and returns at once — and asks the agent to check with the user
60
+ first unless they asked for setup. The old wording told the agent to run setup
61
+ without waiting, which fresh agent sessions reasonably read as a prompt
62
+ injection. The full text appears once per machine; every later command, and
63
+ `--version` / `--help` in a pipe, get two lines. The notice after an upgrade
64
+ ("the guidance in your agent tools is older") and the one asking for a brain
65
+ follow suit. The upgrade notice now says what a refresh overwrites and which
66
+ earlier choices a flag-less run would reset — auto-update, hooks, the tool list,
67
+ and a sign-in on a machine that is not signed in — names the flag that keeps
68
+ each, and no longer tells the agent to keep the refresh from you.
69
+
70
+ ### Fixed
71
+
72
+ - **A note whose path is `constructor`, `toString` or `__proto__` no longer
73
+ breaks `recall` and `open`.** On a hosted brain, every recall that returned
74
+ such a note failed.
75
+ - **`setup` reports what happened, not what was asked for**: "Registered with"
76
+ lists only tools whose guide was written, each hook is reported on the tools
77
+ that received it (Grok's end-of-turn hook is no longer described as a
78
+ session-start one), and a project-local copy is told its hooks and guide need
79
+ a global install to reach it.
80
+ - **`setup`'s refusals say how to get unstuck**: an unknown tool name and a
81
+ known tool that has not been opened yet get different answers, and the
82
+ supported tools are listed with their `--tools` names.
83
+
84
+ ### Agent guidance
85
+
86
+ - The setup skill now says a chat app with no shell can reach your hosted brain
87
+ through the connector at `https://mcp.memgineering.com/mcp` (ChatGPT and
88
+ Claude.ai steps included) — it used to say there was no connector — and that a
89
+ brain kept only as a folder needs both steps: move it up, then add the
90
+ connector. The hub itself now says ChatGPT and Claude.ai reach a hosted brain
91
+ through that connector.
92
+ - The recall skill covers the template cap, `matched`, `scope_spread`, and the
93
+ new resurface wording; the writing skill names the folder-name scope fallback;
94
+ the setup skill explains what auto-update does and to pass `--hook` when
95
+ turning it off.
96
+ - Restart your agent session after upgrading so it reads the new guidance.
97
+
14
98
  ## [0.24.0] — 2026-09-12
15
99
 
16
100
  ### Added
@@ -2,7 +2,7 @@
2
2
  name: memgineering
3
3
  description: Use whenever the user refers to something they told you before, asks what was decided, tells you something worth keeping, or settles something that should hold next time. The memory lives in their own folder and outlives this session; check it before answering from guesswork, and write to it when you learn something durable.
4
4
  type: skill
5
- version: 0.24.0
5
+ version: 0.25.0
6
6
  ---
7
7
 
8
8
  # memgineering
@@ -83,6 +83,8 @@ at six skills, each of which loads on its own when its topic comes up:
83
83
  - `memgineering-registry` — the public layer
84
84
  - `memgineering-installing` — putting a package in their project, and updating it
85
85
 
86
+ Not shell-only: ChatGPT and Claude.ai reach a hosted brain via connector `https://mcp.memgineering.com/mcp`.
87
+
86
88
  A host short on room lists a skill by NAME ONLY, no description — measured on
87
89
  Claude Code. When you cannot see what it covers, READ
88
90
  `<tool-home>/skills/memgineering-<name>/SKILL.md` before deciding it is empty.
@@ -153,6 +153,11 @@ What you must not do is report what came back as everything the brain holds,
153
153
  which is exactly what a short answer looks like to anyone who does not read the
154
154
  line under it.
155
155
 
156
+ When every card with a project came from ONE project and the brain holds
157
+ others, recall says so (`scope_spread`: the project, and up to five others). If
158
+ the user meant one of those, ask again with `--scope <that project>` — the note
159
+ they want may be ranked just below a page full of the one the question named.
160
+
156
161
  ## Whether meaning was searched
157
162
 
158
163
  A hosted brain can match on meaning as well as words — the same idea in other
@@ -177,6 +182,12 @@ anything about what the user knows.
177
182
  If coverage says notes are missing entries, meaning was searched over part of
178
183
  the brain. Do not report that as a complete search.
179
184
 
185
+ When meaning was used, each card also says what reached it — `matched`:
186
+ `"words"`, `"meaning"`, or `"both"`. A `"meaning"` card (printed as _matched by
187
+ meaning only_) shares no word with the question. That is right for a note in
188
+ another language and wrong for one the model merely found nearby, so read its
189
+ summary before you answer from it — never quote it back on the label alone.
190
+
180
191
  ## Two answers that are answers
181
192
 
182
193
  **Nothing matched.** Say so, and do not go read their folder yourself to
@@ -198,7 +209,9 @@ five `01_BASE/` files, still byte-for-byte what `init` wrote. Nobody has answere
198
209
  it, so it is evidence of nothing — do not quote it back as what they think. When
199
210
  every card carries that mark, recall says so above them (`--json`:
200
211
  `scaffolding: true`), and that is the moment to offer to fill them in rather
201
- than answer from them — see `memgineering-writing`.
212
+ than answer from them — see `memgineering-writing`. At most two such cards come
213
+ back per answer; the rest are counted (`templates_withheld`), never silently
214
+ dropped, and nothing anyone wrote is ever held back.
202
215
 
203
216
  The mark disappears once the user writes in the file. A filled-in base note is
204
217
  often the best answer in the brain: _who am I_, _what am I not allowed to do_,
@@ -219,8 +232,11 @@ On a hosted brain the folder counts too, as a name rather than a path: the CLI
219
232
  sends the folder's project — `owner/repo` from the git remote, or whatever
220
233
  `memgineering project` shows — and the server ranks what was asked about in
221
234
  that project first. The response says so itself: `ranked_by` gains `asked about
222
- in this project`, a card's reason reads `recalled 2× in this project`, and the
223
- footer names which project those words mean. Trust the footer over your
235
+ in this project`, a card's reason reads `opened 1× · surfaced 2× in this project`
236
+ (or `surfaced 2× …, never opened`), and the footer names which project those
237
+ words mean. Only an open, or being the FIRST card of a recall, counts toward
238
+ the order; a card merely listed further down is counted in words but earns
239
+ nothing. Trust the footer over your
224
240
  assumption in the other cases as well — it says when this folder names no
225
241
  project (nothing was sent), and when the server does not rank by project yet
226
242
  (it was sent and ignored). A path never leaves the machine either way.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: memgineering-setup
3
- description: Use when installing or configuring memgineering, when moving a brain between a machine and an account, when renaming or deleting a hosted brain, or whenever the user asks WHICH of their AI tools can see this memory. Triggers include "set up memgineering", "connect my notes", "rename my brain", "delete that brain", "does my other AI see this too", "which of my tools can read this", "will it work in the app on my phone", "no brain is linked".
3
+ description: Use when installing or configuring memgineering, when moving a brain between a machine and an account, when renaming or deleting a hosted brain, or whenever the user asks WHICH of their AI tools can see this memory. Triggers include "set up memgineering", "connect my notes", "rename my brain", "delete that brain", "does my other AI see this too", "which of my tools can read this", "will it work in the app on my phone", "can I use this in ChatGPT", "does it work in Claude.ai", "no brain is linked".
4
4
  type: skill
5
5
  allowed-tools: Bash(memgineering:*)
6
6
  ---
@@ -12,20 +12,37 @@ allowed-tools: Bash(memgineering:*)
12
12
  Answer this from here, not from a guess. The line is capability, not brand, so
13
13
  it does not move as products come and go:
14
14
 
15
- | | |
16
- | ----------------------------------------- | ------------------------------------------------------------------------------------------------------------- |
17
- | **Any tool that can run a shell command** | Reads and writes the same brain. Nothing has to be built for a tool that does not exist yet. |
18
- | **Any tool that cannot** | **Not yet.** There is no connector. A hosted brain is reachable in principle and is not wired up in practice. |
15
+ | | |
16
+ | ------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
17
+ | **Any tool that can run a shell command** | Reads and writes the same brain. Nothing has to be built for a tool that does not exist yet. |
18
+ | **A chat app that takes a custom MCP connector, no shell** | Reads and writes the **hosted** brain on their account through `https://mcp.memgineering.com/mcp`, once they add that connector in the app and sign in with Google. Not a folder brain. |
19
+ | **Neither** | **Not yet.** |
19
20
 
20
21
  `memgineering setup` writes its guidance into the agent tools it finds on the
21
22
  machine, and `setup --dry-run` names the ones it actually found rather than
22
23
  guessing from a list.
23
24
 
24
25
  So when someone names a tool and asks whether it remembers too, work it out from
25
- that line and answer **not yet, and here is what does** — not a hedge, not a
26
- promise. "You are signed in, so it works everywhere" is the specific wrong
27
- answer: the account syncs the brain between machines, it does not add a surface
28
- that can read it.
26
+ those rows and answer plainly — not a hedge, not a promise:
27
+
28
+ - **ChatGPT** — Settings → **Developer mode** → add an MCP server with
29
+ `https://mcp.memgineering.com/mcp`, then sign in with Google when it asks.
30
+ - **Claude.ai, Claude Desktop, Cowork** — **Customize** → **Connectors** →
31
+ **Add custom connector** → the same URL. One connector covers all three, and
32
+ custom connectors are on every plan, the free one included.
33
+ - It reaches the brain **on their account**. A brain that lives only as a folder
34
+ on this machine is out of its reach until it is moved up (see "Moving a brain
35
+ between this machine and their account").
36
+ - Moving it up does NOT make it appear in the chat app by itself. When their
37
+ brain is still a folder, the answer is both steps, in order: move it up, then
38
+ add the connector above in their app. An answer that stops at the first step
39
+ leaves them with an account brain and no way in.
40
+ - `npx memgineering-mcp` — the local, stdio server — is **registry-only**. It has
41
+ no memory tools; for memory from a chat app, the URL above is the way.
42
+
43
+ "You are signed in here, so it works everywhere" is still the wrong answer: the
44
+ account syncs the brain between machines, and each chat app needs the connector
45
+ added in that app, once.
29
46
 
30
47
  ## 1. Register with the agents
31
48
 
@@ -93,8 +110,15 @@ restart. (Measured: a fresh agent relayed "restart required" as fact, the user
93
110
  checked, and it was not one.)
94
111
 
95
112
  **Ask before setting policy for them.** Auto-update means the tool updates
96
- itself; `--hook on` means note summaries and their standing rules reach an agent
97
- unasked. Recommend both, but they are theirs to decide.
113
+ itself: once a day, when a newer version exists, a global install starts
114
+ `memgineering update` in the background and the next run uses it (a project-local
115
+ or npx copy is never touched — it only gets the notice; nor is anything installed
116
+ from a session hook or under CI). One install runs at a time: `memgineering
117
+ update` run while a background install is going answers `update_in_progress`
118
+ and installs nothing — wait a few minutes and run it again; it reports whether
119
+ that install worked. `--hook on` means note
120
+ summaries and their standing rules reach an agent unasked. Recommend both, but
121
+ they are theirs to decide.
98
122
 
99
123
  **Error telemetry is theirs to decide too, and defaults to off.** With
100
124
  `--error-telemetry on`, the CLI sends an anonymous report when it ITSELF
@@ -441,9 +465,12 @@ as a next step rather than running it.
441
465
 
442
466
  ### What a hosted brain does that a folder does not
443
467
 
444
- Every verb works on either kind now, consolidation included. Two things are
468
+ Every verb works on either kind now, consolidation included. Three things are
445
469
  only true of a hosted brain.
446
470
 
471
+ **A chat app with no shell can reach it** — through the connector at the top of
472
+ this file. A folder brain is reached only by tools that can run `memgineering`.
473
+
447
474
  **Meaning is searched, if a model is configured for it.** That is what lets an
448
475
  English question reach a Korean note. It needs `BRAIN_EMBEDDING_URL` and
449
476
  `BRAIN_EMBEDDING_MODEL` set on the server; with neither, the brain searches text
@@ -475,7 +502,7 @@ answers without changing its name and the index has to be laid down again.
475
502
  ## Turning things off
476
503
 
477
504
  ```
478
- memgineering setup --agent --auto-update off
505
+ memgineering setup --agent --auto-update off --hook <on|off> # --agent sets both; keep the hook as it was
479
506
  memgineering unlink # stop reading a brain; notes untouched
480
507
  memgineering unlink --purge # also delete the local index and undo snapshots
481
508
  ```
@@ -23,10 +23,13 @@ reverse it. Do not ask permission for ordinary observations — write them, and
23
23
  mention it in a sentence.
24
24
 
25
25
  **A note born in a project folder carries that project as its `scope`** — the
26
- name comes from the git remote (`owner/repo`), or from the folder's binding
27
- (`memgineering project` shows it). The stamp is automatic; an explicit
28
- `--scope` beats it; a folder that names no project writes exactly what it
29
- always wrote. Two flags are worth reaching for on purpose:
26
+ name comes from the folder's binding (`memgineering project` shows it), else the
27
+ git remote (`owner/repo`), else — in a repository with no remote — the checkout
28
+ folder's name. `remember` prints the scope and which of those it came from
29
+ (`scope_via` in `--json`); when it is the folder name, say so, because that is
30
+ the one nobody predicts. The stamp is automatic; an explicit `--scope` beats it;
31
+ a folder that names no project writes exactly what it always wrote. Two flags
32
+ are worth reaching for on purpose:
30
33
 
31
34
  ```
32
35
  memgineering remember "we always squash before merging" --rule --no-scope \