The Harness Is the Thing
Toen ik begon als ontwikkelaar, merkte een 'graybeard' op dat de wet van Moore ook geldt voor software. Ik begreep destijds niet dat dit constante gesprek over hoe we problemen oplosten juist de boog van vooruitgang was; dat klagen over J2EE, de traagheid van Netbeans, of zuchten over table-based layouts en constante volledige pagina-herlaadacties, de dagelijkse optimalisatie is die ook als motor van vooruitgang dient.
De afgelopen achttien maanden zijn een bijzonder venster geweest van meedogenloze verbetering. Tab-aanvullingen maakten plaats voor agentic coding, wat op zijn beurt weer leidde tot het beheren van je agents met een harness. Ik ben gegaan van bewondering voor de productiviteitswinst naar het volledig beheersen van het spel, waarbij ik probeer het maximale uit de tools te persen.
Nieuwe waarheden
Projecten van een enkele ontwikkelaar kunnen nu het kaliber en de consistentie bereiken van grote ontwikkelingsteams. Je kunt en moet op maat gemaakte applicaties bouwen, en je hoeft je geen zorgen te maken over het inwerken van ervaren engineers; als ze hun stack door en door kennen, weten ze snel genoeg hoe ze aan die van jou kunnen bijdragen.
Maar bovenal heb ik geleerd dat de harness het belangrijkste is; het draaipunt waarop mijn verwachtingen samenkomen met de mogelijkheden van het Large Language Model (LLM).
Op dit moment wordt mijn setup ondersteund door twee abonnementen (Cursor, Claude) die ik indien nodig kan aanvullen met Pi. Alle drie delen mijn vaardigheden en AGENTS.md. Hoewel ik drie TUI's (Terminal User Interfaces) gebruik, heb ik een uniforme ervaring. Dit heeft de modellen voor mij tot een 'commodity' gemaakt; er is geen magische saus of speciale ervaring in Claude of Cursor die ik nodig heb om productief te zijn. Ik maak me geen zorgen over de overstap van Cursor naar Codex aan het einde van deze maand.
Het kostenvoordeel
In dit tijdperk van commodificatie kan ik uitstekende resultaten behalen met een reeks beschikbare modellen, waarbij ik sinds de release vooral leun op deepseek-v4-flash-0731. Het is zeldzaam dat ik mijn Anthropic API-budget aanspreek om Fable te gebruiken.
Ik gebruik Deepseek voor de meeste onderhoudstaken en eenvoudige klussen. Pas wanneer ik een serieuze feature exploreer of een grote refactor uitvoer met veel bewegende delen, grijp ik naar de frontier-modellen. Onlangs leerde ik over prewalk, een techniek van Can Bölük waarbij frontier-modellen worden gebruikt voor de planningsfase en de eerste taak, waarna het werk wordt overgedragen zodra het patroon is vastgesteld.
Ik heb dit gecombineerd met de splitsing tussen planner/worker/critic uit "Building an Advanced Agentic Harness". Een enkele prompt die plant, uitvoert en zichzelf bekritiseert, raakt vaak in de war over de eigen doelstellingen; daarom wordt elke rol geïsoleerd. Ik heb beide in een 'skill' gebouwd, met een ondersteunende Pi-extensie die op elk stadium van het werk kan overnemen.
Het proces verloopt als volgt:
- Exploratie: Leidt tot een plan dat is geformaliseerd in een expliciete DAG (directed acyclic graph) taaklijst.
- Worker: De worker neemt het over en richt zich op het implementeren van de DAG, node voor node.
- Critic: Zodra dit voltooid is, komt de critic in beeld om te vereenvoudigen en de implementatie in twijfel te trekken. Vaak zorgt deze fase ervoor dat de worker-fase opnieuw moet worden doorlopen.
- Promoter: Als de critic tevreden is, volgt de promoter. Dit is mijn herinnering dat een klus niet voltooid is totdat deze correct is gecommuniceerd naar anderen.
Ik heb de promoter-stap toegevoegd om een zwak punt van mij aan te pakken: de neiging om iets snel te verschepen en door te gaan. Omdat promotie subtiel is en gemakkelijk misgaat, en niemand van een critic houdt, laat ik dit via het frontier-model lopen om het meer gewicht te geven.
Hierdoor is mijn gebruik van Fable, zelfs in mijn meest intensieve contexten, met 75% gedaald. Dit voelt gezond, vergelijkbaar met een 'AI soak'. Ik kan mijn klanten bedienen en echte progressie boeken op mijn eigen projecten met mijn twee abonnementen van twintig dollar, terwijl ik schakel naar Pi voor Deepseek of een Fable-infusie.
De verbinding tussen product en harness
Mijn product is een camera-app die het eenvoudig maakt om een foto te nemen en deze om te zetten in een vectorgrafiek, één voor één. Het is leuk omdat het simpel is: de resolutie daalt, de foto wordt vereenvoudigd tot waardelagen en vormen. Het behoudt de context maar verwijdert de details, zodat je het zelf opnieuw kunt tekenen. Je print het uit en tekent eroverheen, of importeert het in Procreate.
Deze functionaliteit is via poster-driver beschikbaar voor de harness. Door het te openen in headless Chrome en de live site aan te sturen, kun je posters maken van elke grafiek of gedeconstrueerde video die je wilt. Dit maakt het scripten van de app net zo eenvoudig als het laden van een webpagina.
Een geavanceerd use-case dat voorheen alleen onhandige oplossingen had, is nu beschikbaar en leuk om te gebruiken:
# run from harness root
npm run make:animation artifacts/my-movie.mp4
Het LLM hielp me dit uit te vogelen en schreef een script dat ik in mijn harness bewaar, zodat het een miljard keer kan draaien zonder tokens te verbruiken. Het product is krachtiger geworden omdat de harness erbij kan. Er is ondersteuning voor de File System API; na het inschakelen hiervan in Brave synchroniseer ik mijn gedachten naar de werkdirectory.
Een andere creatieve toepassing die ik exploreer, is het werken aan een Blender-omgeving van mijn buurt in 3D, met posters die eroverheen zijn geplaatst. Een scène, een storyboard—veel meer dan ik via het web kan aanbieden. De app voelt nu volledig beschikbaar, op een manier die een jaar geleden onmogelijk was. Creatieve mensen kunnen nog steeds een non-AI tool op een AI-manier gebruiken, waardoor we de leukste delen van creativiteit voor onszelf kunnen behouden.
De harness ontleden
Ik leef mijn werkdag in deze harness. Mijn nvim-configuratie is gekoppeld aan de werkdirectory, waardoor het LLM weet welk bestand ik open heb, dit kan bewerken en—aangezien ik nog een langzame zwemmer ben—me kan helpen de juiste motions te gebruiken. Ik zie de harness als een mal (jig): het LLM bewerkt mijn configuratie samen met mij, zodat ik me kan concentreren op het werk terwijl ik gedisciplineerd blijf in het gebruik van vim-commando's.
De harness is zelfvoorzienend om meer te ondersteunen dan alleen een home-directory (sandboxing, een webinterface, File System Access API, Docker, Deno executable, etc.).
Ik refereer aan npm start, cursor-agent en claude als TUI's om het concept van een harness helder te houden. Alle TUI's delen dezelfde harness. Het is belangrijk dat alles controleerbaar (auditable) blijft, daarom zijn de TUI's geïnstrueerd om alles binnen de artifacts/ directory te houden. Cursor gebruikt .gitignore om bestanden te negeren, wat slim is, dus is een root zonder git vereist. Ik heb een skill die de harness synchroniseert met de repo in de werkdirectory. Skills, extensies en AGENTS.md zijn eersteklas burgers in de root, klaar om te worden gewijzigd en uitgebreid. TUI's moeten zich hieraan houden.
# auto-load the nearest AGENTS.md into claude code
claude() {
local dir="$PWD"
while [[ "$dir" != "/" ]]; do
if [[ -f "$dir/AGENTS.md" ]]; then
command claude --append-system-prompt-file "$dir/AGENTS.md" "$@"
return
fi
dir="${dir:h}"
done
command claude "$@"
}
Directorystructuur:
brayness/
├── AGENTS.md
├── AGENTS.local.md
├── bin/
├── prompts/
├── plans/
├── skills/
├── extensions/
├── artifacts/
└── work/
├── realness/
├── blog/
├── brayness/
├── nvim/
└── ...
Aanvankelijk was ik te voorschrijvend met mijn skills; ik leer nu om de specificiteit te verminderen. Er is een grens waarbij je tokens verspilt aan het 'mansplaining' naar machines. Naarmate de harness tot rust komt, zal ik een meer empirische benadering moeten hanteren om de impact van wijzigingen te bevestigen.
Hieronder staan enkele skills gekoppeld aan mijn planningsboog:
- Explore:
nvim-buffers, flexible-visual-system, vault, interview-prep, vuetify-to-semantic
- Planning:
planner, planning, memory, previous-work, project-tooling, brayness-sync
- Worker:
realness-design, typography, user-interface, rust-best-practices, agent-browser, logo-finder
- Critic:
critic, test-coverage, simplify, vue-inspect
- Promoter:
hyperframes, readable, zoom-to-ableton, motion-systems
Nu ik weer vaste grond onder mijn voeten heb, voel ik me niet langer verloren in cursor-agent of Claude. Ik heb regie over mijn workflow en kan bepalen hoe ik oplossingen engineer. Wat ik leer via Pi, vloeit vaak terug in mijn ervaring met Claude en Cursor. Bij Pi vertrouw ik erop dat ik me door elk probleem heen kan slaan. Laat de harness de scripts draaien en coördineer deze scripts met de LLM's.
In de afgelopen drie maanden merk ik dat ik de editor steeds vaker verlaat voor de terminal. Er is een harmonie van redenen voor: het toevertrouwen van code aan agents, de overstap naar Ghostty en het bestrijden van 'skill rot' via nvim. Normaal gesproken zou zo'n herschikking mijn output lamleggen, maar mijn persoonlijke projecten en klantwerk bevinden zich op het hoogste niveau en tempo. Kleine zaken, zoals het bouwen van context rondom langlopende agentic taken met splits, hebben me geholpen in de AI-ervaring te landen.
Dit alles werd urgent toen de overheid Fable verbood en begon te signaleren dat ze privilege uitoefenden over de industrie. Ik, en naar ik aanneem honderdduizend andere softwareontwikkelaars, voelden plotseling de noodzaak om toegang tot verschillende modellen te diversifiëren. Dus, in naam van de vrijheid, besloten we collectief de Chinese modellen te proberen. Pi ging van een tool waar ik gewoon mee speelde naar het belangrijkste onderdeel van mijn rig.
***
Bronnen en referenties:
- Commodification and Circularity
- Prewalk - Stencil Blog
- Building an Advanced Agentic Harness
- Realness About
- Poster-driver
- Brayness GitHub
- Hacker News Discussion
The Harness Is the Thing
Toen ik begon als ontwikkelaar, merkte een 'graybeard' op dat de wet van Moore ook geldt voor software. Ik begreep destijds niet dat dit constante gesprek over hoe we problemen oplosten juist de boog van vooruitgang was; dat klagen over J2EE, de traagheid van Netbeans, of zuchten over table-based layouts en constante volledige pagina-herlaadacties, de dagelijkse optimalisatie is die ook als motor van vooruitgang dient.
De afgelopen achttien maanden zijn een bijzonder venster geweest van meedogenloze verbetering. Tab-aanvullingen maakten plaats voor agentic coding, wat op zijn beurt weer leidde tot het beheren van je agents met een harness. Ik ben gegaan van bewondering voor de productiviteitswinst naar het volledig beheersen van het spel, waarbij ik probeer het maximale uit de tools te persen.
Nieuwe waarheden
Projecten van een enkele ontwikkelaar kunnen nu het kaliber en de consistentie bereiken van grote ontwikkelingsteams. Je kunt en moet op maat gemaakte applicaties bouwen, en je hoeft je geen zorgen te maken over het inwerken van ervaren engineers; als ze hun stack door en door kennen, weten ze snel genoeg hoe ze aan die van jou kunnen bijdragen.
Maar bovenal heb ik geleerd dat de harness het belangrijkste is; het draaipunt waarop mijn verwachtingen samenkomen met de mogelijkheden van het Large Language Model (LLM).
Op dit moment wordt mijn setup ondersteund door twee abonnementen (Cursor, Claude) die ik indien nodig kan aanvullen met Pi. Alle drie delen mijn vaardigheden en AGENTS.md. Hoewel ik drie TUI's (Terminal User Interfaces) gebruik, heb ik een uniforme ervaring. Dit heeft de modellen voor mij tot een 'commodity' gemaakt; er is geen magische saus of speciale ervaring in Claude of Cursor die ik nodig heb om productief te zijn. Ik maak me geen zorgen over de overstap van Cursor naar Codex aan het einde van deze maand.
Het kostenvoordeel
In dit tijdperk van commodificatie kan ik uitstekende resultaten behalen met een reeks beschikbare modellen, waarbij ik sinds de release vooral leun op deepseek-v4-flash-0731. Het is zeldzaam dat ik mijn Anthropic API-budget aanspreek om Fable te gebruiken.
Ik gebruik Deepseek voor de meeste onderhoudstaken en eenvoudige klussen. Pas wanneer ik een serieuze feature exploreer of een grote refactor uitvoer met veel bewegende delen, grijp ik naar de frontier-modellen. Onlangs leerde ik over prewalk, een techniek van Can Bölük waarbij frontier-modellen worden gebruikt voor de planningsfase en de eerste taak, waarna het werk wordt overgedragen zodra het patroon is vastgesteld.
Ik heb dit gecombineerd met de splitsing tussen planner/worker/critic uit "Building an Advanced Agentic Harness". Een enkele prompt die plant, uitvoert en zichzelf bekritiseert, raakt vaak in de war over de eigen doelstellingen; daarom wordt elke rol geïsoleerd. Ik heb beide in een 'skill' gebouwd, met een ondersteunende Pi-extensie die op elk stadium van het werk kan overnemen.
Het proces verloopt als volgt:
- Exploratie: Leidt tot een plan dat is geformaliseerd in een expliciete DAG (directed acyclic graph) taaklijst.
- Worker: De worker neemt het over en richt zich op het implementeren van de DAG, node voor node.
- Critic: Zodra dit voltooid is, komt de critic in beeld om te vereenvoudigen en de implementatie in twijfel te trekken. Vaak zorgt deze fase ervoor dat de worker-fase opnieuw moet worden doorlopen.
- Promoter: Als de critic tevreden is, volgt de promoter. Dit is mijn herinnering dat een klus niet voltooid is totdat deze correct is gecommuniceerd naar anderen.
Ik heb de promoter-stap toegevoegd om een zwak punt van mij aan te pakken: de neiging om iets snel te verschepen en door te gaan. Omdat promotie subtiel is en gemakkelijk misgaat, en niemand van een critic houdt, laat ik dit via het frontier-model lopen om het meer gewicht te geven.
Hierdoor is mijn gebruik van Fable, zelfs in mijn meest intensieve contexten, met 75% gedaald. Dit voelt gezond, vergelijkbaar met een 'AI soak'. Ik kan mijn klanten bedienen en echte progressie boeken op mijn eigen projecten met mijn twee abonnementen van twintig dollar, terwijl ik schakel naar Pi voor Deepseek of een Fable-infusie.
De verbinding tussen product en harness
Mijn product is een camera-app die het eenvoudig maakt om een foto te nemen en deze om te zetten in een vectorgrafiek, één voor één. Het is leuk omdat het simpel is: de resolutie daalt, de foto wordt vereenvoudigd tot waardelagen en vormen. Het behoudt de context maar verwijdert de details, zodat je het zelf opnieuw kunt tekenen. Je print het uit en tekent eroverheen, of importeert het in Procreate.
Deze functionaliteit is via poster-driver beschikbaar voor de harness. Door het te openen in headless Chrome en de live site aan te sturen, kun je posters maken van elke grafiek of gedeconstrueerde video die je wilt. Dit maakt het scripten van de app net zo eenvoudig als het laden van een webpagina.
Een geavanceerd use-case dat voorheen alleen onhandige oplossingen had, is nu beschikbaar en leuk om te gebruiken:
# run from harness root
npm run make:animation artifacts/my-movie.mp4
Het LLM hielp me dit uit te vogelen en schreef een script dat ik in mijn harness bewaar, zodat het een miljard keer kan draaien zonder tokens te verbruiken. Het product is krachtiger geworden omdat de harness erbij kan. Er is ondersteuning voor de File System API; na het inschakelen hiervan in Brave synchroniseer ik mijn gedachten naar de werkdirectory.
Een andere creatieve toepassing die ik exploreer, is het werken aan een Blender-omgeving van mijn buurt in 3D, met posters die eroverheen zijn geplaatst. Een scène, een storyboard—veel meer dan ik via het web kan aanbieden. De app voelt nu volledig beschikbaar, op een manier die een jaar geleden onmogelijk was. Creatieve mensen kunnen nog steeds een non-AI tool op een AI-manier gebruiken, waardoor we de leukste delen van creativiteit voor onszelf kunnen behouden.
De harness ontleden
Ik leef mijn werkdag in deze harness. Mijn nvim-configuratie is gekoppeld aan de werkdirectory, waardoor het LLM weet welk bestand ik open heb, dit kan bewerken en—aangezien ik nog een langzame zwemmer ben—me kan helpen de juiste motions te gebruiken. Ik zie de harness als een mal (jig): het LLM bewerkt mijn configuratie samen met mij, zodat ik me kan concentreren op het werk terwijl ik gedisciplineerd blijf in het gebruik van vim-commando's.
De harness is zelfvoorzienend om meer te ondersteunen dan alleen een home-directory (sandboxing, een webinterface, File System Access API, Docker, Deno executable, etc.).
Ik refereer aan npm start, cursor-agent en claude als TUI's om het concept van een harness helder te houden. Alle TUI's delen dezelfde harness. Het is belangrijk dat alles controleerbaar (auditable) blijft, daarom zijn de TUI's geïnstrueerd om alles binnen de artifacts/ directory te houden. Cursor gebruikt .gitignore om bestanden te negeren, wat slim is, dus is een root zonder git vereist. Ik heb een skill die de harness synchroniseert met de repo in de werkdirectory. Skills, extensies en AGENTS.md zijn eersteklas burgers in de root, klaar om te worden gewijzigd en uitgebreid. TUI's moeten zich hieraan houden.
# auto-load the nearest AGENTS.md into claude code
claude() {
local dir="$PWD"
while [[ "$dir" != "/" ]]; do
if [[ -f "$dir/AGENTS.md" ]]; then
command claude --append-system-prompt-file "$dir/AGENTS.md" "$@"
return
fi
dir="${dir:h}"
done
command claude "$@"
}
Directorystructuur:
brayness/
├── AGENTS.md
├── AGENTS.local.md
├── bin/
├── prompts/
├── plans/
├── skills/
├── extensions/
├── artifacts/
└── work/
├── realness/
├── blog/
├── brayness/
├── nvim/
└── ...
Aanvankelijk was ik te voorschrijvend met mijn skills; ik leer nu om de specificiteit te verminderen. Er is een grens waarbij je tokens verspilt aan het 'mansplaining' naar machines. Naarmate de harness tot rust komt, zal ik een meer empirische benadering moeten hanteren om de impact van wijzigingen te bevestigen.
Hieronder staan enkele skills gekoppeld aan mijn planningsboog:
- Explore:
nvim-buffers, flexible-visual-system, vault, interview-prep, vuetify-to-semantic
- Planning:
planner, planning, memory, previous-work, project-tooling, brayness-sync
- Worker:
realness-design, typography, user-interface, rust-best-practices, agent-browser, logo-finder
- Critic:
critic, test-coverage, simplify, vue-inspect
- Promoter:
hyperframes, readable, zoom-to-ableton, motion-systems
Nu ik weer vaste grond onder mijn voeten heb, voel ik me niet langer verloren in cursor-agent of Claude. Ik heb regie over mijn workflow en kan bepalen hoe ik oplossingen engineer. Wat ik leer via Pi, vloeit vaak terug in mijn ervaring met Claude en Cursor. Bij Pi vertrouw ik erop dat ik me door elk probleem heen kan slaan. Laat de harness de scripts draaien en coördineer deze scripts met de LLM's.
In de afgelopen drie maanden merk ik dat ik de editor steeds vaker verlaat voor de terminal. Er is een harmonie van redenen voor: het toevertrouwen van code aan agents, de overstap naar Ghostty en het bestrijden van 'skill rot' via nvim. Normaal gesproken zou zo'n herschikking mijn output lamleggen, maar mijn persoonlijke projecten en klantwerk bevinden zich op het hoogste niveau en tempo. Kleine zaken, zoals het bouwen van context rondom langlopende agentic taken met splits, hebben me geholpen in de AI-ervaring te landen.
Dit alles werd urgent toen de overheid Fable verbood en begon te signaleren dat ze privilege uitoefenden over de industrie. Ik, en naar ik aanneem honderdduizend andere softwareontwikkelaars, voelden plotseling de noodzaak om toegang tot verschillende modellen te diversifiëren. Dus, in naam van de vrijheid, besloten we collectief de Chinese modellen te proberen. Pi ging van een tool waar ik gewoon mee speelde naar het belangrijkste onderdeel van mijn rig.
***
Bronnen en referenties:
- Commodification and Circularity
- Prewalk - Stencil Blog
- Building an Advanced Agentic Harness
- Realness About
- Poster-driver
- Brayness GitHub
- Hacker News Discussion