Skip to content

eidetic-memory: refresh wrappers (eidetic 0.10) + memory-discipline convention#58

Open
OriNachum wants to merge 1 commit into
mainfrom
rollout/eidetic-memory-0.10
Open

eidetic-memory: refresh wrappers (eidetic 0.10) + memory-discipline convention#58
OriNachum wants to merge 1 commit into
mainfrom
rollout/eidetic-memory-0.10

Conversation

@OriNachum

Copy link
Copy Markdown
Contributor

Added

  • 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.

- **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.
@qodo-code-review

qodo-code-review Bot commented Jun 24, 2026

Copy link
Copy Markdown

CI Feedback 🧐

(Feedback updated until commit a881bb6)

A test triggered by this PR failed. Here is an AI-generated analysis of the failure:

Action: test

Failed stage: Run uv sync [❌]

Failure summary:

The action failed during dependency installation (uv sync) because building the Python package
pygobject==3.46.0 failed.
- pygobject triggered a source build of pycairo==1.29.0 via
build-system.requires.
- The pycairo wheel build failed in Meson (mesonpy.build_wheel exit status 1)
because the system dependency cairo was not available:
- Run-time dependency cairo found: NO and
../cairo/meson.build:31:12: ERROR: Dependency "cairo" not found (tried pkg-config and cmake) (log
lines ~215-217 and ~810-812).
- pygobject was pulled in via reachy-mini-cli[daemon] -> reachy-mini
-> pygobject (log line ~814).

Relevant error logs:
1:  ##[group]Runner Image Provisioner
2:  Hosted Compute Agent
...

143:  UV_CACHE_DIR: /home/runner/work/_temp/setup-uv-cache
144:  ##[endgroup]
145:  Downloading cpython-3.12.13-linux-x86_64-gnu (download) (32.6MiB)
146:  Downloaded cpython-3.12.13-linux-x86_64-gnu (download)
147:  Installed Python 3.12.13 in 981ms
148:  + cpython-3.12.13-linux-x86_64-gnu (python3.12)
149:  ##[group]Run uv sync
150:  �[36;1muv sync�[0m
151:  shell: /usr/bin/bash -e {0}
152:  env:
153:  SONAR_TOKEN: ***
154:  UV_CACHE_DIR: /home/runner/work/_temp/setup-uv-cache
155:  ##[endgroup]
156:  Using CPython 3.12.13
157:  Creating virtual environment at: .venv
158:  × Failed to download and build `pygobject==3.46.0`
159:  ├─▶ Failed to install requirements from `build-system.requires`
160:  ├─▶ Failed to build `pycairo==1.29.0`
161:  ├─▶ The build backend returned an error
162:  ╰─▶ Call to `mesonpy.build_wheel` failed (exit status: 1)
163:  [stdout]
...

201:  Compiler for C supports arguments -Wpointer-arith: YES
202:  Compiler for C supports arguments -Wreturn-type: YES
203:  Compiler for C supports arguments -Wshadow: YES
204:  Compiler for C supports arguments -Wsign-compare: YES
205:  Compiler for C supports arguments -Wstrict-aliasing: YES
206:  Compiler for C supports arguments -Wundef: YES
207:  Compiler for C supports arguments -Wunused-but-set-variable: YES
208:  Compiler for C supports arguments -Wswitch-default: YES
209:  Compiler for C supports arguments -Wno-missing-field-initializers: YES
210:  Compiler for C supports arguments -Wno-unused-parameter: YES
211:  Compiler for C supports arguments -fno-strict-aliasing: YES
212:  Compiler for C supports arguments -fvisibility=hidden: YES
213:  Found pkg-config: YES (/usr/bin/pkg-config) 1.8.1
214:  Found CMake: /usr/local/bin/cmake (3.31.6)
215:  Run-time dependency cairo found: NO  (tried pkg-config and cmake)
216:  ../cairo/meson.build:31:12: ERROR: Dependency "cairo" not found (tried
217:  pkg-config and cmake)
...

794:  Calling CMake (['/usr/local/bin/cmake']) in
795:  /home/runner/work/_temp/setup-uv-cache/sdists-v9/pypi/pycairo/1.29.0/Gsz5L4yz1GFx4hVE/src/.mesonpy-rx95_as4/meson-private/cmake_cairo
796:  with:
797:  - "--trace-expand"
798:  - "--trace-format=json-v1"
799:  - "--no-warn-unused-cli"
800:  - "--trace-redirect=cmake_trace.txt"
801:  -
802:  "-DCMAKE_TOOLCHAIN_FILE=/home/runner/work/_temp/setup-uv-cache/sdists-v9/pypi/pycairo/1.29.0/Gsz5L4yz1GFx4hVE/src/.mesonpy-rx95_as4/meson-private/cmake_cairo/CMakeMesonToolchainFile.cmake"
803:  - "."
804:  -- Module search paths:    ['/', '/opt', '/usr', '/usr/local']
805:  -- CMake root:             /usr/local/share/cmake-3.31
806:  -- CMake architectures:    ['x86_64-linux-gnu']
807:  -- CMake lib search paths: ['lib', 'lib32', 'lib64', 'libx32',
808:  'share', '', 'lib/x86_64-linux-gnu']
809:  Preliminary CMake check failed. Aborting.
810:  Run-time dependency cairo found: NO  (tried pkg-config and cmake)
811:  ../cairo/meson.build:31:12: ERROR: Dependency "cairo" not found (tried
812:  pkg-config and cmake)
813:  ##[endgroup]
814:  hint: `pygobject` (v3.46.0) was included because `reachy-mini-cli[daemon]` (v0.30.0) depends on `reachy-mini>=1.0` (v1.7.3) which depends on `pygobject>=3.42.2, <=3.46.0`
815:  ##[error]Process completed with exit code 1.
816:  Node 20 is being deprecated. This workflow is running with Node 24 by default. If you need to temporarily use Node 20, you can set the ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION=true environment variable. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/

@qodo-code-review

Copy link
Copy Markdown

PR Summary by Qodo

Refresh eidetic remember/recall wrappers (0.10) and document memory discipline
✨ Enhancement 📝 Documentation ⚙️ Configuration changes 🕐 20-40 Minutes

Grey Divider

Description

• Update vendored remember/recall wrappers to match eidetic-cli 0.10 store routing.
• Default wrapper visibility to public to persist team memory in-repo under .eidetic/memory.
• Document the repo’s recall-before/remember-after workflow and bump version/changelog.
Diagram

graph TD
  U(("Developer / Claude")) --> RSH["remember.sh wrapper"] --> E["eidetic CLI (>=0.10)"] --> RS[("Repo store: .eidetic/memory")]
  U(("Developer / Claude")) --> CSH["recall.sh wrapper"] --> E["eidetic CLI (>=0.10)"] --> HS[("Home store: $HOME/.eidetic/memory")]
  E["eidetic CLI (>=0.10)"] --> RS[("Repo store: .eidetic/memory")]
  E["eidetic CLI (>=0.10)"] --> HS[("Home store: $HOME/.eidetic/memory")]
  subgraph Legend
    direction LR
    _u(("Actor")) ~~~ _w["Wrapper script"] ~~~ _cli["CLI"] ~~~ _db[("Files store")]
  end
Loading
High-Level Assessment

The following are alternative approaches to this PR:

1. Keep upstream default visibility (private) and require explicit --visibility public
  • ➕ Minimizes risk of accidentally committing sensitive notes
  • ➕ Matches eidetic upstream expectations, reducing surprise for new users
  • ➖ Undermines the stated goal of building team-shared, repo-local memory by default
  • ➖ Higher friction: users must remember flags for the common shared-case
2. Enforce repo-local storage via EIDETIC_DATA_DIR instead of visibility policy
  • ➕ Single store location regardless of visibility semantics
  • ➕ Less coupling to eidetic’s routing behavior changes across versions
  • ➖ Overrides the intended public/private separation (harder to keep private notes private)
  • ➖ Requires environment configuration rather than working out-of-the-box
3. Provide a repo-level config file (if supported) to set defaults, keep wrappers thin
  • ➕ Moves policy from scripts to declarative config
  • ➕ Reduces wrapper divergence from upstream over time
  • ➖ Depends on eidetic CLI supporting stable config semantics
  • ➖ Still needs wrapper/documentation work to ensure adoption in agent workflows

Recommendation: The PR’s approach is appropriate for the stated objective: make shared, in-repo memory the default and document the workflow so it actually gets used. The key risk is accidental publication; the added warnings (when suffix/scope can’t be resolved) and the documented escape hatch (--visibility private) help mitigate this. If sensitive-data risk is high in this repo, consider flipping the default back to private and requiring explicit public, but that conflicts with the rollout’s intent.

Files changed (5) +142 / -27

Enhancement (2) +74 / -26
recall.shAlign recall wrapper with eidetic 0.10 routing and safer CLI UX +35/-13

Align recall wrapper with eidetic 0.10 routing and safer CLI UX

• Updates store-location documentation to the new visibility-based routing and simplifies the missing-CLI error output. Tightens argument handling so empty queries error (and 'help' remains a valid search term), makes suffix parsing SIGPIPE-safe under pipefail, defaults wrapper-injected visibility to public, and warns when no culture.yaml suffix resolves.

.claude/skills/recall/scripts/recall.sh

remember.shDefault remember to public repo memory and harden stdin/flag behavior +39/-13

Default remember to public repo memory and harden stdin/flag behavior

• Updates store-location documentation to eidetic 0.10 routing, simplifies the missing-CLI error output, and adds a guard to avoid hanging when invoked with interactive stdin and no args. Makes suffix parsing SIGPIPE-safe, switches injected default visibility from private to public (policy override), and warns when suffix resolution fails so records don’t go public silently.

.claude/skills/remember/scripts/remember.sh

Documentation (2) +67 / -0
CHANGELOG.mdAdd 0.30.0 changelog entry for eidetic-memory refresh +39/-0

Add 0.30.0 changelog entry for eidetic-memory refresh

• Documents the new memory-discipline section and the refreshed wrapper behavior, including repo-local public storage defaults and wrapper policy overrides.

CHANGELOG.md

CLAUDE.mdDocument recall-before/remember-after memory discipline +28/-0

Document recall-before/remember-after memory discipline

• Adds a Conventions and workflow section describing when to use /recall and /remember, clarifying that this repo’s memory is public and committed under .eidetic/memory by default, with an explicit private opt-out.

CLAUDE.md

Other (1) +1 / -1
pyproject.tomlBump project version to 0.30.0 +1/-1

Bump project version to 0.30.0

• Updates the package version to reflect the eidetic-memory wrapper refresh and documentation addition.

pyproject.toml

@qodo-code-review

Copy link
Copy Markdown

Code Review by Qodo

🐞 Bugs (2) 📘 Rule violations (1) 📜 Skill insights (0)

Context used
✅ Compliance rules (platform): 66 rules

Grey Divider


Action required

1. Private-default docs wrong 🐞 Bug ⛨ Security
Description
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.
Code

.claude/skills/remember/scripts/remember.sh[R62-64]

+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`.
Relevance

⭐⭐ Medium

Team often accepts “docs/help must match behavior” fixes (e.g., accepted mismatch fix in PR #53),
but none for these skills.

PR-#53

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
The wrapper’s help text and SKILL.md files assert a private-by-default model and a home-dir store,
but the updated wrapper code injects --visibility public by default and CLAUDE.md states plain
/remember writes to ./.eidetic/memory with no flags, creating a concrete contradiction that can
lead to accidental disclosure.

.claude/skills/remember/scripts/remember.sh[60-65]
.claude/skills/remember/scripts/remember.sh[139-148]
.claude/skills/recall/scripts/recall.sh[134-145]
.claude/skills/remember/SKILL.md[11-17]
.claude/skills/recall/SKILL.md[12-18]
CLAUDE.md[604-626]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## 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



Remediation recommended

2. Remember can still hang 🐞 Bug ☼ Reliability
Description
The new TTY guard only triggers when there are zero arguments; running remember.sh --json (or
other flags without a record argument) from an interactive terminal still execs eidetic remember
and can block waiting for NDJSON on stdin. This defeats the intent of the “interactive-stdin guard”
hardening.
Code

.claude/skills/remember/scripts/remember.sh[R76-84]

+# No record argument AND stdin is an interactive terminal → `eidetic remember`
+# would block forever waiting for NDJSON. Show usage instead of hanging. A piped
+# or redirected stdin (`cat records.ndjson | remember.sh`) is not a TTY and
+# proceeds to the batch path normally.
+if [ "$#" -eq 0 ] && [ -t 0 ]; then
+    usage >&2
+    printf 'hint: pass a JSON record as an argument, or pipe NDJSON on stdin.\n' >&2
+    exit 1
+fi
Relevance

⭐⭐ Medium

No historical evidence found for remember/recall TTY-stdin hang guard edge cases in this repo.

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
The guard is currently conditioned on $# -eq 0, so any flags provided bypass it; the script then
unconditionally execs eidetic remember with those args. Since the wrapper itself documents that
eidetic remember would block on interactive stdin when no record is provided, the bypass
reintroduces the hang path.

.claude/skills/remember/scripts/remember.sh[76-84]
.claude/skills/remember/scripts/remember.sh[164-164]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
The interactive-stdin guard only checks `"$#" -eq 0`, but `remember.sh --json` (or `remember.sh --scope X`, etc.) is still a “no record argument” invocation and can hang on a TTY waiting for stdin.

## Issue Context
The wrapper supports providing a record as a positional argument **or** an NDJSON batch via stdin. On an interactive TTY with no record argument, the expected behavior is to show usage and exit rather than blocking.

## Fix Focus Areas
- .claude/skills/remember/scripts/remember.sh[76-85]

Implement a small argv scan to determine whether a positional record argument is present.
Suggested approach:
- Walk args left-to-right.
- Skip known options that take values (`--backend`, `--scope`, `--visibility`) and their following values (also handle `--scope=...` forms).
- Treat any remaining non-option argument as the record payload.
- If stdin is a TTY and no positional record arg is found, print usage/hint and exit 1.
This keeps the wrapper from hanging on common flags-only invocations while preserving support for `eidetic remember [OPTIONS] <record>`.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools



Informational

3. Edited .claude/skills/remember.sh 📘 Rule violation § Compliance
Description
The PR modifies non-SKILL.md files under .claude/skills/ (specifically
.claude/skills/remember/scripts/remember.sh and .claude/skills/recall/scripts/recall.sh). This
violates the vendoring rule that logic changes must be made upstream (guildmaster) and then
re-vendored into this repo.
Code

.claude/skills/remember/scripts/remember.sh[R15-20]

+# The store is the files backend. Default location resolves per-operation:
+# PUBLIC records inside a git repo → <repo-root>/.eidetic/memory (committed,
+# team-shared); PRIVATE records, or any record outside a git repo →
+# $HOME/.eidetic/memory (never committed). An explicit EIDETIC_DATA_DIR still
+# wins and short-circuits to that single dir. Use --backend mongo|neo4j (with
# EIDETIC_MONGO_URI / NEO4J_URI) for a server-backed shared store.
Relevance

⭐ Low

Same “don’t modify .claude/skills scripts” compliance suggestion was definitely_rejected in PR #46.

PR-#46

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
Compliance ID 818582 forbids modifying any .claude/skills/** files other than SKILL.md. The
cited lines show that content in .claude/skills/remember/scripts/remember.sh and
.claude/skills/recall/scripts/recall.sh was changed as part of this PR, which directly conflicts
with the rule requiring these vendored script files to remain byte-verbatim from the upstream
source.

Rule 818582: Do not directly modify skill script bodies in .claude/skills/
.claude/skills/remember/scripts/remember.sh[15-20]
.claude/skills/recall/scripts/recall.sh[9-13]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
Non-`SKILL.md` files under `.claude/skills/` were directly modified in this PR, which is disallowed; changes must be made upstream (guildmaster) and then re-vendored.

## Issue Context
The compliance checklist requires that only `SKILL.md` files be edited locally; script bodies (e.g., `.sh`) must remain byte-verbatim from the vendored source.

## Fix Focus Areas
- .claude/skills/remember/scripts/remember.sh[15-20]
- .claude/skills/recall/scripts/recall.sh[9-13]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


Grey Divider

Qodo Logo

Comment on lines +62 to +64
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`.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Action required

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant