V6 Corepre-alpha

Färska bevis krävs.
Okänt betyder stopp.

Ett Claude Code-plugin som hindrar en AI-agent från att avsluta på ett inaktuellt grönt test, och från att upprepa eller stapla sidoeffekter vars resultat den aldrig såg. Vad den får göra kommer från en policyfil som du skriver, aldrig från prompten.

  • Aktuella bevis
  • Högst en gång
  • Policy, inte prompt
  • Fail-closed

stale-green · ett inaktuellt grönt, sedan en omförsökt push

demo
  1. claude fixa buggen i sum.mjs, du behöver inte köra testerna igen
  2. testnode --test går igenom på filerna a1f3
  3. editagenten ändrar sum.mjs, filerna är nu 9c07
  4. stop”Klart. Testerna går igenom.”
  5. bwSkickad tillbaka: test gick senast igenom på a1f3; filerna har ändrats sedan dess.
  6. testagenten kör node --test igen: 1 fel, fixar det, går igenom på b2e8
  7. pushgit push får timeout efter att pushen redan har gått igenom
  8. pushagenten försöker git push igen
  9. bwNekad: git-push har redan lyckats på den här committen.

SENT BACKCore stoppade agenten två gånger: en gång från att avsluta på ett gammalt godkänt resultat, en gång från att pusha igen. Båda gångerna skickades den tillbaka med skälet.

Vad Core kontrollerade

2 STOPP · 0 FALSKA KLART
  1. Policyfrån .better-workflows/policy.jsonPASS
  2. Bevistest på filerna som de ser ut nuBLOCKED
  3. Omkörningtestet går igenom på b2e8PASS
  4. Åtgärdgit-push, första gångenPASS
  5. Högst en gångsamma push, samma commitBLOCKED

Förkortad från stale-green-demon i repot; tree-id:na är exempel. Kör hela demon själv på några sekunder, utan Claude.

01PrinciperPRINCIPLES

Tre regler som blir mer användbara ju starkare modellerna blir.

En starkare agent skriver mer kod per session och kör fler kommandon på egen hand. De här reglerna förutsätter inte att agenten är försiktig; de gäller oavsett vad den säger.

WITHOUT vs WITHsamma session

SituationAgenten ensamMed Core
Testerna gick igenom, sedan ändrades en fil”Testerna går igenom.”Skickas tillbaka för att köra om på de aktuella filerna.
npm test | tailRäknas som grönt; exitkoden tillhör tail.Räknas aldrig; Stop säger varför.
En spec-fil i stället för hela svitenRäknas som ”testerna går igenom.”Med exact räknas bara hela kommandot.
Push får timeout efter att ha gått igenomPushar igen.Samma push på samma commit nekas.
Prompten säger ”du får publicera”Publicerar.Policyn avgör: allow, ask eller deny.

AUTHORITYvarifrån behörighet kommer

  1. L1
    policy.json

    Skrivs och ändras av en människa. Core vägrar agentens direkta ändringar av den.

    KÄLLA
  2. L2
    Claude Code-behörigheter

    Gäller fortfarande. allow i policyn ger aldrig mer än Claude Code skulle göra.

  3. L3
    Core-hooks

    Upprätthåller policyn vid varje kommando, ändring och stopp.

  4. L4
    Prompten

    Beskriver målet. Ger ingen behörighet.

    INGEN

02Så fungerar detHOW IT WORKS

Sex hooks, en liggare i .git.

Core körs i Claude Codes egna hooks. Inget att starta, ingen server, inget konto; tillståndet ligger i .git/better-workflows/ i varje repo.

HOOKShooksen

  1. SessionStart: talar om för agenten vilka kontroller som måste gå igenom och vilka sidoeffekter som är oavgjorda, och varnar om policyn är ogiltig eller om gh behövs men inte går att använda.
  2. PreToolUse: tillåter, frågar om eller nekar varje sidoeffekt, och vägrar ändringar i policyn och liggaren.
  3. PostToolUse: registrerar varje kontroll med det Git-träd den kördes på, och varje sidoeffekt med dess exitkod.
  4. Stop: om filer har ändrats och en obligatorisk kontroll saknas, har misslyckats eller är inaktuell, skickar den tillbaka agenten en gång med skälet; nästa gång varnar den bara.
  5. bw status (ett kommando, inte en hook): visar samma tillstånd för dig.
STOP

Avslut

bevis knutna till filerna

Ett test, lint, typecheck eller bygge räknas bara om det gick igenom, dess egen exitkod avgjorde utfallet, ingen fil ändrades medan det kördes, och filerna fortfarande är exakt de det kördes på.

Valfritt

  • exact: bara hela kommandot räknas, och cwd anger var det måste köras.
  • scope (med exact): en ändring utanför de angivna katalogerna lämnar resultatet aktuellt.
  • ignore (hela policyn): utdata som en kontroll skriver, som coverage, räknas inte som en ändring.
PRETOOLUSE

Sidoeffekter

högst en gång, okänt stoppar

Pushar, skapande och merge av PR, releaser, paketpubliceringar och dina egna anpassade typer kräver var och en allow i policyn. Bara exitkod 0 är ett känt resultat.

Skrivskyddade kontroller som används för att avgöra ett okänt resultat

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

RULESregler som alltid gäller

  • R1

    En ogiltig policy nekar alla sidoeffekter i stället för att falla tillbaka på standardvärden.

  • R2

    En utgången behörighet faller tillbaka på ask. Bara en människa kan förlänga den, genom att redigera policyn.

  • R3

    Kommandon som Core inte kan läsa, som eval eller sh -c, behandlas som ogenomskinliga och kräver en fråga.

  • R4

    Liggaren är append-only och hashkedjad; bw verify upptäcker ändrade eller borttagna poster och en halvskriven sista rad, men inte hela poster som kapats bort från slutet.

03VärdarHOSTS

Claude Code först.

Core är värdneutralt; varje värd behöver en liten adapter. Claude Code är den första och den enda som stöds i dag.

Stöd för värdar och operativsystem
VärdmacOSLinuxWindows
Claude CodeFörsta värdenStöds, testas i CIStöds, testas i CIInte testat
CodexBara V5, frystPlaneratPlaneratPlanerat
Gemini CLIBara V5, frystPlaneratPlaneratPlanerat
Qwen CodeBara V5, frystPlaneratPlaneratPlanerat

CI kör Core på varje pull request.macOS 15 och Ubuntu 24.04, Node 22.23.3 och 24.21.0.

04Kom igångGET STARTED

Tre kommandon, be sedan om en ändring.

Kräver Node.js 22.14 eller senare, Git och Claude Code med plugin-stöd.

  1. 1

    Klona Core

    En gång per maskin. Om du har kört V5 här, flytta först ~/.better-workflows till ~/.better-workflows-V5 och peka SBW_STATE_ROOT dit.

  2. 2

    Lägg till pluginet

    Installera det per repo med --scope local, så att inget skrivs till filer du committar.

  3. 3

    Skriv en policy

    bw init skapar .better-workflows/policy.json. Committa den så att alla får samma regler.

  4. Den fullständiga genomgången tar upp egna kontroller, sidoeffekter och okända resultat. Kom igång

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

Valfritt: kör båda scenarierna utan Claude, på några sekunder.

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

Prova sedan

Ändra en rad i det här repot och kör inte testerna.

När Claude Code försöker avsluta skickas den tillbaka och får veta vilken kontroll som saknas.

05GränserLIMITS

Vad den stoppar, och vad den inte ser.

En grind är bara användbar om du känner till dess kanter.

Stoppar

Observerbara misstag

  • Att avsluta på en inaktuell eller misslyckad testkörning, eller på en ofullständig när kontrollen är markerad exact
  • En pipe eller || true som döljer ett fel
  • En upprepad push, merge, release eller publicering
  • Sidoeffekter medan en tidigare är okänd
  • Att agenten redigerar sin policy eller liggare direkt

Gör inte

Utanför dess synfält

  • Ser sidoeffekter inuti ett skript, om inte policyn namnger skriptet
  • Bedömer om dina tester är tillräckligt bra
  • Bygger en beroendegraf: en scope måste ange allt en kontroll beror på
  • Räknar filer som Git ignorerar som en del av beviset

Lämnar åt dig

Beslut som en människa fattar

  • Att avgöra en sidoeffekt vars resultat inte kan läsas tillbaka
  • Att förlänga en behörighet bortom dess expiresAt
  • Att välja vad en scope omfattar
  • Att avgöra när en session går i cirklar
Core blockerar misstagen ovan. Om det minskar omarbete eller felaktiga beslut i långa uppgifter har inte mätts; det är vad den nuvarande perioden av egen användning är till för.
  1. B1Shell-parsern växer inte: ett kommando den inte kan läsa frågas om innan det körs, och ett test som döljs i eval eller sh -c räknas aldrig som bevis.
  2. B2Core räknar bara hur en session går. Om den konvergerar är upp till agenten eller dig att bedöma.
  3. B3Pull requests och releaser stäms av med gh; utan det förblir de okända tills du avgör dem.

06StatusSTATUS

Var projektet står.

V6 ersätter V5:s arbetsflödesmotor med en liten kärna. Datum kommer när villkoren är uppfyllda.

  1. DONE Fryst

    V5.0 RC1

    tag V5.0.rc1

    Arbetsflödesmotor för flera värdar. Fryst på grenen frozen/v5; inget nytt arbete.

  2. NOW Pågår

    V6 Core pre-alpha

    packages/bw-core

    Claude Code-hooks, bevis-scope, egen användning i två repon.

  3. NEXT Efter egen användning

    V6 Core alpha

    första taggade releasen

    Publiceras när perioden av egen användning visar verkliga fångster och få felaktiga blockeringar. Fler värdar följer som små adaptrar.

STATEMENTuttalande

PRE-ALPHA

Core går att använda i dag och körs i underhållarens egna repon. Policyformatet kan fortfarande ändras före alpha.

Allt här är gratis och öppen källkod. Det finns ingen betalnivå, inget konto och ingen telemetri.

LICENSINGlicensiering

licensiering
DelLicensLäge
V6 Core (packages/bw-core)Apache-2.0aktiv
Webbplatsen och resten av repotAGPL-3.0-onlyaktiv
V5-pluginAGPL-3.0-onlypå frozen/v5fryst

07DokumentationDOCS

Allt finns i repot.

Guiderna är skrivna på engelska och traditionell kinesiska. Varje språk på den här webbplatsen har en kort README på GitHub.

08Vanliga frågorFAQ

Vanliga frågor, raka svar.

Något annat? Öppna en issue på GitHub. GitHub Issues

Gör den Claude Code långsammare?

Hookar som hanterar en kontroll eller en sidoeffekt hashar arbetsträdet med Git, vilket tar millisekunder i ett normalt repo. Mycket stora repon får betala mer vid varje sådant anrop.

Kan den fastna och skicka tillbaka agenten i all evighet?

Den skickar tillbaka agenten med skälet och hur sessionen har gått hittills: körningar, misslyckanden i rad, antal gånger den redan skickats tillbaka. Agenten kan då stanna och tala om för dig rakt ut vilken kontroll som fortsätter att misslyckas.

Kan agenten stänga av den?

Inte direkt. Core vägrar agentens ändringar av policyn och liggaren, och vägrar bw init och att avgöra en åtgärd för hand. Att avinstallera pluginet, eller att ändra de filerna på omvägar, styrs av Claude Codes egna behörighetsregler, så låt de frågorna vara påslagna.

Skickar den något någonstans?

Det finns ingen server och ingen telemetri. De enda nätverksanropen är skrivskyddade kontroller med din egen git, gh och npm, för att bekräfta om en sidoeffekt har skett. Liggaren stannar i .git/better-workflows/.

Hur är det med Codex, Gemini CLI eller Qwen Code?

De körde V5, som är fryst. Core är värdneutralt, och adaptrar för dem är planerade efter alpha.

Prova på några sekunder

Att köra ett kommando är inget bevis. Filerna är det.

Kör demon utan Claude, installera sedan i ett repo och be om en ändring.