V6 Corepre-alpha

Kun friske beviser.
Ukendt betyder stop.

Et plugin til Claude Code, der forhindrer en AI-agent i at afslutte på en forældet grøn test og i at gentage eller stable sideeffekter, hvis resultat den aldrig så. Hvad den må, bestemmes af en policy-fil, du selv skriver, aldrig af prompten.

  • Aktuel evidens
  • Højst én gang
  • Policy, ikke prompt
  • Fail-closed

stale-green · en forældet grøn test, derefter et gentaget push

demo
  1. claude ret fejlen i sum.mjs, du behøver ikke køre testene igen
  2. testnode --test består på filerne a1f3
  3. editagenten redigerer sum.mjs, filerne er nu 9c07
  4. stop»Færdig. Testene består.«
  5. bwSendt tilbage: test bestod sidst på a1f3; filerne er ændret siden.
  6. testagenten kører node --test igen: 1 fejl, retter den, består på b2e8
  7. pushgit push får timeout, efter at pushet er gået igennem
  8. pushagenten prøver git push igen
  9. bwAfvist: git-push lykkedes allerede på dette commit.

SENT BACKCore stoppede agenten to gange: én gang fra at afslutte på en gammel bestået kørsel, én gang fra at pushe igen. Begge gange blev den sendt tilbage med begrundelsen.

Hvad Core kontrollerede

2 STOP · 0 FALSKE FÆRDIGMELDINGER
  1. Policyfra .better-workflows/policy.jsonPASS
  2. Evidenstest på filerne, som de er nuBLOCKED
  3. Ny kørseltesten består på b2e8PASS
  4. Handlinggit-push, første gangPASS
  5. Højst én gangsamme push, samme commitBLOCKED

Forkortet fra stale-green-demoen i repositoryet; tree-id'erne er kun til illustration. Kør selv hele demoen på få sekunder, uden Claude.

01PrincipperPRINCIPLES

Tre regler, der bliver mere nyttige, jo stærkere modellerne bliver.

En stærkere agent skriver mere kode pr. session og kører flere kommandoer på egen hånd. Reglerne afhænger ikke af, at agenten er omhyggelig; de gælder, uanset hvad den siger.

WITHOUT vs WITHden samme session

SituationAgenten aleneMed Core
Testene bestod, så ændrede en fil sig»Testene består.«Sendt tilbage for at køre igen på de aktuelle filer.
npm test | tailTælles som grøn; exitkoden tilhører tail.Tæller aldrig; Stop siger hvorfor.
Én spec-fil i stedet for hele suitenTælles som »testene består«.Med exact tæller kun hele kommandoen.
Push får timeout efter at være gået igennemPusher igen.Samme push på samme commit afvises.
Prompten siger »du må publicere«Publicerer.Policyen afgør: allow, ask eller deny.

AUTHORITYhvor autoriteten kommer fra

  1. L1
    policy.json

    Skrevet og ændret af et menneske. Core afviser agentens direkte redigeringer af den.

    KILDE
  2. L2
    Tilladelser i Claude Code

    Gælder stadig. allow i policyen giver aldrig mere, end Claude Code ville.

  3. L3
    Core-hooks

    Håndhæver policyen ved hver kommando, redigering og afslutning.

  4. L4
    Prompten

    Beskriver målet. Har ingen autoritet.

    INGEN

02Sådan virker detHOW IT WORKS

Seks hooks, én logbog i .git.

Core kører i Claude Codes egne hooks. Intet at starte, ingen server, ingen konto; tilstanden ligger i .git/better-workflows/ i hvert repository.

HOOKShooksene

  1. SessionStart: fortæller agenten, hvilke kontroller der skal bestås, og hvilke sideeffekter der er uafgjorte, og advarer, hvis policyen er ugyldig, eller hvis gh er nødvendig, men ikke kan bruges.
  2. PreToolUse: tillader, spørger om eller afviser hver sideeffekt og afviser ændringer af policyen og logbogen.
  3. PostToolUse: registrerer hver kontrol med det Git-tree, den kørte på, og hver sideeffekt med dens exitkode.
  4. Stop: hvis filer er ændret, og en påkrævet kontrol mangler, er fejlet eller er forældet, sender den agenten tilbage én gang med begrundelsen; næste gang advarer den kun.
  5. bw status (en kommando, ikke en hook): viser dig den samme tilstand.
STOP

Afslutning

evidens bundet til filerne

En test, lint, typecheck eller build tæller kun, hvis den bestod, dens egen exitkode afgjorde linjens resultat, ingen fil ændrede sig, mens den kørte, og filerne stadig er præcis dem, den kørte på.

Valgfrit

  • exact: kun hele kommandoen tæller, og cwd angiver, hvor den skal køre.
  • scope (med exact): en ændring uden for de navngivne mapper lader resultatet forblive friskt.
  • ignore (hele policyen): output, som en kontrol skriver, f.eks. coverage, tælles ikke som en ændring.
PRETOOLUSE

Sideeffekter

højst én gang, ukendt stopper

Push, oprettelse og merge af PR'er, releases, publicering af pakker og dine egne brugerdefinerede typer kræver hver især allow fra policyen. Kun exitkode 0 er et kendt resultat.

Skrivebeskyttede kontroller, der bruges til at afgøre et ukendt resultat

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

RULESregler, der holder

  • R1

    En ugyldig policy afviser alle sideeffekter i stedet for at falde tilbage på standardværdier.

  • R2

    En udløbet tilladelse falder tilbage til ask. Kun et menneske forlænger den, ved at redigere policyen.

  • R3

    Kommandoer, som Core ikke kan læse, f.eks. eval eller sh -c, behandles som uigennemsigtige, og der spørges om dem.

  • R4

    Logbogen er append-only og hash-kædet; bw verify opdager redigerede eller fjernede poster og en halvt skrevet sidste linje, men ikke hele poster, der er skåret af i slutningen.

03VærterHOSTS

Claude Code først.

Core er værtsneutral; hver vært kræver en lille adapter. Claude Code er den første og i dag den eneste understøttede.

Understøttelse af værter og styresystemer
VærtmacOSLinuxWindows
Claude CodeFørste værtUnderstøttet, testet i CIUnderstøttet, testet i CIIkke testet
CodexKun V5, frossetPlanlagtPlanlagtPlanlagt
Gemini CLIKun V5, frossetPlanlagtPlanlagtPlanlagt
Qwen CodeKun V5, frossetPlanlagtPlanlagtPlanlagt

CI kører Core på hver pull request.macOS 15 og Ubuntu 24.04, Node 22.23.3 og 24.21.0.

04Kom i gangGET STARTED

Tre kommandoer, og bed så om en ændring.

Kræver Node.js 22.14 eller nyere, Git og Claude Code med plugin-understøttelse.

  1. 1

    Klon Core

    Én gang pr. maskine. Hvis du har kørt V5 her, så flyt først ~/.better-workflows til ~/.better-workflows-V5 og peg SBW_STATE_ROOT på den.

  2. 2

    Tilføj pluginet

    Installér det pr. repository med --scope local, så intet skrives i filer, du committer.

  3. 3

    Skriv en policy

    bw init skriver .better-workflows/policy.json. Commit den, så alle får de samme regler.

  4. Den fulde gennemgang dækker dine egne kontroller, sideeffekter og ukendte resultater. Kom godt i gang

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

Valgfrit: kør begge scenarier uden Claude, på få sekunder.

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

Prøv det så

Ændr én linje i dette repository, og kør ikke testene.

Når Claude Code forsøger at afslutte, bliver den sendt tilbage og får at vide, hvilken kontrol der mangler.

05BegrænsningerLIMITS

Hvad den stopper, og hvad den ikke kan se.

En gate er kun nyttig, hvis du kender dens grænser.

Stopper

Observerbare fejl

  • At afslutte på en forældet eller fejlet testkørsel, eller på en delvis, når kontrollen er markeret som exact
  • Et pipe eller || true, der skjuler en fejl
  • Et gentaget push, merge, release eller publicering
  • Sideeffekter, mens en tidligere stadig er ukendt
  • At agenten redigerer sin policy eller logbogen direkte

Gør ikke

Uden for dens synsfelt

  • Se sideeffekter inde i et script, medmindre policyen navngiver scriptet
  • Vurdere, om dine tests er gode nok
  • Bygge en afhængighedsgraf: et scope skal navngive alt, hvad en kontrol afhænger af
  • Tælle filer, som Git ignorerer, med i evidensen

Overlader til dig

Beslutninger, et menneske træffer

  • At afgøre en sideeffekt, hvis resultat ikke kan læses tilbage
  • At forlænge en tilladelse ud over dens expiresAt
  • At vælge, hvad et scope dækker
  • At afgøre, hvornår en session kører i ring
Core blokerer fejlene ovenfor. Det er ikke målt, om den mindsker omarbejde eller forkerte beslutninger i lange opgaver; det er det, den nuværende periode med egen brug skal vise.
  1. B1Shell-parseren vokser ikke: der spørges om en kommando, den ikke kan læse, før den kører, og en test gemt inde i eval eller sh -c tæller aldrig som evidens.
  2. B2Core tæller kun, hvordan en session forløber. Om den konvergerer, er op til agenten eller dig at vurdere.
  3. B3Pull requests og releases afstemmes med gh; uden det forbliver de ukendte, indtil du afgør dem.

06StatusSTATUS

Hvor projektet står.

V6 erstatter V5's workflow-motor med en lille kerne. Datoer kommer, når de er nået.

  1. DONE Frosset

    V5.0 RC1

    tag V5.0.rc1

    Workflow-motor til flere værter. Frosset på branchen frozen/v5; intet nyt arbejde.

  2. NOW I gang

    V6 Core pre-alpha

    packages/bw-core

    Hooks i Claude Code, scope for evidens, egen brug på to repositories.

  3. NEXT Efter egen brug

    V6 Core alpha

    første taggede release

    Udgives, når perioden med egen brug viser reelle fangster og få fejlagtige blokeringer. Flere værter følger som små adaptere.

STATEMENTerklæring

PRE-ALPHA

Core kan bruges i dag og kører på maintainerens egne repositories. Policy-formatet kan stadig ændre sig før alpha.

Alt her er gratis og open source. Der er ingen betalt plan, konto eller telemetri.

LICENSINGlicenser

licenser
DelLicensTilstand
V6 Core (packages/bw-core)Apache-2.0aktiv
Websted og resten af repositoryetAGPL-3.0-onlyaktiv
V5-pluginAGPL-3.0-onlypå frozen/v5frosset

07DokumentationDOCS

Alt ligger i repositoryet.

Vejledningerne er skrevet på engelsk og traditionelt kinesisk. Hvert sprog på dette websted har en kort README på GitHub.

08FAQFAQ

Almindelige spørgsmål, direkte svar.

Noget andet? Opret et issue på GitHub. GitHub Issues

Gør den Claude Code langsommere?

Hooks, der håndterer en kontrol eller en sideeffekt, hasher arbejdstræet med Git, hvilket tager millisekunder i et normalt repository. Meget store repositories betaler mere ved hvert sådant kald.

Kan den gå i stå og sende agenten tilbage i det uendelige?

Den sender agenten tilbage med begrundelsen og med, hvordan sessionen er gået indtil nu: kørsler, fejl i træk, antal gange allerede sendt tilbage. Agenten kan så stoppe og fortælle dig klart, hvilken kontrol der bliver ved med at fejle.

Kan agenten slå den fra?

Ikke direkte. Core afviser agentens redigeringer af policyen og logbogen og afviser bw init og manuel afgørelse af en handling. Afinstallation af pluginet, eller ændring af de filer ad omveje, er underlagt Claude Codes egne tilladelsesregler, så lad de bekræftelsesprompter være slået til.

Sender den noget nogen steder hen?

Der er ingen server og ingen telemetri. Dens eneste netværkskald er forespørgsler, der kun læser, med dine egne git, gh og npm, for at bekræfte, om en sideeffekt er sket. Logbogen bliver i .git/better-workflows/.

Hvad med Codex, Gemini CLI eller Qwen Code?

De kørte V5, som er frosset. Core er værtsneutral, og adaptere til dem er planlagt efter alpha.

Prøv det på få sekunder

At køre en kommando er ikke bevis. Filerne er.

Kør demoen uden Claude, installér den derefter i ét repository og bed om en ændring.