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 +84 -0
- package/assets/MEMGINEERING.md +3 -1
- package/assets/memgineering-recall/SKILL.md +19 -3
- package/assets/memgineering-setup/SKILL.md +40 -13
- package/assets/memgineering-writing/SKILL.md +7 -4
- package/dist/index.js +1204 -557
- package/package.json +1 -1
- package/scripts/postinstall.mjs +21 -24
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
|
package/assets/MEMGINEERING.md
CHANGED
|
@@ -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.
|
|
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 `
|
|
223
|
-
|
|
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**
|
|
18
|
-
| **
|
|
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
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
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
|
|
97
|
-
|
|
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.
|
|
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
|
|
27
|
-
(`
|
|
28
|
-
|
|
29
|
-
|
|
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 \
|