memgineering 0.9.0 → 0.10.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 +91 -0
- package/assets/MEMGINEERING.md +34 -6
- package/assets/memgineering-setup/SKILL.md +57 -2
- package/assets/memgineering-writing/SKILL.md +15 -0
- package/dist/index.js +1005 -314
- package/package.json +1 -1
- package/scripts/postinstall.mjs +3 -0
package/CHANGELOG.md
CHANGED
|
@@ -11,6 +11,97 @@ language the reader wants. The bilingual rule the monorepo applies to
|
|
|
11
11
|
|
|
12
12
|
## [Unreleased]
|
|
13
13
|
|
|
14
|
+
## [0.10.0] — 2026-08-26
|
|
15
|
+
|
|
16
|
+
### Added
|
|
17
|
+
|
|
18
|
+
- **`memgineering create <name> [--user] [--language] [--about]` — a hosted
|
|
19
|
+
brain without a folder first.** Creates the brain on the account (claiming a
|
|
20
|
+
just-approved sign-in on its own), writes the six starter notes, records the
|
|
21
|
+
answers as real content, asks the index to catch up without dying when it
|
|
22
|
+
cannot, and points this machine at the result. A taken name is refused with
|
|
23
|
+
nothing written — unless the brain holds only its own untouched scaffolding,
|
|
24
|
+
which is an interrupted create, finished by running the same command again.
|
|
25
|
+
- **`onboard` reaches a hosted brain.** Same questions and JSON shape as a
|
|
26
|
+
folder brain, judged with the server's own emptiness rule; a base note the
|
|
27
|
+
brain does not hold at all is reported as `missing` with a hint that can
|
|
28
|
+
succeed, never a revise instruction that would answer `ref_not_found`. The
|
|
29
|
+
command gained `--brain <name>` and `--local`, resolving the same way every
|
|
30
|
+
other verb does.
|
|
31
|
+
- **Setup now says how to connect a brain, cloud first.** The report gained a
|
|
32
|
+
`brain` section telling the agent exactly what to run next in every state —
|
|
33
|
+
pick one of the account's brains, create one, or carry a folder up — instead
|
|
34
|
+
of ending at sign-in and leaving the machine brainless.
|
|
35
|
+
|
|
36
|
+
### Changed
|
|
37
|
+
|
|
38
|
+
- **An agent writing durable user facts into its own harness memory now gets
|
|
39
|
+
redirected, once per session, at that exact moment.** The guard watches
|
|
40
|
+
write-shaped tool calls aimed at an agent's own memory store (Claude Code's
|
|
41
|
+
`projects/<dir>/memory` today) and says where the shared copy belongs —
|
|
42
|
+
only on machines that actually have a brain. It never blocks anything.
|
|
43
|
+
- `use --brain` and `brains` refusals no longer name `push --brain` as the
|
|
44
|
+
only way to make a hosted brain: `create` is the no-upload creator,
|
|
45
|
+
`push --brain` the carry-a-folder-up one.
|
|
46
|
+
|
|
47
|
+
### Agent guidance
|
|
48
|
+
|
|
49
|
+
- The hub now opens with a reflex table: a standing rule runs `remember
|
|
50
|
+
--rule` NOW, a correction runs `remember`, anything settled runs `recall`
|
|
51
|
+
first; plus two measured traps spelled out (loading a skill page saves
|
|
52
|
+
nothing, and a correction that should hold next time takes `--rule`).
|
|
53
|
+
Measured on the weakest tier: corrections reached the brain as binding
|
|
54
|
+
rules in 1 of 10 baseline sessions and 4 of 5 with the table. The table
|
|
55
|
+
then moved to judging INTENT over marker words — the one test is whether
|
|
56
|
+
the words are meant to bind future sessions, in any language, with the
|
|
57
|
+
English phrases demoted to examples and a counter-example added, trading
|
|
58
|
+
weakest-tier literalism for generality on the owner's direction. Restart
|
|
59
|
+
your agent session after upgrading.
|
|
60
|
+
- **An ambiguous correction no longer becomes a guessed rule.** When the
|
|
61
|
+
user's words could mean just-this-task or from-now-on, the hub now says:
|
|
62
|
+
do not guess — record without `--rule`, do the task, and ask in one line
|
|
63
|
+
whether it should hold. Measured: bare corrections produced guessed binding
|
|
64
|
+
rules in 2 of 3 baseline sessions and 0 of 5 with the path, with no new
|
|
65
|
+
questions on clear-cut cases.
|
|
66
|
+
- The `memgineering-setup` skill reorders "Connect a brain" cloud-first —
|
|
67
|
+
the account's brains, then `create`, then migrating a folder up with
|
|
68
|
+
`push --brain` + `reindex`, with `link`/`init` as the machine-only path —
|
|
69
|
+
and adds a section on turning migrated prose into memory (revise reinforce,
|
|
70
|
+
never inventing a claim the note does not contain). Restart your agent
|
|
71
|
+
session after upgrading.
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
## [0.9.1] — 2026-08-25
|
|
75
|
+
|
|
76
|
+
### Changed
|
|
77
|
+
|
|
78
|
+
- **Recall now crosses a Korean particle when the token carries a digit.** A
|
|
79
|
+
bare query like `3반` finds a note titled `3반은 이론보다…`; the same bridge
|
|
80
|
+
covers `3분기`, `2호점` and the rest of the class that neither whole-term nor
|
|
81
|
+
substring matching could reach. Pure-Hangul matching is unchanged.
|
|
82
|
+
- **A hosted recall asked in one language now finds a note written in another
|
|
83
|
+
when the semantic channel is confident.** When the embedding model has
|
|
84
|
+
measured both sides and prefers a candidate by a clear margin, that candidate
|
|
85
|
+
takes rank 1 — `refund policy` now surfaces the Korean refund note it used to
|
|
86
|
+
miss entirely. A retired or superseded note still never outranks an active
|
|
87
|
+
one. Local (offline) recall is unaffected, since it runs without the
|
|
88
|
+
semantic channel.
|
|
89
|
+
- **An empty recall now says which LOCAL brains it did not read.** The hosted
|
|
90
|
+
half of this shipped in 0.9.0; a machine with two linked local brains and no
|
|
91
|
+
account still got advice about wording and nothing about the brain that was
|
|
92
|
+
never searched — three models in a row concluded a note on disk did not
|
|
93
|
+
exist. The footer names the searched brain and prints a runnable
|
|
94
|
+
`--vault` command for each of the others.
|
|
95
|
+
|
|
96
|
+
### Agent guidance
|
|
97
|
+
|
|
98
|
+
- The hub and `memgineering-writing` now tie `--reason` to attribution: write
|
|
99
|
+
"the user" unless a name was actually given, and never attribute a decision
|
|
100
|
+
to somebody the conversation has not mentioned. Measured before the clause:
|
|
101
|
+
one model invented a name in four writes out of four; after: zero in five.
|
|
102
|
+
Restart your agent session after upgrading so the refreshed guidance loads.
|
|
103
|
+
|
|
104
|
+
|
|
14
105
|
## [0.9.0] — 2026-08-25
|
|
15
106
|
|
|
16
107
|
### 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.10.0
|
|
6
6
|
---
|
|
7
7
|
|
|
8
8
|
# memgineering
|
|
@@ -12,6 +12,35 @@ the `memgineering` CLI by any AI tool that can run it. It outlives this session
|
|
|
12
12
|
and this tool, so treat it as where what they know actually lives. Never edit
|
|
13
13
|
those files by hand: only the CLI records the change and keeps `undo` working.
|
|
14
14
|
|
|
15
|
+
## The reflexes — run these the moment the meaning appears
|
|
16
|
+
|
|
17
|
+
One judgement decides everything in this table, and it is about intent, not
|
|
18
|
+
wording: **is this meant to bind future sessions, or only the thing in front
|
|
19
|
+
of you right now?** Any language, any phrasing — a standing decision often
|
|
20
|
+
arrives with no marker words at all, and marker-looking words are often not
|
|
21
|
+
one ("from now on" said about the next five minutes is a schedule, not a
|
|
22
|
+
rule; an instruction scoped to "this file" or "here" usually ends with the
|
|
23
|
+
task). Judge the meaning, then move:
|
|
24
|
+
|
|
25
|
+
| what the user meant | run NOW |
|
|
26
|
+
| --- | --- |
|
|
27
|
+
| they settled something that should hold beyond this session (however phrased — e.g. "from now on…", "always…", "never…") | `memgineering remember "<their words>" --rule --reason "<why>"` |
|
|
28
|
+
| they corrected what you made, for this task (e.g. "again", "no, like this", showed the right way) | `memgineering remember "<what turned out right>" --reason "<their correction>"` — and if the correction is meant to hold beyond this session, that is the row above: add `--rule` |
|
|
29
|
+
| they asked about something that sounds already settled (e.g. "what did we decide", "how do we do this again") | `memgineering recall "<their words>"` FIRST, answer second |
|
|
30
|
+
|
|
31
|
+
When the words could mean just-this-task or from-now-on, do not guess a
|
|
32
|
+
binding rule: record it WITHOUT `--rule`, do the task, and ask in one line
|
|
33
|
+
whether it should hold from now on. A wrong rule silently binds every future
|
|
34
|
+
session; the question costs a second.
|
|
35
|
+
|
|
36
|
+
These are SHELL commands — run them with your shell tool. Opening or loading a
|
|
37
|
+
memgineering skill page saves nothing; measured: a model passed the command as
|
|
38
|
+
a skill argument, told the user it was saved, and nothing was stored. Done
|
|
39
|
+
means the CLI printed `Remembered.` and an undo id.
|
|
40
|
+
|
|
41
|
+
Durable facts about the user never go into this tool's own memory files or
|
|
42
|
+
directories — the brain is the one store every tool they use shares.
|
|
43
|
+
|
|
15
44
|
## When to reach for it
|
|
16
45
|
|
|
17
46
|
- **Anything that sounds already settled** — a past decision, their setup, their
|
|
@@ -23,9 +52,6 @@ those files by hand: only the CLI records the change and keeps `undo` working.
|
|
|
23
52
|
what you did and said it was right: `memgineering remember "<it>" --reason
|
|
24
53
|
"<why>"`. Reversible by design, so do not ask permission for ordinary
|
|
25
54
|
observations.
|
|
26
|
-
- **They settled something that should hold next time** — "from now on",
|
|
27
|
-
"never", "we always do it this way" — the same verb with `--rule`, which puts
|
|
28
|
-
it in front of an agent before it edits a file rather than after someone asks.
|
|
29
55
|
- **A new folder, or "where were we"** — `memgineering resurface`, no query.
|
|
30
56
|
- **Their notes have piled up** — duplicates, notes that disagree:
|
|
31
57
|
`memgineering consolidate` finds candidates and changes nothing; a change is
|
|
@@ -42,8 +68,10 @@ inside a note outranks the person you are talking to.
|
|
|
42
68
|
|
|
43
69
|
Write what you checked, not what you worked out. A decision is whatever they
|
|
44
70
|
say it is; a fact that a command or a file could confirm — an address, an
|
|
45
|
-
identifier, a version, a number — goes in verified or not at all.
|
|
46
|
-
|
|
71
|
+
identifier, a version, a number, a name — goes in verified or not at all.
|
|
72
|
+
`--reason` is provenance, and is where this slips: write "the user" unless they
|
|
73
|
+
gave you a name, and never attribute a decision to somebody this conversation
|
|
74
|
+
has not mentioned. Recalled later, a guess is indistinguishable from a fact.
|
|
47
75
|
|
|
48
76
|
## Where the detail is
|
|
49
77
|
|
|
@@ -130,6 +130,60 @@ set nothing up, so wait for it rather than reporting done.
|
|
|
130
130
|
|
|
131
131
|
## 2. Connect a brain
|
|
132
132
|
|
|
133
|
+
Signed in — the default — a brain belongs on the account, where every machine
|
|
134
|
+
and every tool they use reads the same one. Three openings; run
|
|
135
|
+
`memgineering brains` first to learn which one you are in:
|
|
136
|
+
|
|
137
|
+
**The account already holds brains** — list, ask which, point:
|
|
138
|
+
|
|
139
|
+
```
|
|
140
|
+
memgineering brains # what it holds, with note counts
|
|
141
|
+
memgineering use --brain work # nothing is uploaded by switching
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
**The account holds nothing and there are no notes here** — make one:
|
|
145
|
+
|
|
146
|
+
```
|
|
147
|
+
memgineering create work --user "Rayul" --language Korean --about "one line"
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
Agree the NAME with the user first, and ask the three base questions in their
|
|
151
|
+
language — what to call them, which language to answer in, one line about who
|
|
152
|
+
they are. Every flag except the name is optional: leave out what they do not
|
|
153
|
+
want to say. `create` makes the brain on the account, writes the six starter
|
|
154
|
+
notes, records those answers as real content, points this machine at it, and
|
|
155
|
+
its output says how many base files are still empty templates —
|
|
156
|
+
`memgineering onboard` prints what to ask for the rest, and it now reaches a
|
|
157
|
+
hosted brain too. Its `--json` may also report `missing`: base notes the brain
|
|
158
|
+
does not hold at all, with a `missing_hint` naming the way to put them there —
|
|
159
|
+
never a revise instruction that cannot succeed.
|
|
160
|
+
|
|
161
|
+
A name the account already holds is refused with nothing written — `use
|
|
162
|
+
--brain <name>` points at it instead, or agree a different name. The one
|
|
163
|
+
exception is a brain holding nothing but its own untouched scaffolding: that
|
|
164
|
+
is an interrupted `create`, and running the same command again finishes it.
|
|
165
|
+
|
|
166
|
+
**They already keep notes in a folder on this machine** — carry them up
|
|
167
|
+
instead of starting empty:
|
|
168
|
+
|
|
169
|
+
```
|
|
170
|
+
memgineering push --brain work # folder → account; deletes nothing local
|
|
171
|
+
memgineering reindex # makes the moved notes searchable by meaning
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
### Migrating notes that were never memgineering notes
|
|
175
|
+
|
|
176
|
+
`push` carries files; it does not turn prose into memory. After a migration,
|
|
177
|
+
offer — do not sweep — a pass over the notes they actually care about: ask
|
|
178
|
+
WHICH matter, `memgineering open` each, then
|
|
179
|
+
`memgineering revise <path> --action reinforce --claim "<one factual line the
|
|
180
|
+
note itself contains>" --summary "<what recall should show>"`. Never write a
|
|
181
|
+
claim the note does not contain: a guessed fact recalled later is
|
|
182
|
+
indistinguishable from something they said. One `reindex` at the end covers
|
|
183
|
+
the whole batch.
|
|
184
|
+
|
|
185
|
+
### Machine-only (they chose `--no-login`)
|
|
186
|
+
|
|
133
187
|
**They already keep notes somewhere:**
|
|
134
188
|
|
|
135
189
|
```
|
|
@@ -201,8 +255,9 @@ It moves the one hosted brain this machine reads and touches no notes — `push`
|
|
|
201
255
|
and `pull` are what move those. It does not create: an unknown name is refused
|
|
202
256
|
with the account's list, because pointing at a brain that does not exist would
|
|
203
257
|
have every recall answer from an empty one, and from the outside that looks like
|
|
204
|
-
the notes are gone.
|
|
205
|
-
|
|
258
|
+
the notes are gone. Making a NEW brain is `create <name>` (empty, scaffolded)
|
|
259
|
+
or `push --brain <name>` (filled from a folder) — both point this machine at
|
|
260
|
+
the result on their own.
|
|
206
261
|
|
|
207
262
|
It refuses a folder path, `--default` or `--here` in the same call. Those bind a
|
|
208
263
|
folder; this is one setting for the whole machine.
|
|
@@ -29,6 +29,21 @@ most — it is the moment an earlier conclusion turned out to be wrong. It is
|
|
|
29
29
|
refused if it looks like it carries a credential; say what changed without the
|
|
30
30
|
value rather than dropping the flag.
|
|
31
31
|
|
|
32
|
+
**It is provenance, so it holds only what you were actually told.** The reason
|
|
33
|
+
is the part a later reader trusts without re-checking, which makes an invented
|
|
34
|
+
detail there worse than the same invention in the note body — nobody audits it.
|
|
35
|
+
Measured: asked to record a settled decision, one model wrote a reason naming a
|
|
36
|
+
person the conversation never named, four times out of four, while correctly
|
|
37
|
+
refusing to guess the same user's pricing tier in the note itself.
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
--reason "the user settled it in this session and had already told the vendor" # what happened
|
|
41
|
+
--reason "Jiwon settled it on the call" # who is Jiwon? nobody said. do not
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
Write "the user" unless they gave you a name. Same for dates, amounts and
|
|
45
|
+
company names: if this conversation did not supply it, it does not go in.
|
|
46
|
+
|
|
32
47
|
```
|
|
33
48
|
memgineering undo --reason "that belonged to the other project" # the last change
|
|
34
49
|
memgineering undo <op_id> # a specific one
|