memgineering 0.23.1 → 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 +138 -0
- package/assets/MEMGINEERING.md +3 -1
- package/assets/memgineering-recall/SKILL.md +19 -3
- package/assets/memgineering-rules/SKILL.md +15 -4
- package/assets/memgineering-setup/SKILL.md +40 -13
- package/assets/memgineering-writing/SKILL.md +19 -7
- package/dist/index.js +1993 -707
- package/package.json +1 -1
- package/scripts/postinstall.mjs +21 -24
package/CHANGELOG.md
CHANGED
|
@@ -11,6 +11,144 @@ 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
|
+
|
|
98
|
+
## [0.24.0] — 2026-09-12
|
|
99
|
+
|
|
100
|
+
### Added
|
|
101
|
+
|
|
102
|
+
- **`memgineering rescope <ref>` changes which project a memory binds in.**
|
|
103
|
+
`scope` decides which of the two rule budgets a decision is drawn from — it
|
|
104
|
+
is the field that answers "does this bind me here" — and nothing could write
|
|
105
|
+
it. Moving one meant `supersede`, which retires the loser, so folding a
|
|
106
|
+
project-scoped rule into an unscoped one would have made the rule vanish
|
|
107
|
+
everywhere except the project it was scoped to.
|
|
108
|
+
Two flags, deliberately: `--scope <project>` narrows or moves,`--global`
|
|
109
|
+
widens. A rule that stops naming a project starts binding in every project,
|
|
110
|
+
and that is the change hardest to notice afterwards, so it is spelled rather
|
|
111
|
+
than being what happens when the scope is left off.
|
|
112
|
+
- **`memgineering expire <ref> --until <date>` gives a memory an end date, and
|
|
113
|
+
does not retire it.** Until that date it is current; after it, recall still
|
|
114
|
+
returns it — one step below what is current, and labelled. Recall has always
|
|
115
|
+
understood this; only the writer was missing. Reach for it when a memory was
|
|
116
|
+
always going to run out, rather than when a decision has been overtaken.
|
|
117
|
+
- **A hosted brain's rule list says how fresh each rule is** (`freshness` on
|
|
118
|
+
`POST /rules`), so an agent handed a rule whose end date has passed is told
|
|
119
|
+
so rather than reading it as current.
|
|
120
|
+
|
|
121
|
+
### Fixed
|
|
122
|
+
|
|
123
|
+
- **Retiring a rule now stops it being pushed to agents on a hosted brain.**
|
|
124
|
+
The rule list filtered "is it marked as a rule" and nothing else, while the
|
|
125
|
+
local one has always dropped retired rules — putting a decision somebody
|
|
126
|
+
retired in front of an agent as binding is the tool arguing with them.
|
|
127
|
+
`retire` writes the status and leaves the marking alone, so nothing else
|
|
128
|
+
caught it: on a hosted brain, which is what a signed-in machine reads,
|
|
129
|
+
retiring a rule did not stop the before-edit hook showing it.
|
|
130
|
+
- **A date written into a note that states no claim is no longer ignored.**
|
|
131
|
+
Freshness read `valid_until` only off a stated claim, and most notes state
|
|
132
|
+
none — so an end date in such a note was read by nothing at all.
|
|
133
|
+
- **An upgrade now tells your agent that its guidance went stale.** The only
|
|
134
|
+
thing that ever said so was a `postinstall` script, and npm 12 blocks install
|
|
135
|
+
scripts by default — measured on 12.0.2, all it prints is `1 package had
|
|
136
|
+
install scripts blocked`, which does not say what the blocked script would
|
|
137
|
+
have said. So on that npm an upgrade left a new binary beside the hub and
|
|
138
|
+
skills an older release wrote, in `~/.claude`, `~/.codex` and `~/.gemini`,
|
|
139
|
+
and both halves reported success. The CLI now says it itself, before any
|
|
140
|
+
command, on a channel npm cannot block: run `memgineering setup` once and it
|
|
141
|
+
goes quiet. It stays out of `guard`, which runs on every file edit.
|
|
142
|
+
|
|
143
|
+
### Agent guidance
|
|
144
|
+
|
|
145
|
+
`memgineering-rules` and `memgineering-writing` both changed: there are now
|
|
146
|
+
three ways a rule stops applying rather than two (`--no-rule`, `retire`,
|
|
147
|
+
`expire`), and `rescope` is how a rule moves between projects. **Restart your
|
|
148
|
+
agent session after upgrading** so the new guidance is loaded — or run
|
|
149
|
+
`memgineering setup`, which the CLI will now ask for by itself when the
|
|
150
|
+
installed guidance is older than the binary.
|
|
151
|
+
|
|
14
152
|
## [0.23.1] — 2026-09-11
|
|
15
153
|
|
|
16
154
|
### Fixed
|
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-rules
|
|
3
|
-
description: Use when the user settles something they expect to hold next time — a colour they will not use, a step never to skip, a way things get named here — or when you want to see what already binds you in this folder. A decision does not have to be announced as a rule to be one. Triggers include "from now on", "always", "never", "don't do that again", "let's go with X from here", "we always do it this way", "what rules do I have". Covers remember --rule, rules, and what the before-edit hook shows.
|
|
3
|
+
description: Use when the user settles something they expect to hold next time — a colour they will not use, a step never to skip, a way things get named here — or when you want to see what already binds you in this folder. A decision does not have to be announced as a rule to be one. Triggers include "from now on", "always", "never", "don't do that again", "let's go with X from here", "we always do it this way", "what rules do I have" — and, for moving one, "that should apply everywhere", "not just this project", "all my projects", "only in this repo from now on". Covers remember --rule, rules, rescope, and what the before-edit hook shows.
|
|
4
4
|
type: skill
|
|
5
5
|
allowed-tools: Bash(memgineering:*)
|
|
6
6
|
---
|
|
@@ -150,12 +150,23 @@ Two consequences worth knowing before you mark things:
|
|
|
150
150
|
are why they no longer can: a rule scoped to the project has its own room and
|
|
151
151
|
cannot lose every slot to whatever the user has been reaching for lately. It
|
|
152
152
|
still pays to keep the standing set small — ten is what a session reads.
|
|
153
|
-
- **
|
|
153
|
+
- **Three ways out, and they are not the same.** `memgineering revise <ref>
|
|
154
154
|
--no-rule --reason "…"` says it was never a rule: it stops being shown before
|
|
155
155
|
an edit, and stays a perfectly ordinary current memory that recall returns.
|
|
156
156
|
`memgineering retire <ref>` says it no longer holds: it stops binding AND
|
|
157
|
-
drops to the bottom of recall, labelled.
|
|
158
|
-
|
|
157
|
+
drops to the bottom of recall, labelled. `memgineering expire <ref> --until
|
|
158
|
+
<date>` says it held until then: it KEEPS binding and recall keeps returning
|
|
159
|
+
it, ranked below what is current and labelled from that date. Reach for the
|
|
160
|
+
first when the marking was the mistake, the second when the decision has been
|
|
161
|
+
overtaken, and the third when it was always going to run out.
|
|
162
|
+
- **`memgineering rescope <ref>` changes WHERE a rule binds, not whether it
|
|
163
|
+
does.** `--scope <project>` binds it in that project alone — agents working
|
|
164
|
+
anywhere else stop being shown it. `--global` binds it everywhere, which is
|
|
165
|
+
the change hardest to notice afterwards, so it has a flag of its own rather
|
|
166
|
+
than being what happens when you leave the scope off. Nothing the note says
|
|
167
|
+
changes either way, and `memgineering undo` reverses it.
|
|
168
|
+
Ask before widening: a rule the user wrote about one repository, made global,
|
|
169
|
+
arrives in every session they open.
|
|
159
170
|
- **`--no-rule` on its own asks for nothing else.** No claim, no summary — the
|
|
160
171
|
conclusion, the summary and the title come back byte for byte, which is the
|
|
161
172
|
whole reason it exists. It used to go through `revise`, which requires a
|
|
@@ -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
|
```
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: memgineering-writing
|
|
3
|
-
description: Use when you learn something durable and should record it, when a conclusion you already recorded turns out to have changed, when something needs undoing or retiring, when the brain has filled up with near-duplicates that want tidying, or when the user's `01_BASE/` files are still empty and only a conversation can fill them. Triggers include "remember this", "that didn't work", "this worked instead", "that's not right anymore", "undo that", "looks good", "set up my memory", "fill in my profile", "stop reading that note", "clean up my notes", "these two say the same thing", "is this a duplicate", "move my memories over", "bring my notes from the other tool", "don't save that", "never store that". Covers remember, revise, undo, log, retire, exclude, onboard, the consolidate/propose/approve flow, carrying facts in from another store, storage boundaries, and what to say before writing.
|
|
3
|
+
description: Use when you learn something durable and should record it, when a conclusion you already recorded turns out to have changed, when something needs undoing or retiring, when the brain has filled up with near-duplicates that want tidying, or when the user's `01_BASE/` files are still empty and only a conversation can fill them. Triggers include "remember this", "that didn't work", "this worked instead", "that's not right anymore", "undo that", "looks good", "set up my memory", "fill in my profile", "stop reading that note", "clean up my notes", "these two say the same thing", "is this a duplicate", "move my memories over", "bring my notes from the other tool", "don't save that", "never store that", "that's only true until <date>", "it stops being true after", "don't tell me that forever". Covers remember, revise, undo, log, retire, expire, exclude, onboard, the consolidate/propose/approve flow, carrying facts in from another store, storage boundaries, and what to say before writing.
|
|
4
4
|
type: skill
|
|
5
5
|
allowed-tools: Bash(memgineering:*)
|
|
6
6
|
---
|
|
@@ -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 \
|
|
@@ -203,17 +206,26 @@ it>"`.
|
|
|
203
206
|
This rewrites only the memory block in frontmatter. The prose is the user's;
|
|
204
207
|
neither the command nor you should rewrite it uninvited.
|
|
205
208
|
|
|
206
|
-
## Retiring versus excluding
|
|
209
|
+
## Retiring versus expiring versus excluding
|
|
207
210
|
|
|
208
211
|
```
|
|
209
212
|
memgineering retire <ref> --reason "the date moved" # no longer current, still visible
|
|
213
|
+
memgineering expire <ref> --until 2026-10-31 --reason "the phase ends then" # NOT retired
|
|
210
214
|
memgineering exclude path/to/note.md --reason "it has someone's phone number in it" # stop reading it
|
|
211
215
|
memgineering retract --actor "mcp:ChatGPT" --since 2026-09-01 # SHOWS what one writer / window wrote
|
|
212
216
|
memgineering retract --actor "mcp:ChatGPT" --since 2026-09-01 --yes # retires all of it, one ledger row each
|
|
213
217
|
```
|
|
214
218
|
|
|
215
219
|
Retiring keeps the note in recall, ranked last and labelled. Excluding takes it
|
|
216
|
-
out of the index and never touches the file.
|
|
220
|
+
out of the index and never touches the file.
|
|
221
|
+
|
|
222
|
+
**`expire` is not a retirement, and the difference only shows up later.** It
|
|
223
|
+
gives a memory an end date: until then it is current, and after it recall still
|
|
224
|
+
returns it — one step below what is current, labelled with the date. Reach for
|
|
225
|
+
it when the memory was always going to run out ("Phase 1 lands by the end of
|
|
226
|
+
October", a key that rotates, a plan with a deadline in it) rather than when a
|
|
227
|
+
decision has been overtaken. Retiring such a note says something untrue about
|
|
228
|
+
it; leaving it says something untrue too. If the user says "delete", ask
|
|
217
229
|
which they mean.
|
|
218
230
|
|
|
219
231
|
## Tidying up a brain: detect, draft, approve
|