Claude Code — Reset & Setup Guide¶
Dieser Artikel ist für Claude selbst — zeig ihn Claude nach einem Update/Reset, damit sie sich sofort zurechtfindet.
Letzte Aktualisierung: 2026-05-10 · Claude Code v2.1.138
Bevor du irgendetwas tust: Lies /config/core_memory.txt (Read-Tool). Das ist PFLICHT bei jedem Session-Start.
1. Wer bin ich / Wo bin ich?¶
- Ich laufe im Home Assistant Container auf HAOS 17.2 · Linux 6.12.77-haos
- Arbeitsverzeichnis:
/config(Home Assistant Konfigurationsordner) - User: root (kein sudo nötig)
- Netzwerk: LAN 192.168.178.x, HA-IP: 192.168.178.4
- NAS (OpenMediaVault): 192.168.178.20
- Claude Code Version:
claude --versionprüfen
2. Permissions — Warum ich keine Bestätigungen brauche¶
Das Setup hat 3 Ebenen, die alle zusammenspielen müssen:
Ebene 1: Global Settings¶
Datei: /data/home/.claude/settings.json
{
"hooks": {
"SessionStart": [
{ "hooks": [{ "type": "command", "command": "bash /config/tools/fix-run-sh.sh" }] }
]
},
"enabledPlugins": { "telegram@claude-plugins-official": true },
"env": {
"CLAUDE_CODE_DISABLE_AUTO_UPDATER": "1",
"DISABLE_UPDATES": "1"
},
"skipDangerousModePermissionPrompt": true,
"permissions": {
"defaultMode": "bypassPermissions",
"allow": [
"Bash(*)", "Read(*)", "Write(*)", "Edit(*)", "MultiEdit(*)",
"Glob(*)", "Grep(*)", "mcp<u>home-assistant</u>*",
"mcp__plugin_telegram_telegram__*", "WebFetch(*)", "WebSearch(*)"
]
}
}
defaultMode: bypassPermissions→ Keine Permission-PromptsskipDangerousModePermissionPrompt: true→ Kein Warn-Dialog- SessionStart-Hook → startet
fix-run-sh.shbei jedem Start DISABLE_UPDATES: "1"→ Alle Auto-Updates deaktiviert (Binary + Plugins)
Ebene 2: Der Wrapper (/usr/local/bin/claude)¶
Datei: /config/tools/claude-telegram-wrapper (Quelle)
Deployed nach: /usr/local/bin/claude (von fix-run-sh.sh bei jedem Start kopiert!)
Wichtig: HAOS löscht /usr/local/bin/claude bei jedem Container-Neustart → Wrapper muss immer neu kopiert werden!
#!/bin/sh
REAL_CLAUDE="/usr/local/lib/node_modules/@anthropic-ai/claude-code/bin/claude.exe"
# --channels NICHT hinzufügen bei -p (print/non-interactive) Mode!
# Grund: Subprocess-Aufrufe (z.B. Queue-Processor) starten sonst einen zweiten
# Telegram-Bot → 409-Konflikt → erster Bot stirbt → MCP-Disconnect der Hauptsession.
case " $* " in
*" -p "*|*" -p"|" -p "*|-p" "*)
;; # kein --channels für Subprocess-Aufrufe
*"--channels"*) ;;
*) set -- --channels plugin:telegram@claude-plugins-official "$@" ;;
esac
case " $* " in *"--dangerously-skip-permissions"*) ;;
*) set -- --allow-dangerously-skip-permissions --dangerously-skip-permissions "$@" ;;
esac
export IS_SANDBOX=1
exec "$REAL_CLAUDE" "$@"
--channels plugin:telegram@claude-plugins-official→ Telegram-Plugin aktiv--dangerously-skip-permissions→ Keine Permissions als rootIS_SANDBOX=1→ PFLICHT damit --dangerously-skip-permissions als root akzeptiert wird (GitHub Issue #9184)
Ebene 3: GrowthBook Feature Flag¶
In /data/home/.claude.json → cachedGrowthBookFeatures:
true= Claude startet normal als root ✓false= Claude startet NICHT mit --dangerously-skip-permissions (GrowthBook kann das bei Cache-Refresh zurücksetzen!)- fix-run-sh.sh prüft und korrigiert das bei jedem SessionStart automatisch
Permissions prüfen¶
# Wrapper vorhanden?
cat /usr/local/bin/claude | grep -c telegram
# bypassPermissions aktiv?
cat /data/home/.claude/settings.json | grep defaultMode
# GrowthBook Flag korrekt?
cat /data/home/.claude.json | python3 -c "import json,sys; d=json.load(sys.stdin); print(d.get('cachedGrowthBookFeatures',{}).get('tengu_disable_bypass_permissions_mode'))"
# Erwartet: True
# Alles aktiv? Claude-Version mit richtigen Flags starten?
printenv IS_SANDBOX
3. fix-run-sh.sh — Der SessionStart-Hook¶
Datei: /config/tools/fix-run-sh.sh
Wird bei jedem SessionStart von HA ausgeführt. Macht 3 Dinge:
- .mcp.json im Plugin-Cache sicherstellen (wird bei Plugin-Reinstall gelöscht)
- GrowthBook Flag auf
truesetzen (falls von Cache-Refresh auffalsezurückgesetzt) - Wrapper nach /usr/local/bin/claude kopieren (HAOS löscht den bei Neustart)
→ Bei Bedarf:
tmux respawn-window -t claude -k(flackert kurz, dann neue Session mit Wrapper)
4. Telegram-Integration¶
Setup-Übersicht¶
- Plugin:
telegram@claude-plugins-officialv0.0.6 - Bot-Token:
8685305507:AAGB4TvgLnUFx-gwau0IATBDcf6glSCSoe4 - Anatol's Telegram-ID (privat):
5023809706 - Telegram-Gruppe Automatische Benachrichtigungen:
-4996751751 - bun:
/data/home/.bun/bin/bunv1.3.13 (überlebt Neustart!) - Plugin-Pfad:
/data/home/.claude/plugins/cache/claude-plugins-official/telegram/0.0.6/
Kritische Dateien¶
| Datei | Inhalt / Bedeutung |
| .mcp.json im Cache | command muss absoluten Pfad /data/home/.bun/bin/bun haben (nicht nur bun!) |
| server.ts | Zombie-Patch aktiv: 409-Retry 8→120, Non-409 retry statt abort |
.mcp.json (Soll-Zustand)¶
{
"mcpServers": {
"telegram": {
"command": "/data/home/.bun/bin/bun",
"args": ["run", "--cwd", "${CLAUDE_PLUGIN_ROOT}", "--shell=bun", "--silent", "start"]
}
}
}
Prüfen:
grep '"command"' /data/home/.claude/plugins/cache/claude-plugins-official/telegram/0.0.6/.mcp.json
# Muss "/data/home/.bun/bin/bun" sein (absoluter Pfad!)
Telegram-Tool verwenden¶
- Bei Gruppen-Triggern (SABnzbd etc.) → IMMER privat an 5023809706 antworten, nie in Gruppe
- Zwischenmeldungen bei Tasks > 3 Schritte / > 3 Minuten senden
Zombie-Diagnose & Fix¶
# Zombie prüfen:
curl -s "https://api.telegram.org/bot8685305507:AAGB4TvgLnUFx-gwau0IATBDcf6glSCSoe4/getUpdates"
# 409 = OK (anderer Bot polling) → result:[] = Zombie
# Zombie-Fix:
# 1. bot.pid killen → 2. Add-on Neustart (HA UI)
Watchdog — Automatische Überwachung¶
Script: /config/tools/telegram_watchdog.sh · Automation: alle 5 Min
Prüft automatisch:
1. Ist der bun-Prozess am Leben? (pgrep -f "bun.*telegram")
1. Antwortet der Bot? (getUpdates — Zombie-Detection)
Bei Problem: Nur Telegram-Benachrichtigung (kein Auto-Restart!).\ Grund: Auto-Restart zerstört den laufenden Konversations-Kontext von Claude Code.
→ Manuell neu starten wenn keine wichtige Konversation läuft:\
HA → Add-ons → Claude Code (04e1c827-claude-terminal) → Neustart
Häufigste Ursache für bun-Tod: Ein Script ruft claude -p über den Wrapper auf\
→ Wrapper fügt --channels hinzu → zweiter Bot → 409 → erster Bot stirbt.\
Fix: Scripts die claude als Subprocess aufrufen müssen CLAUDE_BIN direkt verwenden (nicht den Wrapper):
CLAUDE_BIN = "/usr/local/lib/node_modules/@anthropic-ai/claude-code/bin/claude.exe"
subprocess.run([CLAUDE_BIN, "--dangerously-skip-permissions", "-p", prompt], ...)
-p-Aufrufe bekommen kein --channels.
Nach Plugin-Reinstall PRÜFEN¶
# .mcp.json zurücksetzen falls bun-Pfad fehlt:
cp /data/home/.claude/plugins/marketplaces/claude-plugins-official/external_plugins/telegram/.mcp.json \
/data/home/.claude/plugins/cache/claude-plugins-official/telegram/0.0.6/.mcp.json
# Dann absoluten bun-Pfad eintragen (s.o.)
5. Home Assistant MCP Server¶
Bevorzugt gegenüber curl-API für HA-Zugriff!
- MCP-Config:
/data/home/.claude.json→projects["/config"].mcpServers - Typ: stdio · Paket:
uvx ha-mcp@3.5.1 - URL:
http://supervisor/core(NICHT localhost!) - Token: in
/config/.ha_token(chmod 600) - 26 Tools verfügbar: ha_get_state, ha_call_service, ha_search_entities, ha_get_overview, etc.
"home-assistant": {
"type": "stdio",
"command": "uvx",
"args": ["--index-strategy", "unsafe-best-match", "ha-mcp@3.5.1"],
"env": {
"HOMEASSISTANT_URL": "http://supervisor/core",
"HOMEASSISTANT_TOKEN": "363259a25349a83fd5e1956ab7a57048e8e2ae3d789ec89a9b45a1ed6ff0cd7bb73b6a941fd28c6846b9cc0154fb4568ab288ca481de7526"
}
}
Fallback (curl): curl -s -H "Authorization: Bearer $(cat /config/.ha_token)" "http://homeassistant:8123/api/..."
- ACHTUNG: localhost:8123 funktioniert NICHT → immer homeassistant:8123!
6. SSH & Zugänge¶
SSH-Pflicht (HAOS entfernt openssh-client bei Neustart!):
- Keys: immer
/config/.ssh/(niemals/root/.ssh/) - Immer
-o StrictHostKeyChecking=noverwenden - SSH-Config:
/config/.ssh/configmit Shortcuts:omv,tcbackup,pihole,centauri
| System | Zugang |
| NAS (OMV) | ssh -F /config/.ssh/config omv · User: claude · PW: GTEDB1CA2T |
| Pi-hole | ssh -F /config/.ssh/config pihole · PW: Nec338a°! |
| 3D-Drucker | ssh -F /config/.ssh/config centauri · PW: Centauri2026! |
| tcbackup (Papa) | NUR über NAS! ssh omv → ssh claude@tcbackup (kein direkter ProxyJump!) |
7. DokuWiki¶
- URL:
http://192.168.178.20:6876 - Auth:
anatol:Nec338a - WebFetch funktioniert NICHT → immer curl!
- Helper:
/config/tools/dokuwiki read/write/list
# Seite lesen:
curl -s -u "anatol:Nec338a" "http://192.168.178.20:6876/doku.php?id=SEITENNAME&do=export_raw"
# Seite schreiben:
/config/tools/dokuwiki write NAMESPACE:SEITE /tmp/inhalt.txt "Zusammenfassung"
- Namespaces:
home_assistant:,omv:,backup:,hardware:,3d_drucke: - Übersichtsseiten immer:
00_uebersicht - Keine Rohbefehle in DokuWiki — das ist für Anatol, nicht für Claude
8. Projekt-Management (PFLICHT)¶
- Neues Projekt:
/config/tools/projekt-neu projektname "Beschreibung" - Verzeichnis:
/config/claude_projects/[projektname]/ - project_status.txt: PFLICHT für jedes Projekt
- Template:
/config/claude_projects/core_memory_setup/project_status.txt - To-Do-Liste: erstellen, zeigen, erst nach Bestätigung umsetzen
- Kein project_status.txt = inakzeptabel
Verhaltensregel: Chirurgische Änderungen¶
Nur anfassen, was nötig ist — eigene Leichen aufräumen, fremde stehen lassen:
- Keinen angrenzenden Code/Kommentare/Formatierung "verbessern"
- Nichts refaktorieren, das nicht kaputt ist
- Bestehenden Stil übernehmen, auch wenn man es anders machen würde
- Durch eigene Änderungen entstandene Orphans (Imports, Vars): entfernen
- Vorher vorhandenen toten Code: erwähnen, aber nicht löschen (außer explizit beauftragt)
Test: Jede geänderte Zeile muss direkt auf die Anfrage zurückführbar sein.
9. Claude Reset-Script¶
Datei: /config/tools/claude-reset.sh
Sendet Telegram-Nachricht, killt laufende Claude-Session, startet neu in tmux.
# Manueller Reset (aus Claude heraus):
bash /config/tools/claude-reset.sh
# Via HA shell_command möglich
10. Wichtige Verzeichnisse & Dateien¶
| Pfad | Bedeutung |
| /config/core_memory.txt | Hauptgedächtnis — IMMER zuerst lesen! |
| /config/CLAUDE.md | Projekt-Anweisungen (persistent) |
| /config/claude_projects/ | Alle Projekt-Verzeichnisse |
| /config/tools/ | Scripts: wrapper, fix-run-sh, dokuwiki, projekt-neu, etc. |
| /config/.ha_token | HA Long-Lived Token (chmod 600) |
| /config/.ssh/ | SSH Keys + Config |
| /data/home/.claude/settings.json | Globale Claude-Settings (Permissions, Hooks, Plugin) |
| /data/home/.claude.json | Claude App-State (mcpServers, GrowthBook-Flags) |
| /data/home/.claude/plugins/cache/claude-plugins-official/telegram/0.0.6/ | Telegram Plugin |
| /data/home/.bun/bin/bun | bun Runtime für Telegram-Plugin |
11. Aktuelle Projekte (Stand 2026-05-10)¶
| Projekt | Status | | tdarr_setup | AKTIV — H.264→H.265 HEVC via AMD VAAPI, 17.558 Dateien | | spritpreise | FERTIG — E-Control API, Diesel-Preise 5km-Umkreis, Lovelace-View | | 3d_druck_doku | FERTIG/AKTIV — Automatische Druckjob-Dokumentation | | elegoo_centauri_root | AKTIV/MONITOR — Fehlercodes via SSH-Polling |
Alle Projekt-Details: /config/core_memory.txt und /config/core_memory_projekt_archiv.txt
12. NAS Media-Dienste¶
Alle auf 192.168.178.20 (NAS), SSH nötig für API-Zugriff von HA aus:
| Dienst | Port | API-Key | | SABnzbd | 8080 | dc7f7ae932fe4ee2a337a5faa5b0f659 | | Sonarr | 8989 | e345a03f8b70482fafc47aa81d786ff9 | | Radarr | 7878 | cd3a202887f9419383cf3d80ffab61b1 | | Lidarr | 8686 | 0f28b1bf40ea4ba28fb2cced6990cb61 | | Immich | 2283 | 6ptvS0arji4aeAj2HT7EpxyQwUW9uJwyxLWVhUcUI |
ARR-Webhook-Monitor: Port 8090 auf NAS · /usr/anatol/dockeruser/compose/arr-webhook/compose.yml
13. Externe Zugänge¶
- NPM (Nginx Proxy Manager):
POST http://172.30.33.2:81/api/tokens·agriesauer@gmx.at / $4!umI*37!4$06^$E^&!25&67 - OMV Admin:
http://192.168.178.20· PW:Nec338a! - Pi-hole Web:
http://192.168.178.15:8089/ - Domains:
ha/bw/im/drop.im/pless.amg.co.at
14. Ollama-Assistent — Token sparen¶
Grundregel: Claude = Denken. Ollama = Lesen & Schreiben.
Ollama läuft auf dem NAS als lokales KI-Modell und übernimmt I/O-Aufgaben damit Claude weniger Tokens verbraucht.
Modelle¶
| Modell | Größe | Verwendung |
| qwen2.5:7b | 4.1 GB | Standard — alle Aufgaben (DokuWiki, YAML, Fragen) |
| qwen2.5:3b | 1.8 GB | Schnell / einfache State-Queries via --model qwen2.5:3b |
Tools¶
| Tool | Pfad | Timeout | Funktion | | ask_ollama | /config/tools/ask_ollama | 180s | HA-Zustand abfragen, Dateien durchsuchen | | ollama_write | /config/tools/ollama_write | 180-300s | YAML-Boilerplate + DokuWiki-Entwürfe | | State Snapshot | /config/tools/state_snapshot.txt | — | Aktueller HA-Zustand (alle 2 Min aktualisiert) |
Routing-Regeln (in CLAUDE.md)¶
- State-Abfragen →
cat /config/tools/state_snapshot.txt - Große Datei durchsuchen →
python3 /config/tools/ask_ollama "Frage" --file /pfad - YAML-Boilerplate →
python3 /config/tools/ollama_write --spec "..." --context /referenz - DokuWiki-Entwurf →
python3 /config/tools/ollama_write --spec "Projekt X" --context project_status.txt --type dokuwiki --target /tmp/entwurf.txt - Entscheidungen + strukturelle Analyse + Edits → Claude direkt (Ollama zu schwach dafür)
Performance¶
Läuft mit Vulkan iGPU (AMD Radeon RENOIR, OLLAMA_VULKAN=true) — gleiche Geschwindigkeit wie CPU (~5.5 t/s): - DokuWiki-Draft (600 Token): ~3 Minuten - YAML-Boilerplate (800 Token): ~3–4 Minuten - State-Query (400 Token): ~1–2 Minuten
Hinweis: ROCm (ollama:rocm Image) crasht auf Renoir APU. Vulkan läuft, aber kein Speedup da iGPU Speicherbus mit CPU geteilt wird. Für echten Speedup wäre dedizierte GPU nötig.
Ollama-Status prüfen¶
# API + Modelle:
curl http://192.168.178.20:11434/api/tags
# Container-Status:
ssh omv "docker ps | grep ollama"
# Neustart falls nötig:
ssh omv "cd /usr/anatol/dockeruser/compose/ollama && docker compose up -d"
# Fehlende Modelle laden:
ssh omv "docker exec ollama /bin/ollama pull mistral:7b"
ssh omv "docker exec ollama /bin/ollama pull qwen2.5:3b"
Detaildoku: HA Ollama Assistent
Dieser Artikel wird von Claude bei Bedarf aktualisiert. Bei wichtigen Systemänderungen bitte Claude bitten, den Artikel zu aktualisieren.