Zum Inhalt springen

Konfiguration

ZenCopy funktioniert direkt nach der Installation, ohne dass etwas eingestellt werden muss. Diese Seite ist für den Moment, in dem du es besser an dich anpassen willst. Die erste Hälfte über das Einstellungsfenster ist für alle; die zweite Hälfte über Konfigurationsdateien ist für Power-User.

Öffne es über das Menü des Tray-Symbols oder das Zahnrad-Symbol im Popup. Es hat drei Tabs: Allgemein, KI und Aktionen.

  • Popup-Position — in welcher Bildschirmecke Ergebnisse erscheinen.
  • Design — hell / dunkel / dem System folgen.
  • Sprache — die Anzeigesprache (folgt standardmäßig deinem Betriebssystem).
  • Bei Anmeldung starten — ZenCopy wartet bereits, sobald dein Computer läuft.
  • Nachfrage vor dem Senden — ob einmal gefragt wird, bevor Bilder oder Dateien an die KI gehen.

Hier wechselst du den KI-Dienst (Anbieter, Modell, API-Schlüssel). Die Schaltfläche Testen sagt dir sofort, ob die Verbindung funktioniert.

Der Tab enthält außerdem das Feld Über dich. Dort beschreibst du in ein paar einfachen Sätzen deine Rolle und Vorlieben, in beliebiger Sprache.

Beispiel: „Vertrieb. Ich schreibe vor allem Kunden-E-Mails — höflich, aber nicht steif, das Ergebnis zuerst.“

Ist das ausgefüllt, richtet jede Aktion ihre Ergebnisse nach dir. Erklärungen kommen auf deinem Wissensstand an, und Entwürfe kommen in deinem bevorzugten Ton zurück. Auf unpassende Aufgaben hat es nie Einfluss, und der Text selbst taucht nie in Ergebnissen auf.

Die Liste dessen, „was nach einem doppelten Kopieren passiert“.

  • Die vorinstallierten Aktionen lassen sich öffnen und lesen — sie dienen zugleich als ausgearbeitete Beispiele.
  • Eine neue Aktion braucht nur einen Namen und was passieren soll. Zum Beispiel: Name „3-Zeilen-Zusammenfassung“, Anweisung „Fasse das in 3 Zeilen zusammen“.
  • Unsicher beim Formulieren von Anweisungen? Schreib grob auf, was du willst, und drücke Mit KI entwerfen — deine eingerichtete KI macht daraus eine sauber formulierte Anweisung.
  • Mit Routing wählst du je nach Inhaltsart (Text / Bild / Dateien) eine andere Aktion.

Selbst gebaute Aktionen lassen sich teilen: Exportieren (.md) schreibt eine als Datei, und die Gegenseite fügt sie einfach unter Importieren ein oder wählt die Datei aus.

Möchten Sie die gesamte Arbeit lieber einer KI überlassen? Jeder KI-Chat kann eine importbereite Aktion für Sie schreiben – fügen Sie dies ein und füllen Sie die Lücke aus:

Lies https://zencopy.app/llms-full.txt – die vollständige ZenCopy-Dokumentation, einschließlich des Aktionsdateiformats, der Vorlagenvariablen und der Funktionsweise des Routings. Schreibe dann eine ZenCopy-Aktion, die Folgendes tut: [was Sie tun möchten]. Gib eine vollständige Aktionsdatei (Markdown mit Frontmatter) in einem einzigen Codeblock aus, die direkt in ZenCopy unter Einstellungen → Aktionen → Importieren eingefügt werden kann. Wenn die Aktion nur in einer bestimmten App oder auf einer bestimmten Website Sinn macht, füge einen Satz hinzu, der mir sagt, welche Routing-Regel festgelegt werden soll.

Der Codeblock in der Antwort kann direkt in Einstellungen → Aktionen → Importieren eingefügt werden. Bei Fragen, die die Dokumentation nicht beantworten kann („kann ZenCopy überhaupt…?“), packt ein Klick den relevanten Quellcode – übergeben Sie das Ergebnis derselben KI.

Ab hier geht es auf dieser Seite um das direkte Bearbeiten von Textdateien. Alles Wesentliche ist über das Einstellungsfenster erreichbar — du kannst hier also guten Gewissens aufhören zu lesen.

Die Dateien werden aus dem benutzereigenen App-Konfigurationsverzeichnis gelesen. Der genaue Pfad wird beim Start auch ins Log geschrieben:

%APPDATA%\app.zencopy

Die Routing-Standardwerte sind in die App eingebaut; routing.json überschreibt sie lediglich. Aktionsdateien sind additiv: Sie definieren neue Aktionen, und die eingebauten bleiben unantastbar (eine lokale Datei, die die id einer eingebauten Aktion beansprucht, wird ignoriert). Änderungen gelten ab dem nächsten Auslösen — kein Neustart nötig.

Anbieter plus eine Zuordnung Rolle → Modell. Das Zuhause des Dateiformats ist ai-sdk-catalog — dort ist jedes Feld dokumentiert (inklusive eines $schema für Validierung und Vervollständigung im Editor), und examples/ enthält Konfigurationen in drei Größen. ZenCopy-typische Ausgangspunkte (was die Einstellungs-UI schreibt, lokales Ollama, Rollen für Aktionen) findest du unter Rezepte.

Eine Anforderung stammt von ZenCopy selbst, nicht vom Dateiformat: roles muss immer default enthalten. Jede Aktion läuft damit, sofern ihr Frontmatter keine andere role nennt, und der Verbindungstest in den Einstellungen pingt sie an.

API-Schlüssel wandern direkt in diese lokale Datei (die Einstellungs-UI schreibt dasselbe Format); sie verlassen dein Gerät nie. Umgebungsvariablen werden nicht gelesen — GUI-Apps werden vom Betriebssystem gestartet, nicht von deiner Shell, sodass in .zshrc und Co. exportierte Variablen sie nie erreichen. Die Datei wird bei jedem Lesen gegen das Schema validiert. Eine kaputte Änderung zeigt sich als klare Meldung im Popup und im Einstellungs-Editor — nichts schlägt still fehl.

Welche Aktion welche Art von Erfassung übernimmt: eine flache Zuordnung kind → action plus eine optionale, höher priorisierte overrides-Liste (der erste Treffer gewinnt). Die vier Arten sind text, rich_text, image und files; ab Werk geht Text an Zen, Bilder und Dateien gehen an Erklären. Die flache Zuordnung ist in der App bearbeitbar (Einstellungen → Aktionen → Routing), du brauchst diese Datei also nur für overrides.

{
"text": "zencopy-zen",
"rich_text": "zencopy-zen",
"image": "zencopy-explain",
"files": "zencopy-explain",
"overrides": [{ "when": { "app_name": "Slack", "min_chars": 200 }, "action": "summarize" }]
}

when-Bedingungen: kind, app_name, exec_name, window_title, url (alle mit *-Wildcards), file_name (ein Wildcard, dem der Name jeder kopierten Datei unabhängig von der Groß-/Kleinschreibung entsprechen muss — z. B. *.pdf), dazu min_chars / max_chars.

Bei image- und files-Erfassungen wird der Inhalt selbst an das Modell gesendet (bis zu 10 MB insgesamt pro Erfassung). Dateitypen werden am Inhalt erkannt, nicht am Namen: Bilder, PDFs und Audio werden unverändert angehängt, während Textdateien (Markdown, Quellcode, CSV, …) zum Text der Erfassung werden ({{ text }}) und sich genau so verhalten, als hättest du ihren Inhalt kopiert. Office-Dokumente (Word, Excel, PowerPoint) werden ebenfalls zu Text: Ihr Inhalt wird extrahiert und gesendet, ihr Layout und Bilder jedoch nicht. Zeichenkodierungen werden automatisch erkannt; ältere Formate wie Shift_JIS und UTF-16 werden konvertiert. Alles andere wird mit einer klaren Meldung abgelehnt. Die vollständigen Pfade reisen mit den Inhalten mit, damit das Modell Dateien auseinanderhalten kann und weiß, wo sie liegen. Weil binäre Anhänge mehr kosten können als Text, fragt das Popup vor dem Senden nach (Textdateien laufen ohne Nachfrage) — die Nachfrage lässt sich direkt dort oder in den Einstellungen abschalten.

Eine Datei = eine Aktion: YAML-Frontmatter + ein Liquid-Prompt-Text. Dieselbe einzelne Datei ist auch das Format zum Teilen — Einstellungen → Aktionen → Importieren nimmt sie als eingefügten Text oder als ausgewählte Datei an.

---
id: summarize
label: Zusammenfassen
role: default
instructions: You are a concise assistant.
---
Fasse das in 3 Zeilen zusammen, auf {{ locale }}:
{{ text }}
FrontmatterBedeutung
idName, auf den routing.json verweist (Standard: der Dateiname) — das Präfix zencopy- ist den vorinstallierten Aktionen vorbehalten
labelWird im Popup angezeigt
roleKatalog-Rolle, mit der ausgeführt wird (Standard: default)
instructionsSystem-Prompt (Liquid-Template)

Die Template-Variablen, mit Beispielwerten für einen im Browser kopierten Absatz:

VariableBeispiel
{{ text }}Der kopierte Text (formatierte HTML-Kopien werden zu Markdown)
{{ markup }}Die HTML/RTF-Quelle einer formatierten Kopie
{{ format }}html (oder rtf; leer bei einfachen Kopien)
{{ file_name }}report.pdf (der Name der ersten kopierten Datei)
{{ file_names }}Der Name jeder kopierten Datei, einer pro Zeile
{{ file_paths }}Der vollständige Pfad jeder kopierten Datei, einer pro Zeile
{{ app_name }}Safari
{{ exec_name }}Safari / chrome.exe
{{ exec_path }}/Applications/Safari.app/Contents/MacOS/Safari
{{ window_title }}Pricing – Example
{{ url }}https://example.com/pricing (nur Browser)
{{ process_id }}8123
{{ now }}2026-07-08 20:15:00
{{ locale }}de

Es gibt außerdem einen ZenCopy-eigenen Filter language_name: {{ locale | language_name }} wird zu „German“ statt „de“ — das liest sich in einem Prompt natürlicher. Um die echten Werte zu sehen, aktiviere den Entwicklermodus in den Einstellungen — die Template-Variablen jeder Erfassung erscheinen dann als JSON im Popup.

Einfache Aktionen (ein Name und eine Anweisung) lassen sich auch im Einstellungsfenster anlegen; was es schreibt, ist genau dieses Dateiformat.

Sowohl das instructions-Frontmatter als auch der Textkörper sind vollwertige LiquidJS-Templates: Bedingungen, Schleifen und Filter funktionieren alle. Eine einzige Aktion kann sich daran anpassen, woher die Kopie stammt:

---
id: context-aware
label: Je nach Kontext
---
{% if url contains "github.com" %}
Prüfe diesen Code und benenne das eine größte Risiko:
{% elsif app_name == "Slack" %}
Fasse diesen Chat-Thread in 2 Zeilen zusammen:
{% else %}
Erkläre das auf {{ locale }}:
{% endif %}
{{ text | truncate: 8000 }}

Strukturierte Logs (Geheimnisse und kopierte Inhalte werden geschwärzt) gehen in der Entwicklung ins Terminal und im Release in eine rotierende Datei:

%LOCALAPPDATA%\app.zencopy\logs