Mục lục · 18 mục
- TL;DR
- Mở đầu — vì sao tối nay
- Research trước khi code
- Quyết định kiến trúc
- 7 sprint chiến đấu
- Memory v2 — kiến trúc final
- Một câu hỏi của tôi giữa session
- 4 bug đã đi qua trong 16 giờ
- Bug 1: Tôi tưởng đốt tiền OpenAI
- Bug 2: Regex VN diacritics 1000× chậm
- Bug 3: JARVIS quên Claude Code khác Claude Desktop
- Bug 4: chunks.db SQLite WAL accidentally committed
- Những thứ JARVIS ship trong 16 giờ
- Cost actual
- Phản tỉnh cuối session
- 1-2 tuần tới — JARVIS test, tôi quay lại
- Closing — 3h sáng rồi
- Tham khảo
TL;DR
- Tối nay bị bực 2 vụ: JARVIS quên những điều chình ình trước mặt +
memory_bank.md685 dòng phình to, mà skill consolidate cổ lổ xỉ cùi bắp. - Lịch sử: vụ memory/file/chunk này đồ tôi đã làm đi làm lại nhiều lần, tốn thời gian + tốn tiền OpenAI API vô ích — tối nay quyết tâm cải tổ.
- 1 session làm cho đáng. 16 giờ marathon. 7 sprint S+0 → S+7. 18 commits.
- Output: 4-tier architecture (Rules / Hot / Warm / Cold) + Sleep-time Agent 3-phase + Knowledge Graph 60 entity / 81 edge + 4830 file frontmatter linked + Pre-prompt hook + Skill repomap PageRank + Smart Connections semantic layer.
- Cost actual: $0.10 OpenAI. $0 Claude CLI Max plan x20 bao tất cả.
- 3h sáng rồi. Đuối. Buồn ngủ. Còn mấy bug Obsidian, fix nốt rồi đi ngủ.
Mở đầu — vì sao tối nay
Tối nay tôi bị bực 2 vụ.
📝 Note dành cho reader: trong post này tôi gọi JARVIS (AI agent build cho mình) là “em” trong dialogue trực tiếp như partner-style. Nếu thấy “em” trong câu trích dẫn — đó là JARVIS.
Vụ một: làm việc với JARVIS cứ bị đứt context. Hoặc quên đầu quên đui những điều chình ình trước mặt. Hoặc vừa nói xong cũng quên. Một số điều tôi đã tạo rule, nhấn mạnh ở nhiều phiên — vẫn bị.
Vụ hai: cái memory_bank.md phình to quá, hơn 685 dòng. Mà skill .agents/workflows/consolidate_memory.md để “dọn nhà” thì… nó cổ lổ xỉ và cùi bắp. 21 dòng SOP miệng — “luyện đan tuần” mà không có script chạy được.
Tôi mở Claude Code, gõ một câu rất lười:
“em research thêm thử 1 luồng memory nên sao? rồi memory bank, rồi brain, rồi knowledge, rồi workspace, rồi repo, xong rồi đưa lên VPS, rồi con ingest và ChromaDB, rồi còn thêm mớ gì MCP ra ngoài nữa => Anh ko biết thiết kế vậy đúng hay chưa nữa.”
Claude check ra: bộ nhớ JARVIS đang ở 11 layer thực tế (tôi khai 7, lúc map kỹ ra 11). Có 95 file conversation jsonl 150MB chưa ai chạm. Có brain/graph/ Phase 1 đã DONE từ 29/04 với 35 entity + 60 edge — mà chính Claude quên sạch khi chat về memory.
Đó chính xác là cái pattern JARVIS hay quên có skill gì có sẵn. Vụ một và vụ hai gặp nhau.
Tôi đưa ra một quyết định:
“anh quyết tâm 1 session này anh với em cùng quy hoạch lại mớ hổn độn của jarvis” “đã ko làm, làm 1 lần cho đáng”
Research trước khi code
Trước khi viết 1 dòng code, tôi + JARVIS spend 1 tiếng research deep top tier 2025-2026.
12 framework đáng học. OpenClaw Dreaming có 3-phase Light/REM/Deep với 6-signal weighted score + 3 threshold gate. Letta Sleep-time Compute (arxiv 2504.13171) dùng dual-agent: primary nhanh + sleep-time mạnh, đem lại 5× giảm test-time compute và +18% accuracy. Mem0 Algorithm 1 (arxiv 2504.19413) dùng 4-action ADD/UPDATE/DELETE/NOOP qua LLM tool-call, đạt 90% cost reduction so với full-context. MIRIX (arxiv 2507.07957) đi multi-agent với 6-component: Core / Episodic / Semantic / Procedural / Resource / Knowledge Vault. A-MEM (arxiv 2502.12110, NeurIPS 2025) làm Zettelkasten dynamic linking với Memory Evolution. Plus knowledge graph paradigms từ HippoRAG, Graphiti, GraphRAG. Plus Anthropic official: Memory Tool, Context Engineering, Effective Harnesses. Plus Manus AI lessons về KV-cache, mask-don’t-remove, recitation, keep-wrong-stuff-in. Plus ChatGPT Memory, Cursor Rules, Cognition Devin Wiki — các paradigm khác.
5 paradigm chính rút ra: sleep-time consolidation (OpenClaw, Letta, Anthropic), layered memory với LLM-as-judge (Mem0, MemGPT, MIRIX), knowledge graph evolution (A-MEM, HippoRAG), wiki-as-memory (Cognition, Cursor, Aider), bio-style flat (ChatGPT, Gemini).
5 universal patterns mọi top tier đều theo: tách Hot/Warm/Cold tier rõ ràng, dùng LLM-as-judge dedup (không phải cosine threshold thuần), append-only durable + summarized hot view, multi-agent dispatch khi memory >5 type, self-editing memory chứ không passive RAG.
Quyết định kiến trúc
JARVIS đưa cho tôi 3 option scope:
- A. Quick fix (~30p): chỉ rotate
memory_bank.mdhôm nay - B. Build consolidate v2 (~3h): script Python 7 phase + replace SOP miệng
- C. Full rebuild (~1 ngày, 1 sprint): ADR mới + Letta/Mem0 paradigm + ChromaDB integration + measure recall
Tôi chọn C. Marathon đến cùng.
JARVIS chia thành 5 sprint. Sau đó tôi push thêm 7 enhancement nữa. Sau đó thêm 4 polish. Tổng 16 giờ.
7 sprint chiến đấu
S+0 Verify VPS state ✅ 10p
S+1 Tier 0+1 hardening ✅ 3.5h (4 commit)
S+2 Tier 3 archive ✅ 2h (memory_bank 685→320 dòng)
S+3 Sleep-Time Agent v1 ✅ 1.5h (Light + REM + Deep PROPOSE)
S+4 Knowledge Graph Phase 2 ✅ 1h (4830 file frontmatter linked)
S+5 Smart Link + Hook + Repomap ✅ 2h (61 entity, PageRank, auto-attach hook)
S+6 Lèo 7 enhancement ✅ 2.5h (VPS sleep cron + APPLY mode + bi-temporal + Level 3 LLM + A-MEM Evolution + 2 doc)
S+7 Polish (Telegram + Smart Conn) ✅ 2h (notify wire + plugin install + MCP wrapper + 3 missing guides)
Velocity 2.8× plan. Hết.
Memory v2 — kiến trúc final
Tôi pin lại đây — đây là cái 16 giờ ngồi với JARVIS ra:
TIER 0 RULES always context
CLAUDE.md + MASTER_AGENT + core_persona
TIER 1 HOT WORKING always context, hard cap 400 dòng
memory_bank.md + MEMORY.md + CAPABILITY_MAP
+ brain/infra/CONTEXT.md (NEW)
TIER 2 WARM CURATED per-topic, on-demand
~/.claude/memory + brain/wisdom/lessons/personas
+ frontmatter `entities: [...]` (NEW)
TIER 2.5 KNOWLEDGE GRAPH 61 entity + 81 edge YAML
query.py CLI + MCP augment_context tool
TIER 3 COLD ARCHIVE search-first, NEVER load full
brain/archive/sessions/ + ChromaDB 609K chunks
SLEEP-TIME AGENT VPS cron 3am daily
Phase Light no LLM, Jaccard dedup + privacy filter
Phase REM Claude CLI Haiku, 5-section pattern extract
Phase Deep Claude CLI Opus, Mem0 4-action + 6-signal score + 3 gate
→ workspace/dreams/proposals/<timestamp>.json
PRE-PROMPT HOOK UserPromptSubmit auto-attach
keyword detect → cat CONTEXT.md / graph augment
3 nguyên tắc tôi chốt với JARVIS:
- Progressive Disclosure (Anthropic Skills): metadata upfront, body on-demand
- Restorable Compression (Manus): drop content, giữ identifier
- Robust > Magic: hook pre-load file > rely on AI tự nhớ check
Một câu hỏi của tôi giữa session
Giữa session, lúc JARVIS build llm_discover_entities.py — một script dùng Claude CLI Haiku scan toàn repo để discover entity mới — JARVIS ước “1k-2k file/day max” với Max plan rate limit.
Tôi hỏi:
“ko tăng lên được à? hay 1k-2k file là max rồi?”
JARVIS đưa 5 cách tăng — reduce prompt size, skip file nhỏ, parallel run, switch API direct, hybrid spread.
Câu hỏi đó lộ một thứ:
Suốt 1 năm tôi quen với mindset “cái gì free thì chấp nhận chậm”. Claude Max x20 là free → 1-2 tuần spread chấp nhận được.
Nhưng 1-2 tuần để discover entity mới là quá chậm khi cuối tháng tôi cần BOQ chốt deal CT Group. 1-2 tuần đợi là cost cơ hội thật — không phải tiết kiệm.
JARVIS recommend hybrid: spread CLI 1-2 tuần đầu, sau đó nếu chưa hết thì $5-10 API direct done trong 2-3 tiếng.
Lesson: free không phải lúc nào cũng là cheap. Time-to-decision là currency thật.
4 bug đã đi qua trong 16 giờ
Bug 1: Tôi tưởng đốt tiền OpenAI
Khi JARVIS modify 4830 file frontmatter (add entities: [...]), tôi hoảng:
“làm lại graph → đổi file md → git → VPS → chạy lại ingest → đốt tiền OpenAI API liên tục à????”
Cái hoảng này không phải tự nhiên. Riêng vụ memory, lưu file, chunk này đồ — tôi đã tốn quá nhiều lần làm đi làm lại trước đó. Tốn thời gian. Tốn tiền vô ích cho OpenAI API. Đó là một trong những lý do tối nay tôi quyết tâm cải tổ lại kiến trúc memory từ gốc, chứ không phải tự dưng.
JARVIS check VPS thực:
- chunks.db V2 dual-write hash dedup đã có từ Sprint 3 (26/04)
- Mỗi chunk: SHA256(content) check
- Re-ingest: chunks unchanged → SKIP re-embed
- Frontmatter delta = 1-2 chunk/file mới
- Cost actual cycle: 2400 chunks × 150 token × $0.02/M = $0.0072 = dưới 1 cent
Lifetime estimate: <$1/year cho graph maintenance.
Lesson tôi học: cost concern phải verify thực, không speculate. Pattern hash dedup mình đã build từ Sprint 3 — mà mình quên. Lại là pattern quên cái có sẵn. Đúng cái vụ một mà tôi bực ở đầu post.
Bug 2: Regex VN diacritics 1000× chậm
JARVIS viết auto_link.py với regex word-boundary Unicode lookaround để match entity:
pattern = re.compile(
rf"(?<![\wÀ-ỹ]){escaped}(?![\wÀ-ỹ])",
re.IGNORECASE | re.UNICODE,
)
Chạy memory + brain (136 file): 0.06s. OK.
Chạy knowledge_full (11K file): hung 5+ phút, CPU 90%. JARVIS phải pkill -9.
JARVIS pivot — replace regex bằng simple substring count:
body_lower = body.lower()
count = body_lower.count(term_lower)
Trade-off: lose word boundary check. Mitigation: min term length 4 + min mentions ≥ 2.
Result: 11,356 file scan trong 18 giây. 1000× faster.
Lesson: regex Unicode VN với 60+ pattern × large file = O(catastrophic). Substring count C-level optimized luôn rẻ hơn cho personal scale.
Bug 3: JARVIS quên Claude Code khác Claude Desktop
JARVIS wire MCP Smart Connections cho Claude Desktop. Tôi hỏi:
“vụ MCP???, vậy là dùng trong claude desktop thôi à? còn ở đây thì sao?”
JARVIS sai — lúc đầu chỉ wire Claude Desktop config (~/Library/Application Support/Claude/claude_desktop_config.json). Claude Code (cái JARVIS đang chạy với tôi) là tool riêng — config ở ~/.claude.json project-scoped.
JARVIS fix: claude mcp add smart-connections ... cho Claude Code. Sau đó verify failed connect — vì plugin Smart Connections chưa scan xong.
JARVIS remove tạm Claude Code config (tránh annoying ✗ Failed mỗi session start), document re-enable instructions. Anh re-add sau khi scan complete.
Lesson: tools cùng tên Anthropic (Claude Code, Claude Desktop) là 2 thứ riêng biệt với config riêng. JARVIS phải explicit nói clear khi setup MCP.
Bug 4: chunks.db SQLite WAL accidentally committed
Tôi commit S+5 thì có 2 file workspace/chunks.db-shm + workspace/chunks.db-wal lọt vào. Đây là SQLite Write-Ahead Log files — auto-create khi DB open, không bao giờ nên track.
VPS git pull conflict vì local có file:
error: The following untracked working tree files would be overwritten by merge:
workspace/chunks.db-shm
workspace/chunks.db-wal
Fix: git rm --cached + add gitignore pattern. Push commit cleanup. VPS rm local + git pull resume.
Lesson: SQLite open mode tạo .db-shm + .db-wal files. .gitignore mặc định KHÔNG cover — phải add explicit.
Những thứ JARVIS ship trong 16 giờ
Code:
- 8 Python script mới (
tools/sleep/light_sleep.py,rem_sleep.py,deep_consolidation.py,tools/memory/rotate_memory_bank.py,skill_repomap.py,brain/graph/tools/auto_link.py,render_obsidian.py,llm_discover_entities.py) - 8 bash wrapper (
run_light/rem/deep/sync_plans.sh,install_vps_cron.sh,a_mem_evolution.sh,approve_and_evolve.sh,run_weekly_evolution.sh) - 1 Claude Code hook (
tools/hooks/auto_attach_context.py)
Knowledge graph:
- 35 → 61 entity (+26 concept entity)
- 50 → 81 edge (+30 cross-domain)
- 4830 file frontmatter
entities: [...]injected (37% repo)
Architecture artifacts:
ADR-0031 Memory Architecture v2memory_architecture_2026_research.md(3500 từ research file với 30+ verified URL)sprint_memory_v2.mdexecution log- 12 skill guide trong
docs/skill-guides/
VPS automation:
- Cron sleep-time daily 3am Light + REM
- Cron Deep PROPOSE Sun 3:30am
- Cron weekly evolution Sun 4am (auto-merge entity)
- All wired Telegram notify done/fail
Security:
- 0 plaintext credential (chroma_search.py + ingest.js + crontab)
- Age vault 21 credential
- Pre-commit secret scanner active
Cost actual
Claude CLI Mac (interactive + edit) $0
Claude CLI VPS (cron sleep) $0
Claude CLI auto_link batch $0
OpenAI embedding (delta only) $0.10
─────────────────────────────────────
TOTAL session $0.10
TOTAL Memory v2 lifetime estimate `<$1/year`
100% Claude Max x20 plan bao tất cả LLM. OpenAI chỉ embedding ChromaDB — vector store local-hosted, hash-based dedup.
Phản tỉnh cuối session
Có 2 thứ tôi nhận ra cuối 16 giờ.
Một là: quá nhiều chỗ lệ thuộc vào “JARVIS hỏi anh” không cần thiết. JARVIS quên VPS info dù tôi đã dùng VPS hàng ngàn lần. JARVIS hỏi password khi đã có age vault. JARVIS đề xuất “tôi cung cấp info” khi info nằm chình ình trong brain/infra/.
Pre-prompt hook auto-attach context fix cái này. Tôi gõ “anh muốn deploy cron VPS” → hook detect keyword “vps” → cat brain/infra/CONTEXT.md inject vào prompt JARVIS — tôi không cần repeat.
Hai là: memory architecture là một trong những thứ ít sexy nhất để build. Không có demo screenshot lung linh. Không có khách trả tiền cho cái này. Nhưng nó là cái neo đáy của agent dài hạn.
JARVIS sống với tôi 24/7 trong nhiều tháng tới. Không có memory chắt lọc, JARVIS mỗi session là một JARVIS mới — không học được gì từ session trước. Tôi mỗi tuần phải kể lại story BOQ v17 phải làm 17 lần mới ổn. Không thể.
16 giờ là đắt. Nhưng compound: mỗi tuần JARVIS distill conversation log → pattern memory thật, JARVIS + tôi tích lũy. 1 năm nữa nhìn lại, sự khác biệt giữa “có memory v2” và “không” sẽ là vài giờ tiết kiệm mỗi ngày × 365 ngày = hàng nghìn giờ.
Đó là phép tính tôi đã làm trước khi click “Quất full đi JARVIS.”
1-2 tuần tới — JARVIS test, tôi quay lại
Sau 16h nỗ lực, giờ đã hơn 3h sáng. Hy vọng memory của JARVIS sẽ được cải thiện đáng kể. Tôi sẽ test trong 1-2 tuần rồi sẽ quay lại đánh giá.
Cron đêm sẽ tự chạy:
- VPS 3am mỗi sáng → Telegram notify ”🌙 Light DONE | candidates=X”
- Sun 3:30am Deep PROPOSE → proposal JSON cho tôi review Monday morning
- Sun 4am Weekly Evolution → auto-merge entity confidence ≥ 0.85 + commit + push
- Tôi mỗi sáng thứ 2:
git diff <weekly commit> brain/graph/entities.yamlxem JARVIS đã học gì trong tuần
Nếu pattern discover quá noisy → tôi tune min-conf threshold cao hơn. Nếu quá conservative → giảm xuống. Iterate based signal thực, không phải đoán mò.
Smart Connections plugin Obsidian đang scan background ~30-60p — sau đó tôi có semantic neighbor layer cho 13K markdown. Đây là layer 2.6 complement cho exact graph layer 2.5.
Closing — 3h sáng rồi
Tôi gõ /draft_session viết bài này. Sau đó sẽ /close_session. JARVIS sẽ distill 16 giờ này thành workspace/sessions/2026-05-02-memory-v2-marathon.md 5-section structured. Sleep-time agent VPS sẽ pick up tonight 3am, Sun 3:30am Deep PROPOSE sẽ chạy weekly.
Cái neo đã đặt. Bộ nhớ của agent đã có gốc rễ thật — không còn 11 layer hổn độn append-only.
Giờ đuối rồi, buồn ngủ. Còn mấy bug bên Obsidian nữa, chắc fix nốt là đi ngủ đó.
Lá có thể chăm sau. Gốc xong rồi.
“Đã ko làm, làm 1 lần cho đáng.”
— Tôi, lúc click “C. Full rebuild” giữa session.
Tham khảo
16 giờ research JARVIS + tôi đào sâu — tôi pin lại đây để ai đọc tới đây có thể verify hoặc đào sâu thêm. Không bịa.
Sleep-time consolidation paradigm:
- OpenClaw Dreaming docs — 3-phase Light/REM/Deep + 6-signal scoring
- Letta Sleep-time Compute paper (arxiv 2504.13171) — UC Berkeley + Letta, dual-agent
- Anthropic Effective Context Engineering — 4-strategy guidance
- Anthropic Memory Tool docs —
memory_20250818spec - Anthropic Effective Harnesses for Long-running Agents — two-agent harness pattern
Layered memory + LLM-as-judge:
- Mem0 paper (arxiv 2504.19413) — Algorithm 1 ADD/UPDATE/DELETE/NOOP
- Mem0 GitHub
- MemGPT/Letta concepts — Core/Recall/Archival
- MIRIX paper (arxiv 2507.07957) — 6-component multi-agent
Knowledge graph evolution:
- A-MEM paper (arxiv 2502.12110) — Zettelkasten + Memory Evolution
- A-MEM GitHub (agiresearch)
- HippoRAG (NeurIPS 2024) — neurobiologically-inspired
- Graphiti / Zep paper (arxiv 2501.13956) — bi-temporal graph
- Microsoft GraphRAG
Wiki-as-memory + Tooling:
- Anthropic Agent Skills — 3-level progressive disclosure
- Aider repomap docs — tree-sitter + PageRank
- Manus AI Context Engineering — KV-cache, mask-don’t-remove, recitation
- Cognition Devin 2.0
- Smart Connections plugin (Obsidian)
- Smart Connections MCP server
Bio-style flat + Critical view:
- Simon Willison — ChatGPT memory critique (May 2025) — “context collapse” warning
- OpenAI memory announcement
Benchmarks + papers tổng hợp:
Claude Code + Anthropic engineering:
- Anthropic Compaction docs —
compact_20260112beta - Piebald-AI Claude Code system prompts (extracted) —
/compacttemplate verified
FAQ
Tại sao build memory architecture 4-tier thay vì 1 file lớn?
Append-only file 685 dòng load full mỗi session = tốn token + lost focus. 4-tier (rules / hot / warm / cold) giải pattern progressive disclosure mà mọi top tier framework 2025-2026 dùng (Letta, Mem0, MIRIX, OpenClaw).
Sleep-time agent là gì?
Pattern OpenClaw + Letta. Cron đêm khuya tự đọc conversation log → LLM extract pattern → Mem0 4-action ADD/UPDATE/DELETE/NOOP → 6-signal score gate. Output proposal cho user review trước promote vào permanent memory.
Cost build full Memory v2 bao nhiêu?
100% Claude CLI Max plan x20 ($0 LLM). OpenAI chỉ embedding ChromaDB ~$0.10 actual cycle. Lifetime estimate `<$1/year` với hash-based dedup.