Skip to content
Tien Dang
Hành trình JARVIS · Sự kiện · Publish · 13 phút đọc · 2.732 từ

16 giờ rebuild bộ nhớ AI từ gốc. 7 sprint. Một câu hỏi của tôi.

Tôi nhận ra bộ nhớ JARVIS đang hổn độn 7 lớp. Quyết định một session làm cho đáng. 16 giờ sau: 4-tier architecture, sleep-time agent, 4830 file linked, $0 cost.

TD

Đặng Hồng Tiên

Founder OKG · AIC · JARVIS

AI-assisted draft
Mục lục · 18 mục
  1. TL;DR
  2. Mở đầu — vì sao tối nay
  3. Research trước khi code
  4. Quyết định kiến trúc
  5. 7 sprint chiến đấu
  6. Memory v2 — kiến trúc final
  7. Một câu hỏi của tôi giữa session
  8. 4 bug đã đi qua trong 16 giờ
  9. Bug 1: Tôi tưởng đốt tiền OpenAI
  10. Bug 2: Regex VN diacritics 1000× chậm
  11. Bug 3: JARVIS quên Claude Code khác Claude Desktop
  12. Bug 4: chunks.db SQLite WAL accidentally committed
  13. Những thứ JARVIS ship trong 16 giờ
  14. Cost actual
  15. Phản tỉnh cuối session
  16. 1-2 tuần tới — JARVIS test, tôi quay lại
  17. Closing — 3h sáng rồi
  18. 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.md 685 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.md hô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:

  1. Progressive Disclosure (Anthropic Skills): metadata upfront, body on-demand
  2. Restorable Compression (Manus): drop content, giữ identifier
  3. 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 v2
  • memory_architecture_2026_research.md (3500 từ research file với 30+ verified URL)
  • sprint_memory_v2.md execution 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.yaml xem 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:

Layered memory + LLM-as-judge:

Knowledge graph evolution:

Wiki-as-memory + Tooling:

Bio-style flat + Critical view:

Benchmarks + papers tổng hợp:

Claude Code + Anthropic engineering:

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.

TD

Đặng Hồng Tiên

Founder của AIC (kiến trúc + nội thất + xây dựng — 10+ năm vận hành), OKG (công ty công nghệ mới mở), và 1 công ty thương mại đang R&D (sẽ thương mại vật liệu ngành cho AIC + partners). Building JARVIS — personal agent cho founder VN đa entity. Mix Abhidhamma + AI architecture + 10 năm vận hành B2B.

AI disclosure

Bài này tôi (Tien Dang) viết, có hỗ trợ AI structure draft từ session work với Claude. Experience, opinion, và rewrite cuối cùng là của tôi. [voice match: 71/100]

Xem bản markdown thô →