นี่คือคู่มือ A–Z ฉบับสมบูรณ์ของ Claude Fable 5 ว่ามันคืออะไร และวิธีใช้งานให้เหมือนวิศวกรระดับ 100x
สิ่งนี้จะเปลี่ยนทุกอย่างเกี่ยวกับวิธีที่คุณทำงานกับ Claude
บุ๊กมาร์ก 8 บิลด์เหล่านี้ไว้ก่อนที่คุณจะลืม
บทนำ
คุณมีโมเดลที่ทรงพลังที่สุดเท่าที่เคยมีมาให้ใช้งานทั่วไป แต่คุณยังคงพิมพ์พรอมต์ทีละอัน คู่มือนี้จะแก้ไขปัญหานั้น
นี่คือสถานการณ์ ณ เดือนกรกฎาคม 2026 Fable 5 สามารถทำงานได้เป็นชั่วโมงๆ โดยไม่ต้องมีคนดูแล ส่งเอเจนต์ย่อยของตัวเองออกไป และทำงานที่ต้องใช้เวลาหนึ่งสัปดาห์ให้เสร็จภายในคืนเดียว มันยังคิดค่าบริการตามการใช้งาน ($10/ล้านโทเค็นขาเข้า, $50/ล้านโทเค็นขาออกผ่านเครดิตการใช้งาน) มันทำงานเกินขอบเขตเมื่อไม่ได้กำหนดขอบเขตไว้ และมันเถียงเพื่อข้อผิดพลาดของมันได้น่าเชื่อถือกว่าที่คนส่วนใหญ่เถียงเพื่อคำตอบที่ถูกต้องของพวกเขา
ถ้าใช้แบบไม่เป็นระบบ มันเป็นวิธีที่แพงในการสร้างสิ่งที่ผิดพลาดแต่ดูน่าประทับใจ แต่ถ้าใช้ภายในระบบ มันคือสิ่งที่ใกล้เคียงกับพนักงานมากที่สุดที่คุณสามารถเช่าได้ในราคาสามดอลลาร์ต่อวัน
คู่มือนี้จะสร้างระบบนั้นขึ้นมา ไม่ใช่แค่แนวคิด: ไฟล์จริง ตามลำดับ พร้อมจุดตรวจสอบหลังจากแต่ละขั้นตอนเพื่อให้คุณรู้ว่ามันทำงานได้ก่อนที่จะต่อชิ้นส่วนถัดไป
สิ่งที่คุณจะมีเมื่อเสร็จสิ้น:
- CLAUDE.md ที่โมเดลไม่สามารถต่อรองได้ (BUILD 1)
- ลูปประจำวันที่ Fable 5 ตัดสินใจทุกอย่างแต่เขียนโทเค็นน้อยมาก โมเดลราคาถูกทำงาน ผู้ตรวจสอบอิสระให้คะแนน และสคริปต์ bash เป็นผู้ลงคะแนนเสียงสุดท้าย (BUILDs 2-3)
- บัญชีแยกประเภทความเชื่อถือที่ให้และเพิกถอนอิสระในการทำงานตามทักษะ โดยอัตโนมัติ ตามอัตราการผ่านที่วัดได้ (BUILD 4)
- ไดเรกทอรีเป้าหมายที่ทุกสิ่งที่คุณเคยทำเสร็จจะถูกตรวจสอบซ้ำทุกวัน ตลอดไป เพื่อไม่ให้อะไรเน่าเสียอย่างเงียบๆ (BUILD 5)
- งบประมาณที่บังคับใช้เองแทนที่จะทำให้คุณประหลาดใจ (BUILD 6)
- สี่ลูปเสริม (quorum, ratchet, sparring, compost) แต่ละอันมีเงื่อนไขที่บอกคุณว่าเมื่อไหร่ควรติดตั้ง (BUILD 7)
- ตาราง cron, คู่มือการดำเนินการสำหรับทุกสัญญาณเตือนที่ระบบสามารถแจ้งได้, และตารางความเชื่อถือ 30 วันที่จะพามันจากการถูกควบคุมไปสู่การขยายขีดความสามารถด้วยตนเอง
คู่มือนี้เหมาะสำหรับใคร ใครก็ตามที่มี repo, terminal, และการสมัครสมาชิก Claude Code หรือคีย์ API ตัวอย่างต่างๆ มีกลิ่นอายของโค้ดเพราะลูปต่างๆ เติบโตมาจากฐานโค้ด แต่ระบบเป้าหมายและครึ่งหนึ่งของลูปทำงานกับใบแจ้งหนี้ รายงาน และรายการอ่านได้ดีพอๆ กัน เงื่อนไขต่างๆ เป็นเพียงคำสั่ง shell
วิธีอ่าน อ่านตามลำดับ ทำตามจุดตรวจสอบ BUILD 0 คือการตั้งค่าและภาษาพรอมต์อย่างเป็นทางการของ Anthropic ทุกอย่างหลังจากนั้นคือระบบที่สร้างขึ้นบนนั้น แต่ละบิลด์ใช้เวลา 10 ถึง 20 นาที 30 วันในตอนท้ายไม่ใช่เวลาในการอ่าน แต่เป็นตารางความเชื่อถือแบบค่อยเป็นค่อยไปที่ระบบจะได้รับสิทธิ์ในการทำงานโดยไม่มีคุณ เวลาลงมือปฏิบัติจริงทั้งหมด: ประมาณ 2 ชั่วโมง
หลักการสามข้อที่อยู่ภายใต้ทุกสิ่ง เพื่อให้คุณสามารถคาดเดาการตัดสินใจในการออกแบบใดๆ ก่อนที่จะอ่าน:
- กฎ ไม่ใช่คำแนะนำ ทุกกฎมีหมายเลข คำว่า "ห้าม" หรือคำสั่งที่ตรวจสอบมัน อะไรที่อ่อนกว่านั้นจะถูกปรับให้เหมาะสมจนหายไป
- ไม่มีอะไรตรวจสอบการบ้านของตัวเอง ผู้วางแผน ผู้ทำงาน ผู้ตรวจสอบ และผู้เฝ้าประตู คือสี่ฝ่ายที่แตกต่างกัน และฝ่ายสุดท้ายเป็นแบบตายตัว (deterministic)
- ไม่มีอะไรที่ผ่านแล้วจะไม่ถูกจับตามอง งานที่เสร็จแล้วจะเลื่อนขั้นไปเป็นค่าคงที่ที่ถูกตรวจสอบซ้ำ เป้าหมายที่คุณตรวจสอบเพียงครั้งเดียวคือสมมติฐานที่มีประทับเวลา
ไม่มีเรียงความอีกต่อไปจากตรงนี้ แปดบิลด์ แต่ละอันมีไฟล์ คำสั่ง และจุดตรวจสอบ
ข้อกำหนดเบื้องต้น
1CLI claude (Claude Code) พร้อมการเข้าถึง Fable 5 # เปิดใช้งานเครดิตการใช้งาน, ตั้งค่าขีดจำกัด /usage-credits2CLI llm + คีย์ OpenRouter # llm install llm-openrouter3jq, gh, git, make, cron4repo ที่มีคำสั่งทดสอบ
สิ่งที่คุณกำลังสร้าง
1your-repo/2 CLAUDE.md # BUILD 1: รัฐธรรมนูญ3 loop/4 loop.sh # BUILD 3: หัวใจหลัก5 conductor.md # BUILD 3: พรอมต์กำหนดเส้นทาง6 triage.md # BUILD 3: พรอมต์ผู้อ่านราคาถูก7 contract.md # BUILD 2: สามรายการ8 workers/implement.md # BUILD 39 workers/verify.md # BUILD 310 guardrails/verify.sh # BUILD 2: ประตูตรวจสอบแบบตายตัว11 scripts/trust-log.sh # BUILD 412 scripts/log-cost.sh # BUILD 613 scripts/cost-check.sh # BUILD 614 quorum.sh # BUILD 7 (ไม่บังคับ)15 verify-goals.sh # BUILD 516 goals/ # BUILD 5: เป้าหมายถาวร17 skills/ # BUILD 4: หนึ่งไฟล์ต่อพนักงานหนึ่งคน18 memory/19 STATE.md trust.tsv goal-ledger.tsv dispatch.tsv usage.log20 Makefile # BUILD 8: tick / queue / trust / audit / dream
BUILD 0: กำหนดค่าเอ็นจิ้น (จากเอกสารทางการของ Fable 5)
ทุกอย่างในบิลด์นี้มาจากเอกสารของ Anthropic เอง ตั้งค่าสิ่งเหล่านี้ก่อนที่จะเขียนไฟล์ใดๆ ของคุณเอง
แผ่นข้อมูลจำเพาะ:
การตั้งค่า
ค่า
แหล่งที่มา
สตริงโมเดล
claude-fable-5
ภาพรวมโมเดล
บริบท / เอาต์พุต
1M โทเค็น / สูงสุด 128k เอาต์พุตต่อคำขอ
เอกสารแนะนำ
ราคา
$10/ล้านขาเข้า, $50/ล้านขาออก
เอกสารแนะนำ
การคิด (Thinking)
adaptive, เปิดตลอดเวลา;
thinking: {type:"disabled"}
ถูกปฏิเสธ; เอาต์พุตการคิดจะถูกสรุปเท่านั้น
เอกสารแนะนำ + ความพยายาม
ความพยายาม (Effort)
low
medium
high
xhigh
max
;
high
= ค่าเริ่มต้น = การละเว้นพารามิเตอร์
เอกสารความพยายาม
รูปร่าง API
output_config: {"effort": "..."}
บน Messages API
เอกสารความพยายาม
ข้อเท็จจริงอย่างเป็นทางการห้าข้อที่เปลี่ยนวิธีที่คุณสร้าง:
- max_tokens คือขีดจำกัดสูงสุดของความคิด (thinking) บวกกับข้อความตอบกลับ ที่ระดับ high และ xhigh ให้ตั้งค่าให้ใหญ่ (เริ่มต้นที่ 64k) มิฉะนั้น Fable จะมีพื้นที่ไม่พอระหว่างการคิด ใช้กับการเรียก claude -p ทุกครั้งในคู่มือนี้
- xhigh มีไว้สำหรับ "งานแบบเอเจนต์ที่ใช้เวลานาน (มากกว่า 30 นาที) โดยมีงบประมาณโทเค็นเป็นล้าน" อย่างเป็นทางการ นั่นคือที่นั่งของผู้ควบคุมวง (conductor) และไม่มีอะไรอื่นในระบบนี้ เอกสารยังบอกด้วยว่าการใช้ effort ต่ำกว่าบน Fable 5 "มักจะเกินประสิทธิภาพของ xhigh บนโมเดลรุ่นก่อนหน้า" ดังนั้นควรต่อต้านการอัปเกรดผู้ทำงาน (worker)
- การปฏิเสธคือ HTTP 200 Fable 5 เรียกใช้ตัวแยกประเภทความปลอดภัย (อาชญากรรมไซเบอร์, ชีววิทยา/วิทยาศาสตร์ชีวภาพ, การแยกเหตุผล) คำขอที่ถูกปฏิเสธจะส่งคืน stop_reason: "refusal" เป็นการตอบสนองที่สำเร็จ (SUCCESS) สคริปต์ของคุณต้องตรวจสอบ stop reason ไม่ใช่ exit code วิธีแก้ไขอย่างเป็นทางการ: กำหนดค่า fallbacks ฝั่งเซิร์ฟเวอร์หรือมิดเดิลแวร์ SDK เพื่อเปลี่ยนเส้นทางไปยัง Opus 4.8
- อย่าขอให้ Fable สะท้อนการใช้เหตุผลของมัน พรอมต์หรือทักษะที่พูดว่า "แสดงความคิดของคุณ" หรือ "อธิบายเหตุผลของคุณในการตอบกลับ" จะกระตุ้นหมวดหมู่การปฏิเสธ reasoning_extraction และยกระดับ fallbacks ตรวจสอบทุกทักษะเก่าเมื่อย้ายมาใช้สิ่งนี้ ให้อ่านบล็อกโครงสร้างความคิด (structured thinking blocks) แทน
- เทิร์น (Turns) นั้นยาวโดยการออกแบบ งานยากใช้เวลาหลายนาทีต่อคำขอที่ effort สูงกว่า การทำงานอัตโนมัติจะขยายออกไปเป็นชั่วโมง ปรับค่า timeout ของไคลเอนต์และตรวจสอบการทำงานแบบอะซิงโครนัส (งานตามกำหนดการ, ไม่ใช่การรอแบบบล็อก) นี่คือสาเหตุที่หัวใจหลัก (heartbeat) เป็น cron ไม่ใช่ลูปแบบบล็อก
ชุดพรอมต์อย่างเป็นทางการ Anthropic จัดส่งภาษาพรอมต์ที่ผ่านการทดสอบสำหรับพฤติกรรมที่รู้จักของ Fable 5 สิ่งเหล่านี้จะใส่ลงในพรอมต์ของคุณแบบคำต่อคำ อย่าเปลี่ยนเป็นคำพูดของคุณเองให้สั้นลง:
- ป้องกันการวางแผนมากเกินไป (Anti-overplanning) (สำหรับ conductor และเซสชันแบบโต้ตอบใดๆ):
1เมื่อคุณมีข้อมูลเพียงพอที่จะลงมือทำ ให้ลงมือทำ อย่าหาข้อเท็จจริงที่已经被2กำหนดไว้แล้วในการสนทนาซ้ำ อย่าตั้งคำถามกับการตัดสินใจที่ผู้ใช้ได้ทำไปแล้ว3หรือบรรยายตัวเลือกที่คุณจะไม่ดำเนินการ หากคุณกำลังชั่งน้ำหนักทางเลือก4ให้คำแนะนำ ไม่ใช่การสำรวจอย่างละเอียดถี่ถ้วน
- ป้องกันการทำเกินความจำเป็น (Anti-gold-plating) (สำหรับทุกพรอมต์ของผู้ทำงาน; นี่คือรั้วอย่างเป็นทางการรอบการทำงานเกินขอบเขต):
1อย่าเพิ่มฟีเจอร์, รีแฟคเตอร์, หรือแนะนำนามธรรมที่เกินกว่าที่งาน2ต้องการ การแก้ไขบั๊กไม่จำเป็นต้องทำความสะอาดรอบข้าง อย่าออกแบบสำหรับ3ความต้องการในอนาคตที่สมมติขึ้น: ทำสิ่งที่ง่ายที่สุดที่ทำงานได้ดี4อย่าเพิ่มการจัดการข้อผิดพลาดหรือการตรวจสอบความถูกต้องสำหรับสถานการณ์ที่ไม่สามารถเกิดขึ้นได้5ตรวจสอบความถูกต้องเฉพาะที่ขอบเขตของระบบเท่านั้น
- การอ้างสิทธิ์ความคืบหน้าอย่างมีหลักฐาน (Grounded progress claims) (สำหรับการทำงานระยะยาวใดๆ; ในการทดสอบของ Anthropic สิ่งนี้เกือบจะขจัดรายงานสถานะที่กุขึ้น):
1ก่อนที่จะรายงานความคืบหน้า ตรวจสอบแต่ละข้ออ้างกับผลลัพธ์ของเครื่องมือจาก2เซสชันนี้ รายงานเฉพาะงานที่คุณสามารถชี้ให้เห็นหลักฐานได้เท่านั้น หากบางอย่างยังไม่3ได้รับการยืนยัน ให้พูดอย่างชัดเจน หากการทดสอบล้มเหลว ให้พูดพร้อมกับผลลัพธ์ หาก4ขั้นตอนถูกข้ามไป ให้พูดอย่างนั้น
- การเตือนความจำไปป์ไลน์อัตโนมัติ (Autonomous-pipeline reminder) (สำหรับทุกพรอมต์ที่ขับเคลื่อนโดย cron; ฆ่าการหยุดก่อนกำหนดแบบ "ฉันจะรัน X ทันที"):
1คุณกำลังทำงานโดยอัตโนมัติ ผู้ใช้ไม่ได้ดูอยู่และไม่สามารถตอบคำถาม2ระหว่างทำงาน สำหรับการกระทำที่สามารถย้อนกลับได้ซึ่งเป็นไปตามคำขอเดิม3ให้ดำเนินการต่อไปโดยไม่ต้องถาม ก่อนที่จะจบเทิร์นของคุณ ให้ตรวจสอบย่อหน้าสุดท้าย4ของคุณ: ถ้ามันเป็นแผน, คำถาม, หรือคำมั่นสัญญาเกี่ยวกับงานที่คุณยังไม่ได้ทำ5ให้ทำงานนั้นตอนนี้ด้วยการเรียกใช้เครื่องมือ จบลงเมื่องานเสร็จสมบูรณ์6หรือคุณติดขัดเนื่องจากอินพุตที่ผู้ใช้เท่านั้นที่สามารถให้ได้
- รูปแบบหน่วยความจำอย่างเป็นทางการ (Official memory format) (สำหรับ dreamer และ memory/learnings/):
1จัดเก็บบทเรียนหนึ่งบทเรียนต่อหนึ่งไฟล์ โดยมีสรุปหนึ่งบรรทัดอยู่ด้านบน2บันทึกการแก้ไขและแนวทางที่ได้รับการยืนยันเช่นเดียวกัน รวมถึงสาเหตุที่มันสำคัญ3อย่าบันทึกสิ่งที่ repo บันทึกไว้แล้ว อัปเดตบันทึกที่มีอยู่แทนที่จะทำซ้ำ4ลบบันทึกที่กลายเป็นว่าผิด
- คำแนะนำผู้ตรวจสอบอย่างเป็นทางการ (Official verifier instruction) (เอกสารระบุโดยตรง: "เอเจนต์ย่อยผู้ตรวจสอบที่มีบริบทแยกต่างหากและสดใหม่ มักจะทำงานได้ดีกว่าการวิจารณ์ตนเอง"):
1สร้างวิธีการตรวจสอบงานของคุณเองในช่วงเวลาทุกๆ [X] ขณะที่คุณ2สร้าง เรียกใช้สิ่งนี้ทุกๆ [ช่วงเวลา X], ตรวจสอบงานของคุณกับเอเจนต์ย่อย3ตามข้อกำหนด
คำสั่งนั่งร้านสองคำสั่งจากเอกสารที่ควรปฏิบัติตาม: เริ่มต้นที่จุดสูงสุดของช่วงความยากของคุณ (การทดสอบ Fable เฉพาะกับงานง่ายๆ ทำให้มันด้อยค่า; ให้ปัญหาที่ยากที่สุดที่ยังไม่ได้แก้และปล่อยให้มันกำหนดขอบเขต), และรีแฟคเตอร์ทักษะเก่า (คำแนะนำที่เขียนสำหรับโมเดลรุ่นก่อนหน้ามักจะกำหนดมากเกินไปสำหรับ Fable 5 และทำให้เอาต์พุตแย่ลง; หากประสิทธิภาพเริ่มต้นดีกว่าโดยไม่มีคำแนะนำ ให้ลบคำแนะนำนั้น)
CHECK 0: ทุกการเรียก claude -p ในสคริปต์ของคุณมี max_tokens ขนาดใหญ่ที่ชัดเจนในที่ที่รองรับ; สคริปต์ของคุณตรวจสอบ stop_reason: "refusal"; ไม่มีพรอมต์หรือทักษะใดๆ ที่พูดว่า "แสดงความคิดของคุณ"
BUILD 1: รัฐธรรมนูญ (CLAUDE.md)
เหตุผลในหนึ่งบรรทัด: Fable ปฏิบัติตามกฎและปรับให้เหมาะสมตามคำแนะนำ ดังนั้นทุกบรรทัดต้องมีหมายเลข คำว่า "ห้าม" หรือคำสั่งที่ตรวจสอบมัน
กฎสำหรับไฟล์: สี่บล็อก, ต่ำกว่า 150 บรรทัด, ไม่มี "คิดทีละขั้นตอน" (การให้เหตุผลเปิดอยู่เสมอ; สิ่งเหล่านั้นคือโทเค็นที่เสียเงิน), ไม่มีบุคลิกของเอเจนต์ที่กำหนดไว้ล่วงหน้า (Fable ออกแบบทีมได้ดีกว่าที่คุณจะกำหนดล่วงหน้า), ส่วนใหญ่เป็นป้ายหยุด
สร้าง CLAUDE.md:
1# CLAUDE.md23## ห้าม (กฎ; ข้อยกเว้นต้องขออนุญาตก่อน)4- ห้ามเกิน 200 บรรทัดที่เปลี่ยนแปลงในหนึ่งคอมมิตโดยไม่ขออนุญาต5- ห้ามแตะ src/auth/, src/billing/, migrations/, หรือ prod config โดยไม่มีคนดูแล6- ห้ามรายงานว่างานเสร็จจากการประเมินของคุณเอง เสร็จ = การตรวจสอบผ่าน7- ห้ามสร้างความลับ, เอนด์พอยต์, หรือธรรมเนียมปฏิบัติขึ้นมาเอง ให้หยุดและถาม8- ห้ามเพิ่ม dependency เสนอมันใน STATE.md และหยุด9- ห้ามเกิน effort high ภายในลูปใดๆ xhigh มีไว้สำหรับการตรวจสอบครั้งเดียวเท่านั้น10- ห้ามแก้ไขหรือลบการทดสอบเพื่อให้มันผ่าน นั่นคือความล้มเหลวเสมอ11- ห้ามสะท้อน, ถอดความ, หรืออธิบายการใช้เหตุผลภายในของคุณในข้อความตอบกลับ12 (ทางการ: กระตุ้นการปฏิเสธ reasoning_extraction บน Fable 5)13- เมื่อเงื่อนไข /goal ผ่าน ให้เขียน goals/<name>.md โดยมีเงื่อนไขนั้น14 เป็น predicate ก่อนที่จะรายงานความสำเร็จ1516## การจัดส่ง (กำหนดเส้นทางทุกงาน; รายการแรกที่ตรงกันชนะ; บันทึกลงใน memory/dispatch.tsv)17| model | marginal | appetite | intelligence | taste |18|-----------------|----------|----------|--------------|-------|19| claude-fable-5 | 2 (เครดิต) | 3 | 10 | 10 |20| claude-opus-4-8 | 7 (sub) | 6 | 8 | 9 |21| claude-sonnet-5 | 9 (sub) | 8 | 7 | 7 |22| codex (sub ที่ 2) | 9 | 10 | 9 | 5 |231. การตัดสินใจ (วางแผน/ตรวจสอบ/กำหนดเส้นทาง/ทางตัน) -> fable-5, effort high, อ่านอย่างเดียว242. การอ่าน >50k โทเค็น (logs/PDFs/screenshots) -> codex ห้ามใช้ fable253. การส่งถึงผู้ใช้ (UI/API/สำเนา) -> taste >= 8 ได้รับการตรวจสอบครั้งสุดท้าย264. ข้อมูลจำเพาะสมบูรณ์ -> sonnet-5, effort medium275. นอกเหนือจากนั้น sonnet-5; เลื่อนขึ้นหนึ่งขั้นเมื่อพลาดโดยไม่ต้องถาม2829## คำศัพท์30- "intelligence" = ปัญหาที่ยากที่สุดที่จัดการได้โดยไม่ต้องดูแล31- "taste" = UI/UX, คุณภาพโค้ด, การออกแบบ API, สำเนา32- "done" = predicate ผ่าน; ไม่มีอะไรอื่น33- "small" = ต่ำกว่า 50 บรรทัดที่เปลี่ยนแปลง; "quick" = ต่ำกว่า 10 นาทีของเวลาคุณ34- "cleanup" = พฤติกรรมเหมือนเดิม, verify.sh สีเขียวก่อนและหลัง3536## เสร็จแล้ว37- ทุกงานมี done_when ที่เครื่องตรวจสอบได้ก่อนเริ่มงาน38- เอเจนต์ที่มีบริบทใหม่ซึ่งไม่เห็นทั้งแผนหรือร่างจะตรวจสอบกับมัน39- guardrails/verify.sh มีคะแนนเสียงสุดท้าย40- การเบี่ยงเบน: ตัวเลือกแบบอนุรักษ์นิยม, บันทึกลงใน IMPLEMENTATION.md, ดำเนินการต่อ41- ผู้สร้างและผู้ตรวจสอบไม่เห็นด้วยสองครั้ง -> หยุด, เข้าคิวให้มนุษย์
แก้ไขตัวเลขและพาธให้เป็นของคุณ เนื้อหาเฉพาะเวิร์กโฟลว์ (ขั้นตอน PR, รายการตรวจสอบการเผยแพร่) ไปไว้ใน skills/ ไม่ใช่ที่นี่
CHECK 1: สำหรับทุกบรรทัดให้ถาม: โมเดลสามารถปฏิบัติตามได้ 80% และอ้างว่าสำเร็จได้หรือไม่? ถ้าใช่ ให้เขียนใหม่ด้วยตัวเลขหรือคำว่า "ห้าม" wc -l CLAUDE.md ต่ำกว่า 150
BUILD 2: กำแพงและประตู
เหตุผล: ต้องประกาศรัศมีการระเบิดก่อนการเดินเครื่องครั้งแรก และสคริปต์ bash ต้องถือคะแนนเสียงสุดท้าย
สร้าง loop/contract.md:
1## ทำงานคนเดียว2ร่าง PR บน branch; แก้ไขหนี้ lint/test; อัปเดต STATE.md; ติดป้ายกำกับ issues34## เข้าคิวให้ฉัน5auth, payments, migrations; ทักษะใดๆ ที่ต่ำกว่าระดับ "auto"; diff ใดๆ > 400 บรรทัด67## ปลุกฉัน8verify ล้มเหลวสองครั้งในรายการเดียวกัน9safeguard router สลับโมเดลระหว่างการทำงาน10งบประมาณรายวันถูกเบิกเกิน11มีอะไรขอ secret12เป้าหมายถาวร (standing goal) ถูกละเมิด (VIOLATED)
สร้าง loop/guardrails/verify.sh (แก้ไขสำหรับสแต็คของคุณ):
1#!/usr/bin/env bash2set -e3npm run typecheck --if-present4npm test --if-present5npm run lint --if-present
CHECK 2: ./loop/guardrails/verify.sh ทำงานและออกด้วย 0 บน repo ปัจจุบันของคุณ ถ้ามันล้มเหลวตอนนี้ ให้แก้ไขก่อน; ทั้งระบบยืนอยู่บนสคริปต์นี้
BUILD 3: หัวใจหลัก
เหตุผลในสามบรรทัด: Fable ในฐานะผู้ทำงานคือบิลสี่หลัก (เซสชัน 500k-1M โทเค็นที่ $50/ล้านขาออก); Fable ในฐานะผู้ควบคุมวงปล่อยโทเค็น 10-20% ในขณะที่ตัดสินใจ 100% โมเดลราคา $0.01 อ่านการเดินเครื่องที่เงียบ เอเจนต์ส่งต่อผ่าน schema JSON เพื่อให้โมเดลใดๆ ก็สามารถนั่งในที่นั่งใดก็ได้
สร้าง loop/triage.md:
1คุณได้รับคอมมิตล่าสุด, issues ที่เปิดอยู่, และการรัน CI ส่งออกเฉพาะสิ่งที่พบ:2- finding: <หนึ่งบรรทัด>3 evidence: <id คอมมิต/issue/รัน>4 status: actionable | informational5ไม่มีการแก้ไข, ไม่มีความคิดเห็น ไม่มีอะไรจะรายงาน = ส่งออก "status: quiet" ทุกอย่างที่แตะ auth, payments, migrations, secrets = actionable เสมอ, บันทึกว่า "contract-sensitive"
สร้าง loop/conductor.md:
1คุณคือผู้ควบคุมวง คุณไม่เขียนโค้ด คุณไม่แก้ไขไฟล์21. อ่าน STATE, TRUST LEDGER, CONTRACT ด้านล่าง อย่าเชื่อถือความทรงจำเกี่ยวกับสิ่งเหล่านี้32. เลือก ONE รายการ actionable ที่มีมูลค่าสูงสุด4 contract-sensitive, ambiguous, หรือน่าจะ >400 บรรทัด diff -> action: queue5 ไม่มีอะไรคุ้มค่าที่จะทำ -> action: stop63. มิฉะนั้น action: execute, พร้อม spec ที่โมเดลธรรมดาสามารถทำตามได้7ส่งออกเฉพาะ JSON นี้:8{ "action": "execute|queue|stop", "item": "...", "skill": "<kebab-case,9stable across runs>", "spec": "...", "done_when": ["<verifiable>", ...] }10คุณมีราคาแพง จงกระชับ ผลลัพธ์ของคุณคือการตัดสินใจ ไม่ใช่เรียงความ
สร้าง loop/workers/implement.md:
1คุณได้รับคำสั่งงาน (JSON) ดำเนินการตาม spec อย่างถูกต้อง2ทำ ONE ขั้นตอนถัดไปสู่ done_when diff เล็กๆ ชนะ3ข้อมูลประจำตัวที่หายไปหรือการตัดสินใจที่ไม่ได้บันทึก -> STOP, เขียนคำถามลงใน4IMPLEMENTATION.md อย่าสร้างความลับหรือธรรมเนียมปฏิบัติ5บันทึกสิ่งที่คุณทำและทำไมใน IMPLEMENTATION.md (สูงสุด 3 บรรทัด)
สร้าง loop/workers/verify.md:
1คุณได้รับ SPEC และ DIFF ไม่มีอะไรอื่น ตัดสินเฉพาะสิ่งที่อยู่ตรงหน้าคุณ21. diff ทำให้ทุก done_when เป็นที่พอใจหรือไม่? อ้างอิงบรรทัด32. มีอะไรที่อยู่นอกขอบเขตของ spec หรือไม่? ล้มเหลวทันที ลบ/ข้ามการทดสอบ? ล้มเหลวทันที4ส่งออกหนึ่งบรรทัด: "PASS: <เหตุผล>" หรือ "FAIL: <เหตุผล>"5ผู้สร้างมั่นใจ นั่นไม่ใช่หลักฐาน
สร้าง loop/loop.sh:
1#!/usr/bin/env bash2set -euo pipefail3cd "$(dirname "$0")"4MAX_ITERS="${MAX_ITERS:-10}"5DAILY_BUDGET_USD="${DAILY_BUDGET_USD:-5}"6CHEAP="${CHEAP:-openrouter/deepseek/deepseek-v4-flash}"7WORKER="${WORKER:-openrouter/moonshotai/kimi-k2.6}"89./scripts/cost-check.sh --budget "$DAILY_BUDGET_USD" || exit 31011for ((i=1; i<=MAX_ITERS; i++)); do12 # 1 TRIAGE: ประตูการเดินเครื่องเงียบ, ~$0.0113 { git log --oneline -20; gh issue list --limit 20 2>/dev/null || true; \14 gh run list --limit 10 2>/dev/null || true; } \15 | llm -m "$CHEAP" -s "$(cat triage.md)" >> memory/STATE.md16 ./scripts/log-cost.sh triage 0.0117 grep -q "status: actionable" memory/STATE.md || { echo quiet; exit 0; }1819 # 2 CONDUCT: Fable, xhigh, บริบทใหม่, อ่านอย่างเดียว, JSON out20 claude -p "$(cat conductor.md)21STATE: $(cat memory/STATE.md)22TRUST: $(./scripts/trust-log.sh --render)23CONTRACT: $(cat contract.md)" \24 --model claude-fable-5 --effort xhigh --allowedTools "Read" \25 --output-format json > /tmp/c.json26 ./scripts/log-cost.sh conductor 0.352728 # 2a ROUTE-TOLERANCE: อย่าทำซ้ำบนโมเดลที่คุณไม่ได้เลือก29 SERVED=$(jq -r '.modelUsage | keys[0] // "claude-fable-5"' /tmp/c.json)30 [[ "$SERVED" != *fable* ]] && { echo "rerouted" >> memory/STATE.md; exit 2; }3132 jq -r '.result' /tmp/c.json > work-order.json33 SKILL=$(jq -r .skill work-order.json); ACTION=$(jq -r .action work-order.json)34 [[ "$ACTION" == stop ]] && exit 035 [[ "$ACTION" == queue ]] && { echo "queued: $SKILL" >> memory/STATE.md; continue; }3637 # 3 EXECUTE: ผู้ทำงานราคาถูก, worktree แยก38 WT="../wt-$i"; git worktree add "$WT" -b "loop/$SKILL-$i" >/dev/null39 ( cd "$WT" && llm -m "$WORKER" -s "$(cat "$OLDPWD/workers/implement.md")" \40 "$(cat "$OLDPWD/work-order.json")" > IMPLEMENTATION.md )41 ./scripts/log-cost.sh worker 0.104243 # 4 VERIFY: Fable ใหม่, ไม่มีเครื่องมือ, เห็นเฉพาะ spec + diff44 V=$(claude -p "$(cat workers/verify.md)45SPEC: $(jq -r .spec work-order.json)46DIFF: $(cd "$WT" && git diff)" \47 --model claude-fable-5 --effort high --allowedTools "" \48 --output-format json | jq -r .result)49 ./scripts/log-cost.sh verifier 0.405051 # 5 GATE: ตายตัว; จากนั้น ledger; ส่งเฉพาะที่ระดับ auto52 if [[ "$V" == PASS* ]] && ( cd "$WT" && "$OLDPWD/guardrails/verify.sh" ); then53 ./scripts/trust-log.sh "$SKILL" pass54 if [[ "$(./scripts/trust-log.sh --tier "$SKILL")" == auto ]]; then55 ( cd "$WT" && git add -A && git commit -qm "loop: $SKILL" && gh pr create --fill || true )56 echo "- shipped: $SKILL" >> memory/STATE.md57 else58 echo "- review: $SKILL in $WT" >> memory/STATE.md59 fi60 else61 ./scripts/trust-log.sh "$SKILL" fail62 echo "- FAILED: $SKILL in $WT" >> memory/STATE.md63 fi64 ./scripts/cost-check.sh --budget "$DAILY_BUDGET_USD" || exit 365done66exit 1 # ถึงขีดจำกัดการวนซ้ำโดยไม่หยุด: ตรวจสอบ STATE.md
แผนที่การออก: 0 เงียบ/เสร็จ, 1 ถึงขีดจำกัด, 2 เปลี่ยนเส้นทาง, 3 งบประมาณ ทั้งหมดมีป้ายกำกับ โดยเจตนา
CHECK 3: chmod +x loop.sh guardrails/verify.sh จากนั้นรัน ./loop.sh หนึ่งครั้งด้วยตนเอง ยืนยัน: repo ที่เงียบออกด้วย 0 โดยใช้เงินประมาณหนึ่งเพนนี; repo ที่มีสิ่งที่ต้องทำจะสร้าง work-order.json พร้อมทั้งห้าฟิลด์และบรรทัดคำตัดสินใน STATE.md
BUILD 4: บัญชีแยกประเภทความเชื่อถือ
เหตุผล: "เพิ่มอิสระในการทำงานเมื่อความเชื่อถือเพิ่มขึ้น" ไม่ใช่กลไก; TSV ที่มีกฎระดับคือกลไก อิสระในการทำงานเป็นแบบต่อทักษะ ไม่ใช่ต่อลูป
สร้าง loop/scripts/trust-log.sh:
1#!/usr/bin/env bash2# การใช้งาน: trust-log.sh <skill> <pass|fail> | --render | --tier <skill>3set -euo pipefail4F="$(dirname "$0")/../memory/trust.tsv"; touch "$F"5tier_of() { awk -v r="$1" -v p="$2" 'BEGIN{6 rate=(r>0)?p/r:07 if (r>=20 && rate>=0.95) print "auto"8 else if (r<10 || rate<0.90) print "watch"9 else print "queue"}'; }10case "${1:-}" in11 --render)12 printf "%-20s %5s %5s %6s %s\n" skill runs pass rate tier13 while IFS=$'\t' read -r s r p; do [ -z "$s" ] && continue14 printf "%-20s %5s %5s %5s%% %s\n" "$s" "$r" "$p" \15 "$(awk -v r="$r" -v p="$p" 'BEGIN{printf "%.0f",(r>0)?p/r*100:0}')" \16 "$(tier_of "$r" "$p")"; done < "$F";;17 --tier)18 line=$(grep -P "^${2}\t" "$F" || echo -e "${2}\t0\t0")19 tier_of "$(cut -f2 <<<"$line")" "$(cut -f3 <<<"$line")";;20 *)21 awk -v s="$1" -v r="$2" -F'\t' 'BEGIN{OFS="\t"; f=0}22 $1==s {f=1; print s,$2+1,$3+(r=="pass"); next} {print}23 END{if(!f) print s,1,(r=="pass")?1:0}' "$F" > "$F.t" && mv "$F.t" "$F"24 if [ "$2" = fail ]; then25 runs=$(grep -P "^${1}\t" "$F" | cut -f2)26 [ "$("$0" --tier "$1")" = watch ] && [ "$runs" -ge 10 ] \27 && echo "ALERT: $1 ถูกลดระดับเป็น watch หลังจาก $runs ครั้ง" >&2 || true28 fi;;29esac
- กฎระดับ: auto = 20+ ครั้ง และ อัตราผ่าน 95%+, ส่งโดยไม่มีคนดูแล queue = ร่างที่ตรวจสอบแล้วรอคุณ watch = ต่ำกว่า 10 ครั้ง หรือ ต่ำกว่า 90%, เฉพาะร่าง การลดระดับเป็นแบบอัตโนมัติและพิมพ์ไปยัง stderr ซึ่ง cron จะส่งอีเมลถึงคุณ
- เตรียมรายชื่อ: สร้าง loop/skills/<name>/SKILL.md สำหรับงานประจำแต่ละอย่าง (fix-lint-debt, fix-flaky-test, bump-deps, triage-issues เป็นสี่มาตรฐาน) แต่ละไฟล์: ข้อมูลส่วนหน้า (ชื่อ, คำอธิบาย, เมื่อไหร่), ขั้นตอน, รายการ "ห้าม", done-when ที่ตรวจสอบได้ ทุกทักษะเริ่มต้นที่ watch
CHECK 4: รัน ./scripts/trust-log.sh demo pass 21 ครั้ง จากนั้น --tier demo จะพิมพ์ auto บันทึก fail บนทักษะที่รัน 10+ ครั้งและดู ALERT บน stderr รีเซ็ต: > memory/trust.tsv
BUILD 5: เป้าหมายถาวร + บัญชีแยกประเภทเป้าหมาย
เหตุผลในหนึ่งบรรทัด: เป้าหมายที่คุณตรวจสอบเพียงครั้งเดียวคือสมมติฐานที่มีประทับเวลา ดังนั้นเป้าหมายที่เสร็จแล้วจะเลื่อนขั้นเป็นค่าคงที่ที่ถูกตรวจสอบซ้ำทุกวันและบันทึก
สร้างหนึ่งไฟล์ต่อสิ่งที่เสร็จแล้ว, goals/<name>.md:
1predicate: cd $REPO && npm test -- tests/auth 2>&1 | tail -1 | grep -q passing2born: 2026-07-063source: /goal session 2026-07-06 (แก้ไข auth flake)4status: satisfied5last-pass: 2026-07-066on-violation: ปลุกฉัน อย่าแก้ไขอัตโนมัติ7retire-when: โมดูล auth ถูกลบ การเลิกใช้เป็นการตัดสินใจของมนุษย์, จะถูกบันทึก
สร้าง loop/verify-goals.sh:
1#!/usr/bin/env bash2set -uo pipefail3LEDGER="memory/goal-ledger.tsv"; VIOLATIONS=04for g in goals/*.md; do5 [ -e "$g" ] || continue6 grep -q '^status: retired' "$g" && continue7 pred=$(grep '^predicate:' "$g" | cut -d' ' -f2-); name=$(basename "$g" .md)8 start=$(date +%s%3N)9 if timeout 60 bash -c "$pred" >/dev/null 2>&1; then r=pass10 sed -i "s/^status:.*/status: satisfied/; s/^last-pass:.*/last-pass: $(date +%F)/" "$g"11 else r=FAIL; VIOLATIONS=$((VIOLATIONS+1)); sed -i "s/^status:.*/status: VIOLATED/" "$g"; fi12 echo -e "$(date -Is)\t$name\t$r\t$(( $(date +%s%3N) - start ))" >> "$LEDGER"13done14[ "$VIOLATIONS" -gt 0 ] && { grep -l '^status: VIOLATED' goals/*.md; exit 1; }15echo "เป้าหมายถาวรทั้งหมดยังคงอยู่"
เริ่มต้นยามเฝ้าระวัง (ตรวจจับเท่านั้น; การแก้ไขจะผ่านไปป์ไลน์ปกติ):
1/loop 1d รัน ./verify-goals.sh. ถ้าผลลัพธ์ไม่เป็นศูนย์: สำหรับแต่ละเป้าหมายที่ถูกละเมิด2ให้อ่านวันที่ last-pass และแสดงรายการสิ่งที่รวมเข้าด้วยกันตั้งแต่ตอนนั้น3(git log --oneline --since=<date>)4รายงานเป้าหมาย, ผู้ต้องสงสัย, นโยบาย on-violation อย่าแก้ไขอะไร
กฎการสำเร็จการศึกษาอยู่ใน CLAUDE.md แล้ว (BUILD 1): ทุก /goal ที่ผ่านจะเขียนเป้าหมายถาวรของตัวเอง การทำให้เสร็จคือการลงทะเบียน
การสืบค้น Ledger ที่คุณจะใช้จริง:
1awk -F'\t' '$3=="FAIL"{n[$2]++} END{for(g in n) print n[g],g}' memory/goal-ledger.tsv | sort -rn | head -5 # flakiest2grep <goal> memory/goal-ledger.tsv | awk -F'\t' '$3=="FAIL"' | head -1 # when it broke
Flaky predicate: quarantine (status: retired, note "needs a better predicate"), never delete.
CHECK 5: Add a goal with predicate: true and one with predicate: false. ./verify-goals.sh exits 1, flips the second to VIOLATED, and both appear in the ledger. Delete the dummies.
BUILD 6: The Budget
Why: daily cost = ticks × triage + hits × (conductor + worker + verifier). At real prices (triage $0.01, conductor $0.35, worker $0.10, verifier $0.40): a daily janitor is ~$2.56/day; a 15-minute babysitter with Fable in the triage seat is $34/day for the identical outcome. The model that reads the quiet ticks decides the bill.
Create loop/scripts/log-cost.sh:
1#!/usr/bin/env bash2echo -e "$(date -Is)\t$1\t$2" >> "$(dirname "$0")/../memory/usage.log"
Create loop/scripts/cost-check.sh:
1#!/usr/bin/env bash2set -euo pipefail3F="$(dirname "$0")/../memory/usage.log"; touch "$F"; TODAY=$(date +%F)4case "${1:-}" in5 --budget)6 spent=$(awk -F'\t' -v d="$TODAY" '$1 ~ d {s+=$3} END{printf "%.2f",s}' "$F")7 awk -v s="$spent" -v b="$2" 'BEGIN{exit (s>=b)?1:0}' \8 || { echo "spent \$$spent of \$$2" >&2; exit 1; };;9 --report)10 awk -F'\t' -v since="$(date -d '7 days ago' +%F)" \11 '$1>=since{s[$2]+=$3;t+=$3} END{for(k in s) printf " %-10s $%.2f\n",k,s[k]; printf " TOTAL $%.2f\n",t}' "$F";;12esac
Rules that keep it flat: cadence is a cost decision (halving the interval doubles the floor); the quiet tick must cost cents; effort never above high in loops (xhigh is for one-shot reviews; effort is per step, not per run).
CHECK 6: After a week of ticks, ./scripts/cost-check.sh --report matches the formula within noise. Set DAILY_BUDGET_USD to a number you would not mind wasting.
BUILD 7: The Optional Loops (install when their condition appears)
- Quorum (install when dispatch shows Fable wake-ups that produced action: stop). Three cheap models vote; Fable wakes on 2 of 3. Voters never see each other's answers.
1V=02for m in deepseek/deepseek-v4-flash qwen/qwen-3.6 moonshotai/kimi-k2.6; do3 llm -m "openrouter/$m" -s "$(cat triage.md)" < /tmp/signals.txt \4 | grep -q "status: actionable" && V=$((V+1))5done6[ "$V" -ge 2 ] && exec ./conduct.sh || echo "quorum: quiet ($V/3)"
- Ratchet (install when one number matters). Monotonic improvement or self-revert; the metric may not be gamed; the finished floor becomes a standing goal.
1/goal Reduce `npm run lint 2>&1 | grep -c warning` to 0.2Permissions: edit src/; commit per fix; re-measure after every change.3Walls: the number NEVER goes up; revert any change that raises it or breaks a4test; never edit lint config to lower it.5Timebox: stop after 3 attempts with no movement; report survivors.
- Sparring (install when you ship code daily). Builder and breaker, opposed; neither touches the other's output; disputes go to you.
1/loop 1d [breaker] Read yesterday's merged diffs. Write ONE failing test2exposing a real weakness. Commit under tests/sparring/ tagged @sparring.3Fix nothing. Solid code = say so, write nothing.4/loop 1d [builder] If any @sparring test fails, fix the CODE until it passes.5Never edit, weaken, or delete a sparring test; disputes queue for me.
- Compost (install always, weekly). Failures become laws; three proposals max; human signature required.
1/loop 7d Read this week's exhaust: FAILED in STATE.md, fails in trust.tsv,2FAILs in goal-ledger.tsv, PRs closed unmerged. Extract AT MOST 3 proposals:3a new CLAUDE.md law (quote incidents), a skill fix (same failure repeating),4or a standing goal we lacked. Propose only. Clean week = say so.
CHECK 7: Each optional loop has its install condition written next to it in your notes. Installing them speculatively is how systems bloat.
BUILD 8: Ops
Create Makefile:
1tick: ; ./loop/loop.sh2queue: ; @grep -E "review:|queued:|FAILED:|rerouted" loop/memory/STATE.md || echo empty3trust: ; @./loop/scripts/trust-log.sh --render4audit: ; @./loop/scripts/cost-check.sh --report5goals: ; @./loop/verify-goals.sh6clean-worktrees: ; @git worktree list | awk '/wt-/{print $$1}' | xargs -rn1 git worktree remove --force
Cron, when Week 2 starts:
10 7 * * 1-5 cd /path/to/repo/loop && ./loop.sh >> memory/cron.log 2>&1230 7 * * * cd /path/to/repo/loop && ./verify-goals.sh >> memory/cron.log 2>&1
The 30-day trust schedule
Do not skip graduations; each unlocks the next.
Week
Level
You do
Graduate when
1
L1 report
Builds 1-6;
make tick
by hand daily; read everything
3 consecutive runs route exactly as you would have
2
L2 draft
cron on;
make queue
with coffee; reviews feed the ledger
2 skills cross 20 logged runs
3
L3 ship
make audit
vs the formula; best skill goes unattended
1 week, zero interventions
4
L4 grow
compost signs-offs; approve 1 proposed skill; run the delete pass
you removed something and nothing broke
The runbook. What each alarm means and what to do:
Signal
Meaning
Action
exit 2 (reroute)
safeguard router swapped models mid-run
read the checkpoint; re-run item tomorrow; never iterate on the swapped output
stop_reason: refusal
safety classifier declined (HTTP 200, not an error)
official path: fallback to Opus 4.8 via
fallbacks
or middleware; if it recurs on one skill, audit that skill for reasoning-echo or cyber/bio-adjacent phrasing
exit 3 (budget)
daily spend hit the line
make audit
; find which stage grew; fix the effort map, not the budget
ALERT demoted
an established skill dropped below 90%
read its last 3 fails; usually the spec pattern, not the worker
goal VIOLATED
something finished stopped being true
sentinel gives suspects; fix goes through the normal pipeline
maker/checker standoff x2
neither is presumed right
you decide, or run the standoff-breaker (third fresh reviewer, judges evidence, may not split the difference)
verify-goals timeout
predicate too expensive
that is a violation; cheapen the predicate
The Rules (print this)
- Laws, not tips: a number, a never, or a command that checks it.
- The conductor plans, workers execute, neither verifies. --allowedTools enforces it.
- Agents talk in work orders. done_when = spec + stop condition + future invariant.
- Spend effort where the loop branches. Never above high in a loop.
- The quiet tick costs a penny or the loop costs a grand.
- If a shell script couldn't check it, don't write it as a goal.
- Goals graduate; they do not close. verify-goals.sh runs daily, forever.
- Autonomy per skill: 20 runs, 95%, auto. Demotion automatic and loud.
- Two ledgers: trust (workers) and goals (work). Read both with coffee.
- Compute the metabolism before you cron.
- Contract in the repo: acts-alone / queues / wakes-me.
- Never iterate on output from a model you didn't choose.
- The sentinel detects; the pipeline fixes.
- Quorum before waking Fable. Ratchet then weld. Spar daily. Compost weekly.
- One graduation criterion at a time. Every month, delete something.
- From the official docs: max_tokens caps thinking plus text, refusals are HTTP 200, never ask for echoed reasoning, old skills degrade Fable, and fresh-context verifiers beat self-critique. Anthropic says so; the system enforces it.
Closing
Thirty days from now, if you did the checks: one loop ships boring work unattended, a goals directory re-verifies everything you ever finished, two ledgers tell you the truth about your workers and your work, and a weekly compost run proposes the system's own next improvement for your signature.
- The model was never the hard part. The hard part was building something around it that stays honest when you stop watching. That is what you just built.
- Start tonight with the twenty minutes that proves it: BUILD 2's verify.sh, BUILD 3's first tick by hand, and one standing goal for the last thing you finished.
- The first time verify-goals.sh catches a silent regression on something you were sure was done, you will not need convincing about the rest.
Disclaimer
This article was written by using the user's notes and edited by Claude Opus 4.8 max.





