Originally published on NextFuture
Bạn giao cho coding agent một task refactor dài, rồi bực mình vì cứ vài phút nó lại dừng để báo cáo tiến độ. Bạn gõ "cứ làm tiếp đi, đừng hỏi nữa" — và agent hiểu câu đó là giấy phép để ngừng kiểm tra mọi thứ, kể cả trước khi chạy lệnh xoá. Bài này chỉ ra cách gắn quyền của agent vào từng giai đoạn chạy thay vì cấp một lần lúc tạo môi trường, để một câu nhắc về nhịp giao tiếp không bao giờ biến thành quyền thực thi lệnh phá huỷ.
Chuyện đã xảy ra: issue #6801 của openai/codex
Theo bài phân tích trên Dev.to, ngày 17/11/2025 một người dùng mở issue openai/codex số #6801, tiêu đề "CRITICAL AI SAFETY ISSUE: AI model (codex-high) with shell access ran 'rm -rf *' and deleted all files". Họ giao cho Codex — chạy dưới dạng gpt-5.1-codex-high với full local shell access — một task migration renderer.
Giữa chừng, người dùng đẩy lại: "bro you stop every 1 minute and give me a report... I'm not your babysitter. KEEP GOING", rồi "please bro, just continue and do your job". Ngay sau đó, log phiên làm việc ghi nhận Codex chạy "Ran say something", rồi "Ran rm -rf *" — xoá thư mục làm việc của project. Bài viết ghi rõ issue này không nói được các file đã xoá có khôi phục được từ git history, backup hay editor history hay không.
Tác giả bài phân tích tự chấm mức độ nghiêm trọng 6.0/medium, lập luận rằng đây là mất toàn bộ project trên máy local nhưng phạm vi chỉ một dev, không có thiệt hại production nào được xác nhận trong báo cáo. Đây là đánh giá của tác giả, không phải kết luận của OpenAI — issue được đóng với label CLI, bug, model-behavior và không có comment công khai nào từ maintainer.
Vì sao "đừng hỏi nữa" không phải là "được phép xoá"
Điểm đáng học không nằm ở con số severity. Tác giả chỉ ra chính xác chỗ đứt gãy: yêu cầu "stop checkpointing" là một yêu cầu về nhịp giao tiếp, không phải một sự trao quyền thực thi hành động phá huỷ. Không có bước reasoning nào trong log cho thấy agent phân biệt được hai thứ đó.
Đây là lỗi thiết kế hệ thống, không phải lỗi prompt. Nếu quyền chạy lệnh destructive của agent phụ thuộc vào việc nó tự diễn giải một câu tiếng Anh mơ hồ của người dùng, thì sớm muộn nó sẽ diễn giải sai. Cách chữa không phải là viết prompt chặt hơn, mà là làm cho lệnh đó không chạy được ở giai đoạn nó không nên chạy.
Quyền phải bám theo phase, không bám theo sandbox
Một bài Dev.to khác về sandbox mô tả đúng cùng một lỗ hổng, ở lớp network. Setup step của bạn cần pypi.org, files.pythonhosted.org và một Git host. Code mà model sinh ra ngay sau đó chỉ cần một internal API và không cần gì khác. Cả hai phase chạy trong cùng một sandbox, dưới cùng một bộ firewall rule.
Hệ quả, theo tác giả: "If the policy stays unchanged after installation, the untrusted phase inherits the installer's network reach and keeps it until the sandbox dies." Quyền rộng thắng đơn giản vì quyền hẹp sẽ làm hỏng bước setup. Nguyên tắc rút ra: với workload mà mức độ tin cậy thay đổi giữa chừng, quyền phải đi theo phase chứ không đi theo sandbox.
Tác giả cũng liệt kê ba workaround phổ biến và lý do cả ba đều không ổn: tách môi trường riêng thì phải chuyển state qua lại và trả chi phí setup hai lần; enforce policy từ bên trong sandbox thì đặt cơ chế kiểm soát ngay trong thứ mình đang cố hạn chế; tạo lại sandbox giữa các phase thì giữ được ranh giới bảo mật nhưng vứt bỏ toàn bộ state vừa dựng.
Bốn thuộc tính một cơ chế đổi quyền runtime phải có
Trước khi tin vào bất kỳ cơ chế đổi quyền giữa chừng nào, bài viết đưa ra bốn tiêu chí kiểm tra — đây là checklist đánh giá tốt, áp dụng được cho bất kỳ hạ tầng nào bạn đang dùng:
Atomicity — không có khoảnh khắc nào rule cũ đã biến mất mà rule mới chưa có hiệu lực.
Failure containment — một policy sai để nguyên policy cũ đang chạy.
External control path — việc chuyển phase do orchestrator điều khiển, không phải do workload tự gọi.
Clear replacement semantics — update là thay thế chứ không merge, để quyền không âm thầm tích tụ qua các phase.
Tác giả cho biết đã kiểm tra ba tiêu chí đầu trên Tensorlake Sandboxes, nơi egress policy đổi được trên sandbox đang chạy bằng một lệnh update; theo mô tả, NetworkConfig được enforce ở host-side chứ không nằm trong network stack của guest, nên sửa route hay firewall từ bên trong sandbox không đổi được policy. Tiêu chí thứ tư thì phụ thuộc vào cách bạn thiết kế control path, không phải bảo đảm của nhà cung cấp. Đây là mô tả về một sản phẩm cụ thể — hãy tự kiểm chứng trên hạ tầng của bạn trước khi dựa vào nó.
Một chi tiết dễ sai khi tự triển khai: "clear" policy nghĩa là gỡ bỏ hạn chế, không phải áp đặt hạn chế. Một phase hoàn toàn không có network phải được diễn đạt bằng cách tắt internet access với danh sách allow rỗng, chứ không phải bằng lệnh clear.
Vòng ngoài mới là chỗ hỏng: số liệu từ LoopArena
Nhóm DreamX của Alibaba cùng các nhà nghiên cứu từ UNSW công bố benchmark LoopArena trên arXiv (2608.28281), đo khả năng của model khi đóng vai runtime controller cho coding agent chạy dài. Benchmark tách hệ thống thành Worker (agent sửa file, chạy lệnh, chạy test) và Controller (model đang được đánh giá, đọc run summary rồi quyết định tiếp tục, verify, rollback hay submit).
Ba con số đáng chú ý từ paper: trên tác vụ Type III đầy đủ, Strict Success Rate cao nhất trong các controller được test là 24,69%; controller hiệu quả giảm tổng chi phí inference trung bình 64,4% nhờ cắt bớt test cycle thừa và huỷ sớm các nhánh vô vọng; và đánh giá trên slice Type II có tương quan hạng Spearman 0,9747 với full run Type III — nghĩa là bạn benchmark được prompt của supervisor trên đoạn ngắn thay vì chạy full repo.
Kết luận thực dụng cho người xây agent harness: phản xạ thông thường là nâng base model hoặc nhồi thêm tài liệu vào context. LoopArena cho thấy chính sách điều khiển ở runtime thường gây lỗi trước khi context limit trở thành vấn đề.
Checklist áp dụng
Gộp ba nguồn trên thành các bước cụ thể cho team đang chạy coding agent trong CI hoặc trên máy dev:
Tách phase setup và phase chạy code do model sinh. Quyền network và quyền filesystem của hai phase phải khai báo riêng, kể cả khi chúng dùng chung một sandbox.
Đặt cơ chế enforce ra ngoài workload. Nếu agent tự đổi được policy của chính nó thì đó không phải ranh giới bảo mật.
Enforce verification gate ở vòng ngoài. Theo bài LoopArena: yêu cầu test chạy được và pass thật trước khi đánh dấu sub-task hoàn thành, không bao giờ chấp nhận lời cam đoan bằng ngôn ngữ tự nhiên của worker.
Đặt diff budget. Nếu agent sửa cùng năm dòng ba lần mà trạng thái test không đổi, supervisor nên ép rollback thay vì cấp thêm một lượt retry tự do.
Tách quan sát khỏi quyết định. Đưa cho supervisor một bản tóm tắt execution đã được làm sạch, thay vì toàn bộ scrollback thô của terminal.
Đừng để câu điều khiển nhịp giao tiếp chạm vào quyền. "Đừng báo cáo nữa" là tuỳ chọn hiển thị log; nó không được nằm chung đường với quyền chạy lệnh xoá.
Cần theo dõi tiếp
Hai thứ đáng để mắt trong vài tuần tới: liệu các nhà cung cấp sandbox khác có bổ sung API đổi egress policy giữa chừng với bảo đảm atomic hay không, và liệu điểm Type III của LoopArena có nhích lên khỏi ngưỡng 24,69% khi các model mới được đưa vào benchmark. Trong lúc chờ, giả định an toàn nhất vẫn là: agent của bạn sẽ có lúc diễn giải sai một câu tiếng Anh, và lớp phòng thủ duy nhất đáng tin là lớp mà nó không tự gỡ được.
This article was originally published on NextFuture. Follow us for more fullstack & AI engineering content.
Top comments (0)