V6 Corepre-alpha

Bevis må være ferskt.
Ukjent betyr stopp.

En Claude Code-plugin som hindrer en AI-agent i å avslutte på en utdatert grønn test, og i å gjenta eller stable sideeffekter den aldri så resultatet av. Hva den får gjøre, kommer fra en policy-fil du skriver, aldri fra prompten.

  • Ferske bevis
  • Høyst én gang
  • Policy, ikke prompt
  • Fail-closed

stale-green · en utdatert grønn, så en ny push

demo
  1. claude fiks feilen i sum.mjs, du trenger ikke kjøre testene på nytt
  2. testnode --test består på filene a1f3
  3. editagenten redigerer sum.mjs, filene er nå 9c07
  4. stop«Ferdig. Testene består.»
  5. bwSendt tilbake: test besto sist på a1f3; filene er endret siden.
  6. testagenten kjører node --test på nytt: 1 feil, fikser den, består på b2e8
  7. pushgit push får tidsavbrudd etter at pushen har kommet fram
  8. pushagenten prøver git push på nytt
  9. bwAvvist: git-push har allerede lyktes på denne commiten.

SENT BACKCore stoppet agenten to ganger: én gang fra å avslutte på et gammelt bestått resultat, én gang fra å pushe igjen. Begge gangene ble den sendt tilbake med begrunnelsen.

Hva Core sjekket

2 STOPP · 0 FALSKE FERDIG
  1. Policyfra .better-workflows/policy.jsonPASS
  2. Bevistest på filene slik de er nåBLOCKED
  3. Ny kjøringtest består på b2e8PASS
  4. Handlinggit-push, første gangPASS
  5. Høyst én gangsamme push, samme commitBLOCKED

Forkortet fra stale-green-demoen i repositoriet; tree-ID-ene er illustrative. Kjør hele demoen selv på noen sekunder, uten Claude.

01PrinsipperPRINCIPLES

Tre regler som blir nyttigere jo sterkere modellene blir.

En sterkere agent skriver mer kode per sesjon og kjører flere kommandoer på egen hånd. Disse reglene er ikke avhengige av at agenten er forsiktig; de gjelder uansett hva den sier.

WITHOUT vs WITHsamme sesjon

SituasjonBare agentenMed Core
Testene besto, så ble en fil endret«Testene består.»Sendt tilbake for å kjøre på nytt på dagens filer.
npm test | tailRegnet som grønn; exit-koden tilhører tail.Teller aldri; Stop sier hvorfor.
Én spec-fil i stedet for hele suitenRegnet som «testene består».Med exact teller bare hele kommandoen.
Push får tidsavbrudd etter at den kom framPusher igjen.Samme push på samme commit avvises.
Prompten sier «du kan publisere»Publiserer.Policyen avgjør: allow, ask eller deny.

AUTHORITYhvor autoriteten kommer fra

  1. L1
    policy.json

    Skrevet og endret av et menneske. Core avviser agentens direkte endringer i den.

    KILDE
  2. L2
    Claude Code-tillatelser

    Gjelder fortsatt. allow i policyen gir aldri mer enn Claude Code ville gitt.

  3. L3
    Core-hooks

    Håndhever policyen ved hver kommando, redigering og stopp.

  4. L4
    Prompten

    Beskriver målet. Har ingen autoritet.

    INGEN

02Slik fungerer detHOW IT WORKS

Seks hooks, én logg i .git.

Core kjører i Claude Codes egne hooks. Ingenting å starte, ingen server, ingen konto; tilstanden ligger i .git/better-workflows/ i hvert repositorium.

HOOKShookene

  1. SessionStart: forteller agenten hvilke sjekker som må bestå og hvilke sideeffekter som er uavklarte, og advarer hvis policyen er ugyldig eller gh trengs, men ikke kan brukes.
  2. PreToolUse: tillater, spør om eller avviser hver sideeffekt, og avviser endringer i policyen og loggen.
  3. PostToolUse: registrerer hver sjekk med Git-treet den kjørte på, og hver sideeffekt med exit-koden sin.
  4. Stop: hvis filer er endret og en påkrevd sjekk mangler, har feilet eller er utdatert, sender den agenten tilbake én gang med begrunnelsen; neste gang advarer den bare.
  5. bw status (en kommando, ikke en hook): viser deg den samme tilstanden.
STOP

Avslutning

bevis knyttet til filene

En test, lint, typecheck eller build teller bare hvis den besto, dens egen exit-kode avgjorde resultatet, ingen fil ble endret mens den kjørte, og filene fortsatt er nøyaktig de den kjørte på.

Valgfritt

  • exact: bare hele kommandoen teller, og cwd angir hvor den må kjøres.
  • scope (med exact): en endring utenfor de navngitte katalogene holder resultatet ferskt.
  • ignore (hele policyen): utdata en sjekk skriver, som coverage, regnes ikke som en endring.
PRETOOLUSE

Sideeffekter

høyst én gang, ukjent stopper

Pusher, opprettelse og merging av PR-er, releaser, pakkepublisering og dine egne typer trenger hver for seg allow fra policyen. Bare exit-kode 0 er et kjent resultat.

Skrivebeskyttede sjekker brukt til å avklare et ukjent resultat

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

RULESregler som holder

  • R1

    En ugyldig policy avviser alle sideeffekter i stedet for å falle tilbake til standardverdier.

  • R2

    En utløpt tillatelse faller tilbake til ask. Bare et menneske forlenger den, ved å redigere policyen.

  • R3

    Kommandoer Core ikke kan lese, som eval eller sh -c, behandles som ugjennomsiktige, og du blir spurt.

  • R4

    Loggen er append-only og hash-kjedet; bw verify oppdager endrede eller fjernede oppføringer og en halvskrevet siste linje, men ikke hele oppføringer som er kuttet bort fra slutten.

03VerterHOSTS

Claude Code først.

Core er vertsnøytral; hver vert trenger en liten adapter. Claude Code er den første og den eneste som støttes i dag.

Støtte for verter og operativsystemer
VertmacOSLinuxWindows
Claude CodeFørste vertStøttet, testet i CIStøttet, testet i CIIkke testet
CodexBare V5, frystPlanlagtPlanlagtPlanlagt
Gemini CLIBare V5, frystPlanlagtPlanlagtPlanlagt
Qwen CodeBare V5, frystPlanlagtPlanlagtPlanlagt

CI kjø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, be så om en endring.

Krever Node.js 22.14 eller nyere, Git og Claude Code med plugin-støtte.

  1. 1

    Klon Core

    Én gang per maskin. Hvis du har kjørt V5 her, flytt først ~/.better-workflows til ~/.better-workflows-V5 og pek SBW_STATE_ROOT dit.

  2. 2

    Legg til pluginen

    Installer den per repositorium med --scope local, så ingenting 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 reglene.

  4. Den fullstendige gjennomgangen dekker dine egne sjekker, sideeffekter og ukjente resultater. Kom 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

Valgfritt: kjør begge scenarioene uten Claude, på noen sekunder.

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

Prøv det så

Endre én linje i dette repositoriet, og ikke kjør testene.

Når Claude Code prøver å avslutte, sendes den tilbake og får vite hvilken sjekk som mangler.

05GrenserLIMITS

Hva den stopper, og hva den ikke ser.

En port er bare nyttig hvis du kjenner kantene dens.

Stopper

Observerbare feil

  • Avslutning på en utdatert eller feilet testkjøring, eller på en delvis kjøring når sjekken er merket exact
  • En pipe eller || true som skjuler en feil
  • En gjentatt push, merge, release eller publisering
  • Sideeffekter mens en tidligere er ukjent
  • At agenten redigerer sin policy eller logg direkte

Gjør ikke

Utenfor synsfeltet

  • Se sideeffekter inne i et skript, med mindre policyen navngir det skriptet
  • Vurdere om testene dine er gode nok
  • Bygge en avhengighetsgraf: en scope må navngi alt en sjekk er avhengig av
  • Regne filer som Git ignorerer som en del av beviset

Overlater til deg

Beslutninger et menneske tar

  • Avklare en sideeffekt der resultatet ikke kan leses tilbake
  • Forlenge en tillatelse forbi expiresAt
  • Velge hva en scope dekker
  • Avgjøre når en sesjon går i ring
Core blokkerer feilene over. Det er ikke målt om den reduserer omarbeid eller feil beslutninger i lange oppgaver; det er det den nåværende perioden med egenbruk er til for.
  1. B1Shell-parseren vokser ikke: du blir spurt om en kommando den ikke kan lese før den kjøres, og en test som er skjult i eval eller sh -c, teller aldri som bevis.
  2. B2Core teller bare hvordan en sesjon går. Om den konvergerer, er det agenten eller du som vurderer.
  3. B3Pull requests og releaser avstemmes med gh; uten den forblir de ukjente til du avklarer dem.

06StatusSTATUS

Hvor prosjektet står.

V6 erstatter arbeidsflytmotoren i V5 med en liten kjerne. Datoer kommer når kriteriene er oppfylt.

  1. DONE Fryst

    V5.0 RC1

    tag V5.0.rc1

    Arbeidsflytmotor for flere verter. Fryst på grenen frozen/v5; ikke noe nytt arbeid.

  2. NOW Pågår

    V6 Core pre-alpha

    packages/bw-core

    Claude Code-hooks, bevis-scope, egenbruk på to repositorier.

  3. NEXT Etter egenbruk

    V6 Core alpha

    første taggede release

    Publiseres når egenbruksperioden viser reelle fangster og få falske blokkeringer. Flere verter følger som små adaptere.

STATEMENTerklæring

PRE-ALPHA

Core kan brukes i dag og kjører på vedlikeholderens egne repositorier. Policy-formatet kan fortsatt endres før alpha.

Alt her er gratis og åpen kildekode. Det finnes ingen betalt plan, konto eller telemetri.

LICENSINGlisenser

lisenser
DelLisensTilstand
V6 Core (packages/bw-core)Apache-2.0aktiv
Nettstedet og resten av repositorietAGPL-3.0-onlyaktiv
V5-pluginAGPL-3.0-onlypå frozen/v5fryst

07DokumentasjonDOCS

Alt ligger i repositoriet.

Veiledningene er skrevet på engelsk og tradisjonell kinesisk. Hvert språk på dette nettstedet har en kort README på GitHub.

08FAQFAQ

Vanlige spørsmål, rette svar.

Noe annet? Opprett en issue på GitHub. GitHub Issues

Gjør den Claude Code tregere?

Hooker som håndterer en sjekk eller en sideeffekt, hasher arbeidstreet med Git, noe som tar millisekunder i et vanlig repositorium. Svært store repositorier betaler mer per slikt kall.

Kan den bli sittende fast og sende agenten tilbake i det uendelige?

Den sender agenten tilbake med begrunnelsen og hvordan sesjonen har gått så langt: kjøringer, feil på rad, hvor mange ganger den allerede er sendt tilbake. Agenten kan da stoppe og fortelle deg tydelig hvilken sjekk som fortsetter å feile.

Kan agenten slå den av?

Ikke direkte. Core avviser agentens endringer i policyen og loggen, og avviser bw init og manuell avklaring av en handling. Å avinstallere pluginen, eller å endre disse filene via omveier, styres av Claude Codes egne tillatelsesregler, så la de spørsmålene være slått på.

Sender den noe noe sted?

Det finnes ingen server og ingen telemetri. De eneste nettverkskallene er skrivebeskyttede sjekker med din egen git, gh og npm, for å bekrefte om en sideeffekt har skjedd. Loggen blir i .git/better-workflows/.

Hva med Codex, Gemini CLI eller Qwen Code?

De kjørte V5, som er fryst. Core er vertsnøytral, og adaptere for dem er planlagt etter alpha.

Prøv det på noen sekunder

Å kjøre en kommando er ikke bevis. Filene er det.

Kjør demoen uten Claude, installer den deretter i ett repositorium og be om en endring.