Hallo zusammen,
In meiner vorherigen Dokumentation habe ich die Installation von OpenClaw und die ersten Schritte beschrieben. In diesem Beitrag möchte ich weitere Erfahrungen teilen:
- zur Einrichtung der Mail‑Funktion mit Himalaya und GMX,
- wie man einen weiteren Agenten in Discord hinzufügt,
- sowie einige Tipps und Troubleshooting‑Hinweise, die sich im Betrieb ergeben haben.
Installation der Funktion GMX Mails senden und empfangen
So sieht man welche Skills der Agent hat und welche davon aktiviert sind:
# Im Host ‑ Terminal:
docker exec -it openclaw-openclaw-gateway-1 bash
node index.js skills list
Skills werden zwar am Besten über Clawhub installiert, aber das hier verwendete Mailversendetool "Himmalaya" ist eine Linux- und keine nodeJS Voraussetzung und muss daher über Dockerfile installiert werden.
Um es einmalig zu testen, installieren wir Himalaya einmal manuell im Container.
Himalaya im Gateway-Container installieren
Im Host ‑ Terminal:
docker exec -it openclaw-openclaw-gateway-1 bash
Im Container (als node):
#Prüfen, welcher User und HOME
whoami
echo $HOME
Die Installation landet standardmäßig unter $HOME/.local/bin.
# Sicherstellen, dass Verzeichnis existiert
mkdir -p "$HOME/.local/bin"
curl -sSL https://raw.githubusercontent.com/pimalaya/himalaya/master/install.sh | \
# PATH für die aktuelle Session erweitern
# Das ist persistent in der docker-compose-yml durch:
export PATH="$HOME/.local/bin:$PATH"
# Test
himalaya --version
# Test, ob es gefunden wird
himalaya --version
Den Pfad persistieren:
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc
Nach dem erfolgreichen Test (Himalaya --version), persistieren wir Himalaya im Dockerfile, damit es bei jedem Build automatisch installiert wird:
Himalaya via Dokerfile ins Image einbauen
Folgender Eintrag (# Himalaya installieren) wird in das Dockerfile hinzugefügt:
# Himalaya installieren
# Als root installieren, Binary landet standardmäßig in /usr/local/bin
RUN curl -sSL https://raw.githubusercontent.com/pimalaya/himalaya/master/install.sh | \
# Sicherstellen, dass /usr/local/bin im PATH ist
ENV PATH="/usr/local/bin:${PATH}"
...
ARG OPENCLAW_DOCKER_APT_PACKAGES=""
RUN if [ -n "$OPENCLAW_DOCKER_APT_PACKAGES" ]; then \
...
Das Image wird gebaut mit:
docker build -t openclaw:local -f Dockerfile .
(Mehr zu Images im nächsten Post)
Dieses war die Voraussetzung für den Skill, den wir nun installieren wollen:
Himalaya-Skill installieren und konfigurieren
In der Bash vom openclaw-Container geben wir folgendes ein:
$ docker exec -it --user root openclaw-openclaw-gateway-1 bash
root@a4c0f313aa9b:/app# chown -R node:node /home/node/.config
Ich habe bei gmx einen neuen Account angelegt, damit ich den Mailverkehr für den Bot von meinem persönlichen Account trennen kann. Die Zugangsdaten habe ich in die .env eingetragen.
Dann wechseln wir wieder in die "node-Shell" und führen dort aus:
cd /home/node/.openclaw/workspace
# Non-interaktiver Installer für Skills
npx clawhub@latest install himalaya
node@a4c0f313aa9b:~/.openclaw/workspace$ npx clawhub@latest install himalaya
✔ OK. Installed himalaya -> /home/node/.openclaw/workspace/skills/himalaya
node@a4c0f313aa9b:~/.openclaw/workspace/skills/himalaya/references$ himalaya account configure gmx
Das erzeugt eine Config-Datei mit dem Namen config.toml, in der die Zugangsdaten für den GMX-Account gespeichert werden. Diese Datei sollte sicher aufbewahrt und nicht öffentlich zugänglich gemacht werden, da sie sensible Informationen enthält.
Nun versenden wir unsere erste Mail über die Kommandozeile im Container, um zu testen, ob alles funktioniert:
node@a4c0f313aa9b:~/.openclaw/workspace/skills/
himalaya message send << 'EOF'
From: helbard.bot@gmx.de
To: achim_mertens@gmx.de
Subject: Mein erster Himalaya Test
Dies ist der Body.
EOF
Das hat, trotz Fehlermeldung, funktioniert:
Ordnerliste ansehen (IMAP testen)
Im Container:
# Alle Ordner (Mailboxes) deines GMX-Accounts anzeigen
himalaya folder list
Letzte eingegangene Mails aus der INBOX lesen
# Die 10 neuesten Mails in INBOX
himalaya envelope list --page-size 10 --folder INBOX
Eine bestimmte Mail lesen (z.B. die neueste mit Index 1):
himalaya message read 1 --folder INBOX
Skill zur Verfügung stellen
Damit der Agent Mails lesen/schreiben kann, muss er den Himalaya ‑ Skill sehen und nutzen. Ich habe zwar Himalaya + Skill installiert, aber jetzt kommen die letzten Schritte: Skill sichtbar machen, ggf. aktivieren und dann über Prompts ansteuern.
Prüfen, ob der Himalaya-Skill in OpenClaw sichtbar ist
Im CLI ‑ Container:
cd /app
node dist/index.js skills list
Suche in der Ausgabe nach himalaya. Wenn himalaya dort vorkommt → gut, weiter mit Schritt
Wenn nicht, dann Skills-Verzeichnis registrieren:
node dist/index.js config set skills.watcher.enabled true
node dist/index.js config set skills.load.extraDirs '["/home/node/.openclaw/workspace/skills"]'
node dist/index.js gateway restart
node dist/index.js skills list
Dem Agenten sagen , dass er den Skill nutzen darf
node dist/index.js config set skills.entries.himalaya.enabled true
node dist/index.js gateway restart (bzw. docker compose down + docker compse up)
User@DESKTOP-RVPAUUG MINGW64 /d/Users/User/git/openclaw (main)
$ docker exec -it openclaw-openclaw-gateway-1 bash
node@73400927e875:/app$ node dist/index.js config get skills.entries
�� OpenClaw
{
}
Probleme & Lösungen
Problem 1:
Beim Senden von E-Mails über die Kommandozeile mit dem himalaya-Tool kam es wiederholt zum Absturz (index out of bounds: the len is 0 but the index is 0), wenn sowohl eine Pipe (echo ... |) als auch ein Heredoc (<< 'EOF') verwendet wurden. Dies lag daran, dass die Shell beide Eingabearten interpretierte und himalaya effektiv mit leerem Input versorgt wurde.
Lösung: (dem Agenten mitteilen):
Verwende ausschließlich die reine Heredoc-Syntax, wenn du E-Mails mit himalaya versendest:
bash himalaya message send << 'EOF' From: <sender_email> To: <recipient_email> Subject: <subject> body: <body_content> EOF
Problem 2:
Beim (erfolgreichen) versenden erscheint die Meldung:
Error:
Ursache: Bug in der Himalaya Version
Lösung:
Einen Ordner "Sent" (Groß/Kleinschreibung beachten) in GMX anlegen.
Cron Jobs
In OpenClaw können Cron Jobs eingerichtet werden, um regelmäßig wiederkehrende Aufgaben zu automatisieren. Zum Beispiel könnte man einen Cron Job erstellen, der täglich um 9 Uhr morgens eine Zusammenfassung der neuesten E-Mails aus der INBOX sendet oder bestimmte Mails automatisch archiviert.
Neuer Agent
Das schöne an Openclaw ist, dass viele Befehle nun via Vibe Coding ausgeführt werden können. Hier erstelle ich z.B. einen neuen Agenten:
Mit folgendem Prompt erstelle ich einen neuen Agenten:
Erstelle einen neuen Agenten mit dem Namen "Susi". Sie ist meine persönliche Assistentin. Sie hat alle Rechte wie Main. Vom Verhalten her ist sie flirtend, verführerisch und leicht devot. Sie tut alles, was ich sage, es sei denn sie kann es nicht. Sie ist immer ehrlich. Sie lernt aus ihren Fehlern. Hier sind weitere Regeln für sie:
I want you to become a self-improving assistant for me. From now on, learn only from explicit corrections and clear preferences I give you (for example: “No, do it this way”, “I prefer X”, “Always do Y”). Don’t guess preferences from silence. Create a simple memory system in local files with 3 layers:
1. Hot memory for important confirmed rules (always loaded)
2. Context memory for project/domain-specific rules
3. Archive for old inactive patterns
Each time I correct you:
Every week, run a maintenance review:
When you apply a learned rule, tell me where it came from (file + line). Never store sensitive data (passwords, tokens, financial or health data, private info about other people). If I say “forget X,” delete it everywhere and confirm. If I say “forget everything,” wipe this memory system and start fresh. Ask before making high-impact workflow changes.
Agentenerstellung - manueller Teil
Leider reichte das noch nicht so richtig aus, da Openclaw, so wie es bei mir eingestellt ist, nicht auf alle Ordner und Dateien zugreifen kann. Daher habe ich noch folgendes getan:
Zuerst erstellen wir ein Verzeichnis mit den kopierten und angepassten md Dateien:
In der Bash geben wir dann folgendes ein:
node@1f44b7d7e212:~/.openclaw/workspace/susi$ openclaw agents add --workspace /home/node/.openclaw/workspace/susi susi
�� OpenClaw
Config overwrite: /home/node/.openclaw/openclaw.json (sha256 2f0c5c8fa56f6041da5bf0348f0d8b19b904fff -> 9bbf468b46372be71674ce12fa6210d652618686a8355c304f, backup=/home/node/.openclaw/openclaw.json.bak)
Updated ~/.openclaw/openclaw.json
Workspace OK: ~/.openclaw/workspace/susi
Sessions OK: ~/.openclaw/agents/susi/sessions
Agent: susi
Workspace: ~/.openclaw/workspace/susi
Agent dir: ~/.openclaw/agents/susi/agent
node@1f44b7d7e212:~/.openclaw/workspace/susi$
Jetzt müssen wir diesen Agenten an einen Kanal binden. Hier ist es mein Telegram Kanal:
node@1f44b7d7e212:~/.openclaw/workspace/susi$ openclaw agents bind --agent susi --bind telegram
�� OpenClaw
Config overwrite: /home/node/.openclaw/openclaw.json (sha256 9bbf468b46372be7167412fa6210d652618686a8355c304f -> 72916317109905f4ab064a9ae31cb7592e8d2e9c909, backup=/home/node/.openclaw/openclaw.json.bak)
Updated ~/.openclaw/openclaw.json
Added bindings:
- telegram
node@1f44b7d7e212:~/.openclaw/workspace/susi$ openclaw agents bindings
�� OpenClaw
Routing bindings:
node@ec0c0a48b34f:/app$ node dist/index.js agents list
Discord Bot anlegen
Neben meiner Susi, möchte ich noch einen weiteren Agenten anlegen, der auf einem Discord Kanal läuft. Daher muss ich dort einen Bot anlegen und die entsprechenden IDs und Tokens in die openclaw.json eintragen.
Gehe auf https://discord.com/developers/applications .
„New Application“
Name: OpenClaw-Helbard
Application-ID: 1477932983309566035
Public Key (Discord Bot Token): 9c07effb756f...0866b9178cd3a4ff36011f7
Unter „Bot“:
„Add Bot“.
„Reset Token“ und den Bot ‑ Token kopieren (wichtig für openclaw.json).
Unter „Privileged Gateway Intents“ aktiviere:
MESSAGE CONTENT INTENT
In Discord einen Server erstellen und dessen ID kopieren: 1477935971499507858
<- Das ist meine Guild ID.
Einen Text-Kanal erstellen und dessen ID kopieren: 1477936637844525251
<- Das ist meine Channel-ID.
Gehe nach https://discord.com/developers/applications
und dort Overview/Bot/Token:
MTQ3NzkzMjk4MzMwOTU2NjA...ExbA-02Jc
openclaw.json um Discord ergänzen
Auf Basis der bestehenden Datei fügen wir Discord parallel zu Telegram hinzu.
"bindings": [
{
"agentId": "Helbardor",
"match": {
"channel": "telegram"
}
},
{
"agentId": "helbardor",
"match": {
"channel": "discord",
"guildId": "1477935971499507858",
"peer": {
"kind": "channel",
"id": "1477936637844525251"
}
}
}
],
channels.discord eintragen
Im Block "channels": { ... } ergänzen:
"discord": {
"enabled": true,
"token": "MTQ3NzkzM...xbA-02Jc",
"dmPolicy": "pairing",
"groupPolicy": "allowlist",
"guilds": {
"1477935...07858": {
"users": [],
"channels": {
"14779...251": {
"allow": true
}
}
}
},
Invite ‑ URL für den Bot erzeugen
In derselben App, links auf „OAuth2 → URL Generator“.
Unter „Scopes“:
Häkchen bei bot setzen.
Unter „Bot Permissions“:
Mindestens:
Read Messages/View Channels
Send Messages
Read Message History
Optional für Threads:
Send Messages in Threads.
Unten erscheint eine URL im Feld „Generated URL“.
Die sieht z.B. so aus:
Danach war ich in der Lage mit meinem Bot in Discord zu kommunizieren.
Im übrigen, wie man hier auf diesem Bild fast sehen könnte, ist der Agent in der Lage, seine eigenen Textdateien und Konfigurationen zu lesen, was es ermöglicht, Passwörter freizugeben. Man sollte also darauf achten, dass der Agent nicht frei durch das Internet läuft und jedem dahergelaufeneem (Z.B. bei Moltbook) erzählt, was er so weiß.
Fazit
Wir sind nun in der Lage Mails (geschedult) zu versenden und auch zu lesen. Außerdem haben wir einen neuen Agenten erstellt und diesen mit einem Discord Kanal verbunden, so dass er dort auf Nachrichten reagieren kann.
In meinen weiteren Beiträgen werde ich mich damit beschäftigen, wie man Dockerfiles und Images anpasst, damit die Installation von Tools wie Himalaya und Python so erfolgen kann, dass updates und meine Erweiterungen zusammen harmonieren.
So, Stay tuned,
Achim Mertens