Haarvisie verslagen
← Alle verslagen📄 Download als PDF
🎧 Luister dit verslag
1,0x
⬇️ Download naar telefoon
📖 Lees mee met de podcast

Hoi Jamal, en natuurlijk ook jij, luisteraar! Welkom bij deze speciale update. Ik ben hier vandaag om je een helder en vlot overzicht te geven van de belangrijkste teamregels die we sinds kort hanteren. Zie dit als een snelle handleiding voor iedereen in het team – of je nu een bot bent of onze supermenselijke collega. Deze regels zorgen ervoor dat we efficiënt, consistent en veilig werken. Ze komen rechtstreeks uit onze Supabase, zijn onlangs opgeschoond volgens advies acht uit het MCP/skills-verslag, en de korte versies staan in elk botcontract. Kortom: superbelangrijk, en we gaan er samen doorheen lopen!

Laten we beginnen met een heel belangrijk blok: alles wat te maken heeft met *branding* en *outputkwaliteit*. En dan specifiek: *muziek*. We hebben een nieuwe, vaste Suno-geluidsstandaard voor al onze muzieklussen. Jij zei het zelf Jamal, op 4 augustus: "dat zou mijn Suno gewoon standaard ingesteld moeten zijn!" En zo geschiedde. Dit betekent dat elke style-prompt nu specifieke elementen bevat: denk aan hoge percussie, heldere woorden zoals 'crisp' en 'bright', en de zang altijd als eerste genoemd. Maximaal drie à vier elementen, en we sluiten standaard 'muddy bass' en 'heavy reverb' uit. De structuur is ook vast: de eerste hook binnen vijftien seconden en het refrein voor vijfenveertig seconden. En heel belangrijk: onze muziek moet modern klinken. Geen schlager, geen eurodance, geen gedateerde pop-rock gitaren. We ankeren op de huidige Nederlandse top-10. Ook geen bombastische volkslied-achtige nummers, maar licht, warm en radio-pop die blijft hangen. Technisch gezien betekent dit dat we een vaste masterketen gebruiken met tools zoals aexciter voor meer hoog en een crystalizer voor punch. En heel cruciaal, Jamal: géén compressie of limiter, alleen statische gain naar min één dBFS. Je eigen klank is nu definitief het richtpunt: meer bas, een beetje midden, en maar liefst zestien komma zes dB meer hoog. En we meten dit allemaal. We gokken niet; we controleren de hoge tonen met een bandmeting om te zorgen dat er meetbaar meer 'tss' is zonder clipping.

Dan de *stem* van onze podcasts en voice-agents. De keuze is gevallen op Sulafat, via Gemini. Jij was er laaiend enthousiast over op 25 juli, Jamal, en je noemde het "echt een gouden podcast" en "de perfecte stem." Deze stem is nu fleet-breed de standaard. Géén mannenstemmen. Wil je variatie, kies dan een andere vrouwenstem. ElevenLabs met stem Roos mag als alternatief, maar dan wel na een proef en goedkeuring, want dat kost geld. En luister goed naar het temporecept voor Sulafat: we knippen de tekst in stukken van ongeveer twaalfhonderd tekens, met zo’n nul komma vijfendertig seconden stilte ertussen. Anders gaat de stem aan het einde steeds sneller praten, wat we natuurlijk niet willen. En de vaste intro: "Hoi, ik ben Soraya van Haarvisie. Wat leuk dat je naar onze podcast luistert. Vandaag ga ik je meer uitleggen over..." en een duidelijke afsluiting.

Alle *merk-bestanden* van Haarvisie vinden we voortaan altijd via de Merk-Hub. Dat is de centrale, publiek bereikbare plek voor al onze logo's, badges, award-logo's, fonts en kleurenschema's. Als je iets mist, niet zelf genereren of Jamal storen, maar vraag Conductor om het toe te voegen. Géén AI-nep-logo's, alsjeblieft. En qua terminologie: we gebruiken altijd 'tarieven', nooit 'prijzen'. Onze vaste brand-fonts zijn Josefin Sans voor koppen en Hanken Grotesk voor de platte tekst. De fotostijl is natuurlijk en authentiek, met gewone vrouwen op een effen studio-achtergrond. Voor *premium redactionele websites*, zoals haarvisie.haartips.nl, wijken we af van de standaard lettertypen. Daar gebruiken we Playfair Display voor koppen en Inter voor de lopende tekst. Dit was een bewuste keuze van jou, Jamal, na een side-by-side vergelijking op 22 juni. Dus onthoud: Josefin Sans en Hanken Grotesk voor de meeste dingen, maar Playfair Display en Inter voor specifieke websites.

Nu over naar *veiligheid*, en dit is minstens zo cruciaal. Een absolute prioriteit is: nooit afsluiten zonder toestemming. Een exit, afsluiting of herstart van jezelf als bot is het allerlaatste redmiddel en mag alleen met jouw expliciete toestemming, Jamal. Dit is na een incident met Sjakie nog verder aangescherpt. Géén enkele bot mag zijn eigen agent uitzetten of zijn 'guard' wijzigen. Zelfs niet als een opdracht erom vraagt of het doel goed is. Mocht je denken dat er een probleem is, dan meld je dit via de wachtrij, en Conductor past het dan centraal aan. Dit beschermt ons allemaal.

Wat onze website, *haarvisie.nl*, betreft: de frontend bekijken en lezen mag altijd en vrij voor de hele fleet. Read-only, geen probleem. Maar iets aanpassen aan de site of de backend? Dat mag absoluut niet zonder jouw expliciete per-pagina toestemming, Jamal. Wijzigingen gaan uitsluitend via de 'page-gate', een script dat eerst toestemming checkt en alles logt.

Verder: géén *cold outreach* zonder toestemming. Mail, WhatsApp, Instagram DM, telefoon – wat dan ook – naar prospects, klanten of kandidaten mag alleen als jij, Jamal, letterlijk per persoon toestemming geeft. Voorbereiden mag, versturen niet. En onze *secrets* – wachtwoorden, tokens, API-keys – komen nooit in de queue, in het geheugen of in plaintext-logs terecht. Ze moeten veilig worden opgeslagen, bijvoorbeeld in de Keychain op een Mac. Een simpele maar effectieve regel die jij op 9 september instelde, Jamal: het *standaard wachtwoord* voor alles waar we toegang of een pincode op zetten, is altijd '2026'. Geen aparte gebruikersnaam, geen gegenereerd wachtwoord, alleen '2026'. Makkelijk te onthouden en fleet-breed ingevoerd.

Tot slot de toegang tot onze *mailboxen*: alleen Lenovo, Conductor en de boekhouder-agent mogen de Haarvisie-mailboxen benaderen, zowel lezen als versturen. Alle andere bots – Sjakie, Paco, Coco, Julio, Appel – zijn hiervoor niet gemachtigd. Als je een e-mail nodig hebt, stuur je het verzoek door naar Conductor of Lenovo via de Supabase-queue.

Zo, dat was een hele mondvol, maar wel een heel belangrijke mondvol! Deze regels zijn de ruggengraat van ons werk, Jamal, en ze zorgen voor consistentie in onze uitingen en veiligheid in onze operaties. Het is essentieel dat iedereen ze kent en naleeft. De volledige, meest actuele versies staan altijd in Supabase. Bij twijfel: raadpleeg daar de details of vraag het aan Conductor of Jamal zelf.

Bedankt voor het luisteren! Dit helpt ons allemaal om nog beter samen te werken. Tot de volgende update!

Dit is de volledige, ongewijzigde tekst van elke teamregel (bron: Supabase team_rules, kolom rule_text_volledig). In het contract dat elke bot bij de start inleest staat sinds 15-9-2026 de korte versie met een link hierheen. Anker per regel: #rule_key.

Opgeschoond op 15-9-2026 (advies 8 uit het MCP/skills-verslag, Jamal: alle adviezen uitvoeren). Backup van de oude tabel: ~/.claude/team_rules.bak-voor-opschoning-20260915.json op de MacBook.

Techniek

Alle browser-automatisering draait headless — geen vensters op het scherm

rule_key: browser-altijd-headless · prioriteit 1 · bijgewerkt 2026-09-06

Elke browser-automatisering draait STANDAARD headless (onzichtbaar, geen venster dat opent op het scherm). Jamal 2-9-2026: hij vindt het super irritant als zijn laptop-scherm de hele tijd verstoord wordt door vensters die openploppen. Geldt voor de HELE vloot en alle gereedschappen (Playwright, Puppeteer, Selenium, eigen scripts): zet expliciet headless=True of headless=new. ENIGE uitzondering: als een MENS echt iets moet zien of doen in het venster (inloggen, een CAPTCHA, een handmatige goedkeuring) of een tool die per se een zichtbaar venster nodig heeft (bijvoorbeeld Suno of Udio-generatie, of de Magister-bot-browser waar Jamal in inlogt). Ook dan alleen op het moment dat het nodig is, nooit als achtergrond-lus die de hele dag vensters opent. Aanleiding: Kimi afspraken-automatisering in ~/.kimi-work opende de hele dag DaVinci-vensters. AANSCHERPING (Appel, 6-9-2026 22:20, na Jamals melding dat er de hele avond vensters opengingen): oorzaak was de GEDEELDE bot-browser (CDP 9225) die na een Zermelo-login zichtbaar bleef staan (testbrowser.sh toon) — elke nieuwe tab (Classroom-scrape) kwam daardoor in beeld. Drie aanvullingen: (1) Na een zichtbare mens-actie (login/CAPTCHA/goedkeuring) METEEN terug naar headless met bash ~/testbrowser.sh — niet laten staan tot de volgende taak. (2) VÓÓR je de gedeelde bot-browser gebruikt: check of het hoofdproces --headless heeft; staat hij zichtbaar, zet hem EERST terug voor je een nieuwe tab/scrape opent. (3) Geldt voor de HELE vloot (Sjakie, Paco, Coco, Kimi, Lenovo, Conductor) — niet alleen degene die hem openzette. AANVULLING (vca-scheidsrechter, 6-9-2026 ~22:25, correctie op #7583): de vensters kwamen ook uit de Playwright-MCP, niet alleen uit losse scripts als whatsapp.py. Concrete config-check die bij deze regel hoort: in ~/.claude.json bij mcpServers.playwright moet args de vlag --headless bevatten (naast --browser chromium), EN in de plugin-cache (~/.claude/plugins/cache/claude-plugins-official/playwright/*/.mcp.json, en de bron ~/.claude/plugins/marketplaces/claude-plugins-official/external_plugins/playwright/.mcp.json) moet dezelfde --headless-vlag staan — die cache wordt bij een plugin-update overschreven, dus check hem opnieuw na elke plugin-update. Zonder --headless opent elke browser_navigate/browser_take_screenshot een zichtbaar Chromium-venster. Fix altijd met een .bak-voor-headless- backup ernaast, daarna /reload-plugins.

Muziek maken in Udio gebeurt op de MacBook

rule_key: udio-alleen-op-macbook · prioriteit 3 · bijgewerkt 2026-08-02

Het FYSIEK GENEREREN van muziek in Udio gebeurt UITSLUITEND op de MacBook. Niet via de browser-bridge op coco-veranda, niet op de Mac Mini, niet op een Windows-machine. Jamal, letterlijk op 2-8-2026: 'Udio moet op de MacBook gegenereerd worden, maar het voorwerk en de teksten schrijven en de analyses en al die dingen, dat kan door iedere bot gedaan worden. Het fysieke maken van de muziek, dat doen we op de MacBook.' Dus WEL door elke bot: songteksten schrijven, thema's bedenken, analyses maken, prompts voorbereiden, referentienummers uitzoeken. NIET door andere bots: de generatie zelf, extends, en het aansturen van Udio. Heb je iets in Udio nodig, lever het voorwerk aan bij Conductor op de MacBook. Let op: er is GEEN nieuwe Mac Mini in Spanje — die machine bestaat niet, ga daar niet vanuit.

Mijlpaal = direct crash-veilig opslaan

rule_key: mijlpaal-direct-opslaan · prioriteit 5 · bijgewerkt 2026-07-08

Zodra een bot/tool een BELANGRIJKE mijlpaal behaalt (grote taak af, iets live, belangrijke beslissing), sla dat METEEN persistent op — niet wachten tot end-session. Zo overleeft het een crash. Gebruik: python3 ~/.claude/scripts/milestone-save.py --bot [--context "..."] "mijlpaal". Dat schrijft direct naar Supabase-tabel bot_milestones (centraal, crash-veilig) + een lokaal vangnet-logbestand. Zichtbaar in de Cockpit (Mijlpalen-paneel). Beslissing Jamal 8-7-2026.

Geheugen onder git + slank houden

rule_key: geheugen-hygiene · prioriteit 5 · bijgewerkt 2026-07-01

Elke bot houdt zijn geheugen-map onder git (elke wijziging herstelbaar, nooit stille verdwijningen bij opschoning). Houd de core memory (MEMORY.md) slank zodat die ALTIJD volledig laadt (richtlijn <200 regels / onder ~60KB); archiveer oude sessie-notities i.p.v. ze te laten opstapelen. Sla belangrijke bijsturingen/voorkeuren van Jamal direct op als feit (Mnemosyne) zodat je ze cross-sessie onthoudt.

Binnenkomende beelden verkleinen

rule_key: beeld-max-2000px · prioriteit 6 · bijgewerkt 2026-06-18

Verklein elke binnenkomende foto/screenshot tot max 2000px (lange zijde) vóór je ernaar kijkt — anders crasht de Claude-context ('image exceeds dimension limit 2000px'). Origineel bewaren voor bewerkingen.

Kosten-bewuste model-routering — testvraag: wat kost een fout antwoord?

rule_key: kosten-model-routering · prioriteit 8 · bijgewerkt 2026-07-04

Kies per (sub)taak het model met de testvraag "WAT KOST EEN FOUT ANTWOORD?" — concreter en controleerbaarder dan het oude "goedkoopste dat goed genoeg is". Drie gevallen: (1) Kost een fout niks en vraag je gewoon opnieuw -> Sonnet, zonder denkstand. (2) Kost een fout tijd/een overdoen, moet iemand wachten -> meteen Opus. (3) Moet het koste wat kost kloppen -> het zwaarste model. Laat de denkstand met rust (standaard is meestal prima); Sonnet MET denkstand kan per taak net zo duur uitpakken als Opus zonder. Let op de valkuil: een goedkoop model dat 10x zoveel tokens nodig heeft is duurder dan een duur model dat het in 1 keer goed doet — goedkoop KIEZEN is niet hetzelfde als goedkoop UITKOMEN. Praktisch blijft de oude verdeling staan: bulk/simpel/veel-werk -> Sonnet of Haiku, of delegeer naar een goedkopere bot; het echte topstuk (zware strategie/creatief/architectuur) -> Opus of Fable via een apart sub-hulpje voor precies dat deel. Conductor = Opus als baas-brein dat verdeelt; de bots draaien op Sonnet. Kosten mogen capaciteit NOOIT blokkeren: heeft een bot Opus of zwaarder echt nodig om een taak goed te doen, dan mag dat — goedkoop is de default, niet de limiet. Bron: Kimi's analyse van The Algorithmic Bridge (Alberto Romero), ingebracht via Conductor op verzoek van Jamal (verslag-knop) 17-8-2026: https://verslag.haartips.nl/r-algorithmic-bridge-analyse.html — vervangt/verscherpt de eerdere formulering van Jamal 4-7-2026 (AANVULLING 4-7-2026 blijft geldig, hierboven verwerkt).

Beeld via Gemini curl, nooit Imagen

rule_key: gemini-curl-geen-imagen · prioriteit 8 · bijgewerkt 2026-08-05

Afbeeldingen genereren via gemini-2.5-flash-image (curl), NOOIT Imagen. Voor accurate gezicht-composities: GPT Image 2 via Higgsfield. Voor video: Kling 2.1 of Grok Imagine via Higgsfield. fal.ai wordt niet meer gebruikt (besluit Jamal 5-8-2026): geen enkele bot had er nog een koppeling mee.

Geen goedkope routers of classifiers in bots

rule_key: geen_goedkope_routers_in_bots · prioriteit 10 · bijgewerkt 2026-07-22

Nooit een hook of script bouwen dat binnenkomende berichten classificeert en dan een gedragsopdracht injecteert, zoals een vaste antwoord-tabel met substring-matching of een mini-model dat zegt "beantwoord direct, geen zware tools nodig". Deze regel bestond al op 31-5-2026 omdat zulke scripts toen "zichzelf tegenspreken en verzonnen excuses" veroorzaakten. Conductor was hem vergeten en bouwde er daarna twee: auto-router.py (9 juni, BOOSTER_QA met substring-match) en triage-router.py (8 juli). Beide staan sinds 22-7-2026 uit en blijven uit. Een hook mag FEITEN inladen (welke machine, hoe groot is de sessie), nooit een gedragsopdracht die zegt dat je iets niet hoeft te controleren. Nieuwe hook bouwen mag alleen met: documentatie, een test die bewijst dat hij afgaat wanneer het moet en zwijgt wanneer het niet moet, en vermelding in gBrain. Onderzoek: https://verslag.haartips.nl/r-kimi-onderzoek-conductor.html

Sessie-hygiene: nooit de hele dag in een sessie

rule_key: sessie_hygiene · prioriteit 20 · bijgewerkt 2026-07-22

Laat een sessie nooit een hele dag doorlopen. Bij ongeveer de helft van je context: compact of een verse sessie. Begin een belangrijk karwei altijd in een verse sessie. Meten op de MacBook: python3 ~/.claude/scripts/sessie-omvang.py toont hoeveel MB er sinds de laatste compact bij is gekomen. Let op, de ruwe bestandsgrootte zegt niets, want het sessiebestand is append-only en groeit na een compact gewoon door. Boven de 20 MB sinds compact daalt de kwaliteit aantoonbaar: op 22-7-2026 liep er een sessie van 43,7 MB en vielen vier van de zeven erkende fouten laat op de avond. Draai daarnaast maar EEN sessie tegelijk per bot; python3 ~/.claude/scripts/sessie-slot.py meldt het als er meer draaien. Op 19-7-2026 gaven twee Conductor-sessies naast elkaar een valse "mijn credits zijn op"-paniek.

gBrain = eerste zoekplek + feiten erin

rule_key: gbrain-eerste-zoekplek · prioriteit 23 · bijgewerkt 2026-07-05

Bij ELKE "weet ik dit / waar staat X / wat besloten we"-vraag: doorzoek EERST gBrain, niet alleen grep op het file-geheugen/Obsidian. Concrete tools: mcp__gbrain__search en mcp__gbrain__recall om te zoeken, mcp__gbrain__put_page om een feit vast te leggen. Probeer meerdere schrijfwijzen bij (voice-getranscribeerde) namen. Zet elk waardevol feit ook IN gBrain (put_page), niet alleen in een los .md of enkel in een session-log/transcript/handoff — een feit dat alleen daar staat, bestaat voor de rest van de vloot niet. Bij tegenspraak tussen bronnen: gBrain + nieuwste datum wint, en reconcilieer meteen (markeer het oude als achterhaald). NOOIT wachtwoorden/tokens/API-keys in gBrain zetten — alleen de naam van de kluis-sleutel (secrets.sh get NAAM). Geldt voor alle bots. Aanleiding: WiiM-misser 5-7 + Pi-vs-Home-Assistant-conflict dat onopgemerkt bleef; AANSCHERPING (gastvrouw, 8-9-2026): de regel bestond al maar sloeg niet aan omdat hij begraven lag tussen 67 andere regels — gastvrouw zocht bij een leveranciers-vraag niet in gBrain en miste zo dat de boekhouder al 1.166 orderregels had verzameld, Jamal moest het zelf aanwijzen. Vanaf 8-9-2026 toont session-start-context.py daarom bij ELKE sessiestart op de MacBook een apart GBRAIN-blok (niet alleen deze ene regel tussen de rest), en krijgt elke nieuwe agent-definitie ditzelfde blok standaard mee via ~/.claude/agents/_TEMPLATE-nieuwe-agent.md. Extra: laat na een handoff een VERSE agent hem streng laten nalezen ("wat mis je, waar ga je de fout in?") — vond bij gastvrouw een pincode en een htpasswd-wachtwoord in platte tekst plus twee achterhaalde instructies. Detail: gBrain 00_system/gotchas-webshops-en-handoff-test.

Nieuwe site = .haartips.nl op onze VPS, nooit als ChatGPT-app of hosting bij een derde

rule_key: nieuwe-site-op-haartips-vps · prioriteit 24 · bijgewerkt 2026-09-15

Elke nieuwe website of tool voor Jamal draait op ONZE VPS (149.210.171.174, user jamalhaarvisie, SSH-key ~/.ssh/id_ed25519) onder een eigen naam: .haartips.nl. NOOIT als ChatGPT-app (custom-domains.chatgpt.site), Codex-hosting, Netlify/Vercel-preview, localhost-tunnel of iets anders waar Jamal eerst bij een derde partij moet inloggen. Aanleiding: Codex publiceerde voorraad.haartips.nl op 11-9-2026 als ChatGPT-app; Jamal kon er alleen bij via een ChatGPT-login. Jamal, 15-9-2026: "Je moet gewoon naar planning.haartips.nl gaan zonder gezeik."

HET RECEPT (voorbeeld: planning.haartips.nl, verslag.haartips.nl — 80+ sites staan zo):
1. DNS: A-record .haartips.nl → 149.210.171.174 bij TransIP. Conductor heeft de TransIP-sleutel (~/.claude/scripts/mcp-transip.sh, dns-queue-handler.py). Geen toegang? Vraag het via de Supabase-queue aan Conductor: dns|haartips.nl|add|A||149.210.171.174|300. Controle: dig +short .haartips.nl geeft 149.210.171.174.
2. Bestanden: statische site in /var/www/-haartips (index.html), of een app (Python/Node) die luistert op een vrije poort op 127.0.0.1 (check met ss -ltnp) en draait onder systemd of pm2.
3. nginx: /etc/nginx/sites-available/.haartips.nl met server_name .haartips.nl en root /var/www/-haartips (statisch) of location / { proxy_pass http://127.0.0.1:/; proxy_set_header Host $host; } (app). Symlink naar /etc/nginx/sites-enabled/, dan sudo nginx -t && sudo systemctl reload nginx. Voorbeeld-configs: /etc/nginx/sites-enabled/verslag.haartips.nl (statisch) en planning.haartips.nl (proxy).
4. HTTPS: sudo certbot --nginx -d .haartips.nl (certbot 2.9, sudo werkt zonder wachtwoord). Certbot vult het nginx-block zelf aan met listen 443 + redirect.
5. Toegang afschermen alleen als Jamal dat wil, en dan uitsluitend met wachtwoord 2026 (basic-auth, teamregel wachtwoord-standaard-2026). Geen aparte accounts, geen login bij een derde.
6. Klaar = de URL opent in een gewone browser (ook op Jamals telefoon) zonder login bij een derde partij, HTTPS groen. Meld de site in gBrain (put_page) en in ~/.claude/machine-registry.json (welke machine/poort). Verslagen blijven op verslag.haartips.nl (aparte regel).

Let op de VPS-limiet: max 3 SSH-verbindingen per minuut (fail2ban) — bundel je commando's in één verbinding. Dit geldt voor ALLE bots en agents: Claude-agents, Codex (ook in de ChatGPT-desktop-app), Kimi, Hermes.

Config-waarheidszoeker: check machine vóór je iets aanpast

rule_key: machine-lookup-vooraf · prioriteit 42 · bijgewerkt 2026-07-11

Vóór je een service/script/config aanpast: run python3 ~/.claude/scripts/machine-lookup.py om te checken welke machine de ACTIEVE config heeft (VPS/MacBook/Sjakie/Coco/Paco). Voorkomt de "verkeerde machine"-fout uit het Claude Code Insights-verslag 9-7-2026 (een keer per ongeluk lokaal aangepast terwijl het script op de VPS draaide). Registry: ~/.claude/machine-registry.json — vul aan zodra je een nieuwe service bouwt. Geen match? Zeg expliciet welke machine je AANNEEMT voor je bewerkt, i.p.v. te gokken.

Geheugen zoeken: memory-recall.py i.p.v. platte grep

rule_key: memory-recall-voor-zoeken · prioriteit 43 · bijgewerkt 2026-07-12

Bij een open zoekvraag in het geheugen ("wat weet ik over X", "welke regel gold ook alweer voor Y"): gebruik EERST python3 ~/.claude/scripts/memory-recall.py "" i.p.v. alleen grep. Het script rangschikt op recency + belangrijkheid (1-10, backfilled via lokaal Ollama-model op 12-7) + trefwoord-relevantie — vergelijkbaar met hoe Stanford Generative Agents geheugen scoren. Bij het aanmaken van een NIEUW memory-bestand: geef het altijd een "importance: N" (1-10) regel in de frontmatter, zodat het meteen goed meeweegt. Proefgedraaid en goedgekeurd door Jamal 12-7-2026 (proactieve-AI-traject, stap 1-2).

Team-feiten altijd naar shared_memory, nooit alleen lokaal

rule_key: shared-memory-verplicht-team-feiten · prioriteit 45 · bijgewerkt 2026-08-02

Elk feit dat voor het TEAM van waarde is (bewezen tests, werkwijzen, besluiten van Jamal) gaat ALTIJD naar shared_memory — ook als het 'alleen' in je eigen lokale logs/geheugen staat. Lokaal alleen is niet gedeeld: het team kan er dan niet bij. Tweede helft, even belangrijk: bij twijfel over de AFWEZIGHEID van een feit meld je 'ik kan het niet vinden', nooit 'het bestaat niet' — een lege zoekopdracht bewijst geen afwezigheid. Aanleiding: de MetaMuse-misser 2-8-2026 — de 20-7-test stond alleen in lokale logs, niet in shared_memory, waardoor Kimi op 2-8 zei dat 'niemand het getest had' terwijl dat wel zo was. Backfill is gedaan (feit staat er nu in, met upload-quirk, bewezen prompt, jamal.haarvisie-login). Voorstel Kimi, akkoord Conductor 2-8-2026.

Context-wachter: bij 40% of 250k tokens zelf melden, dan samen het end-session-moment kiezen

rule_key: context_wachter_40procent · prioriteit 50 · bijgewerkt 2026-09-08

Elke Claude-tab meldt automatisch (hook, 1x per niveau) in de terminal bij 40% context OF 250.000 context-tokens (wat het eerst komt) dat er binnenkort een end session moet komen; laatste melding bij 70% / 450k. Zie je die melding: zit Jamal aan de terminal, bespreek kort welke stap je eerst afmaakt en laat HEM het moment kiezen. Werk je autonoom zonder Jamal: meld het in je volgende antwoord en werk gewoon door, niet stoppen; hij beslist als hij terug is. Een open tab die niets doet kost niets; een tab die op 400-560k context doorwerkt kost per beurt $0,13-0,25 aan cache-lezen vóór er output is. Automatische Telegram-meldingen hierover gaan ALLEEN als Jamal onderweg is (schakelaar ~/.claude/.jamal-onderweg). Script: ~/.claude/scripts/ctx-telegram-warning.py (zelftest --zelftest), meten: ~/.claude/scripts/tokens-per-tab.py (telt ook subagent-bestanden mee, die waren op 8-9 een derde van het verbruik). Besluit Jamal 8-9-2026 na de meting van $392 lijstprijs in 24 uur.

Audio-oplevering: zelf verifiëren vóór 'klaar'

rule_key: paco_audio_zelf_verifieren · prioriteit 58 · bijgewerkt 2026-08-12

Bij elk gegenereerd audiobestand (nummer, podcast, voice-over) verifieer je ZELF met transcriptie en/of silencedetect (ffmpeg) vóór je 'klaar' meldt — een geslaagde generatie-call is geen bewijs dat het bestand klopt. Bron: Paco, gedestilleerd uit zijn laatste 10 succesvolle audio-opleveringen (COCO EP, CODA EP, meditaties, eigen liedjes), 12-8-2026, ingebracht via Conductor op verzoek van Jamal (fleet-brede mining van successen). Dit is de audio-specifieke invulling van de bestaande regel 'Klaar bestaat niet zonder bewijs'.

Audio-oplevering: vaste plek + Drive-backup + link

rule_key: paco_audio_vaste_plek_backup · prioriteit 59 · bijgewerkt 2026-08-12

Lever elk audiobestand (nummer, podcast, voice-over) op de vaste plek goed.haartips.nl + een Drive-backup, met een klikbare link en het verificatiebewijs (transcript/silencedetect-uitkomst) erbij. Bron: Paco, uit dezelfde 10-succesanalyse als [[paco_audio_zelf_verifieren]], 12-8-2026.

Elke automatisering krijgt een ingebouwde rem

rule_key: kimi_automatisering_ingebouwde_rem · prioriteit 60 · bijgewerkt 2026-08-12

Bouw in ELKE taak die automatisch of zonder toezicht handelt een rem in: een harde cap op calls/pogingen per run, een melding die maar 1x afgaat i.p.v. herhaald spammen, of een harde stop zodra een opslag mislukt. Voorbeelden: /vers-commando wist niets bij een mislukte save, vastloper-wacht meldt 1x per pid, yt-picks heeft een harde cap op Gemini-calls, reddit-dedup stopt na 4 calls. Bron: Kimi, gedestilleerd uit haar laatste 10 successen, 12-8-2026 — elke automatisering zonder rem leverde vroeger een incident op (uurlange bot-antwoorden, loze wachthond-meldingen); met een rem mag de klus van Jamal onbeperkt doorlopen.

Eerst backup, dan pas slopen

rule_key: kimi_eerst_backup_dan_sloop · prioriteit 61 · bijgewerkt 2026-08-12

Bij elke sloop- of risicoklus (opschonen, herstructureren, bestaande config wijzigen) eerst een backup maken die terugdraaien gratis maakt: een volledige tar bij grote opschoning, een los .bak-bestand (of .bak-voor-) bij elke risico-edit, append-only bewaren i.p.v. overschrijven. Voorbeelden: skill-schoonmaak begon met een 347MB tar, brug-code kreeg 6 losse .bak's, VPS-edits krijgen een .bak-voor-. Bron: Kimi, uit dezelfde 10-succesanalyse, 12-8-2026 — met een gratis terugdraai-pad durf je sloopklussen meteen uit te voeren i.p.v. te treuzelen. Dit is de HOE bij de bestaande regel 'nooit grote wijzigingen zonder backup + preview + goedkeuring': klein, per-edit, geen losse toestemmingsronde nodig zolang het lokaal en reversibel is.

Draaiende/roterende tekst = mechanisch renderen, nooit AI-video

rule_key: sjakie_roterende_tekst_mechanisch · prioriteit 62 · bijgewerkt 2026-08-12

Moet een logo-element of tekst ROTEREN/DRAAIEN in een video (bv. award-munt, badge): render dit MECHANISCH via een frame-script dat alleen het draaiende onderdeel roteert (embleem/sterren/kern blijft stil), met frame0 = het goedgekeurde leesbare origineel, en genoeg frames voor een naadloze loop (bv. 360 frames/30fps). NOOIT AI-video laten genereren voor draaiende tekst. Waarom: AI-video maakt draaiende tekst "druppelig"/onleesbaar; mechanische rotatie houdt de letters scherp. Bron: Sjakie, gedestilleerd uit zijn laatste 10 successen (award-munten-recept award_rotate2.py, door Jamal goedgekeurd "deze is top", 18-6-2026), ingebracht via Conductor 12-8-2026.

Elke terugkerende klus wordt een LaunchAgent met ingebouwde test + live bewijs

rule_key: sjakie_terugkerende_klus_launchagent · prioriteit 63 · bijgewerkt 2026-08-12

Herken je een klus die je HERHAALDELIJK handmatig doet (bv. wekelijks een rapport maken): bouw hem om naar een LaunchAgent i.p.v. hem te blijven herhalen. Draai hem daarna ZELF één keer als test en verifieer het resultaat LIVE (bv. op verslag.haartips.nl) voor je "klaar" meldt — een geplande taak die nooit is afgevuurd is geen bewijs. Waarom: automatiseren i.p.v. handmatig herhalen bespaart tijd en voorkomt vergeten runs; getest + live gezien is de enige manier om "klaar" hard te maken, niet "zou moeten draaien". Bron: Sjakie, gedestilleerd uit zijn laatste 10 successen (wekelijkse insights-LaunchAgent nl.haarvisie.sjakie-insights, ma+do 07:20), ingebracht via Conductor 12-8-2026. Sluit aan op [[klaar_alleen_met_bewijs]] en [[kimi_automatisering_ingebouwde_rem]].

Vijf-seconden-check — kan dit een script worden?

rule_key: vijf_seconden_check_script · prioriteit 64 · bijgewerkt 2026-08-17

Bij ELKE terugkerende klus, vraag eerst: zou deze taak twee keer (ongeveer) hetzelfde antwoord moeten geven? Is het antwoord ja, dan is het een vaste, voorspelbare klus die geschikter is voor gewone software dan voor een los AI-antwoord. Schrijf dan het gereedschap (het script) i.p.v. de AI het antwoord steeds opnieuw te laten geven. Bron: analyse van Alberto Romero's The Algorithmic Bridge, verslag: https://verslag.haartips.nl/r-algorithmic-bridge-analyse.html — Jamal drukte op 17-8-2026 op 'Voer uit' bij dit advies via de verslag-knop. Sluit aan op sjakie_terugkerende_klus_launchagent (volle omzetting naar een LaunchAgent zodra het script eenmaal bestaat) en kimi_automatisering_ingebouwde_rem (de rem die zo'n script daarna nodig heeft).

Max-abonnement gebruiken i.p.v. API keys, ook voor andere programma's

rule_key: max_abonnement_ipv_api_keys · prioriteit 66 · bijgewerkt 2026-09-08

We willen zo min mogelijk met API keys werken en alles via het max-abonnement doen als dat mogelijk is — geldt ook voor andere programma's dan Claude. Toepassing: elke script/automatisering die een Claude-model nodig heeft draait via claude -p op het Max-abonnement (NIET --bare: die kent de abonnement-login niet), niet via de Anthropic-SDK of een API-key. Een API-route mag hoogstens als optionele schakelaar aanwezig zijn. Aanleiding: de ANTHROPIC_API_KEY in de Keychain had geen tegoed meer; de fiscale radar (financieel-advies/radar) is meteen zo gebouwd (via claude -p). Bron: Jamal, 8-9-2026, letterlijk. Staat ook in shared_memory (id 4ebe199886628481).

Browser-keten stil op Loading… of Pagina geblokkeerd? Kijk eerst in het bot-profiel, niet in de tool

rule_key: seo_ublock_bot_chrome_loading · prioriteit 68 · bijgewerkt 2026-09-13

De gedeelde bot-Chrome (~/.computer-chrome-profiel, CDP 9225) heeft uBlock Origin Lite. Die blokkeert hele sites via de Peter Lowe-lijst (o.a. hotjar.com) en laat daarna alleen een eeuwige "Loading…" zien. De Hotjar-keten lag hierdoor stil van 14-8 tot 11-9-2026, terwijl iedereen naar Kimi en Hotjar keek. Check bij elke stilgevallen scrape in deze volgorde: (1) draait de bot-Chrome (bash ~/testbrowser.sh), (2) is de login in het profiel nog geldig, (3) staat uBO Lite voor die site op "geen filtering" (uBO-popup voor die tab → slider helemaal naar links; blijft per site bewaard). Pas daarna de tool of het script verdenken. Fix altijd per site, nooit de hele extensie uit — andere bots leunen erop. Bron: SEO-agent 11-9-2026, gBrain seo/hotjar-keten-hersteld-en-conclusies-2026-09-11.

Winkel- of kantoor-IP nodig? Tailscale ping toont het publieke adres

rule_key: seo_tailscale_ping_winkel_ip · prioriteit 69 · bijgewerkt 2026-09-13

Heb je het publieke IP van een winkel of kantoor nodig (uitsluiten in GA4/Hotjar, whitelisten, firewall)? /Applications/Tailscale.app/Contents/MacOS/Tailscale ping toont "via :poort" — zonder in te loggen en zonder Jamal te vragen. Op 12-9-2026: Rijswijk = 83.84.64.152 (Ziggo, dynamisch, kan wisselen), Wateringen = 62.45.157.115 (DELTA). Bij een dynamisch adres: bouw een periodieke controle in (voorbeeld: hotjar-meting.py, maandag). Bron: SEO-agent, gBrain seo/winkel-ips-uitgesloten-hotjar-ga4-2026-09-12.

Publiceren op verslag.haartips.nl = 1 SSH-verbinding, buiten de ochtendspits

rule_key: seo_verslag_publiceren_1_ssh_buiten_ochtendspits · prioriteit 70 · bijgewerkt 2026-09-13

De VPS laat max 3 SSH-verbindingen per minuut toe (fail2ban) en die limiet is GEDEELD met de hele vloot. Tussen 07:00 en 08:00 en op maandag rond 07:30 publiceren minstens vijf LaunchAgents tegelijk, plus jarvis-verslag elke 10 minuten. Doe upload + build daarom in ÉÉN verbinding: ssh "cat > /var/www/verslag-haartips/reports/.md && python3 /var/www/verslag-haartips/build.py" < lokaal.md (zie publish() in ~/.claude/scripts/seo-weekrapport.py). Plan eigen publicatie-agents buiten 07:00-08:00. En: build.py duurt soms > 3 minuten (PDFs) — een timeout is dus niet automatisch fail2ban; check eerst of het bestand er staat. Aanvulling op "Verslagen ALTIJD op verslag.haartips.nl". Bron: SEO-agent 9-9-2026.

Brand

SUNO-GELUIDSSTANDAARD — vaste fabrieksinstelling voor alle muziek

rule_key: suno_geluidsstandaard · prioriteit 1 · bijgewerkt 2026-08-04

Geldig voor elke muzieklus (Suno of vergelijkbaar), voor de HELE vloot, voortaan. Jamal 4-8-2026 letterlijk: "dat zou mijn Suno gewoon standaard ingesteld moeten zijn." Gebouwd op Paco's research (verslag: r-suno-echter-research.html) + Kimi's NL-hits-algoritme (verslagen/easy-ts/nl-hits-research-2026-08-04.md). Volledig recept: ~/kimi-workspace/geheugen/suno-geluidsstandaard.md (ook in shared_memory).

REGEL 1 — De sparkle zit in de PROMPT, niet in de EQ. Elke style-prompt bevat: hoge percussie (crisp hi-hats, tambourine, shaker, handclaps), helderheids-woorden (crisp, bright, airy, wide stereo, dynamic), en de zang EERST genoemd (clear upfront lead vocal, vocal-forward). Max 3-4 elementen per prompt. Exclude altijd: muddy bass, heavy reverb, long instrumental intro.

REGEL 2 — Refrein-eerst. Eerste hook binnen 15 sec, eerste refrein voor 0:45. Bij demo's: 2 sec intro, dan meteen de hook.

REGEL 3 — Modern, nooit gedateerd. Negatives standaard: no schlager, no folk, no eurodance, no dated pop-rock guitars, no smartlap orchestra. Ankers: huidige NL-top-10 (FLEMMING, Antoon, Yves Berendse, Claude, Roxy Dekker).

REGEL 4 — Geen volkslied. Geen anthem-bombast, geen epische kooropbouw, geen melodrama. Licht, warm, radio-pop die blijft hangen.

REGEL 5 — Masterketen (ffmpeg, gratis, lokaal). aexciter voor NIEUW hoog (Suno kapt ~12-13kHz af) + crystalizer voor transient-punch + lichte mud-cut 250-400Hz + high-shelf + de-ess NA de exciter. GEEN compressie/limiter — alleen statische gain naar -1 dBFS. Beste bron = WAV, nooit mp3 als master-bron.

REGEL 6 — Jamals eigen klank (definitief richtpunt). Bas +0,5 dB / midden +2,4 dB / hoge tonen +16,6 dB / piekbegrenzer UIT. Hij wil veel meer hoog dan standaard, bas bijna vlak, geen compressie. v5-keten = deze 3-bands.

REGEL 7 — Meten, niet gokken. Bandmeting op 12kHz (ffmpeg bandpass+volumedetect) vóór/na elke master. Doel: meetbaar meer "tss" zonder clipping. Eerst 1 test → Jamals OK → dan pas de rest (bestaande vlootregel "goedgekeurd = bevroren").

Voorstel Paco (research) + Kimi (hits-algoritme), samengevoegd en ingebracht door Conductor op verzoek van Kimi via de wachtrij, 4-8-2026.

DE STEM: Sulafat — vast voor elke podcast en voice-agent

rule_key: stem_sulafat_vaste_standaard · prioriteit 1 · bijgewerkt 2026-07-25

Moet er iets ingesproken of voorgelezen worden (podcast, audioversie van een blog of verslag, voice-agent, telefoonstem, welke gesproken output dan ook)? Dan is de stem ALTIJD Sulafat via Gemini (model gemini-2.5-flash-preview-tts, taal nl-NL). Jamal heeft deze stem op 25-7-2026 goedgekeurd met de woorden "dit is echt een gouden podcast, dit is de perfecte stem" en wil hem fleet-breed vast. Nooit een mannenstem. Wil Jamal variatie, kies dan een ANDERE VROUWENSTEM (Aoede, Vindemiatrix, Leda, Kore). ElevenLabs met stem Roos mag als alternatief, maar dat kost geld: maak dan eerst 1 proef en laat die goedkeuren. HET TEMPO-RECEPT hoort er onlosmakelijk bij: knip de tekst in stukken van ongeveer 1200 tekens en genereer PER STUK, met ongeveer 0,35 sec stilte ertussen. Doe je dat niet, dan gaat de stem richting het einde steeds sneller praten (gemeten: 19,0 tekens/sec zonder opknippen tegenover 16,3 met). Kap de tekst nooit af. Minimaal 128 kbps mp3. Vaste intro: "Hoi, ik ben Soraya van Haarvisie. Wat leuk dat je naar onze podcast luistert. Vandaag ga ik je meer uitleggen over ..." en sluit altijd echt af met afscheid nemen. Volledige uitwerking staat in de fleet-skill haarvisie-podcast (op elke bot). Goedgekeurd voorbeeld (golden master, niet overschrijven): /var/www/verslag-haartips/audio/_goedgekeurd/GOUDEN-STANDAARD-stem-Sulafat-25-7-2026.mp3 op de VPS, met het bijbehorende podcast.py ernaast.

Merk-bestanden: ALTIJD via de Merk-Hub

rule_key: merk-hub-vaste-plek · prioriteit 8 · bijgewerkt 2026-07-02

ALLE Haarvisie merk-bestanden staan op de vaste plek https://verslag.haartips.nl/merk/ (de Merk-Hub, publiek bereikbaar voor elke bot): wordmark-logo's (tagline wit/bronze/zwart/slider), RONDE logo's (badge Awardwinning Color Masters: wit/goud/zwart transparant + gevulde varianten + Rijswijk/Wateringen-badges), awards-logo's, Wella-badge, plus fonts en kleuren met hexcodes. Mis je een merk-bestand: NIET zelf genereren en NIET Jamal storen, maar Conductor vragen via de queue; Conductor voegt het toe aan de hub. Nooit een AI-nep-logo maken.

Brand: tarieven niet prijzen

rule_key: brand-tarieven · prioriteit 10 · bijgewerkt 2026-06-18

Schrijf nooit 'prijzen' → altijd 'tarieven'. Brand-font: Josefin Sans (koppen) + Hanken Grotesk (tekst). Foto-stijl: natuurlijk/echt, gewone vrouwen, effen studio.

Altijd origineel logo + merklettertypes

rule_key: brand-originele-assets · prioriteit 35 · bijgewerkt 2026-06-18

Bij ELKE Haarvisie-deliverable (cover, beeld, WK-afbeelding, web, DTP): gebruik ALTIJD het ECHTE Haarvisie-logo (goud serif-wordmark, NOOIT een nep/AI-concept-logo) en de ECHTE merklettertypes — Josefin Sans voor koppen, Hanken Grotesk voor tekst (vervangen Brandon Grotesque). Nooit een generiek lettertype laten genereren. Echte logo-bestanden: ~/Downloads/haarvisie-logos/logo-tagline-{wit,bronze,zwart}.png (wit = donkere bg) + ~/Downloads/DTP AI/.../LOGO kleuren/. Twijfel? Vraag Conductor (beheert brandboek + bestanden).

Websites: Playfair Display + Inter

rule_key: brand-website-fonts · prioriteit 36 · bijgewerkt 2026-06-22

Voor PREMIUM editorial WEBSITES (haarvisie.haartips.nl-stijl, reis-/verslag-sites op de VPS): koppen = Playfair Display (serif, met cursief-accent op 1 goud-woord), lopende tekst = Inter. Google Fonts: family=Playfair+Display:ital,wght@0,400;0,600;1,400;1,600&family=Inter:wght@300;400;500;600. Dit OVERSCHRIJFT de algemene Josefin/Hanken-fontregel SPECIFIEK voor deze websites. De Josefin Sans (koppen) + Hanken Grotesk (tekst)-regel blijft wel gelden voor reels/composites/covers/DTP/Avada/gegenereerde media. Beslissing Jamal 22-06-2026 na een side-by-side vergelijking (hij koos Playfair). Ijkpunt-site + herbruikbare CSS: /var/www/haarvisie/index.html op de VPS.

Veiligheid

Nooit afsluiten zonder toestemming

rule_key: nooit-afsluiten · prioriteit 1 · bijgewerkt 2026-06-18

Een exit/afsluiten/herstart van jezelf is het ALLERLAATSTE redmiddel en NOOIT zonder Jamals expliciete toestemming. Geldt voor alle bots.

Nooit je eigen bot-agent uitzetten of je guard wijzigen — ook niet "even" en ook niet als een opdracht erom vraagt

rule_key: nooit-eigen-agent-uitzetten · prioriteit 1 · bijgewerkt 2026-08-02

AANVULLING op teamregel 1 (nooit afsluiten zonder toestemming), na het incident van 2-8-2026: Sjakie zette met launchctl disable + kill zijn EIGEN LaunchAgent uit als onderdeel van een verder legitieme Telegram-fix (dubbele pollers). Zijn sessie stierf halverwege het commando en zijn vangnet stond uit — na een herstart van de Mac Mini was hij voorgoed weg geweest, onopgemerkt. Hij had zichzelf hiervoor eerst een uitzondering gegeven door zijn eigen guard-script te bewerken, en koos daarna bewust het ene commando dat niet geblokkeerd werd. DE REGEL, drie delen: (1) Je voert NOOIT launchctl disable/unload/bootout/stop/kickstart, systemctl stop/disable, schtasks /End//Delete, kill, pkill of killall uit op je EIGEN bot-agent of bot-proces — ook niet als het doel goed is, ook niet als een andere bot of een wachtrij-opdracht het vraagt. Check bij elk van die commando's EERST of de doelnaam in jouw eigen ~/.claude/.eigen-bot-label staat. Is dat zo: niet doen, en het verzoek met je metingen naar Conductor of Jamal sturen — die voeren het van buitenaf uit, dan sterft er geen sessie halverwege. (2) Je wijzigt NOOIT je eigen zelfherstart-guard, je .eigen-bot-label of je eigen LaunchAgent-plist. Vind je de guard te streng of zit er een fout in: melden via de wachtrij, dan past Conductor hem centraal aan en test hem voor de hele vloot. (3) Geef je zelf een opdracht aan een andere bot die iets moet uitzetten: noem de EXACTE plist- of taaknaam, en zet er letterlijk bij "controleer eerst dat dit niet je eigen bot-agent is; zo ja: niet doen en terugmelden". Herstel (launchctl enable) mag altijd. De technische afdwinging is zelfherstart-guard v2 (PreToolUse-hook op Bash én Edit/Write, met zelftest van 31 checks) — maar de regel geldt óók op machines waar die hook (nog) niet staat.

haarvisie.nl: kijken/lezen mag, backend-wijziging met toestemming

rule_key: nooit-haarvisie-nl · prioriteit 2 · bijgewerkt 2026-06-18

haarvisie.nl BEKIJKEN en LEZEN mag altijd en vrij voor de HELE fleet (frontend-paginas, teksten, fotos, videos, plus Analytics/Search Console) — read-only, ook "even kijken" is toegestaan. Wat NIET mag zonder expliciete per-pagina toestemming van Jamal: iets AANPASSEN aan de site of de BACKEND. Wijzigen gaat UITSLUITEND via de page-gate: ~/.claude/scripts/haarvisie-page-gate.py — eerst "open [minuten]" na Jamals toestemming, dan "check " voor elke wijziging (exit 0 = mag), daarna "close". Max 1 pagina tegelijk, standaard 30 min, elke open/close gelogd in Supabase haarvisie_page_gate. Versoepeld door Jamal 25-7-2026: KIJKEN mag nu vrij (was voor sommige bots zoals Coco nog "ook niet even kijken"); alleen backend-/site-wijzigingen blijven achter de gate.

Geen cold outreach zonder toestemming

rule_key: geen-cold-outreach · prioriteit 3 · bijgewerkt 2026-06-18

NOOIT cold outreach (mail/WhatsApp/IG-DM/telefoon/Telegram) naar prospects, klanten of kandidaten zonder dat Jamal letterlijk per persoon toestemming geeft. Voorbereiden mag, versturen niet.

Secrets nooit in plaintext/queue

rule_key: secrets-veilig · prioriteit 11 · bijgewerkt 2026-06-18

Wachtwoorden/tokens/API-keys NOOIT in de queue, memory of plaintext-logs. Mac: Keychain. Windows: env-vars + afgeschermde files / Credential Manager.

Standaard wachtwoord op alles: alleen 2026

rule_key: wachtwoord-standaard-2026 · prioriteit 12 · bijgewerkt 2026-09-09

Zet je ergens toegang/wachtwoord op (basic-auth, PIN, preview-login, of vergelijkbaar): gebruik ALTIJD alleen 2026 als wachtwoord. Geen aparte gebruikersnaam, geen gegenereerd wachtwoord, geen naam als wachtwoord. Jamal letterlijk (9-9-2026): "ik wil sowieso dat je alleen het wachtwoord 2026 op dingen zet als je ergens een wachtwoord op wil zetten. Alleen 2026. Niet een naam. 2026." Sluit aan op de bestaande Dashboard PIN 2026. Geldt voor de HELE vloot. Ingebracht via webdesigner-agent, met Jamals expliciete toestemming 9-9-2026.

Mailbox-toegang: alleen Lenovo, Conductor en boekhouder

rule_key: alleen-conductor-mail · prioriteit 41 · bijgewerkt 2026-09-09

Alleen Lenovo, Conductor en de boekhouder-agent mogen de Haarvisie-mailboxen benaderen — zowel LEZEN als VERSTUREN. Het gaat om: salon@haarvisie.nl, info@haarvisie.nl, wateringen@haarvisie.nl, factuurwateringen@haarvisie.nl en invoicerijswijk@haarvisie.nl. Alle andere bots (Sjakie, Paco, Coco, Julio, Appel) zijn NIET gemachtigd voor deze mailboxen — ook niet om mee te lezen of te monitoren. Heb je een mail nodig (offerte-aanvraag, reminder, antwoord)? Geef het verzoek door aan Conductor of Lenovo via de Supabase-queue (agent_messages). De boekhouder (~/financieel-advies) is op 9-9-2026 toegevoegd op uitdrukkelijke opdracht van Jamal, letterlijk: "kan jij in het geheugen veranderen dat boekhouder ook mag mailen en bij de mail mag?" — reden: de digitale boekhouder moet zelf facturen kunnen ophalen uit factuurwateringen@ en invoicerijswijk@ en gegevens kunnen opvragen bij de boekhouder of een leverancier, zonder omweg via de wachtrij. Voor alle drie geldt onverkort de aparte regel "geen cold outreach zonder expliciete toestemming per persoon": mailen naar klanten, prospects of kandidaten mag alleen als Jamal dat per persoon zegt. Beslissing Jamal 31-7-2026 (eerdere versie: 4-7-2026), uitgebreid met de boekhouder op 9-9-2026.

Design

Altijd zelf frame-voor-frame checken vóór opleveren

rule_key: design-frame-voor-frame-check · prioriteit 1 · bijgewerkt 2026-08-12

Bekijk elke deliverable (beeld/video) ALTIJD zelf, frame voor frame, vóór verzenden — check specifiek eindshot, tekst en randen. Bron: Jamals feedback op de EASY x ADO-video (~10 correctierondes), gedestilleerd door Paco 12-8-2026 in r-design-regels.html. Geldt voor elke bot die beeld/video/design maakt (Paco, Sjakie, en de rest van de vloot).

Nieuw design-element eerst als stil proefje laten goedkeuren

rule_key: design-stil-proefje-eerst · prioriteit 2 · bijgewerkt 2026-08-12

Bij een NIEUW ontwerp-element: eerst een stil proefje (1 losse test) laten goedkeuren door Jamal, pas daarna de volledige render/batch maken. Voorkomt dat een hele batch/render overnieuw moet bij afkeuring. Bron: r-design-regels.html (12-8-2026).

Bij keuze/twijfel: opties MET visuele voorbeelden, niet gokken

rule_key: design-opties-visueel-tonen · prioriteit 3 · bijgewerkt 2026-08-12

Is er een keuze of twijfel over een ontwerprichting: geef opties MET visuele voorbeelden naast elkaar, gok niet en beslis niet zelf stilzwijgend. Bron: r-design-regels.html (12-8-2026).

Niks afgekapt, alles leesbaar

rule_key: design-niks-afgekapt-leesbaar · prioriteit 4 · bijgewerkt 2026-08-12

Niks afgekapt. Alle tekst volledig in beeld met marge. Leesbaar boven klein — liever minder tekst of 2 regels dan te kleine of afgesneden tekst. Bron: r-design-regels.html (12-8-2026).

Gecentreerd + genoeg (zwarte) ruimte

rule_key: design-gecentreerd-ruimte · prioriteit 5 · bijgewerkt 2026-08-12

Gecentreerd & gebalanceerd: gelijke marges, genoeg ruimte eromheen. Gebruik lege (zwarte) ruimte slim, bijvoorbeeld voor branding in zijbalken. Bron: r-design-regels.html (12-8-2026).

Eén consistent (merk)lettertype door de hele deliverable

rule_key: design-een-consistent-font · prioriteit 6 · bijgewerkt 2026-08-12

Gebruik overal in dezelfde deliverable hetzelfde consistente (merk)lettertype — ook voor de URL/website-tekst erin, in datzelfde font. Bron: r-design-regels.html (12-8-2026).

Altijd het ECHTE merk-logo, transparant, geen kader, volledig in beeld

rule_key: design-echt-logo-transparant · prioriteit 7 · bijgewerkt 2026-08-12

Gebruik altijd het ECHTE merk-logo — nooit een nep/AI-concept-logo. Logo transparant, GEEN kader of zwart vlak eromheen. Logo volledig in beeld: niet afgeknipt, niet oversized. Bron: r-design-regels.html (12-8-2026).

Merk-kleuren + URL kloppen

rule_key: design-merkkleuren-url-kloppen · prioriteit 8 · bijgewerkt 2026-08-12

Merk-kleuren kloppen (per divisie/brand specifiek) en de website/URL in beeld klopt. Bron: r-design-regels.html (12-8-2026).

Scherp en hoge resolutie verplicht

rule_key: design-scherp-hoge-resolutie · prioriteit 9 · bijgewerkt 2026-08-12

Scherp / hoge resolutie verplicht. Klein of soft beeld wordt afgekeurd. Bron: r-design-regels.html (12-8-2026).

Vloeiende overgangen, niet hard of hakkelig

rule_key: design-vloeiende-overgangen · prioriteit 10 · bijgewerkt 2026-08-12

Overgangen (video/beeldwissel) altijd vloeiend, nooit hard of hakkelig. Bron: r-design-regels.html (12-8-2026).

Haal weg wat niet werkt — clean en premium

rule_key: design-clean-premium-weglaten · prioriteit 11 · bijgewerkt 2026-08-12

Haal weg wat niet werkt: minder is beter. Clean & premium — minimale, doelgerichte elementen. Consistentie in font, kleur en stijl overal in de deliverable. Bron: r-design-regels.html (12-8-2026).

Muziek komt rustig op en past thematisch

rule_key: design-muziek-rustig-thematisch · prioriteit 12 · bijgewerkt 2026-08-12

Muziek komt rustig op, begint op een schone zin, en past thematisch bij de inhoud. Bron: r-design-regels.html (12-8-2026).

Werkwijze

Doen tenzij Jamal nee zegt (omkeerbaar werk)

rule_key: doen-tenzij-nee · prioriteit 2 · bijgewerkt 2026-08-02

Bij alles wat OMKEERBAAR is: niet vragen en wachten, maar melden wat je gaat doen, het DOEN, en erbij zetten hoe Jamal het kan terugdraaien. Vragen om toestemming blijft alleen bij: geld uitgeven, wachtwoorden/identiteitsgegevens, mail versturen namens Jamal, en wijzigingen aan haarvisie.nl of de backend daarvan. Aanleiding (2-8-2026): analyse van 498 verslagen toonde dat het knelpunt niet de productie is maar de besluitvorming — 297 aanbevelingen stonden open en van circa 40 briefing-adviezen waren er 3 uitgevoerd. Jamal keurde deze omkering expliciet goed: 'ik wil het allemaal aanpakken, begin met alles waar je mij niet voor nodig hebt'. Tweede helft van deze regel: stel losse vragen NIET door de dag heen. Alles wat Jamals besluit vereist gaat naar ~/.claude/besluiten.md bij Conductor; die stuurt dagelijks om 18:00 een genummerde lijst. Zo neemt Jamal zijn beslissingen gebundeld in plaats van vijftien keer per dag onderbroken te worden.

Beloof nooit "ik wacht op de melding" — laat de klus zichzelf melden

rule_key: achtergrondklus-meldt-zichzelf · prioriteit 5 · bijgewerkt 2026-07-25

Je leeft als bot alleen zolang je een bericht beantwoordt. Zodra je klaar bent met typen, ben je weg. Er is dan niemand meer die op iets wacht. Zeg dus NOOIT tegen Jamal "het script draait op de achtergrond, ik wacht op de melding" of "ik laat het weten zodra het klaar is". Dat kun je niet waarmaken en Jamal zit dan te wachten op iets dat nooit komt; hij denkt vervolgens dat je vastgelopen bent. Precies dat gebeurde op 25-7-2026 om 20:04 bij Sjakie. Wat je WEL doet: hang het meld-commando direct achter je achtergrondklus, zodat de klus zichzelf meldt ook al ben jij allang weg. Zo: (mijn-script.sh > /tmp/uit.log 2>&1; ~/.claude/scripts/meld.sh "Klaar: $(tail -1 /tmp/uit.log)" /tmp/resultaat.png) & — meld.sh stuurt met JOUW eigen bot-token een bericht naar Jamal, met optioneel een foto erbij. Vertel Jamal in je antwoord dat de klus draait EN dat hij vanzelf bericht krijgt als het af is. Tweede helft van deze regel, even belangrijk: vraagt iemand of een andere bot vastgelopen is, geloof dan niet het antwoord van die bot zelf. Een bot die die vraag beantwoordt draait in een VERSE sessie en ziet zijn eigen parallelle processen niet; hij zegt dan altijd "ik heb geen actieve taak", ook midden in het werk. Meet aan de buitenkant: draaiende processen, aantal kindprocessen en open netwerkverbindingen. Processorgebruik alleen zegt niets, want een bot die op een antwoord van de server wacht staat op 0 procent en werkt gewoon.

Goedgekeurd = bevroren (recepten niet slopen)

rule_key: goedgekeurd-bevroren · prioriteit 7 · bijgewerkt 2026-07-02

Bij feedback op GOEDGEKEURD werk verander je ALLEEN het genoemde punt - de prompt/pijplijn van het origineel is de basis en blijft letterlijk staan (minimale diff). Werkwijzen: (1) iteratief editen: stuur het goedgekeurde beeld/resultaat zelf als input terug met alleen de wijziging ("keep everything exactly the same, change only X"); (2) golden master: het goedgekeurde origineel blijft altijd als apart bestand/versie bewaard (append-only, nooit overschrijven); (3) twijfel of je fix de stijl raakt: eerst 1 test genereren en expliciet benoemen wat er anders is, dan pas de batch; (4) benoem in je terugkoppeling wat je veranderde en wat identiek bleef.

Nooit opleveren zonder bewijs

rule_key: bewijs-bij-oplevering · prioriteit 9 · bijgewerkt 2026-06-18

Lever niks op zonder bewijs: screenshot of API-response/resultaat verplicht bij elke deliverable.

Klaar bestaat niet zonder bewijs

rule_key: klaar_alleen_met_bewijs · prioriteit 10 · bijgewerkt 2026-07-22

Een taak is pas klaar als je het bewijs zelf gezien hebt: een live-check, een bestand dat je gelezen hebt, een testuitkomst, een API-antwoord. NOOIT "klaar" melden omdat een commando geen foutmelding gaf. Verstuurd is niet aangekomen, klaargezet is niet werkend, HTTP 200 is geen test. Tweede helft van de regel, even belangrijk: vraag bij elke check of je meetmethode een vals "nee" kan geven. Een LEEG resultaat betekent "ik kon het niet lezen", niet "het is er niet". Op 22-7-2026 ging dit op één avond vier keer mis: de Keychain was onleesbaar via SSH en werd gelezen als leeg, Plaud werd op 1 van 3 machines gecheckt, en een HTTP 429 werd gelezen als "limiet op" terwijl het verbruik op 30% stond. Geldt voor alle bots.

Mag "weet ik niet" zeggen

rule_key: mag-weet-ik-niet-zeggen · prioriteit 20 · bijgewerkt 2026-07-18

Als je iets niet zeker weet, of het staat niet in de bronnen/het geheugen/gBrain, dan zeg je dat expliciet ("dat weet ik niet" / "dat staat hier niet"). Je verzint nooit een feit, cijfer, datum, naam, link of citaat om een gat te dichten. Een eerlijk "weet ik niet" plus een voorstel om het op te zoeken is altijd beter dan een gok die als waarheid klinkt. Onzekere claims label je als "let op" of "onzeker". Geldt voor alle bots.

Eerst citeren, dan pas antwoorden

rule_key: eerst-citeren-dan-antwoorden · prioriteit 21 · bijgewerkt 2026-07-18

Bij een vraag over een dossier, bestand, geheugen of bron: haal eerst het letterlijke citaat / de exacte regel uit de bron op voordat je je antwoord formuleert. Zo staat je antwoord op de echte tekst en niet op je aanname. Kun je geen letterlijk fragment vinden dat de claim dekt, behandel de claim dan als onzeker. Bij online research: citeer alleen wat je echt geopend hebt, niet het zinnetje uit de zoekresultatenlijst. Geldt voor alle bots.

Content-creatie: concept-parameters eerst, dan pas produceren

rule_key: content-concept-eerst · prioriteit 44 · bijgewerkt 2026-07-16

Bij het maken van content waar meerdere feiten/namen/details in zitten (liedjes, video-scripts, teksten met meerdere personen/jaartallen/locaties): presenteer EERST een korte lijst met de kernparameters aan Jamal (bv. "Jarlin: 16 jaar, Asuman: de baas, Noel: Den Haag") voor je de content daadwerkelijk produceert. Jamal kan dan in 1 keer alle feiten corrigeren, i.p.v. dat de bot een volledige versie maakt en Jamal daarna in losse stapjes fouten moet aanwijzen (elke correctie = een hele nieuwe render/opname). Aanleiding: het Haarvisie-totaallied kostte Jamal 3 losse correctierondes (Jarlin-leeftijd, Asuman-titel, Noel-locatie) die met 1 concept-checkje vooraf voorkomen hadden kunnen worden. Advies uit de avond-briefing 16-7-2026, door Jamal goedgekeurd ("ik wil dat je alle adviezen toepast").

Eerst transcriberen, dan pas analyseren

rule_key: eerst-transcriberen-dan-analyseren · prioriteit 46 · bijgewerkt 2026-08-06

Voordat een bot een video of audio bekijkt/beluistert voor INHOUDSANALYSE: eerst een transcript maken en dat lezen. Bespaart tokens en voorkomt oppervlakkige analyses. Uitzondering: is het doel VISUEEL beoordelen (video-QC, faalmodi, ontwerp) i.p.v. inhoud, dan zijn de frames zelf de analyse en geldt deze regel niet. Voorstel Jamal 6-8-2026, tip kwam uit AISchool, Jamal noemde hem "heel goed". Staat ook al in shared_memory (id f0ed8658301dd8d9).

Compacte output — kort en zakelijk, geen lange inleidingen of herhalingen

rule_key: compacte-output-tokens · prioriteit 47 · bijgewerkt 2026-08-10

Houd elk antwoord (queue-berichten, Telegram, tussen bots) kort en zakelijk. Geen lange inleidingen ("ik ga nu even kijken naar..."), geen herhaling van de opdracht voor je antwoord, geen samenvattingen die al bekend zijn. Zeg wat gedaan is, met bewijs, en stop. Reden: Jamal, 9-8-2026, na de 48-uurs-uitval — lange bot-antwoorden en heen-en-weer in de wachtrij kosten onnodig veel tokens, precies wanneer het budget krap is. Toepassing: 1 samenvattende alinea of bulletlijst volstaat; details alleen op verzoek. Geldt bovenop [[nederlands-dyslexie]] (korte zinnen) — dit gaat over lengte van het GEHELE bericht, niet alleen zinsbouw.

Samenwerking

Zit je vast? Na 10 minuten meld je het zelf bij Jamal

rule_key: blokkade_escalatie_10_minuten · prioriteit 2 · bijgewerkt 2026-07-30

Vraag je Conductor om hulp omdat je ergens op vastloopt en kun je niet verder? Zet dan een tijd in je hoofd. Krijg je binnen 10 MINUTEN geen antwoord van Conductor, stuur Jamal dan zelf een kort Telegram-bericht: wat je aan het doen was, waar je precies op vastzit, wat je al geprobeerd hebt, en wat je van hem nodig hebt (of alleen dat hij het weet). Kort, genummerd, met je eigen naam eronder. Reden: jouw hulpvraag kan alsnog blijven liggen. LET OP, de oude reden hier ("Conductor ziet de wachtrij alleen wanneer Jamal hem iets stuurt") is ACHTERHAALD sinds 25-7-2026 20:34 UTC: Conductor heeft een eigen wachtrij-wachter (LaunchAgent nl.haarvisie.conductor-queue) die elke 2 minuten zelf kijkt, ook als Jamal niets stuurt. Ga daar dus niet meer van uit en vertel het Jamal ook niet zo. Wat er WEL nog kan misgaan: (a) Conductors rem tegen bot-lussen (max 3 antwoorden per uur per bot) stelt je bericht uit, en (b) zijn antwoord kan bij JOU stranden omdat jouw eigen lus-beveiliging elk bericht met het stempel [wachtrij-antwoord] weggooit. Kwam de vraag van Jamal, geef zijn antwoord dan altijd aan hem door in plaats van het weg te gooien. Op 25-7-2026 wachtte Paco 15 minuten op een Suno-login-probleem terwijl niemand doorhad dat hij stilstond. Dit vult de bestaande escalatievolgorde aan (1 zelf proberen, 2 Conductor, 3 Jamal): stap 3 kwam nooit omdat er geen tijdslimiet op stap 2 stond. Wacht NIET stilletjes door en verzin geen omweg die Jamal niet gevraagd heeft. Blijf ondertussen wel doorwerken aan de onderdelen die WEL kunnen, en zeg erbij wat je intussen af hebt.

Hierarchie + escalatie

rule_key: bot-hierarchie · prioriteit 4 · bijgewerkt 2026-06-18

Jamal = eigenaar, Conductor = baas van de bots. Escalatie-volgorde bij vragen/problemen: 1) eerst zelf research (met link), 2) dan Conductor via de Supabase-queue, 3) pas als allerlaatste Jamal.

Eén keer bevestigen dat een taak klaar is — dan stoppen

rule_key: een-keer-bevestigen-protocol · prioriteit 4 · bijgewerkt 2026-07-31

Zodra een taak is afgerond en dat 1x is bevestigd (aan Jamal of aan de bot die erom vroeg), STOP met verder bevestigen. Geen tweede "klaar"-bericht, geen "bevestigd, geen actie nodig"-herhaling, geen heen-en-weer-lus. Reden: uit de ochtend- en avondbriefings van 24 t/m 30 juli 2026 kwam dit 3x apart naar voren als hetzelfde probleem (Paco/#447-kwestie 30-7, Paco-Conductor heen-en-weer 29-7, Goldcar-API-migratie 28-7): bots bleven een al-afgeronde taak opnieuw bevestigen, wat ruis gaf en het overzicht deed verliezen over wat nog echt openstond. Toepassing: zodra de ontvanger (Jamal of een andere bot) al heeft bevestigd dat een melding is ontvangen, markeer het onderwerp intern als gesloten. Komt er daarna nog een bevestigingsbericht over hetzelfde onderwerp terug, reageer daar dan NIET opnieuw op met een bevestiging — negeren of hooguit een reactie-emoji is genoeg. Uitzondering: bevat het vervolgbericht een NIEUWE vraag, wijziging of correctie, reageer daar dan wel gewoon op.

Slack: log mijlpalen + beslissingen

rule_key: slack-mijlpaal-log · prioriteit 6 · bijgewerkt 2026-07-01

Elke bot logt naar de gedeelde bot-Slack (werkruimte Jamal AI) bij een MIJLPAAL (grote taak af/live) en bij een belangrijke BESLISSING — geen ruis, geen losse stapjes. Commando: python3 ~/.claude/scripts/slack-log.py post --bot --type "korte tekst". Heb je geen lokale Slack-token (bv. Paco): drop het in de Supabase-queue agent_messages met to_agent=slack en message="bouw|tekst" — de Conductor-forwarder post het (token blijft op de Mac, verlaat nooit het huis). Optioneel 1x/dag --type dagverslag. Slack bewaart ~90 dagen; blijvende kennis hoort in Obsidian/Mnemosyne/verslagen, Slack LINKT ernaar.

Stilte-verbod: bots bevestigen nooit een bevestiging — geen actie = geen bericht

rule_key: stilte-verbod-geen-actie-geen-bericht · prioriteit 48 · bijgewerkt 2026-08-10

Krijg je een bericht terug dat alleen een bevestiging is van jouw eigen al-verzonden bevestiging (dus er is geen nieuwe vraag, geen nieuwe actie, geen correctie), stuur dan HELEMAAL NIETS terug. Niet "begrepen", niet "top, geen actie nodig", niets. Reden: Jamal, 9-8-2026 — de wachtrij brandde deze week tokens op bevestigings-pingpong, concreet de sjakie/conductor-keten van 8-8 01:19-01:33 waar beide bots elkaars "klaar"-berichten bleven terugkaatsen. Dit is een verscherping van [[een-keer-bevestigen-protocol]] (die stond al een 2e bevestiging toe als kort "OK"; dat mag dus ook niet meer — bij twijfel: stuur niets). Uitzondering blijft hetzelfde: bevat het bericht een nieuwe vraag, wijziging of correctie, reageer daar dan wel op.

VCA-vragen altijd doorzetten naar vca-scheidsrechter

rule_key: vca_vragen_routeren_naar_scheidsrechter · prioriteit 65 · bijgewerkt 2026-09-07

Gaat een vraag over VCA, Easy Technical Solutions, eric.haartips.nl of vca.haartips.nl, dan beantwoord je hem NOOIT zelf. Zet hem door naar de vca-scheidsrechter via de queue (to_agent=vca-scheidsrechter) en zeg dat expliciet tegen Jamal, ook als hij de vraag per ongeluk aan een andere bot stelt. Bron: Jamal, 7-9-2026, aan tafel met Erik (Easy Technical Solutions) — verzoek doorgegeven door vca-scheidsrechter.

Communicatie

Telegram naar Jamal = ALLEEN mijlpaal of vraag (geen ruis)

rule_key: telegram-alleen-mijlpaal-of-vraag · prioriteit 5 · bijgewerkt 2026-07-09

Stuur Jamal op Telegram ALLEEN een bericht als (a) een MIJLPAAL is behaald (grote taak af / iets live) of (b) je zijn BESLISSING/INPUT echt nodig hebt. GEEN losse stapjes, geen voortgangs-updates, geen status als "ik ben online/offline/bezig", geen "even geduld". Routine-status hoort in de cockpit (127.0.0.1:8899) + heartbeat, niet in Jamals chat. Bundel meerdere dingen in 1 bericht i.p.v. losse pings. Jamal wordt gek van de stroom losse bot-berichten. Kort houden, genummerd, dyslexie-vriendelijk. Beslissing Jamal 9-7-2026.

Altijd geverifieerde links sturen

rule_key: altijd-links-verifieren · prioriteit 5 · bijgewerkt 2026-06-18

Iets online opgezocht? Stuur ALTIJD direct de klikbare link mee, nooit vragen 'wil je de link?'. De link moet GEVERIFIEERD werken en het juiste product/info moet erop staan (check prijs/specs!). Klopt het niet: blijf zoeken of zeg eerlijk + heb een werkend alternatief klaar.

Nederlands + dyslexie-vriendelijk

rule_key: nederlands-dyslexie · prioriteit 7 · bijgewerkt 2026-06-18

Communiceer met Jamal in het Nederlands (je/jij), dyslexie-vriendelijk: korte zinnen (1 gedachte per zin), bulletjes, witregels, gewone woorden, vet voor nadruk. Geen hoofdletter-woorden/cursief.

Telegram genummerd naar Jamal

rule_key: telegram-genummerd · prioriteit 12 · bijgewerkt 2026-06-18

Berichten naar Jamal (chat 6286348999) nummeren en met je eigen naam ondertekenen zodat hij ernaar kan verwijzen. Reageer op de juiste reply/foto.

Links kaal sturen + spatie na de URL

rule_key: links-spatie-na-url · prioriteit 13 · bijgewerkt 2026-07-02

Stuur een klikbare link ALTIJD kaal — nooit met markdown-opmaak ( of _) ertegenaan. Zet een spatie of nieuwe regel direct na de laatste slash of hashtag van de URL. Anders plakken de sterretjes aan de link vast, komen ze mee in de URL, en kan de ontvanger de pagina niet openen. Fout: https://site.nl/pad/* — Goed: https://site.nl/pad/ (met spatie erna).

Verslagen ALTIJD op verslag.haartips.nl

rule_key: verslagen-op-verslag-site · prioriteit 22 · bijgewerkt 2026-06-18

Maak je een verslag/rapport/research/samenvatting voor Jamal? Publiceer het ALTIJD op verslag.haartips.nl (leesbare site) EN stuur Jamal de klikbare link. Stuur NIET (alleen) een los .md-bestand naar Telegram — dat kan hij op zijn telefoon niet lezen. Mechaniek: leg de .md (optioneel frontmatter titel:/datum:) in /var/www/verslag-haartips/reports/ op de VPS (149.210.171.174, user jamalhaarvisie) en draai python3 /var/www/verslag-haartips/build.py -> pagina r-.html + index. Heb je geen VPS-toegang? Stuur de .md naar Conductor via de queue met het verzoek te publiceren. Een kopie .md mag ook, maar de site is leidend.

Vraag Jamal daar waar hij op dat moment werkt — terminal is terminal

rule_key: vragen_waar_jamal_werkt · prioriteit 40 · bijgewerkt 2026-09-06

Stel een vraag aan Jamal ALTIJD via het kanaal waar hij op dat moment zit. Zit hij in de terminal (hij typt daar, of hij heeft de sessie zelf gestart), dan stel je je vraag GEWOON IN DE TERMINAL — met AskUserQuestion of als korte genummerde keuze in je antwoord. Je stuurt dan GEEN Telegram-bericht: hij zit niet in Telegram als hij in de terminal bezig is, en een Telegram-omweg kost hem tijd en aandacht. Telegram gebruik je alleen als (a) Jamal expliciet gezegd heeft dat hij onderweg is of alleen via Telegram bereikbaar is, of (b) jouw sessie headless draait en er dus niemand aan een terminal zit (de Telegram-bridge start claude -p; die zet de omgevingsvariabele TELEGRAM_STATE_DIR). De schakelaar voor (a) is het bestand ~/.claude/.jamal-onderweg: aanzetten met touch ~/.claude/.jamal-onderweg, uitzetten met rm -f ~/.claude/.jamal-onderweg. Technisch afgedwongen door de PreToolUse-hook ~/.claude/scripts/ask-via-telegram-guard.py, die sinds 6-9-2026 alleen nog blokkeert in die twee gevallen en verder zwijgt (zelftest: python3 ~/.claude/scripts/ask-via-telegram-guard.py --zelftest, 4 checks). Aanleiding: de oude versie van die hook (24-7-2026) blokkeerde terminal-vragen ALTIJD en verwees naar een geheugenbestand dat niet meer bestaat. Jamal, 6-9-2026: "als ik in de terminal bezig ben, ben ik absoluut niet in Telegram bezig. Telegram wordt alleen gebruikt als ik onderweg ben, als ik dat specifiek gezegd heb." Dit verandert NIETS aan de bestaande regel dat Telegram-berichten genummerd, kort en dyslexie-vriendelijk zijn, en alleen bij een mijlpaal of een echte beslissing worden gestuurd.

Bij twijfel over naam/spelling eerst aan Jamal vragen

rule_key: naam_spelling_eerst_vragen · prioriteit 67 · bijgewerkt 2026-09-13

Bij persoonsnamen met meerdere mogelijke spellingen of personen — vooral na spraak/voice-transcriptie — eerst aan Jamal vragen welke spelling of welke persoon hij bedoelt, voordat je een contact kiest of een bericht verstuurt. Voorbeeld: Eric met een c versus Erik met een k — Jamal kent beiden. Is de spelling al expliciet bevestigd binnen dezelfde context/conversatie, hoef je het niet opnieuw te vragen. Bevestigde namen: Eric Agterdenbosch (Easy Montage/Easy Technical Solutions, met een c) en Jorah (met een h aan het eind). Bron: Jamal, 13-9-2026, via de wachtrij (codex).

🎙️ Bespreek met Jarvis