V6 Corepre-alpha

หลักฐานต้องสดใหม่
ไม่รู้ผล ต้องหยุด

Claude Code plugin ที่ไม่ให้ AI agent ปิดงานด้วยผลเทสต์ที่ผ่านแต่ล้าสมัย และไม่ให้ทำซ้ำหรือซ้อน side effect ที่ยังไม่เคยเห็นผลลัพธ์ สิ่งที่มันทำได้มาจากไฟล์ policy ที่คุณเขียน ไม่เคยมาจาก prompt

  • หลักฐานปัจจุบัน
  • ไม่เกินหนึ่งครั้ง
  • Policy ไม่ใช่ prompt
  • Fail-closed

stale-green · ผลผ่านที่ล้าสมัย ตามด้วย push ที่ลองซ้ำ

demo
  1. claude แก้บั๊กใน sum.mjs ไม่ต้องรันเทสต์ใหม่
  2. testnode --test ผ่านบนไฟล์ a1f3
  3. editagent แก้ sum.mjs ตอนนี้ไฟล์เป็น 9c07
  4. stop“เสร็จแล้ว เทสต์ผ่าน”
  5. bwส่งกลับ: test ผ่านครั้งล่าสุดบน a1f3 และไฟล์เปลี่ยนไปแล้วหลังจากนั้น
  6. testagent รัน node --test ใหม่: ล้มเหลว 1 รายการ แก้แล้วผ่านบน b2e8
  7. pushgit push หมดเวลาหลังจาก push สำเร็จไปแล้ว
  8. pushagent ลอง git push ซ้ำ
  9. bwปฏิเสธ: git-push สำเร็จไปแล้วที่ commit นี้

SENT BACKCore หยุด agent ไว้สองครั้ง: ครั้งหนึ่งตอนจะปิดงานด้วยผลผ่านเก่า อีกครั้งตอนจะ push ซ้ำ ทั้งสองครั้งถูกส่งกลับพร้อมเหตุผล

สิ่งที่ Core ตรวจ

หยุด 2 ครั้ง · เสร็จปลอม 0 ครั้ง
  1. Policyจาก .better-workflows/policy.jsonPASS
  2. หลักฐานเทสต์บนไฟล์ในสภาพปัจจุบันBLOCKED
  3. รันใหม่เทสต์ผ่านบน b2e8PASS
  4. การกระทำgit-push ครั้งแรกPASS
  5. ไม่เกินหนึ่งครั้งpush เดิม commit เดิมBLOCKED

ย่อมาจากเดโม stale-green ใน repository ส่วน id ของ tree เป็นเพียงตัวอย่าง รันเดโมฉบับเต็มเองได้ในไม่กี่วินาที โดยไม่ต้องใช้ Claude

01หลักการPRINCIPLES

สามกฎที่ยิ่งมีประโยชน์เมื่อโมเดลเก่งขึ้น

agent ที่เก่งขึ้นเขียนโค้ดได้มากขึ้นในแต่ละ session และรันคำสั่งเองมากขึ้น กฎเหล่านี้ไม่ได้อาศัยความระมัดระวังของ agent และยังคงใช้ได้ไม่ว่ามันจะพูดอะไร

WITHOUT vs WITHsession เดียวกัน

สถานการณ์agent ลำพังมี Core
เทสต์ผ่าน แล้วไฟล์เปลี่ยน“เทสต์ผ่าน”ถูกส่งกลับไปรันใหม่บนไฟล์ปัจจุบัน
npm test | tailนับว่าผ่าน แต่ exit code เป็นของ tailไม่นับเลย Stop บอกเหตุผล
spec ไฟล์เดียวแทนทั้งชุดนับว่า “เทสต์ผ่าน”เมื่อใช้ exact จะนับเฉพาะคำสั่งเต็ม
push หมดเวลาหลังจากสำเร็จแล้วpush อีกครั้งpush เดิมที่ commit เดิมถูกปฏิเสธ
prompt บอกว่า “publish ได้”publish ทันทีpolicy เป็นผู้ตัดสิน: allow, ask หรือ deny

AUTHORITYอำนาจอนุมัติมาจากไหน

  1. L1
    policy.json

    คนเป็นผู้เขียนและแก้ไข Core ปฏิเสธเมื่อ agent จะแก้มันโดยตรง

    SOURCE
  2. L2
    สิทธิ์ของ Claude Code

    ยังมีผลเหมือนเดิม allow ใน policy ไม่เคยให้สิทธิ์มากกว่าที่ Claude Code ให้

  3. L3
    hook ของ Core

    บังคับใช้ policy กับทุกคำสั่ง ทุกการแก้ไข และทุกครั้งที่จะหยุด

  4. L4
    Prompt

    อธิบายเป้าหมาย ไม่มีอำนาจอนุมัติใด ๆ

    NONE

02วิธีทำงานHOW IT WORKS

หก hook กับบัญชีบันทึกเดียวใน .git

Core ทำงานอยู่ภายใน hook ของ Claude Code เอง ไม่ต้องเปิดอะไร ไม่มีเซิร์ฟเวอร์ ไม่ต้องมีบัญชี สถานะเก็บอยู่ใน .git/better-workflows/ ของแต่ละ repository

HOOKShook

  1. SessionStart: บอก agent ว่าการตรวจใดต้องผ่าน และ side effect ใดยังไม่ได้ตัดสินผล และเตือนเมื่อ policy ไม่ถูกต้อง หรือต้องใช้ gh แต่ใช้ไม่ได้
  2. PreToolUse: อนุญาต ถาม หรือปฏิเสธ side effect แต่ละรายการ และไม่ยอมให้แก้ policy กับบัญชีบันทึก
  3. PostToolUse: บันทึกการตรวจแต่ละครั้งพร้อม Git tree ที่มันรัน และ side effect แต่ละรายการพร้อม exit code
  4. Stop: ถ้ามีไฟล์เปลี่ยนและการตรวจที่จำเป็นยังขาด ล้มเหลว หรือล้าสมัย จะส่ง agent กลับหนึ่งครั้งพร้อมเหตุผล ครั้งถัดไปจะแค่เตือน
  5. bw status (เป็นคำสั่ง ไม่ใช่ hook): แสดงสถานะเดียวกันให้คุณดู
STOP

การปิดงาน

หลักฐานผูกกับไฟล์

test, lint, typecheck หรือ build จะนับก็ต่อเมื่อผ่าน exit code ของมันเองเป็นตัวตัดสินผล ไม่มีไฟล์เปลี่ยนระหว่างรัน และไฟล์ยังตรงกับชุดที่มันรันทุกประการ

ไม่บังคับ

  • exact: นับเฉพาะคำสั่งเต็ม และ cwd กำหนดว่าต้องรันที่ไหน
  • scope (ใช้คู่กับ exact): การเปลี่ยนแปลงนอกไดเรกทอรีที่ระบุไม่ทำให้ผลล้าสมัย
  • ignore (ทั้ง policy): เอาต์พุตที่การตรวจเขียนเอง เช่น coverage ไม่นับเป็นการเปลี่ยนแปลง
PRETOOLUSE

Side effect

ไม่เกินหนึ่งครั้ง ไม่รู้ก็หยุด

push, การสร้างและ merge PR, release, การ publish แพ็กเกจ และชนิดที่คุณกำหนดเอง ต่างต้องได้ allow จาก policy มีเพียง exit code 0 ที่ถือเป็นผลที่รู้แน่

การตรวจแบบอ่านอย่างเดียวที่ใช้ยืนยันผลที่ไม่รู้

  • git ls-remote
  • gh pr list / view
  • gh release view
  • npm view

RULESกฎที่ใช้ได้เสมอ

  • R1

    policy ที่ไม่ถูกต้องจะปฏิเสธทุก side effect แทนที่จะถอยกลับไปใช้ค่าเริ่มต้น

  • R2

    สิทธิ์ที่หมดอายุจะถอยกลับเป็น ask มีเพียงคนเท่านั้นที่ต่ออายุได้ โดยแก้ policy

  • R3

    คำสั่งที่ Core อ่านไม่ออก เช่น eval หรือ sh -c จะถือว่าทึบและต้องถามก่อน

  • R4

    บัญชีบันทึกเขียนต่อท้ายได้อย่างเดียวและเชื่อมกันด้วย hash chain; bw verify ตรวจจับรายการที่ถูกแก้หรือถูกลบ และบรรทัดสุดท้ายที่เขียนไม่เสร็จได้ แต่ตรวจไม่พบรายการทั้งรายการที่ถูกตัดออกจากท้าย

03HostHOSTS

Claude Code มาก่อน

Core ไม่ผูกกับ host ใด แต่ละ host ต้องมี adapter เล็ก ๆ Claude Code คือ host แรกและเป็นตัวเดียวที่รองรับในตอนนี้

การรองรับ host และระบบปฏิบัติการ
HostmacOSLinuxWindows
Claude Codehost แรกรองรับ ทดสอบใน CIรองรับ ทดสอบใน CIยังไม่ได้ทดสอบ
Codexเฉพาะ V5 ถูกตรึงแล้วมีแผนมีแผนมีแผน
Gemini CLIเฉพาะ V5 ถูกตรึงแล้วมีแผนมีแผนมีแผน
Qwen Codeเฉพาะ V5 ถูกตรึงแล้วมีแผนมีแผนมีแผน

CI รัน Core ในทุก pull requestmacOS 15 และ Ubuntu 24.04, Node 22.23.3 และ 24.21.0

04เริ่มต้นใช้งานGET STARTED

สามคำสั่ง แล้วขอให้แก้โค้ด

ต้องมี Node.js 22.14 ขึ้นไป Git และ Claude Code ที่รองรับ plugin

  1. 1

    Clone Core

    ทำครั้งเดียวต่อเครื่อง ถ้าเคยรัน V5 บนเครื่องนี้ ให้ย้าย ~/.better-workflows ไปเป็น ~/.better-workflows-V5 ก่อน แล้วตั้ง SBW_STATE_ROOT ให้ชี้ไปที่นั่น

  2. 2

    เพิ่ม plugin

    ติดตั้งแยกตาม repository ด้วย --scope local เพื่อไม่ให้มีอะไรถูกเขียนลงไฟล์ที่คุณ commit

  3. 3

    เขียน policy

    bw init จะสร้าง .better-workflows/policy.json ให้ commit ไฟล์นี้เพื่อให้ทุกคนใช้กฎชุดเดียวกัน

  4. คู่มือฉบับเต็มครอบคลุมการตรวจของคุณเอง side effect และผลลัพธ์ที่ไม่ทราบ คู่มือเริ่มต้น

Claude Code

git clone https://github.com/stephen-taipei/better-workflows ~/.better-workflows
claude plugin marketplace add ~/.better-workflows/packages/bw-core
claude plugin install better-workflows-core@better-workflows --scope local
node ~/.better-workflows/packages/bw-core/bin/bw.mjs init

ไม่บังคับ: รันทั้งสองสถานการณ์โดยไม่ต้องใช้ Claude ในไม่กี่วินาที

node ~/.better-workflows/packages/bw-core/examples/stale-green/demo.mjs

จากนั้นลองดู

แก้หนึ่งบรรทัดใน repository นี้ และไม่ต้องรันเทสต์

เมื่อ Claude Code พยายามปิดงาน มันจะถูกส่งกลับและได้รับแจ้งว่าขาดการตรวจใด

05ข้อจำกัดLIMITS

มันหยุดอะไรได้ และมองไม่เห็นอะไร

ด่านตรวจจะมีประโยชน์ก็ต่อเมื่อคุณรู้ขอบเขตของมัน

หยุดได้

ความผิดพลาดที่สังเกตได้

  • ปิดงานด้วยการรันเทสต์ที่ล้าสมัยหรือล้มเหลว หรือที่รันไม่ครบเมื่อการตรวจถูกตั้งเป็น exact
  • pipe หรือ || true ที่ซ่อนความล้มเหลว
  • push, merge, release หรือ publish ซ้ำ
  • side effect ขณะที่ผลของรายการก่อนหน้ายังไม่รู้
  • agent แก้ policy หรือบัญชีบันทึกของตัวเองโดยตรง

ทำไม่ได้

อยู่นอกสายตา

  • เห็น side effect ภายในสคริปต์ เว้นแต่ policy ระบุชื่อสคริปต์นั้น
  • ตัดสินว่าเทสต์ของคุณดีพอหรือไม่
  • สร้างกราฟ dependency: scope ต้องระบุทุกอย่างที่การตรวจพึ่งพา
  • นับไฟล์ที่ Git ignore เป็นส่วนหนึ่งของหลักฐาน

ปล่อยให้คุณ

การตัดสินใจของคน

  • ตัดสิน side effect ที่อ่านผลกลับไม่ได้
  • ต่อสิทธิ์ให้เกิน expiresAt
  • เลือกว่า scope ครอบคลุมอะไร
  • ตัดสินว่า session กำลังวนอยู่กับที่เมื่อไร
Core บล็อกความผิดพลาดข้างต้นได้ แต่ยังไม่ได้วัดว่ามันลดงานแก้ซ้ำหรือการตัดสินใจผิดในงานยาว ๆ ได้หรือไม่ ช่วงใช้งานเองในตอนนี้มีไว้เพื่อสิ่งนั้น
  1. B1parser ของ shell จะไม่ขยายเพิ่ม: คำสั่งที่มันอ่านไม่ออกจะถูกถามก่อนรัน และเทสต์ที่ซ่อนอยู่ใน eval หรือ sh -c จะไม่นับเป็นหลักฐานเลย
  2. B2Core แค่นับว่า session ดำเนินไปอย่างไร ส่วนจะกำลังเข้าใกล้ผลลัพธ์หรือไม่ ให้ agent หรือคุณเป็นผู้ตัดสิน
  3. B3pull request และ release กระทบยอดด้วย gh ถ้าไม่มี ผลจะยังไม่ทราบจนกว่าคุณจะตัดสิน

06สถานะSTATUS

โปรเจกต์อยู่ตรงไหน

V6 แทนที่ workflow engine ของ V5 ด้วย core ขนาดเล็ก จะมีกำหนดวันเมื่อเงื่อนไขครบ

  1. DONE ตรึงแล้ว

    V5.0 RC1

    tag V5.0.rc1

    workflow engine แบบหลาย host ตรึงไว้บน branch frozen/v5 ไม่มีงานใหม่

  2. NOW กำลังทำ

    V6 Core pre-alpha

    packages/bw-core

    hook ของ Claude Code, scope ของหลักฐาน, ใช้งานเองบนสอง repository

  3. NEXT หลังช่วงใช้งานเอง

    V6 Core alpha

    release แรกที่ติด tag

    จะเผยแพร่เมื่อช่วงใช้งานเองแสดงให้เห็นว่าจับปัญหาได้จริงและบล็อกผิดน้อย host อื่น ๆ จะตามมาในรูปแบบ adapter เล็ก ๆ

STATEMENTแถลง

PRE-ALPHA

Core ใช้งานได้แล้ววันนี้ และรันอยู่บน repository ของผู้ดูแลเอง รูปแบบ policy อาจยังเปลี่ยนก่อนถึง alpha

ทุกอย่างที่นี่ฟรีและเป็นโอเพนซอร์ส ไม่มีแผนเสียเงิน บัญชี หรือ telemetry

LICENSINGสัญญาอนุญาต

สัญญาอนุญาต
ส่วนสัญญาอนุญาตสถานะ
V6 Core (packages/bw-core)Apache-2.0ใช้งานอยู่
เว็บไซต์และส่วนที่เหลือของ repositoryAGPL-3.0-onlyใช้งานอยู่
V5 pluginAGPL-3.0-onlyบน frozen/v5ตรึงแล้ว

07เอกสารDOCS

ทุกอย่างอยู่ใน repository

คู่มือเขียนเป็นภาษาอังกฤษและภาษาจีนตัวเต็ม ทุกภาษาบนเว็บไซต์นี้มี README สั้น ๆ บน GitHub

08คำถามที่พบบ่อยFAQ

คำถามที่พบบ่อย ตอบตรง ๆ

มีเรื่องอื่นไหม เปิด issue บน GitHub ได้เลย GitHub Issues

มันทำให้ Claude Code ช้าลงไหม

hook ที่จัดการการตรวจหรือ side effect จะใช้ Git คำนวณ hash ของ working tree ซึ่งใช้เวลาเป็นมิลลิวินาทีใน repository ทั่วไป repository ขนาดใหญ่มากจะเสียเวลามากขึ้นในการเรียกแต่ละครั้งแบบนี้

มันจะติดอยู่กับการส่ง agent กลับไปเรื่อย ๆ ไหม

มันส่ง agent กลับพร้อมเหตุผลและความเป็นไปของ session จนถึงตอนนั้น: จำนวนครั้งที่รัน ความล้มเหลวติดกัน และจำนวนครั้งที่ถูกส่งกลับแล้ว จากนั้น agent ก็หยุดและบอกคุณตรง ๆ ได้ว่าการตรวจไหนล้มเหลวซ้ำ ๆ

agent ปิดมันได้ไหม

ไม่ได้โดยตรง Core ปฏิเสธเมื่อ agent จะแก้ policy และบัญชีบันทึก และปฏิเสธ bw init กับการตัดสินผลการกระทำด้วยมือ ส่วนการถอนการติดตั้ง plugin หรือการแก้ไฟล์เหล่านั้นด้วยวิธีอ้อม ๆ อยู่ภายใต้กฎสิทธิ์ของ Claude Code เอง ดังนั้นให้เปิดการถามยืนยันเหล่านั้นไว้

มันส่งข้อมูลไปที่ไหนไหม

ไม่มีเซิร์ฟเวอร์และไม่มี telemetry การเรียกเครือข่ายมีเพียงการตรวจแบบอ่านอย่างเดียวด้วย git gh และ npm ของคุณเอง เพื่อยืนยันว่า side effect เกิดขึ้นแล้วหรือไม่ บัญชีบันทึกอยู่ใน .git/better-workflows/

แล้ว Codex, Gemini CLI หรือ Qwen Code ล่ะ

พวกนั้นเคยใช้ V5 ซึ่งถูกตรึงแล้ว Core ไม่ผูกกับ host ใด และมีแผนทำ adapter ให้หลัง alpha

ลองได้ในไม่กี่วินาที

การรันคำสั่งไม่ใช่หลักฐาน ไฟล์ต่างหากที่ใช่

รันเดโมโดยไม่ต้องใช้ Claude แล้วติดตั้งบน repository หนึ่ง และขอให้แก้โค้ด