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,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, 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.
3
+ description: Use when the user refers to something they told you before, asks what was decided, tells you something worth keeping, settles something that should hold next time, 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 do this again", "remember this", "is this still true", "from now on", "never do X again", "set up my memory", "fill in my profile", "what do you know about my setup". This is the map — it says which verb answers which question and points at the skill that covers it.
4
4
  type: skill
5
5
  allowed-tools: Bash(memgineering:*)
6
6
  ---
@@ -12,326 +12,67 @@ database: they wrote those files, they can open them in any editor, and
12
12
  memgineering reads them and keeps a derived index outside the folder. Deleting
13
13
  that index costs a rebuild and nothing else.
14
14
 
15
- Everything below assumes the brain is already linked. If a command answers
16
- `no brain is linked yet`, see "Getting connected" at the bottom.
15
+ This page is the map. Each verb below has one or two lines here and its detail
16
+ in one of four skills; open the one you need rather than all of them.
17
17
 
18
- ## Answering from what they already know
18
+ ## Which verb answers which question
19
19
 
20
- Recall first whenever the question sounds settled — a past decision, their
21
- setup, their preferences, why something is the way it is.
20
+ | the question in front of you | verb | detail |
21
+ | -------------------------------------------------------------- | ---------------------------------- | ---------------------- |
22
+ | "what did we decide about…", anything that sounds settled | `recall "<their words>"` | `memgineering-recall` |
23
+ | you have a card and need what is behind it | `open <handle>` | `memgineering-recall` |
24
+ | two memories disagree, or one looks old | `evidence <handle>` | `memgineering-recall` |
25
+ | new folder, or "where were we" — nothing to search for yet | `resurface` | `memgineering-recall` |
26
+ | you learned something durable | `remember "<it>" --reason "<why>"` | `memgineering-writing` |
27
+ | a conclusion you recorded has changed | `revise <ref> --claim …` | `memgineering-writing` |
28
+ | that write was wrong | `undo --reason "<why>"` | `memgineering-writing` |
29
+ | no longer current / stop reading this file | `retire` · `exclude` | `memgineering-writing` |
30
+ | their `01_BASE/` files are still templates | `onboard`, then ask | `memgineering-writing` |
31
+ | the user settled something that should hold next time | `remember "<it>" --rule` | `memgineering-rules` |
32
+ | what already binds me here? | `rules` | `memgineering-rules` |
33
+ | nothing is connected yet, or it needs to reach another machine | `link` · `init` · `push` · `pull` | `memgineering-setup` |
22
34
 
23
- ```
24
- memgineering recall "how do we deploy"
25
- ```
35
+ Everything below is what holds no matter which of those you are doing.
26
36
 
27
- ```
28
- ## recall: how do we deploy (2 cards)
37
+ ## Recall before you answer, write when you learn
29
38
 
30
- ### 1. Deploy is manual
31
- stated
39
+ Two habits, and they are the whole product:
32
40
 
33
- > launchctl kickstart on the Mac Studio, no CD pipeline
41
+ - **Before answering anything that sounds already settled**, recall. Their
42
+ project, their setup, their preferences, their past reasoning — and before
43
+ repeating advice you have no evidence they wanted.
44
+ - **When this session decides something durable**, write it. No approval step
45
+ by design: it is recorded and reversible, so a wrong entry costs one `undo`,
46
+ not a permanent mistake. Do not ask permission for ordinary observations.
34
47
 
35
- `open: deploy-manual`
36
- ```
48
+ **Pass `--reason` on every write.** It goes in the ledger and it is the only
49
+ part of the record that still means anything to whoever reads it six months
50
+ from now. It is refused if it looks like it carries a credential.
37
51
 
38
- The output is already shaped for your context — headings, a quoted summary,
39
- and a handle. Paste it in as-is rather than reformatting it into prose.
52
+ If the user settled something rather than told you something — "from now on",
53
+ "never", "we always do it this way" — that takes `--rule`. See `memgineering-rules`.
40
54
 
41
- **But read it before you use it.** These are candidates ranked by relevance,
42
- not a list of answers: anything matching a word from the query is returned, so
43
- the tail of a long result can be only loosely related. That is deliberate —
44
- for a memory system, failing to return a note someone knows is there is worse
45
- than returning one they can ignore. Use the top matches that actually answer
46
- the question and leave the rest; quoting all of them back as if each were
47
- relevant is how a useful recall turns into noise.
55
+ ## What to raise rather than just doing
48
56
 
49
- Then open only what matters:
50
-
51
- ```
52
- memgineering open deploy-manual # the claims behind the card
53
- memgineering open deploy-manual --detail summary # + its headings
54
- memgineering open deploy-manual --detail chunks # + every section
55
- memgineering open deploy-manual --section preflight # one section
56
- memgineering open deploy-manual --detail full # the whole note
57
- ```
58
-
59
- `open` takes a handle, a full id, a path inside the brain, or a note's exact
60
- title — so when you already know what you want, skip the recall.
61
-
62
- ### When one round trip is enough
63
-
64
- ```
65
- memgineering recall "deploy" --limit 1 --detail full
66
- ```
67
-
68
- Best match, read whole, one call. Use this when the user's question clearly
69
- points at one note.
70
-
71
- ### Nothing matched
72
-
73
- Say so. Only titles, aliases and summaries are searched, so suggest broader
74
- words — but do not go read their folder yourself to compensate. A brain that
75
- answers "nothing" is giving you real information.
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
-
174
- ## Deciding which one to trust
175
-
176
- When two memories disagree, or one looks old enough to doubt, do not settle it
177
- by date.
178
-
179
- ```
180
- memgineering evidence deploy-manual
181
- ```
182
-
183
- ```
184
- surfaced 34× (12× in this folder, 22× elsewhere)
185
- opened 12× (35% of the recalls that surfaced it)
186
- last used 3 days ago
187
- in the ledger since 2026-05-02 · changed 2×
188
-
189
- **well-used** — it has been reached for and read. The record backs it.
190
-
191
- why it last changed:
192
- > CD was removed from the repo
193
- ```
194
-
195
- **Newer does not win.** A rule that has stood for eleven months has eleven
196
- months of nobody contradicting it behind it; a note written last week has a
197
- week. What separates them is whether either was ever actually used, and what
198
- the last person to change their mind said. Both are in the output above.
199
-
200
- Three standings, and each is a fact rather than a grade:
201
-
202
- - **well-used** — recall returned it and somebody read it
203
- - **surfaced, never opened** — it keeps coming back and nobody reads it. Either
204
- it does not answer those questions, or its summary does not say what it knows
205
- - **never recalled** — nothing has ever surfaced it. It may be perfectly true
206
- and simply never needed, but nothing supports it either
207
-
208
- If it says this machine has no recall history, the numbers mean nothing yet —
209
- that log is local, so a brain synced to a new laptop starts empty. Say that
210
- rather than reporting the memory as unused.
211
-
212
- ## Writing things down
213
-
214
- ```
215
- memgineering remember "deploys are manual — launchctl by hand, no CD" \
216
- --reason "watched the deploy happen by hand twice"
217
- ```
218
-
219
- Lands immediately as its own note and is recallable at once. There is no
220
- approval queue: the design trades permission-before for correction-after, and
221
- every write records how to reverse it.
222
-
223
- **Pass `--reason` on every write.** It goes in the ledger, and it is the only
224
- part of the record that survives being read six months later by somebody — the
225
- user, or you in a new session — who no longer remembers the conversation. Every
226
- write verb takes it: `remember`, `revise`, `retire`, `exclude`, `undo`. The one
227
- on `undo` is usually the most valuable of all, because it is the moment an
228
- earlier conclusion turned out to be wrong.
229
-
230
- It is refused if it looks like it contains a credential. The ledger travels
231
- with the brain, so that would be a permanent synced copy — say what changed
232
- without the value, or drop the flag; the write itself is unaffected.
233
-
234
- ```
235
- memgineering undo --reason "that belonged to the other project" # the last change
236
- memgineering undo <op_id> # a specific one
237
- memgineering log # what changed, why, and what can still be undone
238
- ```
239
-
240
- Write down: decisions and their reasons, constraints, corrections the user
241
- made to you, how something actually works once you found out. Skip: things
242
- true only inside this conversation, and anything they said they did not want
243
- kept.
244
-
245
- **Recall first, then decide which verb.** If what you just learned answers a
246
- note that is already there — the vague one, the one that says "nobody wrote
247
- this down" — `revise` it instead. `remember` would leave two current notes on
248
- the same subject and the next recall would return both, which is the
249
- re-discovery problem the user was trying to end. New subject → `remember`.
250
- Existing subject, now settled → `revise`.
251
-
252
- ### Changing a conclusion
253
-
254
- ```
255
- memgineering revise deploy-manual \
256
- --claim "Deploying is manual — pushing to main does nothing." \
257
- --summary "manual only, no CD"
258
- ```
259
-
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.
266
- - `--dry-run` shows the diff and writes nothing
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
-
278
- This only ever rewrites the memory block in a note's frontmatter. The prose is
279
- the user's; neither this command nor you should rewrite it uninvited.
280
-
281
- ### Retiring versus excluding
282
-
283
- ```
284
- memgineering retire <ref> --reason "the date moved" # no longer current, still visible
285
- memgineering exclude path/to/note.md --reason "names an internal host" # stop reading it
286
- ```
287
-
288
- Retiring keeps the note in recall, ranked last and labelled. Excluding takes it
289
- out of the index and never touches the file. If the user says "delete", ask
290
- which they mean — they are different, and guessing picks one.
291
-
292
- ## Starting a session
293
-
294
- ```
295
- memgineering resurface
296
- ```
297
-
298
- No query. It ranks by what has been recalled in this folder before, how
299
- recently, and which of the user's base notes have gone unread — the things you
300
- should already know here before they have to tell you again.
301
-
302
- ## What to raise with the user
303
-
304
- The tool does not ask; you decide. Say something, once and plainly, when:
305
-
306
- - the output marks the target `⚠ critical target` — that is `01_BASE/`, the
307
- files defining who they are and what you may do
308
- - you are about to record something said in passing that may be sensitive
309
- - what you learned contradicts a memory currently marked current
310
-
311
- Everything else: do it, and mention it in a sentence.
57
+ The tool does not gate writes; your judgement does. Tell them, plainly and
58
+ once, when the change touches `01_BASE/` (the output marks these
59
+ `⚠ critical target`), when you are recording something said in passing they may
60
+ not want kept, or when what you learned contradicts a memory marked current.
61
+ Everything else: write it and mention it in a sentence.
312
62
 
313
63
  ## Rules
314
64
 
315
65
  - **Never edit brain files with Read/Write/Edit.** Only the CLI records the
316
- change and keeps `undo` working; a hand edit is invisible to both.
66
+ change and keeps `undo` working; a hand edit is invisible to both. The one
67
+ narrow exception — first-pass `01_BASE/` bodies — is in `memgineering-writing`.
317
68
  - **Never invent a handle or id.** They come from `recall`, `resurface`, `open`.
69
+ - **Nothing matched is a real answer.** Say the brain has nothing on it rather
70
+ than filling the gap with a guess.
318
71
  - **Store full ids, not short handles**, anywhere durable — your own memory, a
319
72
  document, a ticket. `open` prints the full `id:` for exactly this.
320
73
  - **`--json`** when you need to parse rather than read.
321
- - **Several brains** (personal, team, a repo's own) resolve by where you are.
74
+ - **Several brains** (one of their own, a shared one, one per project) resolve by where you are.
322
75
  If a command says the choice is ambiguous, pass `--vault <path>` — or bind
323
76
  the directory once with `memgineering use <brain>`.
324
77
 
325
- ## Getting connected
326
-
327
- ```
328
- memgineering link ~/Documents/Notes # notes they already keep
329
- memgineering init ~/brain # nothing yet — creates the layout
330
- ```
331
-
332
- `link` shows exactly what would be stored and asks first; run it in a terminal
333
- the user can see, and let them answer. Do not pass `--yes` on their behalf.
334
-
335
- With no terminal attached it says so instead of assuming the answer was no.
336
- Show them `memgineering link <path> --dry-run` — same disclosure, writes
337
- nothing — and run with `--yes` only once they have actually said yes.
78
+ If a command answers `no brain is linked yet`, that is `memgineering-setup`.
@@ -0,0 +1,142 @@
1
+ ---
2
+ name: memgineering-recall
3
+ description: Use when answering anything that sounds already settled — a past decision, the user's setup, their preferences, why something is the way it is — or when starting work in a folder and you need to know what you are missing. Also when two memories disagree and you have to decide which to trust. Triggers include "what did I decide about X", "how do we do this again", "check my notes", "is this still true", "which one do I go with", "where were we", "what should I know", "why did we do it this way", "how far did we get". Covers recall, open, evidence, resurface, and how much depth to ask for.
4
+ type: skill
5
+ allowed-tools: Bash(memgineering:*)
6
+ ---
7
+
8
+ # Reading the user's brain
9
+
10
+ Writing is `memgineering-writing`; decisions that bind you are
11
+ `memgineering-rules`.
12
+
13
+ ## Recall, then open what matters
14
+
15
+ ```
16
+ memgineering recall "what did we decide about the schedule"
17
+ ```
18
+
19
+ ```
20
+ ## recall: what did we decide about the schedule (2 cards)
21
+
22
+ ### 1. Fridays are for review, not new work
23
+ a standing decision · stated
24
+
25
+ > nothing new goes out on a Friday — the day is for checking what already did
26
+
27
+ `open: friday-review`
28
+ ```
29
+
30
+ The output is already shaped for your context — paste it in rather than
31
+ reformatting it into prose.
32
+
33
+ **But read it before you use it.** These are candidates ranked by relevance, not
34
+ a list of answers: anything matching a word from the query comes back, so the
35
+ tail can be only loosely related. That is deliberate — failing to return a note
36
+ someone knows is there is worse than returning one they can ignore. Use the top
37
+ matches that actually answer the question; quoting all of them back as if each
38
+ were relevant is how a useful recall turns into noise.
39
+
40
+ **`a standing decision` is not decoration.** That card is a decision the user
41
+ made, not an observation you are free to weigh against your own judgement — the
42
+ same thing `memgineering rules` lists and the before-edit hook delivers. If what
43
+ you are about to do goes against one, say so in a sentence rather than quietly
44
+ doing either. In `--json` it is the `binding` field, present and `false` on an
45
+ ordinary memory so you can tell "not a rule" from "this version does not say".
46
+ See `memgineering-rules`.
47
+
48
+ **A question asked as a sentence matches loosely.** Search is text over titles,
49
+ aliases and summaries, so a whole-sentence query can come back matching one
50
+ ordinary word in it, and every card will still read `stated` — that word is
51
+ about who wrote the fields, never about whether the card answers you. Recall
52
+ says so under the results when the query is a question or four words or more.
53
+ Prefer fewer, more specific words.
54
+
55
+ ```
56
+ memgineering open friday-review # the claims behind the card
57
+ memgineering open friday-review --section why # one section
58
+ memgineering open friday-review --detail full # the whole note
59
+ ```
60
+
61
+ `open` takes a handle, a full id, a path inside the brain, or a note's exact
62
+ title — so when you already know what you want, skip the recall.
63
+
64
+ | depth | what you get |
65
+ | ------------------ | ----------------------------------------------- |
66
+ | `--detail card` | title + summary (default) |
67
+ | `--detail summary` | + the note's headings |
68
+ | `--detail chunks` | + every section, or one with `--section <name>` |
69
+ | `--detail full` | the whole note |
70
+
71
+ `memgineering recall "the schedule" --limit 1 --detail full` is "find the best match
72
+ and read it" in one call.
73
+
74
+ ## Two answers that are answers
75
+
76
+ **Nothing matched.** Say so. Only titles, aliases and summaries are searched, so
77
+ suggest broader words — but do not go read their folder yourself to compensate.
78
+ A brain that answers "nothing" is giving you real information.
79
+
80
+ **Cards that are not answers.** A card marked `not filled in yet` is one of the
81
+ five `01_BASE/` files, still byte-for-byte what `init` wrote. Nobody has answered
82
+ it, so it is evidence of nothing — do not quote it back as what they think. When
83
+ every card carries that mark, recall says so above them (`--json`:
84
+ `scaffolding: true`), and that is the moment to offer to fill them in rather
85
+ than answer from them — see `memgineering-writing`.
86
+
87
+ The mark disappears once the user writes in the file. A filled-in base note is
88
+ often the best answer in the brain: _who am I_, _what am I not allowed to do_,
89
+ _where does everything live_ all live in `01_BASE/`.
90
+
91
+ ## Starting a session
92
+
93
+ ```
94
+ memgineering resurface
95
+ ```
96
+
97
+ No query. Ranks by what has been recalled in this folder before, how recently,
98
+ and which base notes have gone unread — what you should already know here before
99
+ they have to tell you again. It is the answer to a vague opening that recall
100
+ cannot serve, because there is nothing to search for yet.
101
+
102
+ ## Deciding which one to trust
103
+
104
+ ```
105
+ memgineering evidence friday-review
106
+ ```
107
+
108
+ ```
109
+ surfaced 34× (12× in this folder, 22× elsewhere)
110
+ opened 12× (35% of the recalls that surfaced it)
111
+ last used 3 days ago
112
+ in the ledger since 2026-05-02 · changed 2×
113
+
114
+ **well-used** — it has been reached for and read. The record backs it.
115
+ why it last changed:
116
+ > the team stopped working Fridays entirely
117
+ ```
118
+
119
+ **Newer does not win.** A rule that has stood eleven months has eleven months of
120
+ nobody contradicting it; a note written last week has a week. What separates
121
+ them is whether either was ever actually used, and what the last person to change
122
+ their mind said — both are in that output.
123
+
124
+ Three standings, each a fact rather than a grade:
125
+
126
+ - **well-used** — recall returned it and somebody read it
127
+ - **surfaced, never opened** — it keeps coming back and nobody reads it. Either
128
+ it does not answer those questions, or its summary does not say what it knows
129
+ - **never recalled** — nothing has surfaced it. It may be true and simply never
130
+ needed, but nothing supports it either
131
+
132
+ If it says this machine has no recall history, the numbers mean nothing yet —
133
+ that log is local, so a brain synced to a new laptop starts empty. Say that
134
+ rather than reporting the memory as unused.
135
+
136
+ ## Rules
137
+
138
+ - **Never invent a handle or id.** They come from `recall`, `resurface`, `open`.
139
+ - **`--json`** when you need to parse rather than read.
140
+ - **Several brains** resolve by where you are. If a command says the choice is
141
+ ambiguous, pass `--vault <path>` — or bind the directory with
142
+ `memgineering use <brain>`.
@@ -0,0 +1,111 @@
1
+ ---
2
+ name: memgineering-rules
3
+ description: Use when the user settles something they expect to hold next time — a colour they will not use, a step never to skip, a way things get named here — or when you want to see what already binds you in this folder. A decision does not have to be announced as a rule to be one. Triggers include "from now on", "always", "never", "don't do that again", "let's go with X from here", "we always do it this way", "what rules do I have". Covers remember --rule, rules, and what the before-edit hook shows.
4
+ type: skill
5
+ allowed-tools: Bash(memgineering:*)
6
+ ---
7
+
8
+ # Decisions that bind, not facts that inform
9
+
10
+ Most of a brain answers a question. A few entries do not: they say what to do
11
+ and what never to do, and they are only worth anything if they arrive before
12
+ the thing they govern.
13
+
14
+ ## Why this exists
15
+
16
+ Measured twice, on a real brain. A session was handed the user's recorded
17
+ decision — stated plainly, with the specifics included — at session start, and
18
+ produced work that contradicted it. Adding a stronger instruction to that
19
+ session-start summary made the next run **worse**, not better.
20
+
21
+ The wording was not the lever. The choice a rule governs is not made when a
22
+ session starts; it is made when a file is written, several hundred turns of
23
+ context later, by which point the opening summary is the oldest thing in the
24
+ window.
25
+
26
+ So a memory can now say that it **binds**, and those are put in front of
27
+ whichever agent is working in that folder the first time it goes near a file
28
+ that session — once, capped, silent for the rest.
29
+
30
+ ## Marking a decision
31
+
32
+ ```
33
+ memgineering remember "no new work goes out on a Friday" --rule \
34
+ --reason "they have said it twice and it keeps getting missed"
35
+ ```
36
+
37
+ `--rule` is what separates a decision from an observation. Everything else
38
+ about the write is unchanged — same note, same ledger, same `undo`.
39
+
40
+ **The user does not have to say the word "rule".** "from now on", "always",
41
+ "never", "let's go with this", "we always do it this way" — that is a
42
+ decision. Record it as one and say in a sentence that you did.
43
+
44
+ **What is NOT a rule.** "The review usually takes an hour" is a fact, however true,
45
+ and belongs in an ordinary `memgineering remember`. So does anything that only
46
+ holds for the current task. Look at what widens or narrows the scope: "never",
47
+ "always", "whenever" widen; "this time", "for now" narrow. If you are unsure,
48
+ it is not a rule — an ordinary memory is still recallable, and a wrong rule
49
+ spends a slot that something else needed.
50
+
51
+ ## Seeing what binds
52
+
53
+ ```
54
+ memgineering rules
55
+ ```
56
+
57
+ The standing decisions for this brain, strongest first, and nothing else. A
58
+ zero-result answer says how to add one rather than printing nothing.
59
+
60
+ A hosted brain answers this too, and `--rule` writes to one land marked. The
61
+ marking lives in the note's own frontmatter either way, so a brain that was
62
+ pushed from a folder keeps every rule it had.
63
+
64
+ One difference is worth knowing rather than discovering. The before-edit hook
65
+ reads a brain **on this machine**, so on a machine pointed at a hosted brain it
66
+ shows the local folder's rules, not the hosted brain's — a network call on the
67
+ path of every file write is not a trade this makes. `memgineering rules` shows
68
+ whichever brain the machine is pointed at; add `--local` to see what the hook
69
+ will actually deliver.
70
+
71
+ ## What the user's agent actually sees
72
+
73
+ With the hooks installed (`memgineering setup` — Claude Code and Codex; see
74
+ `memgineering-setup`), the first time a session touches a file in a folder with
75
+ a brain, it receives the rules and one line of instruction:
76
+
77
+ > Decisions this user has already made. They are theirs, not suggestions, and
78
+ > they hold whether or not this task mentions them:
79
+ > …
80
+ > Follow them. If what you are about to do goes against one, say so in a
81
+ > sentence instead of doing it quietly.
82
+
83
+ **That last line is the job.** Following a rule silently is the easy half. When
84
+ what the user just asked for goes against one of their own earlier decisions,
85
+ say so in a sentence and let them choose — do not quietly obey either one.
86
+
87
+ It never blocks an edit, never answers whether an edit is allowed, and never
88
+ speaks twice in a session. Tools without hooks get nothing automatic here; on
89
+ those, run `memgineering rules` yourself when you start work in a folder.
90
+
91
+ ## Eight, and why the number matters
92
+
93
+ The list handed to an agent is **capped at eight**. This is a budget, not a
94
+ technical limit: it arrives inside somebody's real task, and the failure this
95
+ whole mechanism answers was an agent ignoring five cards at session start. A
96
+ wall of thirty rules is the same failure with a bigger wall.
97
+
98
+ So when a brain has more than eight, the output says how many were left out and
99
+ points at `memgineering retire` rather than truncating in silence. The answer to
100
+ a long list is fewer rules, not a longer one.
101
+
102
+ Two consequences worth knowing before you mark things:
103
+
104
+ - **Global habits crowd out project decisions.** A rule that has been recalled
105
+ in other folders outranks a project rule written yesterday that nobody has
106
+ reached for. If a user's own working preferences fill all eight slots, a new
107
+ a rule written for the folder they are in may never be shown. Keep the
108
+ standing set small.
109
+ - **A retired rule stops being shown.** `memgineering retire <ref>` is the way
110
+ out when a decision no longer holds — it stays visible in recall, ranked last
111
+ and labelled, but it stops binding.