Codex exec: chạy Codex tự động trong script và CI

Codex exec: chạy Codex tự động trong script và CI
3 Tháng 11, 2026 Lê Quốc Nghĩa 10 phút đọcHướng dẫn

Codex exec là gì? Codex exec là chế độ không tương tác của Codex CLI: lệnh codex exec nhận một yêu cầu, để tác tử Codex của OpenAI làm việc trong thư mục dự án, in tiến trình ra luồng lỗi chuẩn (stderr) và chỉ in câu trả lời cuối ra đầu ra chuẩn (stdout), rồi thoát, nên gọi được từ script, cron hay quy trình CI như GitHub Actions. Bài này không hứa codex exec "tự làm thay bạn" an toàn: lần chạy không người có thể sai, tốn token hoặc làm quá mức, nên máy chỉ soạn nháp và người duyệt trước khi merge hay đăng. Nói thẳng: OPCAIOS chưa chạy codex exec trong CI; nội dung dựa trên trang "Non-interactive mode" và "GitHub Action" của tài liệu Codex cùng codex exec --help bản 0.162.1, đọc ngày 03/11/2026. Phần tương ứng cho Claude Code nằm ở bài chạy Claude Code tự động mỗi ngày.

Sơ đồ codex exec chạy tự động: lịch hẹn hoặc sự kiện pull request kích hoạt codex exec với sandbox read-only hoặc workspace-write, khoá API là secret chỉ cấp cho đúng bước cần, đầu ra JSON hoặc file kết quả theo schema, job riêng có quyền ghi đăng bình luận hoặc mở pull request, người duyệt rồi mới merge
Kích hoạt, chạy với quyền hẹp, xuất kết quả, người duyệt là cửa cuối. Sơ đồ: OPCAIOS.

Lệnh codex exec chạy thế nào và mặc định được làm gì?

Lệnh codex exec chạy Codex không mở giao diện terminal tương tác (TUI), và mặc định chỉ được đọc. Theo trang "Non-interactive mode" trên learn.chatgpt.com/docs (developers.openai.com/codex chuyển hướng sang đây, đọc ngày 03/11/2026), sandbox mặc định của codex exec là read-only; muốn cho sửa file phải chọn --sandbox workspace-write. Tài liệu ghi cờ --full-auto không còn được hỗ trợ, thay bằng --sandbox workspace-write. Lệnh yêu cầu chạy trong kho Git; chỉ bỏ bằng --skip-git-repo-check khi môi trường an toàn. Theo codex exec --help bản 0.162.1, không truyền yêu cầu (hoặc truyền -) thì lệnh đọc từ đầu vào chuẩn. Tài liệu không nói về mã thoát; đừng giả định khi chưa tự thử.

codex exec "summarize the repository structure"

Các cờ codex exec nào quan trọng khi chạy trong script?

Các cờ quan trọng của codex exec chia thành 3 nhóm, tất cả đều có trong codex exec --help bản 0.162.1 và được tài liệu mô tả:

Nhóm Cờ Tác dụng
Đầu ra --json stdout thành luồng JSON Lines, mỗi dòng một sự kiện
Đầu ra --output-schema <FILE> ép câu trả lời cuối theo một JSON Schema
Đầu ra -o, --output-last-message <FILE> ghi câu trả lời cuối ra file (vẫn in ra stdout)
Quyền -s, --sandbox read-only, workspace-write hoặc danger-full-access
Quyền --approve-for-me chuyển yêu cầu phê duyệt sang cơ chế tự review, dùng sandbox workspace-write
Tái lập --ephemeral không lưu file phiên xuống đĩa
Tái lập --ignore-user-config, --ignore-rules bỏ qua config.toml của người dùng và file .rules

Còn cờ --dangerously-bypass-approvals-and-sandbox, phần trợ giúp tự ghi là cực kỳ nguy hiểm, chỉ dành cho môi trường đã được cô lập từ bên ngoài. Ý nghĩa từng chế độ sandbox giải thích kỹ ở bài chế độ phê duyệt và sandbox của Codex; khoá cấu hình xem config.toml của Codex.

Đầu ra JSON và schema của codex exec dùng thế nào?

Đầu ra JSON của codex exec là luồng sự kiện để script theo dõi từng bước, còn schema là cách ép câu trả lời cuối thành dữ liệu có khuôn cố định. Theo tài liệu (đọc ngày 03/11/2026), khi bật --json, các loại sự kiện gồm thread.started, turn.started, turn.completed, turn.failed, nhóm item.* (tin nhắn của tác tử, lập luận, lệnh đã chạy, file thay đổi, gọi công cụ MCP, tìm kiếm web, cập nhật kế hoạch) và error. Với --output-schema, bạn đưa một file JSON Schema; ví dụ trong tài liệu đặt "additionalProperties": false, và ghép với -o để lưu kết quả thành file JSON mà bước sau đọc được. Luôn kiểm tra file kết quả tồn tại và đúng khuôn trước khi dùng, vì lần chạy có thể thất bại giữa chừng.

codex exec --json "summarize the repo structure" | jq
codex exec "Extract project metadata" \
  --output-schema ./schema.json \
  -o ./project-metadata.json

Tiếp tục một phiên codex exec thế nào?

Tiếp tục phiên là cho lần chạy sau dùng lại toàn bộ ngữ cảnh của lần chạy trước, bằng lệnh con codex exec resume. Theo tài liệu và codex exec resume --help bản 0.162.1, có 2 cách: --last để lấy phiên gần nhất, hoặc truyền mã phiên (UUID) hay tên phiên. Ví dụ trong tài liệu: lần đầu tìm lỗi tranh chấp (race condition), lần sau tiếp tục phiên để sửa. Cách chia này hợp với quy trình có người: bước một chỉ đọc, người xem rồi mới cho bước hai ghi. Lưu ý: phiên chạy với --ephemeral không được lưu xuống đĩa, nên không tiếp tục được. Lệnh con review chạy review code; xem dùng Codex review code.

codex exec "review the change for race conditions"
codex exec resume --last "fix the race conditions you found"

GitHub Action chính thức của Codex là gì?

GitHub Action chính thức của Codex là openai/codex-action, dùng dạng uses: openai/codex-action@v1, cài Codex CLI và chạy codex exec trong quy trình GitHub Actions. Theo trang "GitHub Action" của tài liệu Codex (đọc ngày 03/11/2026), các đầu vào chính gồm:

  1. openai-api-key: khoá OpenAI từ secret; action dựng một proxy giữ khoá, nên tài liệu ưu tiên cách này hơn tự truyền khoá vào bước shell.
  2. prompt hoặc prompt-file: yêu cầu viết thẳng hoặc đường dẫn file trong kho, chỉ dùng một trong hai.
  3. sandbox: workspace-write, read-only hoặc danger-full-access.
  4. safety-strategy: mặc định drop-sudo (gỡ quyền sudo trước khi Codex chạy), ngoài ra có unprivileged-user và unsafe; Windows bắt buộc dùng unsafe.
  5. allow-users, allow-bots: ai được kích hoạt; mặc định chỉ người có quyền ghi vào kho.
  6. output-file, codex-args, model, codex-version: lưu kết quả, thêm cờ, chọn model, ghim bản CLI.

Đầu ra final-message chứa câu trả lời cuối. Ví dụ rút gọn từ tài liệu, job Codex chỉ có quyền đọc:

jobs:
  codex:
    runs-on: ubuntu-latest
    permissions:
      contents: read
    outputs:
      final_message: ${{ steps.run_codex.outputs.final-message }}
    steps:
      - uses: actions/checkout@v5
        with:
          persist-credentials: false
      - id: run_codex
        uses: openai/codex-action@v1
        with:
          openai-api-key: ${{ secrets.OPENAI_API_KEY }}
          prompt-file: .github/codex/prompts/review.md
          output-file: codex-output.md

Trong ví dụ đầy đủ, job thứ hai có quyền pull-requests: write mới đăng kết quả thành bình luận.

Xác thực Codex trong CI an toàn ra sao?

Xác thực Codex trong CI an toàn nghĩa là khoá API nằm trong secret và chỉ được cấp cho đúng lệnh cần nó. Theo trang "Non-interactive mode" (đọc ngày 03/11/2026), codex exec mặc định dùng lại thông tin đăng nhập đã lưu của CLI; trong CI, đặt biến CODEX_API_KEY ngay trên dòng lệnh của lần gọi cần khoá. Tài liệu cảnh báo không đặt OPENAI_API_KEY hay CODEX_API_KEY ở cấp job trong workflow có chạy code do kho kiểm soát. Dùng đăng nhập ChatGPT trong CI là tuỳ chọn nâng cao cho máy chạy tin cậy; tài liệu khuyên không dùng với kho công khai hay mã nguồn mở, vì file auth.json trong thư mục Codex chứa token truy cập. Ba quy tắc rút ra:

  1. Khoá chỉ nằm trong GitHub Secrets, không trong file workflow hay lời nhắc.
  2. Cấp khoá cho đúng bước chạy Codex, không cho bước cài thư viện hay chạy test.
  3. Nghi lộ khoá thì thu hồi và tạo khoá mới ngay.
CODEX_API_KEY=<api-key> codex exec --json "triage open bug reports"

Xem thêm bảo mật khi dùng AI viết code.

Giới hạn quyền và để người duyệt thế nào?

Giới hạn quyền là cho lần chạy tự động đúng mức quyền tối thiểu, và người duyệt là cửa cuối trước khi merge hay đăng. Tài liệu Codex (đọc ngày 03/11/2026) khuyên giữ job Codex ở contents: read, xuất bản vá (patch) thành artifact, rồi dùng một job riêng có quyền ghi; chỉ dùng danger-full-access trong môi trường đã cô lập; hạn chế ai được kích hoạt; làm sạch đầu vào không tin cậy để chống prompt injection. Trang GitHub Action còn lưu ý read-only chặn sửa file và mạng nhưng Codex vẫn chạy với quyền cao, nên không dựa vào nó để bảo vệ secret. Cách làm thực dụng:

  1. Lần chạy tự động chỉ tạo nhánh, pull request hoặc bình luận; bật quy tắc bảo vệ nhánh.
  2. Nội dung (bài viết, email) chỉ vào trạng thái nháp.
  3. Người duyệt đọc diff thật, không chỉ tóm tắt của AI.
  4. Hành động khó đảo ngược (xoá, gửi, xuất bản, thanh toán) không nằm trong quyền của lần chạy tự động.

Ví dụ quy trình codex exec hằng ngày

Quy trình giả định, không phải người thật: một người bán khoá học muốn mỗi sáng có bản tóm tắt lỗi mới báo và bản nháp sửa lỗi nhỏ.

  1. Lúc 6 giờ sáng, một workflow schedule gọi openai/codex-action@v1 với sandbox: read-only, đọc danh sách issue mới đã xuất ra file và viết bản phân loại theo một JSON Schema.
  2. Kết quả lưu bằng output-file, một job sau đăng thành một bình luận tổng hợp trong issue theo dõi.
  3. Chủ đọc, chọn một lỗi nhỏ, gắn nhãn cho phép sửa.
  4. Một workflow khác chạy với workspace-write, sửa trên nhánh mới; job có quyền ghi riêng mở pull request.
  5. Chủ chạy /review hoặc đọc diff, test xanh mới merge.

Lần chạy lỗi thì chỉ thiếu một bản tóm tắt. Mỗi lần chạy tiêu token và phút chạy GitHub; xem trang giá chính thức của OpenAI trước khi đặt lịch dày.

Kinh nghiệm của OPCAIOS

OPCAIOS chưa chạy codex exec trong CI hay GitHub Actions, và cũng chưa dùng Codex trên đám mây để mở pull request; các cờ và file workflow trong bài chúng tôi chưa chạy thử trên kho của mình. Codex CLI bản 0.162.x và ứng dụng desktop Codex chỉ được dùng trong phiên có người ngồi, song song với Claude Code và Google Antigravity. Việc nền hằng ngày của website (chọn chủ đề và soạn bài SEO, soạn giới thiệu repo GitHub) gọi AI qua API và chỉ tạo bản nháp chờ duyệt, không qua Codex. Khi duyệt các bản nháp đó, chúng tôi từng phải sửa lỗi chính tả, trường bị cắt cụt và đánh giá bị thổi phồng; nguyên tắc "máy soạn, người duyệt" là điều chúng tôi áp dụng thật, chỉ chưa áp cho codex exec.

Câu hỏi thường gặp

Codex exec khác gì chạy codex bình thường?

Chạy codex bình thường mở giao diện terminal tương tác để bạn trò chuyện và phê duyệt từng bước. codex exec nhận một yêu cầu, làm xong rồi thoát: tiến trình in ra stderr, câu trả lời cuối in ra stdout, nên script và CI đọc được. Theo tài liệu đọc ngày 03/11/2026, sandbox mặc định của codex exec là read-only, nên muốn cho sửa file phải chọn rõ --sandbox workspace-write.

Cờ --full-auto còn dùng được không?

Theo trang "Non-interactive mode" của tài liệu Codex (đọc ngày 03/11/2026), --full-auto không còn được hỗ trợ và nên thay bằng --sandbox workspace-write. Phần codex exec --help của bản 0.162.1 cũng không liệt kê cờ này. Chép script cũ từ mạng thì kiểm tra lại từng cờ với --help của bản đang cài trước khi đưa vào CI.

Nên dùng CODEX_API_KEY hay đăng nhập ChatGPT trong CI?

Tài liệu Codex hướng dẫn đặt CODEX_API_KEY cho đúng lần gọi codex exec cần khoá, còn GitHub Action dùng đầu vào openai-api-key lấy từ secret. Đăng nhập ChatGPT trong CI được mô tả là tuỳ chọn nâng cao cho máy chạy tin cậy và không nên dùng với kho công khai. Với người làm một mình, khoá API riêng cho CI, có hạn mức chi tiêu, dễ thu hồi hơn và tách bạch khỏi tài khoản cá nhân.

Có nên cho codex exec tự merge vào nhánh chính không?

Không nên. Lần chạy tự động nên dừng ở bình luận, nhánh mới hoặc pull request. Tài liệu Codex khuyên giữ job chạy Codex ở quyền đọc, chuyển bản vá sang job khác có quyền ghi, và hạn chế ai được kích hoạt workflow. Merge tự động khiến một lỗi hay câu lệnh cài cắm trong issue đi thẳng vào sản phẩm.

Người không biết code có tự động hoá Codex được không?

Được ở mức đơn giản, nếu bắt đầu bằng việc chỉ đọc như tóm tắt issue hay commit hằng ngày với sandbox read-only, và luôn để kết quả ở dạng nháp. Phần khó là secret, quyền workflow và bảo vệ nhánh. Đọc thêm quy trình an toàn dùng tác tử lập trình. Muốn được hướng dẫn từng bước, xem khoá đào tạo ứng dụng AI của OPCAIOS.

Nguồn: tài liệu Codex của OpenAI, các trang "Non-interactive mode" và "GitHub Action" trên learn.chatgpt.com/docs (developers.openai.com/codex chuyển hướng sang), cùng codex exec --help và codex exec resume --help của Codex CLI bản 0.162.1, đọc ngày 03/11/2026; quy trình hằng ngày là giả định; chưa kiểm chứng ý nghĩa mã thoát của codex exec, giá API, chưa chạy thử các lệnh và workflow trong bài. Kinh nghiệm là của OPCAIOS.

Lê Quốc Nghĩa
Lê Quốc Nghĩa
Người xây dựng OPCAIOS

Để lại bình luận

Email của bạn sẽ không hiển thị công khai. Bình luận sẽ hiển thị sau khi được duyệt.