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 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 memgineering
2
+ Copyright 2026 Chang Do Geon ("Rayul", 장도건)
3
3
 
4
- This product includes software developed by memgineering
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
@@ -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, or says something worth keeping. 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", "예전에 뭐라고 정했더라", "내 노트에서 찾아줘", "이거 기억해둬", "what do you know about my setup". Covers recall, open, evidence, remember, revise, undo, and resurface against the user's own brain folder.
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) replaces the conclusion
164
- - `--action reinforce` keeps it and adds support
165
- - `--action conflict` records that two notes disagree without picking a winner
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 answer for them.
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
- If it says the choice is ambiguous, bind the directory once:
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
  ```