Zum Inhalt

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 --version prü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-Prompts
  • skipDangerousModePermissionPrompt: true → Kein Warn-Dialog
  • SessionStart-Hook → startet fix-run-sh.sh bei 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 root
  • IS_SANDBOX=1 → PFLICHT damit --dangerously-skip-permissions als root akzeptiert wird (GitHub Issue #9184)

Ebene 3: GrowthBook Feature Flag

In /data/home/.claude.jsoncachedGrowthBookFeatures:

"tengu_disable_bypass_permissions_mode": true

  • 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:

  1. .mcp.json im Plugin-Cache sicherstellen (wird bei Plugin-Reinstall gelöscht)
  2. GrowthBook Flag auf true setzen (falls von Cache-Refresh auf false zurückgesetzt)
  3. 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-official v0.0.6
  • Bot-Token: 8685305507:AAGB4TvgLnUFx-gwau0IATBDcf6glSCSoe4
  • Anatol's Telegram-ID (privat): 5023809706
  • Telegram-Gruppe Automatische Benachrichtigungen: -4996751751
  • bun: /data/home/.bun/bin/bun v1.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

mcp__plugin_telegram_telegram__reply mit chat_id: "5023809706"
  • 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], ...)
Der Wrapper selbst ist ebenfalls gepatcht: -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.jsonprojects["/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!):

if ! command -v ssh &> /dev/null; then apk add --no-cache openssh-client &>/dev/null || true; fi

  • Keys: immer /config/.ssh/ (niemals /root/.ssh/)
  • Immer -o StrictHostKeyChecking=no verwenden
  • SSH-Config: /config/.ssh/config mit 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 omvssh 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-Abfragencat /config/tools/state_snapshot.txt
  • Große Datei durchsuchenpython3 /config/tools/ask_ollama "Frage" --file /pfad
  • YAML-Boilerplatepython3 /config/tools/ollama_write --spec "..." --context /referenz
  • DokuWiki-Entwurfpython3 /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.

← Zurück zur Claude Config Übersicht