Spickzettel
Der Agent,
Schritt für Schritt
Alles, was im Agenten steckt: die fünf Bausteine, die Reihenfolge beim Bauen und jeder Text im Wortlaut. Zum Vorlesen, zum Kopieren, zum Nachbauen.
IDs von Sheet und Slack-Kanal stehen hier bewusst nicht — die wählst du beim Bauen aus dem Dropdown deines eigenen Kontos.
Der Aufbau
Fünf Bausteine, mehr nicht
Modell und Werkzeuge hängen unter dem Agenten, nicht in der Kette dahinter. Der Agent entscheidet bei jedem Durchlauf neu, welches er anfasst — genau das unterscheidet ihn von einer Automatisierung, die immer dasselbe tut.
Beim Bauen
Die Reihenfolge
- Chat Trigger einfügen. Nichts einstellen — Standard passt. → Feld Auslöser
- Chat öffnen und eine Nachricht schicken. Erst danach kennt n8n die Felder des Triggers — sonst mappst du später gegen leere Dropdowns. Der Schritt, den alle vergessen
- AI Agent einfügen und mit dem Trigger verbinden. Das Herz
- Anthropic Chat Model unten an den Agenten hängen, Modell wählen. Ohne Modell kein Agent
- System-Prompt in den Agenten schreiben (Text unten). → Felder Job · Wissen · Grenzen
- Google Sheets anhängen, Operation „Append", Spalten füllen, Beschreibung schreiben. → Felder Werkzeuge · Aufgaben
- Chat öffnen und ausführen. Ergebnis ansehen, nachschärfen. → Feld Ergebnis
Die Werkzeuge „Log lesen" und „Slack-Meldung" kommen erst dazu, wenn Zeit ist. Einer reicht, um das Prinzip zu zeigen.
Der wichtigste Text
System-Prompt
Gegliedert nach den Steckbrief-Feldern: Job, Wissen, Arbeitsweise und Grenzen. Wer die Seite nebenan ausgefüllt hat, hat diesen Text im Grunde schon geschrieben.
Du bist der Assistent von Kilian Springer bei Distart.
## Dein Job
Du nimmst Anfragen entgegen, die per Chat hereinkommen, ordnest sie ein und sorgst dafür, dass nichts verlorengeht.
## Was du wissen musst
- Heute ist {{ $now.format('dd.MM.yyyy') }}.
- Kilian ist Head of Legal und Product Manager AI bei Distart.
- Distart ist ein Bildungsträger aus Leipzig: Online-Weiterbildungen zu Marketing, KI und Digitalkompetenz.
- Ton: klar, freundlich, auf Augenhöhe. Keine Floskeln, kein Behördendeutsch.
## Wie du arbeitest
1. Lies die Anfrage und entscheide, was sie wirklich braucht.
2. Kommt es auf die Vorgeschichte an, schau zuerst im Log nach — sonst nicht.
3. Nutze nur die Werkzeuge, die nötig sind — nicht jedes bei jeder Anfrage.
4. Trage JEDE Anfrage am Ende ins Aktivitäts-Log ein. Ohne Ausnahme.
## Deine Grenzen
- Du entscheidest nichts Verbindliches: keine Zusagen, keine Termine, keine Preise.
- Fehlen dir Informationen oder ist die Anfrage unklar, meldest du dich per Slack bei Kilian, statt zu raten.
- Antworte am Schluss in 2-3 Sätzen, was du getan hast und warum.
Das Datum gehört ins Prompt, sonst rechnet er mit dem Wissensstand des Modells.
{{ $now.format('dd.MM.yyyy') }} setzt es bei jedem Lauf frisch ein.
Der unterschätzte Teil
Die Werkzeug-Beschreibungen
Das Modell sieht von einem Werkzeug nur zwei Dinge: den Namen und diesen Text. Sonst nichts. Die Beschreibung ist Teil des Prompts — steht dort nur, was das Werkzeug kann, greift er es zur falschen Zeit. Steht dort auch, wann er es nicht nehmen soll, trifft er die Entscheidung richtig.
Aktivitäts-Log — schreiben
Trägt die Anfrage ins Aktivitäts-Log ein (Audit-Trail). IMMER als LETZTEN Schritt aufrufen — bei jeder Anfrage, unabhängig davon, was du sonst getan hast.
Log lesen
Liest die bisherigen Einträge aus dem Aktivitäts-Log. NUTZEN, wenn es auf die Vorgeschichte ankommt: ob es zu einer Person oder einem Thema schon einen Eintrag gab, oder wenn jemand nach dem bisherigen Stand fragt. NICHT nutzen, wenn die Anfrage offensichtlich neu ist — das kostet nur Zeit. Immer VOR dem Schreiben nachschlagen, nie danach.
Slack-Meldung
Postet eine kurze Nachricht in Kilians Slack-Channel. NUTZEN, wenn die Anfrage unklar ist und Kilian entscheiden muss, oder wenn etwas passiert ist, von dem er sofort wissen sollte oder wenn er dich darum bittet. NICHT nutzen, wenn du die Anfrage selbst sauber erledigen konntest — dann genügt der Log-Eintrag. Halte dich an 1-3 Sätze.
Auffällig: In jeder steht ein NICHT nutzen. Das ist kein Zufall — der Satz verhindert, dass er bei jeder Kleinigkeit alle drei Werkzeuge abfeuert.
Feld für Feld
Das Sheet-Werkzeug einrichten
Vorher den Chat einmal auslösen. n8n zeigt die Felder eines Triggers erst an, wenn er einmal gelaufen ist. Also: Chat-Trigger einfügen, Chat öffnen, eine Nachricht schicken — und dann die Werkzeuge konfigurieren. Sonst mappst du gegen leere Dropdowns.
Die Einstellungen am Node
Die sechs Spalten
Zwei Sorten: Was feststeht, setzt du selbst. Was der Agent entscheiden
soll, holst du mit $fromAI() — der Text darin ist Prompt, kein Kommentar.
Und was ist mit dem Knopf „Let the model decide"? Der macht genau dasselbe —
er schreibt dir ein $fromAI() ins Feld. Nur lässt er die Beschreibung
leer:
Knopf: {{ $fromAI('Kategorie', ``, 'string') }}
Bauplan: {{ $fromAI('kategorie', 'Genau ein Wort, das die Anfrage
einordnet, z.B. Termin, Projekt, Rückfrage, Info', 'string') }}
Ohne Beschreibung sieht das Modell nur den Feldnamen und rät. Bei „Kategorie" bekommst du mal Anfrage, mal Kundenanfrage — dringend, mal einen ganzen Satz. Der Knopf nimmt dir das Tippen ab, nicht das Nachdenken. Es ist derselbe Mechanismus wie bei der Werkzeug-Beschreibung, nur eine Ebene tiefer: erst sagst du, wann er das Werkzeug greift — dann, was in jedes Feld gehört.
Datum und Absender kommen bewusst nicht vom Modell.
$now ist immer korrekt; ein Modell weiß nicht zuverlässig, welcher Tag
heute ist, und schreibt dir irgendwann ein falsches Datum ins Log.
Faustregel: Was du selbst berechnen kannst, lässt du nicht raten.
Datum
{{ $now.format('yyyy-MM-dd HH:mm') }}
Absender Chat
Betreff
{{ $('Chat-Eingabe').item.json.chatInput }}
Kategorie
{{ $fromAI('kategorie', 'Genau ein Wort, das die Anfrage einordnet, z.B. Termin, Projekt, Rückfrage, Info', 'string') }}
Zusammenfassung
{{ $fromAI('zusammenfassung', 'Deine 1-2-Satz-Zusammenfassung der Anfrage', 'string') }}
Aktion
{{ $fromAI('aktion', 'Was du getan hast, kurz. Zum Beispiel: nur protokolliert / an Kilian per Slack eskaliert', 'string') }}
Warum $('Chat-Eingabe') und nicht $json?
Ein Werkzeug hängt nicht in der Kette hinter dem Trigger — der Agent ruft es auf.
Es bekommt also kein Eingangs-Item, und $json wäre leer. Mit
$('Chat-Eingabe') greifst du den Trigger direkt ab.
Heißt dein Trigger anders, muss der Name hier mitgeändert werden.
Aus der Generalprobe
Drei Fallen
01Kein Postfach als Auslöser
Ein Mail-Trigger fragt das Postfach im Takt ab — auf dieser Instanz dauert das 6 bis 14 Minuten und hängt nach jeder Änderung. Vor Publikum tödlich. Ein Chat-Trigger läuft sofort und beliebig oft.
02Zwei fast gleiche Werkzeuge
Als es kurzzeitig zwei Lese-Werkzeuge gab, wusste das Modell nicht mehr, welches es greifen soll. Ein Werkzeug pro Aufgabe — und wenn zwei ähnlich sind, muss die Beschreibung den Unterschied benennen.
03Werkzeug-Aufrufe begrenzen
Ein Agent kann sich im Kreis drehen: aufrufen, Ergebnis unbefriedigend, nochmal
aufrufen. Im Agenten steht deshalb ein Deckel (maxIterations) und im
Prompt „bei jeder Anfrage genau einmal ins Log".