---
read_when:
    - คุณจำเป็นต้องมีฟิลด์การกำหนดค่าทุกฟิลด์ของ Codex harness
    - คุณกำลังเปลี่ยนแปลงลักษณะการทำงานของการรับส่งข้อมูล การยืนยันตัวตน การค้นหา หรือการหมดเวลาของ app-server
    - คุณกำลังดีบักการเริ่มต้นของ Codex harness การค้นหาโมเดล หรือการแยกสภาพแวดล้อมออกจากกัน
summary: ข้อมูลอ้างอิงด้านการกำหนดค่า การยืนยันตัวตน การค้นหา และเซิร์ฟเวอร์แอปสำหรับชุดทดสอบ Codex
title: ข้อมูลอ้างอิง Codex harness
x-i18n:
    generated_at: "2026-07-19T07:22:56Z"
    model: gpt-5.6
    postprocess_version: locale-links-v1
    prompt_version: 32
    provider: openai
    source_hash: f55db3e8850c574dd2cbb69ec55fb584ee16055eb4d3751946f0e7fa809a8175
    source_path: plugins/codex-harness-reference.md
    workflow: 16
---

เอกสารอ้างอิงนี้ครอบคลุมการกำหนดค่าโดยละเอียดสำหรับ Plugin `codex` อย่างเป็นทางการ
สำหรับการตั้งค่าและการตัดสินใจด้านการกำหนดเส้นทาง ให้เริ่มจาก
[ชุดควบคุม Codex](/th/plugins/codex-harness)

## พื้นผิวการกำหนดค่า Plugin

การตั้งค่าชุดควบคุม Codex ทั้งหมดอยู่ภายใต้ `plugins.entries.codex.config`

```json5
{
  plugins: {
    entries: {
      codex: {
        enabled: true,
        config: {
          discovery: {
            enabled: true,
            timeoutMs: 2500,
          },
          appServer: {
            mode: "guardian",
          },
        },
      },
    },
  },
}
```

ฟิลด์ระดับบนสุด:

| ฟิลด์                      | ค่าเริ่มต้น                  | ความหมาย                                                                                                                                        |
| -------------------------- | ------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------- |
| `discovery`                | เปิดใช้งาน                  | การตั้งค่าการค้นพบโมเดลสำหรับ Codex app-server `model/list`                                                                                    |
| `appServer`                | app-server แบบ stdio ที่ได้รับการจัดการ | การตั้งค่าการรับส่งข้อมูล คำสั่ง การยืนยันตัวตน การอนุมัติ แซนด์บ็อกซ์ และการหมดเวลา ชุดควบคุมทั่วไปใช้สถานะที่จำกัดขอบเขตตามเอเจนต์เป็นค่าเริ่มต้น                        |
| `codexDynamicToolsLoading` | `"searchable"`           | ใช้ `"direct"` เพื่อใส่เครื่องมือแบบไดนามิกของ OpenClaw ลงในบริบทเครื่องมือเริ่มต้นของ Codex โดยตรง                                                       |
| `codexDynamicToolsExclude` | `[]`                     | ชื่อเครื่องมือแบบไดนามิกเพิ่มเติมของ OpenClaw ที่จะละเว้นจากรอบการทำงานของ Codex app-server                                                                    |
| `codexPlugins`             | ปิดใช้งาน                 | การรองรับ Plugin/แอป Codex แบบเนทีฟ รวมถึงสิทธิ์เข้าถึงแอปของบัญชีที่เชื่อมต่อแบบเลือกเข้าร่วม ดู [Plugin Codex แบบเนทีฟ](/th/plugins/codex-native-plugins) |
| `computerUse`              | ปิดใช้งาน                 | การตั้งค่า Codex Computer Use ดู [Codex Computer Use](/th/plugins/codex-computer-use)                                                               |
| `sessionCatalog`           | เปิดใช้งาน                  | การค้นพบเซสชัน Codex แบบเนทีฟสำหรับแถบด้านข้าง ตั้งค่า `enabled: false` เพื่อปิดการค้นพบโดยไม่ปิดใช้งานผู้ให้บริการหรือชุดควบคุม           |
| `supervision`              | ปิดใช้งาน                 | นโยบายทรานสคริปต์เซสชันแบบเนทีฟและการควบคุมการเขียนสำหรับเอเจนต์ ดู [การกำกับดูแล Codex](/plugins/codex-supervision)                          |

## การกำกับดูแล

โดยค่าเริ่มต้น การค้นพบเซสชันแบบเนทีฟจะแสดงเซสชัน Codex ที่ไม่ได้เก็บถาวรจากคอมพิวเตอร์ Gateway
และ Node ที่จับคู่และเลือกเข้าร่วม ปิดใช้งานเฉพาะแค็ตตาล็อกนั้นได้ด้วย:

```json5
{
  plugins: {
    entries: {
      codex: {
        enabled: true,
        config: {
          sessionCatalog: {
            enabled: false,
          },
        },
      },
    },
  },
}
```

`supervision` ควบคุมเครื่องมือสำหรับเอเจนต์แยกต่างหาก:

| ฟิลด์                 | ค่าเริ่มต้น                 | ความหมาย                                                                                                                                                                                                                                   |
| --------------------- | ----------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `enabled`             | `false`                 | เปิดใช้งานเครื่องมือกำกับดูแล Codex สำหรับเอเจนต์ การตั้งค่านี้ไม่ได้ควบคุมแค็ตตาล็อกเซสชันของผู้ปฏิบัติงานที่ผ่านการยืนยันตัวตน                                                                                                                            |
| `endpoints`           | ปลายทางภายในระบบที่ทำงานในเครื่อง | เป้าหมายปลายทางด้านความเข้ากันได้และขั้นสูงสำหรับเอเจนต์กำกับดูแล Codex ที่ยังคงไว้และเครื่องมือ MCP แบบสแตนด์อโลน แค็ตตาล็อกสำหรับมนุษย์และขั้นตอนการสร้างสาขาจะไม่ใช้เป้าหมายเหล่านี้ และจะใช้ App Server สำหรับการกำกับดูแลที่แก้ไขจาก `appServer`       |
| `allowRawTranscripts` | `false`                 | เมื่อเปิดใช้งานการกำกับดูแล อนุญาตให้เอเจนต์อัตโนมัติหรือ MCP แบบสแตนด์อโลนอ่านทรานสคริปต์และฟิลด์รายการที่ได้มาจากทรานสคริปต์ การอ่านเฉพาะเมทาดาทา `codex_threads` ยังคงพร้อมใช้งาน ไม่ได้ควบคุมการดำเนินการต่อผ่าน Control UI ที่ผ่านการยืนยันตัวตน     |
| `allowWriteControls`  | `false`                 | เมื่อเปิดใช้งานการกำกับดูแล อนุญาตให้เอเจนต์อัตโนมัติทำการกลายพันธุ์ `codex_threads` ได้แก่ fork เปลี่ยนชื่อ เก็บถาวร และยกเลิกการเก็บถาวร รวมถึงการดำเนินการส่ง ชี้นำ และขัดจังหวะของ MCP แบบสแตนด์อโลน การตั้งค่านี้ไม่ข้ามการตรวจสอบอื่น ๆ เกี่ยวกับการผูก โฮสต์ สถานะ หรือการยืนยัน |

รายการปลายทางรองรับฟิลด์ต่อไปนี้:

| ฟิลด์          | ใช้กับ    | ความหมาย                                                               |
| -------------- | ------------- | --------------------------------------------------------------------- |
| `id`           | ทั้งหมด           | ID ปลายทางที่คงที่                                                   |
| `label`        | ทั้งหมด           | ป้ายกำกับที่แสดงซึ่งระบุหรือไม่ก็ได้                                               |
| `transport`    | ทั้งหมด           | `"stdio-proxy"` หรือ `"websocket"`                                     |
| `command`      | `stdio-proxy` | คำสั่ง App Server ที่ระบุหรือไม่ก็ได้                                          |
| `args`         | `stdio-proxy` | อาร์กิวเมนต์คำสั่งที่ระบุหรือไม่ก็ได้                                           |
| `cwd`          | `stdio-proxy` | ไดเรกทอรีทำงานของโพรเซสลูกที่ระบุหรือไม่ก็ได้                             |
| `url`          | `websocket`   | URL ของ WebSocket หรือซ็อกเก็ตภายในเครื่องที่รองรับซึ่งจำเป็นต้องระบุ                     |
| `authTokenEnv` | `websocket`   | ตัวแปรสภาพแวดล้อมที่ระบุหรือไม่ก็ได้ ซึ่งค่าของมันใช้ยืนยันตัวตนกับปลายทาง |

หน้า **เซสชัน Codex** ใช้ App Server สำหรับการกำกับดูแลของ Plugin และแสดง
เฉพาะเซสชันที่ไม่ได้เก็บถาวร หากไม่มีการตั้งค่าการเชื่อมต่อ `appServer` อย่างชัดเจน
การเชื่อมต่อนั้นจะเป็น stdio ในโฮมของผู้ใช้ที่ได้รับการจัดการ แถวในเครื่องที่จัดเก็บไว้หรือไม่ได้ใช้งานสามารถสร้าง
แชตที่ล็อกกับโมเดลพร้อมประวัติผู้ใช้และผู้ช่วยแบบมีขอบเขต จนถึงรอบต้นทางสุดท้ายที่คงอยู่และสิ้นสุดแล้ว
การผูกแบบส่วนตัวจะคง fork ของสแนปช็อต สาขาต้นทาง `appServer` ที่เป็นมาตรฐาน
การแทรกประวัติ และรอบถัดไปไว้บนการเชื่อมต่อนั้น การเริ่มต้นแบบมาตรฐานครั้งแรกใช้คู่ที่ fork ส่งคืน
การกลับมาทำงานต่อในภายหลังจะละเว้นการแทนที่โมเดลและผู้ให้บริการของ OpenClaw เพื่อให้ Codex
คืนค่าคู่ที่คงอยู่ของเธรดมาตรฐาน การเปลี่ยนแปลงแบบเนทีฟแยกต่างหากสามารถอัปเดตคู่นั้นได้
แต่โมเดลภายนอกและลำดับสำรองจะไม่แทนที่คู่นั้น แถวที่จัดเก็บไว้และไม่ได้ใช้งานสามารถเก็บถาวรได้
หลังจากยืนยันว่าไม่มีตัวรันอื่น เว้นแต่การผูก OpenClaw อื่นที่ทำงานอยู่จะเป็นเจ้าของเป้าหมายที่ตรงกันทุกประการ
หรือหนึ่งในลูกหลานที่สร้างขึ้นและไม่ได้เก็บถาวร OpenClaw ปฏิบัติตามการแบ่งหน้าลูกหลานของ Codex
และหยุดแบบปิดเมื่อเกิดข้อผิดพลาดในการแจกแจง วงจร หรือใช้ขีดจำกัดความปลอดภัยจนหมด
การยืนยันยังคงครอบคลุมไคลเอนต์แบบเนทีฟที่ไม่รู้จักและภาวะแข่งขันระหว่างสถานะกับการเก็บถาวร
ไม่สามารถลบแชตที่ล็อกกับโมเดลภายใต้การกำกับดูแลได้ ขณะที่แชตนั้นปกป้องการผูกแบบเนทีฟ
ต้นทางที่ทำงานอยู่ไม่สามารถสร้างสาขาหรือถูกเก็บถาวรได้ แต่ยังสามารถเปิดแชตภายใต้การกำกับดูแลที่มีอยู่ได้
ทุกแถวของ Node ที่จับคู่จะเป็นแบบอ่านอย่างเดียว การรับส่งข้อมูลของ Node ยังไม่รองรับวงจรการทำงานแบบสตรีมที่ชุดควบคุมต้องใช้

`appServer.homeScope: "user"` เพียงอย่างเดียวจะเปลี่ยนโฮม Codex ที่โพรเซสชุดควบคุม
ที่ได้รับการจัดการใช้ แต่ไม่ได้เผยแพร่แค็ตตาล็อกกลุ่มระบบ การเปิดใช้งานการกำกับดูแล
ไม่เปลี่ยนค่าเริ่มต้นของชุดควบคุม แต่การเชื่อมต่อสำหรับการกำกับดูแลที่แยกต่างหาก
จะใช้ stdio ในโฮมของผู้ใช้ที่ได้รับการจัดการเป็นค่าเริ่มต้น เมื่อไม่มีการตั้งค่าการเชื่อมต่อ `appServer`
อย่างชัดเจน การตั้งค่าที่ระบุอย่างชัดเจนจะถูกใช้กับการเชื่อมต่อนั้น
การผูกภายใต้การกำกับดูแลทั้งที่รอดำเนินการและยืนยันแล้วจะคงการเชื่อมต่อนั้นไว้สำหรับทุก ๆ รอบ
หากปิดใช้งานการกำกับดูแลหรือเกิดความคลาดเคลื่อนของการเชื่อมต่อ/วงจรการทำงาน ระบบจะหยุดแบบปิดแทน
ที่จะย้อนกลับไปใช้ชุดควบคุมในโฮมของเอเจนต์ การเชื่อมต่อเริ่มต้นใช้เซสชันที่จัดเก็บร่วมกับไคลเอนต์ Codex แบบเนทีฟ
แต่ไม่ใช้สถานะกิจกรรมภายในโพรเซสของไคลเอนต์เหล่านั้นร่วมกัน

การตั้งค่า `plugins.entries.codex-supervisor` แบบเดิมถูกยกเลิกแล้ว เรียกใช้
`openclaw doctor --fix` เพื่อย้ายรายการเดิม คำจำกัดความปลายทาง แฟล็กนโยบาย
และการอ้างอิงรายการอนุญาต/ปฏิเสธของ Plugin มายังบล็อกนี้ ค่า `codex.config.supervision`
แบบมาตรฐานที่ระบุอย่างชัดเจนจะมีลำดับความสำคัญเมื่อเกิดข้อขัดแย้ง

## การรับส่งข้อมูลของ app-server

สำหรับรอบชุดควบคุมทั่วไป OpenClaw จะเริ่มไบนารี Codex ที่ได้รับการจัดการซึ่งจัดส่ง
พร้อม Plugin อย่างเป็นทางการ (ปัจจุบันคือ `@openai/codex` `0.144.6`):

```bash
codex app-server --listen stdio://
```

วิธีนี้ทำให้เวอร์ชัน app-server ผูกกับ Plugin `codex` อย่างเป็นทางการ แทน
Codex CLI แยกต่างหากใด ๆ ที่ติดตั้งไว้ในเครื่อง ตั้งค่า `appServer.command`
เฉพาะเมื่อจงใจต้องการใช้ไฟล์ปฏิบัติการอื่น รอบการทำงานแบบได้รับการจัดการทั่วไป
ที่ใช้โฮมเอเจนต์แบบแยกค่าเริ่มต้นจะเลือกใช้แพ็กเกจที่ปักหมุดนี้ก่อน
แม้ว่าจะติดตั้งบันเดิลเดสก์ท็อป macOS ไว้ก็ตาม เมื่อเปิดใช้งาน
[Computer Use](/th/plugins/codex-computer-use) หรือเมื่อ `homeScope` เป็น
`"user"` และสามารถโหลดสถานะ Computer Use แบบเนทีฟได้ การเริ่มต้นแบบได้รับการจัดการ
จะเลือกใช้ไบนารีแอปเดสก์ท็อปที่เป็นเจ้าของสิทธิ์ macOS ที่จำเป็นแทน
กฎที่ให้ความสำคัญกับเดสก์ท็อปเดียวกันนี้จะใช้เมื่อการกำหนดค่า Codex ที่มีผล
ของโฮมเอเจนต์แบบแยกเปิดใช้งาน Computer Use แบบเนทีฟ หากไม่มีบันเดิลแอปเดสก์ท็อปติดตั้งอยู่
OpenClaw จะย้อนกลับไปใช้ไบนารีแพ็กเกจที่ปักหมุด

การส่งต่อไฟล์ปฏิบัติการและการกั้นการกำหนดค่าแบบเนทีฟจะประสานงานไคลเอนต์ภายใน
โพรเซส Gateway ที่กำลังทำงานหนึ่งโพรเซส เริ่ม Gateway ใหม่หลังจากโพรเซสอื่นเปลี่ยน
การกำหนดค่า Plugin Codex แบบเนทีฟ

การกำกับดูแลจะแก้ไขการเชื่อมต่อแยกต่างหาก หากไม่มีการตั้งค่าการเชื่อมต่อ
`appServer` อย่างชัดเจน ระบบจะใช้ stdio ที่ได้รับการจัดการกับ `homeScope: "user"`
ส่วนชุดควบคุมทั่วไปยังคงใช้ stdio ที่ได้รับการจัดการกับ `homeScope: "agent"` การตั้งค่า
การเชื่อมต่อที่ระบุอย่างชัดเจนจะถูกใช้กับทั้งสองเส้นทาง ตั้งค่า `homeScope: "user"`
อย่างชัดเจน เมื่อชุดควบคุมทั่วไปควรใช้ `$CODEX_HOME` (หรือ `~/.codex`)
ร่วมกับไคลเอนต์แบบเนทีฟ การผูกภายใต้การกำกับดูแลแบบส่วนตัวใช้การเชื่อมต่อสำหรับการกำกับดูแล
โดยไม่ขึ้นกับค่าเริ่มต้นของชุดควบคุมทั่วไป โพรเซส App Server ที่แยกจากกัน
จะเก็บสถานะการทำงานและสถานะการอนุมัติแยกจากกัน

สำหรับการทดสอบที่ไม่ใช่การใช้งานจริงกับ app-server ที่กำลังทำงานอยู่
สามารถใช้การรับส่งข้อมูลผ่าน WebSocket ได้:

```json5
{
  plugins: {
    entries: {
      codex: {
        enabled: true,
        config: {
          appServer: {
            transport: "websocket",
            url: "ws://gateway-host:39175",
            authToken: "${CODEX_APP_SERVER_TOKEN}",
            requestTimeoutMs: 60000,
          },
        },
      },
    },
  },
}
```

Codex จัดประเภทการรับส่งข้อมูลผ่าน WebSocket ว่าเป็นฟีเจอร์ทดลองและไม่ได้รับการรองรับ สำหรับเวิร์กโหลด
ที่ใช้งานจริง ควรใช้ stdio ที่ได้รับการจัดการหรือซ็อกเก็ตควบคุม Unix ภายในเครื่อง

ฟิลด์ `appServer`:

| ฟิลด์                                         | ค่าเริ่มต้น                                                | ความหมาย                                                                                                                                                                                                                                                                                                                                                                                         |
| --------------------------------------------- | ------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `transport`                                   | `"stdio"`                                              | `"stdio"` เรียกใช้ Codex; การระบุ `"unix"` จะเชื่อมต่อกับซ็อกเก็ตควบคุมภายในเครื่อง; `"websocket"` จะเชื่อมต่อกับ `url`                                                                                                                                                                                                                                                                                |
| `homeScope`                                   | `"agent"`                                              | `"agent"` แยกสถานะทั่วไปของชุดทดสอบสำหรับเอเจนต์ OpenClaw แต่ละตัว `"user"` เป็นการเลือกใช้อย่างชัดเจนเพื่อแชร์ `$CODEX_HOME` หรือ `~/.codex` แบบเนทีฟ ใช้การยืนยันตัวตนแบบเนทีฟ และเปิดใช้การจัดการเธรดเฉพาะเจ้าของ ขอบเขตผู้ใช้รองรับ stdio ภายในเครื่องหรือการรับส่งผ่าน Unix สำหรับการเชื่อมต่อกำกับดูแลแยกต่างหาก หากไม่ได้ตั้งค่า ระบบจะใช้ `"user"` สำหรับ stdio หรือ Unix และ `"agent"` สำหรับ WebSocket     |
| `command`                                     | ไบนารี Codex ที่มีการจัดการ                                   | ไฟล์ปฏิบัติการสำหรับการรับส่งผ่าน stdio เว้นว่างไว้เพื่อใช้ไบนารีที่มีการจัดการ                                                                                                                                                                                                                                                                                                                          |
| `args`                                        | `["app-server", "--listen", "stdio://"]`               | อาร์กิวเมนต์สำหรับการรับส่งผ่าน stdio                                                                                                                                                                                                                                                                                                                                                                  |
| `url`                                         | ไม่ได้ตั้งค่า                                                  | URL ของ App Server ผ่าน WebSocket หรือ URL `unix://` การระบุพาธ Unix ว่างอย่างชัดเจนจะเลือกซ็อกเก็ตควบคุมมาตรฐานในโฮมของผู้ใช้                                                                                                                                                                                                                                                                          |
| `authToken`                                   | ไม่ได้ตั้งค่า                                                  | โทเค็น Bearer สำหรับการรับส่งผ่าน WebSocket รองรับสตริงลิเทอรัลหรือ SecretInput เช่น `${CODEX_APP_SERVER_TOKEN}`                                                                                                                                                                                                                                                                              |
| `headers`                                     | `{}`                                                   | ส่วนหัว WebSocket เพิ่มเติม ค่าส่วนหัวรองรับสตริงลิเทอรัลหรือค่า SecretInput เช่น `x-codex-client-session-token: "${CODEX_CLIENT_SESSION_TOKEN}"`                                                                                                                                                                                                                               |
| `clearEnv`                                    | `[]`                                                   | ชื่อตัวแปรสภาพแวดล้อมเพิ่มเติมที่จะถูกนำออกจากโปรเซส app-server แบบ stdio ที่เรียกใช้ หลังจาก OpenClaw สร้างสภาพแวดล้อมที่สืบทอดมาแล้ว                                                                                                                                                                                                                                                             |
| `remoteWorkspaceRoot`                         | ไม่ได้ตั้งค่า                                                  | รูทเวิร์กสเปซของ Codex app-server ระยะไกล เมื่อตั้งค่า OpenClaw จะอนุมานรูทเวิร์กสเปซภายในเครื่องจากเวิร์กสเปซ OpenClaw ที่แก้ไขแล้ว รักษาส่วนต่อท้าย cwd ปัจจุบันไว้ภายใต้รูทระยะไกลนี้ และส่งเฉพาะ cwd สุดท้ายของ app-server ไปยัง Codex หาก cwd อยู่นอกรูทเวิร์กสเปซ OpenClaw ที่แก้ไขแล้ว OpenClaw จะปฏิเสธอย่างปลอดภัยแทนการส่งพาธภายใน Gateway ไปยัง app-server ระยะไกล |
| `loopDetectionPreToolUseRelay`                | `true`                                                 | ติดตั้งโปรเซสย่อย `PreToolUse` ของ Codex ซึ่งใช้เฉพาะสำหรับการตรวจจับลูปของ OpenClaw และมาร์กเกอร์ไม่มีนโยบายที่ระบุอย่างชัดเจน ตั้งค่า `false` เพื่อลดการแตกแขนงโปรเซสต่อเครื่องมือ ฮุก Plugin ก่อนเรียกเครื่องมือและนโยบายเครื่องมือที่เชื่อถือได้จะยังคงติดตั้งรีเลย์ที่จำเป็น                                                                                                                                         |
| `requestTimeoutMs`                            | `60000`                                                | ระยะหมดเวลาสำหรับการเรียกใช้ระนาบควบคุมของ app-server                                                                                                                                                                                                                                                                                                                                                     |
| `turnCompletionIdleTimeoutMs`                 | `60000`                                                | ช่วงเวลาสงบหลังจาก Codex ยอมรับเทิร์น หรือหลังจากคำขอ app-server ที่อยู่ในขอบเขตเทิร์น ขณะที่ OpenClaw รอ `turn/completed`                                                                                                                                                                                                                                                                    |
| `turnAssistantCompletionIdleTimeoutMs`        | `10000`                                                | ช่วงเวลาสงบหลังจากรายการสุดท้ายของผู้ช่วย/รายการผู้ช่วยที่ไม่ใช่คำอธิบายประกอบ หรือหลังจากการทำงานของผู้ช่วยแบบดิบก่อนเรียกเครื่องมือเสร็จสิ้น ทำให้การปล่อยเอาต์พุตผู้ช่วยพร้อมทำงาน ขณะที่ OpenClaw ยังคงรอ `turn/completed` การเพิ่มค่านี้ช่วยให้ Codex มีเวลาส่ง `turn/completed` มากขึ้น ก่อนที่ OpenClaw จะขัดจังหวะและปล่อยเลนเซสชัน                                                                                            |
| `postToolRawAssistantCompletionIdleTimeoutMs` | `300000`                                               | ตัวป้องกันภาวะว่างเมื่อเสร็จสิ้นและความคืบหน้า ซึ่งใช้หลังจากส่งต่องานให้เครื่องมือ การทำงานของเครื่องมือแบบเนทีฟเสร็จสิ้น ความคืบหน้าของผู้ช่วยแบบดิบหลังเรียกเครื่องมือ การให้เหตุผลแบบดิบเสร็จสิ้น หรือความคืบหน้าของการให้เหตุผล ขณะที่ OpenClaw รอ `turn/completed` ใช้ค่านี้สำหรับเวิร์กโหลดที่เชื่อถือได้หรือหนัก ซึ่งการสังเคราะห์หลังเรียกเครื่องมืออาจไม่มีเอาต์พุตได้นานกว่างบเวลาปล่อยผู้ช่วยขั้นสุดท้ายโดยสมเหตุสมผล                                |
| `mode`                                        | `"yolo"` เว้นแต่ข้อกำหนด Codex ภายในเครื่องไม่อนุญาต YOLO | ค่าที่ตั้งไว้ล่วงหน้าสำหรับการดำเนินการแบบ YOLO หรือที่ผ่านการตรวจสอบโดยผู้พิทักษ์                                                                                                                                                                                                                                                                                                                                                 |
| `approvalPolicy`                              | `"never"` หรือนโยบายการอนุมัติของผู้พิทักษ์ที่อนุญาต       | นโยบายการอนุมัติแบบเนทีฟของ Codex ที่ส่งเมื่อเริ่มเธรด ดำเนินเธรดต่อ และเริ่มเทิร์น                                                                                                                                                                                                                                                                                                                            |
| `sandbox`                                     | `"danger-full-access"` หรือแซนด์บ็อกซ์ของผู้พิทักษ์ที่อนุญาต  | โหมดแซนด์บ็อกซ์แบบเนทีฟของ Codex ที่ส่งเมื่อเริ่มเธรดและดำเนินเธรดต่อ แซนด์บ็อกซ์ OpenClaw ที่ทำงานอยู่จะจำกัดเทิร์น `danger-full-access` ให้เป็น `workspace-write` ของ Codex; แฟล็กเครือข่ายของเทิร์นจะเป็นไปตามการส่งข้อมูลขาออกของแซนด์บ็อกซ์ OpenClaw                                                                                                                                                                                       |
| `approvalsReviewer`                           | `"user"` หรือผู้ตรวจสอบของผู้พิทักษ์ที่อนุญาต               | ใช้ `"auto_review"` เพื่อให้ Codex ตรวจสอบพรอมต์การอนุมัติแบบเนทีฟเมื่อได้รับอนุญาต                                                                                                                                                                                                                                                                                                                   |
| `defaultWorkspaceDir`                         | ไดเรกทอรีของโปรเซสปัจจุบัน                              | เวิร์กสเปซที่ `/codex bind` ใช้เมื่อไม่ได้ระบุ `--cwd`                                                                                                                                                                                                                                                                                                                                        |
| `serviceTier`                                 | ไม่ได้ตั้งค่า                                                  | ระดับบริการของ Codex app-server ที่ระบุหรือไม่ก็ได้ `"priority"` เปิดใช้การกำหนดเส้นทางโหมดเร็ว `"flex"` ร้องขอการประมวลผลแบบยืดหยุ่น และ `null` ล้างค่าที่เขียนทับ ระบบรองรับ `"fast"` แบบเดิมในฐานะ `"priority"`                                                                                                                                                                                                 |
| `networkProxy`                                | ปิดใช้งาน                                               | เลือกใช้เครือข่ายตามโปรไฟล์สิทธิ์ของ Codex สำหรับคำสั่ง app-server OpenClaw กำหนดค่ากำหนด `permissions.<profile>.network` ที่เลือก และเลือกค่านั้นด้วย `default_permissions` แทนการส่ง `sandbox`                                                                                                                                                                             |
| `experimental.sandboxExecServer`              | `false`                                                | การเลือกเข้าร่วมฟีเจอร์ตัวอย่างที่ลงทะเบียนสภาพแวดล้อม Codex ซึ่งใช้แซนด์บ็อกซ์ของ OpenClaw กับเซิร์ฟเวอร์แอป Codex ที่รองรับ เพื่อให้การเรียกใช้ Codex แบบเนทีฟสามารถทำงานภายในแซนด์บ็อกซ์ OpenClaw ที่ใช้งานอยู่ได้                                                                                                                                                                                                            |

`appServer.networkProxy` ระบุไว้อย่างชัดเจนเนื่องจากเปลี่ยนสัญญา sandbox ของ Codex
เมื่อเปิดใช้งาน OpenClaw จะตั้งค่า `features.network_proxy.enabled` และ
`default_permissions` ในการกำหนดค่าเธรด Codex ด้วย เพื่อให้โปรไฟล์สิทธิ์
ที่สร้างขึ้นสามารถเริ่มการทำงานของเครือข่ายที่ Codex จัดการได้ โดยค่าเริ่มต้น OpenClaw จะสร้าง
ชื่อโปรไฟล์ `openclaw-network-<fingerprint>` ที่ทนต่อการชนกันจาก
เนื้อหาโปรไฟล์ ให้ใช้ `profileName` เฉพาะเมื่อต้องการชื่อภายในเครื่องที่คงที่

```js
export default {
  plugins: {
    entries: {
      codex: {
        config: {
          appServer: {
            sandbox: "workspace-write",
            networkProxy: {
              enabled: true,
              domains: {
                "api.openai.com": "allow",
                "blocked.example.com": "deny",
              },
              allowUpstreamProxy: true,
              proxyUrl: "http://127.0.0.1:3128",
            },
          },
        },
      },
    },
  },
};
```

หากรันไทม์ app-server ปกติจะเป็น `danger-full-access` การเปิดใช้งาน
`networkProxy` จะใช้การเข้าถึงระบบไฟล์แบบพื้นที่ทำงานสำหรับโปรไฟล์
สิทธิ์ที่สร้างขึ้นแทน การบังคับใช้นโยบายเครือข่ายที่ Codex จัดการเป็นเครือข่าย
ใน sandbox ดังนั้นโปรไฟล์ที่เข้าถึงได้เต็มรูปแบบจะไม่ปกป้องทราฟฟิกขาออก

Plugin จะบล็อกการจับมือของ app-server ที่เก่ากว่า ใหม่กว่าแต่ยังไม่ผ่านการตรวจสอบ
เป็นรุ่นก่อนเผยแพร่ มีส่วนต่อท้ายของบิลด์ หรือไม่ระบุเวอร์ชัน Codex app-server
ต้องรายงานเวอร์ชันเสถียรตั้งแต่ `0.143.0` จนถึง
`0.144.6` ที่มาพร้อมกัน

OpenClaw ถือว่า URL ของ WebSocket app-server ที่ไม่ใช่ loopback เป็นระยะไกล และกำหนดให้ใช้
การยืนยันตัวตน WebSocket ที่มีข้อมูลระบุตัวตนผ่าน `appServer.authToken` หรือส่วนหัว
`Authorization` ค่า `appServer.authToken` และค่า `appServer.headers.*`
แต่ละค่าสามารถเป็น SecretInput ได้ รันไทม์ข้อมูลลับจะแก้ไข SecretRef และรูปแบบย่อของ env
ก่อนที่ OpenClaw จะสร้างตัวเลือกการเริ่มต้น app-server และ SecretRef แบบมีโครงสร้างที่แก้ไขไม่ได้
จะทำให้ล้มเหลวก่อนส่งโทเค็นหรือส่วนหัวใด ๆ เมื่อกำหนดค่า Plugin ดั้งเดิมของ Codex
OpenClaw จะใช้ระนาบควบคุม Plugin ของ app-server ที่เชื่อมต่ออยู่เพื่อติดตั้งหรือรีเฟรช
Plugin เหล่านั้น จากนั้นรีเฟรชรายการแอปเพื่อให้แอปที่ Plugin เป็นเจ้าของปรากฏต่อเธรด Codex
`app/list` ยังคงเป็นแหล่งข้อมูลรายการและข้อมูลเมตาที่มีอำนาจ
แต่นโยบาย OpenClaw จะตัดสินว่า `thread/start` ส่ง `config.apps[appId].enabled = true`
สำหรับแอปที่เข้าถึงได้ซึ่งอยู่ในรายการหรือไม่ แม้ปัจจุบัน Codex จะระบุว่าแอปนั้นปิดใช้งาน
ID แอปที่ไม่รู้จักหรือไม่มีอยู่จะยังคงล้มเหลวแบบปิด เส้นทางนี้เพียงเปิดใช้งาน Plugin
จากมาร์เก็ตเพลสผ่าน `plugin/install` และรีเฟรชรายการเท่านั้น เชื่อมต่อ OpenClaw
กับ app-server ระยะไกลที่เชื่อถือได้ว่ายอมรับการติดตั้ง Plugin ที่ OpenClaw จัดการ
และการรีเฟรชรายการแอปเท่านั้น

## โหมดการอนุมัติและ sandbox

เซสชัน stdio app-server ภายในเครื่องใช้โหมด YOLO เป็นค่าเริ่มต้น:
`approvalPolicy: "never"`, `approvalsReviewer: "user"` และ
`sandbox: "danger-full-access"` แนวทางสำหรับผู้ดำเนินการภายในเครื่องที่เชื่อถือได้นี้ช่วยให้
รอบการทำงานและ Heartbeat ของ OpenClaw ที่ไม่มีผู้ดูแลดำเนินต่อไปได้ โดยไม่แสดงพรอมต์
การอนุมัติดั้งเดิมที่ไม่มีใครอยู่ตอบ

หากไฟล์ข้อกำหนดระบบภายในเครื่องของ Codex ไม่อนุญาตค่าการอนุมัติ YOLO
ผู้ตรวจสอบ หรือ sandbox โดยปริยาย OpenClaw จะถือว่าค่าเริ่มต้นโดยปริยายเป็น guardian
แทน และเลือกสิทธิ์ guardian ที่อนุญาต `tools.exec.mode: "auto"`
ยังบังคับใช้การอนุมัติ Codex ที่ผ่านการตรวจสอบโดย guardian และไม่เก็บค่าการแทนที่
`approvalPolicy: "never"` หรือ `sandbox: "danger-full-access"` แบบเดิมที่ไม่ปลอดภัยไว้
ให้ตั้งค่า `tools.exec.mode: "full"` เมื่อตั้งใจใช้แนวทางที่ไม่มีการอนุมัติ
รายการ `[[remote_sandbox_config]]` ที่ตรงกับชื่อโฮสต์ในไฟล์ข้อกำหนดเดียวกัน
จะถูกนำมาใช้ประกอบการตัดสินใจค่าเริ่มต้นของ sandbox

ตั้งค่า `appServer.mode: "guardian"` สำหรับการอนุมัติ Codex ที่ผ่านการตรวจสอบโดย guardian:

```json5
{
  plugins: {
    entries: {
      codex: {
        enabled: true,
        config: {
          appServer: {
            mode: "guardian",
            serviceTier: "priority",
          },
        },
      },
    },
  },
}
```

ค่าที่กำหนดไว้ล่วงหน้า `guardian` จะขยายเป็น `approvalPolicy: "on-request"`,
`approvalsReviewer: "auto_review"` และ `sandbox: "workspace-write"` เมื่อค่าเหล่านั้นได้รับอนุญาต
ฟิลด์นโยบายแต่ละฟิลด์จะแทนที่ `mode` ค่า reviewer แบบเก่า
`guardian_subagent` ยังคงได้รับการยอมรับในฐานะนามแฝงเพื่อความเข้ากันได้
แต่การกำหนดค่าใหม่ควรใช้ `auto_review`

เมื่อ sandbox ของ OpenClaw ทำงาน กระบวนการ Codex app-server ภายในเครื่องยังคง
ทำงานบนโฮสต์ Gateway ดังนั้น OpenClaw จะปิดใช้งาน Code Mode ดั้งเดิมของ Codex,
เซิร์ฟเวอร์ MCP ของผู้ใช้ และการเรียกใช้ Plugin ที่มีแอปรองรับสำหรับรอบการทำงานนั้น
แทนที่จะถือว่า sandbox ฝั่งโฮสต์ของ Codex เทียบเท่ากับแบ็กเอนด์ sandbox ของ OpenClaw
การเข้าถึงเชลล์จะเปิดให้ใช้ผ่านเครื่องมือแบบไดนามิกที่มี sandbox ของ OpenClaw รองรับ
เช่น `sandbox_exec` และ `sandbox_process` เมื่อมีเครื่องมือ exec/process ปกติ

<Note>
บนโฮสต์ sandbox ของ OpenClaw ที่ใช้ Docker (`agents.defaults.sandbox.mode` ตั้งค่าเป็น
แบ็กเอนด์ Docker) `openclaw doctor` จะตรวจสอบว่าโฮสต์อนุญาต namespace
ของผู้ใช้ที่ไม่มีสิทธิ์พิเศษ (และเมื่อปิดใช้งานทราฟฟิกขาออกของเครือข่าย sandbox Docker
ก็รวมถึง namespace เครือข่ายด้วย) ซึ่ง Codex `bwrap` แบบซ้อนต้องใช้
สำหรับการเรียกใช้เชลล์ `workspace-write` ภายในคอนเทนเนอร์ sandbox หรือไม่
การตรวจสอบที่ล้มเหลวมักปรากฏเป็น `bwrap: setting up uid map: Permission denied` หรือ
`bwrap: loopback: Failed RTM_NEWADDR: Operation not permitted` บนโฮสต์ Ubuntu/AppArmor
ให้แก้ไขนโยบาย namespace ของโฮสต์ที่รายงานสำหรับผู้ใช้บริการ OpenClaw
และรีสตาร์ต Gateway ควรใช้โปรไฟล์ AppArmor ที่จำกัดขอบเขตสำหรับกระบวนการบริการ
แทนทางเลือกสำรอง `kernel.apparmor_restrict_unprivileged_userns=0` ที่มีผลทั่วทั้งโฮสต์
และอย่าให้สิทธิ์คอนเทนเนอร์ Docker ที่กว้างขึ้นเพียงเพื่อให้
`bwrap` แบบซ้อนทำงานได้
</Note>

## การเรียกใช้แบบดั้งเดิมใน sandbox

ค่าเริ่มต้นที่เสถียรคือล้มเหลวแบบปิด: sandbox ของ OpenClaw ที่ทำงานอยู่จะปิดใช้งาน
พื้นผิวการเรียกใช้ Codex แบบดั้งเดิม ซึ่งมิฉะนั้นจะทำงานจากโฮสต์ Codex app-server
ใช้ `appServer.experimental.sandboxExecServer: true` เฉพาะเมื่อต้องการทดลองใช้การรองรับสภาพแวดล้อมระยะไกล
ของ Codex กับแบ็กเอนด์ sandbox ของ OpenClaw เส้นทางตัวอย่างนี้ใช้ได้กับ
Codex app-server ทุกเวอร์ชันที่รองรับ

```json5
{
  plugins: {
    entries: {
      codex: {
        enabled: true,
        config: {
          appServer: {
            experimental: {
              sandboxExecServer: true,
            },
          },
        },
      },
    },
  },
}
```

เมื่อเปิดแฟล็กและเซสชัน OpenClaw ปัจจุบันอยู่ใน sandbox OpenClaw จะเริ่ม
exec-server แบบ loopback ภายในเครื่องที่มี sandbox ซึ่งทำงานอยู่รองรับ ลงทะเบียนกับ
Codex app-server และเริ่มเธรดและรอบการทำงาน Codex ด้วยสภาพแวดล้อมที่ OpenClaw
เป็นเจ้าของ หาก app-server ลงทะเบียนสภาพแวดล้อมไม่ได้ การทำงานจะล้มเหลวแบบปิด
แทนที่จะย้อนกลับไปใช้การเรียกใช้บนโฮสต์โดยไม่มีการแจ้งเตือน

เส้นทางตัวอย่างนี้ใช้ได้เฉพาะภายในเครื่อง WebSocket app-server ระยะไกลไม่สามารถ
เข้าถึง exec-server แบบ loopback ได้ เว้นแต่จะทำงานบนโฮสต์เดียวกัน ดังนั้น OpenClaw
จึงปฏิเสธการใช้ร่วมกันดังกล่าว

## การแยกการยืนยันตัวตนและสภาพแวดล้อม

ในโฮมต่อเอเจนต์เริ่มต้น ระบบจะเลือกการยืนยันตัวตนตามลำดับดังนี้:

1. โปรไฟล์การยืนยันตัวตน OpenClaw Codex ที่ระบุไว้อย่างชัดเจนสำหรับเอเจนต์
2. บัญชีที่มีอยู่ของ app-server ในโฮม Codex ของเอเจนต์นั้น
3. เฉพาะการเริ่ม app-server แบบ stdio ภายในเครื่อง: `CODEX_API_KEY` จากนั้น
   `OPENAI_API_KEY` เมื่อไม่มีบัญชี app-server และยังคงต้องใช้การยืนยันตัวตน OpenAI

เมื่อ OpenClaw พบโปรไฟล์การยืนยันตัวตน Codex แบบการสมัครสมาชิก ChatGPT
(ประเภทข้อมูลประจำตัว OAuth หรือโทเค็น) ระบบจะนำ `CODEX_API_KEY` และ
`OPENAI_API_KEY` ออกจากกระบวนการลูก Codex ที่สร้างขึ้น วิธีนี้ช่วยให้คีย์ API
ระดับ Gateway ยังคงพร้อมใช้สำหรับ embeddings หรือโมเดล OpenAI โดยตรง
โดยไม่ทำให้รอบการทำงานของ Codex app-server แบบดั้งเดิมเรียกเก็บเงินผ่าน API โดยไม่ตั้งใจ

โปรไฟล์คีย์ API ของ Codex ที่ระบุไว้อย่างชัดเจนและทางเลือกสำรองคีย์ env ของ stdio
ภายในเครื่องจะใช้การเข้าสู่ระบบ app-server แทน env ที่สืบทอดจากกระบวนการลูก
การเชื่อมต่อ WebSocket app-server จะไม่ได้รับทางเลือกสำรองคีย์ API ของ env จาก Gateway
ให้ใช้โปรไฟล์การยืนยันตัวตนที่ระบุไว้อย่างชัดเจนหรือบัญชีของ app-server ระยะไกลเอง

การเริ่ม app-server แบบ stdio จะสืบทอดสภาพแวดล้อมกระบวนการของ OpenClaw
โดยค่าเริ่มต้น OpenClaw เป็นเจ้าของบริดจ์บัญชี Codex app-server และตั้งค่า
`CODEX_HOME` เป็นไดเรกทอรีต่อเอเจนต์ภายใต้สถานะ OpenClaw ของเอเจนต์นั้น
วิธีนี้ทำให้การกำหนดค่า บัญชี แคช/ข้อมูล Plugin และสถานะเธรดของ Codex
จำกัดขอบเขตอยู่ที่เอเจนต์ OpenClaw แทนที่จะรั่วไหลมาจากโฮม `~/.codex`
ส่วนบุคคลของผู้ดำเนินการ

ตั้งค่า `appServer.homeScope: "user"` เพื่อแชร์สถานะ Codex แบบดั้งเดิมกับ Codex
Desktop และ CLI โหมดโฮมผู้ใช้ภายในเครื่องนี้รองรับ stdio ที่มีการจัดการ
และการรับส่งผ่าน Unix ที่ระบุไว้อย่างชัดเจน โดยใช้ `$CODEX_HOME` เมื่อตั้งค่าไว้
และใช้ `~/.codex` ในกรณีอื่น รวมถึงการยืนยันตัวตน การกำหนดค่า Plugin
และเธรดแบบดั้งเดิม OpenClaw จะข้ามบริดจ์โปรไฟล์การยืนยันตัวตนสำหรับ app-server
รอบการทำงานของเจ้าของที่ผ่านการตรวจสอบสามารถใช้ `codex_threads` เพื่อแสดงรายการ
(พร้อมตัวกรอง `search` ที่เป็นทางเลือก) อ่าน fork เปลี่ยนชื่อ เก็บถาวร
และยกเลิกการเก็บถาวรเธรดเหล่านั้น ให้ fork เธรดก่อนทำงานต่อใน OpenClaw
กระบวนการ Codex ที่แยกจากกันจะไม่ประสานงานผู้เขียนพร้อมกันสำหรับเธรดเดียวกัน

การเลือกใช้ `homeScope` ดังกล่าวมีผลกับเซสชัน harness ทั่วไป Chat ที่สร้าง
ผ่าน Codex Sessions จะใช้การเชื่อมต่อกำกับดูแลส่วนตัวแทน ซึ่งจะรักษาการยืนยันตัวตน
และการกำหนดค่าผู้ให้บริการของการเชื่อมต่อแบบดั้งเดิมไว้สำหรับสาขาหลักและการทำงานต่อในอนาคต

ใน Chat ภายใต้การกำกับดูแลที่ล็อกโมเดลไว้ `codex_threads` ไม่สามารถแนบ fork อื่น
หรือเก็บเธรดแบบดั้งเดิมที่ผูกกับ Chat ไว้ถาวรได้ การแสดงรายการและการอ่านเฉพาะข้อมูลเมตา
ยังคงใช้ได้ การอ่านทรานสคริปต์ดิบต้องใช้ `allowRawTranscripts` เมื่อปิดใช้งาน
การค้นหารายการจะถูกปฏิเสธด้วย เนื่องจากการค้นหาแบบดั้งเดิมสามารถจับคู่กับตัวอย่าง
ทรานสคริปต์ได้ การเปลี่ยนชื่อ การยกเลิกการเก็บถาวร การ fork แบบแยกออก
และการเก็บถาวรเธรดที่ไม่เกี่ยวข้องซึ่ง Chat อื่นของ OpenClaw ไม่ได้เป็นเจ้าของ
ต้องใช้ `allowWriteControls` ตัวเลือกทั้งสองไม่สามารถข้ามการผูกที่ล็อกไว้ได้

OpenClaw จะไม่เขียน `HOME` ใหม่สำหรับการเริ่ม app-server ภายในเครื่องตามปกติ
กระบวนการย่อยที่ Codex เรียกใช้ เช่น `openclaw`, `gh`,
`git`, CLI ระบบคลาวด์ และคำสั่งเชลล์ จะเห็นโฮมกระบวนการตามปกติ
และสามารถค้นหาการกำหนดค่าและโทเค็นในโฮมผู้ใช้ได้ Codex อาจค้นพบ
`$HOME/.agents/skills` และ `$HOME/.agents/plugins/marketplace.json` ด้วย การค้นพบ `.agents`
ดังกล่าวตั้งใจให้แชร์กับโฮมของผู้ดำเนินการ และแยกจากสถานะ `~/.codex`
ที่ถูกแยกไว้

ในขอบเขตเอเจนต์เริ่มต้น Plugin ของ OpenClaw และสแนปช็อต Skills ของ OpenClaw
ยังคงไหลผ่านรีจิสทรี Plugin และตัวโหลด Skills ของ OpenClaw เอง แต่แอสเซ็ต
`~/.codex` ส่วนบุคคลของ Codex จะไม่ไหลผ่าน หากมี Skills ของ Codex CLI
หรือ Plugin จากโฮม Codex ที่มีประโยชน์และควรเป็นส่วนหนึ่งของเอเจนต์ OpenClaw
ที่แยกไว้ ให้จัดทำรายการอย่างชัดเจน:

```bash
openclaw migrate codex --dry-run
openclaw migrate apply codex --yes
```

หากการติดตั้งใช้งานต้องการการแยกสภาพแวดล้อมเพิ่มเติม ให้เพิ่มตัวแปรเหล่านั้น
ใน `appServer.clearEnv`:

```json5
{
  plugins: {
    entries: {
      codex: {
        enabled: true,
        config: {
          appServer: {
            clearEnv: ["CODEX_API_KEY", "OPENAI_API_KEY"],
          },
        },
      },
    },
  },
}
```

`appServer.clearEnv` มีผลเฉพาะกับกระบวนการลูก Codex app-server ที่สร้างขึ้น
OpenClaw จะนำ `CODEX_HOME` และ `HOME` ออกจากรายการนี้ระหว่าง
การปรับการเริ่มภายในเครื่องให้เป็นมาตรฐาน: `CODEX_HOME` จะยังคงชี้ไปยังขอบเขต
เอเจนต์หรือผู้ใช้ที่เลือก และ `HOME` จะยังคงถูกสืบทอดเพื่อให้กระบวนการย่อย
ใช้สถานะโฮมผู้ใช้ตามปกติได้

## เครื่องมือแบบไดนามิก

เครื่องมือแบบไดนามิกของ Codex ใช้การโหลดแบบ `searchable` เป็นค่าเริ่มต้น
โดยเปิดให้ใช้ภายใต้ namespace `openclaw` พร้อม `deferLoading: true`
โดยปกติ OpenClaw จะไม่เปิดให้ใช้เครื่องมือแบบไดนามิกที่ซ้ำกับการดำเนินการพื้นที่ทำงาน
แบบดั้งเดิมของ Codex หรือพื้นผิวการค้นหาเครื่องมือของ Codex เอง:

- `read`
- `write`
- `edit`
- `apply_patch`
- `exec`
- `process`
- `update_plan`
- `tool_call`
- `tool_describe`
- `tool_search`
- `tool_search_code`

เมื่อรายการอนุญาตของรันไทม์แบบจำกัดปิดใช้งาน Code Mode แบบดั้งเดิม OpenClaw
จะส่งการเลือกสภาพแวดล้อมการเรียกใช้ที่ว่างเปล่า ในกรณีโดยตรงที่ไม่มี sandbox ดังกล่าว
OpenClaw จะเก็บเครื่องมือ `exec` และ `process`
ที่ผ่านการกรองตามนโยบายไว้เป็นทางเลือกสำรองของเชลล์ รายการอนุญาตของรันไทม์
และ `codexDynamicToolsExclude` ยังคงมีผลบังคับใช้

เครื่องมือการผสานรวม OpenClaw ส่วนใหญ่ที่เหลือ เช่น การส่งข้อความ สื่อ Cron
เบราว์เซอร์ Node ต่างๆ Gateway, `heartbeat_respond` และ `web_search` พร้อมใช้งาน
ผ่านการค้นหาเครื่องมือของ Codex ภายใต้เนมสเปซดังกล่าว วิธีนี้ช่วยลดขนาดบริบท
เริ่มต้นของโมเดล เครื่องมือชุดเล็กบางส่วนยังคงเรียกใช้ได้โดยตรงโดยไม่คำนึงถึง
`codexDynamicToolsLoading` เนื่องจากการค้นหาเครื่องมือของ Codex อาจไม่พร้อมใช้งานหรือ
อาจพบเฉพาะขอบเขตที่มีแต่ตัวเชื่อมต่อ ได้แก่ `agents_list`, `sessions_spawn` และ
`sessions_yield` คำสั่งสำหรับนักพัฒนายังคงชี้นำซับเอเจนต์ Codex ตามปกติ
ให้ใช้ `spawn_agent` แบบเนทีฟสำหรับงานซับเอเจนต์ที่เป็นเนทีฟของ Codex ขณะที่
`sessions_spawn` ยังคงพร้อมใช้งานสำหรับการมอบหมายงานให้ OpenClaw หรือ ACP อย่างชัดเจน
การตอบกลับต้นทางที่ใช้เฉพาะเครื่องมือข้อความยังคงเป็นแบบโดยตรงเช่นกัน เนื่องจากเป็น
สัญญาการควบคุมรอบการทำงาน

เครื่องมือที่ทำเครื่องหมาย `catalogMode: "direct-only"` รวมถึงเครื่องมือ OpenClaw `computer`
จะถูกจัดกลุ่มภายใต้ `openclaw_direct` โดย OpenClaw จะเพิ่มเนมสเปซดังกล่าวลงใน
รายการ `code_mode.direct_only_tool_namespaces` ของ Codex โดยไม่แทนที่
รายการที่ผู้ปฏิบัติงานระบุไว้ ดังนั้น Codex จึงเปิดเผยเครื่องมือเหล่านั้นเป็น
`DirectModelOnly` ในเธรดปกติและเธรดที่ใช้เฉพาะโหมดโค้ด แทนที่จะกำหนดเส้นทาง
ผ่านการเรียก `tools.*` ของ Code Mode ที่ซ้อนกัน ขอบเขตนี้จำเป็นสำหรับ
ผลลัพธ์ที่มีรูปภาพ เนื่องจากการทำให้เป็นอนุกรมของ Code Mode ที่ซ้อนกันจะแปลงเอาต์พุตรูปภาพ
ให้เป็นข้อความ ซึ่งจะทำให้ภาพหน้าจอที่จำเป็นสำหรับการดำเนินการกับคอมพิวเตอร์ครั้งถัดไปสูญหาย

ตั้งค่า `codexDynamicToolsLoading: "direct"` เฉพาะเมื่อเชื่อมต่อกับ
เซิร์ฟเวอร์แอป Codex แบบกำหนดเองที่ไม่สามารถค้นหาเครื่องมือแบบไดนามิกที่เลื่อนการโหลดไว้ หรือเมื่อตรวจแก้จุดบกพร่อง
เพย์โหลดเครื่องมือฉบับเต็ม

## การหมดเวลา

การเรียกเครื่องมือแบบไดนามิกที่ OpenClaw เป็นเจ้าของจะถูกจำกัดเวลาแยกจาก
`appServer.requestTimeoutMs` คำขอ `item/tool/call` แต่ละรายการของ Codex จะใช้
ค่าหมดเวลาแรกที่มีอยู่ตามลำดับต่อไปนี้:

- อาร์กิวเมนต์ `timeoutMs` ต่อการเรียกที่มีค่าเป็นบวก
- สำหรับ `image_generate` ให้ใช้ `agents.defaults.imageGenerationModel.timeoutMs`
- สำหรับ `image_generate` ที่ไม่ได้กำหนดค่าหมดเวลา ให้ใช้ค่าเริ่มต้น
  สำหรับการสร้างรูปภาพ 120 วินาที
- สำหรับเครื่องมือทำความเข้าใจสื่อ `image` ให้ใช้ `tools.media.image.timeoutSeconds`
  ที่แปลงเป็นมิลลิวินาที หรือค่าเริ่มต้นสำหรับสื่อ 60 วินาที สำหรับการทำความเข้าใจ
  รูปภาพ ค่านี้ใช้กับตัวคำขอเองและจะไม่ถูกลดลงจาก
  งานเตรียมการก่อนหน้า
- สำหรับเครื่องมือ `message` ให้ใช้ค่าเริ่มต้นคงที่ 120 วินาที
- ค่าเริ่มต้นสำหรับเครื่องมือแบบไดนามิก 90 วินาที

ตัวเฝ้าระวังนี้เป็นงบประมาณ `item/tool/call` แบบไดนามิกชั้นนอก ค่าหมดเวลา
ของคำขอเฉพาะผู้ให้บริการจะทำงานภายในการเรียกนั้นและคงความหมายของการหมดเวลาของตนเองไว้
งบประมาณของเครื่องมือแบบไดนามิกถูกจำกัดสูงสุดที่ 600000 ms เมื่อหมดเวลา OpenClaw จะยกเลิก
สัญญาณของเครื่องมือในกรณีที่รองรับ และส่งการตอบกลับเครื่องมือแบบไดนามิกที่ล้มเหลวกลับไปยัง
Codex เพื่อให้รอบการทำงานดำเนินต่อไปได้ แทนที่จะปล่อยให้เซสชันค้างอยู่ใน
`processing`

หลังจาก Codex ยอมรับรอบการทำงาน และหลังจาก OpenClaw ตอบกลับคำขอของ
เซิร์ฟเวอร์แอปที่มีขอบเขตเฉพาะรอบการทำงานแล้ว ชุดควบคุมคาดว่า Codex จะดำเนินงานในรอบปัจจุบัน
ต่อไป และสิ้นสุดรอบการทำงานแบบเนทีฟด้วย `turn/completed` ในท้ายที่สุด หาก
เซิร์ฟเวอร์แอปไม่มีความเคลื่อนไหวเป็นเวลา `appServer.turnCompletionIdleTimeoutMs` OpenClaw จะ
พยายามขัดจังหวะรอบการทำงานของ Codex บันทึกการหมดเวลาเพื่อการวินิจฉัย และ
ปล่อยเลนเซสชัน OpenClaw เพื่อไม่ให้ข้อความแชตที่ตามมาต้องเข้าคิว
ต่อท้ายรอบการทำงานแบบเนทีฟที่ค้างอยู่

การแจ้งเตือนที่ยังไม่สิ้นสุดส่วนใหญ่สำหรับรอบการทำงานเดียวกันจะยกเลิกตัวเฝ้าระวังระยะสั้นนั้น
เนื่องจาก Codex แสดงให้เห็นแล้วว่ารอบการทำงานยังทำงานอยู่ การส่งต่องานให้เครื่องมือจะใช้งบประมาณ
ช่วงว่างหลังใช้เครื่องมือที่ยาวกว่า กล่าวคือ หลังจาก OpenClaw ส่งคืนการตอบกลับ `item/tool/call`
หลังจากรายการเครื่องมือแบบเนทีฟ เช่น `commandExecution` ทำงานเสร็จ หลังจาก
การทำงาน `custom_tool_call_output` แบบดิบเสร็จสิ้น และหลังจากความคืบหน้าของผู้ช่วยแบบดิบ
หลังใช้เครื่องมือ การให้เหตุผลแบบดิบเสร็จสิ้น หรือความคืบหน้าของการให้เหตุผล ตัวป้องกันจะใช้
`appServer.postToolRawAssistantCompletionIdleTimeoutMs` เมื่อมีการกำหนดค่าไว้ และ
ใช้ค่าเริ่มต้นเป็นห้านาทีในกรณีอื่น งบประมาณหลังใช้เครื่องมือเดียวกันนี้ยังขยาย
ตัวเฝ้าระวังความคืบหน้าสำหรับช่วงสังเคราะห์แบบเงียบก่อนที่ Codex จะส่งเหตุการณ์
ถัดไปของรอบปัจจุบัน การให้เหตุผลที่เสร็จสิ้น การทำ `agentMessage`
ในส่วนคำอธิบายประกอบเสร็จสิ้น และความคืบหน้าของการให้เหตุผลหรือผู้ช่วยแบบดิบก่อนใช้เครื่องมือ
อาจตามด้วยการตอบกลับสุดท้ายโดยอัตโนมัติ จึงใช้ตัวป้องกันการตอบกลับหลังมีความคืบหน้า
แทนการปล่อยเลนเซสชันทันที เฉพาะรายการ `agentMessage` ที่เสร็จสิ้น
แบบสุดท้าย/ไม่ใช่คำอธิบายประกอบ และการทำงานของผู้ช่วยแบบดิบก่อนใช้เครื่องมือที่เสร็จสิ้นเท่านั้น
ที่จะเปิดใช้การปล่อยเอาต์พุตของผู้ช่วย หากหลังจากนั้น Codex ไม่มีความเคลื่อนไหวโดยไม่มี
`turn/completed` OpenClaw จะพยายามขัดจังหวะรอบการทำงานแบบเนทีฟและปล่อย
เลนเซสชัน ความล้มเหลวของเซิร์ฟเวอร์แอป stdio ที่เล่นซ้ำได้อย่างปลอดภัย รวมถึงการหมดเวลาจาก
การไม่มีความเคลื่อนไหวระหว่างรอรอบการทำงานเสร็จ โดยไม่มีหลักฐานจากผู้ช่วย เครื่องมือ
รายการที่กำลังทำงาน หรือผลข้างเคียง จะถูกลองใหม่หนึ่งครั้งด้วยเซิร์ฟเวอร์แอปชุดใหม่
การหมดเวลาที่ไม่ปลอดภัยจะยังคงยุติไคลเอนต์เซิร์ฟเวอร์แอปที่ค้างและปล่อยเลนเซสชัน
OpenClaw อีกทั้งยังล้างการผูกเธรดแบบเนทีฟที่ค้าง แทนที่จะเล่นซ้ำ
โดยอัตโนมัติ การหมดเวลาของการเฝ้าดูการเสร็จสิ้นจะแสดงข้อความหมดเวลาเฉพาะ Codex:
กรณีที่เล่นซ้ำได้อย่างปลอดภัยจะแจ้งว่าการตอบกลับอาจไม่สมบูรณ์ ส่วนกรณีที่ไม่ปลอดภัยจะแจ้ง
ให้ผู้ใช้ตรวจสอบสถานะปัจจุบันก่อนลองใหม่ ข้อมูลวินิจฉัยการหมดเวลาสาธารณะ
ประกอบด้วยฟิลด์เชิงโครงสร้าง เช่น เมธอดการแจ้งเตือนล่าสุดของเซิร์ฟเวอร์แอป
รหัส/ประเภท/บทบาทของรายการการตอบกลับแบบดิบจากผู้ช่วย จำนวนคำขอ/รายการที่กำลังทำงาน และ
สถานะการเฝ้าดูที่เปิดใช้อยู่ เมื่อการแจ้งเตือนล่าสุดเป็นรายการการตอบกลับแบบดิบจากผู้ช่วย
ข้อมูลดังกล่าวจะรวมตัวอย่างข้อความของผู้ช่วยที่จำกัดขนาดไว้ด้วย แต่จะไม่
รวมพรอมต์ดิบหรือเนื้อหาเครื่องมือ

## การค้นหาโมเดล

โดยค่าเริ่มต้น Plugin Codex จะขอรายการโมเดลที่พร้อมใช้งานจากเซิร์ฟเวอร์แอป ความพร้อมใช้งาน
ของโมเดลอยู่ภายใต้การควบคุมของเซิร์ฟเวอร์แอป Codex ดังนั้นรายการอาจเปลี่ยนแปลงเมื่อ
OpenClaw อัปเกรดเวอร์ชัน `@openai/codex` ที่รวมมาให้ หรือเมื่อการติดตั้งใช้งาน
กำหนดให้ `appServer.command` ชี้ไปยังไบนารี Codex อื่น ความพร้อมใช้งานอาจ
จำกัดตามบัญชีด้วย ใช้ `/codex models` บน Gateway ที่กำลังทำงานเพื่อดูแค็ตตาล็อกปัจจุบัน
สำหรับชุดควบคุมและบัญชีนั้น

หากการค้นหาล้มเหลวหรือหมดเวลา OpenClaw จะใช้แค็ตตาล็อกสำรองที่รวมมาให้:

| รหัสโมเดล       | ชื่อที่แสดง | ระดับการให้เหตุผล        |
| -------------- | ------------ | ------------------------ |
| `gpt-5.5`      | gpt-5.5      | low, medium, high, xhigh |
| `gpt-5.4-mini` | GPT-5.4-Mini | low, medium, high, xhigh |

<Note>
ชุดควบคุมที่รวมมาให้ในปัจจุบันคือ `@openai/codex` `0.144.6` การตรวจสอบด้วย `model/list`
กับเซิร์ฟเวอร์แอปที่รวมมาให้ดังกล่าวส่งคืนแถวสาธารณะในตัวเลือกดังนี้:

| รหัสโมเดล        | รูปแบบอินพุต | ระดับการให้เหตุผล                    |
| --------------- | ---------------- | ------------------------------------ |
| `gpt-5.6-sol`   | text, image      | low, medium, high, xhigh, max, ultra |
| `gpt-5.6-terra` | text, image      | low, medium, high, xhigh, max, ultra |
| `gpt-5.6-luna`  | text, image      | low, medium, high, xhigh, max        |
| `gpt-5.5`       | text, image      | low, medium, high, xhigh             |
| `gpt-5.4`       | text, image      | low, medium, high, xhigh             |
| `gpt-5.4-mini`  | text, image      | low, medium, high, xhigh             |
| `gpt-5.2`       | text, image      | low, medium, high, xhigh             |

แค็ตตาล็อกของเซิร์ฟเวอร์แอปสามารถรายงาน `ultra` ได้ ส่วนการควบคุมการให้เหตุผลของ OpenClaw
ในปัจจุบันเปิดเผยระดับถึง `max`

แถวตัวเลือกปัจจุบันจำกัดตามบัญชีและอาจเปลี่ยนแปลงตามบัญชี แค็ตตาล็อก Codex
หรือเวอร์ชันที่รวมมาให้ ให้เรียกใช้ `/codex models` เพื่อดูรายการปัจจุบัน แทนการ
อ้างอิงตาราง ณ ช่วงเวลาใดช่วงเวลาหนึ่ง โมเดลที่ซ่อนอยู่ยังอาจปรากฏใน
แค็ตตาล็อกของเซิร์ฟเวอร์แอปสำหรับขั้นตอนภายในหรือเฉพาะทาง โดยไม่เป็น
ตัวเลือกปกติในตัวเลือกโมเดล
</Note>

ปรับแต่งการค้นหาภายใต้ `plugins.entries.codex.config.discovery`:

```json5
{
  plugins: {
    entries: {
      codex: {
        enabled: true,
        config: {
          discovery: {
            enabled: true,
            timeoutMs: 2500,
          },
        },
      },
    },
  },
}
```

ปิดใช้งานการค้นหาเมื่อต้องการหลีกเลี่ยงการตรวจสอบ Codex ระหว่างเริ่มต้นระบบและใช้เฉพาะ
แค็ตตาล็อกสำรอง:

```json5
{
  plugins: {
    entries: {
      codex: {
        enabled: true,
        config: {
          discovery: {
            enabled: false,
          },
        },
      },
    },
  },
}
```

## ไฟล์เริ่มต้นเวิร์กสเปซ

Codex จัดการ `AGENTS.md` ด้วยตนเองผ่านการค้นหาเอกสารโครงการแบบเนทีฟ
OpenClaw จะไม่เขียนไฟล์เอกสารโครงการ Codex สังเคราะห์ หรือพึ่งพาชื่อไฟล์สำรอง
ของ Codex สำหรับไฟล์บุคลิก เนื่องจากค่าทดแทนของ Codex จะใช้เฉพาะเมื่อ
`AGENTS.md` ไม่มีอยู่

เพื่อให้เวิร์กสเปซ OpenClaw มีความสอดคล้องกัน ชุดควบคุม Codex จะส่งต่อไฟล์
เริ่มต้นอื่นๆ เป็นคำสั่งสำหรับนักพัฒนา แต่ไม่ได้ส่งต่อในรูปแบบเดียวกัน:

- `TOOLS.md` จะถูกส่งต่อเป็นคำสั่งสำหรับนักพัฒนา Codex ที่ **สืบทอดได้** ดังนั้น
  ซับเอเจนต์ Codex แบบเนทีฟที่สร้างขึ้นระหว่างรอบการทำงานจะมองเห็นคำสั่งนี้ด้วย
- `SOUL.md`, `IDENTITY.md` และ `USER.md` จะถูกส่งต่อเป็นคำสั่งการทำงานร่วมกัน
  **เฉพาะรอบการทำงาน** ซับเอเจนต์ Codex แบบเนทีฟจะไม่สืบทอดคำสั่งเหล่านี้
  ซึ่งช่วยป้องกันไม่ให้รอบการทำงานของซับเอเจนต์รับบุคลิกของเอเจนต์หลักและ
  โปรไฟล์ผู้ใช้ไปด้วย
- รายการ Skills ของ OpenClaw ที่โหลดไว้แบบกระชับจะถูกส่งต่อเป็นคำสั่งสำหรับนักพัฒนา
  ด้านการทำงานร่วมกันเฉพาะรอบการทำงานเช่นกัน ดังนั้นซับเอเจนต์ Codex แบบเนทีฟ
  จึงไม่สืบทอดรายการนี้ด้วย
- เนื้อหา `HEARTBEAT.md` จะไม่ถูกแทรก รอบการทำงาน Heartbeat จะได้รับ
  ตัวชี้ในโหมดการทำงานร่วมกันเพื่อให้อ่านไฟล์เมื่อไฟล์มีอยู่และ
  ไม่ว่างเปล่า
- เนื้อหา `MEMORY.md` จากเวิร์กสเปซเอเจนต์ที่กำหนดค่าจะไม่ถูกวางลงใน
  อินพุตของรอบการทำงาน Codex แบบเนทีฟ เมื่อมีเครื่องมือหน่วยความจำสำหรับ
  เวิร์กสเปซนั้น หากไฟล์มีอยู่ ชุดควบคุมจะเพิ่มตัวชี้หน่วยความจำเวิร์กสเปซขนาดเล็ก
  ไปยังคำสั่งสำหรับนักพัฒนาด้านการทำงานร่วมกันเฉพาะรอบการทำงาน และ Codex
  ควรใช้ `memory_search` หรือ `memory_get` เมื่อหน่วยความจำระยะยาวเกี่ยวข้อง
  หากเครื่องมือถูกปิดใช้งาน การค้นหาหน่วยความจำไม่พร้อมใช้งาน หรือเวิร์กสเปซ
  ที่ใช้งานอยู่แตกต่างจากเวิร์กสเปซหน่วยความจำของเอเจนต์ `MEMORY.md` จะใช้
  เส้นทางบริบทรอบการทำงานแบบจำกัดตามปกติแทน
- `BOOTSTRAP.md` หากมีอยู่ จะถูกส่งต่อเป็นบริบทอ้างอิงอินพุตรอบการทำงาน
  ของ OpenClaw

## การแทนที่ด้วยตัวแปรสภาพแวดล้อม

การแทนที่ด้วยตัวแปรสภาพแวดล้อมยังคงพร้อมใช้งานสำหรับการทดสอบภายในเครื่อง:

- `OPENCLAW_CODEX_APP_SERVER_BIN`
- `OPENCLAW_CODEX_APP_SERVER_ARGS`
- `OPENCLAW_CODEX_APP_SERVER_MODE=yolo|guardian`
- `OPENCLAW_CODEX_APP_SERVER_APPROVAL_POLICY`
- `OPENCLAW_CODEX_APP_SERVER_SANDBOX`

`OPENCLAW_CODEX_APP_SERVER_BIN` จะข้ามไบนารีที่มีการจัดการเมื่อ
ไม่ได้ตั้งค่า `appServer.command`

`OPENCLAW_CODEX_APP_SERVER_GUARDIAN=1` ถูกนำออกแล้ว ให้ใช้
`plugins.entries.codex.config.appServer.mode: "guardian"` แทน หรือใช้
`OPENCLAW_CODEX_APP_SERVER_MODE=guardian` สำหรับการทดสอบภายในเครื่องแบบครั้งเดียว แนะนำให้ใช้การกำหนดค่า
สำหรับการติดตั้งใช้งานที่ทำซ้ำได้ เนื่องจากช่วยให้พฤติกรรมของ Plugin อยู่ใน
ไฟล์ที่ผ่านการรีวิวเดียวกันกับการตั้งค่าชุดควบคุม Codex ส่วนที่เหลือ

## ที่เกี่ยวข้อง

- [ชุดควบคุม Codex](/th/plugins/codex-harness)
- [รันไทม์ชุดควบคุม Codex](/th/plugins/codex-harness-runtime)
- [การกำกับดูแล Codex](/plugins/codex-supervision)
- [Plugin Codex แบบเนทีฟ](/th/plugins/codex-native-plugins)
- [การใช้งานคอมพิวเตอร์ด้วย Codex](/th/plugins/codex-computer-use)
- [ผู้ให้บริการ OpenAI](/th/providers/openai)
- [เอกสารอ้างอิงการกำหนดค่า](/th/gateway/configuration-reference)
