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

URL: https://opcaios.org/blog/codex-exec-chay-tu-dong
Ngày: 2026-11-03
Cập nhật: 2026-11-03
Tác giả: Lê Quốc Nghĩa
Chuyên mục: Hướ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](/blog/chay-claude-code-tu-dong-moi-ngay).

![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](https://opcaios.org/images/blog/codex-exec-chay-tu-dong/so-do.webp)
*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ử.

```bash
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](/blog/che-do-phe-duyet-va-sandbox-cua-codex); khoá cấu hình xem [config.toml của Codex](/blog/cau-hinh-codex-config-toml).

## Đầ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.

```bash
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](/blog/dung-codex-review-code).

```bash
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:

```yaml
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.

```bash
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](/blog/bao-mat-khi-dung-ai-viet-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](/blog/tac-tu-lap-trinh-cho-nguoi-khong-biet-code-quy-trinh-an-toan). Muốn được hướng dẫn từng bước, xem [khoá đào tạo ứng dụng AI](/services/dao-tao-ung-dung-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.*
