Knowledge Base

Mods in Claude Code

Inleiding

In oktober 2026 heeft Anthropic een nieuwe mogelijkheid toegevoegd aan Claude Code, de zogenaamde mods. Je kunt een mod toevoegen aan het rijtje CLAUDE.md, rules, skills, agents en hooks. In mijn eerdere artikel hierover (NL|EN) kondigde ik deze bijdrage al aan, omdat mods precies uitkwamen nadat ik dat artikel had afgerond.

Wat is een mod?

Een mod is een plugin voor Claude Code. Hij lijkt nog het meest op een hook. Het verschil is dat een hook draait als los script buiten Claude Code, terwijl een mod uitgevoerd wordt als code binnen Claude Code zelf. Een mod heeft daardoor veel meer mogelijkheden dan een hook.

Je kunt niet alleen op meer events inhaken dan bij hooks het geval is, maar ook heel andere dingen doen. Denk bijvoorbeeld aan een eigen pane of balk in Claude Code met de informatie die jij wilt zien, aan het aanpassen van onderdelen van de interface van Claude Code zelf, of aan het uitvoeren van een commando zonder dat Claude daarvoor een extra turn nodig heeft. En dat is nog lang niet alles.

Technisch is een mod een gewone plugin met JavaScript- of TypeScript-code. Een mod draait in dezelfde omgeving als waarin jij zelf werkt, dus niet in een sandbox. Hij kan overal bij waar jouw gebruikersaccount ook bij kan, en kan ook gebruikmaken van je connectors. Daardoor kun je bijvoorbeeld ook gebruikmaken van de omgevingsvariabelen van je systeem.

In dit artikel geef ik twee voorbeelden van een mod. De eerste is een mod die een pane toont met de gegevens van de Jira-story waar ik aan werk, op basis van de naam van de branch. De tweede is een balk boven de promptinvoer met een knop om een build te starten. De eerste laat vooral de visuele mogelijkheden zien, de tweede hoe je een proces buiten de sessie om kunt laten uitvoeren en de uitkomst ervan wel in je sessie terug kunt krijgen.

Wat ik niet ga doen, is uitgebreid uitleggen hoe een mod in elkaar zit. Net als skills, agents en hooks bouw ik een mod gewoon met Claude Code zelf. Wil je het wel handmatig kunnen, lees dan de overview en de reference guide in de documentatie van Claude Code.

Onderstaande tabel laat zien hoe de verschillende opties, van CLAUDE.md tot hooks, zich verhouden tot een mod.

Optie Wat het is Wanneer actief Wie beslist Wat het kan
CLAUDE.md / rules Markdown met instructies Bij sessiestart, of bij een matchend pad Altijd geladen, Claude volgt het Claude informeren en sturen
Skill SKILL.md met instructies en eventueel scripts Als de description matcht of via /commando Claude (of de gebruiker) Kennis en werkwijze voor een situatie toevoegen
Agent Subagent met eigen context, tools en model Als Claude of de gebruiker hem start Claude (of de gebruiker) Een taak los van de hoofdsessie uitvoeren
Settings hook Shellcommando, HTTP-request, prompt of agent in settings.json Op een vast lifecycle-event Gegarandeerd, buiten Claude om Een actie toestaan of blokkeren, loggen, context toevoegen
Mod JavaScript/TypeScript-code in een plugin, binnen Claude Code Op vaste events, ook interface-events Gegarandeerd, buiten Claude om Events herschrijven of overnemen, interface tekenen, commando’s en tools toevoegen, modelkeuze sturen

De eerste mod bouwen

Voor de mod die de gegevens van de Jira-story weergeeft, heb ik Claude Code heel eenvoudig de volgende opdracht gegeven:

Create a mod to show a window in Claude Code. In this window I’d like to see the JIRA story title and description I’m working on. Get the issue key from the branch name.

Of Claude nog wat extra vragen stelt, hangt een beetje af van de skills die je hebt geïnstalleerd en van je persoonlijke instructies. Zonder verdere instructies zal Claude echter deze mod in het scratchpad van je sessie gaan bouwen. Let op dat je op een gegeven moment deze mod in de standaardmap van je profiel laat zetten of in een marketplace als je die gebruikt.

Zoals je waarschijnlijk al gewend bent, zal Claude Code bij het coderen van de mod zelf keuzes maken of keuzes aan je voorleggen. In dit geval was al snel de vraag: hoe kom ik aan mijn credentials voor Jira?

De eenvoudigste optie is om dit via de configuratie van de mod te laten regelen. Je kunt aangeven welke velden je daarin wilt hebben en ook of ze gevoelige data bevatten. In dat laatste geval worden deze waarden in een beveiligde opslag bewaard. Zelf heb ik ervoor gekozen om te werken met omgevingsvariabelen. Weeg in ieder geval goed de risico’s hiervan af.

Regel je het via de configuratie, dan kun je via /plugin de mod opzoeken en via het tandwielicoontje de settings openen. Dan krijg je de velden te zien die je gedefinieerd hebt.

Configuratiescherm van de jira-story mod

Mijn eerste versie van de mod zag eruit zoals hieronder te zien is. De omschrijving bevat de opmaakcodering van Jira zelf.

Eerste versie van de Jira-pane

Vervolgens heb ik Claude gevraagd om de omschrijving op te maken en nog wat meer gegevens toe te voegen. Dit is het eindresultaat:

Eindresultaat van de Jira-pane

Je ziet ook dat je in de mod acties kunt laten uitvoeren. Er is een Refresh-knop die de gegevens opnieuw kan ophalen. Er was door Claude automatisch ingebouwd dat de mod om de 30 seconden kijkt op welke branch je werkt. Is die hetzelfde gebleven, dan worden de gegevens niet ververst. Het kan echter zijn dat je in Jira ondertussen wel iets gewijzigd hebt en dat je dat hier ook wilt zien. Dat kan dan via de Refresh-knop.

Als je vervolgens de folder bekijkt met de bestanden van de mod, dan zie je het volgende:

Bestanden van de mod

De mod is in de basis een Claude Code-plugin met een beschrijving in de plugin.json. Daarin staan ook de configuratievelden gedefinieerd met een type, titel en omschrijving. Hier kun je ook definiëren of een veld sensitive is of niet.

De register.tsx is het kernbestand van de mod. Dit bestand wordt door de engine geladen via de hooks.json. De wiki.tsx is een hulpmodule die de in Jira opgemaakte tekst omzet naar de weergave in de pane.

De mod met een directe actie

De eerste mod draaide vooral om de visuele weergave. De tweede mod kan op elk moment een actie uitvoeren, zonder dat de sessie hierop hoeft te wachten en ook zonder dat er iets naar Claude verstuurd wordt. Deze mod kan via een knop een build starten en het resultaat laten zien, zonder het direct in de sessie te verwerken.

De aanpak is hetzelfde: via een prompt heb ik eenvoudigweg gevraagd om deze mod voor mij te bouwen.

Create a new mod “build-app” with a button to build the software with a predefined script (via config). It should be possible to config a Powershell script or a command line batch file. When the build button is pressed, the build should be executed without a turn. The build result will show the errors, hints and warnings. When the build has finished, the result is shown in the session as a transcript, but not yet sent to the prompt. The user can choose what to do with it.

Zonder verdere vragen resulteerde dit in een balk boven de promptinvoer met een eenvoudige Build-knop.

Build-balk boven de promptinvoer

In de terminal ziet het er zo uit:

Build-balk in de terminal

Tip: het is raadzaam om de mod te bouwen met de command-line interface (CLI) van Claude Code. Gaat er namelijk iets mis met de mod, bijvoorbeeld bij het laden ervan, dan zie je dat wel in de CLI en niet altijd in Visual Studio Code.

In eerste instantie waren de instellingen voor het buildscript centraal in de configuratie gezet. In veel situaties heb je per repo of project aparte buildscripts. Daarom heb ik gevraagd om de mod zo aan te passen dat je via een configuratiebestand in de map waar Claude draait een projectspecifiek buildscript kunt instellen.

Deze instellingen wil ik zelf niet in een instellingenscherm gaan kopiëren en plakken. Dat doe ik bij voorkeur door het te vragen aan Claude. De mod reageert daarom nu op een vraag over het configureren van de build-app. Op dat moment wordt een instructie aan je prompt toegevoegd, zodat Claude dit voor je regelt. In de sessie wordt dan aan je gevraagd welk buildscript er gebruikt moet worden, en Claude maakt vervolgens het configuratiebestand aan.

Na het instellen kun je de build starten met de knop of met /build-app. Daarna zie je de voortgang van de build in de balk. Terwijl de build loopt, kun je gewoon doorgaan met waar je mee bezig bent.

Voortgang van de build

Voortgang van de build in de balk

Als de build klaar is, dan wordt het resultaat getoond, plus de opties om het resultaat in je promptinvoer te zetten (Put in prompt) of te negeren (Dismiss). Kies je voor Put in prompt, dan wordt het hele resultaat van de build (dus niet alleen die ene regel) in je promptinvoer gezet.

Resultaat van de build met Put in prompt en Dismiss

Resultaat van de build in de terminal

De achterliggende techniek

Om wat inzicht te geven in wat een mod kan, en om te laten zien dat hij echt dieper ingrijpt dan een hook, heb ik hieronder toch wat technische details uitgewerkt.

  • Het command.run-event zorgt er in de mod voor dat /build-app wordt uitgevoerd en in dit geval ook daadwerkelijk de build start.
  • Via het prompt.submit-event wordt bekeken of er gevraagd wordt om de build-app in te stellen. Is dat zo, dan wordt de prompt uitgebreid met de instructie om naar het buildscript te vragen en met de instructie hoe het settingsbestand weggeschreven moet worden.
  • Via de enginefunctie $.process.spawn wordt het buildscript uitgevoerd, afhankelijk van het type met PowerShell of cmd.exe.
  • Er worden diverse andere enginefuncties van Claude Code gebruikt om dit proces te ondersteunen, zoals $.session.root en $.clock.now. Voor het tekenen van de UI zijn er functies als $.ui.render, $.ui.open en $.ui.toast.
  • De eerste mod, met de Jira-stories, maakt ook gebruik van $.http.fetch en een timer via $.clock.every.

Bovenstaande maakt opnieuw het grote verschil met skills, hooks en agents duidelijk. Het laat zien dat een mod zich in Claude Code zelf nestelt en gebruik kan maken van de functies van de engine.

Toegevoegde waarde voor organisaties

Als developer heb je ongetwijfeld al diverse ideeën voor een eigen mod. Mods kunnen echter ook organisatiebreed van toegevoegde waarde zijn. Op organisatieniveau kun je namelijk mods publiceren en ervoor zorgen dat deze mods bij iedereen standaard ingeladen worden. De mogelijkheden zijn overigens wel enigszins afhankelijk van je abonnement en van hoe je Claude Code centraal beheert.

Heb je dat ingeregeld, dan kun je denken aan mods die zaken controleren op het gebied van security of privacy, aan ondersteuning bij secure coding, of aan het blokkeren van bepaalde git-acties, zoals een force push of een push naar main. Ook auditlogging behoort tot de mogelijkheden.

Aan de slag!

Het doel van dit artikel is vooral om je kennis te laten maken met het fenomeen mods in Claude Code. Hopelijk heeft het je geïnspireerd om er zelf mee aan de slag te gaan. Misschien kun je nu eindelijk de dingen in Claude Code aanpassen die je al zo lang wilde veranderen of toevoegen. Succes!

Written by Kees de Kraker
Directeur

Contact

Laat ons helpen jouw ambities concreet te maken.