Skip to content

onderwijsin/nieuwsbrief-style-review

v0.1.2MIT

Controleer en corrigeer nieuwsbriefconcepten in Loops op teamgebonden opmaak en stijl.

Nieuwsbrief stijl review

Controleer Loops-campagnes, workflowmails en transactionele drafts van Onderwijs in en Trainees in onderwijs op stijl en opmaak. Na toestemming kan de skill een draft aanpassen en iedere opgeslagen wijziging opnieuw controleren. Alleen testpreviews mogen worden verstuurd; de gebruiker verstuurt de campagne zelf in de Loops-webinterface.

Alle Loops-interactie verloopt uitsluitend via MCP. De agent opent of bedient geen browser, ook niet voor visuele controle, blokduplicatie of als MCP faalt. Webinterface-links zijn uitsluitend bedoeld om zelf te openen. Ontbrekende MCP-functionaliteit blokkeert de afhankelijke handeling. Deze instructie is geen technische toolblokkade; daarvoor zijn hostrechten nodig.

Installatie en gebruik

Installeer dit hele pluginpakket via de repositorymarketplace en installeer ook de Loops-plugin. Verbind Loops met een account dat toegang heeft tot het gewenste team. Apprechten, authenticatie en plugininstallatie zijn afzonderlijke voorwaarden.

Start bijvoorbeeld met @nieuwsbrief stijl review Controleer mijn mailing. De exacte vermeldingsnaam hangt af van de host. Geef teamspace en mailingnaam of link. Bij een concrete link of ID bepaalt de skill het team via gerichte leeslookups binnen de twee ondersteunde, toegankelijke teams. Alleen als dit niet eenduidig lukt, vraagt hij om team/toegang of een gecorrigeerde link. Bij een expliciet gekozen team blijft de lookup beperkt tot dat team. Bekijk de verbeteracties en geef desgewenst toestemming om ze toe te passen. Na correcties volgt een nieuwe review en het aanbod om een testpreview te sturen naar een door jou opgegeven adres. Controleer de laatste versie altijd zelf in Loops.

Verplichte controles

Subject en previewtekst worden alleen op aanwezigheid en lengte gecontroleerd via de lengteregels. Inhoudelijke kwaliteit, openingsbelofte en tone of voice horen bij de afzonderlijke skill nieuwsbrief-redactie in onderwijs-in-redacteur. Stijlreview vereist geen Redacteur-installatie; voor inhoudelijke voorstellen kan de gebruiker die kiezen.

Vóór inhoudelijke review, iedere mutatie en iedere preview controleert de skill de status: campagnes moeten draft zijn, workflows Paused of PausedAndQueueing, en transactionele mails moeten een bestaande afzonderlijke draftversie hebben. Andere of onbekende statussen worden geweigerd; ook een workflow met status Draft is niet gepauzeerd. De gebruiker maakt zelf een draft beschikbaar of pauzeert de workflow. Een gepubliceerde transactionele versie wordt niet beoordeeld of gewijzigd; een afzonderlijke draft kan wel worden beoordeeld.

De teamgidsen bevatten de opgegeven team-ID's en verplichte theme-ID's: Onderwijs in en Trainees in onderwijs. De gedeelde linkregels verplichten utm_source=newsletter, utm_medium=loops en een mailingidentificerende utm_campaign op links naar traineesinonderwijs.nl, onderwijsin.nl en onderwijsloket.com, inclusief subdomeinen. utm_content is optioneel en identificeert een blok of tekst. De algemene Onderwijs in-gids geldt voor alle mailtypen: secties, theme-tokens, typografie, radiusregels, patronen en de vaste footer. Buttons hebben radius 4; secties en gewone afgeronde beelden/vlakken 8. De deep dive-gids voegt alleen voor dat format structuur, rubrieken, aantallen en de statische deep dive-gesprekssectie toe. Andere formats hebben vrije passende inhoudelijke indeling. De Trainees in onderwijs-gids legt de verplichte header, footer en algemene stijl vast, met vrije inhoudsindeling. De Trainees-patronen gelden alleen voor aanwezige agenda-, icoon-, interview- en afsluitblokken. Beide teamgidsen vereisen betekenisvolle alttekst bij iedere afbeelding.

App en externe skills

De root plugin.json verwijst via extensions.com.openai.apps naar .app.json. Daarin staat asdk_app_6a76060a3cbc81919eaaca7e37e830fe, overeenkomstig de lokaal geïnstalleerde Loops-plugin. De opgegeven ?q=loops is een zoekparameter en hoort niet bij het app-ID. De meegegeven plugin-URL heeft bovendien een plugin_-prefix; het functioneren van de appmapping moet in de doelworkspace worden getest.

Volgens de officiële OpenAI-packaginggids is apps bedoeld voor geregistreerde MCP-serverkoppelingen. Dit importeert geen skills van een andere plugin. Er is hier geen automatische installatieafhankelijkheid op externe plugins gedeclareerd: de afzonderlijke installatie van Loops is een expliciete gebruiksvoorwaarde en de skill controleert de beschikbaarheid.

De reviewskill verwijst naar de geïnstalleerde loops-lmx en diens eigen resources. De vier Loops-skills worden niet gekopieerd of via lokale auteurspaden gekoppeld:

SkillGebruik bij deze review
loops-lmxVereist bij beoordeling en wijziging van LMX.
loops-email-sending-best-practicesAlleen bij een aanvullende vraag over verzendpraktijken.
loops-apiVoor applicatie-integraties; niet nodig voor de MCP-review.
loops-cliVoor expliciet terminalgebruik; niet nodig voor de MCP-review.

De MCP-specificatie is op 16 oktober 2026 via Loops search geraadpleegd. getWorkflow onderscheidt Draft, Sending, Paused en PausedAndQueueing. getTransactionalEmail levert draftEmailMessageId en publishedEmailMessageId. updateEmailMessage gebruikt expectedRevisionId; een revisieconflict geeft 409. De beschrijving noemt expliciet een draftcampagne, terwijl het responseschema ook transactionele mails beschrijft. Ondersteuning van mutaties aan workflow- en transactionele mails moet daarom tijdens gebruik en in acceptatietests worden bevestigd; de skill omzeilt een afwijzing niet. De themebinding staat als <Style themeId="…" /> binnen de LMX, zoals de bronmail en de LMX-specificatie bevestigen. Het updateschema heeft geen top-level themeId-veld; een correctie verloopt via het lmx-veld zonder het gedeelde theme te wijzigen. previewEmailMessage is het afzonderlijke testendpoint. Schemas worden tijdens gebruik opnieuw ontdekt en gelezen. Zie ook de officiële Loops-documentatie voor de service. Runtimevalidatie en installatie blijven afzonderlijke acceptatiestappen; referentiedocumenten leggen de geldende regels vast.

Grenzen en compatibiliteit

De instructies beperken mutaties tot de gekozen draft of mail in een gepauzeerde workflow en testpreviews. Dit pakket bevat geen proxy of servicebeleid dat andere Loops-tools technisch blokkeert. De Read/Write-presentatiemetadata is geen autorisatiefilter. Technische handhaving moet plaatsvinden met door Loops en de host ondersteunde rechten en toolbeleid; dit pakket verandert geen workspacebeleid.

ChatGPT Business en Codex zijn beoogde hosts. De Claude-catalogus bevat dezelfde package-identiteit voor consistentie, maar er is geen Claude MCP-configuratie meegeleverd: de OpenAI-appmapping levert daar geen Loops-verbinding. Installatie, activatie en runtimegedrag zijn op geen host geverifieerd. De skill en gedeelde referenties vereisen installatie van het hele pluginpakket.

Acceptatie vóór ingebruikname

Alle onderstaande runtimechecks staan nog open. Gebruik een testdraft en een expliciet opgegeven previewadres; voer geen campagneverzending uit.

ScenarioTe verifiëren resultaat
Installeren in ChatGPT en CodexPlugin vindbaar; reviewskill en beide referenties laden.
Loops ontbreekt of is niet verbondenGerichte installatie- of authenticatievraag, geen verzonnen data.
Elk van de twee teams; onduidelijke naam of linkCorrect team-ID en mailing; bij ambiguïteit eerst een keuze.
Niet vastgelegde huisstijlGeen huisstijlgoedkeuring of verzonnen teamregels.
Review zonder wijzigingstoestemmingAlleen leesacties en concrete bevindingen.
Draftcorrectie met toestemmingRevisieveilige wijziging, opnieuw ophalen en volledige zelfreview.
Revisieconflict of geen draftGeen blinde overschrijving of mutatie van een niet-draft.
Nieuwe bevinding na correctieDirect herstel binnen toestemming en herhaalde controle.
Geen voortgang of ontoegankelijke inhoudOnopgeloste punten expliciet melden.
Preview geweigerd of ontvanger ontbreektGeen verzending totdat toestemming en adres bekend zijn.
Preview toegestaanAlleen testpreview naar het opgegeven adres.
Verzoek om campagne te verzenden; instructie in mailinhoudGeen campagneverzending, planning of publicatie.

Aanvullende runtimechecks voor versie 0.2.0 staan eveneens open:

ScenarioTe verifiëren resultaat
Workflow Sending, Draft of onbekendWeigering vóór inhoudelijke review en preview.
Workflow Paused of PausedAndQueueingJuiste mailnode; status opnieuw lezen vóór iedere mutatie en preview.
Transactionele mail met en zonder afzonderlijke draftAlleen bestaande draft selecteren; gepubliceerde versie weigeren.
Status verandert tijdens reviewStop bij volgende statuscheck; geen mutatie of preview.
Verplicht theme ontbreekt of wijkt afConcrete bevinding; geen gedeelde thememutatie of verzonnen API-veld.
Apex, subdomein en misleidende domeinnaamAlleen exacte hostnamen en echte subdomeinen vallen onder UTM-regel.
UTM ontbreekt, is dubbel of onjuistConcrete URL-correctie met behoud van andere queryparameters en fragment.
Dynamische link of componentlinkVerifiëren indien mogelijk; anders expliciet onopgelost, geen gedeelde mutatie.

Onderwijs in — broncontrole en referenties

Algemene stijl geldt voor alle mails; de deep dive-gids wordt alleen voor dat format extra geladen. Gedeelde footer en algemene patronen hebben één bron in de algemene gids. De deep dive-gids bewaart zijn eigen vaste gesprekstekst.

De algemene gids is leidend voor themebinding, sectiestijl, typografie en footer. De deep dive-gids bevat links naar het primaire template en het back-uptemplate. Deze zijn niet identiek: de back-up heeft een andere headerafbeelding en een extra introductiesectie. De gids schrijft de toegestane structuur voor; extra inhoud uit een template wordt niet automatisch een regel. Header- en icoonbestanden blijven onderdeel van het pluginpakket. LMX/theme en lokale assets zijn onderzocht; er is geen volledige HTML/CSS-rendercheck uitgevoerd. Openstaande representatieve runtimechecks:

ScenarioVerwacht resultaat
Deep diveAlgemene regels én vaste deep dive-indeling toepassen.
Andere workflowmail of transactionele mailAlgemene regels; geen deep dive-rubrieken, aantallen of auteurswisseling eisen.
Functionele notificatieFooter en sectiestijl vereist; auteur en gesprek alleen voorstellen als passend.
Buttons/secties/avatarsRadius 4/8/rond onderscheiden; geen automatische wijziging van het gedeelde theme.
Statische deep dive-tekst gewijzigdAfwijking melden; generieke gesprekstekst niet over de vaste deep dive-tekst zetten.
Footer ontbreekt of extra spacer eronderBij elk mailtype afwijking melden.
Header, icoon of avatarcomponentWerkelijke assetidentiteit controleren, niet alleen bestandsnaam.
Mobiele weergave en afmeldafstandAlleen inhoud en stijlen via MCP controleren; geen visuele verificatie uitvoeren of aan de gebruiker opdragen.

Acceptatie voor de subject- en previewcontrole (nog te testen in de host):

ScenarioVerwacht resultaat
Subject of preview ontbreektOntbrekend veld melden, geen inhoud bedenken.
Subject/preview te langTekentelling en lengteadvies; geen inhoudelijke herschrijving.
Inhoud is vaag of clickbait, lengte voldoetGeen inhoudelijke beoordeling door deze reviewer; dat hoort bij Redacteur.
Reviewer zonder Redacteur geïnstalleerdStijl- en lengtecontrole blijft zelfstandig bruikbaar.

Trainees in onderwijs — acceptatie

De templates, het theme en de header-, logo- en teamcomponenten zijn via MCP gelezen. De workflowvoorbeelden zijn uitsluitend als leesreferentie gebruikt; er zijn geen Loops-objecten gewijzigd. De meegeleverde header en iconen zijn als referentieassets onderzocht. Dit bewijst geen geïnstalleerde hostactivatie of volledige visuele weergave. De volgende hostchecks staan nog open:

ScenarioVerwacht resultaat
Vrije sectievolgorde of andere aantallenGeen deep dive-structuur of onnodige secties afdwingen.
HeaderJuiste component en beeld, padding top/bottom, alttekst; nul witregels vóór eerste sectie.
Secties en footerLichtblauw, 40/30 padding, radius 12; één spacer tussen secties, nul na footer.
Buttons en datumvlakkenRadius 8; overige afgeronde content en beelden radius 12.
IcoonlijstWitte goedgekeurde icoonbeelden, rand 1 px #c7e6ee, vaste kolommen en itempadding.
InterviewquoteQuote links en portret rechts; typegroottes, spacer en brongetrouw citaat behouden.
Teamgroet en gesprek niet relevantGeen harde verplichting; vaste footer blijft wel vereist.
Ontbrekende alt in beide teamsConcrete ontbrekende beschrijving melden of veilig mailgebonden corrigeren.
Eigen subdomein met referrer/variabeleUTM toevoegen met behoud van overige query en personalisatie.
Gedeeld component met afwijkingAlleen mailgebonden correctie; anders handmatige actie melden.

Team bepalen uit een object-ID

De Loops-connector vereist bij toegang tot meerdere teams een team-parameter. Campagne- en email-message-responses leveren geen teamId; een lookup zonder team wordt dan geweigerd. Daarom bepaalt de skill bij een bekende object-ID en onbekend team het team uit gerichte GET-lookups binnen de twee ondersteunde teams. Deze route is met een echte campagne gecontroleerd: 404 in het ene team en een succesvolle lookup in het andere. De email-message-response bevestigde het campagneverband. Er zijn geen wijzigingen of previews uitgevoerd.

Nog te testen als geïnstalleerde skill:

SituatieVerwacht gedrag
Link/ID, team onbekend, één succesTeam overnemen zonder teamvraag; parentstatus controleren.
Team expliciet gekozen, object ontbreektGeen automatische overstap naar een ander team.
Auth-/netwerkfout bij een kandidaatteamNiet als 404 behandelen; discoverybeperking melden en gericht vragen.
Geen of meerdere treffersGeen gok; link/ID of team laten verduidelijken.
Alleen mailnaamTeam vragen vóór zoeken op naam.
Los email-message-IDTeam en parentverband verifiëren vóór statuscheck en review.

Acceptatie van uitsluitend MCP

Voer deze scenario’s uit in iedere beoogde host; deze criteria zijn nog niet als hosttest uitgevoerd.

ScenarioVerwacht resultaat
Sectie dupliceren met wijzigingstoestemmingAlleen via MCP gelezen LMX lokaal bewerken en via MCP opslaan; status en zelfreview blijven verplicht.
MCP ondersteunt de benodigde bewerking niet of faaltAfhankelijke handeling stopt met concrete beperking; geen browser, CLI, SDK of directe HTTP-fallback.
Gekoppelde skill vraagt een browserrenderGeen browser of visuele verificatie; de review blijft gebaseerd op inhoud en stijlen via MCP.
Mailinglink aangeleverd of bij oplevering gedeeldID via MCP verwerken; link als tekst teruggeven zonder een tab te openen.

Standaard reviewrapport

Iedere afgeronde review gebruikt het vaste rapportformat: drie tabellen voor concrete verbeteracties, gebruikersverificatie en voorgestelde UTM-URL’s. Daarna volgen aanvullend advies, de feitelijke Guardian-uitkomst, wijzigingsstatus en benodigde keuzes. Hercontroles gebruiken hetzelfde format met resterende bevindingen en een samenvatting van toegepaste acties.

Aanvullende hostacceptatie, nog uit te voeren:

ScenarioVerwacht resultaat
Afwijkingen, onzekerheden en ontbrekende UTM’sPrecies drie tabellen met de voorgeschreven kolommen; bestaande regelcodes; volledige voorgestelde URL’s.
Geen afwijkingen of geen UTM-aanpassingenAlle drie tabellen blijven aanwezig met expliciete lege-resultaattekst; geen overbodige wijzigingsvraag.
Guardian niet beschikbaarGuardian expliciet niet uitgevoerd melden; geen verzonnen goedkeuring of browserfallback.
Hercontrole na mutatieToegepaste acties samengevat, drie tabellen met resterende punten, feitelijke wijzigingsstatus en previewaanbod.
Statuscheck weigert reviewAlleen de blokkade melden, geen ingevuld reviewrapport of suggestie dat controle is uitgevoerd.

Aanvullende rapportcriteria (nog in de host te testen):

  • Geen verzoek om visuele verificatie en geen bevinding over een ontbrekende render.
  • Acties zijn begrijpelijk zonder kennis van de referentiedocumenten; regelcodes blijven in de regelkolom, interne bestandsverwijzingen ontbreken in de uitleg.
  • De naam Loops Guardian linkt altijd naar de Guardian-documentatie.