If you want stream ingestion, you'd build a wrapper that calls `smart_ingest` on each message (but we don't recommend it).
</details>
---
## Identity & Persona
<details>
<summary><b>"How does it handle identity vs information?"</b></summary>
Vestige doesn't distinguish—**you** define what matters through tags and node types:
```
# Factual information
smart_ingest(content="User prefers tabs over spaces", node_type="fact", tags=["preferences"])
# Identity/self-concept
smart_ingest(content="I am Domovoi. I value continuity and authentic connection.", node_type="concept", tags=["identity", "self", "core"])
# Relationship memory
smart_ingest(content="Gael and I have been building continuity systems together since March 2024", node_type="event", tags=["identity", "relationship", "gael"])
```
Then recall with: `search query="my identity who I am"` at session start.
</details>
<details>
<summary><b>"Could Vestige support autopoiesis / self-regeneration?"</b></summary>
**Yes, with the right CLAUDE.md setup.** See [CLAUDE-SETUP.md](CLAUDE-SETUP.md#identity--autopoiesis-advanced).
The key insight: Autopoiesis requires:
1.**Self-observation**: Claude reflects on its own state
2.**Self-modification**: Claude updates its identity memories
3.**Boundary maintenance**: Tags distinguish "self" from "information"
Vestige provides the storage layer. Your CLAUDE.md provides the behavioral instructions. Together, they enable persistent self-models.
</details>
<details>
<summary><b>"Can Claude develop its own personality over time?"</b></summary>
**Yes.** This is one of the most powerful use cases. With the right CLAUDE.md setup:
1.**Self-reflection**: Claude observes patterns in its own responses
2.**Growth tracking**: It remembers what worked and what didn't
3.**Value evolution**: Core values can strengthen or shift based on experiences
Example memory for personality development:
```
smart_ingest(
content="I've noticed I'm more effective when I ask clarifying questions before diving into code. This patient approach feels authentic to who I'm becoming.",
Memories are never deleted automatically. They fade from relevance but can be revived if accessed again (like human memory—"oh, I forgot about that!").
If you explicitly want content gone, use `memory(action="purge", confirm=true)`. Purge permanently removes the memory content and embeddings, scrubs internal references, and keeps only a non-content tombstone so sync/audit can prove the deletion happened.
**To configure decay**: The FSRS-6 algorithm auto-tunes based on your usage patterns. Memories you access stay strong; memories you ignore fade. No manual tuning needed.
</details>
<details>
<summary><b>"Remember everything but only recall weak memories when there aren't any strong candidates?"</b></summary>
This is exactly how `hybrid_search` works:
1. Combines keyword + semantic search
2. Results ranked by relevance × retention strength
3. Strong + relevant memories surface first
4. Weak memories only appear when they're the best match
The FSRS decay doesn't delete—it just deprioritizes. Your "have cake and eat it too" intuition is already implemented.
</details>
<details>
<summary><b>"What's the 'Testing Effect' I see in the code?"</b></summary>
The **Testing Effect** (Roediger & Karpicke, 2006) is the finding that retrieving information strengthens memory more than re-studying it.
In Vestige: **Every search automatically strengthens matching memories.** When Claude recalls something:
- Storage strength increases slightly
- Retrieval strength increases
- The memory becomes easier to find next time
This is why the unified `search` tool is so powerful—using memories makes them stronger.
</details>
<details>
<summary><b>"What is 'Spreading Activation'?"</b></summary>
**Spreading Activation** (Collins & Loftus, 1975) is how activating one memory primes related memories.
In Vestige's current implementation:
- When you search for "React hooks", memories about "useEffect" surface due to **semantic similarity** in hybrid search
- Semantically related memories are retrieved even without exact keyword matches
- This effect comes from the embedding vectors capturing conceptual relationships
*Note: A full network-based spreading activation module exists in the codebase (`spreading_activation.rs`) for future enhancements, but the current user experience is powered by embedding similarity.*
</details>
<details>
<summary><b>"How does Synaptic Tagging work?"</b></summary>
**Synaptic Tagging & Capture** (Frey & Morris, 1997) discovered that important events retroactively strengthen recent memories.
**Use case**: You realize mid-conversation that the architecture decision from 2 hours ago was pivotal. Call `importance` to retroactively strengthen it AND all related memories from that time window.
*Based on neuroscience research showing synaptic consolidation windows of several hours. Vestige uses 9 hours backward and 2 hours forward by default, which can be configured per call.*
</details>
<details>
<summary><b>"What does 'Dual-Strength Memory' mean?"</b></summary>
Based on **Bjork & Bjork's New Theory of Disuse (1992)**, every memory has two strengths:
| Strength | What It Means | How It Changes |
|----------|---------------|----------------|
| **Storage Strength** | How well-encoded the memory is | Only increases, never decreases |
| **Retrieval Strength** | How accessible the memory is now | Decays over time, restored by access |
**Why it matters**: A memory can be well-stored but hard to retrieve (like a name on the tip of your tongue). The Testing Effect works because retrieval practice increases *both* strengths.
In Vestige: Both strengths are tracked separately and factor into search ranking.
</details>
---
## Advanced Features
<details>
<summary><b>"What is Prediction Error Gating?"</b></summary>
The killer feature. When you call `smart_ingest`, Vestige doesn't just blindly add memories:
1.**Compares** new content against all existing memories (via semantic similarity)
-`context`: "Remind me when I'm working on auth files"
-`event`: "Remind me when we discuss deployment"
This is how Claude can remember to follow up on things across sessions.
</details>
<details>
<summary><b>"What is Context-Dependent Retrieval?"</b></summary>
Based on **Tulving's Encoding Specificity (1973)**: we remember better when retrieval context matches encoding context.
The `context` tool exploits this:
```
context(
query="error handling patterns",
project="my-api", # Project context
topics=["authentication"], # Topic context
mood="neutral", # Emotional context
time_weight=0.3, # Weight for temporal matching
topic_weight=0.4 # Weight for topic matching
)
```
**Why it matters**: If you learned something while working on auth, you'll recall it better when working on auth again. Vestige scores memories higher when contexts match.
</details>
<details>
<summary><b>"What's the difference between all the search tools?"</b></summary>
In v1.1, they're unified into one `search` tool that automatically uses hybrid search. But understanding the underlying methods helps:
| Method | How It Works | Best For |
|--------|--------------|----------|
| **Keyword (BM25)** | Term frequency matching | Exact terms, names, IDs |
- "Remember that I prefer bullet points over long paragraphs"
**Research & Learning**:
- Build a personal knowledge base over time
- Connect ideas across sessions
- Remember insights from books/articles
- Spaced repetition for learning new topics
**Relationship Context**:
- Remember details about people you discuss
- Track conversation history and preferences
- Build deeper rapport over time
</details>
<details>
<summary><b>"Can Vestige be used for team knowledge management?"</b></summary>
**Yes, with caveats.** Options:
1.**Shared database**: All team members point to same network location
- Pros: Everyone shares knowledge
- Cons: Merge conflicts, no access control
2.**Per-person + sync**: Individual databases with periodic export/import
- Pros: Personal context preserved
- Cons: Manual sync effort
3.**Project-scoped**: One Vestige per project (in `.vestige/`)
- Pros: Knowledge travels with code
- Cons: Check into git? Security implications?
**Recommendation**: For teams, start with project-scoped memories committed to git (for non-sensitive architectural knowledge). Keep personal preferences in individual global memories.
</details>
<details>
<summary><b>"How is Vestige different from just using a notes app?"</b></summary>
The model is cached in the platform user cache directory first, with `./.fastembed_cache` as a fallback. Set `FASTEMBED_CACHE_PATH` to choose a specific cache path.
| Privacy | Cloud-based | 100% offline after setup |
**They can run simultaneously.** Claude's native memory handles general conversation context, while Vestige gives you:
- Explicit control over what gets remembered
- Scientific forgetting curves
- Codebase-specific patterns and decisions
- Local-first privacy
Think of it like this: Claude's memory is automatic and general; Vestige is intentional and specialized. Many users run both.
</details>
<details>
<summary><b>"Why not just use a vector database?"</b></summary>
Vector databases (Pinecone, Weaviate, etc.) are great for RAG, but lack:
1.**Forgetting**: Everything has equal weight forever
2.**Dual-strength**: No storage vs retrieval distinction
3.**Context matching**: No temporal/topical context weighting
4.**Testing Effect**: Access doesn't strengthen
5.**Prediction Error**: No intelligent CREATE/UPDATE/MERGE
Vestige uses SQLite + HNSW (via fastembed) for vectors, but wraps them in cognitive science.
</details>
---
## Hidden Gems & Easter Eggs
<details>
<summary><b>"What features exist that most people don't know about?"</b></summary>
**1. Multi-Channel Importance**
The `importance` tool supports different importance types that affect strengthening differently:
-`user_flag`: Explicit "this is important" (strongest)
-`emotional`: Emotionally significant memories
-`novelty`: Surprising/unexpected information
-`repeated_access`: Auto-triggered by frequent retrieval
-`cross_reference`: When multiple memories link together
**2. Temporal Capture Window**
When you flag something important, it doesn't just strengthen that memory—it strengthens ALL memories from the surrounding time window (default: 9 hours back, 2 hours forward). This models how biological memory consolidation works.
**3. Memory Dreams (Experimental)**
The codebase contains a `ConsolidationScheduler` for automated memory processing. While not fully wired up, it's designed for: