Blog

Khảo sát: biến notion-test thành "second brain"

  • Ngày: 2026-09-05
  • Trạng thái: báo cáo khả thi, CHƯA phải spec. Chờ chủ dự án chọn hướng.
  • Cách làm: ba nhánh khảo sát song song (khái niệm + repo hot, cách hiện thực

kỹ thuật, hiện trạng repo), số sao tra trực tiếp GitHub API ngày 05/09/2026.

1. Second brain là gì

"Second brain" là phương pháp làm việc của người dùng, không phải một loại
phần mềm. Phần mềm chỉ cần đủ tính năng để người dùng áp được phương pháp.

Phương phápÝ cốt lõiTính năng phần mềm tương ứng
CODE (Tiago Forte)Capture → Organize → Distill → Express: ghi mọi thứ, xếp theo tính khả dụng, chắt lọc dần, dùng lại để tạo ra sản phẩm mớiCapture nhanh (clipper, share), tô đậm/tóm tắt tiến dần, template
PARAXếp ghi chú vào 4 xô: Projects, Areas, Resources, ArchivesThư mục/tag cấp trang, view lọc
ZettelkastenMỗi ghi chú một ý, bắt buộc liên kết tới ghi chú khác, MOC (mục lục chủ đề) tự nổi lên từ liên kếtWikilink, backlink, graph view

Nguồn gốc của mọi tính năng "backlink + graph" hiện nay là Zettelkasten. Lớp AI
(tìm ngữ nghĩa, chat với ghi chú, gợi ý liên kết) chỉ là lớp phủ thêm sau.

2. Các repo đang được quan tâm 2025–2026

RepoSaoĐiểm học được
AppFlowy76kNotion alternative local-first, AI là plugin tuỳ chọn
AnythingLLM66kChat với tài liệu, cắm nhiều LLM + vector DB
mem065kLớp bộ nhớ cho agent, không phải app ghi chú
Logseq45kOutliner, block reference, daily notes mặc định, graph
Quivr39kTừng là "second brain", nay đổi sang RAG doanh nghiệp
Khoj37kTrợ lý cá nhân: chat trên ghi chú + web, agent chạy theo lịch
Reor8,6kGhi chú AI 100% local: tự liên kết, hỏi đáp, semantic search (LanceDB)
obsidian-copilot7,7kPlugin chat với vault, có chế độ lexical không cần index
obsidian-smart-connections5,4k"Related notes" bằng embedding local, zero setup
obsidian-second-brain (eugeniughelbur)4,3k45 lệnh cho Claude Code thao tác vault, agent bảo trì theo lịch
obsidian-claude-code-mcp (iansinnott)348MCP server cho Claude Code đọc/ghi vault đang mở

Cảnh báo: AgriciDaniel/claude-obsidian (14,6k sao) và tinyhumansai/openhuman
(39k sao) có dấu hiệu bơm sao (fork/sao đúng 10,0%, homepage bán khoá học, 64
người theo dõi). Chỉ tham khảo ý tưởng "LLM Wiki" (Karpathy, 04/2026), không
dùng số sao làm bằng chứng.

Tính năng phổ biến, xếp theo tần suất xuất hiện

  1. Markdown thuần, local-first
  2. Wikilink + backlink + graph view
  3. Semantic search bằng embedding
  4. Chat với toàn bộ ghi chú (RAG)
  5. Daily notes / block reference
  6. Tags
  7. AI gợi ý liên kết / related notes
  8. Agent chạy theo lịch tự bảo trì kho
  9. Template
  10. Query trên metadata (Dataview)
  11. Capture từ web
  12. Mã hoá / P2P

Xu hướng 2026 rõ nhất: agentic second brain. Claude Code hoặc MCP đọc/ghi
kho ghi chú trực tiếp, agent chạy nền để liên kết, tóm tắt, dọn dẹp.

3. notion-test đang đứng ở đâu

Tính năng second brainHiện trạngĐiểm móc
WikilinkĐÃ CÓ một chiều: inline @trang lưu pageId, tên đọc động, xoá trang thì link mờsrc/blocknote/schema.ts:255, Editor.tsx:583 (trigger @)
BacklinkChưa có. Không có index "trang nào trỏ tới trang này"Wire format pageLink + pageId đã có test khoá (src/pageLinkWireFormat.test.ts)
Graph viewChưa cóĂn theo backlink index
TagsChưa có. Chỉ có categoryId (một trang một nhóm)Pagesrc/models/types.ts, mẫu upsertPageMeta từng trường
Full-text searchCó, in-memory, mở Y.Doc mọi trang mỗi lần mở Ctrl+KSearchModal.tsx, searchPages.ts
Semantic search / embeddingChưa cóServer đã có Postgres, Node, proxy LLM
AI trong editorĐÃ CÓ: /api/ai/stream SSE, ba chế độ sinh/sửa/nén, Anthropic + OpenAIserver/src/aiApi.ts, src/ai/
Agent ngoài đọc/ghiĐÃ CÓ REST API agent: tạo, đọc/ghi markdown, tìm tiêu đề, sửa metaserver/src/agentApi.ts, skill notion-agent-api
Việc chạy nềnĐÃ CÓ hàng đợi agent_tasks cho Flywheel pollserver/src/db.ts:245
Daily notes / captureChưa có UI, nhưng API agent tạo trang đã đủ làm
Local-firstĐÃ CÓ: Y.Doc + IndexedDB, sync tuỳ chọn

Kết luận: notion-test đã có nền agentic tốt hơn phần lớn repo ở mục 2, nhưng
thiếu đúng lớp phương pháp (backlink, tags, graph) mà Zettelkasten/PARA
cần. Đây là phần rẻ nhất và đáng làm trước.

Lỗ hổng phát hiện khi soi code

pageLink không nằm trong LOAI_MAT_MAT (src/agent/matMatMarkdown.ts:25) và
markdownExport.ts không có nhánh xử lý nó. Nhiều khả năng @trang biến mất
** im lặng** khi agent đọc trang qua API, và vòng GET → PUT sẽ xoá link. Chưa đo
bằng test, cần xác minh trước khi làm bất kỳ đợt nào, vì backlink mà agent
không thấy thì "agentic second brain" hỏng từ gốc.

4. Ba hướng triển khai

  • Backlink index tính ở server khi Hocuspocus persist doc: quét

Y.XmlFragment tìm node pageLink, ghi bảng page_links(from_id, to_id).
Client hỏi GET /api/pages/:id/backlinks. Lý do server: nhiều máy thấy cùng
kết quả, trang /p/ công khai cũng dùng được mà không cần workspace doc.

  • Panel "Được nhắc tới ở" cuối trang, kèm đoạn văn chứa link.
  • Tags: trường tags: string[] trên Page, ghi từng trường theo mẫu

upsertPageMeta, tab lọc theo tag tái dùng mẫu category.

  • Graph view: react-force-graph (đủ cho vài trăm đến vài nghìn trang),

màu theo token vàng hiện có.

  • Sửa lỗ markdown: xuất @trang thành [[Tên trang|pageId]] hoặc cú pháp

tương đương giữ được pageId, nhập ngược lại được.

  • Độ phức tạp: Vừa. Không chạm public bundle trừ panel backlink cho /p/.
  • Embedding ở server bằng API (OpenAI text-embedding-3-small hoặc Voyage

đa ngữ), lưu Postgres pgvector. Không chạy model trong trình duyệt: model
tốt tiếng Việt (bge-m3, multilingual-e5) nặng hàng trăm MB, model nhỏ chạy
được trong browser chủ yếu tiếng Anh, chưa đo tiếng Việt.

  • Chunk theo block, tái dùng converter markdown đã kiểm chứng, embed theo nhịp

persist của Hocuspocus (debounce), không theo keystroke.

  • Ba UI trên cùng một index: tìm ngữ nghĩa trong Ctrl+K, panel "Trang liên

quan" cạnh editor, "Hỏi kho ghi chú" tái dùng /api/ai/stream với bước
retrieve trước prompt.

  • Độ phức tạp: Vừa. Rủi ro: chi phí embedding, VPS cần cài extension

pgvector, prompt phải tách chunk khỏi nhãn hệ thống (bài học spec 3).

Hướng C: Agentic second brain (MCP, capture, agent bảo trì)

  • MCP server Node mỏng bọc API agent hiện có: list_pages, search_pages,

read_page, write_page, append_page, get_backlinks. Claude Code trên
PC dùng trực tiếp thay curl.

  • Capture nhanh: bookmarklet hoặc PWA share_target gọi thẳng API agent tạo

trang trong nhóm "Inbox". Daily note: nút tạo trang theo ngày.

  • Agent bảo trì theo lịch qua agent_tasks + Flywheel: gợi ý liên kết cho

trang mới, tóm tắt tuần, gắn tag. Kết quả ghi dạng đề xuất để người
duyệt, không tự sửa nội dung.

  • Độ phức tạp: Thấp cho MCP và capture, Vừa cho agent bảo trì.

Khuyến nghị thứ tự

A → B → C. A là nền mà B và C đều cần (backlink để graph, để MCP trả
get_backlinks, để agent gợi ý liên kết). B mang lại cảm giác "second brain
thông minh" rõ nhất nhưng cần A để hiển thị đúng. C rẻ và hợp cách anh làm việc
hiện nay (Claude Code + Flywheel), có thể chen MCP mỏng vào ngay sau A.

Mỗi hướng là một spec riêng theo quy ước docs/superpowers/specs/.

5. Ràng buộc và rủi ro riêng của repo

  • Public bundle: mọi thứ trên /p/ không được import collab/sync/persistence,

trần 2000 byte gzip cho entry. Panel backlink công khai phải nhận dữ liệu qua
API, không qua workspace doc.

  • CRDT: index server tính từ update Y.Doc, không ghi thẳng bảng

documents. Mọi index là dẫn xuất, xây lại được từ doc.

  • Markdown mất-mát: bài học PR #74. Mọi cú pháp mới ([[...]], tag) phải

round-trip qua matMatMarkdown hoặc nằm trong danh sách mất-mát.

  • Protected paths: thêm dependency (react-force-graph, pgvector) đụng

package.json, PR cần label harness-approved.

  • Server không có typecheck trong verify, deploy tay qua install-vps.sh.
  • Hai cơ chế xác thực: MCP và capture dùng API key, không dùng cookie SSO.

6. Câu hỏi cần chủ dự án trả lời

  1. Anh dùng notion-test theo kiểu nào nhiều hơn: tự gõ và liên kết tay

(Zettelkasten, ưu tiên A) hay đổ ý tưởng vào rồi để AI/agent sắp xếp (ưu tiên
B + C)?

  1. Có chấp nhận gửi nội dung ghi chú lên API embedding bên ngoài không? Nếu

không, hướng B phải chạy model trên VPS, cần đo RAM.

  1. Backlink và graph có cần hiện trên trang công khai /p/ không, hay chỉ

trong app riêng?

  1. Quy mô: hiện anh có khoảng bao nhiêu trang, dự kiến tới đâu trong một năm?

Ảnh hưởng chọn thư viện graph và cách index search.

  1. Có muốn làm ngay việc xác minh lỗ @trang mất qua markdown như một PR sửa

lỗi độc lập trước khi bàn spec không?