﻿---
title: "官方 action：prompt-file 二选一，最后一步再跑 Codex"
summary: "openai/codex-action@v1 用密钥代理跑 exec。prompt 和 prompt-file 只能给一个。checkout 关掉 persist-credentials，Windows 必须 safety-strategy: unsafe。"
category: automation
level: advanced
surfaces: [ci]
tags: ["GitHub Actions", "exec", "CI"]
canonical: /tips/github-action-prompt-file/
---

# 官方 action：prompt-file 二选一，最后一步再跑 Codex

openai/codex-action@v1 用密钥代理跑 exec。prompt 和 prompt-file 只能给一个。checkout 关掉 persist-credentials，Windows 必须 safety-strategy: unsafe。

提示放仓库里，不要把 PR 正文直接喂给模型：

```yaml
- 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
    sandbox: workspace-write
    codex-args: '["--ephemeral"]'
```

`prompt` 和 `prompt-file` 同时写会直接失败。后续步骤用 `final-message` 输出，或把 `output-file` 当产物上传。结构化结果把 `--output-schema` 放进 `codex-args`。

权限：

- 默认 `safety-strategy: drop-sudo`，Linux/macOS 上不可逆地拿掉 sudo
- Windows runner 必须 `safety-strategy: unsafe`
- 不要只靠 `read-only` 保护密钥：只读仍可能带着高权限跑
- 多租户 runner 不要 `unsafe`
- `allow-users` / `allow-bots` 限制谁能触发；默认只有有 write 权限的人
- 把 Codex 放在 job 最后一步，避免后面的步骤继承被改过的工作区

fork PR 和 issue 正文当提示前先消毒。密钥仍走官方 action 的代理，不要写进 job 级 `CODEX_API_KEY`。

## 来源

- [OpenAI · Codex GitHub Action](https://learn.chatgpt.com/docs/github-action)
