Gnomon: "Git cho dữ liệu Postgres", sinh ra cho AI agent
Gnomon là extension mã nguồn mở dưới giấy phép PostgreSQL, biến mỗi AI agent thành một nhánh (branch) riêng của cơ sở dữ liệu thật, chỉ cần một chuỗi kết nối. Công cụ này cho phép xem từng trường bị thay đổi, hợp nhất (merge) vào main theo quy tắc kiểm soát và hoàn tác khi cần, giúp đưa agent vào vận hành mà vẫn giữ an toàn cho dữ liệu.

Gnomon vừa ra mắt dưới dạng mã nguồn mở theo giấy phép PostgreSQL, tự nhận là "Git cho dữ liệu Postgres" và được thiết kế riêng cho các AI agent. Công cụ này chạy ngay bên trong Postgres mà doanh nghiệp đang dùng — chỉ một extension, không tạo bản sao, không cần thêm cơ sở dữ liệu thứ hai.
Điểm cốt lõi là mỗi agent có thể nhận một nhánh riêng của cơ sở dữ liệu thật, chỉ thông qua một chuỗi kết nối. Người vận hành xem được từng trường mà agent đã sửa, hợp nhất vào main khi thấy đúng, hoặc hoàn tác nếu sai.
Nhánh dữ liệu mở tức thì, không sao chép
Một nhánh đọc toàn bộ dữ liệu từ main và chỉ lưu lại những gì nó thay đổi. Nhờ vậy nhánh mở ra tức thì và không tốn dung lượng sao chép, bất kể cơ sở dữ liệu lớn đến đâu. Có thể cấp một nhánh cho mỗi lượt chạy của agent, mỗi pull request hay mỗi bài kiểm thử.
Ứng dụng không cần sửa gì. Nhánh chỉ là một chuỗi kết nối: trỏ phiên làm việc vào nhánh, các truy vấn sẵn có sẽ đọc và ghi trên nhánh thay vì main.
Có nhiều cách trỏ vào nhánh:
- Theo phiên:
select gnomon.use('feature') - Trong một giao dịch (khi nằm sau pooler):
select gnomon.begin('feature') - Qua chuỗi kết nối:
gnomon branch url feature - Với C module:
SET gnomon.branch = 'feature' - Tới một thời điểm trong quá khứ:
select gnomon.use('main', '2026-10-31 23:59')
Thay đổi cấu trúc bảng (schema) cũng được mang theo. Chạy migration trên một nhánh để thêm cột, đổi tên cột hay tạo bảng mới thì main vẫn giữ nguyên cho tới khi merge — lúc đó cả hình dạng mới lẫn dữ liệu đi kèm được đưa sang cùng lúc.
Duyệt dữ liệu như duyệt code
Mỗi nhánh có sẵn một diff: từng dòng và từng trường bị thay đổi, kèm giá trị trước và sau. Người dùng có thể duyệt trên trình duyệt, bình luận vào một dòng cụ thể và xử lý xung đột cạnh nhau. Khi agent làm xong, Gnomon mở trang review và gửi link cho người phụ trách.
Có thể thêm các bước kiểm tra viết bằng SQL; Gnomon sẽ chạy chúng trên kết quả đã hợp nhất trước khi cho phép merge diễn ra. Một phê duyệt chỉ có giá trị với đúng những gì người duyệt đã thấy: nếu nhánh thay đổi sau đó, yêu cầu sẽ quay lại chờ xem lại.
Merge hiểu dữ liệu, không chọn bừa một bên
Khi main và một nhánh cùng sửa một giá trị, Gnomon không đơn thuần chọn một phía. Các phép đếm được cộng dồn, JSON được merge theo từng khóa, văn bản được merge theo từng dòng. Phần nào xung đột thật sự sẽ được đánh dấu để con người xử lý hoặc để một truy vấn giải quyết.
Nhánh cũng có thể merge vào nhau thay vì chỉ vào main, và một giao dịch đơn lẻ có thể được chọn (cherry-pick) từ nhánh này sang nhánh khác. Thao tác hoàn tác cũng linh hoạt tương tự: lấy lại một giao dịch, toàn bộ việc agent làm trong một buổi chiều, hay cả một lần merge.
Truy vết quá khứ tới từng thời điểm
Gnomon lưu lịch sử của mọi bảng được theo dõi. Người dùng có thể đọc toàn bộ cơ sở dữ liệu đúng như tại một thời điểm bất kỳ bằng chính các truy vấn sẵn có, và nhận kết quả giống nhau mỗi lần chạy lại. Khi agent đưa ra một quyết định, có thể xem chính xác nó đã thấy gì.
Dòng thay đổi (change feed) có thể phát trực tiếp tới Kafka, NATS hoặc webhook, và xuất vào dbt dưới dạng snapshot — loại vẫn giữ cả các dòng đã bị xóa. Lịch sử cũ có thể chuyển sang lưu trữ đối tượng (object storage) và Gnomon tự đưa về khi có truy vấn chạm tới.
Khi một bước kiểm tra trước đây vẫn đạt bỗng nhiên thất bại, lệnh gnomon bisect sẽ truy ra giao dịch gây lỗi — ai làm, khi nào và vì sao. Ngoài ra còn có gnomon.track('orders'): lịch sử bắt đầu từ thời điểm gọi, không hồi tố dữ liệu cũ.
Cơ chế an toàn khi giao việc cho agent
Một lệnh gnomon agent create cấp cho agent một role cơ sở dữ liệu, một nhánh riêng và một chuỗi kết nối. Agent chỉ đọc và ghi được trên nhánh của mình; cơ sở dữ liệu từ chối mọi thứ còn lại, kể cả main, ngay cả khi agent gọi tên main ra.
- Merge theo quy tắc do người viết: ví dụ tối đa 20 dòng, chỉ trên các bảng chỉ định, mọi bước kiểm tra phải đạt — và Postgres thực thi những giới hạn này bất kể agent được hướng dẫn thế nào.
- Không gì rời đi trước khi được duyệt: email, webhook hay thanh toán mà agent xếp hàng vẫn nằm trên nhánh cho tới khi merge.
- Mọi thay đổi đều có tên: mỗi thay đổi ghi lại agent, lượt chạy (run) và lý do nó đưa ra.
- Replay chính xác những gì agent đã thấy: Gnomon ghi lại thời điểm của mọi lần đọc.
- Thử nhiều hướng song song: khởi tạo nhiều nỗ lực từ cùng một thời điểm, so sánh thay đổi và bước kiểm tra rồi giữ lại phương án tốt nhất.
- Dừng và thu hồi: một lệnh khóa agent ra ngoài, đóng các nhánh của nó và hoàn tác những gì nó đã merge, mới nhất trước.
Đóng gói thành sản phẩm
Bộ công cụ gồm SQL core (extension xử lý lịch sử, nhánh, merge, review, valid time, lưu trữ và cài được trên Postgres managed), C module tùy chọn (khóa dòng thật, hỗ trợ ON CONFLICT và TRUNCATE trên nhánh, phát hiện đọc cũ, ghi và đọc điểm nhanh hơn), CLI/MCP server/review app đóng gói trong một binary Go, cùng bộ SDK TypeScript (@bitsinfra/gnomon) và Python (gnomon-postgres).
Phía tích hợp có GitHub Action (mỗi pull request một nhánh, chạy migration trên đó rồi bình luận thay đổi), hỗ trợ Python, Node, Ruby, Go, Java, Elixir, .NET, PHP, PostgREST, Supabase và một package dbt. SDK dùng được với các framework agent quen thuộc như Anthropic SDK, Claude Agent SDK, Vercel AI SDK, OpenAI Agents SDK, LangChain hay bất kỳ MCP client nào, và chạy qua các driver/ORM như node-postgres, Prisma, psycopg hay Django.
npm install @bitsinfra/gnomon # TypeScript
pip install gnomon-postgres # Python
Cài đặt extension trên PostgreSQL 15-18, chạy tự triển khai hoặc trên dịch vụ managed như RDS, Aurora hay Supabase. Tài liệu đầy đủ tại gnomon.bitsinfra.com, kèm llms.txt dành cho các coding agent. Dự án mở cho đóng góp, lỗ hổng bảo mật được báo cáo kín theo quy trình trong SECURITY.md.
Góc nhìn
Với lập trình viên và doanh nghiệp Việt Nam đang đưa AI agent vào chạm dữ liệu thật, rào cản lớn nhất thường không phải chất lượng mô hình mà là nỗi sợ agent ghi sai. Cách làm nhánh dữ liệu như Gnomon giải quyết đúng điểm này: agent vẫn là một kết nối Postgres bình thường, nhưng mọi thứ nó làm bị giới hạn trong một nhánh có diff, có bước kiểm tra SQL và có thể hoàn tác. Các nhóm đang chạy Postgres trên managed service có thể thử mà không phải đổi hạ tầng.
Tuy vậy, công cụ này không thay thế kỷ luật vận hành. Việc đặt quy tắc merge, viết bước kiểm tra và phân quyền vẫn là phần việc của con người. Ai đang cân nhắc cho agent thao tác trên dữ liệu đơn hàng hay thanh toán nên bắt đầu bằng một bảng ít rủi ro, bật theo dõi, rồi mới mở rộng — thay vì cấp quyền rộng ngay từ đầu.
Nguồn: github.com · Quy trình biên tập


