memgineering 0.2.1 → 0.4.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 +229 -0
- package/NOTICE +2 -2
- package/assets/MEMGINEERING.md +15 -0
- package/assets/memgineering-memory/SKILL.md +114 -4
- package/assets/memgineering-setup/SKILL.md +41 -2
- package/dist/index.js +5296 -3025
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -11,6 +11,235 @@ language the reader wants. The bilingual rule the monorepo applies to
|
|
|
11
11
|
|
|
12
12
|
## [Unreleased]
|
|
13
13
|
|
|
14
|
+
## [0.4.0] — 2026-08-10
|
|
15
|
+
|
|
16
|
+
A template is not an answer, a revision that revises nothing is not written,
|
|
17
|
+
and linking a second brain no longer breaks the first one everywhere.
|
|
18
|
+
|
|
19
|
+
### Added
|
|
20
|
+
|
|
21
|
+
- **`recall` tells a template apart from an answer.** A card that is one of the
|
|
22
|
+
five `01_BASE/` files and is still byte-for-byte what `init` wrote is marked
|
|
23
|
+
`not filled in yet`; when every card in a result carries that mark, one line
|
|
24
|
+
above them says nothing you have written matched, and points at `onboard`.
|
|
25
|
+
`--json` carries it as `scaffolding`. Nothing is removed from the result —
|
|
26
|
+
the label is a fact about the file, so an unfilled base note padding out a
|
|
27
|
+
weak answer is visible as padding instead of reading like a conclusion. The
|
|
28
|
+
mark disappears the moment the file is edited, which is also the moment a base
|
|
29
|
+
note starts being the best answer in the brain.
|
|
30
|
+
|
|
31
|
+
- **`revise` refuses a revision that revises nothing.** When the claim, summary
|
|
32
|
+
and title all match what the note already holds, nothing is written and the
|
|
33
|
+
reason is given — a user repeating an answer they had already given used to
|
|
34
|
+
become ledger entries recording no change. Saying `--reason` makes it a real
|
|
35
|
+
record again, which is what `reinforce` is for.
|
|
36
|
+
- **`revise` says when a conclusion landed above `init`'s instructions.** These
|
|
37
|
+
files take two steps — write the body, then record the claim — and doing only
|
|
38
|
+
the second leaves a note whose frontmatter concludes something while the prose
|
|
39
|
+
under it is still the form telling you what to write.
|
|
40
|
+
|
|
41
|
+
### Changed
|
|
42
|
+
|
|
43
|
+
- **`revise --help` says which `--action` to pick and what it costs to pick
|
|
44
|
+
wrong.** Only `supersede` moves `valid_from`, so using it on a fact that was
|
|
45
|
+
true all along dates it from today. Filling in a blank `01_BASE/` file for the
|
|
46
|
+
first time is `reinforce`.
|
|
47
|
+
|
|
48
|
+
### Fixed
|
|
49
|
+
|
|
50
|
+
- **Linking a second brain no longer breaks the first one everywhere.** With
|
|
51
|
+
more than one brain linked and no pointer in the current folder, every command
|
|
52
|
+
refused as ambiguous — so a scratch brain linked for an afternoon stopped
|
|
53
|
+
`recall` and `remember` working in every other directory, for every tool
|
|
54
|
+
sharing the config. The first brain linked is now the default and is used when
|
|
55
|
+
nothing more specific applies; `memgineering use --default <path>` changes it,
|
|
56
|
+
and `--vault`, a `.memgineering` pointer, and standing inside a brain all
|
|
57
|
+
still win. The ambiguity refusal remains for the case it was written for —
|
|
58
|
+
several brains and nothing ever said which — and now names the one-time fix.
|
|
59
|
+
Upgrading picks the brain you already had, not the next one you happen to
|
|
60
|
+
link.
|
|
61
|
+
- **The cross-language warning no longer fires over a base file the user wrote.**
|
|
62
|
+
It decided "did this query reach anything the person wrote" from the path — a
|
|
63
|
+
match under `01_BASE/` did not count — so somebody who had answered those five
|
|
64
|
+
questions could ask about their own preferences, get their own note, and be
|
|
65
|
+
told the query could not reach their brain. It now asks whether the file has
|
|
66
|
+
been touched, which is what it meant all along.
|
|
67
|
+
|
|
68
|
+
### Agent guidance
|
|
69
|
+
|
|
70
|
+
- `memgineering-memory` covers the `not filled in yet` mark and the header above
|
|
71
|
+
a result made only of templates: what they mean, and that a card carrying one
|
|
72
|
+
is not evidence of anything.
|
|
73
|
+
- `memgineering-memory` spells out that filling in a base file is two steps —
|
|
74
|
+
write the body, then record the claim — why it is `--action reinforce` rather
|
|
75
|
+
than the default, and that re-recording something unchanged is refused.
|
|
76
|
+
- `memgineering-setup` covers the default brain, and says not to abandon a write
|
|
77
|
+
because the brain was ambiguous: a refused `remember` means the thing the user
|
|
78
|
+
asked you to keep was not kept.
|
|
79
|
+
|
|
80
|
+
**Restart your agent session after upgrading** so the updated skills load.
|
|
81
|
+
|
|
82
|
+
## [0.3.0] — 2026-08-10
|
|
83
|
+
|
|
84
|
+
Recall says how old a memory is and why two of them disagree; a screen for
|
|
85
|
+
people who did not come here for flags; and seven places the tool was doing
|
|
86
|
+
something other than what it said.
|
|
87
|
+
|
|
88
|
+
### Added
|
|
89
|
+
|
|
90
|
+
- **Cards carry an age.** `recall` prints `stated · 3 days ago`, and `--json`
|
|
91
|
+
carries `age_days`. Deciding whether to revise a memory or write a new one is
|
|
92
|
+
a recency judgement, and the card was missing the field that decides it.
|
|
93
|
+
- **Contradictions you can act on.** When two memories disagree, the block now
|
|
94
|
+
gives each side's date and quotes the reason recorded for its last change,
|
|
95
|
+
and names `retire` as the way to settle it. Previously it said only that they
|
|
96
|
+
disagreed, which left the reader to go and find out why.
|
|
97
|
+
- **`revise --title`.** `recall` renders the title as a card's heading, so a
|
|
98
|
+
superseded conclusion used to go on asserting itself in every heading while
|
|
99
|
+
the summary underneath said otherwise.
|
|
100
|
+
- **A warning when the prose stops agreeing with the conclusion.** After a
|
|
101
|
+
supersede, if the note's body still states the claim that was just replaced,
|
|
102
|
+
`revise` says so. It does not touch the body — that is yours — but an
|
|
103
|
+
invisible contradiction inside one note is worse than a visible one.
|
|
104
|
+
- **`setup --web` — setting it up on a screen, for someone who has never opened
|
|
105
|
+
a terminal.** The browser is asked one question at a time: which agents share
|
|
106
|
+
the memory, whether the tool keeps itself updated, whether note summaries are
|
|
107
|
+
handed to every new session, and which folder holds the notes. The folder step
|
|
108
|
+
shows what `link` shows — how many notes would be indexed, which files are
|
|
109
|
+
refused and why, with samples of the exact lines that would be stored — before
|
|
110
|
+
anything is read. Applying calls the same installer the flags do, so both doors
|
|
111
|
+
leave the same files behind. The page is self-contained and served on
|
|
112
|
+
`127.0.0.1` with a one-time key in its URL; it opens the browser itself
|
|
113
|
+
(`--print-url` where there is none) and closes when the setup is applied or
|
|
114
|
+
after ten idle minutes.
|
|
115
|
+
|
|
116
|
+
### Fixed
|
|
117
|
+
|
|
118
|
+
- **One note could stop the tool for minutes.** The credential scanner's
|
|
119
|
+
short-secret pattern backtracked cubically on text that matched a label and
|
|
120
|
+
then failed at the digits: 200 spaces cost 12ms, 800 cost 279ms, 1,600 cost
|
|
121
|
+
2.2 seconds — against a 20,000-character field. Bounded now, and flat: the
|
|
122
|
+
same input takes 0.01ms at 20,000 characters, with every short-secret shape
|
|
123
|
+
still detected and no new false positives.
|
|
124
|
+
- **`undo` could delete a note you did not name.** It resolved an operation id
|
|
125
|
+
by unchecked prefix and took the oldest match, so `undo 6` removed the oldest
|
|
126
|
+
note whose id began with a six and reported success. It now requires the same
|
|
127
|
+
five-character minimum `open` does and names the candidates when a prefix is
|
|
128
|
+
ambiguous.
|
|
129
|
+
- **`undo` on a damaged ledger reversed the wrong operation.** A line lost to an
|
|
130
|
+
interrupted write is normally the newest one, so "the last change" stops being
|
|
131
|
+
answerable — and a bare `undo` was then taking the change before it. It
|
|
132
|
+
refuses now and points at `log`; `undo <op_id>` still works, because that
|
|
133
|
+
record parsed and you said which one you meant.
|
|
134
|
+
- **`revise --action conflict` said "Revised" and wrote nothing.** Recording a
|
|
135
|
+
disagreement deliberately does not overwrite either conclusion, but reporting
|
|
136
|
+
a revision while discarding the claim you passed is the tool telling you
|
|
137
|
+
something untrue about your own brain. It now says what it did, says the claim
|
|
138
|
+
was not written, and names `--action supersede` for the other case.
|
|
139
|
+
- **Every read re-checked the same directories, once per note.** Resolving a
|
|
140
|
+
path refuses symlinks by walking it component by component, and in a brain
|
|
141
|
+
whose notes sit under `20_TIMELINE/observations/2026-08/` three of every four
|
|
142
|
+
checks were re-asking about the same three directories: 659ms per command at
|
|
143
|
+
twelve thousand notes, against 220ms for the identical guarantee. Directories
|
|
144
|
+
cleared during one command are not re-checked during that command; the memo
|
|
145
|
+
dies with the command, and the final component — the one the answer is about —
|
|
146
|
+
is always checked.
|
|
147
|
+
- **`resurface` presented `init`'s own boilerplate as something you had
|
|
148
|
+
written.** A base file nobody has filled in still carries the summary `init`
|
|
149
|
+
gave it — so a fresh brain answered "what should you already know here" with
|
|
150
|
+
"Tooling · recalled 14× in this folder · The tools, machines and commands I
|
|
151
|
+
actually use", for a file whose body is one empty bullet. It still surfaces,
|
|
152
|
+
because an unfilled base file is the most worth raising, but it is labelled
|
|
153
|
+
`not filled in yet` and says the line is a prompt. Judged by comparing the
|
|
154
|
+
file byte-for-byte against what `init` wrote: an exact match cannot be a false
|
|
155
|
+
positive, and the moment somebody touches the file it goes back to being their
|
|
156
|
+
note.
|
|
157
|
+
- **`revise` moved a memory's start date every time it ran.** `valid_from` is
|
|
158
|
+
when the fact became true, and it was being written as an edit timestamp — so
|
|
159
|
+
`reinforce`, whose whole job is "same conclusion, better support", walked the
|
|
160
|
+
date forward on every use. A tester added a reason to a memory and watched its
|
|
161
|
+
start date land a day after the thing it describes. `supersede` still stamps
|
|
162
|
+
now, because a replaced conclusion does start now; `reinforce` and `conflict`
|
|
163
|
+
leave it alone, and the new `--valid-from` sets it when the caller knows the
|
|
164
|
+
real date.
|
|
165
|
+
- **The contradiction footer told you to retire a side you had already
|
|
166
|
+
retired.** Two testers hit it independently: retire, run recall, and be
|
|
167
|
+
advised to retire. The disagreement is still shown — both notes are still in
|
|
168
|
+
the brain — but when every side is settled the footer says so.
|
|
169
|
+
- **The rules file written into your notes folder was in Korean.** Every other
|
|
170
|
+
string this tool emits is English on the theory that an agent re-renders for
|
|
171
|
+
its reader — but this one is a document left on disk among somebody's own
|
|
172
|
+
notes, with no agent standing between it and whoever opens it. It also still
|
|
173
|
+
called the tool Kordis.
|
|
174
|
+
- **`stated` was glossed as something it does not mean.** It reports that a
|
|
175
|
+
card's fields came from the note rather than from inference, which is why a
|
|
176
|
+
note carrying a `memgineering:` block but no claim is `stated` — and `open`
|
|
177
|
+
then printed `stated` in its header and "nothing here states a conclusion"
|
|
178
|
+
two lines below. Both sentences were right; the gloss was describing the
|
|
179
|
+
wrong thing, and now says "these fields came from the note".
|
|
180
|
+
- **`log` blamed an external edit it could not have known about.** Divergence
|
|
181
|
+
has more than one cause — an editor, or a write whose ledger entry never
|
|
182
|
+
landed — and the message asserted the first as fact.
|
|
183
|
+
- **A brain whose folder was deleted made every command ambiguous, forever.**
|
|
184
|
+
The linked list is written by `link` and was never re-checked, so one gone
|
|
185
|
+
path — a scratch folder, a moved vault — meant every verb refused until
|
|
186
|
+
somebody found and unlinked it. Missing folders no longer count toward
|
|
187
|
+
ambiguity, are listed as `(missing)` when it still is ambiguous, and are not
|
|
188
|
+
removed from the config: a folder that is absent today may be an unmounted
|
|
189
|
+
disk tomorrow.
|
|
190
|
+
- **`use` with no argument threw instead of answering.** It is the command you
|
|
191
|
+
run to find out why the others are refusing, and it was refusing the same
|
|
192
|
+
way. It now describes the situation, including when nothing resolves.
|
|
193
|
+
- **The `undo` line printed after a write can be pasted and run.** It carries
|
|
194
|
+
`--vault` when the command was given one — a tester copied it verbatim and
|
|
195
|
+
got "2 brains are linked, so this is ambiguous", from a process that knew
|
|
196
|
+
which brain it had just written to one line earlier.
|
|
197
|
+
- **`log` read the whole brain to print twenty lines.** Checking whether notes
|
|
198
|
+
still match the ledger was run over the entire history rather than the rows
|
|
199
|
+
being shown: 161ms at a hundred operations, 5.7 seconds at twenty thousand,
|
|
200
|
+
and worse with every use. Scoped to what is displayed, and the footer now says
|
|
201
|
+
"N of these 20" rather than a brain-wide count it did not pay for.
|
|
202
|
+
- **A reason attached to an undone operation was still being quoted.** `recall`
|
|
203
|
+
and `evidence` would explain a change the note no longer contains.
|
|
204
|
+
- **The `stated` gloss appeared under cards that did not say `stated`.**
|
|
205
|
+
Defining a word the card does not carry teaches the reader something false
|
|
206
|
+
about what they are looking at.
|
|
207
|
+
|
|
208
|
+
### Changed
|
|
209
|
+
|
|
210
|
+
- `remember`'s two ids are labelled — `note:` and `undo:` — because a tester
|
|
211
|
+
tried the note id with `undo`.
|
|
212
|
+
- A bare `undo` now reports what it reversed and when, and cautions when that
|
|
213
|
+
operation is more than ten minutes old. With another agent or a session hook
|
|
214
|
+
writing to the same brain, "the last change" is not necessarily yours.
|
|
215
|
+
|
|
216
|
+
- **`memgineering onboard`** — what to ask so the brain knows who it belongs to.
|
|
217
|
+
It does not run the conversation, and that is the design: a CLI cannot ask
|
|
218
|
+
"what should I never do without asking you first" and understand the answer,
|
|
219
|
+
but the agent reading this output can. So it returns the work — which of the
|
|
220
|
+
five base files are still exactly what `init` wrote, what each is for, and
|
|
221
|
+
where to start asking — and reports that there is nothing to do once they are
|
|
222
|
+
written.
|
|
223
|
+
- **`init` now hands the base files to the agent instead of the user.** It used
|
|
224
|
+
to close with "Start by filling in 01_BASE/USER.md", which is homework nobody
|
|
225
|
+
does — and what goes in those files (who they are, how they want answers,
|
|
226
|
+
what to ask before doing) cannot be typed into a form. It comes out of a
|
|
227
|
+
conversation, so `init` asks the agent to have one, and the skill carries the
|
|
228
|
+
questions.
|
|
229
|
+
|
|
230
|
+
### Agent guidance
|
|
231
|
+
|
|
232
|
+
- `memgineering-memory` covers reading a card's age and the contradiction block,
|
|
233
|
+
and asks for `--reason` on every write.
|
|
234
|
+
- `memgineering-memory` also covers filling in `01_BASE/` — the questions, how
|
|
235
|
+
to ask them, and the one narrow case where writing a brain file directly is
|
|
236
|
+
the right move.
|
|
237
|
+
- `memgineering-setup` covers `--web`: when to put a screen in front of a person
|
|
238
|
+
rather than answer setup's flags for them, and that the command does not
|
|
239
|
+
return until they have finished with it.
|
|
240
|
+
|
|
241
|
+
**Restart your agent session after upgrading** so the updated skills load.
|
|
242
|
+
|
|
14
243
|
## [0.2.1] — 2026-08-09
|
|
15
244
|
|
|
16
245
|
### Fixed
|
package/NOTICE
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
memgineering
|
|
2
|
-
Copyright 2026
|
|
2
|
+
Copyright 2026 Chang Do Geon ("Rayul", 장도건)
|
|
3
3
|
|
|
4
|
-
This product includes software developed
|
|
4
|
+
This product includes software developed for memgineering
|
|
5
5
|
(https://memgineering.com).
|
|
6
6
|
|
|
7
7
|
Licensed under the Apache License, Version 2.0. See LICENSE for the full
|
package/assets/MEMGINEERING.md
CHANGED
|
@@ -26,6 +26,21 @@ No query — it ranks by what has been recalled here before, how recently, and
|
|
|
26
26
|
which of their core notes have gone unread. It is the answer to a vague
|
|
27
27
|
question that recall cannot serve, because there is nothing to search for yet.
|
|
28
28
|
|
|
29
|
+
**Fill in their base files when they are still empty.** `init` leaves five
|
|
30
|
+
files in `01_BASE/` as templates, and `resurface` marks an untouched one
|
|
31
|
+
`not filled in yet`. What goes in them — who they are, how they want answers,
|
|
32
|
+
what to ask before doing — only comes out of a conversation, and every session
|
|
33
|
+
starts from zero until it exists. Offer once, ask one question at a time; the
|
|
34
|
+
`memgineering-memory` skill has the questions and how to write the answers.
|
|
35
|
+
They can also ask for it directly — "set up my memory", "내 정보 채워줘" — and
|
|
36
|
+
that is the same job.
|
|
37
|
+
|
|
38
|
+
```
|
|
39
|
+
memgineering onboard
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
Says which are still untouched and what to ask for each.
|
|
43
|
+
|
|
29
44
|
**Recall before answering** anything that sounds like it was settled before:
|
|
30
45
|
|
|
31
46
|
- "what did we decide about…", "how do I deploy this again", "왜 이렇게 했더라"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: memgineering-memory
|
|
3
|
-
description: Use when the user asks about something they told you before, refers to a past decision, wants their own notes searched,
|
|
3
|
+
description: Use when the user asks about something they told you before, refers to a past decision, wants their own notes searched, says something worth keeping, or wants their memory set up so it knows who they are. Triggers include "what did I decide about X", "check my notes", "how do we deploy again", "remember this", "is this still true", "which one do I go with", "set up my memory", "fill in my profile", "teach it about me", "예전에 뭐라고 정했더라", "내 노트에서 찾아줘", "이거 기억해둬", "내 정보 채워줘", "나에 대해 알려줘", "what do you know about my setup". Covers recall, open, evidence, remember, revise, undo, resurface, and filling in the `01_BASE/` files by asking.
|
|
4
4
|
type: skill
|
|
5
5
|
allowed-tools: Bash(memgineering:*)
|
|
6
6
|
---
|
|
@@ -74,6 +74,103 @@ Say so. Only titles, aliases and summaries are searched, so suggest broader
|
|
|
74
74
|
words — but do not go read their folder yourself to compensate. A brain that
|
|
75
75
|
answers "nothing" is giving you real information.
|
|
76
76
|
|
|
77
|
+
### Cards that are not answers
|
|
78
|
+
|
|
79
|
+
A card marked `not filled in yet` is one of the five `01_BASE/` files, still
|
|
80
|
+
byte-for-byte what `init` wrote. Nobody has answered it, so it is evidence of
|
|
81
|
+
nothing — do not quote it back as if it were what they think.
|
|
82
|
+
|
|
83
|
+
When every card carries that mark, recall says so above them:
|
|
84
|
+
|
|
85
|
+
```
|
|
86
|
+
⚠ Nothing you have written matched this.
|
|
87
|
+
Every card below is still the template `init` wrote
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
That is the moment to offer to fill them in rather than to answer from them —
|
|
91
|
+
`memgineering onboard` prints the questions. The cards are still listed, because
|
|
92
|
+
the label is a claim about the file, not a decision about what you may see;
|
|
93
|
+
`--json` carries the same fact as `scaffolding: true`.
|
|
94
|
+
|
|
95
|
+
The mark disappears the moment the user writes in the file. A base note they
|
|
96
|
+
have filled in is an ordinary note of theirs and often the best answer in the
|
|
97
|
+
brain — `who am I`, `what am I not allowed to do`, `where does everything live`
|
|
98
|
+
are all answered from `01_BASE/`.
|
|
99
|
+
|
|
100
|
+
## Filling in the base files, which only you can do
|
|
101
|
+
|
|
102
|
+
`init` creates five files in `01_BASE/` and leaves them empty, because what
|
|
103
|
+
goes in them cannot be typed into a form. Who the user is, how they want
|
|
104
|
+
answers, what you must ask before doing, what would be expensive to get wrong,
|
|
105
|
+
what they actually run — those come out of a conversation.
|
|
106
|
+
|
|
107
|
+
They matter more than any single memory: `resurface` puts these at the top of a
|
|
108
|
+
new session, and an empty one teaches the next agent nothing. A brain whose
|
|
109
|
+
base is untouched is a brain that starts every session from zero.
|
|
110
|
+
|
|
111
|
+
**Offer once, at the natural moment** — right after `init`, or the first time
|
|
112
|
+
`resurface` marks one `not filled in yet`.
|
|
113
|
+
|
|
114
|
+
```
|
|
115
|
+
memgineering onboard
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
Says which of the five are still untouched and what to ask for each. Run it
|
|
119
|
+
first rather than working from the list below; it knows what has already been
|
|
120
|
+
done, and asking somebody a question they have answered is its own kind of
|
|
121
|
+
forgetting. Then follow their answers rather than the script.
|
|
122
|
+
|
|
123
|
+
They may also ask for it outright — "set up my memory", "fill in my profile",
|
|
124
|
+
"내 정보 채워줘". Same job, and it is the only entry point that works when you
|
|
125
|
+
did not offer.
|
|
126
|
+
|
|
127
|
+
```
|
|
128
|
+
01_BASE/USER.md who they are, what they work on, what they are trying to do
|
|
129
|
+
01_BASE/PREFERENCES.md how they like answers, code, decisions — length, tone, how much checking in
|
|
130
|
+
01_BASE/BOUNDARIES.md what you must ask before doing. The one they will regret not saying
|
|
131
|
+
01_BASE/CRITICAL_FACTS.md what is expensive to get wrong — deploy, money, data, people
|
|
132
|
+
01_BASE/TOOLING.md editors, languages, machines, the commands they actually run
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
**How to ask.** One question at a time, in their words, and stop when the
|
|
136
|
+
answers thin out — three good lines beat a filled-in template. Take what they
|
|
137
|
+
say in passing during ordinary work too; most of `TOOLING.md` gets written by
|
|
138
|
+
noticing, not by asking.
|
|
139
|
+
|
|
140
|
+
**How to write it — both halves.** `revise` only touches frontmatter, so it
|
|
141
|
+
takes two steps, and skipping the first is the common failure: write the body
|
|
142
|
+
with your normal file tools FIRST, replacing `init`'s instructions with what
|
|
143
|
+
they actually said, then record the conclusion.
|
|
144
|
+
|
|
145
|
+
```
|
|
146
|
+
# 1. replace the body — their words, not the template's prompt
|
|
147
|
+
# 2. then:
|
|
148
|
+
memgineering revise 01_BASE/USER.md \
|
|
149
|
+
--action reinforce \
|
|
150
|
+
--claim "<one line: who they are>" \
|
|
151
|
+
--summary "<the line recall should show>"
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
A claim written above the untouched template leaves the file reading as a form
|
|
155
|
+
somebody half-filled — the conclusion in the frontmatter, the instructions for
|
|
156
|
+
writing one still underneath. `revise` warns when you do this; the warning means
|
|
157
|
+
go back and write the body.
|
|
158
|
+
|
|
159
|
+
`--action reinforce`, not the default, and the reason is the date. `supersede`
|
|
160
|
+
stamps `valid_from` with now because a replaced conclusion starts now — but
|
|
161
|
+
these facts were always true and you have only just been told them. Dating them
|
|
162
|
+
today is wrong in the one field a memory store exists to get right.
|
|
163
|
+
|
|
164
|
+
This is the ONE place you edit a brain file directly, and the boundary is
|
|
165
|
+
narrow: `01_BASE/` only, and only while the file is still the template `init`
|
|
166
|
+
wrote. Nothing is lost — there is no history to break and nothing to undo — and
|
|
167
|
+
after that first pass these files are theirs like any other note, changed
|
|
168
|
+
through `revise` and never behind their back.
|
|
169
|
+
|
|
170
|
+
**What not to do.** Do not invent an answer to move on, and do not fill a file
|
|
171
|
+
because it is empty. `BOUNDARIES.md` guessed at is worse than blank: the next
|
|
172
|
+
agent will read it as something the user said.
|
|
173
|
+
|
|
77
174
|
## Deciding which one to trust
|
|
78
175
|
|
|
79
176
|
When two memories disagree, or one looks old enough to doubt, do not settle it
|
|
@@ -160,11 +257,24 @@ memgineering revise deploy-manual \
|
|
|
160
257
|
--summary "manual only, no CD"
|
|
161
258
|
```
|
|
162
259
|
|
|
163
|
-
- `--action supersede` (default)
|
|
164
|
-
|
|
165
|
-
- `--action
|
|
260
|
+
- `--action supersede` (default) — the conclusion CHANGED. Stamps `valid_from`
|
|
261
|
+
with now, because a replaced conclusion starts now.
|
|
262
|
+
- `--action reinforce` — the SAME conclusion, new support. Leaves `valid_from`
|
|
263
|
+
alone. Use it when nothing about the fact changed, only your evidence.
|
|
264
|
+
- `--action conflict` — two notes DISAGREE. Records the edge, leaves both
|
|
265
|
+
standing, and deliberately does not write the claim you passed.
|
|
166
266
|
- `--dry-run` shows the diff and writes nothing
|
|
167
267
|
|
|
268
|
+
Pick by what changed, not by habit: `supersede` on a fact that was true all
|
|
269
|
+
along dates it from today, and the date is the field this is all for.
|
|
270
|
+
|
|
271
|
+
**Re-recording something unchanged is refused.** If the claim, summary and title
|
|
272
|
+
all match what the note already holds, `revise` writes nothing and says so —
|
|
273
|
+
otherwise a user repeating themselves turns into ledger entries that record no
|
|
274
|
+
change. When you do mean "this still holds", say what confirms it:
|
|
275
|
+
`--action reinforce --reason "<what confirms it>"`. Check with `open <ref>`
|
|
276
|
+
before rewriting something you may already have.
|
|
277
|
+
|
|
168
278
|
This only ever rewrites the memory block in a note's frontmatter. The prose is
|
|
169
279
|
the user's; neither this command nor you should rewrite it uninvited.
|
|
170
280
|
|
|
@@ -40,7 +40,32 @@ updates itself. Recommend `on` — old versions can lose access to hosted
|
|
|
40
40
|
features later — but it is theirs to decide.
|
|
41
41
|
|
|
42
42
|
If the user would rather click than type, `memgineering setup --human` gives
|
|
43
|
-
them a checkbox screen. Run it and let them drive; do not
|
|
43
|
+
them a checkbox screen in your terminal. Run it and let them drive; do not
|
|
44
|
+
answer for them.
|
|
45
|
+
|
|
46
|
+
### When a person needs a screen, not flags
|
|
47
|
+
|
|
48
|
+
```
|
|
49
|
+
memgineering setup --web
|
|
50
|
+
memgineering setup --web --print-url # no browser here — hand over the link
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
`--web` opens a page in their own browser and asks the same questions there,
|
|
54
|
+
one at a time, in plain language. Reach for it when the user is not reading
|
|
55
|
+
your terminal at all — they have never opened one, or they are the one who has
|
|
56
|
+
to decide and a checkbox screen you are driving is not where they can.
|
|
57
|
+
|
|
58
|
+
It covers step 2 as well: the page offers the notes folders it finds on the
|
|
59
|
+
machine, and shows the same disclosure `link --dry-run` prints — how many notes
|
|
60
|
+
would be indexed, which ones are refused and why, with samples of the lines
|
|
61
|
+
that would be stored — before anything is read. When they finish, both steps
|
|
62
|
+
are done and there is nothing left for you to run.
|
|
63
|
+
|
|
64
|
+
The page is served on `127.0.0.1` with a one-time key in the URL, and closes
|
|
65
|
+
itself when the setup is applied or after ten idle minutes. **The command does
|
|
66
|
+
not return until then.** Run it, tell the user to look at their browser, and
|
|
67
|
+
wait for it — a setup screen nobody answered has not set anything up, so do not
|
|
68
|
+
report it as done until the command comes back.
|
|
44
69
|
|
|
45
70
|
**After setup, the agent session has to restart** for the guidance to load.
|
|
46
71
|
Say so — the user will otherwise wonder why nothing changed.
|
|
@@ -112,8 +137,9 @@ one answers is decided by where you are, in this order:
|
|
|
112
137
|
2. a `.memgineering` pointer file, found by walking up from the cwd
|
|
113
138
|
3. the brain the current directory is inside
|
|
114
139
|
4. the only one linked
|
|
140
|
+
5. their default brain — the first one they linked, unless they changed it
|
|
115
141
|
|
|
116
|
-
|
|
142
|
+
Bind a directory to one brain when that directory belongs to it:
|
|
117
143
|
|
|
118
144
|
```
|
|
119
145
|
memgineering use ~/brains/work
|
|
@@ -122,6 +148,19 @@ memgineering use ~/brains/work
|
|
|
122
148
|
Inside a repository this writes a relative path, so it can be committed and
|
|
123
149
|
will resolve for a teammate who links the same brain.
|
|
124
150
|
|
|
151
|
+
If it still says the choice is ambiguous — several brains, and nothing has ever
|
|
152
|
+
said which is theirs — that is a question for them, not a guess for you. Show
|
|
153
|
+
the list it printed and offer the one-time fix:
|
|
154
|
+
|
|
155
|
+
```
|
|
156
|
+
memgineering use --default ~/brains/work
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
**Do not give up on a write because of this.** A refused `remember` means the
|
|
160
|
+
thing they asked you to keep was not kept, and "I could not tell which brain"
|
|
161
|
+
is a solvable problem — ask which one, or use `--vault` for the write and raise
|
|
162
|
+
the default with them afterwards.
|
|
163
|
+
|
|
125
164
|
## Checking it worked
|
|
126
165
|
|
|
127
166
|
```
|