eidetic-memory: refresh wrappers (eidetic 0.10) + memory-discipline convention#58
eidetic-memory: refresh wrappers (eidetic 0.10) + memory-discipline convention#58OriNachum 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.
CI Feedback 🧐(Feedback updated until commit a881bb6)A test triggered by this PR failed. Here is an AI-generated analysis of the failure:
|
PR Summary by QodoRefresh eidetic remember/recall wrappers (0.10) and document memory discipline Description
Diagram
High-Level Assessment
Files changed (5)
|
Code Review by Qodo
1. Private-default docs wrong
|
| 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. Private-default docs wrong 🐞 Bug ⛨ Security
remember.sh now injects --visibility public by default, but its usage() text (and the remember/recall SKILL.md docs) still say the default is private, which can mislead users into storing sensitive notes that end up in the committed in-repo store. This is contradicted by the new CLAUDE.md guidance that explicitly states a plain /remember lands in ./.eidetic/memory with no flags.
Agent Prompt
## Issue description
The wrappers now default to `--visibility public` (committed, in-repo store), but several docs still describe the previous `--visibility private` default. This mismatch can cause users/agents to rely on incorrect safety expectations and inadvertently publish/commit private data.
## Issue Context
- `remember.sh` currently prints help text implying *private-by-default*, but the wrapper injects `--visibility public` when a `culture.yaml` suffix resolves.
- The SKILL.md docs for both `/remember` and `/recall` still claim the store is `~/.eidetic/memory` and the wrapper defaults to `--visibility private`.
- `CLAUDE.md` was updated to state the opposite (plain `/remember` is public/in-repo).
## Fix Focus Areas
- .claude/skills/remember/scripts/remember.sh[51-66]
- .claude/skills/remember/scripts/remember.sh[88-104]
- .claude/skills/recall/scripts/recall.sh[82-99]
- .claude/skills/remember/SKILL.md[4-20]
- .claude/skills/recall/SKILL.md[4-22]
Update wording to consistently reflect:
- Default visibility is **public** (per this repo’s policy override).
- Public records inside a git repo route to `<repo-root>/.eidetic/memory`.
- Private records route to `$HOME/.eidetic/memory`.
- If the user wants to keep something out of the committed store, they must pass `--visibility private` (and optionally document how `/recall` visibility affects which records are returned).
ⓘ 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.