V6 Corepre-alpha

Doar dovezi proaspete.
Necunoscut? Oprire.

Un plugin pentru Claude Code care împiedică un agent AI să încheie pe baza unui test verde depășit și să repete sau să suprapună efecte secundare al căror rezultat nu l-a văzut niciodată. Ce are voie să facă vine dintr-un fișier policy scris de tine, niciodată din prompt.

  • Dovezi actuale
  • Cel mult o dată
  • Policy, nu prompt
  • Fail-closed

stale-green · un verde depășit, apoi un push reîncercat

demo
  1. claude repară bugul din sum.mjs, nu e nevoie să rulezi din nou testele
  2. testnode --test trece pe fișierele a1f3
  3. editagentul modifică sum.mjs, fișierele sunt acum 9c07
  4. stop„Gata. Testele trec.”
  5. bwTrimis înapoi: test a trecut ultima dată pe a1f3; fișierele s-au schimbat între timp.
  6. testagentul rulează din nou node --test: 1 eșec, îl repară, trece pe b2e8
  7. pushgit push expiră după ce push-ul a ajuns deja
  8. pushagentul reîncearcă git push
  9. bwRefuzat: git-push a reușit deja la acest commit.

SENT BACKCore a oprit agentul de două ori: o dată când voia să încheie pe baza unei rulări reușite vechi, o dată când voia să facă din nou push. De ambele ori a fost trimis înapoi cu motivul.

Ce a verificat Core

2 OPRIRI · 0 FINALIZĂRI FALSE
  1. Policydin .better-workflows/policy.jsonPASS
  2. Dovezitest pe fișierele așa cum sunt acumBLOCKED
  3. Rerularetestul trece pe b2e8PASS
  4. Acțiunegit-push, prima datăPASS
  5. Cel mult o datăacelași push, același commitBLOCKED

Scurtat din demo-ul stale-green din repository; id-urile de tree sunt ilustrative. Rulează singur demo-ul complet în câteva secunde, fără Claude.

01PrincipiiPRINCIPLES

Trei reguli care devin mai utile pe măsură ce modelele devin mai puternice.

Un agent mai puternic scrie mai mult cod pe sesiune și rulează mai multe comenzi singur. Aceste reguli nu depind de prudența agentului; ele rămân valabile orice ar spune.

WITHOUT vs WITHaceeași sesiune

SituațieDoar agentulCu Core
Testele au trecut, apoi un fișier s-a schimbat„Testele trec.”Trimis înapoi să ruleze din nou pe fișierele actuale.
npm test | tailSocotit verde; codul de ieșire îi aparține lui tail.Nu contează niciodată; Stop spune de ce.
Un singur fișier spec în loc de suităSocotit „testele trec”.Cu exact, contează doar comanda completă.
Push-ul expiră după ce a ajunsFace push din nou.Același push la același commit este refuzat.
Promptul spune „poți publica”Publică.Decide policy-ul: allow, ask sau deny.

AUTHORITYde unde vine autoritatea

  1. L1
    policy.json

    Scris și modificat de o persoană. Core refuză modificările directe ale agentului asupra lui.

    SURSĂ
  2. L2
    Permisiunile Claude Code

    Rămân valabile. allow din policy nu acordă niciodată mai mult decât ar acorda Claude Code.

  3. L3
    Hooks Core

    Aplică policy-ul la fiecare comandă, modificare și oprire.

  4. L4
    Promptul

    Descrie scopul. Nu poartă nicio autoritate.

    NIMIC

02Cum funcționeazăHOW IT WORKS

Șase hooks, un registru în .git.

Core rulează în hooks-urile proprii ale Claude Code. Nimic de pornit, fără server, fără cont; starea stă în .git/better-workflows/ din fiecare repository.

HOOKShooks-urile

  1. SessionStart: îi spune agentului ce verificări trebuie să treacă și ce efecte secundare sunt încă neclarificate și avertizează dacă policy-ul este invalid sau dacă gh este necesar, dar inutilizabil.
  2. PreToolUse: permite, întreabă sau refuză fiecare efect secundar și refuză modificările la policy și la registru.
  3. PostToolUse: înregistrează fiecare verificare cu tree-ul Git pe care a rulat și fiecare efect secundar cu codul său de ieșire.
  4. Stop: dacă s-au schimbat fișiere și o verificare obligatorie lipsește, a eșuat sau este depășită, trimite agentul înapoi o dată, cu motivul; data următoare doar avertizează.
  5. bw status (o comandă, nu un hook): îți arată ție aceeași stare.
STOP

Încheierea

dovezi legate de fișiere

Un test, lint, typecheck sau build contează doar dacă a trecut, propriul cod de ieșire a decis rezultatul, niciun fișier nu s-a schimbat cât a rulat, iar fișierele sunt încă exact cele pe care a rulat.

Opțional

  • exact: contează doar comanda completă, iar cwd stabilește unde trebuie să ruleze.
  • scope (cu exact): o schimbare în afara directoarelor numite lasă rezultatul valabil.
  • ignore (întregul policy): ieșirea scrisă de o verificare, cum ar fi coverage, nu este socotită schimbare.
PRETOOLUSE

Efecte secundare

cel mult o dată, necunoscutul oprește

Push-urile, crearea și merge-ul de PR-uri, release-urile, publicarea de pachete și propriile tale tipuri personalizate au nevoie fiecare de allow din policy. Doar codul de ieșire 0 este un rezultat cunoscut.

Verificări read-only folosite pentru a clarifica un rezultat necunoscut

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

RULESreguli care se mențin

  • R1

    Un policy invalid refuză orice efect secundar în loc să revină la valori implicite.

  • R2

    O permisiune expirată revine la ask. Doar o persoană o prelungește, modificând policy-ul.

  • R3

    Comenzile pe care Core nu le poate citi, cum ar fi eval sau sh -c, sunt tratate ca opace și se cere confirmare.

  • R4

    Registrul este append-only și înlănțuit prin hash; bw verify detectează intrările modificate sau eliminate și o ultimă linie scrisă pe jumătate, dar nu și intrări întregi tăiate de la final.

03GazdeHOSTS

Întâi Claude Code.

Core este neutru față de gazdă; fiecare gazdă are nevoie de un mic adaptor. Claude Code este prima și singura suportată astăzi.

Suport pentru gazde și sisteme de operare
GazdămacOSLinuxWindows
Claude CodePrima gazdăSuportat, testat în CISuportat, testat în CINetestat
CodexDoar V5, înghețatPlanificatPlanificatPlanificat
Gemini CLIDoar V5, înghețatPlanificatPlanificatPlanificat
Qwen CodeDoar V5, înghețatPlanificatPlanificatPlanificat

CI rulează Core la fiecare pull request.macOS 15 și Ubuntu 24.04, Node 22.23.3 și 24.21.0.

04Primii pașiGET STARTED

Trei comenzi, apoi cere o modificare.

Necesită Node.js 22.14 sau mai nou, Git și Claude Code cu suport pentru pluginuri.

  1. 1

    Clonează Core

    O dată pe mașină. Dacă ai rulat V5 aici, mută mai întâi ~/.better-workflows în ~/.better-workflows-V5 și setează SBW_STATE_ROOT să indice spre el.

  2. 2

    Adaugă pluginul

    Instalează-l per repository cu --scope local, ca să nu se scrie nimic în fișierele pe care le faci commit.

  3. 3

    Scrie un policy

    bw init scrie .better-workflows/policy.json. Fă-i commit, ca toată lumea să aibă aceleași reguli.

  4. Ghidul complet acoperă propriile verificări, efectele secundare și rezultatele necunoscute. Ghid de început

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

Opțional: rulează ambele scenarii fără Claude, în câteva secunde.

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

Apoi încearcă

Schimbă o linie în acest repository și nu rula testele.

Când Claude Code încearcă să încheie, este trimis înapoi și i se spune ce verificare lipsește.

05LimiteLIMITS

Ce oprește și ce nu poate vedea.

O poartă e utilă doar dacă îi cunoști marginile.

Oprește

Greșeli observabile

  • Încheierea pe baza unei rulări de teste depășite sau eșuate, ori a uneia parțiale când verificarea este marcată exact
  • Un pipe sau || true care ascunde un eșec
  • Un push, merge, release sau publish repetat
  • Efecte secundare cât timp unul anterior este necunoscut
  • Agentul care își modifică direct policy-ul sau registrul

Nu

În afara câmpului său vizual

  • Vede efectele secundare din interiorul unui script, decât dacă policy-ul numește acel script
  • Judecă dacă testele tale sunt suficient de bune
  • Construiește un graf de dependențe: un scope trebuie să numească tot ce folosește o verificare
  • Socotește fișierele ignorate de Git ca parte din dovezi

Îți lasă ție

Decizii luate de o persoană

  • Clarificarea unui efect secundar al cărui rezultat nu poate fi citit înapoi
  • Prelungirea unei permisiuni dincolo de expiresAt
  • Alegerea a ceea ce acoperă un scope
  • Hotărârea momentului în care o sesiune se învârte în cerc
Core blochează greșelile de mai sus. Nu s-a măsurat dacă reduce munca refăcută sau deciziile greșite în sarcinile lungi; pentru asta este actuala perioadă de utilizare proprie.
  1. B1Parserul de shell nu crește: pentru o comandă pe care nu o poate citi se cere confirmare înainte să ruleze, iar un test ascuns în eval sau sh -c nu contează niciodată ca dovadă.
  2. B2Core doar numără cum merge o sesiune. Dacă aceasta converge, judecă agentul sau tu.
  3. B3Pull request-urile și release-urile sunt reconciliate cu gh; fără el, rămân necunoscute până le clarifici tu.

06StadiuSTATUS

Unde se află proiectul.

V6 înlocuiește motorul de workflow din V5 cu un nucleu mic. Datele vin atunci când condițiile sunt îndeplinite.

  1. DONE Înghețat

    V5.0 RC1

    tag V5.0.rc1

    Motor de workflow pentru mai multe gazde. Înghețat pe branch-ul frozen/v5; nicio dezvoltare nouă.

  2. NOW În lucru

    V6 Core pre-alpha

    packages/bw-core

    Hooks Claude Code, scope pentru dovezi, utilizare proprie pe două repository-uri.

  3. NEXT După utilizarea proprie

    V6 Core alpha

    primul release cu tag

    Publicat după ce perioada de utilizare proprie arată opriri reale și puține blocări false. Mai multe gazde urmează ca adaptoare mici.

STATEMENTdeclarație

PRE-ALPHA

Core poate fi folosit astăzi și rulează pe repository-urile autorului. Formatul policy-ului se poate încă schimba înainte de alpha.

Totul aici este gratuit și open source. Nu există plan plătit, cont sau telemetrie.

LICENSINGlicențe

licențe
ComponentăLicențăStare
V6 Core (packages/bw-core)Apache-2.0activ
Site-ul și restul repository-uluiAGPL-3.0-onlyactiv
Pluginul V5AGPL-3.0-onlype frozen/v5înghețat

07DocumentațieDOCS

Totul este în repository.

Ghidurile sunt scrise în engleză și chineză tradițională. Fiecare limbă de pe acest site are un README scurt pe GitHub.

08ÎntrebăriFAQ

Întrebări frecvente, răspunsuri directe.

Altceva? Deschide un issue pe GitHub. GitHub Issues

Încetinește Claude Code?

Hook-urile care tratează o verificare sau un efect secundar calculează hash-ul arborelui de lucru cu Git, ceea ce durează milisecunde într-un repository obișnuit. Repository-urile foarte mari plătesc mai mult la fiecare astfel de apel.

Se poate bloca trimițând agentul înapoi la nesfârșit?

Trimite agentul înapoi cu motivul și cu cum a decurs sesiunea până acum: rulări, eșecuri consecutive, de câte ori a fost deja trimis înapoi. Agentul se poate opri apoi și îți poate spune clar ce verificare tot eșuează.

Îl poate dezactiva agentul?

Nu direct. Core refuză modificările agentului la policy și la registru și refuză bw init și clarificarea manuală a unei acțiuni. Dezinstalarea pluginului sau modificarea acelor fișiere pe căi ocolite țin de regulile de permisiuni proprii ale Claude Code, așa că păstrează acele confirmări activate.

Trimite ceva undeva?

Nu există server și nici telemetrie. Singurele apeluri de rețea sunt verificări doar în citire cu propriile tale git, gh și npm, pentru a confirma dacă un efect secundar a avut loc. Registrul rămâne în .git/better-workflows/.

Ce se întâmplă cu Codex, Gemini CLI sau Qwen Code?

Acestea au rulat V5, care este înghețat. Core este neutru față de gazdă, iar adaptoarele pentru ele sunt planificate după alpha.

Încearcă în câteva secunde

Rularea unei comenzi nu e o dovadă. Fișierele sunt.

Rulează demo-ul fără Claude, apoi instalează-l pe un repository și cere o modificare.