Có một vấn đề mà cả 26 bài trước trong series này không giải quyết triệt để: agent quên. Mỗi session mới, nó lại bắt đầu từ đầu. Bạn giải thích lại context. Nó mắc lại lỗi tương tự. Bạn lại fix. Vòng lặp không bao giờ kết thúc.
Không phải vì chúng ta chưa xây memory. Bài 4 đã đi qua conversation history, scratchpad, vector DB. Nhưng tất cả những cơ chế đó đều là passive: bạn thiết kế, bạn chọn ghi gì, bạn quyết định retrieve cái gì. Agent không tự học từ những gì nó làm.
Hermes Agent, ra mắt ngày 25 tháng 2 năm 2026 bởi Nous Research, thử một hướng khác: để agent tự tổng hợp kinh nghiệm thành skills tái sử dụng, tự cải thiện những skills đó theo thời gian, và nhớ lại context qua FTS5 full-text search trên SQLite. Không phải mô hình “chatbot với memory”. Mà là một agent thật sự trở nên tốt hơn khi chạy lâu hơn.
Bài này là deep-dive kỹ thuật vào Hermes: kiến trúc, cơ chế self-evolving, persistent memory, deployment, và những bài học có thể áp dụng khi bạn tự build agent tương tự.
Phần 1: Hermes Agent là gì
Hermes Agent là một personal AI agent mã nguồn mở, MIT license, được thiết kế để chạy liên tục trên hạ tầng của bạn. Không phải SaaS, không phải API có giới hạn, không phải chatbot chạy trên máy tính cá nhân. Nó chạy trên VPS $5/tháng, GPU workstation, hay serverless và bạn kết nối vào từ Telegram, Discord, Slack, WhatsApp, Signal, Email, hay terminal.
Từ khi ra mắt đến giữa tháng 5 năm 2026, Hermes đạt 154.000 GitHub stars với 24.700 forks. Đây là một trong những dự án open-source phát triển nhanh nhất trong lịch sử hệ sinh thái AI agents: đạt 99.000 stars chỉ trong 8 tuần đầu. Đến ngày 10 tháng 5 năm 2026, Hermes trở thành agent được dùng nhiều nhất trên OpenRouter toàn cầu, xử lý 224 tỷ tokens trong một ngày.
Điểm khác biệt cốt lõi so với các agent framework khác (kể cả OpenClaw được phân tích trong bài 26):
| Tiêu chí | Hermes | Agent framework thông thường |
|---|---|---|
| Skills | Tự tạo, tự cải thiện | Human-authored hoặc hardcoded |
| Memory cross-session | FTS5 SQLite, persistent | Không có hoặc vector DB external |
| Chạy ở đâu | VPS, GPU, serverless, local | Thường tied to laptop session |
| Model | 200+ models qua OpenRouter, model-agnostic | Thường tied to một provider |
| Channels | 20+ platforms | Thường CLI hoặc web UI |
Phần 2: Self-evolving skills
Đây là phần kỹ thuật thú vị nhất của Hermes và cũng là phần dễ bị hiểu sai nhất.
Cơ chế tạo skill
Hermes không tạo skill sau mỗi task. Nó chỉ trigger skill extraction khi một workflow đạt ngưỡng nhất định, thường là từ 5 tool calls trở lên trong một trajectory. Sau đó:
- Agent review lại toàn bộ trajectory vừa thực hiện
- LLM được gọi để tổng hợp: “đây là vấn đề gì, approach nào đã work, edge case nào đã gặp, và cách xử lý”
- Kết quả là một file Markdown lưu trong
~/.hermes/skills/
Skill là plain text Markdown. Bạn đọc được, sửa được, xóa được, commit vào git được. Không phải model weight, không phải embeddings, không phải gì đặc biệt. Ví dụ một skill đơn giản sẽ trông giống:
# skill: deploy-static-site-cloudflare
## Context
Deploy a static HTML/CSS/JS site to Cloudflare Pages via wrangler CLI.
## Steps
1. Unset conflicting env vars: CLOUDFLARE_API_KEY, CLOUDFLARE_EMAIL
2. Run: npx wrangler pages deploy <dist-dir> --project-name=<name>
3. Verify deployment at the Pages dashboard URL
## Edge cases
- If wrangler shows auth error despite login: env vars conflict, unset all three vars
- If project not found: run `wrangler pages project create <name>` first
## Last used: 2026-05-12
## Success rate: 4/4
Skill được tổ chức theo categories và có thể được search, enable, hoặc disable theo platform.
Curator: vòng lặp bảo trì tự động
Từ phiên bản v0.12.0, Hermes thêm Curator: một background agent chạy theo chu kỳ 7 ngày để grade, consolidate, và prune skill library. Curator đánh giá mỗi skill theo success rate, relevance, và overlap với skills khác. Skills kém chất lượng bị archive, skills tốt được merge nếu trùng nội dung.
Đây là phần quan trọng nhất của “self-evolving”: không chỉ tạo skill, mà còn dọn dẹp skill. Không có Curator, skill library sẽ phình ra vô tới hạn.
Companion repo: hermes-agent-self-evolution
Nous Research còn duy trì một repo riêng, hermes-agent-self-evolution, là research pipeline dùng DSPy và GEPA (Genetic Evolution of Prompt Architectures) để optimize chính các prompts và behaviors của Hermes. Đây là tầng nghiên cứu, không phải production code, nhưng nó cho thấy hướng dài hạn: agent tự tối ưu không chỉ ở tầng skill content mà còn ở tầng prompt design.
Phần 3: Persistent memory với FTS5
Hermes dùng bốn lớp memory khác nhau, mỗi lớp có vai trò riêng:
Lớp 1: Persistent Core Memory
Hai file cố định: MEMORY.md (facts về thế giới, context dự án) và USER.md (preferences, cách làm việc của user). Tổng cộng khoảng 1.300 tokens, frozen mỗi session. Đây là “sổ tay ghi chép có mục đích” mà agent chủ động update sau khi học được điều gì mới về bạn.
Khác với scratchpad trong bài 4, persistent core memory không phải per-session. Nó persist qua mọi session và được load vào system prompt mỗi lần agent khởi động.
Lớp 2: Session History với FTS5
Đây là lớp kỹ thuật thú vị nhất. Mỗi session được lưu vào SQLite database tại ~/.hermes/state.db, với FTS5 (Full-Text Search 5) indexing toàn bộ nội dung.
Tại sao FTS5 thay vì vector DB? Vì đối với session retrieval, exact lexical matching thường tốt hơn semantic similarity. Khi bạn muốn tìm lại “lần trước tôi fix cái lỗi CORS trên Cloudflare Workers”, FTS5 search theo từ “CORS Cloudflare Workers” sẽ tìm chính xác session đó. Vector search có thể trả về những session về “API error handling” vì semantically similar, nhưng không phải cái bạn cần.
FTS5 cũng nhanh hơn đáng kể so với vector search cho workload này: không cần embedding call, không cần vector similarity computation, chỉ là B-tree index trên SQLite. Latency thấp hơn nhiều khi agent cần lookup context giữa một task đang chạy.
Giới hạn của FTS5 cũng rõ ràng: nếu session trước dùng từ “deployment” và session này dùng “launch”, FTS5 sẽ không kết nối được. Vector search sẽ tìm được. Với use case memory cross-session, trade-off này chấp nhận được vì developer thường dùng consistent terminology trong một domain.
Lớp 3: Procedural Memory (Skills)
Đã nói ở Phần 2. Skills là lớp memory thứ ba, encode không phải facts mà là procedures.
Lớp 4: Honcho User Modeling (Optional)
Layer tùy chọn từ Honcho project: track preferences và behavior patterns của user theo thời gian, build một representation về cách bạn làm việc. Đây là layer cao nhất, hữu ích nhất cho long-term personalization.
Phần 4: Multi-channel và deployment
20+ messaging platforms
Hermes hỗ trợ 20 platforms tính đến v0.13.0, bao gồm Telegram, Discord, Slack, WhatsApp, Signal, Email, Google Chat, Mattermost, Matrix, DingTalk, và CLI. Tất cả từ một codebase duy nhất, qua Gateway layer.
Ý nghĩa thực tế: bạn deploy Hermes một lần trên VPS, rồi kết nối từ bất kỳ đâu. Đang trên điện thoại? Telegram. Đang làm việc? Slack. Đang debug? Terminal. Agent là một, context là một, memory là một.
Deploy trên $5 VPS
# Cài đặt
pip install hermes-agent
# Khởi tạo
hermes init
# Chọn model (ví dụ qua OpenRouter)
hermes model
# Chạy Telegram gateway
hermes gateway telegram
# Hoặc chạy CLI interactive
hermes
VPS $5/tháng (DigitalOcean Droplet, Hetzner CX11, Vultr) đủ để chạy Hermes kết nối với cloud model (OpenRouter, Anthropic API, OpenAI API). Chi phí model là separate. Hermes bản thân chỉ cần Python runtime và SQLite, không cần GPU.
NVIDIA RTX và DGX Spark
Nếu bạn muốn chạy local model thay vì cloud API, NVIDIA đã partnership với Nous Research để tối ưu Hermes cho RTX PCs và DGX Spark. DGX Spark với 128GB unified memory và 1 petaflop AI performance có thể chạy Qwen 3.6 (35B đến 120B parameters) hoàn toàn local.
Thực tế của partnership này: NVIDIA Tensor Cores cho phép Hermes xử lý một task phức tạp hoặc refine một skill trong vài giây thay vì vài phút. Với Qwen 3.6 35B chạy trên RTX 4090 (cần khoảng 20GB VRAM), bạn có một agent persistent memory, self-evolving, completely offline.
Runtimes được hỗ trợ cho local model: llama.cpp, Ollama, LM Studio (có native Hermes support), vLLM.
Sandboxing
Hermes implement “five-layer defense-in-depth”: user authorization, approval checks, container isolation (Docker hoặc e2b), credential filtering, và context scanning. Khi agent cần chạy code, nó chạy trong sandbox, không phải bare host.
Phần 5: Lessons design self-improving agent
Lesson 1: Self-improvement chỉ work khi base quality đủ tốt
Pitfall quan trọng nhất của Hermes, và của bất kỳ self-improving agent nào: garbage in, garbage out. Skill được tạo từ một LLM call review trajectory. Nếu LLM tự quan sát kém, skill sẽ kém. Nếu trajectory có edge case không được capture, skill sẽ thiếu.
Hermes ship kèm 118 bundled skills, tất cả được human review kỹ lưỡng. Skills tự tạo bởi user’s agent thì không được review đó. Theo thực tế sử dụng: bạn sẽ tích lũy một số skills excellent, một đống skills trung bình, và ít nhất một skill “confidently wrong”, tức là codify sai approach nhưng lại được lưu như đúng vì lần đó nó seem to work.
Cursor đối với code completion: model tốt thì autocomplete tốt, model kém thì autocomplete gây hại hơn gợi ý thủ công. Self-evolving agent cũng vậy.
Lesson 2: Skill poisoning là attack vector mới
Đây là pitfall bảo mật ít được thảo luận. Traditional prompt injection ảnh hưởng một session. Với Hermes, nếu attacker inject được vào một session và session đó trigger skill extraction, injection được lưu vào disk như một Markdown file, được load vào mọi session tiếp theo.
Skill là “trusted” bởi agent vì nó đến từ chính experience của agent. Không có signal nào để distinguish giữa legitimate skill và poisoned skill trong skill file nếu không đọc content thủ công.
Hermes v0.13.0 đã thêm prompt-injection scanning trên assembled skill content. Nhưng đây là vấn đề về nguyên tắc: khi bạn cho agent write to persistent knowledge store, store đó trở thành attack surface. Bài bài 24 của series đã cover prompt injection ở level session, nhưng self-evolving agent mở ra một dimension mới: persistent injection.
Lesson 3: Meta-cognition có chi phí
Mỗi lần Hermes tạo skill, nó chạy thêm một LLM call để review trajectory. Curator chạy 7 ngày một lần nhưng grade toàn bộ skill library. Memory nudge update MEMORY.md sau các session phù hợp.
Chi phí tích lũy này, “meta-cognition cost”, có thể vượt chi phí của actual work. Với model rẻ (Qwen 3.6 qua OpenRouter hay local) thì không đáng kể. Với Claude Opus 4.7 hay GPT-4o, meta-cognition cost có thể là 30-50% total bill.
Thiết kế đúng: chạy meta-cognition (skill extraction, memory update) với model nhỏ hơn, nhanh hơn, rẻ hơn. Dùng model mạnh chỉ cho actual task. Hermes hỗ trợ cấu hình model khác nhau cho các loại operation khác nhau.
Lesson 4: FTS5 so với vector search: biết khi nào dùng cái gì
FTS5 choice của Hermes là kỹ thuật hợp lý cho session retrieval, nhưng không phải câu trả lời universal. Nếu bạn build agent cần semantic similarity (ví dụ “tìm documentation liên quan đến vấn đề này”), vector search vẫn tốt hơn.
Pattern đúng: dùng FTS5 cho “tìm lại session cụ thể đã làm gì”, dùng vector search cho “tìm knowledge liên quan đến concept này”. Hermes kết hợp cả hai: FTS5 cho session history, optional vector layer cho knowledge retrieval nếu user setup.
So sánh với cách bài 4 phân tích các loại memory: Hermes thêm một layer mà bài 4 chỉ đề cập ngắn, đó là procedural memory dưới dạng skills có lifecycle riêng.
Lesson 5: Agent persistent ≠ agent running 24/7 trên laptop
Phần lớn agent demo chạy trên laptop của developer. Laptop tắt thì agent tắt. Hermes giải quyết vấn đề này bằng cách tách agent runtime khỏi client interface.
Architecture đúng cho persistent agent:
VPS/server (agent runtime)
└── Hermes process (chạy 24/7)
├── state.db (SQLite với FTS5)
├── skills/
└── MEMORY.md, USER.md
Client (bất kỳ đâu)
├── Telegram app trên phone
├── Discord trên laptop
└── Terminal qua SSH
Agent không phụ thuộc vào client availability. Bạn tắt máy, agent vẫn có thể complete scheduled tasks. Bạn mở máy lại, reconnect vào same context. Pattern này là architectural choice quan trọng mà nhiều agent framework bỏ qua.
Cheatsheet: Hermes Agent tóm tắt
| Aspect | Chi tiết |
|---|---|
| Nguồn gốc | Nous Research, ra mắt 25/02/2026, MIT license |
| GitHub | 154.000 stars, 24.700 forks (tháng 5/2026) |
| OpenRouter | Agent số 1 toàn cầu, 224B tokens/ngày |
| Self-evolving | Skills từ trajectory, Curator 7 ngày, DSPy research pipeline |
| Memory | Core (1.3K tokens), FTS5 session history, procedural (skills), Honcho |
| Channels | 20+ platforms: Telegram, Discord, Slack, WhatsApp, Signal, Email, CLI |
| Model | 200+ models, OpenRouter, Anthropic, OpenAI, NVIDIA NIM, local |
| Deploy | VPS $5, Docker, SSH, serverless (Modal/Daytona), GPU local |
| NVIDIA | RTX PCs + DGX Spark, local model qua Ollama/llama.cpp/LM Studio |
| Security | 5-layer defense: authorization, approval, sandbox, redaction, scanning |
| Pitfalls | Skill quality, skill poisoning, meta-cognition cost |
Lời kết
Bài 27 là bài cuối cùng của series “AI Agents từ zero”. Đây là bonus post, không có bài tiếp theo.
Series đã đi 26 bài core cộng 2 bonus (bài 26 về OpenClaw, bài 27 về Hermes). Từ agent là gì (bài 1) đến tool design, memory, planning, multi-agent, production monitoring, đến hai framework open-source đang định hình hướng đi của 2026.
Hermes Agent đại diện cho một hypothesis mạnh: agent tốt nhất không phải là agent được engineer tốt nhất ngay từ đầu, mà là agent có khả năng cải thiện bản thân theo thời gian khi chạy. Đây là hướng nghiên cứu lớn, và kết quả thực tế của Hermes (154K stars, 224B tokens/ngày, partnership với NVIDIA) cho thấy hypothesis này đang được thị trường validate.
Nhưng “self-improving” không phải magic. Chất lượng self-improvement phụ thuộc vào chất lượng base model, thiết kế của learning loop, và cơ chế curation. Nếu không có Curator dọn dẹp skill library, nếu không có security layer bảo vệ khỏi skill poisoning, và nếu không có meta-cognition cost management, agent “self-improving” có thể trở thành agent “self-degrading”.
Lesson chung của cả series: agent không phải magic. Đó là engineering trade-off. Framework giỏi nhất chỉ là cái mà bạn hiểu đủ sâu để biết khi nào nó sẽ fail.
Cảm ơn bạn đã theo dõi series từ bài 1 đến đây.