โค้ดของ Codex CLI ยืนยันหน้าต่างใช้งาน ~5 ชั่วโมงที่เอกสารไม่เคยพิมพ์ — เงื่อนไขในซอร์สระบุ Plus กับ Team เท่านั้น และช่วง 285–315 นาทีเท่านั้น
เมื่อ 7 ก.ย. 2026 มีกระทู้ Tell HN ขึ้นหน้าแรก Hacker News ด้วยหัวข้อสั้น ๆ ว่า OpenAI เอาลิมิต 5 ชั่วโมงกลับมาให้ผู้ใช้ Plus และ Business Standard แล้ว พร้อมประโยคเดียวว่า “In case you’re wondering why the limits behave so very different from last week” — เป็นรายงานจากผู้ใช้ล้วน ๆ ไม่มีประกาศ ไม่มี changelog ไม่มีอีเมล
แต่คราวนี้ไม่ต้องเถียงกันด้วยความรู้สึก เพราะ Codex CLI เป็นโอเพนซอร์ส และเงื่อนไขที่ตัดสินว่าจะเตือนใครเมื่อไหร่นั้นอยู่ในซอร์สให้อ่านได้ทั้งบรรทัด — ไฟล์ codex-rs/tui/src/chatwidget/rate_limits.rs มีเงื่อนไขที่ระบุชัดว่า แผน Plus และ Team เท่านั้น และเฉพาะเมื่อหน้าต่างนับโควตายาว ประมาณห้าชั่วโมง เท่านั้น ที่จะได้รับคำเตือนล่วงหน้าตั้งแต่ใช้ไป 50% ส่วนหน้าราคาสาธารณะของ Codex ไม่เคยพิมพ์ความยาวหน้าต่างไว้เลยแม้แต่ที่เดียว
สิ่งที่ซอร์สโค้ดบอก และเอกสารไม่บอก
PR #42142 “Add early rate-limit warnings for Plus and Team plans” ถูก merge เมื่อ 1 ก.ย. 2026 21:45 UTC และออกสู่ผู้ใช้ในรีลีส rust-v0.153.0 เมื่อ 3 ก.ย. คำอธิบายของ PR เขียนเองว่า “Warn Plus and Team users when they have less than 50% of an approximately five-hour usage window remaining” และ “Preserve the existing 75%, 90%, and 95% usage thresholds for other plans and window lengths”
ในโค้ดจริง ค่าคงที่คือ
const RATE_LIMIT_WARNING_THRESHOLDS: [f64; 4] = [50.0, 75.0, 90.0, 95.0];
โดยขั้น 50.0 จะถูกข้ามทิ้ง ยกเว้น ผ่านเงื่อนไขสองชั้นพร้อมกัน คือ plan_type เป็น PlanType::Plus หรือ PlanType::Team และ ความยาวหน้าต่างนั้น is_approximate_window(minutes, 5 * 60) เป็นจริง ซึ่งฟังก์ชันนั้นนิยามความ “ประมาณ” ไว้ที่ 95%–105% ของค่าที่คาดไว้ — แปลว่าหน้าต่างที่เข้าเงื่อนไขคือ 285 ถึง 315 นาที พอดี ไม่ใช่คำพูดลอย ๆ
ที่น่าสนใจกว่านั้นคือฟังก์ชัน get_limits_duration ซึ่งเป็นตัวแปลงความยาวหน้าต่างเป็นป้ายที่ผู้ใช้เห็นในข้อความเตือน มันรู้จักหน่วยเวลาห้าแบบ: 5h, daily, weekly, monthly, annual — คือ ไคลเอนต์ถูกสร้างมาให้แสดงคำว่า “5h” ได้อยู่แล้ว ข้อความที่ผู้ใช้จะเห็นถูกประกอบขึ้นเป็น “Heads up, you have less than 50% of your 5h limit left. Run /status for a breakdown.”
เทียบกับเอกสารสาธารณะที่ หน้าราคาของ Codex ตารางลิมิตมีคอลัมน์ Plus / Pro 5x / Pro 20x / Standard Business / API Key และแถวต่อโมเดล (GPT-6 Astra 5–45 ข้อความสำหรับ Plus, GPT-5.6 Sol 10–100, Terra 25–200, Luna 250–2,000) โดยเชิงอรรถใต้ตารางเขียนเพียงว่า “Local messages and cloud chats share your plan’s usage allowance. Weekly limits may also apply.” และย่อหน้าเหนือตารางโยนให้ไปดู usage dashboard เอง “for current limits and reset times” — ไม่มีคำว่า 5 ชั่วโมง ไม่มีความยาวหน้าต่างใด ๆ ถูกพิมพ์ไว้ในเอกสาร
ต้องพูดให้ตรง: โค้ดฝั่งไคลเอนต์ ไม่ได้เป็นตัวกำหนด หน้าต่างห้าชั่วโมง เซิร์ฟเวอร์เป็นคนส่ง window_minutes มาให้ สิ่งที่โค้ดพิสูจน์คือ OpenAI เขียนตรรกะพิเศษขึ้นมารองรับกรณี “แผน Plus/Team + หน้าต่าง ~5 ชม.” โดยเฉพาะ ซึ่งไม่มีเหตุผลจะเขียนถ้ากรณีนั้นไม่มีอยู่จริงในระบบ — และวันที่ merge (1 ก.ย.) มาก่อนที่ผู้ใช้จะสังเกตเห็นความเปลี่ยนแปลง (7 ก.ย.) ราวหนึ่งสัปดาห์
กลไกรอบข้างที่อยู่ในไฟล์เดียวกัน
ไฟล์เดียวกันเปิดเผยพฤติกรรมอีกสามอย่างที่ไม่เคยอยู่ในเอกสาร
หนึ่ง — ยิ่งใกล้หมดโควตา CLI ยิ่งถามเซิร์ฟเวอร์ถี่ขึ้น ฟังก์ชัน rate_limit_refresh_interval ตั้งรอบ polling ตามเปอร์เซ็นต์ที่ใช้ไป: ปกติทุก 60 วินาที, ที่ ≥75% เหลือ 30 วินาที, ที่ ≥90% เหลือ 15 วินาที และที่ ≥99% เหลือ 5 วินาที พร้อมคอมเมนต์ในโค้ดว่าทำกับทุกบัญชี ChatGPT โดยไม่ขึ้นกับ experiment ใด ๆ
สอง — ที่ 90% CLI จะชวนให้ย้ายไปโมเดลถูกลง ค่าคงที่ RATE_LIMIT_SWITCH_PROMPT_THRESHOLD ตั้งไว้ที่ 90.0 และ NUDGE_MODEL_SLUG ชี้ไปที่ gpt-5.6-luna ตรง ๆ คือเมื่อใช้โควตาไปเก้าสิบเปอร์เซ็นต์ Codex จะเสนอให้สลับไป Luna ซึ่งเป็นรุ่นที่ตารางราคาให้โควตาสูงกว่า Sol ราว 25 เท่า
สาม — มีสลัก “Luna Reserve” ที่ไม่ปรากฏในตารางราคา ในไฟล์ model_catalog.rs มีค่าคงที่ LUNA_RESERVE_MODEL: &str = "gpt-reserve" ที่แสดงชื่อต่อผู้ใช้ว่า “Luna Reserve” และในโค้ด rate limit มีสถานะ waiting_for_luna_reserve() ที่กั้นไม่ให้คิวข้อความถูกส่งต่อขณะรอ — เป็นโมเดลสำรองที่เข้ามาแทนเมื่อชนลิมิต และไม่มีชื่อนี้อยู่ในหน้าราคาสาธารณะเลย
อีกจุดที่ควรสังเกตคือ ชื่อแผนไม่ตรงกันระหว่างโค้ดกับหน้าขาย โค้ดใช้ PlanType::Team ขณะที่หน้าราคาเรียกชั้นเดียวกันว่า “Standard Business” ($100) และเขียนกำกับว่า “Business ($100) uses the Pro 5x estimates.” ส่วนผู้ตั้งกระทู้ HN ก็เรียกมันว่า business standard — เป็นความไม่ตรงกันเล็ก ๆ ที่ทำให้การค้นเอกสารด้วยชื่อแผนของตัวเองแล้วไม่เจออะไร กลายเป็นเรื่องปกติ
รีลีส 0.153.0 ตัวเดียวกันนี้ยังมีของอีกชิ้นที่คนละเรื่องแต่ควรรู้ไว้: PR #42150 ทำให้ codex plugin list/add/remove ดึงปลั๊กอินจาก remote marketplace ได้แล้ว พร้อมแสดง source, version, install policy และ authentication policy ใน JSON output และมีแคชแยกตาม scope กับ collection
มุมมอง AI Curator
เรื่องนี้ไม่ใช่ “OpenAI ลดโควตาแอบ ๆ” — ผมไม่มีหลักฐานเรื่องปริมาณ และไม่ควรมีใครเขียนแบบนั้นโดยไม่มีตัวเลขก่อนหลัง สิ่งที่หลักฐานยืนยันได้จริงคือ โครงสร้างการนับโควตาของ Codex มีมิติที่ผู้ซื้อไม่เคยเห็นในหน้าขาย คุณจ่ายเงินโดยเห็นตาราง “จำนวนข้อความต่อโมเดล” แล้วมีเชิงอรรถบอกว่าอาจมีลิมิตรายสัปดาห์ด้วย แต่ตัวแปรที่ตัดสินว่าเย็นวันอังคารคุณจะทำงานต่อได้ไหม คือหน้าต่างระยะสั้นที่ไม่ถูกพิมพ์ไว้ที่ไหนเลย
สิ่งที่ทำให้กรณีนี้ต่างจากการบ่นเรื่องลิมิตทั่วไป คือ มันตรวจสอบได้ เพราะ Codex CLI เปิดซอร์ส ใครก็ตามที่สงสัยพฤติกรรมของบิลตัวเอง สามารถ grep หาเงื่อนไขที่ตัดสินชะตากรรมนั้นได้ในสามสิบวินาที นี่คือมูลค่าที่ไม่ค่อยมีใครนับของ agent CLI ที่เป็นโอเพนซอร์ส และเป็นเหตุผลเชิงปฏิบัติที่ควรใช้ประกอบการเลือกเครื่องมือ — ไม่ใช่เพราะอุดมการณ์ แต่เพราะเมื่อผู้ขายกับผู้ซื้อเห็นตัวเลขไม่ตรงกัน ฝั่งที่มีซอร์สคือฝั่งที่พิสูจน์ได้
สำหรับนักพัฒนาไทย ผลกระทบตรงที่สุดอยู่ที่ เขตเวลา หน้าต่างห้าชั่วโมงลงโทษรูปแบบการทำงานแบบ “นั่งรวดยาววันเสาร์” มากกว่าแบบ “ทำวันละสองชั่วโมงห้าวัน” ซึ่งบังเอิญเป็นรูปแบบที่คนทำโปรเจกต์ข้าง ๆ งานประจำในไทยใช้กันมากที่สุด — คอมเมนต์ในกระทู้ HN ที่พูดตรงประเด็นที่สุดคือคนที่บอกว่าเขาเขียนโค้ดเป็นช่วง ๆ ตอนที่พอมีเวลา และลิมิตรายสัปดาห์แบบเดิมพอดีกับจังหวะนั้น พอเปลี่ยนมาเป็นหน้าต่างสั้น ตัวเลือกที่เหลือคือซื้อเพิ่ม อัปเกรด หรือย้ายออก ถ้าคุณวางแผนงบเครื่องมือของทีมอยู่ อย่าคำนวณจากโควตารวมต่อสัปดาห์อย่างเดียว ให้คำนวณจากรูปแบบเวลาที่ทีมใช้จริงด้วย
ข้อเสนอเชิงปฏิบัติสามข้อ: (1) ใช้ /status ใน Codex CLI ดูหน้าต่างที่บัญชีคุณโดนจริง เพราะเลเบล 5h / weekly มาจากค่าที่เซิร์ฟเวอร์ส่งมา ไม่ใช่ค่าที่ไคลเอนต์เดา (2) ถ้าคุณเป็น Plus หรือ Team คำเตือนที่ 50% คือของใหม่ อย่าเข้าใจผิดว่าโควตาลดเพราะเพิ่งเห็นเตือนเร็วขึ้น (3) ถ้าทีมมีงานยาวที่ห้ามสะดุด ให้เผื่อทางถอยไปที่ API key ซึ่งเป็นคอลัมน์เดียวในตารางที่คิดตามการใช้งานจริงแทนโควตาแบบหน้าต่าง
และถ้ามีบทเรียนวิธีการอยู่ในเรื่องนี้ ก็คือบทเรียนเดิมที่ควรทำซ้ำ: เมื่อผู้ให้บริการเปลี่ยนพฤติกรรมโดยไม่ประกาศ อย่าอ้างโพสต์บนโซเชียล ให้ไปหาสิ่งที่ผู้ให้บริการเผลอเผยแพร่เอง — release note, commit, หรือซอร์สโค้ด ในกรณีนี้ทั้งสามอย่างมีครบ
แหล่งข่าว
- openai/codex — รีลีส rust-v0.153.0 (3 ก.ย. 2026) ระบุคำเตือนหน้าต่างใช้งาน ~5 ชั่วโมงสำหรับ Plus และ Team
- PR #42142 — Add early rate-limit warnings for Plus and Team plans (merge 1 ก.ย. 2026)
- ซอร์สจริง: codex-rs/tui/src/chatwidget/rate_limits.rs
- หน้าราคาสาธารณะของ Codex ที่พิมพ์เพียง “Weekly limits may also apply”
- Tell HN: OpenAI brings back 5 hour limit for plus and business standard users (7 ก.ย. 2026)
อ่านเพิ่มในหมวด เครื่องมือนักพัฒนา
Betelgeuse รัน Qwen3.8 Flash Next ขนาด 68GB บน RTX 3060 กับแรม 16GB ส่วน Basalt วัดให้เห็นว่าเอนจินที่เร่งด้วยแฟล็กลัดทำให้โมเดลลืมของ
Betelgeuse ฟอร์ก llama.cpp ที่เปิดเมื่อ 31 ต.ค. ดึง expert จาก NVMe เข้า VRAM ตามต้องการ อ้าง 22 tok/s แบบไม่ทิ้ง expert แต่ README เตือนเองว่ายังทดลองและตัวเลขมาจากคนละรอบ วันเดียวกันผู้พัฒนา Basalt เผยผลวัดว่าแฟล็กเร่งความเร็วทำคุณภาพ Q8 ตกไปใกล้ Q2
กฎห้ามโคลนเกมของ Claude Code เริ่มกระทบงานจริง บริษัทรับทำเกมกระดานร้องงานลูกค้าหยุด แต่รายงานหลายชิ้นปนกับตัวกรองไซเบอร์คนละเรื่อง
ต่อจากที่เราพบกฎนี้ในไบนารี Claude Code ผู้ใช้เริ่มรายงานว่างานเชิงพาณิชย์ถูกปฏิเสธ และ Tom's Hardware กับ Mashable หยิบไปรายงาน แต่เมื่อไล่ issue ที่อ้างถึง พบว่าหลายรายการเกิดก่อนกฎจะมา จึงน่าจะเป็นตัวกรองด้านไซเบอร์ ส่วน Anthropic ยังไม่ชี้แจง
Claude Code ส่ง transcript ของ background agent ให้โมเดลทุก ~30 วินาทีเพื่อเขียนสถานะ 3–5 คำ ผู้วัดรายงานกินราว 16% และยังปิดแบบทางการไม่ได้
รายงานอิสระพบว่าฟีเจอร์ agent_summary ของ Claude Code ส่ง transcript เต็มของ background agent ไปถามสถานะทุก ~30 วินาที คิดเป็น 16.4% ของค่าใช้จ่ายในระบบของผู้วัด Issue เปิดมาตั้งแต่ ส.ค. ยังไม่มีสวิตช์ปิดที่รองรับ เราตรวจพบโค้ดนี้ใน 2.1.314 และพบกฎใหม่เรื่องเกมที่ไม่อยู่ใน changelog