GAAI-framework memory-retrieve
Load only the minimum relevant memory for a task using 3-level progressive disclosure. Activate before context-building — never load full memory dumps. Never substitute summaries for durable memory.
git clone https://github.com/Fr-e-d/GAAI-framework
T=$(mktemp -d) && git clone --depth=1 https://github.com/Fr-e-d/GAAI-framework "$T" && mkdir -p ~/.claude/skills && cp -r "$T/.gaai/core/skills/cross/memory-retrieve" ~/.claude/skills/fr-e-d-gaai-framework-memory-retrieve && rm -rf "$T"
.gaai/core/skills/cross/memory-retrieve/SKILL.mdMemory Retrieve
Purpose / When to Activate
Activate before
context-building whenever a task requires historical context.
Never load full memory. Always filter by relevance. Never substitute summaries for durable memory (decisions, patterns, project).
3-Level Progressive Disclosure
Level 1 — INDEX SCAN (~5 tokens/entry) Read index.md → Decision Registry table (DEC | Domain | Level | Title) Agent identifies relevant decision(s) by domain and/or level Level 2 — INDIVIDUAL ADR FILES (~300 tokens/file) Load specific decisions/DEC-{ID}.md files for full entry text Load other relevant category files (patterns, project, ops) Optionally traverse `related_to` in loaded files to discover adjacent decisions Or invoke `memory-search` Mode C for systematic cross-reference discovery Level 3 — CROSS-DOMAIN SCAN (only for Decision Consistency Gate) Grep frontmatter across all DEC-*.md files for conflicts Only triggered when recording a new decision (see Decision Consistency Gate in decision-extraction skill)
Process
-
Read memory index (
). This contains:contexts/memory/index.md- Shared categories table (paths + purpose)
- Decision Registry: one row per DEC-ID with domain, level, and title
If
is absent or empty, fall back to scanningindex.md
directory structure.contexts/memory/
-
Identify relevant decisions for the current task:
- Filter the Decision Registry by domain (e.g.,
,billing
)matching - Filter by level if scope is known (e.g., only
for implementation tasks)architectural - From story/epic tags or explicit instruction scope
- Filter the Decision Registry by domain (e.g.,
-
Load memory by durability class:
Durable memory (decisions, patterns, project, ops, contacts, domains): → Load individual
files directly. Full text, never summaries. → Summaries exist as INDEX-ONLY aids — they list entries for scanning but MUST NOT substitute for the full decision text. → Load only the specific decisions relevant to the task (typically 3-10 files).decisions/DEC-{ID}.mdEphemeral memory (sessions): → Prefer summaries if available (lower token cost).
-
For Decision Consistency Gate: → Scan the Decision Registry in index.md for ALL entries in the relevant domain → Load the specific
files to check for conflicts → If uncertain about boundaries, also load decisions from adjacent domainsDEC-{ID}.md -
Freshness Check (Tier 2 files only)
Pre-condition: verify that
is available on the PATH (git
). Ifgit --version
is unavailable, append the following note to thegit
section and skip the remainder of this step — proceed to Step 6 normally:freshness_warningsFreshness check skipped: git not available
For each file in the
:memory_context_bundlea. If the file's frontmatter has no
field, orrefresh_tier
≠ 2 → skip (Tier 1 files are proactively refreshed via the post-delivery hook; Tier 3-4 are not checked at read time).refresh_tierb. If
is absent ordepends_on
is empty → skip (treat as Tier 4 — no check, no warning).depends_on.code_pathsc. If
is absent or unparseable → append toupdated_at
:freshness_warningsFreshness check skipped: no valid updated_at — {file_path} Then skip this file.
d. For each path in
:depends_on.code_paths- If the path does not exist on disk, append to
:freshness_warningsFreshness check skipped: {path} not found — depends_on may be stale Then skip this path.
- Run:
(wheregit log --oneline --since="{updated_at}" -- "{path}"
is the file's frontmatter value, quoted exactly as-is).{updated_at} - Count the lines returned. If the count > 0, the file is
for this path.POTENTIALLY_STALE
e. If any path produced a non-zero commit count for this file, append one
entry per changed path in the format below (AC2):freshness_warnings⚠ FRESHNESS WARNING — {file_path} refresh_tier: 2 updated_at: {date} changed_dependency: {code_path} ({N} commits since updated_at) action: verify content is still accurate before relying on itIf no warnings are produced, the
section is omitted from the output (0 tokens).freshness_warnings - If the path does not exist on disk, append to
-
Return
— curated, minimal set of memory files relevant to the current task, plus anymemory_context_bundle
produced in Step 5.freshness_warnings
Output
— curated set of memory files relevant to the current task, ready for memory_context_bundle
context-building.
Quality Checks
- No full memory injection
- Context is focused on the task
- Agent loads only the specific DEC-{ID}.md files relevant to the task (typically 3-10)
- Summaries are NEVER substituted for durable memory (decisions, patterns, project)
- Decision Registry enables decision identification WITHOUT opening individual files
- Token budget: index (~1,500) + 3-10 individual decision files (~300 each) = ~4,500 tokens typical;
section adds ~100-200 tokens when Tier 2 staleness is detected, 0 tokens when all files are cleanfreshness_warnings - Only memory directly relevant to the task is included
- Freshness warnings are emitted for Tier 2 files with changed code dependencies — never silently suppressed.
Non-Goals
This skill must NOT:
- Load all memory files
- Decide what to do with retrieved memory
- Modify memory files
- Substitute summary one-liners for full decision text
Selective retrieval via progressive disclosure. Memory is never auto-loaded. Durable memory is never summarized away.