Stroq: công cụ kiểm tra cục bộ hoạt động của AI coding agent

Phần mềm05 tháng 11, 2026·6 phút đọc

Stroq là công cụ mã nguồn mở chạy cục bộ, đọc lại các phiên làm việc của Claude Code và Codex để cho biết lệnh nào xuất phát từ văn bản mà agent đã đọc, và khóa bí mật nào đã rời khỏi máy. Công cụ cũng đặt hook để chặn hoặc hỏi lại trước mỗi lần gọi công cụ, không gửi dữ liệu ra ngoài và không cần tài khoản.

Stroq: công cụ kiểm tra cục bộ hoạt động của AI coding agent

Trạng thái CI của StroqTrạng thái CI của Stroq

Câu hỏi trung tâm mà Stroq đặt ra rất đơn giản: ai thực sự đang điều khiển agent lập trình của bạn? Công cụ này đọc chính các phiên làm việc của Claude Code và Codex trên máy bạn, rồi chỉ ra bao nhiêu lệnh xuất phát từ đoạn văn bản mà agent đã đọc, và những khóa bí mật (key) nào đã rời khỏi máy.

Điểm đáng chú ý là toàn bộ quá trình diễn ra cục bộ: Stroq không gửi dữ liệu đi đâu, không telemetry, không cần tài khoản, và chỉ ghi một bộ nhớ đệm nhỏ trong thư mục ~/.stroq. Công cụ yêu cầu Node.js 22 trở lên và phát hành theo giấy phép Apache-2.0.

Bắt đầu bằng một lệnh npx

Cách dùng nhanh nhất là chạy trực tiếp qua npx:

npx @stroq/cli            # thẻ tóm tắt các phiên của bạn
npx @stroq/cli init       # cài hook để bảo vệ agent ở phiên tiếp theo
npx @stroq/cli why        # giải thích vì sao một hành động bị chặn
npx @stroq/cli attack     # xem Stroq chặn 36 cuộc tấn công đã biết, trong sandbox
npx @stroq/cli uninstall  # gỡ Stroq

Lần chạy đầu tiên đọc 30 ngày phiên làm việc gần nhất, các tệp chứa khóa và những thư mục mà agent đã làm việc. Điều quan trọng: công cụ chỉ in tên khóa, không bao giờ in giá trị.

Lượt tải xuống gói CLI của Stroq trên npmLượt tải xuống gói CLI của Stroq trên npm

Mỗi mốc hiển thị trên thẻ đều có một dòng lệnh stroq show tương ứng để in ra bằng chứng phía sau, ví dụ npx @stroq/cli show 1.

Kiểm tra sau khi sự việc đã xảy ra

Stroq định vị mình là một nền tảng bảo mật cục bộ cho các AI coding agent như Claude Code, Cursor hay Codex CLI. Có hai lớp bảo vệ:

  • Trước mỗi hành động: các hook gốc cho Claude Code, Cursor, Codex, Copilot CLI, Windsurf và Antigravity, một plugin cho OpenClaw, cùng proxy MCP qua stdio. Hook sẽ từ chối các lệnh dạng curl | sh và các cuộc gọi ra ngoài có mang khóa bí mật đã biết; đồng thời hỏi lại người dùng khi một lệnh lặp lại văn bản mà agent đã đọc, kèm tên đoạn văn bản đó.
  • Sau khi sự việc đã xảy ra: lệnh replay và sent đọc bản ghi phiên cục bộ, kể cả những phiên có từ trước khi cài Stroq.
npx @stroq/cli console        # giao diện riêng trên 127.0.0.1
npx @stroq/cli replay --all   # soi lại phiên Claude Code 30 ngày qua theo chính sách hiện tại
npx @stroq/cli sent           # agent có làm lộ khóa của bạn không? chỉ tên, không giá trị

Giao diện console gồm năm màn hình

Console chạy trên địa chỉ 127.0.0.1 và chỉ mở được bằng liên kết đầy đủ mà công cụ in ra, vì liên kết mang một khóa mới mỗi lần khởi động. Năm màn hình chính:

  • Check: thẻ tóm tắt do cùng một đoạn mã tạo ra, mỗi mốc mở ra kèm bằng chứng và một dòng cho từng agent.
  • Live: các quyết định được ghi lại theo thời gian thực; mở một dòng sẽ thấy chuỗi agent đã đọc gì, đã làm gì, quyết định và quy tắc áp dụng.
  • Agents: thêm hoặc bớt hook của Stroq, có hiển thị trước chính xác thay đổi trên tệp cấu hình; cho biết lần cuối Stroq được gọi và cấu hình nào của agent làm yếu nó.
  • Skills & MCP: liệt kê mọi skill và MCP server theo từng agent — nguồn gốc, những gì quy tắc khớp được, và những gì thay đổi kể từ lần xem trước.
  • Rules: thử một hành động mà không chạy thật, bật quy tắc kèm xem trước và kiểm thử, xem lịch sử có hoàn tác.

"Connected" nghĩa là hook của Stroq đã có trong cấu hình của agent, chứ không đảm bảo agent thực sự gọi hook — dùng Test hook và Live để kiểm chứng.

Thêm hook từ console cần macOS hoặc Linux; trên Windows phải dùng stroq init. Console cũng không khởi động agent: Test hook chỉ chạy hook một lần, ngoại tuyến.

Phân loại khóa bí mật đã đi đâu

Lệnh stroq sent đối chiếu phiên Claude Code, Codex CLI và Cursor với các thông tin xác thực trên máy, rồi xếp mỗi khóa vào một trong các nhóm: gửi tới công ty khác, có thể đã gửi, AI đã nhìn thấy, dùng với dịch vụ gốc của nó, hoặc bị chặn trước khi chạy. Ví dụ minh họa trong tài liệu (với khóa và host giả lập):

  • STRIPE_SECRET_KEY trong ~/work/shop/.env bị gửi tới collector.example qua một lệnh curl ngày 2026-10-11 — nhóm "gửi tới công ty khác", kèm khuyến nghị thu hồi khóa.
  • aws_secret_access_key trong ~/.aws/credentials bị lộ qua kết quả đọc tệp ngày 2026-10-02 — nhóm "AI đã nhìn thấy".

Cần lưu ý giới hạn: Stroq chỉ kết luận "đã gửi" khi thấy khóa xuất hiện ngay trong lệnh gửi. Một script, một tệp hay một biến vẫn có thể mang khóa ra ngoài mà không lộ ra.

Mô phỏng tấn công và giới hạn

Lệnh stroq attack chạy 36 cuộc tấn công — lấy từ báo cáo công khai và các kịch bản tổng hợp — nhắm vào chính sách của bạn trong một thư mục home dùng một lần. Trên phiên bản 0.30.0: 15 bị từ chối, 21 bị hỏi lại, 0 lọt qua.

Số cuộc tấn công bị chặn qua StroqSố cuộc tấn công bị chặn qua Stroq

Tài liệu của dự án nêu rõ các giới hạn:

  • Hook chỉ thấy những gì host gửi cho nó, và điều này khác nhau theo từng agent và phiên bản.
  • Việc so khớp ở mức văn bản, nên một lệnh do mô hình tự viết từ đầu sẽ không truy ngược được về nguồn.
  • Đây là một bộ lọc, không phải sandbox.
  • Khớp bản ghi cục bộ không tự chứng minh dữ liệu đã đến nhà cung cấp mô hình.

Góc nhìn

Với các nhóm phát triển phần mềm ở Việt Nam đang đưa Claude Code, Cursor hay Codex vào quy trình làm việc hằng ngày, giá trị thực tế của Stroq nằm ở chỗ nó không đòi hỏi thay đổi hạ tầng: chỉ cần Node.js 22 và một lệnh npx là có thể soi lại 30 ngày phiên làm việc đã qua. Việc replay đọc được cả những phiên trước khi cài đặt đặc biệt hữu ích khi cần rà soát một sự cố lộ khóa đã xảy ra rồi.

Tuy vậy, cần đọc kỹ phần giới hạn trước khi tin tưởng hoàn toàn: đây là bộ lọc dựa trên so khớp văn bản, không phải sandbox, và nó chỉ thấy những gì hook của từng agent chịu gửi ra. Biện pháp hợp lý là dùng nó như một lớp kiểm tra bổ sung — kết hợp với việc xoay vòng khóa định kỳ và không để khóa bí mật nằm trong các tệp .env mà agent có thể đọc — thay vì coi đó là lá chắn duy nhất.

Nguồn: github.com · Quy trình biên tập

Chia sẻ:FacebookX