Zum Inhalt

Claude Code

Claude Code läuft auf dem Pi dauerhaft in einer tmux-Session. Die gesamte Konfiguration liegt im Repo unter claude/ und wird per bootstrap.sh nach ~/.claude/ symlinkt.

Installation

curl -fsSL https://claude.ai/install.sh | bash
claude --version

OAuth-Setup beim ersten Start:

claude
# → URL im Browser öffnen, Code eingeben

tmux: Persistente Sessions

Ohne tmux stirbt die Claude-Code-Session bei einem SSH-Verbindungsabbruch. tmux hält die Session am Leben — Claude Code läuft weiter, auch wenn keine SSH-Verbindung besteht.

tmux              # Neue Session starten
claude            # Claude Code darin starten
# Ctrl+B, D      # Session detachen (SSH kann jetzt getrennt werden)
tmux attach       # Wieder verbinden

tmux-Konfiguration

Die Datei tmux/tmux.conf ist auf headlosen Dauerbetrieb optimiert:

  • Scrollback-Buffer: 50.000 Zeilen (statt 2.000) — wichtig bei langen Claude-Code-Outputs
  • Maus-Support: aktiviert — Scrollen und Pane-Auswahl per Trackpad/Maus
  • Basis-Index 1: Fenster und Panes starten bei 1 statt 0 — angenehmer bei Keyboard-Shortcuts
  • Automatisches Renummerieren: Fenster behalten lückenlose Nummerierung nach dem Schließen
  • Vi-Mode: Copy-Mode nutzt Vi-Keybindings (v zum Markieren, y zum Kopieren)
  • Escape-Time 10 ms: Reduziert die Verzögerung bei Escape-Sequenzen (wichtig für Vi-ähnliche Workflows)

settings.json

Die Datei ~/.claude/settings.json steuert Berechtigungen, Hooks, Umgebungsvariablen und aktivierte Plugins.

Umgebungsvariablen

"env": {
    "DISABLE_TELEMETRY": "1",
    "DISABLE_ERROR_REPORTING": "1",
    "CLAUDE_CODE_DISABLE_FEEDBACK_SURVEY": "1",
    "CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS": "1"
}

Telemetrie und Error Reporting sind deaktiviert. Das experimentelle Agent-Teams-Feature ist aktiviert.

Berechtigungen (deny-Liste)

Claude Code darf bestimmte Operationen nicht ohne explizite Bestätigung ausführen. Die deny-Liste blockiert destruktive Befehle grundsätzlich:

Gesperrte Operation Grund
rm -rf *, rm -fr * Rekursives Löschen
sudo * Alle sudo-Befehle
mkfs *, dd * Disk-Operationen
curl * \| bash*, wget * \| bash* Pipe-to-Shell
git push --force* Force-Push
git reset --hard* Destructive Reset
Edit(~/.bashrc), Edit(~/.zshrc) Shell-Konfiguration
Edit(~/.ssh/**) SSH-Konfiguration
Read(~/.ssh/**), Read(~/.gnupg/**) Private Keys
Read(~/.aws/**), Read(~/.azure/**) Cloud-Credentials
Read(~/.kube/**) Kubernetes-Credentials
Read(~/.git-credentials), Read(~/.docker/config.json) Weitere Secrets

PreToolUse-Hooks

Zusätzlich zur deny-Liste gibt es zwei aktive Hooks, die Bash-Befehle vor der Ausführung analysieren:

Hook 1: rm -rf Erkennung Erkennt rekursives Löschen per Regex auch dann, wenn die Flags kombiniert werden (z.B. rm -rfv). Gibt eine klare Fehlermeldung aus und bricht ab.

Hook 2: Direct-Push-Erkennung Blockiert git push direkt auf main oder master. Erzwingt Feature-Branch- Workflow.

Modell-Einstellungen

"alwaysThinkingEnabled": true,
"effortLevel": "high"

Extended Thinking ist dauerhaft aktiviert. Das erhöht die Token-Kosten pro Anfrage, verbessert aber die Qualität bei komplexen Architektur- und Debugging-Aufgaben erheblich.

Plugins (enabledPlugins)

Die Plugins erweitern Claude Code um spezialisierte Fähigkeiten und zusätzlichen Kontext. Sie kommen aus drei Quellen:

Offizielle Plugins (claude-plugins-official)

Plugin Zweck
planning-with-files Strukturierte Planung in Markdown-Dateien
code-review Systematische Code-Reviews
superpowers Allgemeine Erweiterungen
frontend-design UI/UX-Patterns
feature-dev Feature-Entwicklungs-Workflow
code-simplifier Komplexitätsreduktion
typescript-lsp TypeScript Language Server Integration
commit-commands Standardisierte Git-Commits
claude-md-management CLAUDE.md-Verwaltung
github GitHub CLI und API Integration
claude-code-setup Projekt-Onboarding

Trail of Bits Plugins (trailofbits)

Sicherheitsfokussierte Plugins von Trail of Bits:

Plugin Zweck
agentic-actions-auditor Prüft agentengesteuerte Aktionen auf Risiken
ask-questions-if-underspecified Fordert Klarstellung bei unklaren Aufgaben
audit-context-building Strukturierter Aufbau von Sicherheits-Audits
building-secure-contracts Secure-by-default Entwicklungsmuster
devcontainer-setup Dev-Container-Konfiguration
gh-cli GitHub CLI Workflows
git-cleanup Aufräumen von Git-Repos
insecure-defaults Warnt vor unsicheren Standardkonfigurationen
modern-python Moderne Python-Patterns (ruff, uv, mypy)

Spezialisierte Plugins

Plugin Quelle Zweck
cloudflare cloudflare Cloudflare Workers / Pages
python-code-simplifier skills-curated Python-Refactoring
humanizer skills-curated Natürlichere Ausgabe
supabase claude-plugins-official Supabase-Integration
legalzoom claude-plugins-official Rechtliche Dokumentation

Zusätzliches Plugin-Marketplace

Neben dem offiziellen Marketplace ist ein zweiter Marketplace konfiguriert:

"extraKnownMarketplaces": {
    "claude-code-plugins": {
        "source": {
            "source": "github",
            "repo": "anthropics/claude-code"
        }
    }
}

MCP: Exa AI

Exa AI ist als MCP-Server über HTTP eingebunden und ermöglicht Claude Code web-basierte Suchanfragen während Entwicklungsaufgaben.

claude mcp add --transport http exa "https://mcp.exa.ai/mcp?exaApiKey=DEIN_KEY"
claude mcp list

Exa wird der globalen CLAUDE.md als bevorzugte Suchmaschine gegenüber dem generischen WebSearch-Tool gesetzt.

Statusline

Die statusline.sh zeigt in der Claude-Code-Statusleiste kontextrelevante Informationen an, ohne das Terminal zu verlassen.

Aufbau

[Sonnet 4.5] 📁 homelab-docs │ 🌿 feat/phase3-andere-repos
████████⣿⣿⣿⣿ 67% │ $1.24 │ 14m 32s │ ↻82%

Zeile 1: - Kurzname des aktiven Modells (z.B. Sonnet 4.5 statt Claude 3.5 Sonnet) - Aktuelles Verzeichnis (Repo-Name oder Ordner) - Git-Branch (falls vorhanden)

Zeile 2: - Visueller Fortschrittsbalken (12 Zeichen) für den Context-Window-Verbrauch - Context-Prozentsatz — basiert auf Claude Codes remaining_percentage, das die Compaction-Reserve bereits einrechnet - Kosten der aktuellen Session in USD - Session-Dauer (formatiert: 14m 32s) - Cache-Hit-Rate (z.B. ↻82%) — zeigt wie viel des Inputs aus dem Cache kommt

Farben des Fortschrittsbalkens:

Bereich Farbe Bedeutung
0–49% Grün Genug Kontext vorhanden
50–79% Gelb Kontext wird knapper
80–100% Rot Compaction steht bevor

Technische Umsetzung

Das Skript empfängt JSON-Daten von Claude Code über stdin und extrahiert alle Werte in einem einzigen jq-Aufruf. Ein Bash-Fallback fängt jq-Fehler ab. Git-Informationen werden direkt über git branch und git rev-parse ermittelt.

Die Konfiguration in settings.json:

"statusLine": {
    "type": "command",
    "command": "~/.claude/statusline.sh"
}

CLAUDE.md (globale Instruktionen)

Die Datei ~/.claude/CLAUDE.md enthält globale Verhaltensanweisungen für alle Claude-Code-Projekte. Sie liegt im Repo unter claude/CLAUDE.md und wird per Symlink eingebunden.

Inhalt:

  • Sprache: Deutsch für Antworten, Englisch für Code, Commits und Variablennamen
  • Stack: Azure Cloud, Kubernetes, Docker, Terraform, DevSecOps
  • Plattform: Raspberry Pi 4 B (ARM64, Pi OS Lite Trixie) mit Podman statt Docker
  • Qualitätsgrenzen: Funktionslänge ≤100 Zeilen, Cyclomatic Complexity ≤8
  • Zero-Warnings-Policy: Jede Warnung wird behoben oder explizit ignoriert
  • Workflow: Conventional Commits, Feature Branches, Pre-commit Hooks via prek
  • CLI-Tools: rg, fd, shellcheck, shfmt statt grep/find
  • Python: uv, ruff, mypy
  • Sicherheit: ISO 27001 ISB, NIS2 Kontext — keine Secrets im Code

Projektspezifische CLAUDE.md-Dateien in einzelnen Repos können diese globalen Einstellungen überschreiben.