eidetic-memory: refresh wrappers (eidetic 0.10) + memory-discipline convention#4
eidetic-memory: refresh wrappers (eidetic 0.10) + memory-discipline convention#4OriNachum wants to merge 1 commit into
Conversation
- **Memory-discipline "Conventions and workflow" section in `CLAUDE.md`** — a per-task *recall-before / remember-after* convention (scope localized to this repo's nick) so the vendored `remember` / `recall` skills are actually used, not just present: `/recall` before non-trivial work to build on prior decisions instead of re-deriving them, and `/remember` when a non-obvious decision, constraint, fix-and-why, or hard-won gotcha surfaces. The section documents this repo's memory as **in-repo and public** — records resolve to `<repo-root>/.eidetic/memory` (committed, team- and mesh-shared). Inserted idempotently (skipped if already present), slotted under an existing "Conventions and workflow" heading when one exists, else appended. ### Changed - **Refreshed the `remember` + `recall` wrappers from eidetic-cli 0.10.0** (cite-don't-import) — picks up eidetic's **project-local store default**: the files backend now resolves per record by visibility — PUBLIC records inside a git repo go to `<repo-root>/.eidetic/memory` (committed, team-shared), PRIVATE records (or any record outside a repo) go to `$HOME/.eidetic/memory` (never committed), an explicit `EIDETIC_DATA_DIR` still wins, and recall reads both stores and merges. Also carries the 0.9.3 hardening (interactive-stdin guard, `help` as a search term, SIGPIPE-safe suffix parsing). **Recipe policy override (the wrappers here are NOT byte-verbatim):** the injected default visibility is flipped from eidetic's `private` to **`public`**, so a plain `/remember` lands the note in `./.eidetic/memory` in this repo, kept as part of the repo — pass `--visibility private` to route a record to `$HOME` instead. `remember` drives `eidetic remember` (idempotent upsert of one JSON record or an NDJSON batch on stdin); `recall` drives `eidetic recall` with four search modes (exact / approximate / keyword / hybrid). Each `SKILL.md` is localized only in the illustrative `--scope <nick>` examples (Provenance keeps "First-party to eidetic-cli"). Runtime dep: the `eidetic` CLI on PATH (else a local eidetic-cli checkout with `uv`) — **`eidetic >= 0.10.0`** for the in-repo routing; on an older CLI the public records still work but are stored in `$HOME/.eidetic/memory` instead of in-repo. Propagated by rollout-cli's `eidetic-memory` recipe.
|
PR Summary by QodoRefresh eidetic memory wrappers (0.10) and document recall/remember discipline Description
Diagram
High-Level Assessment
Files changed (5)
|
Code Review by Qodo
1. Help contradicts public default
|
| Records default to this agent's PRIVATE personal scope (--scope from the | ||
| culture.yaml suffix); pass --visibility public to contribute to the shared | ||
| public pool. Every flag is forwarded verbatim to `eidetic remember`. |
There was a problem hiding this comment.
2. Help contradicts public default 🐞 Bug ⛨ Security
In remember.sh, the usage text says records default to the agent’s PRIVATE personal scope and suggests --visibility public to share, but when a culture.yaml suffix is resolved the wrapper actually injects --visibility public by default. This mismatch can cause users to store sensitive notes believing they are private, while they are written as public (and, with eidetic>=0.10 in a repo, routed to the committed in-repo store).
Agent Prompt
### Issue description
`remember.sh` now defaults to `--visibility public` when it can resolve a `culture.yaml` suffix, but the wrapper’s help text (and the existing SKILL.md docs for both remember/recall) still describe a private-by-default flow and the old `~/.eidetic/memory` default store. This is especially risky because users can rely on help/docs to decide whether to store sensitive information.
### Issue Context
- Runtime behavior: when suffix resolves, wrapper injects `--visibility public` unless caller explicitly passes `--visibility`.
- Repo documentation (`CLAUDE.md`) states the intended policy is public/in-repo by default.
- SKILL.md files still describe the pre-0.10 behavior and private defaults.
### Fix Focus Areas
- .claude/skills/remember/scripts/remember.sh[51-66]
- .claude/skills/remember/scripts/remember.sh[88-104]
- .claude/skills/remember/scripts/remember.sh[139-158]
- .claude/skills/recall/scripts/recall.sh[82-99]
- .claude/skills/recall/scripts/recall.sh[134-154]
- .claude/skills/remember/SKILL.md[1-30]
- .claude/skills/remember/SKILL.md[61-100]
- .claude/skills/recall/SKILL.md[1-40]
- .claude/skills/recall/SKILL.md[114-133]
### What to change
- Update `remember.sh` usage text to state the correct default: when a suffix is resolved, the wrapper defaults to `--visibility public` (and mention `--visibility private` to keep data in `$HOME` store).
- Update the large comment blocks in both wrappers that still claim “PERSONAL, PRIVATE scope … private default”.
- Update `.claude/skills/remember/SKILL.md` and `.claude/skills/recall/SKILL.md` to reflect:
- store routing is visibility-based (public in-repo vs private in `$HOME`) and
- the wrapper policy override is public-by-default (conditional on suffix resolution),
- and remove/replace the outdated `~/.eidetic/memory` claims.
ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools



Added
CLAUDE.md— aper-task recall-before / remember-after convention (scope localized to this
repo's nick) so the vendored
remember/recallskills are actually used,not just present:
/recallbefore non-trivial work to build on priordecisions instead of re-deriving them, and
/rememberwhen a non-obviousdecision, constraint, fix-and-why, or hard-won gotcha surfaces. The section
documents this repo's memory as in-repo and public — records resolve to
<repo-root>/.eidetic/memory(committed, team- and mesh-shared). Insertedidempotently (skipped if already present), slotted under an existing
"Conventions and workflow" heading when one exists, else appended.
Changed
remember+recallwrappers from eidetic-cli 0.10.0(cite-don't-import) — picks up eidetic's project-local store default: the
files backend now resolves per record by visibility — PUBLIC records inside a
git repo go to
<repo-root>/.eidetic/memory(committed, team-shared), PRIVATErecords (or any record outside a repo) go to
$HOME/.eidetic/memory(nevercommitted), an explicit
EIDETIC_DATA_DIRstill wins, and recall reads bothstores and merges. Also carries the 0.9.3 hardening (interactive-stdin guard,
helpas a search term, SIGPIPE-safe suffix parsing). Recipe policyoverride (the wrappers here are NOT byte-verbatim): the injected default
visibility is flipped from eidetic's
privatetopublic, so a plain/rememberlands the note in./.eidetic/memoryin this repo, kept as partof the repo — pass
--visibility privateto route a record to$HOMEinstead.
rememberdriveseidetic remember(idempotent upsert of one JSONrecord or an NDJSON batch on stdin);
recalldriveseidetic recallwithfour search modes (exact / approximate / keyword / hybrid). Each
SKILL.mdislocalized only in the illustrative
--scope <nick>examples (Provenance keeps"First-party to eidetic-cli"). Runtime dep: the
eideticCLI on PATH (else alocal eidetic-cli checkout with
uv) —eidetic >= 0.10.0for thein-repo routing; on an older CLI the public records still work but are stored
in
$HOME/.eidetic/memoryinstead of in-repo. Propagated by rollout-cli'seidetic-memoryrecipe.