memgineering 0.4.2 → 0.6.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.
@@ -1,173 +1,252 @@
1
1
  ---
2
2
  name: memgineering-setup
3
- description: Use when installing or configuring memgineering — after `npm i -g memgineering`, when the user asks to set it up, connect their notes, install it into their agents, turn auto-update on or off, or when a memgineering command reports that no brain is linked. Triggers include "set up memgineering", "connect my notes", "메모리 설정해줘", "노트 연결", "memgineering setup", "no brain is linked".
3
+ description: Use when installing or configuring memgineering, when moving a brain between a machine and an account, or whenever the user asks WHICH of their AI tools can see this memory. Triggers include "set up memgineering", "connect my notes", "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".
4
4
  type: skill
5
5
  allowed-tools: Bash(memgineering:*)
6
6
  ---
7
7
 
8
8
  # Setting memgineering up
9
9
 
10
- Two things have to happen, and they are separate on purpose:
10
+ ## Which tools this actually reaches, today
11
11
 
12
- 1. **Register with the agents** — so this and every other AI tool on the
13
- machine knows the brain exists. One command.
14
- 2. **Connect a brain** — which folder holds the notes. This one is the user's
15
- decision, and it involves showing them what gets stored.
12
+ Answer this from here, not from a guess. The line is capability, not brand, so
13
+ it does not move as products come and go:
16
14
 
17
- ## 1. Register
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
+ | **Any tool that cannot** | **Not yet.** There is no connector. A hosted brain is reachable in principle and is not wired up in practice. |
18
19
 
19
- ```
20
- memgineering setup --agent
21
- ```
20
+ `memgineering setup` writes its guidance into the agent tools it finds on the
21
+ machine, and `setup --dry-run` names the ones it actually found rather than
22
+ guessing from a list.
22
23
 
23
- `--agent` is the non-interactive path, meant for you: it detects the installed
24
- tools, injects the guidance block, installs these skills, and takes its
25
- remaining answers from flags rather than prompts.
24
+ So when someone names a tool and asks whether it remembers too, work it out from
25
+ that line and answer **not yet, and here is what does** — not a hedge, not a
26
+ promise. "You are signed in, so it works everywhere" is the specific wrong
27
+ answer: the account syncs the brain between machines, it does not add a surface
28
+ that can read it.
29
+
30
+ ## 1. Register with the agents
26
31
 
27
32
  ```
28
33
  memgineering setup --agent \
29
34
  --tools claude,codex \ # default: everything detected
30
35
  --auto-update on \ # default: on, and recommended
31
- --hook on # SessionStart resurface, Claude Code only
36
+ --hook on # session-start summary + rules before an edit
32
37
  ```
33
38
 
34
- Look at `memgineering setup --dry-run` first if you want to report what would
35
- change before changing it.
36
-
37
- **Ask the user before choosing for them** when a flag would set policy rather
38
- than mechanics: auto-update is the one that matters, since it means the tool
39
- updates itself. Recommend `on` — old versions can lose access to hosted
40
- features later — but it is theirs to decide.
41
-
42
- If the user would rather click than type, `memgineering setup --human` gives
43
- them a checkbox screen in your terminal. Run it and let them drive; do not
44
- answer for them.
39
+ `--dry-run` reports what would change without changing it.
40
+
41
+ **Ask before setting policy for them.** Auto-update means the tool updates
42
+ itself; `--hook on` means note summaries and their standing rules reach an agent
43
+ unasked. Recommend both, but they are theirs to decide.
44
+
45
+ **`--hook off` removes them**, it does not merely decline to add them, so it is
46
+ the answer when someone already has the callbacks and has decided they do not
47
+ want them. Only groups memgineering wrote are taken out; anything else in that
48
+ settings file is left alone.
49
+
50
+ **After setup the agent session has to restart** for the guidance to load. Say
51
+ so, or they will wonder why nothing changed.
52
+
53
+ ### When it reports something it could not do
54
+
55
+ The guide lives between `<!-- memgineering-start -->` and
56
+ `<!-- memgineering-end -->`, and those markers are the only way it can be found
57
+ again. Two outcomes are worth recognising:
58
+
59
+ - **`N file(s) could not be written`** — a guide setup wrote is still in that
60
+ file with its markers gone, or a settings file is not valid JSON. Everything
61
+ else in that run WAS applied; the exit code is non-zero so the one skipped
62
+ file is not mistaken for a clean install. Put the markers back around the
63
+ block, or delete the block, then run setup again. Never append a second copy
64
+ by hand: two guides means both are in the user's context every session.
65
+ - **`Appended below an unmarked guide`** — the same shape, on a file setup has
66
+ no record of writing, so it installed rather than refusing. Look at the file:
67
+ if an older unmarked copy is now sitting above the new block, delete that copy.
68
+ If those lines are the user's own writing, nothing is wrong.
69
+ - **`Replaced N file(s) you had edited`** — the bytes on disk were not the ones
70
+ setup last wrote, so someone's own words were just overwritten. setup owns
71
+ those files and an upgrade has to replace them; what belongs to the user goes
72
+ OUTSIDE the markers, where nothing touches it. Ordinary upgrades do not print
73
+ this.
74
+
75
+ The hooks go to Claude Code and Codex, and only there. Codex asks the user to
76
+ review new hooks once at the start of the next session and runs neither until
77
+ they answer.
78
+
79
+ Grok is the case worth knowing, because the obvious guess is wrong: it has
80
+ hooks, more events than either of those two, and `~/.grok/hooks/` needs no
81
+ trust prompt — but a hook there cannot say anything to the model. Measured
82
+ three ways on 1.0.3, each with a value the session could not have known:
83
+ `PreToolUse` with `additionalContext`, `SessionStart` stdout, and
84
+ `UserPromptSubmit` with `additionalContext`. All three hooks ran; none of the
85
+ three arrived. Its own docs agree — `PreToolUse` reads `decision`/`deny`, and
86
+ "every other event is passive". So Grok gets the guide and the skills, which do
87
+ reach it, and nothing that would spawn a process to talk to nobody.
88
+
89
+ On Grok and Antigravity, run `memgineering resurface` yourself when you start
90
+ work in a folder, and `memgineering rules` before you change anything — that is
91
+ the same job the hooks do elsewhere, done by hand.
45
92
 
46
93
  ### When a person needs a screen, not flags
47
94
 
48
95
  ```
49
- memgineering setup --web
50
- memgineering setup --web --print-url # no browser here — hand over the link
96
+ memgineering setup --human # checkbox screen in your terminal
97
+ memgineering setup --web # a page in their own browser
98
+ memgineering setup --web --print-url # no browser here — hand over the link
51
99
  ```
52
100
 
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.
101
+ Reach for `--web` when the user is not reading your terminal at all. Its first
102
+ screen is the account question, and it is theirs: the page explains what
103
+ memgineering is, compares this machine against an account, and starts a sign-in
104
+ only after they pick. **Do not pre-empt it by running `login` first.** If they
105
+ already told you which way, pass `--login` / `--no-login` and the screen opens
106
+ with that selected.
69
107
 
70
- **After setup, the agent session has to restart** for the guidance to load.
71
- Say so — the user will otherwise wonder why nothing changed.
108
+ It covers step 2 as well, with the same disclosure `link --dry-run` prints. The
109
+ page serves on `127.0.0.1` with a one-time key and **the command does not return
110
+ until it is answered or ten idle minutes pass** — a screen nobody answered has
111
+ set nothing up, so wait for it rather than reporting done.
72
112
 
73
113
  ## 2. Connect a brain
74
114
 
75
- Two cases, and picking the wrong one is disruptive.
76
-
77
- **They already keep notes somewhere** — Obsidian, a folder of markdown,
78
- anything:
115
+ **They already keep notes somewhere:**
79
116
 
80
117
  ```
81
- memgineering link ~/Documents/Notes
118
+ memgineering link ~/notes
82
119
  ```
83
120
 
84
- This prints exactly what would be indexed and what would be refused, including
85
- a sample of the real lines that would be stored, then asks. **Run it and stop.**
86
- Let them read it and answer. Do not pass `--yes` for them: the screen is the
87
- one moment they decide what this tool may read, and answering on their behalf
88
- takes that away.
89
-
90
- If your shell has no terminal attached, `link` will say so rather than
91
- pretending the answer was no. When that happens, show them the decision
92
- instead of making it:
121
+ Prints exactly what would be indexed and what would be refused — with samples of
122
+ the real lines that would be stored — then asks. **Run it and stop.** Do not
123
+ pass `--yes` for them: that screen is the one moment they decide what this tool
124
+ may read.
93
125
 
94
- ```
95
- memgineering link ~/Documents/Notes --dry-run
96
- ```
126
+ With no terminal attached it says so rather than assuming no. Then show them
127
+ `memgineering link <path> --dry-run` — same disclosure, writes nothing — wait
128
+ for a real yes, and only then run with `--yes`.
97
129
 
98
- That prints the same disclosure and writes nothing: every note that would be
99
- indexed with the exact line that would be stored, plus any file the credential
100
- scanner is holding back. Put it in front of them, wait for a real yes, and
101
- only then run with `--yes` — which records the decision they actually made.
102
-
103
- If they cannot see your terminal at all, hand them the command rather than
104
- answering for them.
105
-
106
- **What to tell them, in one line before they answer:** the title and first
107
- paragraph of every note listed gets stored outside the folder, and if the
108
- session-start hook is on, a few of those summaries appear in every new session
109
- without anyone asking. Anything they would not want in either place goes in a
110
- `.memgdeny` file at the top of the folder — one path per line, no wildcards:
130
+ **Tell them one thing before they answer:** the title and first paragraph of
131
+ every listed note gets stored outside the folder, and with the session-start
132
+ hook on, a few of those summaries reach every new session unasked. Anything they
133
+ would not want in either place goes in `.memgdeny` at the top of the folder, one
134
+ path per line, no wildcards:
111
135
 
112
136
  ```
113
137
  30_personal/medical.md
114
138
  journal/ (a trailing slash covers a whole folder)
115
139
  ```
116
140
 
117
- If it refuses because a `.memgdeny` line matches no file, that is working as
118
- intended — a rule with a wrong path protects nothing. Fix the paths it
119
- suggests, or remove the lines.
141
+ A `.memgdeny` line matching no file is refused on purpose — a rule with a wrong
142
+ path protects nothing.
120
143
 
121
- **They have no notes yet**:
144
+ **They have no notes yet:**
122
145
 
123
146
  ```
124
147
  memgineering init ~/brain
125
148
  ```
126
149
 
127
- Creates the layout — eleven folders and five base files — and links it. Then
128
- tell them to fill in `01_BASE/USER.md` and leave the rest; the folders are
129
- there for when they are needed, not as homework.
150
+ Creates the layout and links it. Tell them to fill in `01_BASE/USER.md` and
151
+ leave the rest; the folders are there for when they are needed, not as homework.
130
152
 
131
153
  ### Several brains
132
154
 
133
- Normal: a personal one, a team folder that syncs, one per repository. Which
134
- one answers is decided by where you are, in this order:
155
+ Normal — one of their own, a shared folder, one per project. Which one answers is
156
+ decided in this order: `--vault <path>` → a `.memgineering` pointer found by
157
+ walking up → the brain the cwd is inside → the only one linked → their default.
135
158
 
136
- 1. `--vault <path>`
137
- 2. a `.memgineering` pointer file, found by walking up from the cwd
138
- 3. the brain the current directory is inside
139
- 4. the only one linked
140
- 5. their default brain — the first one they linked, unless they changed it
159
+ ```
160
+ memgineering use ~/brains/work # bind this directory to one brain
161
+ memgineering use --default ~/brains/work
162
+ ```
141
163
 
142
- Bind a directory to one brain when that directory belongs to it:
164
+ Inside a repository `use` writes a relative path, so it can be committed and
165
+ resolves for a teammate who links the same brain.
166
+
167
+ **Do not give up on a write because the choice is ambiguous.** A refused
168
+ `remember` means the thing they asked you to keep was not kept — ask which
169
+ brain, or pass `--vault` for the write and settle the default afterwards.
170
+
171
+ ## Checking it worked
143
172
 
144
173
  ```
145
- memgineering use ~/brains/work
174
+ memgineering recall "anything" # should answer, even if with "nothing matched"
175
+ memgineering log # what this brain has recorded
146
176
  ```
147
177
 
148
- Inside a repository this writes a relative path, so it can be committed and
149
- will resolve for a teammate who links the same brain.
178
+ ## Asking where things stand, without changing them
150
179
 
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:
180
+ There is no `status` verb. Three read-only questions cover it, and none of them
181
+ writes anything:
154
182
 
155
183
  ```
156
- memgineering use --default ~/brains/work
184
+ memgineering setup --agent --dry-run # which tools are installed, what would change
185
+ memgineering whoami # which account this machine is signed in as
186
+ memgineering use # which brain answers recall and takes writes
157
187
  ```
158
188
 
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
-
164
- ## Checking it worked
189
+ **`use` is the one to run before believing anything about where a note went.**
190
+ Signed in and pointed at a hosted brain, it names that brain — where `recall`
191
+ reads and every write lands — and then the folder on this disk, which `--local`
192
+ reaches and which the before-edit hook reads.
193
+
194
+ Pointed at one with no sign-in here (what `logout` leaves: token cleared,
195
+ pointer kept), it names the **folder** first, because that is genuinely where
196
+ the next write goes — nothing refuses, it falls through to the local brain.
197
+
198
+ The third state is a sign-in left waiting by `login --emit-only`: it names the
199
+ folder AND the waiting sign-in, because until somebody approves it the next
200
+ command's claim is refused and the write lands in the folder — and once approved
201
+ that same claim succeeds and everything goes to the hosted brain.
202
+
203
+ In `--json`, read **`destination`**: `"hosted"`, `"local"`, or `"pending"`.
204
+ `"pending"` is not a hedge — a sign-in waiting for approval lands writes in
205
+ `brain` until somebody approves it and in the hosted brain after, and this
206
+ command will not open a browser to find out which. Do not read
207
+ `hosted.signed_in` for this: it is `false` for both the logged-out and the
208
+ waiting state, and those go to different places. It reads state off the disk, so
209
+ it answers with the server down and never finishes a sign-in just for being
210
+ asked.
211
+
212
+ `setup --agent --dry-run` is the one worth naming out loud, because the answer to
213
+ "am I installed" lives behind a verb that otherwise installs. A tester who wanted
214
+ the answer either avoided `setup` and had no answer, or ran it without
215
+ `--dry-run`. It writes nothing at all — it reports.
216
+
217
+ The hook itself is `memgineering guard`, deliberately absent from `--help`: it
218
+ reads a PreToolUse payload on stdin and does nothing without one, so listing it
219
+ would put "run this" in front of an agent for a command that cannot work when
220
+ run. If a hook is misbehaving, that is the name to look for in the tool's hook
221
+ config — not a command to invoke by hand.
222
+
223
+ ## Moving a brain between this machine and their account
165
224
 
166
225
  ```
167
- memgineering recall "anything" # should answer, even if with "nothing matched"
168
- memgineering log # what this brain has recorded
226
+ memgineering push # this folder → their account
227
+ memgineering pull ~/my-brain # their account → a folder here
169
228
  ```
170
229
 
230
+ Both are safe to run twice and careful in opposite directions: **`push` never
231
+ deletes anything locally, `pull` never overwrites anything locally.** Whatever
232
+ was already there is left alone and counted, so an interrupted transfer finishes
233
+ by running the same command again. `--dry-run` on either lists what would move.
234
+
235
+ Reach for `pull` when they want a backup, are moving machines, or ask where
236
+ their memory actually lives. **Say what it brings**: notes the brain excludes
237
+ from recall come down too — excluded means "stop reading this", not "this is no
238
+ longer yours" — along with `.memgignore`. Readable files in a folder is not
239
+ something to let them discover later.
240
+
241
+ **One `pull` is one brain, not one account.** If the output names other hosted
242
+ brains (`other_brains` in `--json`), this folder is not their memory — it is part
243
+ of it. Run `pull --brain <name> <folder>` for each before telling them anything
244
+ is backed up. A partial backup nobody knows is partial is worse than one that
245
+ failed.
246
+
247
+ What lands is markdown, not yet a brain here. Offer `memgineering link <folder>`
248
+ as a next step rather than running it.
249
+
171
250
  ## Turning things off
172
251
 
173
252
  ```
@@ -0,0 +1,183 @@
1
+ ---
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, 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". Covers remember, revise, undo, log, retire, exclude, onboard, and what to say before writing.
4
+ type: skill
5
+ allowed-tools: Bash(memgineering:*)
6
+ ---
7
+
8
+ # Writing to the user's brain
9
+
10
+ Reading is `memgineering-recall`; decisions that bind an agent are
11
+ `memgineering-rules`.
12
+
13
+ ## Recording what you learned
14
+
15
+ ```
16
+ memgineering remember "the deadline moved to the 30th" \
17
+ --reason "they said so on the call and the old date is still written down"
18
+ ```
19
+
20
+ Lands immediately and is recallable at once. No approval queue by design: the
21
+ trade is permission-before for correction-after, and every write records how to
22
+ reverse it. Do not ask permission for ordinary observations — write them, and
23
+ mention it in a sentence.
24
+
25
+ **`--reason` on every write.** It goes in the ledger and is the only part of the
26
+ record that still means anything six months later. Every write verb takes it:
27
+ `remember`, `revise`, `retire`, `exclude`, `undo`. The one on `undo` matters
28
+ most — it is the moment an earlier conclusion turned out to be wrong. It is
29
+ refused if it looks like it carries a credential; say what changed without the
30
+ value rather than dropping the flag.
31
+
32
+ ```
33
+ memgineering undo --reason "that belonged to the other project" # the last change
34
+ memgineering undo <op_id> # a specific one
35
+ memgineering log # what changed, why, what can still be undone
36
+ ```
37
+
38
+ **`log` labels the id with the verb that takes it.** `undo: <id>` means `undo`
39
+ will accept that one; `op: <id>` means it will not. `undo` is last-in-first-out
40
+ per note — only the most recent operation on a note can be taken back, and the
41
+ one underneath becomes available again the moment it is — so `op:` covers an
42
+ operation a later one wrote over, one already undone, one that is itself an
43
+ undo, a note edited outside the tool since, and a verb that brain cannot reverse
44
+ (a hosted brain cannot reverse an `exclude`; neither reverses an `import`). The
45
+ id is still shown either way so you can quote it, and `--json` carries
46
+ `superseded` on both a hosted brain and one in a folder, so you do not have to
47
+ read the label.
48
+
49
+ **An operation id is not a memory handle**, though they look alike. `open` takes
50
+ handles from `recall`; ids from `log` name changes. Handed one anyway, `open`
51
+ says what it actually is and which note it touched, rather than "nothing here
52
+ matches".
53
+
54
+ **Write down:** something that turned out to work a particular way; a choice
55
+ that got made, by them or by you; **an attempt that failed, and what finally
56
+ worked instead**; a constraint; a decision they stated; work of yours they
57
+ looked at and confirmed. The failed attempt is the one most often skipped and
58
+ the one that saves the most — without it the next session walks the same dead
59
+ end.
60
+ **Skip:** anything true only inside this conversation, and anything they said
61
+ they did not want kept.
62
+
63
+ **If it is a decision rather than a fact** — something they settled and expect to
64
+ hold next time — it takes `--rule`. See `memgineering-rules`.
65
+
66
+ **Write what you checked, not what you worked out.** A decision is whatever the
67
+ user says it is. A fact is not: anything a command or a file could confirm —
68
+ an address, an identifier, a version, a path, a number — goes in verified, or
69
+ not at all. If you derived it from a pattern rather than reading it, check it
70
+ first, or write the part you know and leave the rest out. A guess in a note is
71
+ indistinguishable from a fact the next time it is recalled, and it will be
72
+ recalled long after anyone remembers it was a guess.
73
+
74
+ **Recall first, then pick the verb.** If what you learned answers a note that
75
+ already exists, `revise` it. `remember` would leave two current notes on one
76
+ subject and the next recall returns both — the re-discovery problem the user was
77
+ trying to end. New subject → `remember`. Existing subject, now settled →
78
+ `revise`.
79
+
80
+ ## Changing a conclusion
81
+
82
+ ```
83
+ memgineering revise friday-review \
84
+ --claim "Fridays are for review. Nothing new goes out that day." \
85
+ --summary "no new work on Fridays"
86
+ ```
87
+
88
+ - `--action supersede` (default) — the conclusion CHANGED. Stamps `valid_from`
89
+ with now, because a replaced conclusion starts now.
90
+ - `--action reinforce` — same conclusion, new support. Leaves `valid_from` alone.
91
+ - `--action conflict` — two notes DISAGREE. Records the edge, leaves both
92
+ standing, deliberately does not write the claim you passed.
93
+ - `--dry-run` shows the diff and writes nothing.
94
+
95
+ Pick by what changed, not by habit: `supersede` on a fact that was true all
96
+ along dates it from today, and the date is the field this exists to get right.
97
+
98
+ **Re-recording something unchanged is refused** — otherwise a user repeating
99
+ themselves becomes ledger entries recording no change. When you do mean "this
100
+ still holds", say what confirms it: `--action reinforce --reason "<what confirms
101
+ it>"`.
102
+
103
+ This rewrites only the memory block in frontmatter. The prose is the user's;
104
+ neither the command nor you should rewrite it uninvited.
105
+
106
+ ## Retiring versus excluding
107
+
108
+ ```
109
+ memgineering retire <ref> --reason "the date moved" # no longer current, still visible
110
+ memgineering exclude path/to/note.md --reason "it has someone's phone number in it" # stop reading it
111
+ ```
112
+
113
+ Retiring keeps the note in recall, ranked last and labelled. Excluding takes it
114
+ out of the index and never touches the file. If the user says "delete", ask
115
+ which they mean.
116
+
117
+ ## Filling in the base files, which only you can do
118
+
119
+ `init` leaves five files in `01_BASE/` as templates, because what goes in them
120
+ cannot be typed into a form. `resurface` puts them at the top of every session,
121
+ so an empty one costs something every time.
122
+
123
+ ```
124
+ memgineering onboard
125
+ ```
126
+
127
+ Says which are still untouched and what to ask for each. Run it first rather
128
+ than working from a script — asking somebody a question they already answered is
129
+ its own kind of forgetting. They may also ask outright ("set up my memory", "fill in my profile"); same job.
130
+
131
+ ```
132
+ 01_BASE/USER.md who they are, what they work on, what they are trying to do
133
+ 01_BASE/PREFERENCES.md how they like answers, code, decisions — length, tone, checking in
134
+ 01_BASE/BOUNDARIES.md what you must ask before doing. The one they will regret not saying
135
+ 01_BASE/CRITICAL_FACTS.md what is expensive to get wrong — money, data, other people
136
+ 01_BASE/TOOLING.md the apps, machines and commands they actually use
137
+ ```
138
+
139
+ **How to ask.** One question at a time, in their words, and stop when the answers
140
+ thin out — three good lines beat a filled-in template. Take what they say in
141
+ passing during ordinary work too; most of `TOOLING.md` gets written by noticing.
142
+
143
+ **How to write it — both halves.** `revise` only touches frontmatter, so write
144
+ the body FIRST with your normal file tools, replacing the template's prompt with
145
+ what they actually said, then record the conclusion:
146
+
147
+ ```
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 an untouched template leaves the file reading as a
155
+ half-filled form; `revise` warns when you do this, and the warning means go back
156
+ and write the body. `--action reinforce`, not the default: these facts were
157
+ always true and you have only just been told them, so dating them today is wrong
158
+ in the one field a memory store exists to get right.
159
+
160
+ **This is the ONE place you edit a brain file directly** — `01_BASE/` only, and
161
+ only while it is still the template. After that first pass these are theirs like
162
+ any other note.
163
+
164
+ **Do not invent an answer to move on, and do not fill a file because it is
165
+ empty.** `BOUNDARIES.md` guessed at is worse than blank: the next agent reads it
166
+ as something the user said.
167
+
168
+ ## What to raise with the user
169
+
170
+ The tool does not ask; you decide. Say something, once and plainly, when the
171
+ output marks the target `⚠ critical target` (that is `01_BASE/`), when you are
172
+ recording something said in passing that may be sensitive, or when what you
173
+ learned contradicts a memory currently marked current. Everything else: do it,
174
+ and mention it in a sentence.
175
+
176
+ ## Rules
177
+
178
+ - **Never edit brain files with Read/Write/Edit**, except the one case above.
179
+ Only the CLI records the change and keeps `undo` working.
180
+ - **Their notes are theirs.** Prose is never rewritten by this tool, and should
181
+ not be rewritten by you without being asked.
182
+ - **Store full ids, not short handles**, anywhere durable. `open` prints the
183
+ full `id:` for exactly this.
File without changes