echo
$
npx mdskill add cwinvestments/memstack/echo*Recall information from past CC sessions using semantic vector search.*
SKILL.md
.github/skills/echoView on GitHub ↗
---
name: echo
description: "Use when the user references past sessions, asks 'what did we do', 'do you remember', 'last session', 'recall', or 'continue from'."
version: 1.0.0
---
# 🔊 Echo — Searching the Archives...
*Recall information from past CC sessions using semantic vector search.*
## Activation
When this skill activates, output:
`🔊 Echo — Searching the archives...`
Then execute the protocol below.
## Context Guard
| Context | Status | Priority |
|---------|--------|----------|
| **User says "recall", "remember", "last session", "what did we"** | ACTIVE — search memory | P1 |
| **User asks about past work explicitly ("did we build X?")** | ACTIVE — search memory | P1 |
| **User says "continue from" or "resume" a past topic** | ACTIVE — search memory | P2 |
| **User is describing NEW work to do ("build X", "add Y")** | DORMANT — this is new work, not recall | — |
| **User mentions "memory" in code context (RAM, variables)** | DORMANT — technical term, not MemStack recall | — |
| **User mentions a project name in present tense ("work on X")** | DORMANT — forward-looking, not recall | — |
| **User says "save" or "log" (Diary/Project territory)** | DORMANT — Diary or Project skill handles writing | — |
## Anti-Rationalization
If you're thinking any of these, STOP — you're about to skip the protocol:
| You're thinking... | Reality |
|---|---|
| "I remember this from earlier in the conversation" | You don't persist. Earlier context may be compacted. Run the search. |
| "I can just summarize from what I know" | You know nothing from prior sessions. The database does. Search it. |
| "The user probably doesn't need exact details" | Users ask Echo for specifics — dates, decisions, file paths. Run all steps. |
| "Vector search seems slow, I'll skip to SQLite" | Vector search returns the best results. Always try it first. |
| "I found one result, that's probably enough" | Run ALL steps (vector + SQLite + insights). One source misses context another catches. |
| "The keywords are too vague to search" | Search anyway. Vague queries still return useful semantic matches. |
## Protocol
### Step 1: Semantic Vector Search (primary)
Try LanceDB vector search first for best-quality results:
```bash
python "$MEMSTACK_PATH/skills/echo/search.py "<keywords>" --top-k 5
```
If this returns results, present them with scores, dates, and source files.
### Step 2: SQLite Keyword Search (augment or fallback)
Always run SQLite search to supplement vector results or as fallback if Step 1 fails:
```bash
python "$MEMSTACK_PATH/db/memstack-db.py" search "<keywords>" --project <project>
```
### Step 3: Recent Sessions and Insights
For additional context:
```bash
python "$MEMSTACK_PATH/db/memstack-db.py" get-sessions <project> --limit 5
python "$MEMSTACK_PATH/db/memstack-db.py" get-insights <project>
```
### Step 4: Markdown Fallback
If both vector and SQLite return nothing, check `memory/sessions/` and `memory/projects/` for markdown files.
### Step 5: Present Findings
Combine and deduplicate results from all sources:
- **Vector results**: Show with similarity scores and section headings
- **SQLite results**: Show with dates and accomplishment summaries
- **Source attribution**: Always show which source (vector/SQLite/markdown) each result came from
- Date and project name
- What was accomplished
- What was left pending
- Key decisions and insights
### Step 6: No Results
If nothing found across all sources — say clearly: "No session logs found for [topic]. Use Diary to save future sessions."
## Indexing
To re-index sessions after new diary entries (normally done automatically):
```bash
python "$MEMSTACK_PATH/skills/echo/index-sessions.py
```
Use `--force` to re-embed all content (e.g., after changing embedding model):
```bash
python "$MEMSTACK_PATH/skills/echo/index-sessions.py --force
```
## Inputs
- Keywords from the user's prompt (project name, feature name, date range)
- Vector DB: `$MEMSTACK_PATH/memory\vectors\lancedb\` (via LanceDB)
- Database: `$MEMSTACK_PATH/db\memstack.db` (via memstack-db.py)
- Fallback: `$MEMSTACK_PATH/memory\` (legacy markdown files)
## Outputs
- Ranked results with semantic similarity scores
- Source type attribution (vector, database, or markdown fallback)
- Summary of relevant past session context
## Example Usage
**User:** "Do you remember what we did on AdminStack last session?"
```
🔊 Echo — Searching the archives...
Vector search (top 3):
[1] AdminStack — 2026-02-18 (session)
Section: Accomplished
Score: 0.912
Built CC Monitor page with session cards, auto-refresh, notifications.
Created /api/cc-sessions CRUD + public report endpoint.
[2] AdminStack — 2026-02-17 (session)
Section: Decisions
Score: 0.847
Used SWR for auto-refresh instead of polling. API key via HMAC-SHA256.
[3] AdminStack — 2026-02-18 (session)
Section: Next Steps
Score: 0.791
Deploy dashboard, add notification preferences, test mobile view.
SQLite insights (3):
- [decision] Used SWR for auto-refresh instead of polling
- [decision] API key validation via HMAC-SHA256
- [pattern] Next.js App Router + SWR for all dashboard pages
```
## Level History
- **Lv.1** — Base: Session log search and recall. (Origin: MemStack v1.0, Feb 2026)
- **Lv.2** — Enhanced: Added YAML frontmatter, context guard, activation message. (Origin: MemStack v2.0 MemoryCore merge, Feb 2026)
- **Lv.3** — Advanced: SQLite backend as primary source, markdown as fallback, insight search. (Origin: MemStack v2.1 Accomplish-inspired upgrade, Feb 2026)
- **Lv.4** — Native: CC rules integration (`.claude/rules/echo.md`), `/memstack-search` slash command, auto-indexed CLAUDE.md context. (Origin: MemStack v3.0-beta, Feb 2026)
- **Lv.5** — Semantic: LanceDB vector-powered recall with sentence-transformers embeddings (OpenAI optional). Auto-indexes sessions/plans, semantic similarity across all logs, SQLite fallback. (Origin: MemStack v3.1, Feb 2026)
More from cwinvestments/memstack
- compressUse when the user says 'headroom', 'compression', 'token savings', 'proxy status', or asks about context window usage.
- diaryUse when the user says 'save diary', 'log session', 'wrapping up', or at end of a productive session.
- familiarUse when the user says 'dispatch', 'send familiar', 'split task', or needs work split across parallel CC sessions.
- forgeUse when the user says 'forge this', 'new skill', 'create enchantment', or wants to create a MemStack skill.
- governorUse when the user says 'new project', 'project init', 'what tier', 'scope', or discusses project maturity, complexity budget, or what's appropriate to build.
- grimoireUse when the user says 'update context', 'update claude', 'save library', or after significant project changes.
- memstack-automation-api-integrationUse this skill when the user says 'API integration', 'connect APIs', 'sync data', 'data mapping', 'rate limiting', or needs system-to-system connectors with authentication, rate limit handling, and error recovery. Generates API integration code with authentication (OAuth, API key, JWT), request/response mapping, rate limit handling, error recovery with circuit breakers, and sync monitoring. Do NOT use for visual n8n workflows or webhook receiving.
- memstack-automation-content-pipelineUse this skill when the user says 'content pipeline', 'content automation', 'auto-publish', 'repurpose content', 'multi-platform publishing', or needs end-to-end content workflow from ideation through cross-platform formatting and publishing. Do NOT use for single social media posts or individual blog posts.
- memstack-automation-cron-schedulerUse this skill when the user says 'cron job', 'scheduled task', 'run every', 'cron expression', 'recurring job', or needs production-grade scheduled jobs with overlap prevention, monitoring, and structured logging. Do NOT use for n8n workflows or event-driven webhooks.
- memstack-automation-hosted-mcp-catalogUse when the user says 'what MCP servers', 'find an MCP for', 'hosted MCP', 'list MCP servers', 'MCP catalog', 'available MCP tools', or needs to discover zero-setup hosted MCP servers they can use immediately. Do NOT use for building MCP servers or configuring local MCP.