V6 Corepre-alpha

Bewijs moet vers zijn.
Onbekend? Stop.

Een Claude Code-plugin die voorkomt dat een AI-agent afrondt op een verouderde groene test, en dat hij neveneffecten herhaalt of stapelt waarvan hij het resultaat nooit heeft gezien. Wat hij mag, komt uit een policy-bestand dat jij schrijft, nooit uit de prompt.

  • Actueel bewijs
  • Hooguit één keer
  • Policy, geen prompt
  • Fail-closed

stale-green · een verouderd groen, daarna een herhaalde push

demo
  1. claude los de bug in sum.mjs op, de tests hoeven niet opnieuw
  2. testnode --test slaagt op bestanden a1f3
  3. editde agent bewerkt sum.mjs, de bestanden zijn nu 9c07
  4. stop‘Klaar. Tests slagen.’
  5. bwTeruggestuurd: test slaagde voor het laatst op a1f3; de bestanden zijn sindsdien gewijzigd.
  6. testde agent draait node --test opnieuw: 1 fout, lost die op, slaagt op b2e8
  7. pushgit push krijgt een time-out nadat de push al is aangekomen
  8. pushde agent probeert git push opnieuw
  9. bwGeweigerd: git-push is al geslaagd op deze commit.

SENT BACKCore hield de agent twee keer tegen: één keer bij afronden op een oude geslaagde run, één keer bij opnieuw pushen. Beide keren werd hij teruggestuurd met de reden.

Wat Core controleerde

2 STOPS · 0 ONTERECHT KLAAR
  1. Policyuit .better-workflows/policy.jsonPASS
  2. Bewijstest op de bestanden zoals ze nu zijnBLOCKED
  3. Opnieuwtest slaagt op b2e8PASS
  4. Actiegit-push, eerste keerPASS
  5. Hooguit één keerzelfde push, zelfde commitBLOCKED

Ingekort uit de stale-green-demo in de repository; de tree-id's zijn illustratief. Draai de volledige demo zelf in een paar seconden, zonder Claude.

01PrincipesPRINCIPLES

Drie regels die nuttiger worden naarmate modellen sterker worden.

Een sterkere agent schrijft meer code per sessie en voert meer commando's zelf uit. Deze regels hangen niet af van hoe voorzichtig de agent is; ze gelden wat hij ook zegt.

WITHOUT vs WITHdezelfde sessie

SituatieAlleen de agentMet Core
Tests geslaagd, daarna een bestand gewijzigd‘Tests slagen.’Teruggestuurd om opnieuw te draaien op de huidige bestanden.
npm test | tailGeteld als groen; de exitcode is van tail.Telt nooit; Stop zegt waarom.
Eén spec-bestand in plaats van de suiteGeteld als ‘tests slagen’.Met exact telt alleen het volledige commando.
Push krijgt time-out na aankomstPusht opnieuw.Dezelfde push op dezelfde commit wordt geweigerd.
Prompt zegt ‘je mag publiceren’Publiceert.De policy beslist: allow, ask of deny.

AUTHORITYwaar autoriteit vandaan komt

  1. L1
    policy.json

    Geschreven en gewijzigd door een mens. Core weigert directe bewerkingen ervan door de agent.

    BRON
  2. L2
    Claude Code-rechten

    Blijven gelden. allow in de policy geeft nooit meer dan Claude Code zou geven.

  3. L3
    Core-hooks

    Dwingen de policy af bij elk commando, elke bewerking en elke stop.

  4. L4
    De prompt

    Beschrijft het doel. Heeft geen enkele autoriteit.

    GEEN

02Hoe het werktHOW IT WORKS

Zes hooks, één logboek in .git.

Core draait binnen de eigen hooks van Claude Code. Niets op te starten, geen server, geen account; de status staat in .git/better-workflows/ van elke repository.

HOOKSde hooks

  1. SessionStart: vertelt de agent welke controles moeten slagen en welke neveneffecten nog niet zijn afgehandeld, en waarschuwt als de policy ongeldig is of als gh nodig is maar niet bruikbaar.
  2. PreToolUse: staat elk neveneffect toe, vraagt erom of weigert het, en weigert bewerkingen van de policy en het logboek.
  3. PostToolUse: legt elke controle vast met de Git-tree waarop hij draaide, en elk neveneffect met zijn exitcode.
  4. Stop: als er bestanden zijn gewijzigd en een vereiste controle ontbreekt, mislukt is of verouderd is, stuurt het de agent één keer terug met de reden; de volgende keer waarschuwt het alleen.
  5. bw status (een commando, geen hook): toont jou dezelfde status.
STOP

Afronden

bewijs dat bij de bestanden hoort

Een test, lint, typecheck of build telt alleen als hij slaagde, zijn eigen exitcode de uitkomst bepaalde, er geen bestand veranderde terwijl hij draaide, en de bestanden nog precies zijn waarop hij draaide.

Optioneel

  • exact: alleen het volledige commando telt, en cwd bepaalt waar het moet draaien.
  • scope (met exact): een wijziging buiten de genoemde mappen laat het resultaat actueel.
  • ignore (hele policy): uitvoer die een controle schrijft, zoals coverage, telt niet als wijziging.
PRETOOLUSE

Neveneffecten

hooguit één keer, onbekend stopt

Pushes, het aanmaken en mergen van PR's, releases, het publiceren van pakketten en je eigen soorten hebben elk allow uit de policy nodig. Alleen exitcode 0 is een bekend resultaat.

Alleen-lezen-controles om een onbekend resultaat af te handelen

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

RULESregels die standhouden

  • R1

    Een ongeldige policy weigert elk neveneffect in plaats van terug te vallen op standaardwaarden.

  • R2

    Een verlopen recht valt terug op ask. Alleen een mens verlengt het, door de policy te bewerken.

  • R3

    Commando's die Core niet kan lezen, zoals eval of sh -c, worden als ondoorzichtig behandeld en er wordt om bevestiging gevraagd.

  • R4

    Het logboek is append-only en met hashes geketend; bw verify detecteert bewerkte of verwijderde items en een half geschreven laatste regel, maar niet hele items die van het einde zijn afgeknipt.

03HostsHOSTS

Eerst Claude Code.

Core is host-neutraal; elke host heeft een kleine adapter nodig. Claude Code is de eerste en vandaag de enige ondersteunde.

Ondersteuning voor hosts en besturingssystemen
HostmacOSLinuxWindows
Claude CodeEerste hostOndersteund, getest in CIOndersteund, getest in CINiet getest
CodexAlleen V5, bevrorenGeplandGeplandGepland
Gemini CLIAlleen V5, bevrorenGeplandGeplandGepland
Qwen CodeAlleen V5, bevrorenGeplandGeplandGepland

CI draait Core bij elke pull request.macOS 15 en Ubuntu 24.04, Node 22.23.3 en 24.21.0.

04Aan de slagGET STARTED

Drie commando's, vraag dan om een wijziging.

Vereist Node.js 22.14 of nieuwer, Git, en Claude Code met pluginondersteuning.

  1. 1

    Clone Core

    Eén keer per machine. Als je hier V5 gebruikte, verplaats dan eerst ~/.better-workflows naar ~/.better-workflows-V5 en laat SBW_STATE_ROOT daarnaar wijzen.

  2. 2

    Voeg de plugin toe

    Installeer hem per repository met --scope local, zodat er niets wordt geschreven in bestanden die je commit.

  3. 3

    Schrijf een policy

    bw init schrijft .better-workflows/policy.json. Commit het zodat iedereen dezelfde regels krijgt.

  4. De volledige handleiding behandelt je eigen controles, neveneffecten en onbekende resultaten. Aan de slag

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

Optioneel: draai beide scenario's zonder Claude, in een paar seconden.

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

Probeer het daarna

Wijzig één regel in deze repository en draai de tests niet.

Als Claude Code probeert af te ronden, wordt hij teruggestuurd met de melding welke controle ontbreekt.

05GrenzenLIMITS

Wat het tegenhoudt, en wat het niet kan zien.

Een poort is alleen nuttig als je de randen kent.

Houdt tegen

Waarneembare fouten

  • Afronden op een verouderde of mislukte testrun, of op een gedeeltelijke als de controle als exact is gemarkeerd
  • Een pipe of || true die een fout verbergt
  • Een herhaalde push, merge, release of publicatie
  • Neveneffecten terwijl een eerder neveneffect onbekend is
  • De agent die zijn policy of logboek rechtstreeks bewerkt

Doet niet

Buiten zijn zicht

  • Neveneffecten binnen een script zien, tenzij de policy dat script noemt
  • Beoordelen of je tests goed genoeg zijn
  • Een afhankelijkheidsgraaf bouwen: een scope moet alles noemen waar een controle van afhangt
  • Door Git genegeerde bestanden meetellen als bewijs

Laat aan jou

Beslissingen van een mens

  • Een neveneffect afhandelen waarvan het resultaat niet terug te lezen is
  • Een recht verlengen voorbij de expiresAt
  • Kiezen wat een scope omvat
  • Bepalen wanneer een sessie in cirkels draait
Core blokkeert de fouten hierboven. Het is niet gemeten of het herstelwerk of verkeerde beslissingen bij lange taken vermindert; daar is de huidige periode van eigen gebruik voor.
  1. B1De shell-parser groeit niet: over een commando dat hij niet kan lezen wordt gevraagd voordat het draait, en een test die verstopt zit in eval of sh -c telt nooit als bewijs.
  2. B2Core telt alleen hoe een sessie verloopt. Of die convergeert, beoordeelt de agent of jij.
  3. B3Pull requests en releases worden afgestemd met gh; zonder blijven ze onbekend totdat jij ze afhandelt.

06StatusSTATUS

Waar het project staat.

V6 vervangt de workflow-engine van V5 door een kleine kern. Datums komen zodra de voorwaarden gehaald zijn.

  1. DONE Bevroren

    V5.0 RC1

    tag V5.0.rc1

    Workflow-engine voor meerdere hosts. Bevroren op de branch frozen/v5; geen nieuw werk.

  2. NOW Bezig

    V6 Core pre-alpha

    packages/bw-core

    Claude Code-hooks, bewijs-scope, eigen gebruik op twee repositories.

  3. NEXT Na eigen gebruik

    V6 Core alpha

    eerste getagde release

    Gepubliceerd zodra de periode van eigen gebruik echte vangsten en weinig onterechte blokkades laat zien. Meer hosts volgen als kleine adapters.

STATEMENTverklaring

PRE-ALPHA

Core is vandaag bruikbaar en draait op de eigen repositories van de maintainer. Het policy-formaat kan vóór alpha nog veranderen.

Alles hier is gratis en open source. Er is geen betaald abonnement, account of telemetrie.

LICENSINGlicenties

licenties
OnderdeelLicentieStatus
V6 Core (packages/bw-core)Apache-2.0actief
Website en de rest van de repositoryAGPL-3.0-onlyactief
V5-pluginAGPL-3.0-onlyop frozen/v5bevroren

07DocumentatieDOCS

Alles staat in de repository.

De handleidingen zijn geschreven in het Engels en Traditioneel Chinees. Elke taal op deze site heeft een korte README op GitHub.

08FAQFAQ

Veelgestelde vragen, duidelijke antwoorden.

Iets anders? Open een issue op GitHub. GitHub Issues

Maakt het Claude Code trager?

Hooks die een controle of een neveneffect afhandelen hashen de werkboom met Git, wat in een normale repository milliseconden kost. Zeer grote repositories betalen meer per zo'n aanroep.

Kan het blijven hangen en de agent eindeloos terugsturen?

Het stuurt de agent terug met de reden en hoe de sessie tot nu toe verliep: runs, fouten op rij, hoe vaak hij al is teruggestuurd. De agent kan dan stoppen en je duidelijk vertellen welke controle steeds faalt.

Kan de agent het uitschakelen?

Niet rechtstreeks. Core weigert bewerkingen van de agent aan de policy en het logboek, en weigert bw init en het met de hand afhandelen van een actie. Het verwijderen van de plugin, of die bestanden via omwegen wijzigen, valt onder de eigen permissieregels van Claude Code, dus laat die vragen aanstaan.

Stuurt het ergens iets naartoe?

Er is geen server en geen telemetrie. De enige netwerkaanroepen zijn alleen-lezen controles met je eigen git, gh en npm, om te bevestigen of een neveneffect heeft plaatsgevonden. Het logboek blijft in .git/better-workflows/.

En Codex, Gemini CLI of Qwen Code?

Die draaiden V5, dat bevroren is. Core is host-neutraal, en adapters voor hen staan gepland na de alpha.

Probeer het in een paar seconden

Een commando draaien is geen bewijs. De bestanden wel.

Draai de demo zonder Claude, installeer het daarna op één repository en vraag om een wijziging.