<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Blog Maguyva</title><description>Phân tích kỹ thuật chuyên sâu về trí tuệ mã nguồn MCP, kiến trúc tác nhân AI, và những bài học từ việc xây dựng một nền tảng tìm kiếm mã đa ngôn ngữ.</description><link>https://maguyva.ai/vi/blog</link><language>vi</language><atom:link href="https://maguyva.ai/vi/rss.xml" rel="self" type="application/rss+xml"/><item><title>Ngữ cảnh đi theo bạn</title><link>https://maguyva.ai/vi/blog/context-that-travels</link><guid isPermaLink="true">https://maguyva.ai/vi/blog/context-that-travels</guid><description>Trình lập chỉ mục của Cursor rất xuất sắc bên trong Cursor. Maguyva là bản đồ MCP được lưu trữ mà cùng một agent có thể truy vấn từ các editor, CLI và CI khác.</description><pubDate>Mon, 07 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Trình lập chỉ mục của Cursor rất xuất sắc bên trong Cursor. Tự động hoàn thành, chỉnh sửa nội tuyến, chat, và agent trong cửa sổ đó đã dựa trên một chỉ mục dự án mà Cursor vận hành cho không gian làm việc đang mở. Nếu Cursor là bề mặt duy nhất bạn viết code, và chỉ mục đó đã tìm thấy đúng file, hãy ở lại đó. Đó là trường hợp trung thực ‘ở lại nơi bạn đang ở’, và nó xứng đáng là câu đầu tiên của trang này.&lt;/p&gt;
&lt;p&gt;Bài viết này nói về nửa còn lại của một tuần bình thường. Cùng một repository cũng được mở trong Claude Code, được hỏi từ Codex CLI, được xem xét trên máy thứ hai, hoặc được một agent chạy trong CI truy vấn. Câu hỏi không phải là ‘trình lập chỉ mục nào tốt hơn’. Câu hỏi là liệu bản đồ mà agent tin tưởng trong một cửa sổ có phải là bản đồ mà nó tin tưởng trong cửa sổ tiếp theo hay không.&lt;/p&gt;
&lt;p&gt;Maguyva chính là bản đồ đi theo bạn đó. Đó là một lớp ngữ cảnh codebase MCP từ xa. Agent truy vấn nó theo cùng cách nó truy vấn bất kỳ công cụ MCP nào khác. Kết quả trả về dưới dạng các đường dẫn được xếp hạng kèm số dòng. Cursor vẫn là editor. Chính ngữ cảnh mới là thứ di chuyển.&lt;/p&gt;
&lt;h2 id=&quot;trình-lập-chỉ-mục-của-cursor-dùng-để-làm-gì&quot;&gt;Trình lập chỉ mục của Cursor dùng để làm gì&lt;/h2&gt;
&lt;p&gt;Việc lập chỉ mục tích hợp sẵn của Cursor tồn tại để chat, agent và tìm kiếm bên trong editor có thể lấy được code liên quan thay vì chỉ dựa vào những gì vừa với cửa sổ ngữ cảnh thô của model. Đó là thiết kế đúng đắn cho một IDE. Chỉ mục này là bản địa của Cursor. Nó không phải là một máy chủ MCP và không thể truy cập được từ bất kỳ client nào khác.&lt;/p&gt;
&lt;p&gt;Đây là cách nó hoạt động, như được mô tả trong tài liệu công khai của Cursor và chính lời tường thuật của Cursor tại thời điểm viết bài này: đường dẫn tìm kiếm chính không còn là một chỉ mục embedding trên cloud nữa. Đội ngũ Cursor đã tuyên bố trên diễn đàn cộng đồng của họ rằng việc tìm kiếm ngữ nghĩa/dựa trên embedding chuyên dụng đang dần bị loại bỏ để ủng hộ việc truy xuất dựa trên grep, vì các model hiện tại đã tự khám phá đủ tốt một cây sống. Thay vào đó là Instant Grep, một chỉ mục tìm kiếm cục bộ được xây dựng từ n-gram, danh sách đảo ngược và bộ lọc Bloom, được giữ trong một bảng tra cứu ánh xạ vào bộ nhớ, để các truy vấn được giải quyết ngay trên máy của chính nhà phát triển thay vì trên một máy chủ.&lt;/p&gt;
&lt;p&gt;Bản thân chỉ mục sống bên trong thư mục &lt;code&gt;.git/cursor/&lt;/code&gt; riêng của repository, được neo vào một commit git cụ thể; các thay đổi kể từ commit đó được xếp chồng lên trên nó thay vì kích hoạt một lần quét mới, và chỉ mục chỉ được xây dựng lại khi trạng thái cục bộ đã trôi dạt xa so với những gì nó được xây dựng dựa trên. Vì nó nằm bên trong &lt;code&gt;.git&lt;/code&gt;, nó không bao giờ bị theo dõi và không bao giờ được push — xóa thư mục, và chỉ mục sẽ biến mất. &lt;code&gt;.gitignore&lt;/code&gt; được tôn trọng theo cấu trúc, vì chỉ nội dung được git theo dõi mới đủ điều kiện, và &lt;code&gt;.cursorignore&lt;/code&gt; được thực thi trên đường dẫn đọc. Không còn bước embedding phía máy chủ hay cơ sở dữ liệu vector từ xa nào trên đường dẫn đó nữa. Tài liệu trước đây mô tả một thiết kế hỗ trợ bởi cloud — mã hóa các chunk, đồng bộ qua cây Merkle, tái sử dụng chỉ mục giữa các thành viên trong nhóm — và chính đội ngũ Cursor kể từ đó đã nói rằng thiết kế đó đang bị loại bỏ, vì vậy bài viết này không còn mô tả nó là hiện hành nữa.&lt;/p&gt;
&lt;p&gt;Một điểm nổi bật bên trong editor là subagent Explore của Cursor. Nó có thể khởi chạy nhiều tìm kiếm song song trong cửa sổ ngữ cảnh riêng của nó trên một model nhanh hơn và chỉ trả về những phát hiện liên quan, để cuộc hội thoại chính không bị phình to bởi kết quả tìm kiếm. Đó là một sức mạnh thực sự bên trong editor. Hãy giữ nó.&lt;/p&gt;
&lt;p&gt;Các không gian làm việc đa gốc được hỗ trợ: ngữ cảnh của mỗi thư mục đang mở đều khả dụng cho Agent. Một số tính năng phụ thuộc vào git, như worktree, bị vô hiệu hóa trong các thiết lập đa gốc, và Cloud Agents hoàn toàn không hỗ trợ không gian làm việc đa gốc.&lt;/p&gt;
&lt;p&gt;Không điều nào trong số này là lý do để rời bỏ Cursor. Đó là một mô tả chính xác về một bản đồ xuất sắc ở nơi nó sống.&lt;/p&gt;
&lt;h2 id=&quot;đi-theo-bạn-thực-sự-có-nghĩa-là-gì&quot;&gt;‘Đi theo bạn’ thực sự có nghĩa là gì&lt;/h2&gt;
&lt;p&gt;Một bản đồ đi theo bạn khi cùng những câu hỏi trả về cùng loại câu trả lời, kèm trích dẫn bạn có thể mở, từ nhiều hơn một client.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Trong Cursor: ‘Đâu là nơi &lt;code&gt;parseConfig&lt;/code&gt; được định nghĩa, và ai gọi nó?’&lt;/li&gt;
&lt;li&gt;Trong Claude Code, trên cùng một repo: cùng câu hỏi.&lt;/li&gt;
&lt;li&gt;Trong Codex CLI, trên một máy xem xét chưa bao giờ mở cửa sổ Cursor: cùng câu hỏi.&lt;/li&gt;
&lt;li&gt;Trong một CI agent nói MCP: cùng câu hỏi, đối với cùng một snapshot được lưu trữ.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Nếu mỗi bề mặt xây dựng chỉ mục riêng tư của riêng nó, bạn không có một bản đồ. Bạn có nhiều bộ nhớ đệm trôi dạt xa nhau. Chỉ mục của editor có thể cập nhật cho cây trên đĩa. Phiên CLI có thể chậm hơn một ngày. Công việc CI có thể đang nhìn vào một checkout khác. Và agent vẫn sẽ nghe có vẻ tự tin.&lt;/p&gt;
&lt;p&gt;Trình lập chỉ mục của Cursor không được thiết kế để giải quyết điều đó. Vì nó sống bên trong editor, ngữ cảnh mà nó xây dựng là dành cho editor đó. Một người đọc cũng cần một CLI, một pipeline CI, hoặc một editor khác cần một công cụ riêng biệt cho những bề mặt đó. Đó là một thực tế về phạm vi, không phải là một khiếm khuyết. Maguyva chính là công cụ riêng biệt đó.&lt;/p&gt;
&lt;p&gt;Một số lượng ngôn ngữ được công bố cho trình lập chỉ mục của Cursor không được nêu trong tài liệu mà bài viết này được phép sử dụng. Maguyva công bố hỗ trợ hơn 279 ngôn ngữ và công nghệ dựa trên văn bản. Giá cả của Cursor cũng không được sao chép ở đây; xem trang giá của họ. Maguyva tính phí theo không gian làm việc, không theo chỗ ngồi, với các gói đã công bố là $0, $19, $49 và $149 tùy thuộc vào phạm vi đã lập chỉ mục và kích thước không gian làm việc.&lt;/p&gt;
&lt;h2 id=&quot;một-bản-đồ-được-lưu-trữ-mọi-client-mcp&quot;&gt;Một bản đồ được lưu trữ, mọi client MCP&lt;/h2&gt;
&lt;p&gt;Maguyva là một máy chủ MCP từ xa. Bạn kết nối GitHub, chọn các repository, và pipeline trên cloud xây dựng các symbol, các cạnh đồ thị, và một bản đồ được xếp hạng. Bạn thêm một khóa API vào cấu hình MCP của client mà bạn đã đang sử dụng. Maguyva có các hướng dẫn thiết lập cho 24 client MCP đã được ghi chép — bao gồm cả Cursor — và có thể kết nối với các client tương thích MCP khác hỗ trợ cấu hình chuẩn.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://maguyva.ai/vi/for-cursor&quot;&gt;Trang thiết lập Cursor&lt;/a&gt; là con đường riêng cho editor này nếu đó là nơi bạn làm việc. Cùng một máy chủ trả lời cho Claude Code, VS Code, Windsurf, Codex CLI và những cái khác. Bạn không đổi editor. Bạn cung cấp cho mỗi agent cùng một bề mặt công cụ: 11 công cụ MCP hướng tới khách hàng trên khắp tìm kiếm, symbol, phân tích phụ thuộc, truy xuất file, ngữ cảnh repository, và các quy trình công cụ tiện ích tất định. Tìm kiếm ngữ nghĩa, cấu trúc, đồ thị, và văn bản được hợp nhất thành kết quả được xếp hạng.&lt;/p&gt;
&lt;p&gt;Đó là lợi ích của tính di động. Các trích dẫn bạn đã kiểm tra trong Cursor sáng nay có cùng hình thức với các trích dẫn mà Codex CLI sẽ trả về tối nay. Đường dẫn file và số dòng. Mở chúng ra. Nếu chúng sai, bạn sẽ thấy. Nếu chúng đúng, thay đổi tiếp theo có nơi để hạ cánh. Tuyên bố được chấp thuận là ít thay đổi bị ảo giác hơn, không phải lời hứa rằng mọi thay đổi đều đúng.&lt;/p&gt;
&lt;p&gt;Độ mới được công bố. Các snapshot có dấu thời gian, để agent biết nó đang đọc phiên bản nào của cây. Nhịp độ xây dựng lại là hàng ngày trên gói miễn phí và hàng giờ trên các gói trả phí. Giới hạn trung thực là công việc cục bộ chưa đồng bộ hóa: một thay đổi chỉ tồn tại trong một working tree vẫn chưa có trong bản đồ được lưu trữ. Giới hạn này giống nhau bất kể bạn truy vấn từ client nào, và đó chính xác là điểm mấu chốt. Sự trôi dạt giữa các client không còn là một giới hạn ẩn thứ hai nữa.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://maguyva.ai/vi/docs&quot;&gt;Tài liệu&lt;/a&gt; đưa ra vòng lặp kích hoạt áp dụng cho mọi client: lập chỉ mục một repo mà bạn đã biết, kết nối client, đặt một câu hỏi bạn có thể xác minh. Làm điều đó một lần trong Cursor. Làm lại từ CLI mà bạn thực sự sử dụng vào những ngày xem xét. Nếu cả hai câu trả lời đều trích dẫn cùng một handler, bản đồ đã thực sự đi theo bạn.&lt;/p&gt;
&lt;h2 id=&quot;hai-bản-đồ-cùng-tồn-tại-như-thế-nào&quot;&gt;Hai bản đồ cùng tồn tại như thế nào&lt;/h2&gt;
&lt;p&gt;Sử dụng cả hai. Chúng không phải là các lựa chọn thay thế theo nghĩa của một trang so sánh.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Giữ trình lập chỉ mục của Cursor bật cho dự án trên đĩa. Để Explore, Instant Grep, và agent bên trong editor sử dụng nó. Vòng lặp đó là bản địa và nhanh.&lt;/li&gt;
&lt;li&gt;Thêm Maguyva làm máy chủ MCP trong Cursor để cùng phiên đó cũng có thể truy vấn bản đồ không gian làm việc được lưu trữ. Cursor là một client Maguyva đã được ghi chép. Bạn không chọn một chỉ mục rồi xóa cái kia.&lt;/li&gt;
&lt;li&gt;Thêm cùng một máy chủ Maguyva vào Claude Code, Codex CLI, hoặc bất kỳ client MCP nào khác chạm vào repo. Một dạng khóa API. Một không gian làm việc.&lt;/li&gt;
&lt;li&gt;Nếu một CI agent tương thích MCP, hãy trỏ nó đến cùng máy chủ. Nó sẽ đọc cùng một snapshot có dấu thời gian mà máy tính xách tay đã đọc.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Chỉ mục của editor vẫn là công cụ tốt nhất cho câu hỏi ‘điều gì đang có trên đĩa trong cửa sổ này, ngay lúc này’. Bản đồ được lưu trữ là công cụ tốt nhất cho câu hỏi ‘không gian làm việc này trông như thế nào đối với mọi agent sẽ chạm vào nó hôm nay’. Những câu đó không cạnh tranh với nhau.&lt;/p&gt;
&lt;p&gt;Hạn mức không gian làm việc được công bố trên &lt;a href=&quot;https://maguyva.ai/vi/pricing&quot;&gt;trang giá&lt;/a&gt;: repo, số dòng đã lập chỉ mục, và người dùng, được tính phí theo không gian làm việc. Agent và con người chia sẻ cùng một số lượng người dùng. Bắt đầu miễn phí với một repo mà bạn đã có thể đánh giá. Chỉ tăng không gian làm việc sau khi các trích dẫn đã vượt qua thử thách tiếp xúc với cây.&lt;/p&gt;
&lt;h2 id=&quot;những-gì-trang-này-không-khẳng-định&quot;&gt;Những gì trang này không khẳng định&lt;/h2&gt;
&lt;p&gt;Nó không khẳng định rằng trình lập chỉ mục của Cursor yếu, không đầy đủ, hoặc là lý do để đổi editor. Câu đầu tiên của bài viết này nói điều ngược lại.&lt;/p&gt;
&lt;p&gt;Nó không khẳng định rằng Maguyva thay thế Instant Grep hoặc subagent Explore. Đó là các tính năng của Cursor. Chúng ở lại trong Cursor.&lt;/p&gt;
&lt;p&gt;Nó không bịa ra một số lượng ngôn ngữ, một con số độ trễ, hoặc một khoản tiết kiệm token cho bất kỳ sản phẩm nào. Các con số chưa biết vẫn không được công bố.&lt;/p&gt;
&lt;p&gt;Nó không giả vờ rằng công việc cục bộ chưa push có trong bản đồ được lưu trữ. Các snapshot có dấu thời gian làm cho giới hạn đó hiển thị. Chúng không loại bỏ nó.&lt;/p&gt;
&lt;p&gt;Bài kiểm tra rất bình thường. Lập chỉ mục một repo mà bạn đã biết. Đặt một câu hỏi bạn có thể xác minh, trước tiên trong Cursor, sau đó trong một client MCP thứ hai. Ngữ cảnh đi theo bạn chính là cùng một trích dẫn ở cả hai nơi.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;// same map, wherever you opened it.&lt;/code&gt;&lt;/p&gt;
</content:encoded><category>Ecosystem</category><category>MCP</category><category>Portability</category></item><item><title>Bản đồ trước, xem xét sau</title><link>https://maguyva.ai/vi/blog/map-first-review-second</link><guid isPermaLink="true">https://maguyva.ai/vi/blog/map-first-review-second</guid><description>Đặt nền tảng cho coding agent trên một bản đồ repo trước khi nó viết. Để Greptile xem xét pull request sau đó. Một cặp bổ sung cho nhau, không phải thay thế.</description><pubDate>Mon, 07 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Hai công việc khác nhau nằm ở hai bên của một pull request. Trước khi agent viết, nó cần một bản đồ của cây mà nó sắp thay đổi. Sau khi agent mở một PR, một thứ gì đó nên đọc thay đổi đó so với phần còn lại của hệ thống và để lại các bình luận mà con người có thể hành động theo.&lt;/p&gt;
&lt;p&gt;Những công việc này trông giống nhau từ xa vì cả hai đều liên quan đến ‘hiểu codebase’. Chúng không phải là cùng một sản phẩm. Một cái trả lời ‘thay đổi này nên hạ cánh ở đâu?’. Cái kia trả lời ‘diff này đã phá vỡ điều gì mà một linter kiểm tra từng dòng sẽ bỏ lỡ?’. Trộn lẫn chúng tạo ra một bản nháp đầu tiên tệ hơn và một sự xem xét ồn ào hơn.&lt;/p&gt;
&lt;p&gt;Bài viết này là một hướng dẫn quy trình làm việc chung. Maguyva là bản đồ mà agent truy vấn trước tiên. Greptile là agent xem xét bình luận trên PR sau đó. Cặp này bổ sung cho nhau theo cấu trúc: Maguyva không xem xét pull request, và Greptile không thay thế lớp ngữ cảnh mà agent đã sử dụng để viết chúng.&lt;/p&gt;
&lt;h2 id=&quot;tại-sao-sự-phân-chia-này-hữu-ích&quot;&gt;Tại sao sự phân chia này hữu ích&lt;/h2&gt;
&lt;p&gt;Một coding agent xuất phát từ các tiền đề huấn luyện cộng với vài file được dán vào sẽ bịa ra một đường dẫn hợp lý và chỉnh sửa nó. Đó là thất bại ‘sai file’, và đó là một vấn đề truy xuất. Maguyva là một lớp ngữ cảnh codebase MCP từ xa: truy xuất ngữ nghĩa, cấu trúc (AST), đồ thị/phụ thuộc và văn bản được hợp nhất thành kết quả được xếp hạng, cộng với tìm kiếm symbol và truy xuất file. Các câu trả lời có căn cứ trở về dưới dạng &lt;code&gt;path/file.ext:line&lt;/code&gt;, để bạn có thể từ chối một sai sót trước khi bản vá tồn tại. Tuyên bố vẫn khiêm tốn: ít thay đổi bị ảo giác hơn. Model vẫn có thể đoán. Chỉ là bước đầu tiên không còn là một sự đoán mò nữa.&lt;/p&gt;
&lt;p&gt;Greptile là một agent xem xét code chạy bằng AI. Theo lời họ, nó tự động xem xét mọi pull request với sự hiểu biết đầy đủ về codebase, và đặt điều đó đối lập với các linter truyền thống kiểm tra file một cách riêng lẻ thay vì toàn bộ hệ thống. Việc thiết lập bao gồm cài đặt ứng dụng GitHub hoặc GitLab và chọn repository. Không có chỉ mục cục bộ nào bạn phải vận hành. Việc lưu trữ là Greptile Cloud (họ tuyên bố tuân thủ SOC 2 Type II, với báo cáo có sẵn theo yêu cầu), với tùy chọn tự lưu trữ được cung cấp cho các doanh nghiệp.&lt;/p&gt;
&lt;p&gt;Quy trình được đánh số của riêng họ là: kết nối và xây dựng một đồ thị phụ thuộc của mọi function, class và phụ thuộc; ở mỗi pull request, phân tích thay đổi bằng cách sử dụng đồ thị repo đầy đủ đó và công bố các phát hiện dưới dạng bình luận PR với các sửa chữa được đề xuất, trong khoảng ba phút; mỗi bình luận có thể chuyển giao vấn đề cho một coding agent mà nhóm đã sử dụng. Họ cũng tuyên bố đọc các bình luận PR của con người trước đây theo thời gian để học các tiêu chuẩn code của một nhóm và giảm các đề xuất gây ồn ào. Hệ thống học tập của họ, theo tuyên bố của họ, cần 2-3 tuần để thích ứng.&lt;/p&gt;
&lt;p&gt;Đó là xem xét, không phải soạn thảo. Điểm nổi bật của Greptile là ngữ cảnh đồ thị repo đầy đủ trên thay đổi đã hạ cánh trong một PR, tiếp theo là một vòng lặp khép kín gửi phát hiện đến Claude Code, Codex, Conductor, Cursor, hoặc Devin. Điểm nổi bật của Maguyva là bản đồ được xếp hạng mà agent đã truy vấn trước khi thay đổi đó được viết. Sử dụng cả hai. Đừng yêu cầu một trong hai làm công việc của cái kia.&lt;/p&gt;
&lt;p&gt;Một tích hợp sản phẩm bên thứ nhất giữa Maguyva và Greptile không được nêu ra. Bạn cũng không cần nó. Maguyva nói chuyện với agent qua MCP. Greptile nói chuyện với GitHub hoặc GitLab thông qua ứng dụng riêng của họ. Chúng gặp nhau tại pull request. Không có script keo dán, không có cron kết nối một công cụ với công cụ kia. Cặp này không cần bash vì mỗi sản phẩm đã đứng trên bề mặt thuộc về nó.&lt;/p&gt;
&lt;h2 id=&quot;đây-không-phải-là-gì&quot;&gt;Đây không phải là gì&lt;/h2&gt;
&lt;p&gt;Đây không phải là một bài đánh sập Greptile. Đây không phải là một trang ‘đổi người xem xét của bạn’. Greptile ra mắt trên Hacker News vào ngày 5 tháng 3 năm 2024 với tư cách là một công ty Y Combinator W24, và luồng đó là cách nhiều người lần đầu biết đến sản phẩm này. Nếu đó là cách bạn tìm thấy họ, hãy tiếp tục sử dụng họ. Trang này là nửa trước còn thiếu của vòng lặp đó: đặt nền tảng cho agent trước, để PR mà Greptile thấy đã nhắm vào đúng file.&lt;/p&gt;
&lt;p&gt;Tài liệu tiếp thị của Greptile dẫn đầu bằng các tuyên bố về tốc độ xem xét và bắt lỗi. Hãy coi chúng như những tuyên bố của riêng Greptile, không phải những con số được xác minh độc lập. Bài viết này không lặp lại chúng như sự thật.&lt;/p&gt;
&lt;p&gt;Phạm vi bao phủ ngôn ngữ cũng là loại trung thực tương tự. Greptile định khung việc hỗ trợ là bao phủ tất cả các ngôn ngữ lập trình thay vì một danh sách được liệt kê; một con số chính xác không được nêu ra. Maguyva công bố hỗ trợ hơn 279 ngôn ngữ và công nghệ dựa trên văn bản, với một sự phân chia kỹ thuật (AST được hỗ trợ bởi parser so với chỉ văn bản) trên trang web khi câu hỏi mang tính kỹ thuật. Đây là những sản phẩm khác nhau đưa ra những tuyên bố khác nhau. Đừng trộn lẫn chúng.&lt;/p&gt;
&lt;p&gt;Giá cả của Greptile không được nêu trong tài liệu mà bài viết này được phép sử dụng. Các gói trả phí tồn tại; xem trang giá của họ. Maguyva tính phí theo không gian làm việc, không theo chỗ ngồi. Các gói bắt đầu miễn phí. &lt;a href=&quot;https://maguyva.ai/vi/pricing&quot;&gt;Trang giá&lt;/a&gt; liệt kê các cấp đã công bố nếu bạn cần các con số về không gian làm việc.&lt;/p&gt;
&lt;h2 id=&quot;quy-trình-làm-việc&quot;&gt;Quy trình làm việc&lt;/h2&gt;
&lt;p&gt;Ba giai đoạn được đặt tên. Thực hiện chúng theo thứ tự này. Đừng bỏ qua bất kỳ giai đoạn nào trong lần đầu tiên bạn thử cặp này.&lt;/p&gt;
&lt;h3 id=&quot;1-ngữ-cảnh-maguyva&quot;&gt;1. Ngữ cảnh Maguyva&lt;/h3&gt;
&lt;p&gt;Lập chỉ mục một repository mà bạn đã biết. Kết nối client MCP mà bạn đã đang viết code trong đó — Claude Code, Cursor, Codex CLI, VS Code, Windsurf, hoặc một client tương thích MCP khác. Maguyva có các hướng dẫn thiết lập cho 24 client MCP đã được ghi chép và có thể kết nối với các client khác hỗ trợ cấu hình MCP chuẩn.&lt;/p&gt;
&lt;p&gt;Đặt một câu hỏi bạn có thể đánh giá trước khi bất kỳ ai viết một dòng nào. ‘Việc hết hạn phiên được xử lý ở đâu, và cái gì gọi nó?’ là một nước đi đầu tiên tốt hơn ‘sửa auth’. Yêu cầu trích dẫn. Mở các kết quả &lt;code&gt;file.ext:line&lt;/code&gt;. Theo dõi symbol. Xác nhận phụ thuộc mà bạn sắp chạm vào.&lt;/p&gt;
&lt;p&gt;Maguyva cung cấp 11 công cụ MCP hướng tới khách hàng trên khắp tìm kiếm, symbol, phân tích phụ thuộc, truy xuất file, ngữ cảnh repository, và các quy trình công cụ tiện ích tất định. Bốn chế độ truy xuất được hợp nhất thành kết quả được xếp hạng; &lt;code&gt;find_symbol&lt;/code&gt; là một công cụ riêng biệt khi bạn đã biết tên. &lt;a href=&quot;https://maguyva.ai/vi/docs&quot;&gt;Tài liệu&lt;/a&gt; mô tả con đường ngắn nhất: bắt đầu miễn phí, lập chỉ mục một repo mà bạn đã biết, kết nối client, sau đó đặt một câu hỏi bạn có thể xác minh.&lt;/p&gt;
&lt;p&gt;Các snapshot có dấu thời gian, để agent có thể biết phiên bản nào của cây nó đang đọc. Giới hạn trung thực là công việc cục bộ chưa đồng bộ hóa. Nếu thay đổi chỉ tồn tại trong một working tree và chưa được push, bản đồ được lưu trữ vẫn chưa chứa nó. Các file hướng dẫn (&lt;code&gt;CLAUDE.md&lt;/code&gt;, &lt;code&gt;AGENTS.md&lt;/code&gt;) vẫn có chỗ đứng ở đây, dành cho các quy ước và những gì không nên chạm vào. Chúng không phải là một bản đồ sống. Sử dụng chúng cho hành vi. Sử dụng Maguyva cho các sự kiện.&lt;/p&gt;
&lt;p&gt;Đừng để agent mở một PR trước khi các trích dẫn vượt qua sự tiếp xúc với repo. Cánh cổng đó là toàn bộ mục đích của giai đoạn này.&lt;/p&gt;
&lt;h3 id=&quot;2-pr-của-agent&quot;&gt;2. PR của agent&lt;/h3&gt;
&lt;p&gt;Cùng một agent giờ viết thay đổi trong client mà bạn đã trả tiền. Maguyva không phải là editor cũng không phải là người xem xét. Agent vẫn tạo ra diff. Bạn vẫn mở pull request trên GitHub hoặc GitLab như bạn đã làm.&lt;/p&gt;
&lt;p&gt;Điều nên khác biệt là file đầu tiên. PR nên nêu tên handler thực sự triển khai hành vi, người gọi sẽ bị hỏng, và test sẽ thất bại nếu thay đổi sai. Nếu giai đoạn 1 bị bỏ qua, giai đoạn 3 sẽ dành bình luận của nó cho một thay đổi hạ cánh sai package. Greptile vẫn có thể tìm thấy các vấn đề hệ thống. Nó không nên đồng thời phải phục hồi từ một đường dẫn bị ảo giác.&lt;/p&gt;
&lt;p&gt;Giữ PR trong phạm vi hẹp. Một file đầu tiên có căn cứ không phải là giấy phép để viết lại toàn bộ module. Cặp bổ sung này hoạt động khi agent làm một công việc với một bản đồ, sau đó yêu cầu người xem xét làm một công việc khác trên một diff có ranh giới.&lt;/p&gt;
&lt;h3 id=&quot;3-xem-xét-của-greptile&quot;&gt;3. Xem xét của Greptile&lt;/h3&gt;
&lt;p&gt;Greptile đã kết nối với repository thông qua ứng dụng GitHub hoặc GitLab. Trên pull request mới, nó phân tích thay đổi bằng cách sử dụng đồ thị repo đầy đủ mà nó đã xây dựng, và công bố các phát hiện dưới dạng bình luận với các sửa chữa được đề xuất. Tài liệu riêng của họ đặt lượt này vào khoảng ba phút.&lt;/p&gt;
&lt;p&gt;Đọc các bình luận như bạn sẽ đọc một đồng nghiệp cẩn thận: mở vị trí được trích dẫn, quyết định xem phát hiện có thật hay không, sau đó hành động. Ở nơi Greptile cung cấp ‘Fix with your Agent’, nó gửi vấn đề — đường dẫn file, số dòng, code được đề xuất — đến Claude Code, Codex, Conductor, Cursor, hoặc Devin. ‘Fix All’ gửi tất cả các vấn đề trong lần xem xét cùng một lúc. Họ cũng cung cấp một Greptile MCP và một plugin Claude Code cho việc chuyển giao đó. Maguyva không có trong danh sách mục tiêu được đặt tên đó; sự vắng mặt đó không phải là vấn đề. Maguyva đã hoàn thành công việc của nó ở giai đoạn 1. Coding agent đã viết PR là người nên nhận payload sửa chữa.&lt;/p&gt;
&lt;p&gt;Hãy mong đợi tiếng ồn trong 2-3 tuần đầu tiên trong khi hệ thống học tập của Greptile thích ứng với các bình luận mà nhóm của bạn thực sự để lại. Đó là lịch trình họ đã tuyên bố, không phải một khiếm khuyết của cặp đôi. Sự xem xét của con người vẫn ở trong vòng lặp. Greptile là lượt đầu tiên được tự động hóa, không phải nút merge.&lt;/p&gt;
&lt;p&gt;Nếu một bình luận Greptile trỏ đến một file mà agent chưa bao giờ truy vấn ở giai đoạn 1, đó là một tín hiệu hữu ích. Hoặc bản đồ đã bỏ lỡ một người gọi, hoặc agent đã bỏ qua một trích dẫn. Sửa bản nháp theo bình luận đó. Đừng vô hiệu hóa người xem xét.&lt;/p&gt;
&lt;h2 id=&quot;cách-giữ-sự-bổ-sung-này-trung-thực&quot;&gt;Cách giữ sự bổ sung này trung thực&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Maguyva luôn đi trước. Việc xem xét một PR sai file vẫn là việc xem xét file sai.&lt;/li&gt;
&lt;li&gt;Greptile luôn theo sau. Một bản nháp được trích dẫn tốt vẫn cần một lần đọc diff ở cấp độ toàn hệ thống.&lt;/li&gt;
&lt;li&gt;Đừng yêu cầu Maguyva công bố bình luận PR. Nó không làm điều đó.&lt;/li&gt;
&lt;li&gt;Đừng yêu cầu Greptile trở thành lớp truy xuất đầu tiên của agent trong khi nó vẫn đang chọn một đường dẫn. Đó không phải là công việc mà ứng dụng GitHub hoặc GitLab của họ được kết nối để làm.&lt;/li&gt;
&lt;li&gt;Đừng bịa ra một pipeline bash ‘đồng bộ hóa’ chúng. PR là giao diện.&lt;/li&gt;
&lt;li&gt;Xác minh cả hai phía một cách độc lập. Lập chỉ mục một repo mà bạn đã biết. Đặt một câu hỏi bạn có thể xác minh. Sau đó mở một PR nhỏ và đọc những gì Greptile thực sự bình luận.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Vòng lặp trở nên bình thường ngay khi nó được đặt tên. Bản đồ trước. PR của agent. Xem xét sau. Mỗi sản phẩm ở lại phía pull request mà nó giỏi.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;// map first. review second. in that order.&lt;/code&gt;&lt;/p&gt;
</content:encoded><category>Ecosystem</category><category>Workflow</category><category>Code Review</category></item><item><title>Cung cấp cho một AI agent ngữ cảnh của một repo lớn mà không cần trình lập chỉ mục cục bộ</title><link>https://maguyva.ai/vi/blog/large-repo-context-without-a-local-indexer</link><guid isPermaLink="true">https://maguyva.ai/vi/blog/large-repo-context-without-a-local-indexer</guid><description>Cách cung cấp cho một coding agent một bản đồ có thể truy vấn của một repository lớn từ cloud, mà không cần chạy trình lập chỉ mục cục bộ trên máy tính xách tay của bạn.</description><pubDate>Fri, 14 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Một repository lớn không vừa với một cửa sổ ngữ cảnh, và nếu bạn từng hướng một trình lập chỉ mục laptop vào một monorepo thực sự, bạn biết nó cũng không vừa một cách thoải mái ở đó — RAM tăng vọt, lần lập chỉ mục đầu tiên mất một giờ, và agent của bạn vẫn bắt đầu phiên tiếp theo bằng cách đoán file nào quan trọng.&lt;/p&gt;
&lt;p&gt;Câu trả lời thông thường là chạy một trình lập chỉ mục bên cạnh editor, và với một repo vừa vặn thoải mái trên một máy, đó là một câu trả lời tốt. Nếu monorepo của bạn đã được lập chỉ mục nhanh trong Cursor và đó là nơi duy nhất bạn cần bản đồ, bài viết này không có gì để bổ sung — hãy bỏ qua nó.&lt;/p&gt;
&lt;p&gt;Bài viết này nói về trường hợp khác — khi một agent cần một bản đồ có thể truy vấn của một repo lớn, và bạn không muốn chạy trình lập chỉ mục cục bộ để có được nó.&lt;/p&gt;
&lt;h2 id=&quot;khi-nào-trình-lập-chỉ-mục-cục-bộ-là-công-cụ-sai&quot;&gt;Khi nào trình lập chỉ mục cục bộ là công cụ sai&lt;/h2&gt;
&lt;p&gt;Một chỉ mục cục bộ giả định rằng code sống trên máy truy vấn nó, và ở quy mô monorepo thực sự, giả định đó bị căng thẳng ngay cả trong một editor duy nhất. Repo đơn giản là lớn hơn những gì bạn muốn giữ ‘ấm’ trên một laptop: bạn làm việc trong một package trong khi phạm vi ảnh hưởng nằm cách ba thư mục, và lần lập chỉ mục lạnh đầu tiên của một cây hai triệu dòng không phải là điều bạn muốn trải qua hai lần — dù trên máy của chính bạn, hay trên một CI runner chưa bao giờ clone cây đó trước đây. Hoặc một đồng nghiệp trong nhóm nên có thể truy vấn cùng bản đồ với bạn, mà không phải đợi máy của chính họ vật lộn qua cùng một chỉ mục.&lt;/p&gt;
&lt;p&gt;Không điều nào trong số này là lý do để vứt bỏ một trình lập chỉ mục editor tốt. Đó là lý do để cũng có một bản đồ được lưu trữ mà bất kỳ agent nào của bạn cũng có thể truy vấn qua MCP.&lt;/p&gt;
&lt;p&gt;Và vấn đề quy mô còn sâu hơn ‘quá nhiều file để dán vào’. Trên một cây lớn, câu hỏi thú vị hầu như không bao giờ là ‘cho tôi xem file này’ — mà là file nào, symbol nào, ai gọi nó, test nào. Một agent bắt đầu bằng cách liệt kê &lt;code&gt;src/&lt;/code&gt; và đọc ba kết quả đầu tiên sẽ vui vẻ bỏ lỡ handler trong &lt;code&gt;apps/api&lt;/code&gt; và client được tạo ra trong &lt;code&gt;packages/sdk&lt;/code&gt;. Điều bạn cần là truy xuất được xây dựng từ toàn bộ cây, sau đó được xếp hạng, sau đó được trích dẫn.&lt;/p&gt;
&lt;h2 id=&quot;ngữ-cảnh-của-một-repo-lớn-thực-sự-có-nghĩa-là-gì&quot;&gt;‘Ngữ cảnh của một repo lớn’ thực sự có nghĩa là gì&lt;/h2&gt;
&lt;p&gt;Đổ các file vào prompt không phải là ngữ cảnh — đó là một bản sao nhỏ hơn, tệ hơn của cây. Điều mà agent của bạn thực sự cần là đặt câu hỏi và nhận lại các câu trả lời được trích dẫn: symbol này được định nghĩa ở đâu và ai gọi nó, cái gì phụ thuộc vào module tôi sắp thay đổi, file test nào bao phủ hành vi này, và cây trông như thế nào &lt;em&gt;ngay bây giờ&lt;/em&gt;, không phải quý trước.&lt;/p&gt;
&lt;p&gt;Những câu trả lời đó phải đến từ một chỉ mục được xây dựng từ repo của bạn thay vì từ ký ức của model về repo của người khác, và chỉ mục đó phải sống ở một nơi nào đó ngoài cửa sổ ngữ cảnh của agent. Đối với vấn đề này, nó cũng nên sống ở một nơi nào đó ngoài laptop của bạn.&lt;/p&gt;
&lt;p&gt;Một điều nữa mà các file hướng dẫn không thể làm cho bạn: &lt;code&gt;CLAUDE.md&lt;/code&gt; và &lt;code&gt;AGENTS.md&lt;/code&gt; là nơi thích hợp cho các quy ước và hành vi, nhưng chúng không phải là một bản đồ sống, được xếp hạng, có thể truy vấn của một cây hai triệu dòng. Sử dụng quy tắc cho hành vi; sử dụng trí thông minh của repo cho các sự kiện.&lt;/p&gt;
&lt;h2 id=&quot;chúng-tôi-xây-dựng-bản-đồ-trên-cloud-bạn-truy-vấn-nó-từ-bất-kỳ-client-nào&quot;&gt;Chúng tôi xây dựng bản đồ trên cloud, bạn truy vấn nó từ bất kỳ client nào&lt;/h2&gt;
&lt;p&gt;Maguyva là một lớp ngữ cảnh codebase MCP từ xa. Bạn kết nối GitHub, chọn các repository của bạn, và có thể rời đi trong khi các pipeline cloud phân tích cây, xây dựng symbol và các cạnh đồ thị, và duy trì một bản đồ được xếp hạng — không bao giờ cần một trình lập chỉ mục cục bộ.&lt;/p&gt;
&lt;p&gt;Khi bạn push code, các file đã thay đổi được phân tích theo từng phần, và các lớp đồ thị và xếp hạng được xây dựng lại theo lịch trình: hàng ngày trên gói miễn phí, hàng giờ trên các gói trả phí. Mỗi snapshot có dấu thời gian, để agent của bạn có thể biết phiên bản nào của cây nó đang đọc. Giới hạn trung thực ở đây là công việc cục bộ chưa đồng bộ hóa — một thay đổi chỉ tồn tại trong working tree của bạn, chưa bao giờ được push, vẫn chưa có trong bản đồ được lưu trữ.&lt;/p&gt;
&lt;p&gt;Sau đó bạn kết nối bất kỳ client nào bạn đã đang sử dụng bằng cách thêm một khóa API vào cấu hình MCP của nó. Có các hướng dẫn thiết lập cho 24 client MCP đã được ghi chép, và bất kỳ client tương thích MCP nào khác hỗ trợ cấu hình chuẩn cũng có thể kết nối. Nếu Cursor là nơi bạn ở, &lt;a href=&quot;https://maguyva.ai/vi/for-cursor&quot;&gt;trang Cursor&lt;/a&gt; đi theo con đường đó; cùng một máy chủ trả lời cho Claude Code, VS Code, Windsurf, Codex CLI và những cái khác.&lt;/p&gt;
&lt;p&gt;Bạn không đổi editor. Bạn cung cấp cho agent của mình một bề mặt công cụ — 11 công cụ MCP trên khắp tìm kiếm, symbol, phân tích phụ thuộc, truy xuất file và ngữ cảnh repository — với phạm vi bao phủ hơn 279 ngôn ngữ và công nghệ dựa trên văn bản, điều này quan trọng hơn bạn nghĩ trên một monorepo đã ngừng là một ngôn ngữ duy nhất từ nhiều năm trước.&lt;/p&gt;
&lt;p&gt;Các câu trả lời trở về có căn cứ, dưới dạng đường dẫn file kèm số dòng. Tìm kiếm ngữ nghĩa, cấu trúc, đồ thị và văn bản được hợp nhất thành kết quả được xếp hạng, để một câu hỏi như ‘cái gì phụ thuộc vào parseConfig’ không cho bạn một bãi đổ grep hay một mảnh ngữ nghĩa đơn lẻ, mà là nhóm nhỏ những địa điểm thực sự quan trọng.&lt;/p&gt;
&lt;h2 id=&quot;một-hướng-dẫn-cụ-thể&quot;&gt;Một hướng dẫn cụ thể&lt;/h2&gt;
&lt;p&gt;Đừng bắt đầu bằng cách lập chỉ mục toàn bộ công ty. Đây là con đường hiệu quả:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Chọn một repository mà bạn đã biết rõ — một package bạn có thể đánh giá bằng tay có giá trị hơn cây lớn nhất bạn có.&lt;/li&gt;
&lt;li&gt;Bắt đầu miễn phí: 3 repo, 50 nghìn dòng đã lập chỉ mục, tất cả 11 công cụ, không có hạn mức truy vấn hàng tháng. Nếu repo đại diện của bạn lớn hơn thế, &lt;a href=&quot;https://maguyva.ai/vi/pricing&quot;&gt;trang giá&lt;/a&gt; liệt kê các cấp không gian làm việc ($0, $19, $49, $149) theo phạm vi đã lập chỉ mục — không phải theo số lượng chỗ ngồi.&lt;/li&gt;
&lt;li&gt;Kết nối GitHub và đợi lần lập chỉ mục đầu tiên hoàn tất. Bạn không biên dịch bất cứ thứ gì cục bộ.&lt;/li&gt;
&lt;li&gt;Kết nối client MCP — vài dòng cấu hình. Maguyva là một máy chủ MCP từ xa, vì vậy không có plugin, không có tiện ích mở rộng, và không có editor thứ hai để áp dụng.&lt;/li&gt;
&lt;li&gt;Đặt một câu hỏi bạn có thể xác minh. ‘Cái gì phụ thuộc vào parseConfig?’ hoặc ‘Việc hết hạn phiên đăng nhập được xử lý ở đâu?’ Sau đó mở kết quả &lt;code&gt;file.ext:line&lt;/code&gt; được trích dẫn và kiểm tra chúng so với cây trước mặt bạn.&lt;/li&gt;
&lt;li&gt;Chỉ sau khi các trích dẫn đã vượt qua thử thách tiếp xúc đó, bạn mới để agent chỉnh sửa.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Nếu repo đầu tiên phù hợp tốt và cây của bạn lớn, hãy tăng không gian làm việc để khớp với số dòng đã lập chỉ mục và nhịp độ xây dựng lại của bạn. Con người và agent chia sẻ cùng một số lượng người dùng — Maguyva tính phí theo không gian làm việc, không theo chỗ ngồi — vì vậy việc thêm một agent thứ ba vào vòng lặp không tốn gì của bạn.&lt;/p&gt;
&lt;p&gt;Bài kiểm tra kích hoạt giống hệt với những gì &lt;a href=&quot;https://maguyva.ai/vi/docs&quot;&gt;tài liệu&lt;/a&gt; khuyến nghị cho bất kỳ lần chạy đầu tiên nào: lập chỉ mục một repo mà bạn đã biết, đặt một câu hỏi bạn có thể xác minh. Một repo lớn không thay đổi bài kiểm tra; nó chỉ làm cho một file đầu tiên sai trở nên tốn kém hơn.&lt;/p&gt;
&lt;h2 id=&quot;những-gì-cần-theo-dõi-sau-khi-kết-nối&quot;&gt;Những gì cần theo dõi sau khi kết nối&lt;/h2&gt;
&lt;p&gt;Hãy để mắt đến ba điều. Độ mới: các gói trả phí xây dựng lại hàng giờ, các gói miễn phí hàng ngày, và công việc cục bộ chưa push sẽ không có trong bản đồ — đó là sự đánh đổi bạn chấp nhận. Phạm vi: lập chỉ mục một tập hợp repo đại diện, không phải mọi fork đã lưu trữ; tầng miễn phí được cố tình định cỡ để tìm hiểu xem các câu trả lời có đáng giữ lại hay không. Và xác minh: một bản đồ repo lớn không thể trích dẫn đường dẫn và số dòng chỉ là một cỗ máy đoán chậm hơn, vì vậy hãy để agent của bạn cho thấy vị trí trước khi nó giao bản vá.&lt;/p&gt;
&lt;p&gt;Sau đó chạy cùng bài kiểm tra mà bạn sẽ chạy trên một repo nhỏ. Lập chỉ mục một repo mà bạn đã biết. Đặt một câu hỏi bạn có thể xác minh. Nếu bản đồ là thật, agent của bạn sẽ ngừng bắt đầu từ một cây lạnh.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;// no laptop got hot building this map.&lt;/code&gt;&lt;/p&gt;
</content:encoded><category>AI Agents</category><category>MCP</category><category>Indexing</category><category>Monorepos</category></item><item><title>Tại sao coding agent AI của bạn bị ảo giác đường dẫn file</title><link>https://maguyva.ai/vi/blog/why-ai-coding-agents-hallucinate-file-paths</link><guid isPermaLink="true">https://maguyva.ai/vi/blog/why-ai-coding-agents-hallucinate-file-paths</guid><description>Các coding agent AI bịa ra đường dẫn file khi chúng không có bản đồ thực sự của repo. Đây là lý do tại sao điều đó xảy ra, và cách đặt nền tảng dẫn đến ít thay đổi bị ảo giác hơn.</description><pubDate>Fri, 14 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Dấu hiệu không phải là một phần thân function sai. Đó là một thay đổi tự tin vào một file không tồn tại, hoặc vào một file tồn tại nhưng không phải là file triển khai hành vi.&lt;/p&gt;
&lt;p&gt;Bạn đã yêu cầu sửa việc hết hạn phiên. Agent đã mở &lt;code&gt;src/auth/session.ts&lt;/code&gt;. Đường dẫn đó hợp lý. Nó cũng sai. Handler thực sự sống trong &lt;code&gt;apps/api/src/middleware/expiry.ts&lt;/code&gt;, được đổi tên hai lần tái cấu trúc trước. Agent không nói dối bạn. Nó đã hoàn thành một chuỗi có hình dạng đường dẫn dựa trên các tiền đề huấn luyện cộng với bất cứ thứ gì đã có sẵn trong cửa sổ ngữ cảnh.&lt;/p&gt;
&lt;p&gt;Đây là mô hình thất bại phổ biến trên một repository thực sự. Model biết viết code. Sai lầm là ở việc chọn sai nơi để viết nó.&lt;/p&gt;
&lt;h2 id=&quot;tại-sao-agent-bịa-ra-đường-dẫn&quot;&gt;Tại sao agent bịa ra đường dẫn&lt;/h2&gt;
&lt;p&gt;Một coding agent là một model dự đoán token tiếp theo có công cụ. Khi bạn nói ‘sửa việc hết hạn phiên’, nó phải đặt tên một file trước khi có thể đọc hoặc vá bất cứ thứ gì. Nếu nó chưa có một bản đồ có căn cứ, nó xây dựng một đường dẫn từ:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Các quy ước đặt tên mà nó đã thấy trong các repository khác. &lt;code&gt;src/auth/session.ts&lt;/code&gt; là một hình dạng phổ biến.&lt;/li&gt;
&lt;li&gt;Các file đã có trong cuộc hội thoại, có thể là những file bạn đã dán tuần trước, không phải những file quan trọng bây giờ.&lt;/li&gt;
&lt;li&gt;Các danh sách thư mục mà nó tình cờ chạy, không đầy đủ trên một cây lớn.&lt;/li&gt;
&lt;li&gt;Các file hướng dẫn. &lt;code&gt;CLAUDE.md&lt;/code&gt; và &lt;code&gt;AGENTS.md&lt;/code&gt; cho agent biết cách hành xử. Chúng không phải là một chỉ mục sống của các symbol, người gọi, hoặc các đường dẫn hiện tại.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Không nguồn nào trong số này là một bản đồ của repo này, hôm nay. Model lấp đầy khoảng trống theo cùng cách nó lấp đầy bất kỳ khoảng trống nào: bằng một sự tiếp nối có xác suất cao. Sự tiếp nối đó thường trông giống như một đường dẫn thật. Đôi khi file tồn tại và nằm cạnh file đúng. Đôi khi nó tồn tại trên một branch đã được merge tháng trước. Đôi khi nó chưa bao giờ tồn tại.&lt;/p&gt;
&lt;p&gt;Grep không cứu bạn ở đây nếu agent không bao giờ tìm kiếm đúng chuỗi. Agent đã đoán một đường dẫn, sau đó đọc những gì đường dẫn đó trả về, sau đó chỉnh sửa nó. Bước sai đầu tiên là đường dẫn, không phải bản vá.&lt;/p&gt;
&lt;p&gt;Đọc file cũng không giống với việc tìm đúng file. Claude Code, Cursor, Codex, và các công cụ tương tự có thể mở bất cứ thứ gì bạn chỉ chúng vào. Câu hỏi là liệu chúng có tìm thấy một cách đáng tin cậy các file đúng, các symbol quan trọng, các phụ thuộc, các test, và phạm vi ảnh hưởng trước khi chỉnh sửa hay không. Việc truy cập file mà không có bản đồ vẫn bắt đầu bằng một sự đoán mò.&lt;/p&gt;
&lt;h2 id=&quot;chỉnh-sửa-sai-file-là-một-vấn-đề-truy-xuất&quot;&gt;Chỉnh sửa sai file là một vấn đề truy xuất&lt;/h2&gt;
&lt;p&gt;Hãy coi đường dẫn bịa ra như một sai sót truy xuất, không phải là một khiếm khuyết về tính cách.&lt;/p&gt;
&lt;p&gt;Nếu agent phải trả về &lt;code&gt;path/file.ext:line&lt;/code&gt; trước khi được phép chỉnh sửa, hai điều sẽ xảy ra. Thứ nhất, bạn có thể mở trích dẫn và từ chối công việc đó trong mười giây. Thứ hai, agent sẽ phải truy vấn thứ gì đó thực sự biết cây.&lt;/p&gt;
&lt;p&gt;Đó là công việc của một lớp ngữ cảnh codebase. Chỉ tìm kiếm ngữ nghĩa thôi là không đủ. Một đoạn ‘nghe giống việc hết hạn phiên’ vẫn có thể hạ cánh trong một package đã lỗi thời. Bạn cũng cần văn bản chính xác khi bạn biết chuỗi, tìm kiếm symbol khi bạn biết tên, tìm kiếm cấu trúc khi bạn biết hình dạng, và một đồ thị phụ thuộc khi bạn cần người gọi và phạm vi ảnh hưởng.&lt;/p&gt;
&lt;p&gt;Maguyva là lớp đó cho các coding agent tương thích MCP. Đó không phải là một editor. Claude Code, Cursor, Codex CLI, VS Code, Windsurf, và các client MCP khác vẫn ở nguyên vị trí của chúng. Agent truy vấn một bản đồ được xếp hạng trước khi chạm vào một dòng.&lt;/p&gt;
&lt;p&gt;Tuyên bố này cố ý khiêm tốn: ít thay đổi bị ảo giác hơn. Maguyva không lấy đi khả năng đoán của model. Nó thay đổi bước đầu tiên mặc định từ ‘bịa ra một đường dẫn hợp lý’ thành ‘yêu cầu các vị trí được xếp hạng, được trích dẫn’.&lt;/p&gt;
&lt;h2 id=&quot;một-câu-trả-lời-có-căn-cứ-trông-như-thế-nào&quot;&gt;Một câu trả lời có căn cứ trông như thế nào&lt;/h2&gt;
&lt;p&gt;Một câu trả lời hữu ích cho câu hỏi ‘việc hết hạn phiên được xử lý ở đâu’ không phải là một đoạn văn. Đó là một danh sách ngắn các vị trí:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;apps/api/src/middleware/expiry.ts:48&lt;/code&gt; - handler&lt;/li&gt;
&lt;li&gt;&lt;code&gt;apps/web/src/lib/auth-client.ts:112&lt;/code&gt; - người gọi&lt;/li&gt;
&lt;li&gt;&lt;code&gt;apps/api/tests/expiry.test.ts:20&lt;/code&gt; - test sẽ thất bại nếu thay đổi sai&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Bạn có thể mở những dòng này. Nếu chúng sai, bạn dừng lại. Nếu chúng đúng, agent có thể chỉnh sửa. Việc xác minh mới là điều quan trọng, không phải một khẩu hiệu.&lt;/p&gt;
&lt;p&gt;Maguyva cung cấp 11 công cụ MCP hướng tới khách hàng trên khắp tìm kiếm, symbol, phân tích phụ thuộc, truy xuất file, ngữ cảnh repository, và các quy trình công cụ tiện ích tất định. Bốn chế độ truy xuất (ngữ nghĩa, cấu trúc, đồ thị/phụ thuộc, và văn bản) được hợp nhất thành kết quả được xếp hạng; tìm kiếm symbol là một công cụ MCP riêng biệt (&lt;code&gt;find_symbol&lt;/code&gt;). Các câu trả lời có căn cứ trở về kèm đường dẫn file và số dòng, để bạn có thể đánh giá chúng so với cây trước mặt bạn.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://maguyva.ai/vi/docs&quot;&gt;Tài liệu&lt;/a&gt; mô tả con đường ngắn nhất: bắt đầu miễn phí, lập chỉ mục một repo mà bạn đã biết, kết nối client, sau đó đặt một câu hỏi bạn có thể xác minh.&lt;/p&gt;
&lt;h2 id=&quot;một-vòng-lặp-thay-đổi-lần-chỉnh-sửa-đầu-tiên&quot;&gt;Một vòng lặp thay đổi lần chỉnh sửa đầu tiên&lt;/h2&gt;
&lt;p&gt;Bạn không cần một tôn giáo quy trình làm việc mới. Bạn cần thêm một bước trước lần viết đầu tiên.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Đặt một câu hỏi bạn đã có thể đánh giá. ‘Code nào xử lý đăng nhập và hết hạn phiên?’ tốt hơn ‘sửa auth’.&lt;/li&gt;
&lt;li&gt;Yêu cầu trích dẫn. Đường dẫn file và số dòng, không phải một bản tóm tắt của ‘module auth’.&lt;/li&gt;
&lt;li&gt;Mở các file được trích dẫn. Theo dõi symbol. Xác nhận phụ thuộc mà bạn sắp chạm vào.&lt;/li&gt;
&lt;li&gt;Chỉ khi đó mới để agent vá lỗi.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Nếu bước 2 không trả về bất cứ điều gì hữu ích, agent không có quyền tự ứng biến một đường dẫn. Nó tìm kiếm lại, hoặc bạn chỉ cho nó. Chính cánh cổng duy nhất đó tạo ra ít thay đổi bị ảo giác hơn. Model vẫn là model đó. Bản đồ là thứ đã thay đổi.&lt;/p&gt;
&lt;p&gt;Các file hướng dẫn vẫn quan trọng. Giữ chúng. Sử dụng chúng cho các quy ước, quy tắc xem xét, và những gì không nên chạm vào. Đừng yêu cầu chúng trở thành chỉ mục. Một &lt;code&gt;CLAUDE.md&lt;/code&gt; liệt kê ba thư mục quan trọng sẽ lỗi thời một tuần sau khi tách package. Một bản đồ có thể truy vấn được cập nhật khi repo được cập nhật.&lt;/p&gt;
&lt;p&gt;Một thất bại liên quan là file gần đúng: agent mở &lt;code&gt;auth.ts&lt;/code&gt; trong khi hành vi sống trong &lt;code&gt;auth-client.ts&lt;/code&gt;, hoặc vá một file được tạo ra thay vì nguồn, hoặc chỉnh sửa bản sao trong &lt;code&gt;packages/legacy&lt;/code&gt; vì tên khớp. Trích dẫn không làm cho những lỗi này trở nên bất khả thi. Chúng làm cho những lỗi này trở nên rõ ràng trước khi diff hạ cánh.&lt;/p&gt;
&lt;h2 id=&quot;những-gì-một-bản-đồ-sẽ-không-sửa-cho-bạn&quot;&gt;Những gì một bản đồ sẽ không sửa cho bạn&lt;/h2&gt;
&lt;p&gt;Hãy tỉnh táo về những gì bạn đang nhận được. Một bản đồ có căn cứ sẽ không làm cho mọi thay đổi đều đúng — agent của bạn vẫn có thể viết một bản vá tồi ngay trong file hoàn toàn đúng. Nếu codebase của bạn dựa vào dispatch động, reflection, hoặc monkey-patching, một số tìm kiếm symbol sẽ trả về kết quả mỏng hơn bạn mong muốn, vì đó là điều mà tính gián tiếp thời gian chạy làm với bất kỳ chỉ mục tĩnh nào. Và nếu bạn hy vọng vào một tỷ lệ phần trăm — ‘đường dẫn bị ảo giác giảm X%’ — bạn sẽ không tìm thấy nó ở đây, vì không ai có thể đo lường trung thực con số đó cho repo của bạn ngoài chính bạn.&lt;/p&gt;
&lt;p&gt;Những gì bạn có thể mong đợi hẹp hơn và hữu ích hơn: agent ngừng bắt đầu các thay đổi của nó bằng một đường dẫn được đoán. Bước đầu tiên đó trở nên có căn cứ trong một bản đồ thực sự, và đó là nơi ít thay đổi bị ảo giác hơn đến từ. Mọi thứ sau trích dẫn — đọc diff, đánh giá bản vá — vẫn là công việc của bạn, giống như nó luôn từng như vậy.&lt;/p&gt;
&lt;p&gt;Bài kiểm tra này gần như không tốn kém gì của bạn: lập chỉ mục một repo mà bạn đã biết và đặt một câu hỏi bạn có thể xác minh. Bắt đầu với một đường dẫn mà bạn đã từng bị ‘bỏng’. Nếu các trích dẫn sai, bạn sẽ thấy ngay lập tức. Nếu chúng đúng, thay đổi tiếp theo của agent bạn có một nơi tốt hơn để hạ cánh.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;// it doesn&apos;t know the file. it knows how to find it.&lt;/code&gt;&lt;/p&gt;
</content:encoded><category>AI Agents</category><category>Hallucination</category><category>Retrieval</category><category>MCP</category></item><item><title>Vì sao chúng tôi nâng cấp tìm kiếm mã nguồn lên voyage-4-large</title><link>https://maguyva.ai/vi/blog/upgrading-code-search-to-voyage-4-large</link><guid isPermaLink="true">https://maguyva.ai/vi/blog/upgrading-code-search-to-voyage-4-large</guid><description>Chúng tôi chuyển embedding mã nguồn sang voyage-4-large — hiện đang dẫn đầu bảng xếp hạng công khai RTEB cho truy xuất mã nguồn. Phiên bản thành thật: sự đánh đổi chúng tôi chấp nhận, những gì chúng tôi thực sự lập chỉ mục, và vì sao chúng tôi trả tiền cho embedding cao cấp.</description><pubDate>Tue, 09 Jun 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Các con số benchmark trong bài này phản ánh bảng xếp hạng RTEB tại thời điểm xuất bản (tháng 6/2026). Bảng xếp hạng luôn thay đổi; hãy xem các thứ hạng này như một lát cắt thời điểm, không phải một sự thật vĩnh viễn.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Tìm kiếm ngữ nghĩa chỉ tốt bằng đúng lớp embedding nằm bên dưới nó.&lt;/p&gt;
&lt;p&gt;Khi một agent hỏi Maguyva “chúng ta xử lý retry ở đâu,” nó không grep tìm từ “retry.” Nó đang hỏi về &lt;em&gt;ý nghĩa&lt;/em&gt; — vòng lặp backoff, circuit breaker, thứ bọc quanh một lệnh gọi chập chờn. Câu hỏi đó được trả lời bởi một mô hình vector biến mã nguồn thành một điểm trong không gian rồi tìm các điểm lân cận. Chọn một mô hình tốt hơn và mọi truy vấn ngữ nghĩa trong sản phẩm sẽ âm thầm trở nên sắc bén hơn.&lt;/p&gt;
&lt;p&gt;Vì vậy chúng tôi đã đổi mô hình của mình. Kể từ tháng 6/2026, embedding mã nguồn của Maguyva chạy trên &lt;strong&gt;&lt;code&gt;voyage-4-large&lt;/code&gt;&lt;/strong&gt;, thay thế &lt;code&gt;voyage-code-3&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&quot;benchmark&quot;&gt;Benchmark&lt;/h2&gt;
&lt;p&gt;Chúng tôi không đưa ra quyết định này dựa trên cảm tính. &lt;a href=&quot;https://embedding-benchmark-rteb.hf.space/code&quot;&gt;Retrieval Embedding Benchmark (RTEB)&lt;/a&gt; công khai xếp hạng các mô hình embedding trên các tác vụ truy xuất thực tế, và trên bảng xếp hạng &lt;strong&gt;Code&lt;/strong&gt; của nó, &lt;code&gt;voyage-4-large&lt;/code&gt; đứng ở vị trí &lt;strong&gt;#1 tổng thể (90,86)&lt;/strong&gt; — vượt qua &lt;code&gt;gemini-embedding-2-preview&lt;/code&gt; (90,26) và, đáng chú ý, vượt qua cả mô hình chúng tôi đang dùng, &lt;code&gt;voyage-code-3&lt;/code&gt; (89,73, #3).&lt;/p&gt;
&lt;p&gt;Đó là một khoảng cách tuyệt đối nhỏ. Nhưng đó là khoảng cách đúng hướng, trên một benchmark công khai, đúng vào tác vụ chúng tôi quan tâm: truy xuất mã nguồn theo ý nghĩa.&lt;/p&gt;
&lt;h2 id=&quot;sự-đánh-đổi-chúng-tôi-chấp-nhận-lượng-tử-hóa-nhị-phân&quot;&gt;Sự đánh đổi chúng tôi chấp nhận: Lượng tử hóa nhị phân&lt;/h2&gt;
&lt;p&gt;Đây là phần mà hầu hết các bài viết kiểu “chúng tôi đã nâng cấp mô hình” thường bỏ qua.&lt;/p&gt;
&lt;p&gt;Maguyva không lưu trữ vector độ chính xác đầy đủ. Chúng tôi lưu embedding đã &lt;strong&gt;lượng tử hóa nhị phân&lt;/strong&gt;: mỗi vector 2048 chiều được nén thành một chữ ký 2048-bit — &lt;strong&gt;256 byte cho mỗi vector&lt;/strong&gt;. Những chữ ký đó được tìm kiếm bằng khoảng cách Hamming, được lập chỉ mục và phân vùng theo từng tenant.&lt;/p&gt;
&lt;p&gt;Đó là một sự đánh đổi có chủ đích. Lượng tử hóa nhị phân từ bỏ một phần độ chính xác truy xuất để đổi lấy dung lượng lưu trữ nhỏ hơn đáng kể và phép tính khoảng cách nhanh, rẻ, không cần vận hành một cơ sở dữ liệu vector riêng biệt. Với một sản phẩm lập chỉ mục toàn bộ repo cho từng workspace, bài toán kinh tế đó quan trọng hơn việc vắt kiệt phần lẻ cuối cùng của một điểm benchmark.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;voyage-4-large&lt;/code&gt; phù hợp với thiết kế này mà không buộc phải di trú tầng lưu trữ: nó cho ra đầu ra 2048 chiều, giống như &lt;code&gt;voyage-code-3&lt;/code&gt;, nên các cột &lt;code&gt;bit(2048)&lt;/code&gt; và đường tìm kiếm Hamming của chúng tôi không phải thay đổi. Mô hình tốt hơn; schema vẫn giữ nguyên.&lt;/p&gt;
&lt;h2 id=&quot;mã-nguồn-chỉ-là-khởi-đầu&quot;&gt;Mã nguồn chỉ là khởi đầu&lt;/h2&gt;
&lt;p&gt;Maguyva là một công cụ trí tuệ mã nguồn. Nhưng chúng tôi cũng là khách hàng số 0 của chính mình, và chúng tôi hướng nó vào một thứ khác: các file markdown sống cùng mã nguồn trong repo của chúng tôi. Bản ghi quyết định kiến trúc, runbook, hợp đồng, tài liệu tài chính và chính sách — tất cả đều được quản lý phiên bản trong Git, tất cả đều nằm sau cùng một máy chủ MCP, một chỉ mục ngữ nghĩa trên &lt;em&gt;tài liệu&lt;/em&gt;, không chỉ trên mã nguồn.&lt;/p&gt;
&lt;p&gt;Đó chính xác là lý do vì sao độ rộng của voyage-4-large quan trọng. Trên cùng họ bảng xếp hạng RTEB đó, nó là &lt;strong&gt;#1 về tài chính, #1 về y tế, và #1 về truy xuất văn bản tổng thể&lt;/strong&gt; — vượt qua Gemini Embedding của Google, Embed v4 của Cohere, và text-embedding-3-large của OpenAI. (Voyage là đồng sáng lập của RTEB, nên chúng tôi xem đây là một tín hiệu công khai mạnh mẽ hơn là một trọng tài hoàn toàn trung lập — nhưng nó vẫn được đối chiếu trực tiếp với mọi mô hình thương mại lớn, trên các tập dữ liệu giữ riêng.) Cùng một chỉ mục tìm ra đúng hàm cho một agent cũng tìm ra đúng điều khoản trong một hợp đồng hoặc đúng dòng trong một chính sách — và trên những lĩnh vực đó, voyage-4-large không phải là một sự thỏa hiệp, nó là kẻ dẫn đầu.&lt;/p&gt;
&lt;h2 id=&quot;vì-sao-chúng-tôi-trả-tiền-cho-embedding-cao-cấp&quot;&gt;Vì sao chúng tôi trả tiền cho embedding cao cấp&lt;/h2&gt;
&lt;p&gt;Có một cách rẻ hơn để làm tìm kiếm, và phần lớn trong đó là miễn phí. Tìm kiếm từ vựng — BM25 và họ hàng của nó — khớp từ khóa, chạy cục bộ, và không tốn chi phí gì. Các mô hình embedding mã nguồn mở như BGE, Nomic, và embeddinggemma cho khả năng truy xuất ngữ nghĩa thực sự &lt;em&gt;khá tốt&lt;/em&gt;, và bạn có thể tự host chúng với giá của một GPU. Maguyva cũng dùng phía miễn phí: mỗi truy vấn đều hợp nhất tìm kiếm văn bản, AST, đồ thị, và ngữ nghĩa. Thứ chúng tôi không tiết kiệm là tầng ngữ nghĩa.&lt;/p&gt;
&lt;p&gt;Chúng tôi trả tiền theo token cho embedding cao cấp — &lt;code&gt;voyage-4-large&lt;/code&gt; — thay vì tự host một mô hình miễn phí, vì hai lý do. Thứ nhất, tìm kiếm từ khóa đơn thuần không thể trả lời “chúng ta xử lý retry ở đâu” khi mã nguồn viết &lt;code&gt;backoff&lt;/code&gt; và &lt;code&gt;circuit breaker&lt;/code&gt; mà chẳng bao giờ dùng từ “retry” — ý nghĩa chính là toàn bộ mục đích của embedding, và trên các lĩnh vực chúng tôi phục vụ, các mô hình mở tụt lại phía sau các mô hình cao cấp: kém vài điểm trên văn bản tổng quát, và kém xa hơn ở các lĩnh vực ngách như mã nguồn, hợp đồng, và tài chính. Thứ hai, theo kinh nghiệm của chúng tôi, chất lượng truy xuất định hình câu trả lời cuối cùng nhiều hơn là mô hình ở đầu bên kia — một agent mạnh được đưa sai ngữ cảnh vẫn trả lời sai, và nó không bao giờ thấy được tài liệu mà nó chưa từng được đưa cho.&lt;/p&gt;
&lt;p&gt;Vì vậy embedding cao cấp là một hóa đơn tính theo token, tăng theo mỗi repo và tài liệu chúng tôi lập chỉ mục — và chúng tôi trả nó một cách có chủ đích. Đối với kết quả mà người dùng của chúng tôi nhận được, đúng hàm hoặc đúng điều khoản, chúng tôi nghĩ sự đánh đổi đó là xứng đáng.&lt;/p&gt;
&lt;h2 id=&quot;phần-thành-thật&quot;&gt;Phần thành thật&lt;/h2&gt;
&lt;p&gt;Tài liệu chính thức của Voyage vẫn gắn nhãn &lt;code&gt;voyage-code-3&lt;/code&gt; là mô hình tối ưu cho mã nguồn. Vậy tại sao lại chuyển đổi?&lt;/p&gt;
&lt;p&gt;Vì chúng tôi đọc benchmark công khai, chứ không chỉ bảng mô hình của nhà cung cấp, và benchmark đặt &lt;code&gt;voyage-4-large&lt;/code&gt; lên vị trí đầu bảng cho truy xuất mã nguồn. Đây là một quyết định hướng đến tương lai: chọn mô hình mới hơn, nhìn chung mạnh hơn, và xác thực nó dựa trên một bảng xếp hạng công khai cho các tác vụ thực sự quan trọng. Chúng tôi yên tâm với lựa chọn này vì bằng chứng khá rộng — voyage-4-large không chỉ thắng ở mã nguồn, nó còn dẫn đầu ở tài chính, y tế, và truy xuất tổng thể.&lt;/p&gt;
&lt;h2 id=&quot;nền-tảng-thầm-lặng&quot;&gt;Nền tảng thầm lặng&lt;/h2&gt;
&lt;p&gt;Mọi công cụ chúng tôi cung cấp — tìm kiếm ngữ nghĩa, thu thập ngữ cảnh tác vụ, hỏi đáp có căn cứ — cuối cùng đều quy về khâu truy xuất. Khi bộ truy xuất được cải thiện, agent ở đầu bên kia nhận được bằng chứng tốt hơn, ít đưa ra quyết định sai hơn, và neo câu trả lời của mình vào đúng mã nguồn — hoặc đúng điều khoản, hoặc đúng chính sách. Một mô hình embedding sắc bén hơn không phải là một tính năng phô trương. Nó là nền tảng bên dưới mọi thứ khác, và chúng tôi vừa nâng nó lên. Bạn sẽ không nhận ra điều đó. Đó chính là mục đích.&lt;/p&gt;
</content:encoded><category>Embeddings</category><category>Search</category><category>Architecture</category></item><item><title>Tự cải thiện hỗ trợ ngôn ngữ theo vòng lặp: Mài giũa trí tuệ mã nguồn trên khoảng 280 ngôn ngữ</title><link>https://maguyva.ai/vi/blog/autonomous-quality-loops-language-grind</link><guid isPermaLink="true">https://maguyva.ai/vi/blog/autonomous-quality-loops-language-grind</guid><description>Chúng tôi hỗ trợ trí tuệ mã nguồn cho khoảng 280 ngôn ngữ. Không con người nào có thể tự tay rà soát hết được. Vì vậy chúng tôi xây dựng một vòng lặp tự cải thiện hỗ trợ ngôn ngữ — kiểm tra ngẫu nhiên, dùng LLM làm giám khảo, sửa từng thứ một, xác thực lại — và chạy nó với một đội quân agent cách ly cho đến khi việc trích xuất thực sự đúng, chứ không chỉ xanh (green).</description><pubDate>Tue, 26 May 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Các con số trong bài này phản ánh hệ thống tại thời điểm xuất bản (tháng 5/2026). Xem &lt;a href=&quot;https://maguyva.ai/vi/team&quot;&gt;trang team&lt;/a&gt; của chúng tôi để biết số liệu hiện tại.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Maguyva trích xuất symbol, tham chiếu, và một đồ thị phụ thuộc từ mã nguồn trong khoảng 280 ngôn ngữ. Mỗi ngôn ngữ là một handler tree-sitter tùy chỉnh — truy vấn, heuristic, trường hợp biên — và mỗi handler đều có thể sai một cách tinh vi theo cách riêng của nó. Một lệnh gọi method bị phát ra như một lượt đọc. Một hàm bị gán cho sai phạm vi bao quanh. Một quan hệ đơn giản là không tồn tại.&lt;/p&gt;
&lt;p&gt;Bạn không thể tự tay rà soát hết điều đó. Không đội nào có thể đọc kết quả trích xuất trên 280 ngữ pháp và phát hiện những cạnh (edge) sai. Vì vậy câu hỏi thú vị không phải là “việc trích xuất của chúng ta có đúng không” — mà là “làm sao bạn &lt;em&gt;phát hiện ra&lt;/em&gt; nó sai, ở quy mô này, mà không cần con người trong mọi vòng lặp.” Câu trả lời của chúng tôi là tự cải thiện hỗ trợ ngôn ngữ theo vòng lặp: một vòng lặp chất lượng được điều khiển bởi các language agent, một LLM đóng vai giám khảo, và một quy tắc chúng tôi liên tục học lại: xanh (green) không đồng nghĩa với đúng.&lt;/p&gt;
&lt;h2 id=&quot;xanh-không-có-nghĩa-là-đúng&quot;&gt;Xanh không có nghĩa là đúng&lt;/h2&gt;
&lt;p&gt;Mỗi ngôn ngữ có một bộ fixture, và một bước kiểm tra trước khi phát hành chấm điểm nó trên năm chiều — độ chính xác, tính toàn vẹn cấu trúc, độ đầy đủ, chất lượng, và hiệu năng. Một ngôn ngữ chỉ đạt &lt;strong&gt;XANH (GREEN)&lt;/strong&gt; khi, trên các fixture của nó, precision ≥ 0,95, recall ≥ 0,99, và F1 ≥ 0,97, với ít nhất 20 edge kỳ vọng để có độ tin cậy thống kê. Dưới mức đó là VÀNG (YELLOW) hoặc ĐỎ (RED), và nó không được lên sóng.&lt;/p&gt;
&lt;p&gt;Bước kiểm tra đó là cần thiết nhưng chưa đủ. Fixture được xác thực dựa trên các fixture &lt;em&gt;do chính chúng tôi viết&lt;/em&gt;. Chúng mã hóa những trường hợp chúng tôi đã nghĩ tới. Một handler có thể hoàn hảo trên các fixture của nó nhưng vẫn làm hỏng một mẫu chỉ xuất hiện trong mã thực tế — một cách dùng macro đặc thù, một method có ràng buộc kiểu generic, một tính năng ngôn ngữ mà chưa ai viết fixture cho nó. XANH nghĩa là các fixture đều đạt. Nó không có nghĩa là một repo thực tế được trích xuất sạch sẽ. Vì vậy vòng lặp phải bỏ lại các fixture và kiểm tra mã nguồn trong thực tế.&lt;/p&gt;
&lt;h2 id=&quot;vòng-lặp-trong-kiểm-tra-ngẫu-nhiên-phán-xét-sửa-chứng-minh&quot;&gt;Vòng lặp trong: kiểm tra ngẫu nhiên, phán xét, sửa, chứng minh&lt;/h2&gt;
&lt;p&gt;Vòng lặp cốt lõi chạy từng ngôn ngữ một:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        ┌──────────────────────────────────────────────────────────┐&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        │                                                          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        ▼                                                          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  1. corpus run ── clone real-world repos, extract relationships   │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        │                                                          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        ▼                                                          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  2. spot-check 100 edges (seed 42, then seed 123 to cross-check)  │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        │                                                          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        ▼                                                          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  3. LLM judge classifies every sampled edge:                      │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        CORRECT · FALSE_POSITIVE · TYPE_ERROR ·                    │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        SCOPE_ERROR · METADATA_ERROR                               │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        │                                                          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        ▼                                                          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  4. fix ONE thing — handler .py, .scm query, or config           │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        │                                                          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        ▼                                                          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  5. re-validate — F1 + re-classify + manifest diff (no regressions)│&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        │                                                          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   better? ──no──► revert, try a different fix ────────────────────┤&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        │ yes                                                       │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        ▼                                                           │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  6. promote the fix into fixtures (a permanent regression guard) ──┘&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Có vài điều khiến cách này thực sự hiệu quả thay vì chỉ quẫy đạp vô ích.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Giám khảo là agent, không phải một lệnh gọi API.&lt;/strong&gt; Khi chúng tôi nói “LLM làm giám khảo,” chúng tôi có ý là chính language agent đọc từng edge được lấy mẫu, đối chiếu với mã nguồn thực, và phân loại nó theo một rubric cố định gồm năm hạng mục: edge này đúng, là dương tính giả, là đúng quan hệ nhưng sai loại, gắn sai phạm vi, hay mang sai metadata? Rubric đó là yếu tố then chốt — “tỷ lệ lỗi 23%” vô nghĩa cho đến khi bạn biết liệu đó có phải là lỗi thực sự hay là giám khảo đếm sai.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Sửa một thứ, rồi chứng minh nó.&lt;/strong&gt; Mỗi lần lặp thay đổi đúng một thành phần có thể chỉnh sửa, sau đó chạy lại trên một bộ kiểm thử (harness) cố định và chỉ giữ lại thay đổi nếu F1 cải thiện và việc phân loại lại trông tốt hơn. Nếu không, nó bị hoàn tác. Không có lô chỉnh sửa mang tính suy đoán, không có kiểu “chắc sẽ tốt hơn.” Một thay đổi phải giành được vị trí của nó hoặc biến mất. Và khi một bản sửa đứng vững, nó được đưa vào bộ fixture — để lỗi mà nó sửa không bao giờ có thể âm thầm quay lại. Bước thăng cấp đó chính là điều khiến vòng lặp &lt;em&gt;đệ quy&lt;/em&gt; chứ không chỉ đơn thuần lặp lại: mỗi lượt chạy củng cố bộ chuẩn tham chiếu (oracle) mà lượt chạy tiếp theo sẽ xác thực dựa vào.&lt;/p&gt;
&lt;h2 id=&quot;bài-học-chúng-tôi-liên-tục-học-lại-các-chỉ-số-báo-cáo-thổi-phồng&quot;&gt;Bài học chúng tôi liên tục học lại: các chỉ số báo cáo thổi phồng&lt;/h2&gt;
&lt;p&gt;Đây là cái bẫy, và chúng tôi đã đi thẳng vào nó. Các chỉ số corpus phụ — tần suất một đích được trích xuất không có symbol có thể phân giải, bao nhiêu symbol trông “mồ côi,” v.v. — báo cáo thổi phồng vấn đề một cách khủng khiếp. Chúng phần lớn là &lt;em&gt;hệ quả đặc thù của mô hình lập trình (paradigm)&lt;/em&gt;, không phải lỗi.&lt;/p&gt;
&lt;p&gt;Ví dụ rõ ràng nhất: &lt;code&gt;llvm&lt;/code&gt; từng cho thấy tỷ lệ “nguồn không có symbol” là 73% và bị gắn nhãn thảm họa. Chúng tôi đào sâu vào. Độ chính xác thực sự là &lt;strong&gt;98,5%&lt;/strong&gt;. Những “symbol thiếu” đó gần như toàn bộ là các tham chiếu bên ngoài hợp lệ — lệnh gọi vào thư viện chuẩn, vào framework, vào mã nằm ngoài repo. Chỉ số đó đang đo một đặc tính của ngôn ngữ, không phải một lỗi trong handler. Các ngôn ngữ như Zig, COBOL, và Odin cho tỷ lệ “mồ côi” 65–70% và hoàn toàn đúng; COBOL không có lỗi thực sự nào.&lt;/p&gt;
&lt;p&gt;Nếu chúng tôi để những con số đó dẫn dắt công việc, chúng tôi đã tốn hàng tuần “sửa” các handler vốn đã đúng và bỏ qua những ngôn ngữ có lỗi thực sự nhưng thầm lặng. Kết luận rất thẳng thắn: các chỉ số tổng hợp cùng lắm chỉ là một tín hiệu phân loại sơ bộ. &lt;strong&gt;Tín hiệu chất lượng thực sự là kiểm tra ngẫu nhiên kèm phân loại edge&lt;/strong&gt; — nhìn vào các edge thực tế trong các repo thực tế và phán xét từng cái một. Dữ liệu hơn trực giác, nhưng chỉ khi bạn biết dữ liệu nào đang nói thật.&lt;/p&gt;
&lt;h2 id=&quot;vòng-lặp-ngoài-một-đội-quân-không-phải-một-cuộc-marathon&quot;&gt;Vòng lặp ngoài: một đội quân, không phải một cuộc marathon&lt;/h2&gt;
&lt;p&gt;Làm từng ngôn ngữ một sẽ mất mãi mãi trên cả 280 ngôn ngữ, nên vòng lặp trong được bọc trong một vòng lặp ngoài chạy nhiều ngôn ngữ song song.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   pick a wave of near-GREEN / high-error languages&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        ▼&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   fan out 10–15 agents, each ISOLATED in its own git worktree,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   each grinding ONE language, committing to its own branch&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        ▼&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   orchestrator integrates serially: file-scoped apply, then&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   `manifest diff` — any cross-language regression blocks the batch&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        ▼&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   gated push (reviewed and confirmed) ──► rotate to the next wave&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Mỗi agent làm việc trong một worktree dùng một lần để chúng không thể giẫm chân lên nhau. Orchestrator tích hợp các bản sửa của chúng từng cái một, mỗi cái đứng sau một lượt kiểm tra hồi quy toàn bộ manifest: một thay đổi giúp ích cho ngôn ngữ của chính nó nhưng âm thầm phá vỡ ba ngôn ngữ khác sẽ không được lên sóng. Việc tích hợp được kiểm soát qua cổng và xác nhận trước khi bất cứ thứ gì được đẩy lên — bước kiểm tra hồi quy quyết định cái gì &lt;em&gt;an toàn&lt;/em&gt;, con người vẫn quyết định cái gì &lt;em&gt;được lên sóng&lt;/em&gt;. Sau đó nhóm agent xoay vòng sang tập ngôn ngữ tiếp theo và toàn bộ quá trình lại chạy lại.&lt;/p&gt;
&lt;h2 id=&quot;những-gì-vẫn-chưa-hoàn-hảo&quot;&gt;Những gì vẫn chưa hoàn hảo&lt;/h2&gt;
&lt;p&gt;Giám khảo có thể sai, và sự sai lệch có một hướng: một agent chạy với quá ít ngữ cảnh sẽ &lt;em&gt;báo cáo thổi phồng&lt;/em&gt;. Trong một lô, tám ngôn ngữ bị gắn cờ với 5–20% lỗi; khi kiểm tra kỹ, chỉ một trong số những ngôn ngữ đó thực sự có lỗi — phần còn lại là sai sót của giám khảo do bỏ lỡ ngữ nghĩa riêng của ngôn ngữ đó (một dòng nguồn hợp lệ phát ra nhiều edge, việc liên kết tham số với giá trị được mô hình hóa như phép gán, các ngôn ngữ tham chiếu-theo-từng-định-danh). Đó là lý do chúng tôi lấy mẫu với hai seed và đối chiếu chéo, và vì sao sự bất đồng giữa giám khảo và fixture được xem là tín hiệu thú vị &lt;em&gt;nhất&lt;/em&gt;, không phải một phán quyết đã chốt — đôi khi chính fixture mới là thứ sai.&lt;/p&gt;
&lt;p&gt;Chúng tôi cũng thành thật về mục tiêu. Mục tiêu là zero lỗi thực sự, chấm hết — nhưng “zero” là một hướng đi mà chúng tôi mài giũa dần, từng ngôn ngữ một, không phải một ô được đánh dấu xong. Luôn luôn có một repo khác với một cách viết mã đặc thù khác.&lt;/p&gt;
&lt;h2 id=&quot;chứng-minh-bằng-thực-tế-không-khẳng-định-suông&quot;&gt;Chứng minh bằng thực tế, không khẳng định suông&lt;/h2&gt;
&lt;p&gt;Mọi thứ Maguyva làm cho một agent — tìm một symbol, theo dõi một phụ thuộc, trả lời một câu hỏi với mã được trích dẫn — đều dựa vào việc trích xuất bên dưới là đúng. Trên 280 ngôn ngữ, “đúng” không thể chỉ khẳng định suông; nó phải liên tục được &lt;em&gt;chứng minh&lt;/em&gt; bằng mã thực tế. Vòng lặp là cách chúng tôi giành được điều đó: một chu trình kiểm tra-và-sửa tự động luôn nghi ngờ chính các chỉ số của mình, chứng minh mọi thay đổi, và biến mỗi bản sửa thành một lớp bảo vệ chống lại lần hồi quy tiếp theo. Nó không hào nhoáng. Đó là công việc cho phép chúng tôi nói “chúng tôi hỗ trợ ngôn ngữ của bạn” và thực sự có ý đó. Xanh thì dễ. Muốn đúng thì phải bỏ công chứng minh.&lt;/p&gt;
</content:encoded><category>Architecture</category><category>Languages</category><category>Agents</category></item><item><title>Tìm kiếm hợp nhất đa phương thức: Chọn đúng bộ truy xuất cho mọi truy vấn</title><link>https://maguyva.ai/vi/blog/multi-modal-fusion-search</link><guid isPermaLink="true">https://maguyva.ai/vi/blog/multi-modal-fusion-search</guid><description>Một truy vấn như &apos;parseConfig được định nghĩa ở đâu&apos; cần một kiểu tìm kiếm khác với &apos;auth hoạt động như thế nào&apos;. Maguyva phân loại ý định, gán trọng số cho bốn phương thức truy xuất tương ứng, và hợp nhất kết quả bằng Reciprocal Rank Fusion có trọng số.</description><pubDate>Wed, 15 Apr 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;Ghi chú về thiết kế trước đây: bài viết tháng 4 năm 2026 này mô tả thiết kế định tuyến tại thời điểm đó, không phải hành vi mặc định hiện tại. Phần đính chính tháng 9 bên dưới chỉ xử lý một tuyên bố về đo lường. Để biết định tuyến hiện tại, các cấu hình có sẵn và cách điều khiển tường minh từng phương thức truy xuất, xem &lt;a href=&quot;https://maguyva.ai/vi/docs/how-it-works&quot;&gt;Cách hoạt động&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Một truy vấn tìm kiếm không phải là một thứ duy nhất.&lt;/p&gt;
&lt;p&gt;“&lt;code&gt;parseConfig&lt;/code&gt; được định nghĩa ở đâu” muốn một symbol chính xác — một vị trí chuẩn xác, thật nhanh. “authentication hoạt động như thế nào” muốn ý nghĩa — sự trải rộng của mã liên quan giải thích một khái niệm. “điều gì sẽ hỏng nếu tôi thay đổi hàm này” muốn đồ thị phụ thuộc. “tìm chuỗi &lt;code&gt;ECONNREFUSED&lt;/code&gt;” muốn một khớp nguyên văn, không cần thông minh gì cả.&lt;/p&gt;
&lt;p&gt;Grep rất xuất sắc cho các khớp nguyên văn và hữu ích cho một số cuộc săn tìm tham chiếu, nhưng nó không phải là đồ thị phụ thuộc và không hiểu ý nghĩa. Embedding bao phủ phía ngữ nghĩa, nhưng chúng là công cụ sai cho chuỗi chính xác và phân tích tác động. Hầu hết các công cụ tìm kiếm mã nguồn chọn một engine duy nhất và bắt mọi truy vấn phải sống với lựa chọn đó. Maguyva không chọn một. Nó tìm ra loại câu hỏi bạn vừa đặt, rồi pha trộn bốn bộ truy xuất theo đúng tỷ lệ mà câu hỏi đó xứng đáng.&lt;/p&gt;
&lt;h2 id=&quot;bốn-phương-thức&quot;&gt;Bốn phương thức&lt;/h2&gt;
&lt;p&gt;Bên dưới có bốn cách độc lập để tìm mã nguồn:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;ngữ nghĩa (semantic)&lt;/strong&gt; — tìm kiếm vector trên embedding nhị phân của Voyage; tìm mã theo ý nghĩa.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;văn bản (text)&lt;/strong&gt; — so khớp trigram; tìm chuỗi nguyên văn, chuỗi lỗi, định danh chính xác.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;cấu trúc (structural)&lt;/strong&gt; — truy vấn AST; tìm định nghĩa, chữ ký hàm, và các cấu trúc ngôn ngữ.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;đồ thị (graph)&lt;/strong&gt; — đồ thị phụ thuộc; tìm nơi gọi, nơi được gọi, và phạm vi ảnh hưởng.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Mỗi phương thức mạnh ở một loại câu hỏi khác nhau. Bí quyết là quyết định nên tin tưởng mỗi phương thức đến mức nào cho truy vấn đang có trước mặt bạn.&lt;/p&gt;
&lt;h2 id=&quot;phân-loại-ý-định&quot;&gt;Phân loại ý định&lt;/h2&gt;
&lt;p&gt;Trước khi bất kỳ lượt truy xuất nào chạy, một bộ phân loại nhẹ sắp xếp truy vấn vào một trong sáu ý định, kèm điểm tin cậy. Nó được thiết kế rẻ một cách có chủ đích — các heuristic có thứ tự, khớp đầu tiên thắng — vì nó chạy trên đường nóng (hot path) và chỉ thêm một hoặc hai mili giây:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;bắt đầu bằng &lt;code&gt;def &lt;/code&gt;, &lt;code&gt;class &lt;/code&gt;, &lt;code&gt;func &lt;/code&gt;, &lt;code&gt;import &lt;/code&gt;… → &lt;strong&gt;find_definition&lt;/strong&gt; (độ tin cậy 0,95)&lt;/li&gt;
&lt;li&gt;“who calls”, “usages of”, “references to” (ai gọi, các nơi sử dụng, tham chiếu đến) → &lt;strong&gt;find_references&lt;/strong&gt; (0,90)&lt;/li&gt;
&lt;li&gt;“impact”, “blast radius”, “what depends on” (tác động, phạm vi ảnh hưởng, những gì phụ thuộc vào) → &lt;strong&gt;impact_analysis&lt;/strong&gt; (0,90)&lt;/li&gt;
&lt;li&gt;một &lt;code&gt;&quot;string&quot;&lt;/code&gt; trong dấu ngoặc kép hoặc một token lỗi như &lt;code&gt;traceback&lt;/code&gt; → &lt;strong&gt;exact_match&lt;/strong&gt; (0,85–0,90)&lt;/li&gt;
&lt;li&gt;một định danh &lt;code&gt;CamelCase&lt;/code&gt; hoặc &lt;code&gt;snake_case&lt;/code&gt; → &lt;strong&gt;find_definition&lt;/strong&gt; (0,60–0,80)&lt;/li&gt;
&lt;li&gt;“how”, “why”, “explain”, “architecture” (như thế nào, vì sao, giải thích, kiến trúc) → &lt;strong&gt;understand_code&lt;/strong&gt; (0,75)&lt;/li&gt;
&lt;li&gt;không gì khớp cả → &lt;strong&gt;understand_code&lt;/strong&gt;, độ tin cậy thấp (0,40)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Mỗi ý định mang một hồ sơ trọng số trên bốn phương thức. Đây là những con số thực tế:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Ý định&lt;/th&gt;
&lt;th&gt;ngữ nghĩa&lt;/th&gt;
&lt;th&gt;văn bản&lt;/th&gt;
&lt;th&gt;cấu trúc (AST)&lt;/th&gt;
&lt;th&gt;đồ thị&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;find_definition&lt;/td&gt;
&lt;td&gt;0.2&lt;/td&gt;
&lt;td&gt;0.1&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0.6&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0.1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;find_references&lt;/td&gt;
&lt;td&gt;0.1&lt;/td&gt;
&lt;td&gt;0.2&lt;/td&gt;
&lt;td&gt;0.2&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0.5&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;understand_code&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0.5&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0.2&lt;/td&gt;
&lt;td&gt;0.2&lt;/td&gt;
&lt;td&gt;0.1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;find_similar&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0.4&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0.3&lt;/td&gt;
&lt;td&gt;0.2&lt;/td&gt;
&lt;td&gt;0.1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;impact_analysis&lt;/td&gt;
&lt;td&gt;0.1&lt;/td&gt;
&lt;td&gt;0.1&lt;/td&gt;
&lt;td&gt;0.1&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0.7&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;exact_match&lt;/td&gt;
&lt;td&gt;0.0&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0.9&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0.1&lt;/td&gt;
&lt;td&gt;0.0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Vì vậy “&lt;code&gt;parseConfig&lt;/code&gt; được định nghĩa ở đâu” nghiêng mạnh về AST (0,6). “auth hoạt động như thế nào” nghiêng về vector ngữ nghĩa (0,5). “cái gì phụ thuộc vào cái này” gần như hoàn toàn là đồ thị (0,7). “tìm &lt;code&gt;ECONNREFUSED&lt;/code&gt;” gần như hoàn toàn là trigram (0,9), với mô hình embedding bị tắt hoàn toàn — vì độ tương đồng ngữ nghĩa chính xác là công cụ sai cho một chuỗi chính xác.&lt;/p&gt;
&lt;h2 id=&quot;đường-nhanh-và-đường-hợp-nhất&quot;&gt;Đường nhanh, và đường hợp nhất&lt;/h2&gt;
&lt;p&gt;Khi bộ phân loại tự tin — điểm số ≥ 0,85 — và truy vấn là một truy vấn bình thường, Maguyva bỏ qua việc hợp nhất hoàn toàn và định tuyến thẳng đến phương thức chiếm ưu thế duy nhất. “X được định nghĩa ở đâu” không cần bốn bộ truy xuất; nó cần chỉ mục AST, ngay lập tức. Đường đi trực tiếp đó được báo cáo lại dưới dạng &lt;code&gt;fusion_strategy: &quot;direct&quot;&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Mọi thứ mơ hồ đều đi qua quá trình hợp nhất. Bốn (hoặc ba, với preset mặc định) phương thức chạy song song, mỗi phương thức trả về danh sách xếp hạng riêng, và chúng tôi kết hợp chúng lại.&lt;/p&gt;
&lt;h2 id=&quot;reciprocal-rank-fusion-có-trọng-số&quot;&gt;Reciprocal Rank Fusion có trọng số&lt;/h2&gt;
&lt;p&gt;Hợp nhất các bộ truy xuất không đồng nhất khó hơn vẻ ngoài của nó: một độ tương đồng cosine 0,82 và một điểm trigram 137 và một độ trung tâm đồ thị 0,004 không nằm trên cùng một thang đo, nên bạn không thể chỉ đơn giản cộng chúng lại. Reciprocal Rank Fusion né tránh vấn đề này bằng cách bỏ đi các điểm số thô và chỉ giữ lại &lt;strong&gt;thứ hạng&lt;/strong&gt; mà mỗi engine gán cho. Đóng góp của một kết quả từ một phương thức là:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;contribution = weight × 1 / (k + rank + 1)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;trong đó &lt;code&gt;rank&lt;/code&gt; là vị trí của nó trong danh sách của phương thức đó và &lt;code&gt;k&lt;/code&gt; là một hằng số làm mượt. Các đóng góp được cộng dồn qua các phương thức cho bất kỳ kết quả nào được nhiều hơn một engine tìm thấy — sự đồng thuận giữa các bộ truy xuất tự nhiên sẽ nổi lên trên cùng. Chúng tôi dùng &lt;strong&gt;k = 40&lt;/strong&gt; trên preset mặc định và 60 trên &lt;code&gt;thorough&lt;/code&gt; (&lt;code&gt;quick&lt;/code&gt; chỉ chạy ngữ nghĩa thuần túy, nên việc hợp nhất không bao giờ xảy ra ở đó). Nghiên cứu RRF gốc chốt ở k = 60 cho truy xuất đa dụng; giá trị mặc định của chúng tôi nhấn mạnh hơn một chút vào các kết quả được nhiều phương thức cùng xếp hạng cao — và chúng tôi không khuyến nghị tự tay tinh chỉnh nó.&lt;/p&gt;
&lt;p&gt;Bên trên đó, các kết quả còn mang một &lt;strong&gt;hệ số tăng cường theo tầm quan trọng đồ thị&lt;/strong&gt;. Một hub — một hàm mà toàn bộ codebase dựa vào — nên được xếp hạng cao hơn một nút lá ít nổi bật ngay cả khi có cùng độ liên quan văn bản, nên chúng tôi nhân mỗi đóng góp với:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;boost = min(1 + 0.3 × ln(1 + centrality), 1.5)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Độ trung tâm đến từ các chỉ số PageRank/degree đã được tính toán trước của pipeline, và hệ số tăng cường bị giới hạn ở mức 1,5× để một hàm phổ biến không thể hoàn toàn chôn vùi một hàm ít nổi bật nhưng liên quan hơn. Cuối cùng, chúng tôi hạ thấp thứ hạng các kết quả từ đường dẫn vendor, build, và archive, và loại bỏ trùng lặp để chỉ giữ đoạn tốt nhất cho mỗi file.&lt;/p&gt;
&lt;h2 id=&quot;những-gì-vẫn-chưa-hoàn-hảo&quot;&gt;Những gì vẫn chưa hoàn hảo&lt;/h2&gt;
&lt;p&gt;Bộ phân loại ý định là một tập hợp biểu thức chính quy, không phải mô hình đã huấn luyện. Nó xử lý các dạng truy vấn phổ biến bằng heuristic, còn truy vấn mơ hồ sẽ dùng &lt;code&gt;understand_code&lt;/code&gt; và một tổ hợp thiên về ngữ nghĩa. Phiên bản trước của bài viết này mô tả việc giảm tỷ lệ truy vấn không có kết quả từ khoảng 15% xuống dưới 5% như một kết quả đã đạt được. Thực ra, đề xuất tháng 12 năm 2025 chỉ nêu mức ban đầu ước tính và một mục tiêu; không có tập truy vấn hay biên bản đo lường nào được cung cấp để chứng minh. Chúng tôi rút lại tuyên bố đã đạt được cải thiện đó; xem &lt;a href=&quot;https://maguyva.ai/evidence/search-quality.md&quot;&gt;bằng chứng nguồn và đính chính (tiếng Anh)&lt;/a&gt;. Chúng tôi chưa thay bộ phân loại bằng mô hình đã huấn luyện vì phiên bản chi phí thấp đủ nhanh và đủ tốt cho vai trò định tuyến dự kiến, và vì một bộ phân loại sai nhưng tự tin còn tệ hơn một phương án dự phòng trung thực. Các trọng số là những giá trị tiên nghiệm được chọn thủ công, không phải học từ dữ liệu nhấp chuột mà chúng tôi không thu thập.&lt;/p&gt;
&lt;h2 id=&quot;đặt-câu-hỏi-không-cần-chọn-công-cụ&quot;&gt;Đặt câu hỏi, không cần chọn công cụ&lt;/h2&gt;
&lt;p&gt;Một agent không nên phải biết là nên dùng grep hay embedding hay đồ thị lệnh gọi — nó nên đặt câu hỏi bằng ngôn ngữ đơn giản và nhận được câu trả lời đúng. Hợp nhất đa phương thức là thứ cho phép &lt;code&gt;find_symbol&lt;/code&gt;, tìm kiếm ngữ nghĩa, và phân tích phụ thuộc cùng nằm sau một giao diện truy vấn duy nhất: hệ thống đọc hình dạng của câu hỏi và âm thầm ghép lại đúng bộ truy xuất cho nó. Mô hình chấm điểm embedding quan trọng, nhưng biết khi nào &lt;em&gt;không&lt;/em&gt; nên dùng chúng cũng quan trọng không kém. Chọn đúng công cụ cho mỗi truy vấn là một loại chất lượng riêng, và đó là thứ chúng tôi muốn tự mình đảm nhận thay vì đẩy sang cho bên gọi.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;// you bring the question. it brings the tools.&lt;/code&gt;&lt;/p&gt;
</content:encoded><category>Search</category><category>Architecture</category></item><item><title>Khả năng quan sát hệ thống agent: Hooks, Alloy, và Grafana</title><link>https://maguyva.ai/vi/blog/agent-observability-hooks-alloy-grafana</link><guid isPermaLink="true">https://maguyva.ai/vi/blog/agent-observability-hooks-alloy-grafana</guid><description>Chúng tôi kết nối Claude Code và Codex vào cùng một stack Grafana bằng OpenTelemetry và Alloy, sau đó dùng trace và log để tìm và sửa các vấn đề hành vi của agent tận gốc.</description><pubDate>Tue, 24 Mar 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Các hệ thống agent hỏng theo những cách kỳ lạ.&lt;/p&gt;
&lt;p&gt;Đôi khi mô hình là vấn đề. Đôi khi công cụ là vấn đề. Đôi khi máy chủ MCP của bạn vẫn ổn, nhưng agent lại chọn sai chuyên gia, hoặc tốn nửa phiên làm việc shell mà bạn không ngờ tới, hoặc âm thầm tiêu tốn ngân sách trong một vòng lặp trông có vẻ hiệu quả từ bên ngoài.&lt;/p&gt;
&lt;p&gt;Nếu bạn không thể thấy được sự khác biệt, bạn không thực sự đang vận hành một hệ thống agent. Bạn đang đoán mò.&lt;/p&gt;
&lt;p&gt;Vì vậy chúng tôi đã xây dựng một stack quan sát (observability stack) cho chính quy trình làm việc của mình: Claude Code, Codex, các sự kiện hook của Claude, các sự kiện notify của Codex, OpenTelemetry gốc, Grafana Alloy, và Grafana Cloud ở phía bên kia.&lt;/p&gt;
&lt;p&gt;Phần thú vị không phải là “chúng tôi đã làm một dashboard.” Phần thú vị là chúng tôi phải tách telemetry thành hai luồng khác nhau vì không một nguồn dữ liệu duy nhất nào cho chúng tôi bức tranh toàn cảnh.&lt;/p&gt;
&lt;h2 id=&quot;vấn-đề-telemetry-agent-bị-phân-mảnh&quot;&gt;Vấn đề: Telemetry Agent bị phân mảnh&lt;/h2&gt;
&lt;p&gt;Các agent lập trình hiện đại đã phát ra một số telemetry. Điều đó có ích, nhưng chưa đủ.&lt;/p&gt;
&lt;p&gt;OTEL gốc giỏi trả lời những câu hỏi như:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Chúng ta đã gửi bao nhiêu request?&lt;/li&gt;
&lt;li&gt;Một phiên tốn bao nhiêu chi phí?&lt;/li&gt;
&lt;li&gt;Các span và trace nằm ở đâu?&lt;/li&gt;
&lt;li&gt;Độ trễ có tăng vọt không?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Nó tệ hơn nhiều khi trả lời những câu hỏi như:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Agent dựa vào máy chủ MCP nào?&lt;/li&gt;
&lt;li&gt;Lỗi này nằm trong &lt;code&gt;Bash&lt;/code&gt;, một công cụ file có sẵn, hay một lệnh gọi MCP?&lt;/li&gt;
&lt;li&gt;Skill nào thực sự đã kích hoạt?&lt;/li&gt;
&lt;li&gt;Loại subagent nào đã được điều động?&lt;/li&gt;
&lt;li&gt;Phiên làm việc có đang làm việc hữu ích, hay chỉ đang quẫy đạp vô ích?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Lớp câu hỏi thứ hai đó gần với hook hơn là trace.&lt;/p&gt;
&lt;p&gt;Nhưng điều ngược lại cũng đúng: một số câu hỏi hiệu năng quan trọng nhất lại gần với trace hơn là hook.&lt;/p&gt;
&lt;p&gt;Nếu bạn muốn biết độ trễ thực sự tích tụ ở đâu, span nào chậm, hay liệu phiên làm việc có tốn thời gian vào các lệnh gọi mô hình so với thực thi công cụ hay không, bạn cần dữ liệu trace cũng như các sự kiện ngữ nghĩa.&lt;/p&gt;
&lt;h2 id=&quot;kiến-trúc-mà-chúng-tôi-đã-đi-đến&quot;&gt;Kiến trúc mà chúng tôi đã đi đến&lt;/h2&gt;
&lt;p&gt;Chúng tôi chạy hai đường telemetry song song.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Claude Code&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  native OTEL -&amp;gt; Alloy -&amp;gt; Grafana Cloud&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  hooks        -&amp;gt; send_event.py -&amp;gt; Grafana Cloud Loki&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Codex&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  native OTEL -&amp;gt; Alloy -&amp;gt; Grafana Cloud&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  notify hook -&amp;gt; codex_notify.py -&amp;gt; shared Loki schema&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Sự tách biệt đó là có chủ đích.&lt;/p&gt;
&lt;p&gt;Nó cũng bất đối xứng. Claude Code cho chúng tôi một giao diện hook vòng đời phong phú hơn nhiều. Codex cho chúng tôi OTEL gốc cộng với một giao diện notify, nên chúng tôi chuẩn hóa các sự kiện hoàn tất lượt (turn-completion) ít chi tiết hơn thành cùng một schema log thay vì giả vờ rằng cả hai runtime cung cấp cùng những cơ chế kiểm soát.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;OTEL gốc&lt;/strong&gt; cho chúng tôi luồng cơ sở: log và trace từ chính runtime, cộng với các metric ở nơi runtime thực sự phát ra chúng.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Sự kiện hook và notify&lt;/strong&gt; cho chúng tôi tầng ngữ nghĩa: những thứ như &lt;code&gt;PreToolUse&lt;/code&gt;, &lt;code&gt;PostToolUse&lt;/code&gt;, &lt;code&gt;PostToolUseFailure&lt;/code&gt;, &lt;code&gt;UserPromptSubmit&lt;/code&gt;, &lt;code&gt;SubagentStop&lt;/code&gt;, &lt;code&gt;SkillActivated&lt;/code&gt;, và metadata đã phân loại mà chúng tôi thực sự quan tâm khi debug hành vi agent. Claude Code đóng góp luồng sự kiện phong phú hơn ở đây. Codex đóng góp một luồng đã chuẩn hóa ít chi tiết hơn nhưng vẫn hữu ích.&lt;/p&gt;
&lt;h2 id=&quot;vì-sao-hook-tồn-tại&quot;&gt;Vì sao hook tồn tại&lt;/h2&gt;
&lt;p&gt;Pipeline hook của chúng tôi làm giàu các sự kiện trước khi chúng chạm đến Loki.&lt;/p&gt;
&lt;p&gt;Thay vì chỉ nói “một công cụ đã chạy,” chúng tôi phân loại sự kiện vào các trường như:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;tool_type&lt;/code&gt;: builtin, mcp, skill, agent, bash&lt;/li&gt;
&lt;li&gt;&lt;code&gt;mcp_server&lt;/code&gt;: backend MCP nào đã xử lý lệnh gọi&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bash_cli&lt;/code&gt;: họ lệnh shell&lt;/li&gt;
&lt;li&gt;&lt;code&gt;subagent_type&lt;/code&gt;: loại chuyên gia nào đã được điều động&lt;/li&gt;
&lt;li&gt;&lt;code&gt;agent_tool&lt;/code&gt;: nguồn là Claude Code hay Codex&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Điều đó có nghĩa là chúng tôi có thể đặt những câu hỏi quan trọng về mặt vận hành:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;{service_name=&quot;claude-code-hooks&quot;} | agent_tool=&quot;codex-cli&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;{service_name=&quot;claude-code-hooks&quot;} | tool_type=&quot;mcp&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;{service_name=&quot;claude-code-hooks&quot;} | json | bash_cli=&quot;git&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Đó không phải là những trường mang tính phù phiếm. Chúng là sự khác biệt giữa “agent có cảm giác chậm” và “agent đã tốn mười phút cuối vào các thao tác git nặng shell với tỷ lệ công cụ thất bại cao.”&lt;/p&gt;
&lt;p&gt;Một chi tiết triển khai trông kỳ lạ hơn thực tế của nó: luồng Loki dùng chung vẫn dùng &lt;code&gt;service_name=&quot;claude-code-hooks&quot;&lt;/code&gt; làm nhãn ngay cả khi sự kiện đến từ Codex. Sự tách biệt thực sự giữa các runtime xảy ra ở &lt;code&gt;agent_tool&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&quot;vì-sao-alloy-nằm-ở-giữa&quot;&gt;Vì sao Alloy nằm ở giữa&lt;/h2&gt;
&lt;p&gt;Grafana Alloy không chỉ là một bộ chuyển tiếp trong thiết lập này. Đây là nơi áp dụng các quy tắc xử lý telemetry.&lt;/p&gt;
&lt;p&gt;Chúng tôi trỏ luồng OTEL gốc từ Claude Code và Codex đến một Alloy proxy cục bộ trên &lt;code&gt;localhost:4318&lt;/code&gt;, sau đó để Alloy dọn dẹp payload trước khi chuyển tiếp nó đến Grafana Cloud.&lt;/p&gt;
&lt;p&gt;Điều đó quan trọng vì telemetry agent thô đầy ắp các trường có nhiều giá trị phân biệt (high-cardinality), hữu ích cho phân tích nhưng tệ hại khi làm nhãn được lập chỉ mục:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;session_id&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;prompt_id&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;số lượng token&lt;/li&gt;
&lt;li&gt;thời lượng&lt;/li&gt;
&lt;li&gt;các blob tham số công cụ&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Nếu bạn lập chỉ mục mọi thứ, bạn sẽ có một vụ bùng nổ nhãn và một ngày tồi tệ.&lt;/p&gt;
&lt;p&gt;Vì vậy Alloy làm ba việc cho chúng tôi:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Giữ lại một tập rất nhỏ các nhãn có ít giá trị phân biệt được lập chỉ mục.&lt;/li&gt;
&lt;li&gt;Chuyển các trường ồn ào nhưng hữu ích vào metadata có cấu trúc.&lt;/li&gt;
&lt;li&gt;Loại bỏ hoàn toàn nhiễu thuần túy.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Ý tưởng quan trọng rất đơn giản: &lt;strong&gt;quan sát nhiều hơn, lập chỉ mục ít hơn&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id=&quot;vì-sao-luồng-hook-bỏ-qua-alloy&quot;&gt;Vì sao luồng hook bỏ qua Alloy&lt;/h2&gt;
&lt;p&gt;Luồng hook đã được định hình sẵn cho Loki.&lt;/p&gt;
&lt;p&gt;Vào lúc &lt;code&gt;send_event.py&lt;/code&gt; đẩy một sự kiện, chúng tôi đã quyết định sẵn trường nào xứng đáng được xử lý như nhãn và trường nào thuộc về phần thân JSON có cấu trúc. Luồng đó đi thẳng đến cổng OTLP của Grafana Cloud thay vì đi qua thêm một lượt Alloy nữa.&lt;/p&gt;
&lt;p&gt;Vì vậy hệ thống có một sự phân chia lao động rõ ràng:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Alloy&lt;/strong&gt; thuần hóa luồng OTEL gốc thô.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Việc làm giàu hook&lt;/strong&gt; làm cho các sự kiện ngữ nghĩa có thể truy vấn được.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Điều đó giữ kiến trúc đơn giản hơn so với việc cố ép mọi thứ đi qua một đường duy nhất.&lt;/p&gt;
&lt;h2 id=&quot;dashboard-thực-sự-cho-thấy-gì&quot;&gt;Dashboard thực sự cho thấy gì&lt;/h2&gt;
&lt;p&gt;Ảnh chụp màn hình bên dưới là từ một trong những dashboard quan sát đứng sau quy trình agent của chúng tôi. Đó không phải là một benchmark, và các con số chỉ là một lát cắt tại một thời điểm. Điểm mấu chốt là hình dạng của dữ liệu: activity feed, lệnh gọi công cụ, thất bại, prompt, và các phân tích chi tiết theo agent, công cụ có sẵn, việc sử dụng MCP, lệnh shell, và skill.&lt;/p&gt;
&lt;p&gt;Phần hữu ích là dashboard này sống trên cùng một stack Grafana với phần còn lại của telemetry agent. Chúng tôi có thể lọc theo agent nguồn và họ công cụ, và nhìn xuyên suốt các runtime mà không cần phát minh ra một câu chuyện quan sát khác nhau cho mỗi hệ thống.&lt;/p&gt;
&lt;figure class=&quot;feature-figure feature-figure--wide&quot;&gt;
  &lt;a
    href=&quot;https://maguyva.ai/blog/agent-observability-dashboard.png&quot;
    target=&quot;_blank&quot;
    rel=&quot;noreferrer&quot;
    aria-label=&quot;Mở ảnh chụp màn hình dashboard quan sát ở độ phân giải đầy đủ&quot;
  &gt;
    &lt;img
      src=&quot;https://maguyva.ai/blog/agent-observability-dashboard.png&quot;
      alt=&quot;Dashboard Grafana hiển thị activity feed, số lượng lệnh gọi công cụ, thất bại, prompt, và các phân tích chi tiết theo agent, công cụ có sẵn, việc sử dụng MCP, lệnh CLI, và skill cho một quy trình agent.&quot;
    /&gt;
  &lt;/a&gt;
  &lt;figcaption&gt;
    Một trong những dashboard trực tiếp đứng sau quy trình agent của chúng tôi. Ảnh chụp màn hình này chỉ là một lát cắt của một stack Grafana dùng chung, cũng nhận telemetry từ các runtime và hệ thống agent khác của chúng tôi. Nhấp vào ảnh để xem phiên bản độ phân giải đầy đủ.
  &lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h2 id=&quot;vì-sao-trace-quan-trọng-hơn-vẻ-ngoài-ban-đầu-của-chúng&quot;&gt;Vì sao trace quan trọng hơn vẻ ngoài ban đầu của chúng&lt;/h2&gt;
&lt;p&gt;Log cho chúng tôi biết loại công việc nào đã xảy ra. Trace cho chúng tôi biết công việc đó diễn ra như thế nào theo thời gian.&lt;/p&gt;
&lt;p&gt;Sự khác biệt đó quan trọng trong các hệ thống agent vì “chậm” là mô tả quá chung chung để có ích.&lt;/p&gt;
&lt;p&gt;Một trace có thể cho chúng tôi biết liệu sự đau đầu đến từ:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;độ trễ mô hình&lt;/li&gt;
&lt;li&gt;thời gian thực thi công cụ&lt;/li&gt;
&lt;li&gt;các lần thử lại lặp đi lặp lại&lt;/li&gt;
&lt;li&gt;một tương tác MCP đặc biệt tốn kém&lt;/li&gt;
&lt;li&gt;một dải dài các thao tác nhỏ trông vô hại khi xét riêng lẻ&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Trong thực tế chúng tôi dùng luồng hook và trace Tempo cùng nhau.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Log hook&lt;/strong&gt; trả lời: loại việc gì đã xảy ra?&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Trace&lt;/strong&gt; trả lời: thời gian đã đi đâu?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Sự kết hợp đó là thứ biến quan sát từ một dashboard thành một lời giải thích.&lt;/p&gt;
&lt;h2 id=&quot;codex-khớp-vào-đâu&quot;&gt;Codex khớp vào đâu&lt;/h2&gt;
&lt;p&gt;Codex là một phần của cùng một stack, nhưng nó không giống hệt Claude Code.&lt;/p&gt;
&lt;p&gt;Đối với Codex, chúng tôi kết nối hai phần:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;OTEL gốc từ Codex vào Alloy&lt;/li&gt;
&lt;li&gt;Một notify webhook vào &lt;code&gt;codex_notify.py&lt;/code&gt;, ánh xạ các lượt hoàn tất thành cùng một schema Loki mà chúng tôi dùng cho các sự kiện hook&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Điều đó cho chúng tôi một bộ lọc thống nhất như &lt;code&gt;agent_tool=&quot;codex-cli&quot;&lt;/code&gt; bên trong cùng một luồng log.&lt;/p&gt;
&lt;p&gt;Lời cảnh báo thành thật: payload notify của Codex hiện chứa ít chi tiết hơn payload hook của Claude Code vì nó không phải là cùng loại giao diện tích hợp. Trong thiết lập hiện tại của chúng tôi, các lượt hoàn tất của Codex có thể được chuẩn hóa vào schema dùng chung, nhưng việc trích xuất chi tiết theo từng công cụ vẫn tốt hơn trong luồng OTEL gốc so với cầu nối notify.&lt;/p&gt;
&lt;p&gt;Đó không phải là lý do để tránh viết bài này. Đó chính là ý nghĩa của bài viết. Các hệ thống quan sát thực sự được lắp ráp từ những tín hiệu không hoàn hảo.&lt;/p&gt;
&lt;h2 id=&quot;grafana-qua-mcp-thay-đổi-cuộc-chơi&quot;&gt;Grafana qua MCP thay đổi cuộc chơi&lt;/h2&gt;
&lt;p&gt;Sự thay đổi lớn hơn là Grafana không chỉ là một nơi con người ghé thăm trong trình duyệt.&lt;/p&gt;
&lt;p&gt;Trong repo này chúng tôi cũng cung cấp giao diện truy cập Grafana qua MCP. Điều đó nghĩa là một agent có thể truy vấn trực tiếp Loki, Prometheus, và Tempo thay vì chờ một con người kiểm tra dashboard thủ công trước.&lt;/p&gt;
&lt;p&gt;Điều đó biến quan sát thành một đầu vào chủ động cho quy trình làm việc.&lt;/p&gt;
&lt;p&gt;Một agent có thể hỏi:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Họ công cụ nào thất bại nhiều nhất trong giờ qua?&lt;/li&gt;
&lt;li&gt;Máy chủ MCP nào chiếm ưu thế trong một phiên?&lt;/li&gt;
&lt;li&gt;Các thay đổi gần đây có giảm thất bại công cụ, hay chỉ đơn giản là chuyển công việc sang các đường nặng shell hơn với cùng những lỗi cũ?&lt;/li&gt;
&lt;li&gt;Trace nào cho thấy độ trễ cao nhất hoặc các lần thử lại lặp đi lặp lại?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Một khi bạn có được điều đó, bạn đã rất gần với một vòng lặp tự cải thiện.&lt;/p&gt;
&lt;h2 id=&quot;từ-dashboard-đến-vòng-lặp-phản-hồi&quot;&gt;Từ Dashboard đến vòng lặp phản hồi&lt;/h2&gt;
&lt;p&gt;Đây là phần chúng tôi thấy thú vị nhất.&lt;/p&gt;
&lt;p&gt;Một khi stack quan sát có thể truy vấn được từ tầng agent, telemetry không còn là một phương tiện báo cáo thụ động nữa mà trở thành một tín hiệu điều khiển.&lt;/p&gt;
&lt;p&gt;Vòng lặp trông như thế này:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Hoạt động agent phát ra trace, metric, và log hook đã làm giàu.&lt;/li&gt;
&lt;li&gt;Grafana lưu trữ bằng chứng trong Loki, Tempo, và Prometheus ở những nơi có metric.&lt;/li&gt;
&lt;li&gt;Agent truy vấn bằng chứng đó qua Grafana MCP.&lt;/li&gt;
&lt;li&gt;Hệ thống xác định sự pha trộn công cụ tệ, skill dễ vỡ, định tuyến yếu, hoặc quy trình nặng shell liên tục tạo ra những lỗi có thể tránh được.&lt;/li&gt;
&lt;li&gt;Agent hoặc người vận hành điều chỉnh prompt, cấu hình agent, mô tả skill, quy tắc định tuyến, hoặc quyền truy cập công cụ.&lt;/li&gt;
&lt;li&gt;Phiên tiếp theo tạo ra một hình dạng telemetry mới, và chu trình lặp lại.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Đó là cách bạn đi từ “dashboard thú vị” đến “hệ thống cải thiện có thể đo lường được.”&lt;/p&gt;
&lt;p&gt;Mục tiêu không phải là tối đa hóa một danh mục công cụ. Đó là đạt được đúng sự pha trộn giữa CLI, công cụ có sẵn, lệnh gọi MCP, và skill cho công việc thực sự đang được thực hiện.&lt;/p&gt;
&lt;h2 id=&quot;điều-này-cho-phép-chúng-tôi-trả-lời-gì&quot;&gt;Điều này cho phép chúng tôi trả lời gì&lt;/h2&gt;
&lt;p&gt;Một khi cả hai runtime cùng nằm trên một stack Grafana, chúng tôi có thể trả lời các câu hỏi vận hành nhanh hơn nhiều:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Thất bại có tập trung vào một họ công cụ không?&lt;/li&gt;
&lt;li&gt;Các quy trình nặng shell có đang tạo ra những lỗi có thể tránh được ở nơi lẽ ra nên có một công cụ cấp cao hơn không?&lt;/li&gt;
&lt;li&gt;Máy chủ MCP nào đang gánh phần lớn khối lượng công việc?&lt;/li&gt;
&lt;li&gt;Chúng ta có đang trả tiền cho hoạt động agent không tạo ra tiến bộ có ý nghĩa hay không?&lt;/li&gt;
&lt;li&gt;Một phiên gặp vấn đề là do mô hình, công cụ, hay tầng điều phối?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Điều này đặc biệt hữu ích trong các quy trình đa agent, nơi “agent đang bận” gần như không nói lên điều gì cả.&lt;/p&gt;
&lt;p&gt;Nếu một chuyên gia liên tục được điều động và tạo ra tỷ lệ thất bại cao, đó là một vấn đề định tuyến hoặc định hình prompt.&lt;/p&gt;
&lt;p&gt;Nếu một máy chủ MCP chiếm ưu thế trong mọi lệnh gọi, đó có thể là một kiến trúc tốt hoặc là dấu hiệu mọi thứ khác đều là gánh nặng vô ích.&lt;/p&gt;
&lt;p&gt;Nếu thất bại công cụ tăng vọt trong khi chi phí vẫn cao, bạn có một vấn đề vận hành, không phải vấn đề chất lượng.&lt;/p&gt;
&lt;p&gt;Nếu công việc shell liên tục thất bại theo những cách có thể dự đoán và tránh được ở nơi lẽ ra nên có một công cụ cấp cao hơn, đó là một tín hiệu sản phẩm.&lt;/p&gt;
&lt;p&gt;Nếu một skill liên tục kích hoạt nhưng không cải thiện kết quả, đó là một tín hiệu prompt hoặc định tuyến.&lt;/p&gt;
&lt;h2 id=&quot;bài-học-thực-sự&quot;&gt;Bài học thực sự&lt;/h2&gt;
&lt;p&gt;Bài học sâu sắc hơn ở đây là quan sát agent cần cả &lt;strong&gt;telemetry runtime&lt;/strong&gt; lẫn &lt;strong&gt;telemetry quy trình làm việc&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Telemetry runtime cho bạn biết hệ thống đã làm gì.&lt;/p&gt;
&lt;p&gt;Telemetry quy trình làm việc cho bạn biết agent nghĩ nó đang làm gì.&lt;/p&gt;
&lt;p&gt;Chúng tôi cần cả hai.&lt;/p&gt;
&lt;p&gt;Nếu bạn chỉ giữ trace và bộ đếm, bạn bỏ lỡ tầng ngữ nghĩa. Nếu bạn chỉ giữ sự kiện hook, bạn bỏ lỡ độ trễ, span, và bức tranh runtime rộng hơn.&lt;/p&gt;
&lt;p&gt;Và nếu bạn giữ cả hai nhưng không bao giờ đưa chúng trở lại tầng agent, bạn có giám sát, không phải sự thích nghi.&lt;/p&gt;
&lt;p&gt;Sự kết hợp đó là thứ khiến hệ thống đủ có thể giải thích được để vận hành và đủ có thể tinh chỉnh được để cải thiện.&lt;/p&gt;
&lt;h2 id=&quot;những-gì-vẫn-chưa-hoàn-hảo&quot;&gt;Những gì vẫn chưa hoàn hảo&lt;/h2&gt;
&lt;p&gt;Vẫn còn những góc cạnh thô ráp.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Không phải mọi sự kiện hook đều bao gồm dữ liệu thời lượng và token mà chúng tôi mong muốn.&lt;/li&gt;
&lt;li&gt;Một số khung nhìn thời gian tốt nhất vẫn đến từ trace Tempo, không phải log hook.&lt;/li&gt;
&lt;li&gt;Codex hiện nay kém phong phú về mặt ngữ nghĩa hơn Claude Code trong luồng sự kiện đã làm giàu.&lt;/li&gt;
&lt;li&gt;Ảnh chụp màn hình dashboard là một giao diện vận hành thực tế, không phải một tác phẩm marketing bóng bẩy.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Điểm cuối cùng đó là có chủ đích. Chúng tôi thà cho xem bảng điều khiển thật còn hơn giả vờ rằng các hệ thống agent tự giải thích được bằng phép màu.&lt;/p&gt;
&lt;h2 id=&quot;vì-sao-điều-này-quan-trọng-với-maguyva&quot;&gt;Vì sao điều này quan trọng với Maguyva&lt;/h2&gt;
&lt;p&gt;Maguyva là về việc cho agent trí tuệ mã nguồn tốt hơn. Nhưng một khi agent thực sự đang làm việc hữu ích, một yêu cầu mới xuất hiện ngay lập tức: bạn cần thấy chúng đang hành xử như thế nào.&lt;/p&gt;
&lt;p&gt;Chất lượng tìm kiếm, chất lượng định tuyến, việc chọn công cụ, và hiệu quả ngữ cảnh đều trở thành những vấn đề có thể quan sát được.&lt;/p&gt;
&lt;p&gt;Đó là lý do chúng tôi nghĩ điều này đáng để viết. Stack agent của tương lai không chỉ là prompt và công cụ. Đó là prompt, công cụ, và tầng đo lường cho bạn biết liệu toàn bộ hệ thống có đang hoạt động hay không.&lt;/p&gt;
&lt;p&gt;Nếu bạn đang xây dựng các quy trình agent nghiêm túc, quan sát không phải là hạ tầng tùy chọn. Nó là một phần của sản phẩm.&lt;/p&gt;
</content:encoded><category>Observability</category><category>Grafana</category><category>OpenTelemetry</category><category>Architecture</category></item><item><title>Khai thác vòng lặp: Làm sao các thay đổi trở thành ký ức tổ chức</title><link>https://maguyva.ai/vi/blog/mining-workflow-closing-the-loop</link><guid isPermaLink="true">https://maguyva.ai/vi/blog/mining-workflow-closing-the-loop</guid><description>Các commit Git trở thành các mục changelog có cấu trúc và các bản ghi quyết định kiến trúc, sau đó được đưa trở lại vào AI agent như một ký ức tổ chức có thể truy vấn.</description><pubDate>Tue, 03 Feb 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Các con số trong bài này phản ánh hệ thống tại thời điểm xuất bản (tháng 2/2026). Xem &lt;a href=&quot;https://maguyva.ai/vi/team&quot;&gt;trang team&lt;/a&gt; của chúng tôi để biết số liệu hiện tại.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Mọi đội kỹ thuật đều đối mặt với cùng một thách thức: các thay đổi diễn ra liên tục, nhưng cái &lt;em&gt;lý do&lt;/em&gt; đằng sau những thay đổi đó lại biến mất. Sáu tháng sau, ai đó hỏi “tại sao chúng ta lại chọn DuckDB cho các giai đoạn pipeline?” và câu trả lời chỉ tồn tại trong đầu người đã đưa ra quyết định đó — nếu người đó vẫn còn ở đây.&lt;/p&gt;
&lt;p&gt;Chúng tôi đã xây dựng một quy trình khai thác (mining workflow) khép kín vòng lặp này. Các thay đổi chảy qua các commit git, được xử lý bởi pipeline khai thác của chúng tôi, trở thành các mục changelog có cấu trúc và các bản ghi quyết định kiến trúc, sau đó được đưa trở lại vào các AI agent của chúng tôi thông qua các truy vấn CLI. Kết quả: một ký ức tổ chức mà cả con người và AI đều có thể truy cập.&lt;/p&gt;
&lt;h2 id=&quot;vấn-đề-quyết-định-bốc-hơi&quot;&gt;Vấn đề: Quyết định bốc hơi&lt;/h2&gt;
&lt;p&gt;Hãy xem xét một kịch bản điển hình. Một developer commit:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;feat(canonical): add DuckDB runtime for pipeline stages&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Commit này đại diện cho một lựa chọn kiến trúc quan trọng. Đội đã đánh giá các phương án, cân nhắc sự đánh đổi, và chốt DuckDB vì những lý do cụ thể. Nhưng toàn bộ ngữ cảnh đó sống trong:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Một luồng Slack (có lẽ đã bị xóa)&lt;/li&gt;
&lt;li&gt;Ký ức của ai đó (chắc chắn đang phai mờ)&lt;/li&gt;
&lt;li&gt;Một comment trong mã (có thể, nếu may mắn)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ba tháng sau, một thành viên mới trong đội hỏi: “Tôi nên dùng DuckDB hay SQLite cho giai đoạn mới này?” Không có ký ức tổ chức, họ hoặc phải phát minh lại bánh xe hoặc đưa ra những lựa chọn không nhất quán.&lt;/p&gt;
&lt;h2 id=&quot;vòng-lặp-từ-commit-đến-ngữ-cảnh&quot;&gt;Vòng lặp: Từ Commit đến ngữ cảnh&lt;/h2&gt;
&lt;p&gt;Quy trình khai thác của chúng tôi biến lịch sử git thành tri thức có thể truy vấn:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Git Commits&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    ▼&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;┌─────────────────────┐&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│  mine sync          │  ← Build index from git history&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└─────────────────────┘&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    ▼&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;┌─────────────────────┐&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│  mine candidates    │  ← Surface commits for review&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└─────────────────────┘&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    ▼&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;┌─────────────────────┐&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│  Classification     │  ← Human or LLM assessment&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│  (changelog or ADR) │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└─────────────────────┘&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    ├──────────────────────┐&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    ▼                      ▼&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;┌─────────────┐    ┌───────────────┐&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│ Changelog   │    │ Decisions     │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│ Ledger      │    │ Registry      │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│ (JSONL)     │    │ (YAML files)  │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└─────────────┘    └───────────────┘&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    │                      │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    ▼                      ▼&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;┌─────────────┐    ┌───────────────┐&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│ CHANGELOG.md│    │ orkestra CLI  │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│ per package │    │ queries       │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└─────────────┘    └───────────────┘&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    │                      │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    └──────────────────────┘&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;              │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;              ▼&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      ┌───────────────┐&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      │ AI Agents     │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      │ (via CLI)     │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      └───────────────┘&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Insight cốt lõi: cả changelog lẫn quyết định kiến trúc đều chảy ra từ cùng một lịch sử git, được xử lý qua một pipeline thống nhất. Điều này đảm bảo không có gì lọt qua kẽ hở.&lt;/p&gt;
&lt;h2 id=&quot;cách-khai-thác-hoạt-động&quot;&gt;Cách khai thác hoạt động&lt;/h2&gt;
&lt;h3 id=&quot;bước-1-đồng-bộ-chỉ-mục&quot;&gt;Bước 1: Đồng bộ chỉ mục&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; mine&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; sync&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Lệnh này quét lịch sử git và xây dựng một chỉ mục của tất cả các commit. Nó trích xuất các tín hiệu có cấu trúc từ mỗi commit:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Loại commit theo chuẩn Conventional Commits (&lt;code&gt;feat&lt;/code&gt;, &lt;code&gt;fix&lt;/code&gt;, &lt;code&gt;chore&lt;/code&gt;, &lt;code&gt;docs&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Scope (package hoặc khu vực nào)&lt;/li&gt;
&lt;li&gt;Các dấu hiệu breaking change&lt;/li&gt;
&lt;li&gt;Các file bị động đến và các chỉ số độ phức tạp&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;bước-2-kiểm-tra-trạng-thái-độ-phủ&quot;&gt;Bước 2: Kiểm tra trạng thái độ phủ&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; mine&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; status&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Đây là trạng thái hiện tại của chúng tôi:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Mining Status&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;=============&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Decisions&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;---------&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  Coverage:        100.0%&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    Processed:     15637  (of 15637)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    Extracted:       476&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    Skipped:       15161&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Changelog&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;---------&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  Coverage:        100.0%&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    Processed:     15637  (of 15637)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    Released:       6799&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    Skipped:        8838&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;15.637 commit đã được xử lý. 476 trở thành quyết định kiến trúc. 6.799 trở thành mục changelog. Mọi commit đều được phân loại.&lt;/p&gt;
&lt;h3 id=&quot;bước-3-lấy-các-ứng-viên-để-rà-soát&quot;&gt;Bước 3: Lấy các ứng viên để rà soát&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; mine&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; candidates&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --limit&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 50&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --full&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Lệnh này làm nổi lên những commit chưa được xử lý, kèm đầy đủ ngữ cảnh để phân loại:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;json&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;sha&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;90571786d99166c0039ca2e80e4d9cd96184bd85&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;date&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;2026-01-26&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;subject&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;feat(canonical): add DuckDB runtime for pipeline stages&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;signals&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;commit_type&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;feat&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;scope&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;canonical&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;breaking&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;is_releasable_type&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;domains_affected&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;pipeline&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;data-architecture&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;body&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Establishes DuckDB as canonical in-process analytical database...&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;files_changed&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;packages/canonical/pipelines/stages/duckdb_runtime.py&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;...&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;stats&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: {&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;files&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;8&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;insertions&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;450&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;deletions&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;120&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Các tín hiệu giúp định hướng việc phân loại: &lt;code&gt;is_releasable_type: true&lt;/code&gt; gợi ý rằng commit này nên xuất hiện trong changelog. Số lượng dòng thêm vào lớn và các file hạ tầng gợi ý rằng nó cũng có thể là một quyết định kiến trúc.&lt;/p&gt;
&lt;h3 id=&quot;bước-4-phân-loại-commit&quot;&gt;Bước 4: Phân loại commit&lt;/h3&gt;
&lt;p&gt;Hai con đường tách nhánh ở đây: mục changelog và quyết định kiến trúc.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Đối với mục changelog:&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; mine&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; classify&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; abc123&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --changelog&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; added&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Điều này ghi nhận rằng commit &lt;code&gt;abc123&lt;/code&gt; nên xuất hiện trong changelog dưới danh mục “Added.”&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Đối với quyết định kiến trúc:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Trước tiên, lấy một decision ID thật:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; registry&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; decisions&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; new&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --domain&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; pipeline&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --dry-run&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Returns: DEC-PL-143&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Sau đó phân loại kèm decision ID đó:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; mine&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; classify&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; abc123&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --decision&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; DEC-PL-143&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Điều này liên kết commit với một bản ghi quyết định sẽ được tạo mới hoặc cập nhật.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Đối với xử lý theo lô (điều chúng tôi thực sự làm):&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Generate classifications file with LLM assistance&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; mine&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; commit&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --input&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; classifications.jsonl&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Định dạng JSONL hỗ trợ cả hai domain trong một lượt:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;jsonl&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;sha&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;abc123&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;domain&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;changelog&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;action&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;release&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;category&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;added&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;summary&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Add DuckDB runtime for pipeline stages&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;sha&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;abc123&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;domain&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;decisions&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;action&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;extract&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;decision_id&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;DEC-PL-142&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;sha&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;def456&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;domain&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;changelog&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;action&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;skip&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;reason&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Chore: dependency update&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;bước-5-render-đầu-ra&quot;&gt;Bước 5: Render đầu ra&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; registry&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; changelog&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; render&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --package&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; &amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;pk&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;g&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Điều này sinh ra các file &lt;code&gt;CHANGELOG.md&lt;/code&gt; cho từng package từ ledger. Các changelog là các tài sản dẫn xuất — xóa chúng đi và chúng sẽ được tái sinh hoàn hảo từ ledger nguồn.&lt;/p&gt;
&lt;h2 id=&quot;cấu-trúc-bản-ghi-quyết-định&quot;&gt;Cấu trúc bản ghi quyết định&lt;/h2&gt;
&lt;p&gt;Các quyết định đã trích xuất trở thành các file YAML với metadata phong phú:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;DEC-PL-142&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;title&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Adopt DuckDB as Canonical Processing Runtime for Pipeline Stages&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;domain&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;pipeline&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;status&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;active&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;created&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&apos;2026-01-26&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;summary&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;  Establishes DuckDB as the canonical in-process analytical database for pipeline&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;  stage transformations. Provides a shared runtime module that resolves settings&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;  from pipeline defaults with stage-level overrides.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;context&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;  Pipeline stages performing data transformations each independently configured&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;  DuckDB connections. This led to inconsistent settings, duplicated configuration&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;  code, and no way to tune DuckDB globally for a pipeline run.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;rationale&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;DuckDB provides efficient in-process OLAP with zero configuration deployment&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Centralized runtime module eliminates duplicated DuckDB setup across stages&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Hierarchical settings enable global tuning with stage-level overrides&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Memory limits and thread counts can be adjusted per-pipeline&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;impact&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  positive&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Consistent DuckDB configuration across all pipeline stages&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Single point of control for memory/thread tuning&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Reduced code duplication in conversion and export stages&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  negative&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Adds dependency on shared runtime module&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Stages must adopt new configuration pattern&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;source_commits&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;sha&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;90571786d99166c0039ca2e80e4d9cd96184bd85&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    message&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&apos;feat(canonical): add DuckDB runtime for pipeline stages&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    date&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&apos;2026-01-26&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    role&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;primary&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;files&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;packages/canonical/pipelines/stages/duckdb_runtime.py&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;packages/canonical/pipelines/runner.py&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;packages/canonical/pipelines/stages/convert_hdx_admin_boundaries_to_geoparquet.py&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;related&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;DEC-DA-014&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;  # Data architecture decisions that influenced this&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Mọi quyết định đều liên kết ngược về các commit nguồn của nó. Mọi quyết định đều chỉ rõ những file nào nó ảnh hưởng. Các quan hệ giữa các quyết định là tường minh.&lt;/p&gt;
&lt;h2 id=&quot;tích-hợp-cli-truy-vấn-ký-ức-tổ-chức&quot;&gt;Tích hợp CLI: Truy vấn ký ức tổ chức&lt;/h2&gt;
&lt;p&gt;Đây là nơi vòng lặp khép lại. Các agent có thể truy vấn quyết định qua CLI:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Search by topic&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; registry&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; decisions&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; search&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --query&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;retry&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Trả về các quyết định về logic thử lại, xử lý lỗi, các mẫu khôi phục.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Get full details on a specific decision&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; registry&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; decisions&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; info&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; DEC-PL-142&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Trả về bản ghi quyết định đầy đủ kèm ngữ cảnh, lý do, và tác động.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# List recent decisions for context&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; registry&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; decisions&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; list&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --limit&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 15&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Cho thấy những lựa chọn kiến trúc nào đã được thực hiện gần đây.&lt;/p&gt;
&lt;h3 id=&quot;cách-các-agent-sử-dụng-điều-này&quot;&gt;Cách các agent sử dụng điều này&lt;/h3&gt;
&lt;p&gt;Các chỉ dẫn nền tảng của orchestrator của chúng tôi bao gồm:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;markdown&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8;font-weight:bold&quot;&gt;**Essential CLI commands:**&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; `orkestra registry decisions search &quot;X&quot;`&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; — Find architectural decisions&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Khi một agent được yêu cầu triển khai thứ gì đó liên quan đến DuckDB, nó có thể kiểm tra trước:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; registry&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; decisions&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; search&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --query&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;DuckDB&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Và khám phá ra DEC-PL-142, học được:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Vì sao chúng tôi chọn DuckDB (context)&lt;/li&gt;
&lt;li&gt;Cách dùng nó đúng cách (agent_guidance)&lt;/li&gt;
&lt;li&gt;Những file nào cần xem (files)&lt;/li&gt;
&lt;li&gt;Những quyết định liên quan nào tồn tại (related)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Agent không phát minh lại bánh xe. Nó xây dựng dựa trên các mẫu đã được thiết lập.&lt;/p&gt;
&lt;h2 id=&quot;bài-kiểm-tra-ba-câu-hỏi&quot;&gt;Bài kiểm tra ba câu hỏi&lt;/h2&gt;
&lt;p&gt;Không phải commit nào cũng xứng đáng có một bản ghi quyết định. Chúng tôi dùng Bài kiểm tra ba câu hỏi để lọc:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Việc này có khó để đưa ra không?&lt;/strong&gt; Nó có đòi hỏi phân tích đáng kể, đánh giá sự đánh đổi, hoặc tranh luận không?&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Việc thay đổi nó có tốn kém không?&lt;/strong&gt; Việc đảo ngược quyết định này có đòi hỏi phải làm lại đáng kể không?&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Nó có tác động toàn hệ thống không?&lt;/strong&gt; Nó có ảnh hưởng đến nhiều package hoặc thiết lập các mẫu mà những người khác sẽ tuân theo không?&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Nếu một commit trả lời “có” cho ít nhất một trong các câu hỏi này, nó là ứng viên để trích xuất thành quyết định. Tỷ lệ điển hình của chúng tôi: 1-4 quyết định trên mỗi 100 commit (khoảng 1-4%).&lt;/p&gt;
&lt;p&gt;Đối với các mục changelog, ngưỡng yêu cầu thấp hơn: bất kỳ thay đổi nào hướng đến người dùng (tính năng, sửa lỗi, cải tiến) đều được ghi lại. Các công việc vặt nội bộ, cập nhật tài liệu, và refactor thường bị bỏ qua. Tỷ lệ điển hình của chúng tôi: 30-50 mục changelog trên mỗi 100 commit.&lt;/p&gt;
&lt;h2 id=&quot;lưu-trữ-dữ-liệu-ledger-chỉ-thêm-append-only&quot;&gt;Lưu trữ dữ liệu: Ledger chỉ-thêm (Append-Only)&lt;/h2&gt;
&lt;p&gt;Hệ thống khai thác dùng các ledger JSONL chỉ-thêm để vận hành đa agent không xung đột:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;packages/orchestration/ai_assets/reference/changelog/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── commits_processed.jsonl  # Classification ledger (both domains)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── release_notes.jsonl      # Changelog entries&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└── commits_index.yaml       # Derived index (gitignored)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;packages/orchestration/ai_assets/reference/decisions/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── registry.yaml            # Decision index&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└── records/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    ├── DEC-AD-001.yaml&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    ├── DEC-AD-002.yaml&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    └── ...&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Định dạng JSONL với &lt;code&gt;merge=union&lt;/code&gt; trong &lt;code&gt;.gitattributes&lt;/code&gt; nghĩa là nhiều agent có thể phân loại commit đồng thời mà không có xung đột merge. Mỗi dòng độc lập với nhau.&lt;/p&gt;
&lt;h2 id=&quot;kiểm-tra-tính-hợp-lệ&quot;&gt;Kiểm tra tính hợp lệ&lt;/h2&gt;
&lt;p&gt;Trước mỗi phiên khai thác, chúng tôi chạy xác thực:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; mine&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; validate&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --quick&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Điều này kiểm tra:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Tính hợp lệ của định dạng SHA&lt;/li&gt;
&lt;li&gt;Sự tuân thủ định dạng decision ID&lt;/li&gt;
&lt;li&gt;Không có mục trùng lặp cho cùng một SHA&lt;/li&gt;
&lt;li&gt;Các quyết định được tham chiếu thực sự tồn tại&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Sau khi phân loại, chúng tôi xác thực lại lần nữa trước khi commit các thay đổi.&lt;/p&gt;
&lt;h2 id=&quot;vì-sao-điều-này-quan-trọng&quot;&gt;Vì sao điều này quan trọng&lt;/h2&gt;
&lt;p&gt;Vòng lặp phản hồi mà chúng tôi đã xây dựng giải quyết một số vấn đề:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Đối với thành viên mới trong đội:&lt;/strong&gt; Thay vì hỏi “tại sao chúng ta lại làm X?”, họ có thể tìm kiếm trong registry quyết định. Ngữ cảnh được bảo toàn.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Đối với AI agent:&lt;/strong&gt; Chúng không hoạt động trong chân không. Chúng có thể truy vấn tri thức tổ chức trước khi đưa ra đề xuất. Khi được yêu cầu thêm một giai đoạn pipeline mới, chúng có thể khám phá ra mẫu DuckDB và làm theo.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Đối với tính nhất quán kiến trúc:&lt;/strong&gt; Các quyết định tường minh và có thể tìm kiếm được. Khi ai đó đề xuất một cách tiếp cận mâu thuẫn với một quyết định hiện có, hệ thống có thể làm nổi lên xung đột đó.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Đối với việc sinh changelog:&lt;/strong&gt; Ghi chú phát hành không phải là một cuộc chạy đua vào phút chót. Chúng là sản phẩm phụ của việc phân loại liên tục trong suốt quá trình phát triển.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Đối với onboarding:&lt;/strong&gt; Các agent mới thừa hưởng toàn bộ ngữ cảnh của codebase. Chúng không chỉ thấy mã nguồn — chúng thấy cả những quyết định đã định hình nên nó.&lt;/p&gt;
&lt;h2 id=&quot;trạng-thái-hiện-tại&quot;&gt;Trạng thái hiện tại&lt;/h2&gt;
&lt;p&gt;Tính đến hôm nay:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;15.637 commit&lt;/strong&gt; đã được xử lý qua pipeline&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;476 quyết định kiến trúc&lt;/strong&gt; đã được trích xuất và ghi lại tài liệu&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;6.799 mục changelog&lt;/strong&gt; đã được ghi nhận&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Độ phủ 100%&lt;/strong&gt; trên cả hai domain&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Mọi commit kể từ khi chúng tôi bắt đầu đều đã được phân loại. Ký ức tổ chức đã hoàn chỉnh và có thể truy vấn được.&lt;/p&gt;
&lt;h2 id=&quot;bắt-đầu&quot;&gt;Bắt đầu&lt;/h2&gt;
&lt;p&gt;Nếu bạn muốn triển khai một thứ tương tự:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Bắt đầu với chuẩn Conventional Commits.&lt;/strong&gt; Pipeline khai thác hoạt động tốt nhất khi các commit có tiền tố có cấu trúc (&lt;code&gt;feat:&lt;/code&gt;, &lt;code&gt;fix:&lt;/code&gt;, &lt;code&gt;chore:&lt;/code&gt;).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Định nghĩa các domain của bạn.&lt;/strong&gt; Chúng tôi dùng các domain như &lt;code&gt;pipeline&lt;/code&gt;, &lt;code&gt;agent-design&lt;/code&gt;, &lt;code&gt;observability&lt;/code&gt;, &lt;code&gt;data-modeling&lt;/code&gt;. Chúng tổ chức các quyết định theo khu vực.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Xây dựng thói quen phân loại.&lt;/strong&gt; Việc khai thác chỉ hiệu quả khi các đội thường xuyên phân loại commit. Xử lý theo lô với sự hỗ trợ của LLM giúp mở rộng quy mô.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Làm cho quyết định có thể truy vấn được.&lt;/strong&gt; Giá trị tăng lên khi các agent có thể tìm kiếm quyết định qua CLI. Tổ chức đầu ra để máy có thể xử lý được.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Khép kín vòng lặp.&lt;/strong&gt; Các quyết định nên ảnh hưởng đến công việc trong tương lai. Đưa các tham chiếu quyết định vào chỉ dẫn agent và checklist rà soát mã.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Mục tiêu không phải là tài liệu hoàn hảo. Đó là làm cho cái &lt;em&gt;lý do&lt;/em&gt; đằng sau các thay đổi trở nên dễ tiếp cận với cả con người và AI, ngay hôm nay và sáu tháng nữa. Khi các thay đổi trở thành ký ức tổ chức, các đội xây dựng dựa trên các mẫu đã được thiết lập thay vì phát minh lại chúng.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Quy trình khai thác là một phần của engine orchestration của chúng tôi, cụ thể là module context engine trong package orchestration của chúng tôi.&lt;/em&gt;&lt;/p&gt;
</content:encoded><category>Architecture</category><category>Workflows</category></item><item><title>Khai thác Skill: Từ 3.500 ứng viên đến 466 năng lực</title><link>https://maguyva.ai/vi/blog/skill-mining-3500-and-counting</link><guid isPermaLink="true">https://maguyva.ai/vi/blog/skill-mining-3500-and-counting</guid><description>Chúng tôi sàng lọc 3.500 skill ứng viên và tiếp nhận 466 skill. Một vòng lặp khai thác và nạp có hệ thống để xây dựng một thư viện skill AI agent mạch lạc ở quy mô lớn.</description><pubDate>Tue, 27 Jan 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Các con số trong bài này phản ánh hệ thống tại thời điểm xuất bản (tháng 1/2026). Xem &lt;a href=&quot;https://maguyva.ai/vi/team&quot;&gt;trang team&lt;/a&gt; của chúng tôi để biết số liệu hiện tại.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;vấn-đề-3500-skill&quot;&gt;Vấn đề 3.500 Skill&lt;/h2&gt;
&lt;p&gt;Khi chúng tôi bắt đầu xây dựng một hệ thống điều phối agent, chúng tôi đối mặt với một thách thức thú vị: có hàng nghìn skill tiềm năng rải rác khắp hệ sinh thái AI. Repository GitHub, tài liệu vendor, dự án cộng đồng, các mẫu nội bộ - skill tồn tại ở khắp mọi nơi. Nhưng cái nào thực sự quan trọng? Cái nào thực sự hoạt động? Và làm sao bạn duy trì được một thư viện skill mạch lạc mà agent thực sự có thể dùng?&lt;/p&gt;
&lt;p&gt;Câu trả lời của chúng tôi: một vòng lặp khai thác và nạp có hệ thống.&lt;/p&gt;
&lt;h2 id=&quot;các-con-số-hôm-nay&quot;&gt;Các con số hôm nay&lt;/h2&gt;
&lt;p&gt;Chỉ hơn ba tháng sau khi Anthropic ra mắt Agent Skills vào ngày 16 tháng 10 năm 2025, đây là vị trí của chúng tôi khi bài viết này được xuất bản vào ngày 27 tháng 1 năm 2026:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Chỉ số&lt;/th&gt;
&lt;th&gt;Số lượng&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Ứng viên đã xác định&lt;/td&gt;
&lt;td&gt;3.500+&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Skill đã tiếp nhận&lt;/td&gt;
&lt;td&gt;466&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Skill vendor&lt;/td&gt;
&lt;td&gt;373&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Skill nội bộ&lt;/td&gt;
&lt;td&gt;93&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Vendor đang hoạt động&lt;/td&gt;
&lt;td&gt;25+&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Token trung bình mỗi skill&lt;/td&gt;
&lt;td&gt;2.834&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Công cụ được tham chiếu&lt;/td&gt;
&lt;td&gt;89&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tag riêng biệt&lt;/td&gt;
&lt;td&gt;635&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Chúng tôi đã rà soát hơn 3.500 skill ứng viên. Chúng tôi đã tiếp nhận 466. Đó là tỷ lệ tiếp nhận 13% - và sự chọn lọc đó là có chủ đích.&lt;/p&gt;
&lt;h2 id=&quot;hệ-thống-tầng-tri-thức&quot;&gt;Hệ thống tầng tri thức&lt;/h2&gt;
&lt;p&gt;Không phải mọi skill đều được tạo ra ngang hàng. Chúng tôi tổ chức chúng thành năm tầng tri thức (K0-K4), mỗi tầng đại diện cho một phạm vi áp dụng khác nhau:&lt;/p&gt;
&lt;h3 id=&quot;k0-foundations-phổ-quát&quot;&gt;K0: Foundations (Phổ quát)&lt;/h3&gt;
&lt;p&gt;Skill mà mọi agent nên có. Chúng đại diện cho năng lực “người suy nghĩ giỏi” hoạt động ở bất cứ đâu.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;foundations/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── test-first-discipline       # TDD: Red-Green-Refactor&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── evidence-based-completion   # Verify before claiming done&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── systematic-debugging        # Root cause methodology&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── structured-planning         # Break work into tasks&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└── context-budget-awareness    # Manage token consumption&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Skill K0 có thể mang theo đến bất kỳ dự án nào, domain nào, stack nào. Chúng mã hóa các mẫu nhận thức phổ quát.&lt;/p&gt;
&lt;h3 id=&quot;k1-identities-chuyên-ngành&quot;&gt;K1: Identities (Chuyên ngành)&lt;/h3&gt;
&lt;p&gt;Skill kiểu “kỹ sư giỏi” hoặc “nhà nghiên cứu giỏi” áp dụng được xuyên suốt các dự án trong một ngành.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;identities/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── research-workflows          # Multi-source research&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── web-extraction-playbook     # Content extraction&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── code-review                 # PR review patterns&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└── cli-interface-standards     # CLI design patterns&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;k2-domains-chuyên-môn-lĩnh-vực&quot;&gt;K2: Domains (Chuyên môn lĩnh vực)&lt;/h3&gt;
&lt;p&gt;Skill kiểu “chuyên gia database giỏi” hoặc “kỹ sư bảo mật giỏi” có thể mang theo trong một lĩnh vực.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;domains/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── schema-migration-workflow   # Safe migration patterns&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── rpc-validation-checklist    # RPC health checks&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── auth-validation-checklist   # JWT/OAuth patterns&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└── secrets-audit-checklist     # Credential scanning&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;k3-stacks-công-nghệ&quot;&gt;K3: Stacks (Công nghệ)&lt;/h3&gt;
&lt;p&gt;Skill kiểu “người dùng Supabase giỏi” hoặc “nhà phát triển Cloudflare giỏi” cho các stack công nghệ cụ thể.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;stacks/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── maguyva-quickstart          # Our semantic search patterns&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── cloudflare-deployment       # Workers/Pages deployment&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└── mcp-tool-best-practices     # MCP tool selection&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;k4-project-tổ-chức&quot;&gt;K4: Project (Tổ chức)&lt;/h3&gt;
&lt;p&gt;Skill đặc thù cho tổ chức và quy trình của chúng tôi.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;project/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── agent-creation-workflow     # How we build agents&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── skill-authoring-workflow    # How we write skills&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── mining-session-workflow     # This very process&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└── vendor-skill-evaluation     # Evaluation rubrics&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;vòng-lặp-khai-thác&quot;&gt;Vòng lặp khai thác&lt;/h2&gt;
&lt;h3 id=&quot;giai-đoạn-1-khám-phá&quot;&gt;Giai đoạn 1: Khám phá&lt;/h3&gt;
&lt;p&gt;Skill đến từ khắp mọi nơi:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Repository Vendor&lt;/strong&gt;: AWS, Anthropic, Cloudflare, Supabase, và các cộng tác viên cộng đồng phát hành các bộ sưu tập skill. Chúng tôi theo dõi 25+ vendor root.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Dự án cộng đồng&lt;/strong&gt;: GitHub đầy ắp các template Claude Code, mẫu agent, và định nghĩa quy trình.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Mẫu nội bộ&lt;/strong&gt;: Khi đội của chúng tôi giải quyết các vấn đề, các mẫu xuất hiện. Chúng được hình thức hóa thành skill.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Khai thác tài liệu&lt;/strong&gt;: Tài liệu kỹ thuật thường chứa các skill ngầm định - quy trình, checklist, cây quyết định.&lt;/p&gt;
&lt;p&gt;Việc khám phá diễn ra liên tục. Chúng tôi dùng một backlog skill để theo dõi các ứng viên trước khi đánh giá chính thức.&lt;/p&gt;
&lt;h3 id=&quot;giai-đoạn-2-đánh-giá&quot;&gt;Giai đoạn 2: Đánh giá&lt;/h3&gt;
&lt;p&gt;Mỗi ứng viên đi qua cùng một rubric:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;adoption_criteria&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;fills_real_gap&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;      # We lack this capability&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;well_structured&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;     # Progressive disclosure&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;actively_maintained&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt; # Commits in last 6 months&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;portable&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;            # Not hyper-specific&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;tested&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;              # Evidence of usage&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Cả năm tiêu chí sản phẩm đều phải đạt. Đây là lý do 87% ứng viên bị loại.&lt;/p&gt;
&lt;p&gt;Sau đó mỗi ứng viên đi qua một lượt rà soát độ tin cậy riêng biệt. Chúng tôi không xem một repository vendor chính thức, một maintainer cộng đồng nổi tiếng, và một repo GitHub ngẫu nhiên là những nguồn chân lý tương đương nhau.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;trust_review&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  vendor_credibility&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;ownership_verified&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;       # Official vendor, known maintainer, or internal source&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;maintenance_signal&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;       # Recent commits, issue response, release history&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;adoption_signal&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;          # Evidence of real use, stars alone are not enough&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;provenance_clear&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;         # We can trace where the skill came from&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  prompt_injection_scan&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;hidden_instruction_check&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt; # Buried &quot;ignore previous instructions&quot; patterns&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;exfiltration_check&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;       # Prompts that try to leak files, secrets, or context&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;authority_check&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;          # Claims of priority over system or developer rules&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  script_audit&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;inspect_scripts&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;          # Read shell/python/js helpers before adoption&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;network_and_exec_review&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;  # curl|bash, remote downloads, subprocess execution&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;file_and_secret_review&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;   # Env vars, credential access, broad file writes&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;destructive_action_check&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt; # rm, reset, overwrite, or unsafe automation&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Các vendor đáng tin cậy được rà soát nguồn gốc nhẹ hơn, nhưng không phải là một vé miễn phí. Các nguồn không đáng tin cậy hoặc không rõ danh tính phải trải qua một lượt kiểm toán thủ công sâu hơn, và chúng tôi không thực thi các script đi kèm cho đến khi chúng đã được đọc, xác định phạm vi, và phân loại là an toàn.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Phân tích khoảng trống&lt;/strong&gt;: Trước khi tiếp nhận, chúng tôi tìm kiếm trong registry của mình:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; skills&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; search&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;&amp;lt;capability&amp;gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Nếu chúng tôi đã có nó rồi, chúng tôi không cần nó nữa. Nếu chúng tôi có thứ gì đó gần giống, chúng tôi có thể hợp nhất thay vì tiếp nhận.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Chấm điểm độ sâu và tiêu chuẩn&lt;/strong&gt;: Chúng tôi cũng chấm điểm mức độ ứng viên sử dụng đầy đủ mô hình agent-skill. Một &lt;code&gt;SKILL.md&lt;/code&gt; đơn lẻ vẫn có thể hữu ích, nhưng các skill sâu hơn có giá trị hơn khi chúng tách biệt các chỉ dẫn khỏi tham chiếu, script, và tài sản theo cách mà &lt;code&gt;agentskills.io&lt;/code&gt; khuyến khích.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;skill_depth&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;level_1&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;SKILL.md only&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;                     # Single instruction file&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;level_2&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;SKILL.md + strong description&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;     # Clear triggers and scope&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;level_3&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;adds references/&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;                  # Load docs only when needed&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;level_4&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;adds atomic scripts/&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;              # Small, reviewable helpers&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;level_5&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;adds assets/examples/templates&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;    # Full progressive disclosure&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;depth_signals&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;standards_adherence&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;        # Structure aligns with agentskills.io conventions&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;reference_quality&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;          # Curated references, not giant context dumps&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;script_atomicity&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;           # Focused helpers, not opaque monoliths&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;tool_boundary_clarity&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;      # Clear limits on what the skill can execute&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;community_signal&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;           # Stars/forks/users help, but only as a weak boost&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Sao GitHub có thể nâng điểm tín nhiệm lên một chút, nhưng chúng không bao giờ cứu được một skill hời hợt hoặc không an toàn. Một repo nhiều sao với một &lt;code&gt;SKILL.md&lt;/code&gt; mơ hồ và các script khó kiểm tra sẽ được chấm điểm thấp hơn một repo nhỏ hơn với mô tả chính xác, tài liệu tham khảo được tuyển chọn trong &lt;code&gt;references/&lt;/code&gt;, và các helper nhỏ làm đúng một việc và thực sự tận dụng đầy đủ năng lực skill.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Phân tích cấu trúc&lt;/strong&gt;: Chúng tôi kiểm tra chất lượng skill:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;wc&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; -l&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; vendor/&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;rep&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;o&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;skil&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;l&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;/SKILL.md&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;  # Size check&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;ls&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; vendor/&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;rep&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;o&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;skil&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;l&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;/scripts/&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;     # Supporting files&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;ls&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; vendor/&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;rep&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;o&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;skil&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;l&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;/references/&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;  # Bundled docs&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Nếu một ứng viên bao gồm script, lượt rà soát đó trở nên nghiêm ngặt hơn. Một skill tốt không chỉ hữu ích; nó phải dễ hiểu, có giới hạn, và an toàn để giao cho một agent. Chỉ riêng bộ lọc an toàn đó đã loại một phần đáng kể những ứng viên vốn đáng quan tâm ở các mặt khác.&lt;/p&gt;
&lt;h3 id=&quot;giai-đoạn-3-nạp-ingestion&quot;&gt;Giai đoạn 3: Nạp (Ingestion)&lt;/h3&gt;
&lt;p&gt;Khi một skill vượt qua đánh giá, nó bước vào registry. Nhưng skill không bao giờ được tiếp nhận nguyên trạng. Chúng được chỉnh sửa để phù hợp với hệ thống của chúng tôi.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Các chỉnh sửa khi tiếp nhận&lt;/strong&gt;:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Chuẩn hóa Metadata&lt;/strong&gt;: Mọi skill nhận được schema frontmatter của chúng tôi&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Gán tầng K&lt;/strong&gt;: Skill được đặt vào tầng tri thức phù hợp&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Làm giàu Tag&lt;/strong&gt;: Tag được thêm vào để hỗ trợ khám phá&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Khai báo công cụ&lt;/strong&gt;: Các công cụ được phép được khai báo tường minh&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Căn chỉnh phần&lt;/strong&gt;: Nội dung được tái cấu trúc để khớp với template của chúng tôi&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Một skill YAML điển hình sau khi nạp:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;metadata&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  identifier&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;vendor-skill-evaluation&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  name&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;vendor-skill-evaluation&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  description&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Systematic evaluation of vendor skills for adoption.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  type&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;workflow&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  layer&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;K4&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  semantic_folder&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;project&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  source&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;core&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  last_updated&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&apos;2026-01-17&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;frontmatter&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  tags&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;agents&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;meta&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;skill-adoption&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;vendor&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  allowed_tools&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Bash&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Read&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Write&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Edit&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Grep&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Glob&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Task&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;giai-đoạn-4-gán-phạm-vi&quot;&gt;Giai đoạn 4: Gán phạm vi&lt;/h3&gt;
&lt;p&gt;Skill được gán vào các scope - các danh mục xác định agent nào nạp skill nào:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;scopes&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  database&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    primary_skills&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;domains/schema-migration-workflow&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;domains/rpc-validation-checklist&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;vendor/supabase/supabase-database&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;vendor/supabase/supabase-auth&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  research&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    primary_skills&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;identities/research-workflows&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;identities/web-extraction-playbook&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;identities/dataset-discovery-quickstart&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Agent khai báo scope của chúng, và skill được tự động gán:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Agent definition&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;scopes&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;database&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;research&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Gets: all database skills + all research skills + universal skills&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;giai-đoạn-5-hiện-thực-hóa&quot;&gt;Giai đoạn 5: Hiện thực hóa&lt;/h3&gt;
&lt;p&gt;Skill không tồn tại dưới dạng YAML trong production. Chúng được render thành các file SKILL.md mà Claude Code có thể nạp:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; sync&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Lệnh này:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Đọc tất cả định nghĩa skill YAML&lt;/li&gt;
&lt;li&gt;Render chúng qua các template Jinja&lt;/li&gt;
&lt;li&gt;Ghi các file SKILL.md vào &lt;code&gt;.claude/skills/&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Tổ chức theo tầng K (foundations/, identities/, domains/, stacks/, project/)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Cấu trúc đầu ra cuối cùng:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;.claude/skills/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── foundations/     # K0: Universal&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── identities/      # K1: Discipline&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── domains/         # K2: Subject&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── stacks/          # K3: Technology&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── project/         # K4: Organization&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└── vendor/          # External skills&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;mẫu-phạm-vi-ngủ-đông-dormant-scope&quot;&gt;Mẫu phạm vi ngủ đông (Dormant Scope)&lt;/h2&gt;
&lt;p&gt;Một trong những mẫu mạnh mẽ nhất của chúng tôi là các skill “đã tiếp nhận nhưng chưa nạp.” Chúng tôi gọi chúng là các scope ngủ đông.&lt;/p&gt;
&lt;p&gt;Hãy xem xét các skill điện toán khoa học từ repository k-dense-scientific. Chúng tôi đã tiếp nhận hơn 120 skill bao phủ tin sinh học, hóa học, điện toán lượng tử, và tin học lâm sàng. Nhưng hầu hết các agent của chúng tôi không cần docking phân tử hay phân tích biểu hiện gen.&lt;/p&gt;
&lt;p&gt;Thay vì nạp cả 120 skill vào mọi agent (làm phình to cửa sổ ngữ cảnh), chúng tôi:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Tiếp nhận&lt;/strong&gt; các skill với một scope cụ thể (ví dụ: &lt;code&gt;bioinformatics&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Giữ chúng ở trạng thái &lt;strong&gt;ngủ đông&lt;/strong&gt; - đã đăng ký nhưng chưa nạp&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Kích hoạt&lt;/strong&gt; chúng chỉ khi một agent khai báo scope đó&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# In scopes.yaml - dormant scope&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;bioinformatics&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  description&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Bioinformatics and genomics&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  primary_skills&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: []  &lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Empty - skills exist but aren&apos;t loaded&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# When an agent needs bioinformatics:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Agent YAML&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;scopes&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;research&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;bioinformatics&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]  &lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Now loads bioinformatics skills&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Mẫu này cho phép chúng tôi có 466 skill trong registry trong khi các agent điển hình chỉ nạp 40-60 skill liên quan.&lt;/p&gt;
&lt;h2 id=&quot;các-loại-skill&quot;&gt;Các loại Skill&lt;/h2&gt;
&lt;p&gt;Skill xuất hiện dưới ba mẫu nhận thức:&lt;/p&gt;
&lt;h3 id=&quot;workflow&quot;&gt;Workflow&lt;/h3&gt;
&lt;p&gt;Các bước quy trình có thứ tự: “1. Làm X, 2. Sau đó Y, 3. Cuối cùng Z”&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;type&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;workflow&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Examples: schema-migration-workflow, mining-session-workflow&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;discipline&quot;&gt;Discipline&lt;/h3&gt;
&lt;p&gt;Rào chắn hành vi: “Luôn X”, “Không bao giờ Y”, “Ưu tiên Z”&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;type&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;discipline&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Examples: test-first-discipline, evidence-based-completion&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;checklist&quot;&gt;Checklist&lt;/h3&gt;
&lt;p&gt;Tiêu chí xác minh: “Xác nhận X”, “Kiểm chứng Y”, “Kiểm tra Z”&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;type&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;checklist&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Examples: auth-validation-checklist, secrets-audit-checklist&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;kiểm-tra-chất-lượng&quot;&gt;Kiểm tra chất lượng&lt;/h2&gt;
&lt;p&gt;Mọi skill phải vượt qua xác thực trước khi lên sóng:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;validation&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  file_exists&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;           # Skill file at declared path&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  frontmatter_valid&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;     # Frontmatter parses correctly&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  sections_complete&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;     # Expected sections present&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  tools_registered&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;      # Declared tools exist in registry&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Mô tả phải có 50-400 ký tự với các cụm từ kích hoạt (“Dùng khi…”, “Khi bạn cần…”) để Claude Code biết khi nào nên gợi ý chúng.&lt;/p&gt;
&lt;p&gt;Chúng tôi xác thực liên tục:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; validate&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --show-warnings&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;hệ-sinh-thái-vendor&quot;&gt;Hệ sinh thái Vendor&lt;/h2&gt;
&lt;p&gt;373 skill vendor của chúng tôi đến từ:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Nhà cung cấp&lt;/th&gt;
&lt;th&gt;Skill&lt;/th&gt;
&lt;th&gt;Lĩnh vực&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;AWS Agent&lt;/td&gt;
&lt;td&gt;19&lt;/td&gt;
&lt;td&gt;Dịch vụ đám mây&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Anthropic&lt;/td&gt;
&lt;td&gt;12&lt;/td&gt;
&lt;td&gt;Sinh tài liệu&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cloudflare&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;Điện toán biên&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Supabase&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;Database&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;k-dense&lt;/td&gt;
&lt;td&gt;100+&lt;/td&gt;
&lt;td&gt;Điện toán khoa học&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;silvainfm&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;Khoa học dữ liệu&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Java Developer Kit&lt;/td&gt;
&lt;td&gt;45+&lt;/td&gt;
&lt;td&gt;Spring/Java&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Vercel&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;Tự động hóa trình duyệt&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Mỗi vendor root được khai báo trong metadata.yaml:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;vendor_roots&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;path&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;vendor/aws-agent-skills&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    provider&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;aws&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;path&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;vendor/k-dense-scientific/scientific-skills&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    provider&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;k-dense&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;path&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;vendor/supabase-skills&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    provider&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;supabase&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Khi &lt;code&gt;orkestra sync&lt;/code&gt; chạy, các skill vendor được symlink vào &lt;code&gt;.claude/skills/vendor/&lt;/code&gt; kèm namespace nhà cung cấp của chúng.&lt;/p&gt;
&lt;h2 id=&quot;những-gì-chúng-tôi-đã-học-được&quot;&gt;Những gì chúng tôi đã học được&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Sự chọn lọc mang lại kết quả.&lt;/strong&gt; Thật hấp dẫn khi muốn tiếp nhận mọi thứ trông có vẻ hữu ích. Nhưng mỗi skill đều tốn token. Với trung bình 2.834 token mỗi skill, sự phình to gây tổn hại nhanh chóng. Tỷ lệ tiếp nhận 13% của chúng tôi giữ cho các agent gọn nhẹ.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Cấu trúc cho phép khám phá.&lt;/strong&gt; Hệ thống tầng K không chỉ là tổ chức - đó là về khả năng mang theo. Skill K0 có thể tái sử dụng ở bất cứ đâu. Skill K4 có chủ đích đặc thù cho dự án. Sự rõ ràng này giúp cả con người lẫn agent tìm thấy những gì họ cần.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Scope ngủ đông mở rộng quy mô.&lt;/strong&gt; Bạn có thể tiếp nhận hàng trăm skill mà không cần nạp tất cả. Scope cho phép bạn xây dựng một registry toàn diện trong khi vẫn giữ cửa sổ ngữ cảnh của từng agent ở mức quản lý được.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Chỉnh sửa khi tiếp nhận là thiết yếu.&lt;/strong&gt; Skill vendor thô hiếm khi phù hợp với hệ thống của bạn. Quy trình nạp - thêm metadata, gán tầng, làm giàu tag - khiến các skill bên ngoài hoạt động được ở nội bộ.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Khai thác diễn ra liên tục.&lt;/strong&gt; Con số 3.500 vẫn tiếp tục tăng. Các repo vendor mới xuất hiện. Các mẫu cộng đồng nổi lên. Các quy trình nội bộ được củng cố. Vòng lặp không bao giờ dừng lại.&lt;/p&gt;
&lt;h2 id=&quot;điều-gì-tiếp-theo&quot;&gt;Điều gì tiếp theo&lt;/h2&gt;
&lt;p&gt;Chúng tôi đang làm việc trên một số cải tiến:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Phát hiện khoảng trống tự động&lt;/strong&gt;: Cảnh báo khi các lỗi agent phổ biến có thể được giải quyết bởi một skill chưa được tiếp nhận&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Quy trình khai tử skill&lt;/strong&gt;: Quy trình chính thức để loại bỏ các skill đã bị thay thế hoặc không được dùng&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Phụ thuộc liên-skill&lt;/strong&gt;: Khai báo tường minh các điều kiện tiên quyết của skill&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Phân tích sử dụng&lt;/strong&gt;: Theo dõi skill nào agent thực sự gọi so với chỉ nạp&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Vòng lặp khai thác skill là hạ tầng. Nó không hào nhoáng. Nhưng đó là thứ khiến 41 agent hoạt động mạch lạc với 466 năng lực trong khi vẫn nằm trong giới hạn ngữ cảnh.&lt;/p&gt;
&lt;p&gt;Đó là câu chuyện về việc 3.500 trở thành 466 như thế nào. Không phải bằng cách bỏ qua 3.000 - mà bằng cách đánh giá chúng có hệ thống và chỉ tiếp nhận những gì thực sự hoạt động.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Muốn xem hệ thống skill hoạt động trong thực tế? Hãy xem &lt;code&gt;uv run orkestra skills list&lt;/code&gt; để khám phá registry hiện tại của chúng tôi.&lt;/em&gt;&lt;/p&gt;
</content:encoded><category>Architecture</category><category>Skills</category></item><item><title>Bộc lộ dần dần: Cửa sổ CLI nhìn vào hệ thống agent</title><link>https://maguyva.ai/vi/blog/progressive-disclosure-cli-into-agents</link><guid isPermaLink="true">https://maguyva.ai/vi/blog/progressive-disclosure-cli-into-agents</guid><description>Mặc định, rất khó quan sát cách các hệ thống agent hoạt động. Bộc lộ dần dần (progressive disclosure) cho người vận hành các khung nhìn CLI theo từng lớp, từ kiểm tra trạng thái nhanh đến toàn bộ nội tại của agent và dấu vết quyết định.</description><pubDate>Tue, 20 Jan 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Các con số trong bài này phản ánh hệ thống tại thời điểm xuất bản (tháng 1/2026). Xem &lt;a href=&quot;https://maguyva.ai/vi/team&quot;&gt;trang team&lt;/a&gt; của chúng tôi để biết số liệu hiện tại.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Thiết kế của các hệ thống agent khiến cách chúng hoạt động khó quan sát. Chúng ra quyết định, gọi công cụ, và điều phối công việc trên hàng chục chuyên gia. Nhưng khi có gì đó trục trặc — hoặc khi bạn đơn giản chỉ muốn hiểu chuyện gì đang xảy ra — bạn nhìn vào đâu?&lt;/p&gt;
&lt;p&gt;Câu trả lời là bộc lộ dần dần (progressive disclosure): một giao diện theo lớp bộc lộ đúng bằng lượng độ phức tạp bạn cần, đúng vào lúc bạn cần nó.&lt;/p&gt;
&lt;h2 id=&quot;vấn-đề-thiếu-khả-năng-quan-sát&quot;&gt;Vấn đề thiếu khả năng quan sát&lt;/h2&gt;
&lt;p&gt;Một hệ thống điều phối agent hiện đại có thể có:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;40+ agent chuyên biệt, mỗi agent có năng lực riêng&lt;/li&gt;
&lt;li&gt;700+ skill trải khắp tự động hóa nội bộ và tích hợp vendor&lt;/li&gt;
&lt;li&gt;470+ quyết định kiến trúc định hình hành vi&lt;/li&gt;
&lt;li&gt;Hàng chục máy chủ công cụ MCP cung cấp năng lực bên ngoài&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Độ phức tạp này là có chủ đích. Agent cần quyền truy cập vào ngữ cảnh phong phú — tri thức domain, trí tuệ mã nguồn, schema database — để ra quyết định tốt. Nhưng chính sự phong phú đó tạo ra một vấn đề về khả năng quan sát.&lt;/p&gt;
&lt;p&gt;Làm sao bạn biết agent nào xử lý di trú database? Những quyết định nào đã định hình hành vi xếp hạng của hệ thống tìm kiếm? Agent tư vấn kiến trúc có quyền truy cập vào những công cụ nào?&lt;/p&gt;
&lt;p&gt;Không có quyền truy cập có cấu trúc, bạn chỉ còn cách đọc mã nguồn hoặc hy vọng tài liệu vẫn còn cập nhật.&lt;/p&gt;
&lt;h2 id=&quot;bộc-lộ-dần-dần-như-một-kiến-trúc&quot;&gt;Bộc lộ dần dần như một kiến trúc&lt;/h2&gt;
&lt;p&gt;Bộc lộ dần dần không chỉ là một mẫu UI. Đó là một nguyên tắc kiến trúc: tổ chức thông tin theo từng lớp, mỗi lớp sâu hơn lớp trước, để người dùng có thể dừng lại ở mức trả lời được câu hỏi của họ.&lt;/p&gt;
&lt;p&gt;Với các hệ thống agent, điều này chuyển thành các lệnh CLI ở các độ sâu tăng dần:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Mức&lt;/th&gt;
&lt;th&gt;Lệnh&lt;/th&gt;
&lt;th&gt;Câu hỏi được trả lời&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;code&gt;orkestra system status&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Mọi thứ có khỏe mạnh không?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;code&gt;orkestra agents list&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Có những agent nào?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;&lt;code&gt;orkestra agents info &amp;lt;name&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Agent này làm gì?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;&lt;code&gt;orkestra decisions search&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Tại sao nó hoạt động theo cách này?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;Công cụ MCP của Maguyva&lt;/td&gt;
&lt;td&gt;Cho tôi xem mã nguồn.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Mỗi mức trả lời một câu hỏi tiếp nối tự nhiên. Bạn hiếm khi cần nhảy thẳng đến mức 5.&lt;/p&gt;
&lt;h2 id=&quot;mức-1-sức-khỏe-hệ-thống&quot;&gt;Mức 1: Sức khỏe hệ thống&lt;/h2&gt;
&lt;p&gt;Câu hỏi đầu tiên luôn là: mọi thứ có đang hoạt động không?&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; system&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; status&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;json&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;agents&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;40&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;skills_internal&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;466&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;skills_vendor&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;240&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;skills_total&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;706&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;commands&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;17&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Một lệnh. Bốn con số. Đủ để biết hệ thống đã được cấu hình và các registry đã được nạp đầy đủ.&lt;/p&gt;
&lt;p&gt;Nếu số lượng agent giảm đột ngột hoặc skill không nạp được, bạn sẽ thấy điều đó ở đây đầu tiên. Không cần lặn sâu vào log.&lt;/p&gt;
&lt;h2 id=&quot;mức-2-kho-agent&quot;&gt;Mức 2: Kho agent&lt;/h2&gt;
&lt;p&gt;Một khi bạn biết hệ thống khỏe mạnh, câu hỏi tiếp theo là: có gì sẵn có?&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; agents&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; list&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Lệnh này trả về dữ liệu có cấu trúc — tên agent, mô tả, mô hình ưa thích, độ phủ domain. Đầu ra mặc định là JSON, giúp dễ dàng pipe vào &lt;code&gt;jq&lt;/code&gt; để lọc:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; agents&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; list&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; jq&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &apos;.agents[] | select(.model == &quot;opus&quot;) | .name&apos;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Muốn tìm các agent xử lý công việc database? Lệnh tìm kiếm sẽ thu hẹp phạm vi:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; agents&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; search&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;database&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Lệnh này quét tên, mô tả, và năng lực. Bạn tìm đúng chuyên gia mà không cần đọc 40 định nghĩa agent.&lt;/p&gt;
&lt;h2 id=&quot;mức-3-đào-sâu-vào-agent&quot;&gt;Mức 3: Đào sâu vào agent&lt;/h2&gt;
&lt;p&gt;Đã tìm thấy một agent có vẻ liên quan? Lệnh &lt;code&gt;info&lt;/code&gt; bộc lộ mọi thứ:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; agents&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; info&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; architecture-advisor&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Đầu ra bao gồm:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Metadata&lt;/strong&gt;: Tên, danh mục, mô hình ưa thích, mô tả&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Domains&lt;/strong&gt;: Những lĩnh vực tri thức nào agent này bao phủ&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Identity&lt;/strong&gt;: Đặc điểm tính cách (architect, strategist, knowledge-architect)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Hướng dẫn công cụ&lt;/strong&gt;: Tài liệu công cụ nào được tiêm vào ngữ cảnh&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tools&lt;/strong&gt;: Danh sách đầy đủ các công cụ MCP mà agent này có quyền truy cập&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Đây là một mẫu về những gì bạn thấy:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;jsonc&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;metadata&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;name&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;architecture-advisor&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;model&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;opus&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;description&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Strategic decision-making and architectural guidance...&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;domains&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    &quot;product&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    &quot;development/architecture&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    &quot;meta/strategy&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  ],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;tools&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;mcp_tools&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;      &quot;mcp__maguyva__intelligent_search&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;      &quot;mcp__maguyva__analyze_dependencies&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;      &quot;mcp__supabase__execute_sql&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FDAEB7;font-style:italic&quot;&gt;      ...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    ]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Điều này cho bạn biết chính xác agent có thể làm gì. Không cần đến mã nguồn.&lt;/p&gt;
&lt;h2 id=&quot;mức-4-khảo-cổ-quyết-định&quot;&gt;Mức 4: Khảo cổ quyết định&lt;/h2&gt;
&lt;p&gt;Agent hành xử theo các quyết định đã được ghi lại tài liệu. Khi bạn cần hiểu &lt;em&gt;vì sao&lt;/em&gt; một thứ gì đó hoạt động theo một cách cụ thể, registry quyết định là nguồn chân lý.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; decisions&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; search&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;agent&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Lệnh này trả về các quyết định kiến trúc khớp:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;json&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;results&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;      &quot;id&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;DEC-SR-049&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;      &quot;title&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;AI-Agent-First Defaults with Graph Intelligence&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;      &quot;domain&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;search&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;      &quot;status&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;active&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  ]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Mỗi quyết định đều có đầy đủ thông tin về nguồn gốc — khi nào nó được đưa ra, vì sao, những sự đánh đổi nào đã được cân nhắc, những commit nào đã triển khai nó:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; decisions&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; info&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; DEC-SR-049&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;json&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;id&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;DEC-SR-049&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;title&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;AI-Agent-First Defaults with Graph Intelligence&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;summary&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Changes default values for search tools to AI-agent-optimal behavior...&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;rationale&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    &quot;AI agents work better with pre-ranked, importance-weighted results&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    &quot;Graph metrics already computed by pipeline - leverage them&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    &quot;Community context helps agents understand feature scope in single query&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  ],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;source_commits&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;      &quot;sha&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;156a880d05eae295669ef7c194b039023f245511&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;      &quot;message&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;feat(maguyva): enable boost_by_importance...&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  ]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Đây là tài liệu kiến trúc luôn cập nhật vì nó được khai thác từ các commit, không phải được bảo trì thủ công.&lt;/p&gt;
&lt;h2 id=&quot;mức-5-trí-tuệ-mã-nguồn-trực-tiếp&quot;&gt;Mức 5: Trí tuệ mã nguồn trực tiếp&lt;/h2&gt;
&lt;p&gt;Khi bạn cần thấy việc triển khai thực sự — không phải metadata về nó — các công cụ MCP của Maguyva cung cấp quyền truy cập trực tiếp.&lt;/p&gt;
&lt;p&gt;Từ bên trong một phiên agent:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;mcp__maguyva__intelligent_search&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  query: &quot;agent context loading&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Lệnh này tự động định tuyến qua tìm kiếm ngữ nghĩa, văn bản, và AST để tìm mã liên quan. Với các symbol cụ thể:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;mcp__maguyva__find_symbol&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  symbol_name: &quot;load_agent_context&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Cho phân tích phụ thuộc:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;mcp__maguyva__analyze_dependencies&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  target: &quot;packages/orchestration/core/agents.py&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Đây không chỉ là những thứ thay thế grep. Chúng nhận biết đồ thị, được lập chỉ mục ngữ nghĩa, và tích hợp với cùng lớp trí tuệ mã nguồn đang vận hành chính các agent.&lt;/p&gt;
&lt;h2 id=&quot;tìm-kiếm-hợp-nhất-trên-các-registry&quot;&gt;Tìm kiếm hợp nhất trên các Registry&lt;/h2&gt;
&lt;p&gt;Đôi khi bạn không biết registry nào giữ câu trả lời. Tìm kiếm hợp nhất trải khắp mọi thứ:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; search&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;database&quot;&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --summary&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;json&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;query&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;database&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;total&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;254&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;counts&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;agents&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;40&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;skills&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;59&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;decisions&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;476&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;truths&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;packages&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;254 khớp trên năm registry. Bản tóm tắt cho bạn biết nên đào sâu vào đâu. Bỏ &lt;code&gt;--summary&lt;/code&gt; để có kết quả chi tiết, hoặc thêm &lt;code&gt;--limit 5&lt;/code&gt; để giữ đầu ra gọn gàng.&lt;/p&gt;
&lt;h2 id=&quot;vì-sao-điều-này-quan-trọng&quot;&gt;Vì sao điều này quan trọng&lt;/h2&gt;
&lt;p&gt;Bộc lộ dần dần không chỉ là về sự tiện lợi. Nó thay đổi cách bạn tương tác với các hệ thống phức tạp.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Việc debug trở nên khả thi.&lt;/strong&gt; Khi một agent ra một quyết định bất ngờ, bạn không phải grep xuyên qua log. Bạn kiểm tra nó có quyền truy cập vào những công cụ nào (&lt;code&gt;agents info&lt;/code&gt;), những quyết định nào định hình hành vi của nó (&lt;code&gt;decisions search&lt;/code&gt;), và theo dõi việc triển khai nếu cần (&lt;code&gt;intelligent_search&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Onboarding tăng tốc.&lt;/strong&gt; Thành viên mới trong đội không cần đọc toàn bộ codebase. Họ bắt đầu với &lt;code&gt;system status&lt;/code&gt;, khám phá với &lt;code&gt;agents list&lt;/code&gt;, và chỉ đào sâu hơn khi gặp phải thứ gì đó họ không hiểu.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Tài liệu luôn cập nhật.&lt;/strong&gt; Vì CLI đọc từ cùng các registry cấu hình các agent, đầu ra luôn chính xác. Không có sự trôi dạt giữa những gì tài liệu nói và những gì hệ thống làm.&lt;/p&gt;
&lt;h2 id=&quot;cli-như-một-giao-diện&quot;&gt;CLI như một giao diện&lt;/h2&gt;
&lt;p&gt;Chúng tôi có thể đã xây dựng một dashboard web. Chúng tôi có thể đã viết tài liệu đồ sộ. Thay vào đó, chúng tôi xây dựng một CLI đọc trực tiếp từ nguồn chân lý.&lt;/p&gt;
&lt;p&gt;CLI có những lợi thế:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Có thể kết hợp (Composable)&lt;/strong&gt;: Pipe đầu ra qua &lt;code&gt;jq&lt;/code&gt;, tích hợp với script&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Có thể lập trình (Scriptable)&lt;/strong&gt;: Tự động hóa kiểm tra, sinh báo cáo&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Nhanh&lt;/strong&gt;: Không tải trang, không luồng xác thực&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Chính xác&lt;/strong&gt;: Đọc cấu hình thực tế, không phải một bản biểu diễn đã cache&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Với các hệ thống nơi tính đúng đắn quan trọng hơn tính thẩm mỹ, CLI thắng.&lt;/p&gt;
&lt;h2 id=&quot;xây-dựng-bộc-lộ-dần-dần-của-riêng-bạn&quot;&gt;Xây dựng bộc lộ dần dần của riêng bạn&lt;/h2&gt;
&lt;p&gt;Nếu bạn đang xây dựng các hệ thống agent, hãy cân nhắc cách người dùng sẽ kiểm tra chúng:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Bắt đầu với kiểm tra sức khỏe.&lt;/strong&gt; Một lệnh cho bạn biết mọi thứ có đang hoạt động hay không.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cung cấp các chế độ xem danh mục.&lt;/strong&gt; Liệt kê những gì tồn tại trước khi giải thích nó làm gì.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cho phép truy vấn có mục tiêu.&lt;/strong&gt; Tìm kiếm vượt trội hơn duyệt thủ công ở quy mô lớn.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cho phép tra cứu nguồn gốc.&lt;/strong&gt; Cho phép người dùng theo dõi các quyết định về tận nguồn gốc của chúng.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Kết nối với trí tuệ mã nguồn.&lt;/strong&gt; Cuối cùng, người dùng cần thấy việc triển khai.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Mỗi lớp trả lời một câu hỏi tiếp nối. Xây dựng chúng theo thứ tự tần suất — hầu hết người dùng dừng ở lớp 2 hoặc 3. Chỉ những power user mới chạm đến lớp 5.&lt;/p&gt;
&lt;p&gt;Mục tiêu không phải là phơi bày mọi thứ. Đó là phơi bày chính xác những gì cần thiết, đúng vào lúc cần thiết. Đó là bộc lộ dần dần được áp dụng vào kiến trúc agent.&lt;/p&gt;
</content:encoded><category>Architecture</category><category>CLI</category><category>Tooling</category></item><item><title>Ground Truths: Neo AI Agent vào thực tế</title><link>https://maguyva.ai/vi/blog/ground-truths-anchoring-ai-to-reality</link><guid isPermaLink="true">https://maguyva.ai/vi/blog/ground-truths-anchoring-ai-to-reality</guid><description>Các AI agent bịa đặt một cách tự tin. Ground Truth là những sự thật có phiên bản, có phạm vi rõ ràng, giúp neo hành vi của agent vào thực tế. Đây là cách chúng tôi xây dựng và thực thi chúng.</description><pubDate>Tue, 13 Jan 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Các con số trong bài này phản ánh hệ thống tại thời điểm xuất bản (tháng 1/2026). Xem &lt;a href=&quot;https://maguyva.ai/vi/team&quot;&gt;trang team&lt;/a&gt; của chúng tôi để biết số liệu hiện tại.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Các AI agent có năng lực đáng kinh ngạc. Chúng có thể suy luận, tổng hợp, và sinh ra nội dung. Nhưng chúng có một điểm yếu cơ bản: chúng bịa đặt. Không phải với ác ý, mà với sự tự tin. Một agent có thể bịa ra các tham số API không tồn tại, tham chiếu đến các cấu hình chưa từng được định nghĩa, hoặc áp dụng các mẫu từ dữ liệu huấn luyện của nó mâu thuẫn với kiến trúc thực tế của bạn.&lt;/p&gt;
&lt;p&gt;Biện pháp giảm thiểu tiêu chuẩn là “cho agent thêm ngữ cảnh.” Nhưng ngữ cảnh có thể mâu thuẫn nhau. Tài liệu trôi dạt khỏi việc triển khai. Comment nói dối. Ngay cả mã nguồn cũng có thể gây hiểu lầm khi đọc mà không hiểu ý đồ.&lt;/p&gt;
&lt;p&gt;Chúng tôi cần một thứ gì đó tường minh hơn. Một thứ không thể bị bỏ qua hoặc hiểu sai. Một thứ neo được các agent vào thực tế có thể kiểm chứng.&lt;/p&gt;
&lt;p&gt;Chúng tôi gọi chúng là Ground Truth.&lt;/p&gt;
&lt;h2 id=&quot;ground-truth-là-gì&quot;&gt;Ground Truth là gì?&lt;/h2&gt;
&lt;p&gt;Một Ground Truth là một phát biểu sự thật tường minh, có phiên bản, mà các agent phải tôn trọng. Đó không phải là tài liệu. Đó không phải là comment. Đó là một thực thể hạng nhất trong hệ thống, với:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Một định danh duy nhất&lt;/strong&gt; (như &lt;code&gt;GT-MAG-015&lt;/code&gt; hoặc &lt;code&gt;GT-MAG-036&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Một trạng thái vòng đời&lt;/strong&gt; (current, tentative, hoặc deprecated)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Một phạm vi&lt;/strong&gt; (toàn nền tảng, riêng cho package, hoặc gắn với domain)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Bằng chứng&lt;/strong&gt; (đường dẫn file, URL, hoặc tham chiếu chứng minh phát biểu đó)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Hướng dẫn cho agent&lt;/strong&gt; (chỉ dẫn nên làm/nên tránh tường minh)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Đây là một ví dụ từ nền tảng trí tuệ mã nguồn Maguyva của chúng tôi:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;GT-MAG-015&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  status&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;current&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  scope&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;package&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  statement&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    Fuzzy symbol matching is opt-in via `find_similar=true`.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    Default behavior returns empty results for non-existent symbols;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    `exact_match=true` enforces strict matching and disables all fuzzy fallbacks.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  rationale&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    Deterministic defaults prevent agents from receiving misleading results.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    Typos should fail explicitly rather than silently returning unrelated symbols.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  evidence&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;packages/maguyva/server/src/maguyva/services/code_analysis_service.py&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;packages/maguyva/server/docs/quick_reference/parameters.md&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  last_verified&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;2026-01-25&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  tags&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;product&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;ai_first&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;principle&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Đây không phải là văn xuôi. Đó là một hợp đồng. Khi một agent gặp Ground Truth này, nó biết:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Mặc định là tất định (kết quả rỗng, không phải phỏng đoán bằng so khớp gần đúng)&lt;/li&gt;
&lt;li&gt;Có các tham số cụ thể (&lt;code&gt;find_similar&lt;/code&gt;, &lt;code&gt;exact_match&lt;/code&gt;) với hành vi đã được định nghĩa&lt;/li&gt;
&lt;li&gt;Bằng chứng tồn tại trong các file cụ thể có thể được xác minh&lt;/li&gt;
&lt;li&gt;Phát biểu này đã được xác minh vào một ngày cụ thể&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;giải-phẫu-một-registry-ground-truth&quot;&gt;Giải phẫu một Registry Ground Truth&lt;/h2&gt;
&lt;p&gt;Ground Truth sống trong các registry YAML dưới &lt;code&gt;ai_assets/reference/ground_truths.yaml&lt;/code&gt;. Mỗi package hoặc domain có thể có registry riêng. Cấu trúc như sau:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;metadata&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  title&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Maguyva Ground Truths&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  summary&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Foundational constraints and principles that guide Maguyva.&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  last_updated&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;2026-01-26&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  owner&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;maguyva&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  render&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    include_statuses&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;current&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;tentative&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    show_deprecated&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    groups&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;title&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Product Principles&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;        tags&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;product&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;principle&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;brand&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;title&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Architecture &amp;amp; Boundaries&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;        tags&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;architecture&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;boundaries&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;cqrs&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;statements&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;GT-MAG-001&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    status&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;current&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    scope&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;package&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    statement&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Maguyva is read-only with respect to user repositories...&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    ...&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Registry bao gồm metadata về chính bộ sưu tập đó, cấu hình render để sinh tài liệu, và bản thân các phát biểu. Mỗi phát biểu tuân theo một schema nghiêm ngặt được xác thực bởi các model Pydantic:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;python&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; GroundTruthStatement&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;BaseModel&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;str&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    status: GTStatus  &lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# current, tentative, deprecated&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    source: GTSource &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; None&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;  # claude-code, orkestra, discipline&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    scope: GTScope  &lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# platform, package, domain&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    statement: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;str&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    rationale: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; None&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    evidence: list[&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    last_verified: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; None&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    tags: list[&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    agent_guidance: AgentGuidance &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; None&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;agent-truy-cập-ground-truth-bằng-cách-nào&quot;&gt;Agent truy cập Ground Truth bằng cách nào&lt;/h2&gt;
&lt;p&gt;Ground Truth được cung cấp cho agent qua nhiều kênh:&lt;/p&gt;
&lt;h3 id=&quot;1-tài-liệu-đã-render&quot;&gt;1. Tài liệu đã render&lt;/h3&gt;
&lt;p&gt;Lệnh &lt;code&gt;orkestra sync&lt;/code&gt; biến đổi các registry YAML thành markdown dễ đọc:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; sync&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Điều này sinh ra các file &lt;code&gt;GROUND_TRUTHS.md&lt;/code&gt; được đưa vào ngữ cảnh của agent. Đầu ra đã render nhóm các phát biểu theo trạng thái và danh mục:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;markdown&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF;font-weight:bold&quot;&gt;## Current&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF;font-weight:bold&quot;&gt;### Product Principles&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; Maguyva is read-only with respect to user repositories... (GT-MAG-001)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; Design tool responses for AI agents first... (GT-MAG-009)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF;font-weight:bold&quot;&gt;### Architecture &amp;amp; Boundaries&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; Pipeline and Maguyva boundaries are intentional... (GT-MAG-006)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;2-tìm-kiếm-qua-cli&quot;&gt;2. Tìm kiếm qua CLI&lt;/h3&gt;
&lt;p&gt;Các agent có quyền truy cập shell có thể tìm kiếm Ground Truth theo lập trình:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; registry&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; truths&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; search&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;embedding&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; registry&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; truths&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; search&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --tag&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; security&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; registry&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; truths&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; list&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --status&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; current&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Hàm tìm kiếm chấm điểm các khớp trên nhiều trường với độ liên quan có trọng số:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;python&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; truth_fields&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(gt: GroundTruthStatement) -&amp;gt; list[FieldSpec]:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        FieldSpec(&lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;id&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;weight&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;6&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;values&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;[gt.id]),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        FieldSpec(&lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;statement&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;weight&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;5&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;values&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;[gt.statement]),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        FieldSpec(&lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;rationale&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;weight&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;values&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;[gt.rationale] &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; gt.rationale &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;else&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; []),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        FieldSpec(&lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;tags&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;weight&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;values&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;gt.tags &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;or&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; []),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        FieldSpec(&lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;evidence&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;weight&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;values&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;gt.evidence &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;or&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; []),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    ]&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;3-soạn-ngữ-cảnh-context-composition&quot;&gt;3. Soạn ngữ cảnh (Context Composition)&lt;/h3&gt;
&lt;p&gt;Khi các agent được render từ định nghĩa YAML, ngữ cảnh của chúng có thể tham chiếu đến các registry Ground Truth:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;context_composition&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  domain_knowledge&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;packages/maguyva/ai_assets/reference/ground_truths.yaml&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Điều này đảm bảo các Ground Truth liên quan được nạp trước khi agent bắt đầu công việc.&lt;/p&gt;
&lt;h2 id=&quot;các-loại-ground-truth&quot;&gt;Các loại Ground Truth&lt;/h2&gt;
&lt;p&gt;Nhìn qua các registry của chúng tôi, Ground Truth tập trung thành vài mẫu:&lt;/p&gt;
&lt;h3 id=&quot;nguyên-tắc-sản-phẩm&quot;&gt;Nguyên tắc sản phẩm&lt;/h3&gt;
&lt;p&gt;Các ràng buộc về việc sản phẩm là gì và không phải là gì:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“Maguyva chỉ đọc (read-only) đối với các repo của người dùng; tài sản duy nhất không thể xây dựng lại được là cache embedding đã trả phí.” (GT-MAG-001)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;ranh-giới-kiến-trúc&quot;&gt;Ranh giới kiến trúc&lt;/h3&gt;
&lt;p&gt;Trách nhiệm nằm ở đâu và tại sao:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“Ranh giới giữa Pipeline và Maguyva là có chủ đích: pipeline có thể tái sử dụng, Maguyva nắm giữ logic đặc thù cho mã nguồn, và CQRS tách các thao tác ghi do các giai đoạn pipeline thực hiện khỏi các thao tác đọc của server.” (GT-MAG-006)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;quy-tắc-chống-ảo-giác&quot;&gt;Quy tắc chống ảo giác&lt;/h3&gt;
&lt;p&gt;Các chỉ thị tường minh giữ cho hợp đồng công cụ mang tính tất định thay vì suy luận:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“So khớp symbol mờ (fuzzy) là tùy chọn, kích hoạt qua &lt;code&gt;find_similar=true&lt;/code&gt;. Hành vi mặc định trả về kết quả rỗng cho các symbol không tồn tại; &lt;code&gt;exact_match=true&lt;/code&gt; ép buộc so khớp nghiêm ngặt và tắt mọi phương án dự phòng mờ.” (GT-MAG-015)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;kiểm-tra-chất-lượng&quot;&gt;Kiểm tra chất lượng&lt;/h3&gt;
&lt;p&gt;Các tiêu chuẩn phải được duy trì:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“Các thay đổi đối với hạ tầng dùng chung (post_filters.py, các trình trích xuất quan hệ, các handler dùng chung) PHẢI được xác thực trên TẤT CẢ các ngôn ngữ được hỗ trợ thông qua việc sinh manifest đầy đủ trước khi commit. Xác thực trên một ngôn ngữ duy nhất là không đủ đối với mã dùng chung.” (GT-MAG-036)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;mẫu-triển-khai-mã-nguồn&quot;&gt;Mẫu triển khai mã nguồn&lt;/h3&gt;
&lt;p&gt;Các yêu cầu triển khai:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“Dùng &lt;code&gt;asyncio.to_thread()&lt;/code&gt; cho công việc nặng CPU trong ngữ cảnh async; mẫu &lt;code&gt;loop.run_in_executor()&lt;/code&gt; đã lỗi thời không nên được dùng trong mã mới.” (GT-MAG-018)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;vòng-đời-của-một-ground-truth&quot;&gt;Vòng đời của một Ground Truth&lt;/h2&gt;
&lt;p&gt;Ground Truth không tĩnh. Chúng tiến hóa qua một vòng đời được định nghĩa rõ ràng:&lt;/p&gt;
&lt;h3 id=&quot;tentative-tạm-thời&quot;&gt;Tentative (Tạm thời)&lt;/h3&gt;
&lt;p&gt;Một sự thật được đề xuất, đang trong quá trình đánh giá. Phát biểu được ghi lại nhưng có thể thay đổi:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;GT-MAG-044&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  status&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;tentative&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  statement&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    get_file with include_metadata=false may still return metadata in the&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    response because middleware may re-inject it for AI agent disambiguation.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;current-hiện-hành&quot;&gt;Current (Hiện hành)&lt;/h3&gt;
&lt;p&gt;Một sự thật đã được xác minh mà các agent phải tôn trọng. Bằng chứng đã được xác thực:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;GT-MAG-017&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  status&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;current&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  last_verified&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;2026-01-26&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  evidence&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;packages/maguyva/server/src/maguyva/services/supabase.py&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;deprecated-đã-lỗi-thời&quot;&gt;Deprecated (Đã lỗi thời)&lt;/h3&gt;
&lt;p&gt;Một sự thật không còn áp dụng nữa. Được giữ lại để tham khảo lịch sử kèm con trỏ đến thứ đã thay thế nó:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;GT-MAG-099&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  status&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;deprecated&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  superseded_by&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;GT-MAG-015&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  notes&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Replaced when we moved to explicit matching behavior&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;tại-sao-không-chỉ-dùng-tài-liệu&quot;&gt;Tại sao không chỉ dùng tài liệu?&lt;/h2&gt;
&lt;p&gt;Tài liệu phục vụ một mục đích khác. Nó giải thích. Nó dạy. Nó có thể mơ hồ, có thể dùng các từ định tính như “nhìn chung” hoặc “thường thì.”&lt;/p&gt;
&lt;p&gt;Ground Truth không thể mơ hồ. Chúng là các khẳng định. Chúng hoặc áp dụng hoặc không.&lt;/p&gt;
&lt;p&gt;Hãy xem xét sự khác biệt:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Tài liệu:&lt;/strong&gt; “API nhìn chung trả về kết quả rỗng khi không tìm thấy symbol, mặc dù so khớp mờ có thể được bật trong một số cấu hình.”&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ground Truth:&lt;/strong&gt; “Hành vi mặc định trả về kết quả rỗng cho các symbol không tồn tại; &lt;code&gt;exact_match=true&lt;/code&gt; ép buộc so khớp nghiêm ngặt và tắt mọi phương án dự phòng mờ.”&lt;/p&gt;
&lt;p&gt;Cái đầu tiên hữu ích cho con người khi học hệ thống. Cái thứ hai cho agent chỉ dẫn có thể áp dụng trực tiếp khi ra quyết định.&lt;/p&gt;
&lt;h2 id=&quot;hướng-dẫn-cho-agent-nên-làm-và-nên-tránh&quot;&gt;Hướng dẫn cho agent: Nên làm và nên tránh&lt;/h2&gt;
&lt;p&gt;Một số Ground Truth bao gồm hướng dẫn tường minh cho agent:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;GT-MAG-022&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  statement&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    Accuracy fixes must happen at extraction time via production code,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    never via validator filters.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  agent_guidance&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    do&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Fix extraction bugs in YAML config, handlers, or tree-sitter queries&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Add test cases at the layer where the fix lives&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    avoid&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Adding validator filters to mask production bugs&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Creating test-only workarounds for extraction issues&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Điều này loại bỏ sự mơ hồ. Một agent đọc điều này biết không chỉ điều gì là đúng, mà còn biết sự thật đó ngụ ý hành động gì.&lt;/p&gt;
&lt;h2 id=&quot;xác-minh-và-bảo-trì&quot;&gt;Xác minh và bảo trì&lt;/h2&gt;
&lt;p&gt;Ground Truth cần được bảo trì. Chúng tôi theo dõi:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;last_verified&lt;/strong&gt;: Khi nào ai đó xác nhận phát biểu vẫn còn đúng&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;evidence&lt;/strong&gt;: Các file chứng minh phát biểu đó (có thể kiểm tra sự tồn tại)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;source&lt;/strong&gt;: Sự thật bắt nguồn từ đâu (kiểm tra qua CLI, rà soát kiến trúc, bài học sau sự cố)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Một Ground Truth với ngày xác minh đã cũ hoặc liên kết bằng chứng bị hỏng là một tín hiệu cần điều tra. Hoặc sự thật đó vẫn còn đúng và cần xác minh lại, hoặc thực tế đã thay đổi và sự thật đó cần được cập nhật.&lt;/p&gt;
&lt;h2 id=&quot;ví-dụ-thực-tế-từ-môi-trường-production&quot;&gt;Ví dụ thực tế từ môi trường production&lt;/h2&gt;
&lt;h3 id=&quot;ranh-giới-bảo-mật&quot;&gt;Ranh giới bảo mật&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;GT-MAG-014&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  statement&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    Maguyva queries are search patterns, not executable code.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    SQL injection prevention is handled by PostgREST parameterization;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    application-layer SQL keyword blocking must never be added.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  rationale&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    Blocking SQL keywords breaks legitimate code search. Users search FOR&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    code containing patterns like &apos;DROP TABLE&apos;, they don&apos;t execute them.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Ground Truth này ngăn chặn một nhóm các “cải tiến bảo mật” bị hiểu sai sẽ làm hỏng sản phẩm.&lt;/p&gt;
&lt;h3 id=&quot;độ-chính-xác-tại-thời-điểm-trích-xuất&quot;&gt;Độ chính xác tại thời điểm trích xuất&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;GT-MAG-022&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  statement&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    Accuracy fixes must happen at extraction time via production code&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    (YAML config, handlers, queries), never via validator filters.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  rationale&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    Validator filters only run during tests. They can hide extractor bugs&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    while production responses remain wrong.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Điều này đến từ một kinh nghiệm đau đớn. Các agent từng vá các gói ngôn ngữ đang lỗi bằng cách thêm các bộ lọc chỉ-dành-cho-validator khiến bộ kiểm thử trông xanh hơn, trong khi trình trích xuất Maguyva thực tế vẫn phát ra sai edge. Quy tắc này buộc các bản sửa phải quay lại đường thực: cấu hình YAML, truy vấn, hoặc handler.&lt;/p&gt;
&lt;h3 id=&quot;lọc-đa-tầng&quot;&gt;Lọc đa tầng&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;GT-MAG-023&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  statement&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    Language engine uses three-tier filtering: external_method_patterns&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    (builtins/stdlib), allowlists (legitimate idioms), and expected_call_targets&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    (validation-time deduplication). Each tier serves a distinct purpose.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  rationale&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    Conflating filter purposes leads to either over-filtering (missing real&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    relationships) or under-filtering (noise).&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Điều này ngăn các agent thêm bộ lọc sai chỗ, một lỗi phổ biến từng gây ra hồi quy độ chính xác.&lt;/p&gt;
&lt;h2 id=&quot;tích-hợp-với-hệ-thống-orchestration&quot;&gt;Tích hợp với hệ thống Orchestration&lt;/h2&gt;
&lt;p&gt;Ground Truth là một tầng trong một hệ thống ngữ cảnh rộng hơn:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Quyết định kiến trúc (ADR)&lt;/strong&gt; - Ghi lại vì sao chúng tôi chọn phương án A thay vì B&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ground Truth&lt;/strong&gt; - Phát biểu điều gì chắc chắn đúng ngay lúc này&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mẫu Domain&lt;/strong&gt; - Mô tả cách làm đúng&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Anti-Pattern&lt;/strong&gt; - Mô tả điều cần tránh và tại sao&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Một agent làm việc trong hệ thống có quyền truy cập cả bốn thứ này. Ground Truth cung cấp neo sự thật, trong khi các quyết định giải thích lịch sử, các mẫu hướng dẫn triển khai, và các anti-pattern cảnh báo về cạm bẫy.&lt;/p&gt;
&lt;h2 id=&quot;đo-lường-tác-động&quot;&gt;Đo lường tác động&lt;/h2&gt;
&lt;p&gt;Kể từ khi đưa Ground Truth vào sử dụng, chúng tôi đã quan sát thấy:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ít hơn các chu trình “sửa cái bản sửa bị ảo giác”&lt;/li&gt;
&lt;li&gt;Việc ra quyết định của agent tự tin hơn khi sự thật đã rõ ràng&lt;/li&gt;
&lt;li&gt;Rà soát PR tốt hơn vì kỳ vọng đã tường minh&lt;/li&gt;
&lt;li&gt;Thời gian onboarding giảm cho cả agent mới (và con người)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Khoản đầu tư vào việc bảo trì Ground Truth mang lại lợi ích trong việc giảm debug và làm rõ ranh giới hệ thống.&lt;/p&gt;
&lt;h2 id=&quot;bắt-đầu&quot;&gt;Bắt đầu&lt;/h2&gt;
&lt;p&gt;Để thêm một Ground Truth vào hệ thống của bạn:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Tạo một &lt;code&gt;ground_truths.yaml&lt;/code&gt; trong thư mục &lt;code&gt;ai_assets/reference/&lt;/code&gt; của package của bạn&lt;/li&gt;
&lt;li&gt;Định nghĩa metadata và cấu hình render&lt;/li&gt;
&lt;li&gt;Thêm các phát biểu tuân theo schema&lt;/li&gt;
&lt;li&gt;Chạy &lt;code&gt;uv run orkestra sync&lt;/code&gt; để sinh tài liệu&lt;/li&gt;
&lt;li&gt;Đưa registry vào phần soạn ngữ cảnh của agent&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Bắt đầu với những sự thật gây ra nhiều nhầm lẫn nhất hoặc những ràng buộc bị vi phạm thường xuyên nhất. Đó là những Ground Truth có giá trị cao nhất của bạn.&lt;/p&gt;
&lt;h2 id=&quot;kết-luận&quot;&gt;Kết luận&lt;/h2&gt;
&lt;p&gt;Các AI agent sẽ ảo giác. Đó là bản chất của chúng. Nhưng chúng ta có thể tạo ra những môi trường nơi ảo giác bị kiềm chế, nơi một số sự thật nhất định không thể thương lượng, nơi các agent có thể đối chiếu giả định của mình với thực tế đã được xác minh.&lt;/p&gt;
&lt;p&gt;Ground Truth không phải là một giải pháp hoàn chỉnh. Chúng cần được bảo trì. Chúng có thể trở nên lỗi thời. Chúng thêm chi phí vào quy trình phát triển.&lt;/p&gt;
&lt;p&gt;Nhưng chúng cung cấp một thứ có giá trị: một vốn từ vựng chung về sự thật mà cả con người và agent đều có thể tin tưởng. Trong một thế giới nơi agent ngày càng tham gia nhiều hơn vào việc phát triển phần mềm, nền tảng chung đó trở nên thiết yếu.&lt;/p&gt;
&lt;p&gt;Phương án thay thế là những chu trình bất tận của việc agent mắc lỗi một cách tự tin và con người phải sửa lại chúng. Ground Truth phá vỡ chu trình đó bằng cách làm cho các bản sửa trở nên tường minh và bền vững.&lt;/p&gt;
&lt;p&gt;Agent của bạn xứng đáng được biết điều gì là đúng. Hãy nói cho chúng biết.&lt;/p&gt;
</content:encoded><category>Architecture</category><category>Grounding</category></item><item><title>Orkestra: Điều phối AI agent ở quy mô lớn</title><link>https://maguyva.ai/vi/blog/orkestra-agent-orchestration</link><guid isPermaLink="true">https://maguyva.ai/vi/blog/orkestra-agent-orchestration</guid><description>Một orchestrator định tuyến công việc đến các AI agent chuyên biệt, mỗi agent có kỹ năng và bộ nhớ riêng. Cách Orkestra điều phối 46 agent và 466 skill trong môi trường production.</description><pubDate>Tue, 06 Jan 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Các con số trong bài này phản ánh hệ thống tại thời điểm xuất bản (tháng 1/2026). Xem &lt;a href=&quot;https://maguyva.ai/vi/team&quot;&gt;trang team&lt;/a&gt; của chúng tôi để biết số liệu hiện tại.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Khi chúng tôi bắt đầu xây dựng với Claude Code, chúng tôi gặp phải một vấn đề mà mọi đội dùng trợ lý lập trình AI cuối cùng đều gặp phải: một agent đơn lẻ không thể làm tốt mọi thứ.&lt;/p&gt;
&lt;p&gt;Bạn có thể prompt một agent để nó trở thành chuyên gia database. Hoặc một kiểm toán viên bảo mật. Hoặc một kỹ sư frontend. Nhưng ngay khi bạn yêu cầu nó làm cả ba việc cùng lúc, chất lượng sẽ giảm sút. Ngữ cảnh bị pha loãng. Các chỉ dẫn mâu thuẫn nhau. Agent trở thành một người làm được mọi thứ nhưng chỉ ở mức tầm thường.&lt;/p&gt;
&lt;p&gt;Vì vậy chúng tôi đã xây dựng Orkestra.&lt;/p&gt;
&lt;h2 id=&quot;orkestra-là-gì&quot;&gt;Orkestra là gì?&lt;/h2&gt;
&lt;p&gt;Orkestra là một hệ thống điều phối agent dành cho Claude Code và các công cụ lập trình AI tương tự. Nó điều phối nhiều agent chuyên biệt, mỗi agent có chuyên môn riêng, dưới một orchestrator duy nhất định tuyến công việc đến đúng chuyên gia.&lt;/p&gt;
&lt;p&gt;Hãy hình dung nó như một công ty cung ứng nhân sự cho AI agent. Orchestrator nhận một tác vụ, xác định chuyên gia nào nên xử lý nó, và ủy quyền kèm đúng ngữ cảnh. Khi công việc hoàn tất, kết quả chảy trở lại orchestrator để tổng hợp.&lt;/p&gt;
&lt;p&gt;Các con số nói lên tất cả:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Thành phần&lt;/th&gt;
&lt;th&gt;Số lượng&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Agent chuyên biệt&lt;/td&gt;
&lt;td&gt;46&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Skill có thể tái sử dụng&lt;/td&gt;
&lt;td&gt;466&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Nguyên mẫu định danh (identity archetype)&lt;/td&gt;
&lt;td&gt;27&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mindset&lt;/td&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Phong cách giao tiếp&lt;/td&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Domain tri thức&lt;/td&gt;
&lt;td&gt;21&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&quot;hệ-thống-nhân-vật-dd-dành-cho-agent&quot;&gt;Hệ thống nhân vật: D&amp;amp;D dành cho Agent&lt;/h2&gt;
&lt;p&gt;Insight cốt lõi đằng sau Orkestra là hành vi của agent nổi lên từ ba thành phần cơ bản có thể kết hợp:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Identity (Định danh)&lt;/strong&gt; định nghĩa agent &lt;em&gt;là gì&lt;/em&gt;. Một architect thiết kế cấu trúc hệ thống. Một debugger truy vết lỗi về tận gốc rễ. Một guardian thực thi tuân thủ và ranh giới bảo mật. Chúng tôi có 27 nguyên mẫu định danh có thể pha trộn.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Mindset&lt;/strong&gt; định nghĩa agent suy nghĩ &lt;em&gt;như thế nào&lt;/em&gt;. Một mindset phân tích neo các khẳng định vào bằng chứng và định lượng sự bất định. Một mindset hoài nghi đặt câu hỏi về các giả định và tìm kiếm bằng chứng phản bác. Một mindset khám phá chấp nhận sự mơ hồ và thử nhiều cách tiếp cận.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Style (Phong cách)&lt;/strong&gt; định nghĩa agent giao tiếp &lt;em&gt;như thế nào&lt;/em&gt;. Một phong cách kỹ thuật bao gồm các giá trị chính xác và tham chiếu đến các file cụ thể. Một phong cách súc tích cắt bỏ lời thừa và đi thẳng vào câu trả lời. Một phong cách ngoại giao cân bằng giữa sự thành thật và sự khéo léo.&lt;/p&gt;
&lt;p&gt;Một agent kết hợp các thành phần này:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# architecture-advisor.yaml&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;identity&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;knowledge-architect&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;architect&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;strategist&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;mindset&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;analytical&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;style&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;concise&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Sự kết hợp này tạo ra một agent thiết kế hệ thống (architect), kết nối tri thức xuyên các domain (knowledge-architect), đặt ra định hướng chiến lược (strategist), suy nghĩ dựa trên bằng chứng và dữ liệu (analytical), và giao tiếp không lời thừa (concise).&lt;/p&gt;
&lt;p&gt;Sức mạnh nằm ở sự bùng nổ tổ hợp. 27 identity nhân với 11 mindset nhân với 10 style cho ra gần 3.000 tính cách agent khả dĩ. Nhưng bạn chỉ cần định nghĩa những tổ hợp thực sự quan trọng cho công việc của mình.&lt;/p&gt;
&lt;h2 id=&quot;skill-các-module-năng-lực-có-thể-tái-sử-dụng&quot;&gt;Skill: Các module năng lực có thể tái sử dụng&lt;/h2&gt;
&lt;p&gt;Skill là tri thức và quy trình mà agent có thể gọi đến. Chúng tuân theo một hệ thống phân tầng dựa trên phạm vi:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tầng&lt;/th&gt;
&lt;th&gt;Tên&lt;/th&gt;
&lt;th&gt;Phạm vi&lt;/th&gt;
&lt;th&gt;Ví dụ&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;K0&lt;/td&gt;
&lt;td&gt;Foundations&lt;/td&gt;
&lt;td&gt;Phương pháp luận phổ quát&lt;/td&gt;
&lt;td&gt;Kỷ luật test-first, hoàn thành dựa trên bằng chứng&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;K1&lt;/td&gt;
&lt;td&gt;Identities&lt;/td&gt;
&lt;td&gt;Quy trình theo vai trò&lt;/td&gt;
&lt;td&gt;Tiêu chuẩn giao diện CLI, playbook hiệu năng&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;K2&lt;/td&gt;
&lt;td&gt;Domains&lt;/td&gt;
&lt;td&gt;Tri thức đặc thù domain&lt;/td&gt;
&lt;td&gt;Mẫu di trú database, xác thực authentication&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;K3&lt;/td&gt;
&lt;td&gt;Stacks&lt;/td&gt;
&lt;td&gt;Đặc thù công nghệ&lt;/td&gt;
&lt;td&gt;Triển khai Cloudflare, vận hành Supabase&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;K4&lt;/td&gt;
&lt;td&gt;Project&lt;/td&gt;
&lt;td&gt;Chỉ riêng codebase này&lt;/td&gt;
&lt;td&gt;Quy trình và quy ước đặc thù dự án&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Skill được nạp khi cần (lazy-loaded). Một agent thấy tên và mô tả skill lúc khởi động, nhưng toàn bộ nội dung skill chỉ được nạp khi được kích hoạt. Điều này giữ ngữ cảnh gọn nhẹ trong khi vẫn cho phép hàng trăm skill có thể được khám phá.&lt;/p&gt;
&lt;p&gt;Mỗi skill bao gồm:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Điều kiện kích hoạt rõ ràng (“Dùng khi di trú schema database”)&lt;/li&gt;
&lt;li&gt;Hướng dẫn từng bước&lt;/li&gt;
&lt;li&gt;Các công cụ được phép cho quy trình&lt;/li&gt;
&lt;li&gt;Tiêu chí thành công và các đường khôi phục khi thất bại&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;466 skill trong registry của chúng tôi bao phủ mọi thứ từ cách ly worktree git đến các quy trình nghiên cứu web cho đến xác thực sức khỏe triển khai.&lt;/p&gt;
&lt;h2 id=&quot;vì-sao-điều-phối-quan-trọng&quot;&gt;Vì sao điều phối quan trọng&lt;/h2&gt;
&lt;p&gt;Kiến trúc agent đơn lẻ nhanh chóng đụng tường:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Pha loãng ngữ cảnh.&lt;/strong&gt; Một cửa sổ ngữ cảnh 200k token nghe có vẻ lớn cho đến khi bạn nạp schema database, tài liệu API, fixture test, và tri thức domain. Các chuyên gia có thể làm việc với ngữ cảnh nhắm mục tiêu.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Chỉ dẫn mâu thuẫn.&lt;/strong&gt; Bảo một agent “kỹ lưỡng nhưng nhanh” và “xác minh mọi thứ nhưng đừng thiết kế quá mức” tạo ra căng thẳng. Các chuyên gia giải quyết điều này bằng cách có phạm vi rõ ràng.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Chiều sâu chuyên môn.&lt;/strong&gt; Một agent tổng quát biết một chút về mọi thứ. Một agent chuyên biệt, được cấu thành với đúng identity và skill, hiểu sâu domain của nó.&lt;/p&gt;
&lt;p&gt;Orkestra triển khai điều phối phẳng: một orchestrator điều phối nhiều chuyên gia. Các chuyên gia không thể sinh ra các chuyên gia con. Điều này ngăn chặn sự bùng nổ độ phức tạp trong khi vẫn cho phép làm việc song song.&lt;/p&gt;
&lt;p&gt;Orchestrator có quyền truy cập vào 2,2 triệu token dung lượng hiệu dụng: cửa sổ 200k của riêng nó cộng với 10 subagent đồng thời, mỗi subagent 200k. Công việc có thể làm cạn kiệt một agent đơn lẻ chạy thoải mái trên toàn bộ đội quân.&lt;/p&gt;
&lt;h2 id=&quot;pipeline-render&quot;&gt;Pipeline Render&lt;/h2&gt;
&lt;p&gt;Các định nghĩa agent sống trong YAML. Claude Code đọc Markdown. Orkestra bắc cầu qua khoảng trống này bằng một pipeline render mang tính tất định:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;YAML Registries → Jinja Templates → .claude/agents/*.md&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Người vận hành chỉnh sửa mã nguồn YAML. Chạy &lt;code&gt;orkestra sync&lt;/code&gt;. Markdown đã render xuất hiện trong &lt;code&gt;.claude/agents/&lt;/code&gt;. Claude Code tiếp nhận các thay đổi.&lt;/p&gt;
&lt;p&gt;Sự tách biệt này phục vụ các đối tượng khác nhau:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Mã nguồn YAML&lt;/strong&gt; bao gồm metadata vòng đời, tag, quy tắc xác thực, và ghi chú lỗi thời cho công cụ&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Markdown đã render&lt;/strong&gt; chỉ bao gồm những gì mô hình cần: mô tả, công cụ, skill, và hướng dẫn hành vi&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Pipeline này ghép identity, mindset, style, và skill thành một prompt mạch lạc duy nhất. Một agent architect-analytical-concise nhận được một system prompt rất khác so với một agent debugger-skeptical-technical, ngay cả khi chúng chia sẻ một số skill nền tảng.&lt;/p&gt;
&lt;h2 id=&quot;tri-thức-domain-mẫu-bốn-file&quot;&gt;Tri thức Domain: Mẫu bốn file&lt;/h2&gt;
&lt;p&gt;Mỗi domain tri thức tuân theo một cấu trúc nhất quán:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;domain-name/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  decisions.md      # Key choices, rationale, consequences&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  patterns.md       # Step-by-step guidance and examples&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  anti-patterns.md  # Failure modes and remediation&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  evolution.md      # Dated log of changes&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Cấu trúc này phục vụ việc nạp ngữ cảnh của agent. Một agent làm việc về authentication nạp &lt;code&gt;authentication/patterns.md&lt;/code&gt; để lấy hướng dẫn và &lt;code&gt;authentication/anti-patterns.md&lt;/code&gt; để tránh những cạm bẫy đã biết. Độ dài các file được điều chỉnh để nạp ngữ cảnh hiệu quả: đủ tập trung để hữu ích, đủ toàn diện để làm tài liệu tham chiếu đáng tin cậy.&lt;/p&gt;
&lt;p&gt;Chúng tôi duy trì 21 domain cấp cao nhất bao gồm phân tích, authentication, khoa học dữ liệu, hạ tầng, machine learning, hiệu năng, bảo mật, và nhiều hơn nữa. Mỗi domain có thể có các sub-domain để phân chia chi tiết hơn.&lt;/p&gt;
&lt;h2 id=&quot;giá-trị-hệ-điều-hành&quot;&gt;Giá trị: Hệ điều hành&lt;/h2&gt;
&lt;p&gt;Mọi agent đều chia sẻ một tầng giá trị nền tảng định nghĩa cách chúng vận hành:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Đơn giản trước tiên.&lt;/strong&gt; Dùng giải pháp đơn giản nhất còn hoạt động được. Chỉ thêm độ phức tạp khi có lý do chính đáng.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Sửa nguyên nhân gốc rễ.&lt;/strong&gt; Không bao giờ vá lỗi theo kiểu né tránh nguyên nhân gốc rễ. Nếu một pipeline lỗi, hãy debug pipeline. Nếu một test lỗi, hãy sửa mã hoặc sửa test.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Dựa trên bằng chứng.&lt;/strong&gt; Gắn nhãn các khẳng định là “đã xác minh” (kèm benchmark) hoặc “ước tính” (kèm giả định). Phát hiện một mẫu không đồng nghĩa với xác nhận một vấn đề.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Kinh tế học ngữ cảnh.&lt;/strong&gt; Công cụ MCP tốn 0,1% ngữ cảnh. Mỗi lượt đọc file tốn 2%. Áp dụng chuyên môn domain trước khi khám phá mã.&lt;/p&gt;
&lt;p&gt;Những giá trị này lan tỏa đến mọi chuyên gia thông qua pipeline render. Một agent không thể bỏ qua chúng bằng cách cấu thành khác đi.&lt;/p&gt;
&lt;h2 id=&quot;cli-mặt-phẳng-điều-khiển&quot;&gt;CLI: Mặt phẳng điều khiển&lt;/h2&gt;
&lt;p&gt;Orkestra đi kèm một CLI để quản lý hệ sinh thái agent:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Discovery&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; agents&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; search&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;database&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; agents&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; info&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; database-architect&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Validation&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; validate&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --show-warnings&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Rendering&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; sync&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --dry-run&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; sync&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Skills&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; skills&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; list&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; skills&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; info&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; schema-migration-workflow&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Decisions&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; decisions&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; search&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;authentication&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;CLI là nguồn chân lý duy nhất cho việc những agent nào tồn tại, chúng có những skill nào, và liệu hệ thống có khỏe mạnh hay không. Nó chạy xác thực trước khi đồng bộ để bắt lỗi sớm.&lt;/p&gt;
&lt;h2 id=&quot;cân-nhắc-về-mã-nguồn-mở&quot;&gt;Cân nhắc về mã nguồn mở&lt;/h2&gt;
&lt;p&gt;Chúng tôi xây dựng Orkestra để giải quyết vấn đề của chính mình: điều phối AI agent ở quy mô lớn cho một codebase phức tạp. Các mẫu chúng tôi khám phá ra không đặc thù riêng cho domain của chúng tôi.&lt;/p&gt;
&lt;p&gt;Hệ thống cấu thành nhân vật (identity + mindset + style) áp dụng được cho bất kỳ đội nào định nghĩa tính cách agent.&lt;/p&gt;
&lt;p&gt;Hệ thống tầng skill (K0-K4) cung cấp một mô hình tư duy để tổ chức các năng lực có thể tái sử dụng theo phạm vi.&lt;/p&gt;
&lt;p&gt;Mẫu pipeline render (mã nguồn YAML + template + tài sản đã sinh) tách biệt nhu cầu của công cụ với nội dung dành cho mô hình.&lt;/p&gt;
&lt;p&gt;Mô hình điều phối phẳng (một điều phối viên, nhiều chuyên gia) tránh được độ phức tạp trong khi vẫn cho phép song song hóa.&lt;/p&gt;
&lt;p&gt;Liệu Orkestra có trở thành mã nguồn mở hay không phụ thuộc vào việc những mẫu này có giá trị cho những người khác đang xây dựng với Claude Code hay không. Nếu bạn đang đụng phải những bức tường chúng tôi đã mô tả, kiến trúc này có thể giúp ích.&lt;/p&gt;
&lt;h2 id=&quot;những-gì-chúng-tôi-đã-học-được&quot;&gt;Những gì chúng tôi đã học được&lt;/h2&gt;
&lt;p&gt;Xây dựng Orkestra dạy chúng tôi rằng điều phối không phải là làm cho agent thông minh hơn. Đó là làm cho chúng tập trung hơn.&lt;/p&gt;
&lt;p&gt;Một agent đơn lẻ với chỉ dẫn hoàn hảo vẫn cạn ngữ cảnh. Một agent đơn lẻ với tất cả các skill vẫn bối rối về việc nên áp dụng cái nào. Một agent đơn lẻ cố gắng làm mọi thứ tạo ra kết quả tầm thường ở mọi nơi.&lt;/p&gt;
&lt;p&gt;Bốn mươi chuyên gia, mỗi người xuất sắc trong domain của mình, được điều phối bởi một orchestrator biết khi nào nên ủy quyền: đó là cách chúng tôi lên sóng.&lt;/p&gt;
&lt;p&gt;Các con số ít quan trọng hơn kiến trúc. Bạn có thể cần năm agent hoặc năm mươi agent. Nguyên tắc vẫn giữ nguyên: cấu thành hơn là năng lực đơn lẻ, chuyên môn hóa hơn là tổng quát hóa, điều phối hơn là chủ nghĩa anh hùng cá nhân.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Orkestra vận hành hệ sinh thái agent đằng sau Maguyva, nền tảng trí tuệ mã nguồn của chúng tôi. Muốn tìm hiểu thêm? Hãy liên hệ với đội của chúng tôi.&lt;/em&gt;&lt;/p&gt;
</content:encoded><category>Architecture</category><category>Open Source</category></item></channel></rss>