Memory like a human — remembers what matters, forgets the rest, and searches accurately. Based on Layered Memory Sys (ClawHub, +324% in 24 days) 6-layer architecture + dream processing + Mem0 persistence.
Current agent memory problems:
ProblemSymptomConsequenceForgetsEvery session starts freshRepeats mistakes, no accumulationNever forgetsAll history flatHigh retrieval noise, key info drownedPoor searchKeyword only, no semantics"five-factor" doesn't find "trust verification"
SharpAgent memory solves all three with 6 layers + dream processing.
text
[User interaction]
│
┌────────┴────────┐
│ L1: Ephemeral │ ← Current session context
└────────┬────────┘
│ Session ends
┌────────┴────────┐
│ L2: Short-Term│ ← Recent sessions (rolling window)
└────────┬────────┘
│ Periodic migration
┌────────┴────────┐
│ L3: Working │ ← Active task state
└────────┬────────┘
│ Task complete
┌────────┴────────┐
│ L4: Contextual│ ← Task-level context
└────────┬────────┘
│ Dream processing
┌────────┴────────┐
│ L5: Long-Term │ ← Preferences & lessons
└────────┬────────┘
│ Archive expired
┌────────┴────────┐
│ L6: Archive │ ← Historical archive
└─────────────────┘
Storage: Current session all messages Capacity: Model context window Lifespan: Session end = gone Index: None, linear Use: In-context understanding
Storage: Last N sessions (default N=5) Medium: In-memory (Redis optional) Capacity: 5 session summaries, ≤2KB each Lifespan: 7 days → auto-migrate to L4 Index: Session ID + timestamp + tags Use: Quick cross-session reference
Storage: Active task state
Medium: JSON files ( memory/working/)
Capacity: ≤10KB per task
Lifespan: Task complete → L4; task interrupted → kept
Index: Task ID + status + last update
Use: Resume interrupted tasks, multitasking
Storage: Completed task full context
Medium: JSON files ( memory/contextual/) + optional SQLite
Capacity: Unlimited, but retrieval Top 5
Lifespan: Until dream processing (30d no reference → L5)
Index: TF-IDF full-text
Use: Look back at past tasks, reuse solutions
Storage: Persistent cross-session knowledge
Medium: SQLite ( memory/long_term.db) + Chinese tokenizer index
Capacity: Unlimited
Lifespan: Permanent unless explicitly forgotten
Index: TF-IDF + jieba Chinese tokenization
Use: User preferences, lessons, best practices, key decisions
Storage: Expired or low-referenced L4/L5 entries
Medium: SQLite ( memory/archive.db), read-only
Capacity: Theoretically infinite
Lifespan: Permanent read-only
Index: None (time + category)
Use: Legal compliance retention, audit trail
Dreams aren't just for humans. Agents need low-load memory maintenance too.
Trigger: Heartbeat (low load, every 30 min), user says "clean up", or scheduled 04:00 daily.
Four Dream Operations:
Combine scattered memory fragments into coherent knowledge.
text
Input: Multiple fragments
→ "Use 150-char abstracts" (verified multiple times)
→ "User prefers shorter versions"
→ "Briefing read rate improved 30%"
→ Consolidate to:
"Best practice: 150-char abstract in briefings (3x verified, +30% read rate)"
Trigger: Same pattern appears ≥3 times
Move low-reference items out of working cache.
text
→ L4 entries with 0 references in 30 days
→ Move to L6 archive
→ Remove from L4 tag index
Trigger: 30-day reference count = 0
Actively delete low-value, duplicate, or outdated content.
text
→ "User once preferred Python 3.9" (3 months ago, now 3.13)
→ Outdated, delete
→ Keep space for valuable info
Trigger:
Newer version available
Explicitly contradicted
90 days with <2 references
User says "forget this"
Combine multiple related L5 entries into higher-level patterns.
text
→ "Prefers 150-char abstract" (confidence=8)
→ "Prefers bullet points" (confidence=7)
→ "Dislikes tables" (confidence=6)
→ Merge:
"User prefers briefings in bullet points + 150-char abstract, avoid tables"
Trigger: High confidence (≥7) + same category
python
def search(query, layers=["L4", "L5"]):
tokens = jieba.cut(query) # Chinese tokenization
vec = tfidf_vectorizer.transform(tokens)
scores = cosine_similarity(vec, layer_index)
return top_k(scores, k=5)
python
jieba.load_userdict("memory/custom_dict.txt")
# "五元组审查" → ["五元组", "审查"] not mis-split
# "惠迈校准框架" → ["惠迈", "校准", "框架"]
ScenarioSearch layersKReal-time replyL5 → L4 → L23Deep analysisL5 → L4 → L65User asks "earlier..."L4 → L53User asks "I remember..."L5 → L43
text
memory/
├── working/ # L3: Task working area (JSON)
├── contextual/ # L4: Contextual memory (JSON)
├── long_term.db # L5: SQLite + FTS5 index
├── archive.db # L6: Archive storage
├── custom_dict.txt # Domain Chinese word dictionary
└── dream_log.json # Dream processing log
SituationActionChinese + English mixed inputjieba auto-detects Chinese, English space-tokenizedNo search resultsFallback to simple keyword matchingL5 exceeds 1000 entriesTrigger dream (archive + forget + merge)Dream active, new interactionDream pauses immediately, interaction winsUser says "forget xxx"Soft delete in L5, L6 retains for auditBulk history importWrite directly to L6, skip layer traversal
CheckWhatFail actionLayers separatedEphemeral/Short/Working/Contextual/Long/Archive distinctRestructureSearch recall"five-factor" retrieves "trust verification"Check tokenizationDream non-blockingNormals interaction during dreamsAsync flagForget traceableForgotten entries auditableSoft deleteChinese tokenizationDomain words preservedUpdate custom_dict.txt
SharpAgent · MIT-0 · 2026-05-11