Kirby Copilot überall im CMS
Writer-Felder, Blöcke und sichere API-Key-Verwaltung
Wer das Kirby-Plugin Kirby Copilot von Johann Schopplich installiert hat, stellt schnell fest: Der große Copilot-Button oben im Panel-View ist zwar praktisch, aber er ist nur der Anfang. Das eigentliche Potenzial entfaltet sich erst, wenn der KI-Assistent direkt in den Textfeldern auftaucht – im Writer-Feld, in der Textarea, in Blöcken. Genau das war das Ziel dieser Anpassungsrunde.
Wo Copilot erscheinen kann
Kirby Copilot unterstützt zwei Integrationspunkte innerhalb von Text-Feldern:
- Toolbar-Button (
copilot): Ein Button in der Toolbar des Feldes, der einen Dialog öffnet. Dort kann ein Prompt eingegeben werden, optional mit markiertem Text als Kontext. Das Ergebnis ersetzt den markierten Text oder wird angehängt. - Inline Suggestions (
copilot-suggestions): Nach einer kurzen Tipp-Pause erscheint ein Ghost-Text als Vorschlag. Mit der Tab-Taste wird er übernommen, einfach weiterschreiben verwirft ihn.
Beide Features werden über die marks-Liste (Writer) bzw. buttons-Liste (Textarea) im Blueprint aktiviert. Wichtig dabei: Wer bei einem Writer-Feld eigene marks definiert, muss copilot-suggestions explizit mit aufführen – sonst deaktiviert Kirby die Inline-Vorschläge stillschweigend, weil nur explizit gelistete Marks zugelassen werden.
Die Blueprint-Anpassungen im Detail
fields/writer.yml
Das ist die zentrale wiederverwendbare Writer-Feld-Vorlage, die per extends: fields/writer von vielen Page-Blueprints eingebunden wird – unter anderem vom description-Feld in allen drei Artikel-Blueprints. Eine Anpassung hier wirkt sich automatisch auf alle diese Felder aus.
Hinzugefügt am Ende der marks-Liste:
marks:
- bold
- italic
- underline
- strike
- code
- link
- email
- sub
- sup
- clear
- "|"
- copilot
- copilot-suggestions
fields/textarea.yml
Die zentrale Textarea-Vorlage bekommt den Copilot-Button in die buttons-Liste. Inline Suggestions gibt es für Textareas nicht – nur den Toolbar-Button:
buttons:
- bold
- italic
- '|'
- link
- email
- file
- '|'
- code
- ul
- ol
- '|'
- copilot
blocks/text.yml
Der Text-Block ist der häufigste Inhaltsblock und definiert sein Writer-Feld direkt im Blueprint – extends greift hier nicht. Deshalb mussten copilot und copilot-suggestions direkt in die marks-Liste des Blocks eingetragen werden. Identische Struktur wie bei fields/writer.yml.
blocks/hero.yml
Der Hero-Block hat zwei Writer-Felder: heading und text. Das Heading-Feld hat marks: false gesetzt – dort macht Copilot keinen Sinn, da es sich um eine kurze, formatierungsfreie Überschrift handelt. Das text-Feld hingegen wurde mit der vollständigen marks-Liste inklusive copilot und copilot-suggestions ausgestattet.
blocks/aside.yml
Der Aside-Block enthielt ein Writer-Feld ohne explizite marks-Definition – Kirby greift in diesem Fall auf den Standard zurück, was bedeutet, dass die Marks vorhanden sind, aber Copilot nicht. Nach der Anpassung ist die vollständige marks-Liste mit Copilot-Einträgen explizit definiert.
Bewusst ausgelassen
Zwei Block-Typen wurden nicht angepasst:
- blocks/markdown.yml: Das Markdown-Feld nutzt das Plugin
fabianmichael/kirby-markdown-fieldmit dem Feldtyptype: markdown. Dieses Plugin bringt eine eigene Toolbar mit und ist nicht kompatibel mit der Copilot-buttons-Konfiguration. - blocks/quote.yml: Quote-Texte sind naturgemäß kurz und prägnant – Copilot-Unterstützung wäre hier eher störend als hilfreich.
API-Keys sicher in die .env auslagern
In der ursprünglichen config.php standen zwei API-Keys im Klartext: der Google Gemini API-Key für Kirby Copilot und der Pexels API-Key für das Pexels Image Field. Das ist problematisch, sobald die Konfigurationsdatei in ein Git-Repository eingecheckt wird.
Die Lösung: eine .env-Datei im Kirby-Root, die bereits in der .gitignore eingetragen war:
COPILOT_API_KEY=...
PEXELS_API_KEY=...
Da Kirby keinen eingebauten .env-Loader mitbringt und kein zusätzliches Composer-Paket installiert werden sollte, wird die Datei direkt in der config.php per PHPs nativer parse_ini_file-Funktion eingelesen:
<?php
$env = parse_ini_file(__DIR__ . '/../../.env');
return [
'johannschopplich.copilot' => [
'providers' => [
'google' => [
'apiKey' => $env['COPILOT_API_KEY'],
],
],
],
'mauricerenck.PexelsImageField.apiKey' => $env['PEXELS_API_KEY'],
// ...
];
Der Pfad __DIR__ . '/../../.env' navigiert von site/config/ zwei Ebenen nach oben zum Kirby-Root. parse_ini_file ist schlank, benötigt keine externe Abhängigkeit und funktioniert zuverlässig – solange die Key-Werte keine Sonderzeichen enthalten, die das INI-Format verwirren könnten (in diesem Fall problemlos).
Fazit
Mit überschaubarem Aufwand ist Kirby Copilot jetzt an allen sinnvollen Stellen im Panel präsent: im zentralen Writer-Feld, in der Textarea, im Text-Block, im Hero-Block und im Aside-Block. Die API-Keys liegen sicher in der .env und werden nicht mehr in die Versionskontrolle eingecheckt. Eine solide Grundlage für KI-gestütztes Schreiben direkt im Kirby-Panel.