@rayul/kordis 0.15.1 → 0.15.2
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/NOTICE +1 -1
- package/assets/AGENTS.md +108 -0
- package/assets/MEMGINEERING.md +3 -1
- package/assets/kordis-publishing/SKILL.md +18 -11
- package/assets/kordis-recommend/SKILL.md +2 -1
- package/assets/memgineering-recall/SKILL.md +21 -4
- package/assets/memgineering-rules/SKILL.md +59 -15
- package/assets/memgineering-setup/SKILL.md +61 -13
- package/assets/memgineering-writing/SKILL.md +68 -17
- package/dist/index.js +1065 -106
- package/package.json +2 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
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, when the brain has filled up with near-duplicates that want tidying, 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", "clean up my notes", "these two say the same thing", "is this a duplicate", "move my memories over", "bring my notes from the other tool", "don't save that", "never store that". Covers remember, revise, undo, log, retire, exclude, onboard, the consolidate/propose/approve flow, carrying facts in from another store, storage boundaries, and what to say before 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, when the brain has filled up with near-duplicates that want tidying, 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", "clean up my notes", "these two say the same thing", "is this a duplicate", "move my memories over", "bring my notes from the other tool", "don't save that", "never store that", "that's only true until <date>", "it stops being true after", "don't tell me that forever". Covers remember, revise, undo, log, retire, expire, exclude, onboard, the consolidate/propose/approve flow, carrying facts in from another store, storage boundaries, and what to say before writing.
|
|
4
4
|
type: skill
|
|
5
5
|
allowed-tools: Bash(memgineering:*)
|
|
6
6
|
---
|
|
@@ -23,24 +23,47 @@ reverse it. Do not ask permission for ordinary observations — write them, and
|
|
|
23
23
|
mention it in a sentence.
|
|
24
24
|
|
|
25
25
|
**A note born in a project folder carries that project as its `scope`** — the
|
|
26
|
-
name comes from the
|
|
27
|
-
(`
|
|
28
|
-
|
|
29
|
-
|
|
26
|
+
name comes from the folder's binding (`memgineering project` shows it), else the
|
|
27
|
+
git remote (`owner/repo`), else — in a repository with no remote — the checkout
|
|
28
|
+
folder's name. `remember` prints the scope and which of those it came from
|
|
29
|
+
(`scope_via` in `--json`); when it is the folder name, say so, because that is
|
|
30
|
+
the one nobody predicts. The stamp is automatic; an explicit `--scope` beats it;
|
|
31
|
+
a folder that names no project writes exactly what it always wrote. Two flags
|
|
32
|
+
are worth reaching for on purpose:
|
|
30
33
|
|
|
31
34
|
```
|
|
32
35
|
memgineering remember "we always squash before merging" --rule --no-scope \
|
|
33
36
|
--reason "they said from now on, about every repo — not this one"
|
|
34
37
|
```
|
|
35
38
|
|
|
36
|
-
- `--no-scope` for
|
|
37
|
-
rule
|
|
38
|
-
|
|
39
|
+
- `--no-scope` for a decision that genuinely holds in every project — a
|
|
40
|
+
security rule, a way of writing commits, something about the person rather
|
|
41
|
+
than the work. It is a real answer, not the safe one: use it when it is true.
|
|
39
42
|
- `--scope <name>` when the note is ABOUT a project you are not standing in.
|
|
40
43
|
|
|
44
|
+
**Prefer the project scope for a rule that is about one project.** `--no-scope`
|
|
45
|
+
used to be the advice for rules in general, on the reasoning that a scoped rule
|
|
46
|
+
drops out of other projects' answers — it does, and that is now the point. Rules
|
|
47
|
+
reach a session in two budgets, one for what holds everywhere and one for the
|
|
48
|
+
project in front of it, so a scoped rule is no longer competing with every other
|
|
49
|
+
rule in the brain for the same few slots. Measured before the split: in a real
|
|
50
|
+
repository all the slots went to rules about other things, and a rule written
|
|
51
|
+
that morning about that project's own layout ranked 49th of 54 — present,
|
|
52
|
+
enforced by nothing, invisible to the session it existed to stop.
|
|
53
|
+
|
|
41
54
|
`--scope` and `--no-scope` together are refused — they answer the same
|
|
42
55
|
question both ways.
|
|
43
56
|
|
|
57
|
+
**A rule has to say what it binds, and one of the two is required.** A `--rule`
|
|
58
|
+
write is refused when nothing names a scope and nothing can be derived — a
|
|
59
|
+
folder that is not a repository and has no bound project. Add `--scope "<the
|
|
60
|
+
project>"` or `--no-scope`, and retry; nothing was written. On the hosted API
|
|
61
|
+
(`brain_remember`, or `POST /remember` directly) the same refusal applies with
|
|
62
|
+
no derivation at all: send `scope`, or `"scope": "global"` for one that really
|
|
63
|
+
does hold everywhere. `global` is reserved and is stored as no scope, which is
|
|
64
|
+
what a machine-wide rule already looks like — so there is only ever one
|
|
65
|
+
spelling of it to search for.
|
|
66
|
+
|
|
44
67
|
**`--reason` on every write.** It goes in the ledger and is the only part of the
|
|
45
68
|
record that still means anything six months later. Every write verb takes it:
|
|
46
69
|
`remember`, `revise`, `retire`, `exclude`, `undo`. The one on `undo` matters
|
|
@@ -183,17 +206,26 @@ it>"`.
|
|
|
183
206
|
This rewrites only the memory block in frontmatter. The prose is the user's;
|
|
184
207
|
neither the command nor you should rewrite it uninvited.
|
|
185
208
|
|
|
186
|
-
## Retiring versus excluding
|
|
209
|
+
## Retiring versus expiring versus excluding
|
|
187
210
|
|
|
188
211
|
```
|
|
189
212
|
memgineering retire <ref> --reason "the date moved" # no longer current, still visible
|
|
213
|
+
memgineering expire <ref> --until 2026-10-31 --reason "the phase ends then" # NOT retired
|
|
190
214
|
memgineering exclude path/to/note.md --reason "it has someone's phone number in it" # stop reading it
|
|
191
215
|
memgineering retract --actor "mcp:ChatGPT" --since 2026-09-01 # SHOWS what one writer / window wrote
|
|
192
216
|
memgineering retract --actor "mcp:ChatGPT" --since 2026-09-01 --yes # retires all of it, one ledger row each
|
|
193
217
|
```
|
|
194
218
|
|
|
195
219
|
Retiring keeps the note in recall, ranked last and labelled. Excluding takes it
|
|
196
|
-
out of the index and never touches the file.
|
|
220
|
+
out of the index and never touches the file.
|
|
221
|
+
|
|
222
|
+
**`expire` is not a retirement, and the difference only shows up later.** It
|
|
223
|
+
gives a memory an end date: until then it is current, and after it recall still
|
|
224
|
+
returns it — one step below what is current, labelled with the date. Reach for
|
|
225
|
+
it when the memory was always going to run out ("Phase 1 lands by the end of
|
|
226
|
+
October", a key that rotates, a plan with a deadline in it) rather than when a
|
|
227
|
+
decision has been overtaken. Retiring such a note says something untrue about
|
|
228
|
+
it; leaving it says something untrue too. If the user says "delete", ask
|
|
197
229
|
which they mean.
|
|
198
230
|
|
|
199
231
|
## Tidying up a brain: detect, draft, approve
|
|
@@ -215,11 +247,30 @@ it is about without opening them. It does not carry their claims, so deciding
|
|
|
215
247
|
which of a pair is right still means reading them: two notes can share a title
|
|
216
248
|
and hold opposite conclusions, which is exactly the case a proposal exists for.
|
|
217
249
|
It returns them with the evidence that caught them and the action it would
|
|
218
|
-
suggest, under
|
|
219
|
-
`contradiction`, a disagreement nobody settled; `semantic_similarity`,
|
|
220
|
-
meaning agreeing reciprocally; `shared_context`, one scope naming the
|
|
221
|
-
thing; `similar_title`; and
|
|
222
|
-
|
|
250
|
+
suggest, under eight rules: `declared_supersession`, a replaced note still
|
|
251
|
+
active; `contradiction`, a disagreement nobody settled; `semantic_similarity`,
|
|
252
|
+
indexed meaning agreeing reciprocally; `shared_context`, one scope naming the
|
|
253
|
+
same thing; `similar_title`; and three that read a note against itself, where
|
|
254
|
+
its `binding` flag and its `kind` disagree. `rule_demotion` is a binding note
|
|
255
|
+
the author classified as a fact, a procedure, an episode or a goal — two
|
|
256
|
+
deliberate fields contradicting each other, and the marking is the one to
|
|
257
|
+
doubt. `binding_unclassified` is a binding note with no kind at all, and it
|
|
258
|
+
names BOTH moves rather than picking one, because the tool reads fields and not
|
|
259
|
+
prose: it is either a decision nobody classified or something that was never a
|
|
260
|
+
rule, and only somebody who reads it can say which. (`kind_promotion` remains
|
|
261
|
+
in the vocabulary and no longer fires.)
|
|
262
|
+
|
|
263
|
+
That neutrality was measured rather than chosen for balance. On a real brain,
|
|
264
|
+
55 of 57 binding notes had no kind and every one was answered "promote this to
|
|
265
|
+
a decision" — including the thirteen that turned out not to be rules, where
|
|
266
|
+
approving the suggestion would have hardened the mistake.
|
|
267
|
+
|
|
268
|
+
**The page is shared between the signals.** One rule used to take the whole
|
|
269
|
+
list — 55 of 57 candidates — so the duplicate and the contradiction underneath
|
|
270
|
+
got a line each. Candidates now round-robin across the rules that found
|
|
271
|
+
something, and `by_rule` reports how many each found in total, which the page
|
|
272
|
+
can no longer tell you. Raising `--limit` widens the page rather than returning
|
|
273
|
+
more of one rule. Semantic detection reuses a complete, calibrated hosted
|
|
223
274
|
vector generation and never calls a model during consolidation. Authored
|
|
224
275
|
scope/entity context permits reciprocal neighbours; without it, evidence must
|
|
225
276
|
form a stricter three-note semantic triangle.
|
|
@@ -308,7 +359,7 @@ so an empty one costs something every time.
|
|
|
308
359
|
memgineering onboard
|
|
309
360
|
```
|
|
310
361
|
|
|
311
|
-
Says which
|
|
362
|
+
Says which still have no body written and what to ask for each. Run it first rather
|
|
312
363
|
than working from a script — asking somebody a question they already answered is
|
|
313
364
|
its own kind of forgetting. They may also ask outright ("set up my memory", "fill in my profile"); same job.
|
|
314
365
|
|
|
@@ -353,7 +404,7 @@ always true and you have only just been told them, so dating them today is wrong
|
|
|
353
404
|
in the one field a memory store exists to get right.
|
|
354
405
|
|
|
355
406
|
**This is the ONE place you edit a brain file directly** — `01_BASE/` only, and
|
|
356
|
-
only while
|
|
407
|
+
only while its body has not been written yet. After that first pass these are theirs like
|
|
357
408
|
any other note.
|
|
358
409
|
|
|
359
410
|
**Do not invent an answer to move on, and do not fill a file because it is
|