recallium 2.0.2 → 2.0.8

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.
Files changed (48) hide show
  1. package/.claude-plugin/plugin.json +1 -1
  2. package/README.md +2 -2
  3. package/bin/manifest.json +4 -4
  4. package/bin/opencode-plugin-manifest.json +4 -4
  5. package/bin/recallium-hooks.cjs +3 -3
  6. package/bin/recallium-opencode-plugin.cjs +1 -1
  7. package/bin/skills/antigravity/capture/SKILL.md +2 -0
  8. package/bin/skills/antigravity/curate/SKILL.md +2 -0
  9. package/bin/skills/antigravity/design/SKILL.md +4 -2
  10. package/bin/skills/antigravity/investigate/SKILL.md +9 -0
  11. package/bin/skills/antigravity/recall/SKILL.md +16 -3
  12. package/bin/skills/antigravity/recallium-guidance/SKILL.md +2 -2
  13. package/bin/skills/antigravity/resume/SKILL.md +4 -1
  14. package/bin/skills/antigravity/start-work/SKILL.md +2 -2
  15. package/bin/skills/claude-code/capture/SKILL.md +2 -0
  16. package/bin/skills/claude-code/curate/SKILL.md +2 -0
  17. package/bin/skills/claude-code/design/SKILL.md +4 -2
  18. package/bin/skills/claude-code/investigate/SKILL.md +9 -0
  19. package/bin/skills/claude-code/recall/SKILL.md +16 -3
  20. package/bin/skills/claude-code/recallium-guidance/SKILL.md +2 -2
  21. package/bin/skills/claude-code/resume/SKILL.md +4 -1
  22. package/bin/skills/claude-code/start-work/SKILL.md +2 -2
  23. package/bin/skills/codex/capture/SKILL.md +2 -0
  24. package/bin/skills/codex/curate/SKILL.md +2 -0
  25. package/bin/skills/codex/design/SKILL.md +4 -2
  26. package/bin/skills/codex/investigate/SKILL.md +9 -0
  27. package/bin/skills/codex/recall/SKILL.md +16 -3
  28. package/bin/skills/codex/recallium-guidance/SKILL.md +2 -2
  29. package/bin/skills/codex/resume/SKILL.md +4 -1
  30. package/bin/skills/codex/start-work/SKILL.md +2 -2
  31. package/bin/skills/cursor/capture/SKILL.md +2 -0
  32. package/bin/skills/cursor/curate/SKILL.md +2 -0
  33. package/bin/skills/cursor/design/SKILL.md +4 -2
  34. package/bin/skills/cursor/investigate/SKILL.md +9 -0
  35. package/bin/skills/cursor/recall/SKILL.md +16 -3
  36. package/bin/skills/cursor/recallium-guidance/SKILL.md +2 -2
  37. package/bin/skills/cursor/resume/SKILL.md +4 -1
  38. package/bin/skills/cursor/start-work/SKILL.md +2 -2
  39. package/package.json +1 -1
  40. package/plugin-manifest.json +22 -22
  41. package/skills/capture/SKILL.md +2 -0
  42. package/skills/curate/SKILL.md +2 -0
  43. package/skills/design/SKILL.md +4 -2
  44. package/skills/investigate/SKILL.md +9 -0
  45. package/skills/recall/SKILL.md +16 -3
  46. package/skills/recallium-guidance/SKILL.md +2 -2
  47. package/skills/resume/SKILL.md +4 -1
  48. package/skills/start-work/SKILL.md +2 -2
@@ -30,6 +30,9 @@ prevent.
30
30
  1. **Gate:** `recall` first, by symptom and by `file_path`. A prior `bugfix`
31
31
  or `constraint` may already explain it. If it does, apply it and skip to
32
32
  `finish`; a second copy of a stored cause is noise.
33
+ `expand_memories` the hits and read them before reading code: the
34
+ `design` says how the thing is meant to behave, the `bugfix` what broke
35
+ before. A summary line is not the memory.
33
36
  Search a third time by the thing the failing test asserts — a key
34
37
  binding, a path, a flag, a constant — not only the symptom. If a hit says
35
38
  the current behaviour was a deliberate ruling, the fix must honour the
@@ -53,6 +56,11 @@ prevent.
53
56
 
54
57
  ## Anti-patterns
55
58
 
59
+ WRONG: the search returns the design of the feature; the code is read first
60
+ to find out how it is meant to behave.
61
+ RIGHT: `expand_memories` the design; the code is opened to confirm it, or to
62
+ find where it departs from it.
63
+
56
64
  WRONG: editing until the test passes, then writing "fixed X" as the memory.
57
65
  RIGHT: the root cause stored first; the memory says why it broke, not that it passes.
58
66
 
@@ -65,6 +73,7 @@ ruling is a `bugfix` stored before its edit, quota warning or not.
65
73
  ## Checklist
66
74
 
67
75
  - [ ] Searched by symptom, by file, and by what the failing test asserts
76
+ - [ ] Hits expanded and read before any source file was opened
68
77
  - [ ] A batch triaged: every reversal of a ruling or of your own earlier choice has its own bugfix
69
78
  - [ ] Thinking sequence concluded, or never opened
70
79
  - [ ] Root cause stored before the fix, with files and an edge
@@ -38,6 +38,11 @@ Then climb one rung per step, never several rungs in one parallel batch.
38
38
  the hits worth reading whole, then answer. Never run a later rung to confirm an
39
39
  earlier one.
40
40
 
41
+ **Gate:** read before code. When the question is why something behaves as it
42
+ does, or how it is meant to behave, `expand_memories` the hits and read them
43
+ before opening a source file. The design says what was intended; the code
44
+ confirms it. A summary line is not the memory.
45
+
41
46
  0. Already in context: the summon's roster, recent work or working state names
42
47
  the workstream or memory. Use that slug or UUID; it costs no lookup call.
43
48
  1. Workstream: a roster title matches the request ->
@@ -56,13 +61,15 @@ earlier one.
56
61
 
57
62
  - Filters narrow a noisy result; they are not extra rungs: `memory_type`,
58
63
  `days_back`. `date_from`/`date_to` ADDS a dated window to the results; it
59
- never filters.
64
+ never filters. `memory_type="design"` finds the rule a feature was built
65
+ to; `"bugfix"` finds what broke.
60
66
  - A teammate's name in the request is context. `author_email` only when the
61
67
  user asks what that person wrote (`team`).
62
68
  - "Project not found", or nothing from a project you cannot see, is the
63
69
  answer: report it, do not retry it another way.
64
70
  - Before editing a file, search it: `file_path="%installer.ts%"` (ILIKE
65
- wildcards), alone or with `query`.
71
+ wildcards), alone or with `query`, and read what it returns before you
72
+ change the file.
66
73
  - Superseded targets are included in `expand_memories` and hidden from search.
67
74
  - **Gate:** keep the UUIDs; the next store cites them as edges.
68
75
 
@@ -75,6 +82,11 @@ project_name="my-api", file_path="src/auth/%")`.
75
82
  WRONG: `git log` to explain a line.
76
83
  RIGHT: parse its `Recallium-Memory:` trailer or search `commit:<short-sha>`.
77
84
 
85
+ WRONG: the search returns the bugfix and the design; five source files are
86
+ read to work out the rule.
87
+ RIGHT: `expand_memories` both, answer from the design, open the one file that
88
+ confirms it.
89
+
78
90
  WRONG: the workstream answered, then an `"__all__"` search "to make sure
79
91
  nothing else exists" and an `author_email` pass for the teammate the user
80
92
  mentioned: nine calls.
@@ -87,7 +99,8 @@ RIGHT: `get_workstream`, `expand_memories`, the answer: two calls.
87
99
  parallel rungs
88
100
  - [ ] Project before `"__all__"`; `project_name` on every call
89
101
  - [ ] File-scoped pass before editing; documents searched as documents
90
- - [ ] Hits expanded; UUIDs kept for the next store's edges
102
+ - [ ] Hits expanded and read before any source file was opened; UUIDs kept
103
+ for the next store's edges
91
104
 
92
105
  ## See also
93
106
 
@@ -18,7 +18,7 @@ description: Recallium is the team's memory, not your notepad. REQUIRED on the f
18
18
  8. **Never author a standalone design, brief, plan, spec, or handoff `.md`.** The memory is the artifact. A subagent brief is a memory: pass its full UUID and tell the agent to `expand_memories` it first.
19
19
  9. **Commits:** the why-memories must exist before you commit; put their UUIDs in a `Recallium-Memory:` git trailer with `git commit --trailer`. One checkpoint per commit: a commit that closes a tracked task is checkpointed by `update_task(status="completed", memory_ids=[the why-UUIDs])` and gets NO progress; otherwise store ONE `progress` tagged `commit:<short-sha>` carrying the full SHA, the commit's files, and `related` edges to those UUIDs.
20
20
  10. **Working state:** `set_working_state` holds only what is left over after the last store or task close — what is mid-way, what is next, which writes are pending or unknown. It is not a checkpoint: never restate a memory's content, SHAs or evidence there. Write it after a step that changes where to resume, before compaction, and at session end. It is not searchable; anything durable is a memory. Claim a write succeeded only after its successful tool result; record denied or failed writes as pending and ambiguous results as unknown.
21
- 11. **Search before re-deriving:** before editing known territory or re-investigating anything a past session may have settled, `search_memories` by topic and by `file_path`.
21
+ 11. **Search before re-deriving:** before editing known territory or re-investigating settled work, `search_memories` by topic and by `file_path`, then `expand_memories` the hits before opening code.
22
22
 
23
23
  These rules are the floor, not the whole procedure: when the situation matches a trigger skill, invoke that skill and follow it — do not improvise the workflow from this block alone. Trigger skills: `resume`, `recall`, `start-work`, `investigate`, `design`, `decide`, `capture`, `curate`, `finish`, `handoff`, `rule`, `project`, `team`; `recallium-tools` is the generated tool map. For search fields, verdict shapes, thinking sequences, projects, teams, and worked examples, invoke the full `recallium-guidance` skill before non-trivial work.
24
24
  <!-- recallium:core:end -->
@@ -112,7 +112,7 @@ Every commit traceable to its *why*, and every *why* to its commit. Bidirectiona
112
112
  Full signatures, worked examples and the one-screen index: [reference.md](reference.md).
113
113
 
114
114
  ### Searching
115
- `search_memories` needs only `project_name`; the tool's own description carries every filter. Superseded memories are hidden by default, and `expand_memories` returns them. Skill: `recall`.
115
+ `search_memories` needs only `project_name`; the tool's own description carries every filter. Superseded memories are hidden by default, and `expand_memories` returns them. Read before code: when the question is why something behaves as it does, or how it is meant to behave, `expand_memories` the hits and read them before opening a source file. The design says what was intended; the code confirms it. A summary line is not the memory. Skill: `recall`.
116
116
 
117
117
  ### Working state
118
118
  Describe the last confirmed stored state, separately from completed code changes or checks. A tool call attempt is not a save receipt. If an update fails or is denied, name the unsaved change and next action; if its result is ambiguous, verify by reading before retrying. Example: “Tests passed; the bugfix still contains planned verification because saving the test results was denied.” After a successful update result, the note may say the verification was saved. Do not report database verification unless a read-back actually confirmed it.
@@ -29,9 +29,12 @@ in date order reconstructs how the work moved.
29
29
  working state and open tasks arrive only with it. Switching project? Call it
30
30
  again with the new `project_name`. No workspace and no project named?
31
31
  Ask, else `"default"`.
32
+ If the resume buffer is a preview, tell the user what it holds, as a part of the note and not the whole state. End by saying, without character counts, that more context is available that gives the full picture, and offer to load it; when the user says "resume", call get_working_state first.
32
33
  2. Read `get_working_state`: branch, slug, in flight, parked, next action.
33
34
  3. Roster, then the slug you are continuing; constraints and decisions come
34
- first and bound what you may do. **Gate:** slug loaded before code.
35
+ first and bound what you may do. `expand_memories` the ones that bound
36
+ this work and read them; a one-line title is not the decision.
37
+ **Gate:** slug loaded, and those read, before code.
35
38
  4. Triage `list_tasks`; `get_task` shows one task's linked memories. Pick up,
36
39
  or hand stale ones to `curate`.
37
40
  5. Pick the window the question asks for: "this session" -> `session_recap`;
@@ -36,7 +36,7 @@ units the user must at least be offered them — one question, their answer.
36
36
  ## Workflow
37
37
 
38
38
  1. Confirm a new effort needs setup. A self-contained edit with a specified result can be completed directly; its required memory lookup does not by itself require this workflow or a new workstream.
39
- For an effort, search by intent and file. A prior decision or constraint may settle part of it. Keep the UUIDs for edges.
39
+ For an effort, search by intent and file. A prior decision or constraint may settle part of it. `expand_memories` the hits and read them before opening the files they name: a summary line is not the memory. Keep the UUIDs for edges.
40
40
  2. `get_workstream(project_name=...)` for the roster. Continuing something?
41
41
  Open its slug. Nothing fits? `create_workstream(..., status="active")`.
42
42
  **Gate:** the workstream exists before the first store, never after.
@@ -69,7 +69,7 @@ RIGHT: "This is 3 units: … Track them as tasks?" — asked once, then their ca
69
69
 
70
70
  ## Checklist
71
71
 
72
- - [ ] Topic and file-scoped search run; UUIDs kept
72
+ - [ ] Topic and file-scoped search run; hits read in full before the code; UUIDs kept
73
73
  - [ ] Slug loaded or workstream created before any store
74
74
  - [ ] Two or more units → tasks offered once by name; created only on a yes, with the slug, linked to the design if one exists
75
75
 
@@ -37,6 +37,8 @@ so storing it twice makes the original harder to find.
37
37
  3. **Gate:** `workstream_slug` is mandatory; none yet -> `start-work`.
38
38
  4. Search the workstream for what this builds on, replaces, bounds or
39
39
  contradicts; attach those UUIDs. `supersedes` means the target is now WRONG.
40
+ `expand_memories` a hit before you cite it: an edge to a memory you have
41
+ not read is a guess.
40
42
  5. `related_files`: every file read or written. In a chat with no repository,
41
43
  leave it empty; never invent paths.
42
44
  6. Read the store response: "unanchored" -> repair now with `modify_memory`;
@@ -14,6 +14,8 @@ modify_memory(memory_id="<uuid>", action="inactivate", reason="duplicate of <uui
14
14
  modify_memory(memory_id="<workstream-uuid>", action="update", status="shipped") # or "abandoned"
15
15
  ```
16
16
 
17
+ A content edit gives the memory a new id; use the id the response names.
18
+
17
19
  ## Why
18
20
 
19
21
  The value gate has two halves. Storing only new durable information is one; keeping
@@ -30,7 +30,9 @@ layer nudges you the moment you write one.
30
30
  1. Form or review the requested design: identify the requirements and constraints, then explain the proposed responsibilities, interfaces, and trade-offs. A design request can begin before any plan exists.
31
31
  **Storage gate:** record the shape chosen and why only when it adds a new durable proposal beyond the loaded workstream; a restatement or description of the diff stores nothing.
32
32
  2. `recall` first: an earlier design or decision may cover this, and a
33
- `constraint` may bound it. Keep their UUIDs.
33
+ `constraint` may bound it. `expand_memories` them and read them before
34
+ reading the code they describe: a summary line is not the memory. Keep
35
+ their UUIDs.
34
36
  3. Store one `design` with `workstream_slug`, `related_files` (every file it
35
37
  will touch, not only those touched so far) and edges: `related` to what it
36
38
  builds on and to the constraint that bounds it, `supersedes` only if the
@@ -50,7 +52,7 @@ RIGHT: `store_memory(memory_type="design", ...)`; the memory is the artifact.
50
52
  ## Checklist
51
53
 
52
54
  - [ ] Real design, not a diff summary
53
- - [ ] Prior designs, decisions, constraints searched and edged
55
+ - [ ] Prior designs, decisions, constraints searched, read in full, and edged
54
56
  - [ ] Files it will touch listed; full UUID captured
55
57
  - [ ] Verdicts read before building on a reviewed design
56
58
 
@@ -30,6 +30,9 @@ prevent.
30
30
  1. **Gate:** `recall` first, by symptom and by `file_path`. A prior `bugfix`
31
31
  or `constraint` may already explain it. If it does, apply it and skip to
32
32
  `finish`; a second copy of a stored cause is noise.
33
+ `expand_memories` the hits and read them before reading code: the
34
+ `design` says how the thing is meant to behave, the `bugfix` what broke
35
+ before. A summary line is not the memory.
33
36
  Search a third time by the thing the failing test asserts — a key
34
37
  binding, a path, a flag, a constant — not only the symptom. If a hit says
35
38
  the current behaviour was a deliberate ruling, the fix must honour the
@@ -53,6 +56,11 @@ prevent.
53
56
 
54
57
  ## Anti-patterns
55
58
 
59
+ WRONG: the search returns the design of the feature; the code is read first
60
+ to find out how it is meant to behave.
61
+ RIGHT: `expand_memories` the design; the code is opened to confirm it, or to
62
+ find where it departs from it.
63
+
56
64
  WRONG: editing until the test passes, then writing "fixed X" as the memory.
57
65
  RIGHT: the root cause stored first; the memory says why it broke, not that it passes.
58
66
 
@@ -65,6 +73,7 @@ ruling is a `bugfix` stored before its edit, quota warning or not.
65
73
  ## Checklist
66
74
 
67
75
  - [ ] Searched by symptom, by file, and by what the failing test asserts
76
+ - [ ] Hits expanded and read before any source file was opened
68
77
  - [ ] A batch triaged: every reversal of a ruling or of your own earlier choice has its own bugfix
69
78
  - [ ] Thinking sequence concluded, or never opened
70
79
  - [ ] Root cause stored before the fix, with files and an edge
@@ -38,6 +38,11 @@ Then climb one rung per step, never several rungs in one parallel batch.
38
38
  the hits worth reading whole, then answer. Never run a later rung to confirm an
39
39
  earlier one.
40
40
 
41
+ **Gate:** read before code. When the question is why something behaves as it
42
+ does, or how it is meant to behave, `expand_memories` the hits and read them
43
+ before opening a source file. The design says what was intended; the code
44
+ confirms it. A summary line is not the memory.
45
+
41
46
  0. Already in context: the summon's roster, recent work or working state names
42
47
  the workstream or memory. Use that slug or UUID; it costs no lookup call.
43
48
  1. Workstream: a roster title matches the request ->
@@ -56,13 +61,15 @@ earlier one.
56
61
 
57
62
  - Filters narrow a noisy result; they are not extra rungs: `memory_type`,
58
63
  `days_back`. `date_from`/`date_to` ADDS a dated window to the results; it
59
- never filters.
64
+ never filters. `memory_type="design"` finds the rule a feature was built
65
+ to; `"bugfix"` finds what broke.
60
66
  - A teammate's name in the request is context. `author_email` only when the
61
67
  user asks what that person wrote (`team`).
62
68
  - "Project not found", or nothing from a project you cannot see, is the
63
69
  answer: report it, do not retry it another way.
64
70
  - Before editing a file, search it: `file_path="%installer.ts%"` (ILIKE
65
- wildcards), alone or with `query`.
71
+ wildcards), alone or with `query`, and read what it returns before you
72
+ change the file.
66
73
  - Superseded targets are included in `expand_memories` and hidden from search.
67
74
  - **Gate:** keep the UUIDs; the next store cites them as edges.
68
75
 
@@ -75,6 +82,11 @@ project_name="my-api", file_path="src/auth/%")`.
75
82
  WRONG: `git log` to explain a line.
76
83
  RIGHT: parse its `Recallium-Memory:` trailer or search `commit:<short-sha>`.
77
84
 
85
+ WRONG: the search returns the bugfix and the design; five source files are
86
+ read to work out the rule.
87
+ RIGHT: `expand_memories` both, answer from the design, open the one file that
88
+ confirms it.
89
+
78
90
  WRONG: the workstream answered, then an `"__all__"` search "to make sure
79
91
  nothing else exists" and an `author_email` pass for the teammate the user
80
92
  mentioned: nine calls.
@@ -87,7 +99,8 @@ RIGHT: `get_workstream`, `expand_memories`, the answer: two calls.
87
99
  parallel rungs
88
100
  - [ ] Project before `"__all__"`; `project_name` on every call
89
101
  - [ ] File-scoped pass before editing; documents searched as documents
90
- - [ ] Hits expanded; UUIDs kept for the next store's edges
102
+ - [ ] Hits expanded and read before any source file was opened; UUIDs kept
103
+ for the next store's edges
91
104
 
92
105
  ## See also
93
106
 
@@ -18,7 +18,7 @@ description: Recallium is the team's memory, not your notepad. REQUIRED on the f
18
18
  8. **Never author a standalone design, brief, plan, spec, or handoff `.md`.** The memory is the artifact. A subagent brief is a memory: pass its full UUID and tell the agent to `expand_memories` it first.
19
19
  9. **Commits:** the why-memories must exist before you commit; put their UUIDs in a `Recallium-Memory:` git trailer with `git commit --trailer`. One checkpoint per commit: a commit that closes a tracked task is checkpointed by `update_task(status="completed", memory_ids=[the why-UUIDs])` and gets NO progress; otherwise store ONE `progress` tagged `commit:<short-sha>` carrying the full SHA, the commit's files, and `related` edges to those UUIDs.
20
20
  10. **Working state:** `set_working_state` holds only what is left over after the last store or task close — what is mid-way, what is next, which writes are pending or unknown. It is not a checkpoint: never restate a memory's content, SHAs or evidence there. Write it after a step that changes where to resume, before compaction, and at session end. It is not searchable; anything durable is a memory. Claim a write succeeded only after its successful tool result; record denied or failed writes as pending and ambiguous results as unknown.
21
- 11. **Search before re-deriving:** before editing known territory or re-investigating anything a past session may have settled, `search_memories` by topic and by `file_path`.
21
+ 11. **Search before re-deriving:** before editing known territory or re-investigating settled work, `search_memories` by topic and by `file_path`, then `expand_memories` the hits before opening code.
22
22
 
23
23
  These rules are the floor, not the whole procedure: when the situation matches a trigger skill, invoke that skill and follow it — do not improvise the workflow from this block alone. Trigger skills: `resume`, `recall`, `start-work`, `investigate`, `design`, `decide`, `capture`, `curate`, `finish`, `handoff`, `rule`, `project`, `team`; `recallium-tools` is the generated tool map. For search fields, verdict shapes, thinking sequences, projects, teams, and worked examples, invoke the full `recallium-guidance` skill before non-trivial work.
24
24
  <!-- recallium:core:end -->
@@ -112,7 +112,7 @@ Every commit traceable to its *why*, and every *why* to its commit. Bidirectiona
112
112
  Full signatures, worked examples and the one-screen index: [reference.md](reference.md).
113
113
 
114
114
  ### Searching
115
- `search_memories` needs only `project_name`; the tool's own description carries every filter. Superseded memories are hidden by default, and `expand_memories` returns them. Skill: `recall`.
115
+ `search_memories` needs only `project_name`; the tool's own description carries every filter. Superseded memories are hidden by default, and `expand_memories` returns them. Read before code: when the question is why something behaves as it does, or how it is meant to behave, `expand_memories` the hits and read them before opening a source file. The design says what was intended; the code confirms it. A summary line is not the memory. Skill: `recall`.
116
116
 
117
117
  ### Working state
118
118
  Describe the last confirmed stored state, separately from completed code changes or checks. A tool call attempt is not a save receipt. If an update fails or is denied, name the unsaved change and next action; if its result is ambiguous, verify by reading before retrying. Example: “Tests passed; the bugfix still contains planned verification because saving the test results was denied.” After a successful update result, the note may say the verification was saved. Do not report database verification unless a read-back actually confirmed it.
@@ -29,9 +29,12 @@ in date order reconstructs how the work moved.
29
29
  working state and open tasks arrive only with it. Switching project? Call it
30
30
  again with the new `project_name`. No workspace and no project named?
31
31
  Ask, else `"default"`.
32
+ If the resume buffer is a preview, tell the user what it holds, as a part of the note and not the whole state. End by saying, without character counts, that more context is available that gives the full picture, and offer to load it; when the user says "resume", call get_working_state first.
32
33
  2. Read `get_working_state`: branch, slug, in flight, parked, next action.
33
34
  3. Roster, then the slug you are continuing; constraints and decisions come
34
- first and bound what you may do. **Gate:** slug loaded before code.
35
+ first and bound what you may do. `expand_memories` the ones that bound
36
+ this work and read them; a one-line title is not the decision.
37
+ **Gate:** slug loaded, and those read, before code.
35
38
  4. Triage `list_tasks`; `get_task` shows one task's linked memories. Pick up,
36
39
  or hand stale ones to `curate`.
37
40
  5. Pick the window the question asks for: "this session" -> `session_recap`;
@@ -36,7 +36,7 @@ units the user must at least be offered them — one question, their answer.
36
36
  ## Workflow
37
37
 
38
38
  1. Confirm a new effort needs setup. A self-contained edit with a specified result can be completed directly; its required memory lookup does not by itself require this workflow or a new workstream.
39
- For an effort, search by intent and file. A prior decision or constraint may settle part of it. Keep the UUIDs for edges.
39
+ For an effort, search by intent and file. A prior decision or constraint may settle part of it. `expand_memories` the hits and read them before opening the files they name: a summary line is not the memory. Keep the UUIDs for edges.
40
40
  2. `get_workstream(project_name=...)` for the roster. Continuing something?
41
41
  Open its slug. Nothing fits? `create_workstream(..., status="active")`.
42
42
  **Gate:** the workstream exists before the first store, never after.
@@ -69,7 +69,7 @@ RIGHT: "This is 3 units: … Track them as tasks?" — asked once, then their ca
69
69
 
70
70
  ## Checklist
71
71
 
72
- - [ ] Topic and file-scoped search run; UUIDs kept
72
+ - [ ] Topic and file-scoped search run; hits read in full before the code; UUIDs kept
73
73
  - [ ] Slug loaded or workstream created before any store
74
74
  - [ ] Two or more units → tasks offered once by name; created only on a yes, with the slug, linked to the design if one exists
75
75
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "recallium",
3
- "version": "2.0.2",
3
+ "version": "2.0.8",
4
4
  "description": "Recallium client for coding agents: wires Claude Code, Codex, Cursor and other agents to your team's Recallium memory with hooks, skills and the MCP connector, and keeps your Recallium server in sync. Zero dependencies, never blocks the agent.",
5
5
  "license": "SEE LICENSE IN LICENSE",
6
6
  "homepage": "https://recallium.ai",
@@ -1,23 +1,23 @@
1
1
  {
2
2
  "v": 1,
3
3
  "tree": "recallium-claude-plugin",
4
- "version": "2.0.2",
5
- "built_at": "2026-09-27T16:19:32.877Z",
4
+ "version": "2.0.8",
5
+ "built_at": "2026-09-28T21:04:44.328Z",
6
6
  "files": [
7
7
  {
8
8
  "path": ".claude-plugin/plugin.json",
9
- "sha256": "373a564181591c3d0c6c4a82b600c678b3ff9bd5ce61891d83b27a190b48cf43",
9
+ "sha256": "c20164fc3e566f93b9f85cc48b7451baca294d0d9cfc9e998bd5f41fda46500f",
10
10
  "bytes": 539
11
11
  },
12
12
  {
13
13
  "path": "bin/manifest.json",
14
- "sha256": "c08d6487e107e0adf51ff1a73febeed2f413bd9e3087818b52b0e7f563f49e68",
14
+ "sha256": "5a24f2d8598b44ba4ad53afa64a5c5d91864e9adeba8aff92b401091c0e993f1",
15
15
  "bytes": 228
16
16
  },
17
17
  {
18
18
  "path": "bin/recallium-hooks.cjs",
19
- "sha256": "71be613c851e6a6aac20b15fd821e08343c37ed275bec50626b8e85bad8f2041",
20
- "bytes": 1847429
19
+ "sha256": "5c97cfa65d61bf194c6f34f4a0abadde8d9b4146ff1345268aaa9c017495a78b",
20
+ "bytes": 1910828
21
21
  },
22
22
  {
23
23
  "path": "commands/doctor.md",
@@ -41,13 +41,13 @@
41
41
  },
42
42
  {
43
43
  "path": "skills/capture/SKILL.md",
44
- "sha256": "dbe58a24b68aa600464768796b9f1f4d4ed985faef5b2e030198134d62fe81f3",
45
- "bytes": 2968
44
+ "sha256": "6b9b5bc22b901454d860b7a83c962e043948f36c687903548e806ad88b7a8430",
45
+ "bytes": 3068
46
46
  },
47
47
  {
48
48
  "path": "skills/curate/SKILL.md",
49
- "sha256": "e80eb268e701c2a95965e220579a390c2061f97fc552e9032e9daa250a99df19",
50
- "bytes": 3055
49
+ "sha256": "768aad551c30dd359187e7fc02696ebb7d667d5448ee213a29d0f46c80de88b8",
50
+ "bytes": 3129
51
51
  },
52
52
  {
53
53
  "path": "skills/decide/SKILL.md",
@@ -56,8 +56,8 @@
56
56
  },
57
57
  {
58
58
  "path": "skills/design/SKILL.md",
59
- "sha256": "012d4d4471373ff7703e294443e27aa725c4c6251d6b639e35b4c367d9a63ac1",
60
- "bytes": 3038
59
+ "sha256": "9292b87af9305bdf68722aa9348646f4eaeaba4e19000df81222bd13661b9d3e",
60
+ "bytes": 3169
61
61
  },
62
62
  {
63
63
  "path": "skills/finish/SKILL.md",
@@ -71,8 +71,8 @@
71
71
  },
72
72
  {
73
73
  "path": "skills/investigate/SKILL.md",
74
- "sha256": "93eae881941143f3284913e4c2a9d2c94fbe7025f4bff7fdb6bde0828180efec",
75
- "bytes": 4396
74
+ "sha256": "a01f9e8a7200df3dc91993d9efac10238327817a4e888dcb8ff242a107d77842",
75
+ "bytes": 4872
76
76
  },
77
77
  {
78
78
  "path": "skills/project/SKILL.md",
@@ -81,13 +81,13 @@
81
81
  },
82
82
  {
83
83
  "path": "skills/recall/SKILL.md",
84
- "sha256": "bf88cd3b7deededa864394d91174d89c3c6ca7daf0abb4b8f93df72a40fc45b2",
85
- "bytes": 4611
84
+ "sha256": "edb4635630e1882d90bb706e908ea673dabe715b2219e447a62f25887ae8e609",
85
+ "bytes": 5278
86
86
  },
87
87
  {
88
88
  "path": "skills/recallium-guidance/SKILL.md",
89
- "sha256": "96c5a96d0061941992104f6b80833b368436758c21e57d99b0e15bdbec59d34e",
90
- "bytes": 17430
89
+ "sha256": "5fc11247ace5f4e8e9e545abbe2c7e854f2560ae7ffad6dafbe9813130c828d3",
90
+ "bytes": 17720
91
91
  },
92
92
  {
93
93
  "path": "skills/recallium-guidance/reference.md",
@@ -101,8 +101,8 @@
101
101
  },
102
102
  {
103
103
  "path": "skills/resume/SKILL.md",
104
- "sha256": "1ecfeb81c7673ad038f08e6c6de371e3fc3c25d3588edc162564949d468c68db",
105
- "bytes": 2922
104
+ "sha256": "78e6b63f0fbaa07d37c19f1198f0c615e043257bf652279cdcf1d121f20a3c93",
105
+ "bytes": 3342
106
106
  },
107
107
  {
108
108
  "path": "skills/rule/SKILL.md",
@@ -111,8 +111,8 @@
111
111
  },
112
112
  {
113
113
  "path": "skills/start-work/SKILL.md",
114
- "sha256": "d009bc471681c95627f45845b4ffbfb25d469a4e882a667785d77df053a00517",
115
- "bytes": 4377
114
+ "sha256": "6ff2952c9bc835e175c27b57fe07edd8dd62b6f5e95487454356b9abd7f28b56",
115
+ "bytes": 4523
116
116
  },
117
117
  {
118
118
  "path": "skills/team/SKILL.md",
@@ -37,6 +37,8 @@ so storing it twice makes the original harder to find.
37
37
  3. **Gate:** `workstream_slug` is mandatory; none yet -> `start-work`.
38
38
  4. Search the workstream for what this builds on, replaces, bounds or
39
39
  contradicts; attach those UUIDs. `supersedes` means the target is now WRONG.
40
+ `expand_memories` a hit before you cite it: an edge to a memory you have
41
+ not read is a guess.
40
42
  5. `related_files`: every file read or written. In a chat with no repository,
41
43
  leave it empty; never invent paths.
42
44
  6. Read the store response: "unanchored" -> repair now with `modify_memory`;
@@ -14,6 +14,8 @@ modify_memory(memory_id="<uuid>", action="inactivate", reason="duplicate of <uui
14
14
  modify_memory(memory_id="<workstream-uuid>", action="update", status="shipped") # or "abandoned"
15
15
  ```
16
16
 
17
+ A content edit gives the memory a new id; use the id the response names.
18
+
17
19
  ## Why
18
20
 
19
21
  The value gate has two halves. Storing only new durable information is one; keeping
@@ -30,7 +30,9 @@ layer nudges you the moment you write one.
30
30
  1. Form or review the requested design: identify the requirements and constraints, then explain the proposed responsibilities, interfaces, and trade-offs. A design request can begin before any plan exists.
31
31
  **Storage gate:** record the shape chosen and why only when it adds a new durable proposal beyond the loaded workstream; a restatement or description of the diff stores nothing.
32
32
  2. `recall` first: an earlier design or decision may cover this, and a
33
- `constraint` may bound it. Keep their UUIDs.
33
+ `constraint` may bound it. `expand_memories` them and read them before
34
+ reading the code they describe: a summary line is not the memory. Keep
35
+ their UUIDs.
34
36
  3. Store one `design` with `workstream_slug`, `related_files` (every file it
35
37
  will touch, not only those touched so far) and edges: `related` to what it
36
38
  builds on and to the constraint that bounds it, `supersedes` only if the
@@ -50,7 +52,7 @@ RIGHT: `store_memory(memory_type="design", ...)`; the memory is the artifact.
50
52
  ## Checklist
51
53
 
52
54
  - [ ] Real design, not a diff summary
53
- - [ ] Prior designs, decisions, constraints searched and edged
55
+ - [ ] Prior designs, decisions, constraints searched, read in full, and edged
54
56
  - [ ] Files it will touch listed; full UUID captured
55
57
  - [ ] Verdicts read before building on a reviewed design
56
58
 
@@ -30,6 +30,9 @@ prevent.
30
30
  1. **Gate:** `recall` first, by symptom and by `file_path`. A prior `bugfix`
31
31
  or `constraint` may already explain it. If it does, apply it and skip to
32
32
  `finish`; a second copy of a stored cause is noise.
33
+ `expand_memories` the hits and read them before reading code: the
34
+ `design` says how the thing is meant to behave, the `bugfix` what broke
35
+ before. A summary line is not the memory.
33
36
  Search a third time by the thing the failing test asserts — a key
34
37
  binding, a path, a flag, a constant — not only the symptom. If a hit says
35
38
  the current behaviour was a deliberate ruling, the fix must honour the
@@ -53,6 +56,11 @@ prevent.
53
56
 
54
57
  ## Anti-patterns
55
58
 
59
+ WRONG: the search returns the design of the feature; the code is read first
60
+ to find out how it is meant to behave.
61
+ RIGHT: `expand_memories` the design; the code is opened to confirm it, or to
62
+ find where it departs from it.
63
+
56
64
  WRONG: editing until the test passes, then writing "fixed X" as the memory.
57
65
  RIGHT: the root cause stored first; the memory says why it broke, not that it passes.
58
66
 
@@ -65,6 +73,7 @@ ruling is a `bugfix` stored before its edit, quota warning or not.
65
73
  ## Checklist
66
74
 
67
75
  - [ ] Searched by symptom, by file, and by what the failing test asserts
76
+ - [ ] Hits expanded and read before any source file was opened
68
77
  - [ ] A batch triaged: every reversal of a ruling or of your own earlier choice has its own bugfix
69
78
  - [ ] Thinking sequence concluded, or never opened
70
79
  - [ ] Root cause stored before the fix, with files and an edge
@@ -38,6 +38,11 @@ Then climb one rung per step, never several rungs in one parallel batch.
38
38
  the hits worth reading whole, then answer. Never run a later rung to confirm an
39
39
  earlier one.
40
40
 
41
+ **Gate:** read before code. When the question is why something behaves as it
42
+ does, or how it is meant to behave, `expand_memories` the hits and read them
43
+ before opening a source file. The design says what was intended; the code
44
+ confirms it. A summary line is not the memory.
45
+
41
46
  0. Already in context: the summon's roster, recent work or working state names
42
47
  the workstream or memory. Use that slug or UUID; it costs no lookup call.
43
48
  1. Workstream: a roster title matches the request ->
@@ -56,13 +61,15 @@ earlier one.
56
61
 
57
62
  - Filters narrow a noisy result; they are not extra rungs: `memory_type`,
58
63
  `days_back`. `date_from`/`date_to` ADDS a dated window to the results; it
59
- never filters.
64
+ never filters. `memory_type="design"` finds the rule a feature was built
65
+ to; `"bugfix"` finds what broke.
60
66
  - A teammate's name in the request is context. `author_email` only when the
61
67
  user asks what that person wrote (`team`).
62
68
  - "Project not found", or nothing from a project you cannot see, is the
63
69
  answer: report it, do not retry it another way.
64
70
  - Before editing a file, search it: `file_path="%installer.ts%"` (ILIKE
65
- wildcards), alone or with `query`.
71
+ wildcards), alone or with `query`, and read what it returns before you
72
+ change the file.
66
73
  - Superseded targets are included in `expand_memories` and hidden from search.
67
74
  - **Gate:** keep the UUIDs; the next store cites them as edges.
68
75
 
@@ -75,6 +82,11 @@ project_name="my-api", file_path="src/auth/%")`.
75
82
  WRONG: `git log` to explain a line.
76
83
  RIGHT: parse its `Recallium-Memory:` trailer or search `commit:<short-sha>`.
77
84
 
85
+ WRONG: the search returns the bugfix and the design; five source files are
86
+ read to work out the rule.
87
+ RIGHT: `expand_memories` both, answer from the design, open the one file that
88
+ confirms it.
89
+
78
90
  WRONG: the workstream answered, then an `"__all__"` search "to make sure
79
91
  nothing else exists" and an `author_email` pass for the teammate the user
80
92
  mentioned: nine calls.
@@ -87,7 +99,8 @@ RIGHT: `get_workstream`, `expand_memories`, the answer: two calls.
87
99
  parallel rungs
88
100
  - [ ] Project before `"__all__"`; `project_name` on every call
89
101
  - [ ] File-scoped pass before editing; documents searched as documents
90
- - [ ] Hits expanded; UUIDs kept for the next store's edges
102
+ - [ ] Hits expanded and read before any source file was opened; UUIDs kept
103
+ for the next store's edges
91
104
 
92
105
  ## See also
93
106
 
@@ -18,7 +18,7 @@ description: Recallium is the team's memory, not your notepad. REQUIRED on the f
18
18
  8. **Never author a standalone design, brief, plan, spec, or handoff `.md`.** The memory is the artifact. A subagent brief is a memory: pass its full UUID and tell the agent to `expand_memories` it first.
19
19
  9. **Commits:** the why-memories must exist before you commit; put their UUIDs in a `Recallium-Memory:` git trailer with `git commit --trailer`. One checkpoint per commit: a commit that closes a tracked task is checkpointed by `update_task(status="completed", memory_ids=[the why-UUIDs])` and gets NO progress; otherwise store ONE `progress` tagged `commit:<short-sha>` carrying the full SHA, the commit's files, and `related` edges to those UUIDs.
20
20
  10. **Working state:** `set_working_state` holds only what is left over after the last store or task close — what is mid-way, what is next, which writes are pending or unknown. It is not a checkpoint: never restate a memory's content, SHAs or evidence there. Write it after a step that changes where to resume, before compaction, and at session end. It is not searchable; anything durable is a memory. Claim a write succeeded only after its successful tool result; record denied or failed writes as pending and ambiguous results as unknown.
21
- 11. **Search before re-deriving:** before editing known territory or re-investigating anything a past session may have settled, `search_memories` by topic and by `file_path`.
21
+ 11. **Search before re-deriving:** before editing known territory or re-investigating settled work, `search_memories` by topic and by `file_path`, then `expand_memories` the hits before opening code.
22
22
 
23
23
  These rules are the floor, not the whole procedure: when the situation matches a trigger skill, invoke that skill and follow it — do not improvise the workflow from this block alone. Trigger skills: `resume`, `recall`, `start-work`, `investigate`, `design`, `decide`, `capture`, `curate`, `finish`, `handoff`, `rule`, `project`, `team`; `recallium-tools` is the generated tool map. For search fields, verdict shapes, thinking sequences, projects, teams, and worked examples, invoke the full `recallium-guidance` skill before non-trivial work.
24
24
  <!-- recallium:core:end -->
@@ -112,7 +112,7 @@ Every commit traceable to its *why*, and every *why* to its commit. Bidirectiona
112
112
  Full signatures, worked examples and the one-screen index: [reference.md](reference.md).
113
113
 
114
114
  ### Searching
115
- `search_memories` needs only `project_name`; the tool's own description carries every filter. Superseded memories are hidden by default, and `expand_memories` returns them. Skill: `recall`.
115
+ `search_memories` needs only `project_name`; the tool's own description carries every filter. Superseded memories are hidden by default, and `expand_memories` returns them. Read before code: when the question is why something behaves as it does, or how it is meant to behave, `expand_memories` the hits and read them before opening a source file. The design says what was intended; the code confirms it. A summary line is not the memory. Skill: `recall`.
116
116
 
117
117
  ### Working state
118
118
  Describe the last confirmed stored state, separately from completed code changes or checks. A tool call attempt is not a save receipt. If an update fails or is denied, name the unsaved change and next action; if its result is ambiguous, verify by reading before retrying. Example: “Tests passed; the bugfix still contains planned verification because saving the test results was denied.” After a successful update result, the note may say the verification was saved. Do not report database verification unless a read-back actually confirmed it.
@@ -29,9 +29,12 @@ in date order reconstructs how the work moved.
29
29
  working state and open tasks arrive only with it. Switching project? Call it
30
30
  again with the new `project_name`. No workspace and no project named?
31
31
  Ask, else `"default"`.
32
+ If the resume buffer is a preview, tell the user what it holds, as a part of the note and not the whole state. End by saying, without character counts, that more context is available that gives the full picture, and offer to load it; when the user says "resume", call get_working_state first.
32
33
  2. Read `get_working_state`: branch, slug, in flight, parked, next action.
33
34
  3. Roster, then the slug you are continuing; constraints and decisions come
34
- first and bound what you may do. **Gate:** slug loaded before code.
35
+ first and bound what you may do. `expand_memories` the ones that bound
36
+ this work and read them; a one-line title is not the decision.
37
+ **Gate:** slug loaded, and those read, before code.
35
38
  4. Triage `list_tasks`; `get_task` shows one task's linked memories. Pick up,
36
39
  or hand stale ones to `curate`.
37
40
  5. Pick the window the question asks for: "this session" -> `session_recap`;
@@ -36,7 +36,7 @@ units the user must at least be offered them — one question, their answer.
36
36
  ## Workflow
37
37
 
38
38
  1. Confirm a new effort needs setup. A self-contained edit with a specified result can be completed directly; its required memory lookup does not by itself require this workflow or a new workstream.
39
- For an effort, search by intent and file. A prior decision or constraint may settle part of it. Keep the UUIDs for edges.
39
+ For an effort, search by intent and file. A prior decision or constraint may settle part of it. `expand_memories` the hits and read them before opening the files they name: a summary line is not the memory. Keep the UUIDs for edges.
40
40
  2. `get_workstream(project_name=...)` for the roster. Continuing something?
41
41
  Open its slug. Nothing fits? `create_workstream(..., status="active")`.
42
42
  **Gate:** the workstream exists before the first store, never after.
@@ -69,7 +69,7 @@ RIGHT: "This is 3 units: … Track them as tasks?" — asked once, then their ca
69
69
 
70
70
  ## Checklist
71
71
 
72
- - [ ] Topic and file-scoped search run; UUIDs kept
72
+ - [ ] Topic and file-scoped search run; hits read in full before the code; UUIDs kept
73
73
  - [ ] Slug loaded or workstream created before any store
74
74
  - [ ] Two or more units → tasks offered once by name; created only on a yes, with the slug, linked to the design if one exists
75
75