41 KiB
Global Claude Code Instructions
đš PFLICHT-CHECKLISTE BEI TASK-ABSCHLUSS đš
DIESE CHECKLISTE IST NICHT OPTIONAL. SIE MUSS BEI JEDER ABGESCHLOSSENEN AUFGABE DURCHGEFĂHRT WERDEN.
BEVOR du dem User sagst, dass du fertig bist, gehe diese Liste durch:
Bei JEDER Dokumentationsarbeit (README, Config-Docs, etc.):
-
Verifikation durchgefĂŒhrt?
- Vergleichstabelle: Quelle â Dokumentation erstellt
- ALLE Abschnitte geprĂŒft (nicht nur die offensichtlichen)
- Finale Checkliste mit Zeilennummern erstellt
- BestÀtigung: "X/X Abschnitte vollstÀndig dokumentiert"
-
Infrastructure-Repo aktualisiert?
- Wenn Kunde erkannt (
~/Nextcloud/[kunde]/):infrastructure/hosts/[host].mdaktualisiert?- FĂŒr JEDEN Host auf dem gearbeitet wurde (auch indirekt, z.B. Reverse Proxy, DNS-Server)
infrastructure/dependencies.mdaktualisiert?- Mermaid-Diagramme: Neue Verbindungen/AbhÀngigkeiten eingezeichnet?
- Referenz-Tabellen: Neue Hosts ergÀnzt?
- Impact-Analyse: Neue Ausfallszenarien?
infrastructure/netzwerk/domains.mdaktualisiert?- Neue Subdomains eingetragen?
- DNS-Ănderungen reflektiert?
- Ănderungen committet und gepusht?
- Wenn Kunde erkannt (
Bei JEDEM Task-Abschluss:
-
Alle Ănderungen committet und gepusht?
- Aktuelles Repo
- Infrastructure-Repo (falls relevant)
-
Settings-Sync geprĂŒft?
cd ~/dotfiles/claude_settings && git fetch origin && git status -
Kontinuierliche Verbesserung: Erkenntnisse fĂŒr globale Anweisungen?
- PrĂŒfe: Gab es in dieser Session Erkenntnisse, Patterns oder Pitfalls, die auch in zukĂŒnftigen Sessions (projektĂŒbergreifend) nĂŒtzlich wĂ€ren?
- Kandidaten sind:
- Neue Workflow-Patterns (z.B. "immer erst X prĂŒfen bevor Y")
- API-/Tool-Eigenheiten die wiederholt auftreten
- Fehler die durch bessere Anweisungen vermeidbar wÀren
- Neue Host-Typen oder Zugangs-Patterns (z.B. "pfSense â immer root")
- Dokumentations-Strukturen die sich bewÀhrt haben
- Falls ja: Dem User vorschlagen, welche Punkte in
CLAUDE.mdaufgenommen werden sollten - Falls nein: Kurz bestÀtigen: "Keine neuen globalen Erkenntnisse aus dieser Session"
- Wichtig: Nicht selbst entscheiden â dem User die Erkenntnisse vorlegen und ihn entscheiden lassen
â ïž WICHTIG
Du darfst NICHT:
- Sagen "Erledigt" ohne diese Checkliste durchzugehen
- Den User fragen ob er die Checkliste will - sie ist PFLICHT
- Schritte ĂŒberspringen weil sie "offensichtlich nicht nötig" sind
- Warten bis der User dich an fehlende Schritte erinnert
Der User verlÀsst sich darauf, dass du diese Anweisungen IMMER befolgst.
â MANDATORY: Settings-Synchronisierung
Repository: git@gitea.egonetix.de:root/claude_settings.git (Port 222)
Lokaler Pfad: ~/dotfiles/claude_settings
Bei jedem Session-Start prĂŒfen
cd ~/dotfiles/claude_settings && git fetch origin && git status
Falls Ănderungen vorhanden:
git pull origin main
Nach Ănderungen an Settings pushen
Wenn du Ănderungen an folgenden Dateien vornimmst, MUSST du diese committen und pushen:
settings.json- Globale EinstellungenCLAUDE.md- Diese Instruktionenagents/*.md- Benutzerdefinierte Agentenrules/*.md- Modulare Regelnstatusline-command.sh- Statuszeilen-Script
cd ~/dotfiles/claude_settings
git add -A
git commit -m "Beschreibung der Ănderung"
git push origin main
Copilot Instructions Skill
Maintain living documentation for every coding project via copilot-instructions.md in the project root.
Mandatory Workflow
Step 1: Determine Project Type
Check for existing project indicators:
- Git repository (
.git/directory) copilot-instructions.mdfilePROJECT_OVERVIEW.mdfile
If ANY exist â Ongoing Project: Follow full documentation workflow.
If NONE exist â Ask the user:
"This looks like a new workspace. Should I treat this as a one-time task, or set it up as an ongoing project with documentation and git?"
If user wants an ongoing project:
- Initialize git repo if missing (
git init) - Create
copilot-instructions.mdwith initial structure - Optionally create
PROJECT_OVERVIEW.mdfor complex systems
Step 2: For Ongoing Projects
- Read existing
copilot-instructions.mdandPROJECT_OVERVIEW.mdto understand the system - Scan the codebase/system to gather context and minimize follow-up questions
- Update documentation if the current work affects architecture, patterns, entities, or conventions
- Commit all changes to git immediately after completion
Document Structure
copilot-instructions.md (Development Guidelines)
Procedural knowledge for working on the project â patterns, conventions, pitfalls, workflows.
# Project Name - Copilot Instructions
## â MANDATORY RULES - NON-NEGOTIABLE
[Project-specific rules, commit conventions, critical warnings]
## Architecture Overview
[High-level system description, key integrations, tech stack]
## File Structure
[Directory tree with annotations]
## [Domain-Specific Sections]
[Devices, APIs, services, databases - whatever is relevant]
- Working code examples with explanations
- Configuration snippets that actually work
- Debug commands
## Patterns & Conventions
[Reusable patterns, naming conventions, code examples]
## Development Workflow
[How to test, deploy, access systems]
## Pitfalls to Avoid
[Gotchas, inverted logic, non-obvious behaviors, troubleshooting]
PROJECT_OVERVIEW.md (System Reference)
Factual inventory of what exists â devices, integrations, entities, IPs. Use for complex systems with many components.
# Project Overview
## System Information
[Version, host, IP, access details]
## Network Architecture
[Diagram or list of hosts/devices]
## Installed Components
[Add-ons, plugins, integrations with purpose]
## Entity/Device Inventory
[Tables of devices, entity IDs, purposes]
## Quick Reference
[Common commands, URLs, access methods]
When to create PROJECT_OVERVIEW.md:
- Systems with many devices/entities (IoT, home automation)
- Infrastructure projects with multiple hosts
- Projects where entity/device inventory changes frequently
Content Guidelines
Include:
- Working code/config snippets (tested and verified)
- Actual entity names, IPs, paths (not placeholders)
- Debug commands and troubleshooting tables
- Lessons learned from debugging sessions
- Non-obvious behavior ("contact sensor: on=OPEN, off=CLOSED")
- Git commit references for significant changes
Exclude:
- Secrets, tokens, passwords (reference
secrets.yamlor.envinstead) - Obvious boilerplate explanations
- Duplicate information
Language: Match the user's language. Mixed language is acceptable when technical terms are clearer in English.
Git Commit Convention
After every change:
cd /path/to/project
git add -A
git commit -m "Descriptive message in user's language"
git push origin main # or appropriate branch
Commit messages should describe what changed, not just "updated docs".
Referencing Git Commits
For significant development work, reference the relevant commit(s) in the documentation:
## Tasmota SML Integration
**Implemented:** 2025-01-21 | Commits: `a3f2b1c`, `e7d4a9f`
[Documentation of the feature...]
When to add commit references:
- New features or integrations
- Major refactors
- Complex bug fixes that required multiple attempts
- Configuration changes that took significant debugging
Format options:
- Single commit:
Commit: a3f2b1c - Multiple commits:
Commits: a3f2b1c, e7d4a9f, b2c3d4e - Commit range:
Commits: a3f2b1c..e7d4a9f
Get the short hash after committing:
git log -1 --format="%h" # Most recent commit
git log -3 --format="%h %s" # Last 3 with messages
When to Update copilot-instructions.md
Update when:
- Adding new integrations, devices, or services
- Discovering non-obvious behavior or gotchas
- Establishing new patterns or conventions
- Fixing bugs that reveal important system behavior
- Changing architecture or file structure
Don't update for:
- Minor code changes that don't affect understanding
- Temporary debugging that will be removed
New Project Onboarding
When a user requests to set up a new ongoing project:
- Connect and explore the system to understand what exists
- Scan broadly â gather device lists, integrations, file structures, configurations
- Create documentation based on findings:
copilot-instructions.mdfor development guidelines and patternsPROJECT_OVERVIEW.mdfor system inventory (if complex)
- Initialize git if not present
- Commit initial documentation
This upfront investment minimizes questions in future sessions and enables faster, more informed development.
Infrastruktur-Dokumentationssystem
Ziel und Vision
Die detaillierte Infrastruktur-Dokumentation dient einem gröĂeren Ziel:
Phase 1: Dokumentation (aktuell)
- VollstÀndige Erfassung aller Hosts, Dienste, AbhÀngigkeiten
- Maschinenlesbare Struktur (Markdown mit konsistenten Tabellen)
- AbhÀngigkeitsgraphen in Mermaid
Phase 2: Zabbix-Integration
- AbhÀngigkeiten aus
dependencies.mdâ Zabbix Host Dependencies - Wiederkehrende Probleme â Zabbix Trigger + Actions
- Host-Dokumentation â Zabbix Host Inventory
- Impact-Analysen â Zabbix Service Monitoring
Phase 3: Self-Healing durch KI
- KI analysiert Zabbix-Alerts + Dokumentation
- Automatische Diagnose basierend auf dokumentierten AbhÀngigkeiten
- Automatische Remediation fĂŒr bekannte Probleme
- Lernschleife: Neue Probleme â Dokumentation â Zabbix â KI
Konsequenzen fĂŒr die Dokumentation:
- VollstĂ€ndigkeit ist kritisch - fehlende AbhĂ€ngigkeiten = blinde Flecken fĂŒr KI
- Konsistente Struktur - ermöglicht maschinelles Parsing
- Wiederkehrende Probleme dokumentieren - werden zu automatisierbaren Fixes
- Impact bei Ausfall - definiert PrioritĂ€ten fĂŒr automatische Reaktionen
Organisation pro Kunde
Gitea-Struktur:
âââ Vinos/ â Organisation fĂŒr Kunde "vinos"
â âââ infrastructure.git â Landkarte fĂŒr vinos
â âââ zabbix.git â System-Repo
â âââ [weitere].git â Dienst-/System-Repos
â
âââ Egonetix/ â Organisation fĂŒr Kunde "egonetix"
âââ infrastructure.git â Landkarte fĂŒr egonetix
âââ [weitere].git
Lokale Struktur:
~/Nextcloud/
âââ vinos/ â Kunde vinos
â âââ infrastructure/ â Landkarte (dependencies.md, hosts/)
â âââ zabbix/ â System-Repo
â âââ [weitere]/ â Dienst-/System-Repos
â
âââ egonetix/ â Kunde egonetix
âââ infrastructure/
âââ [weitere]/
Repo-Typen
| Repo-Typ | Gitea-Ort | Inhalt |
|---|---|---|
| Infrastructure | [Kunde]/infrastructure.git |
Landkarte, AbhĂ€ngigkeiten, Host-Ăbersichten |
| System-Repo | [Kunde]/[system].git |
README, Konfig-Dateien, Troubleshooting |
| Dienst-Repo | [Kunde]/[dienst].git |
docker-compose.yml, Code, Workflows |
Automatische Erkennung (Hook-gesteuert)
Der Session-Start Hook erkennt Kunden-Verzeichnisse unter ~/Nextcloud/[kunde]/.
Wenn du <REPO_SETUP_REQUIRED> in der Hook-Ausgabe siehst:
-
Frage den User:
"Ich habe erkannt, dass fĂŒr dieses Repo noch Setup erforderlich ist. Soll ich das automatisch durchfĂŒhren?"
-
Bei Zustimmung - fĂŒhre alle fehlenden Schritte aus:
# Git initialisieren (falls nicht vorhanden) git init git branch -M main # Template aus infrastructure/_templates/ kopieren -
Repo auf Gitea erstellen (API):
curl -X POST -H "Authorization: token $GITEA_TOKEN" \ -H "Content-Type: application/json" \ -d '{"name":"repo-name","description":"..."}' \ https://gitea.egonetix.de/api/v1/orgs/[Kunde]/repos -
Remote hinzufĂŒgen und pushen:
git remote add origin ssh://git@gitea.egonetix.de:222/[Kunde]/[repo-name].git git push -u origin main
Gitea Remote-Konfiguration
URL-Format:
ssh://git@gitea.egonetix.de:222/[Kunde]/[repo-name].git
Beispiele:
| Kunde | Repo | Remote URL |
|---|---|---|
| Vinos | infrastructure | ssh://git@gitea.egonetix.de:222/Vinos/infrastructure.git |
| Vinos | zabbix | ssh://git@gitea.egonetix.de:222/Vinos/zabbix.git |
| Egonetix | infrastructure | ssh://git@gitea.egonetix.de:222/Egonetix/infrastructure.git |
Gitea Tooling
Token-Speicherort (NICHT im Git-Sync!):
~/.config/gitea/token
VerfĂŒgbare Tools:
| Tool | Befehl | Anwendung |
|---|---|---|
| tea CLI | ~/bin/tea |
VollstÀndige Gitea-Interaktion |
| curl + API | curl -H "Authorization: token $(cat ~/.config/gitea/token)" |
Einfache API-Aufrufe |
tea CLI Beispiele:
# Repos auflisten
~/bin/tea repos list
# Neues persönliches Repo erstellen
~/bin/tea repos create --name mein-repo --description "Beschreibung"
# Neues Repo in Organisation erstellen
~/bin/tea repos create --owner Vinos --name repo-name
# Issues auflisten
~/bin/tea issues list
# PR erstellen
~/bin/tea pr create --title "Feature X" --description "..."
curl API Beispiele:
# Persönliches Repo erstellen
curl -X POST -H "Authorization: token $(cat ~/.config/gitea/token)" \
-H "Content-Type: application/json" \
-d '{"name":"repo-name","description":"...","private":false}' \
https://gitea.egonetix.de/api/v1/user/repos
# Repo in Organisation erstellen
curl -X POST -H "Authorization: token $(cat ~/.config/gitea/token)" \
-H "Content-Type: application/json" \
-d '{"name":"repo-name","description":"..."}' \
https://gitea.egonetix.de/api/v1/orgs/[Org]/repos
Wichtig: Der Token wird LOKAL gespeichert und NICHT nach ~/dotfiles/claude_settings synchronisiert.
Workflow: Neues System-/Dienst-Repo anlegen
cd ~/Nextcloud/[kunde]
git init [repo-name]
cd [repo-name]
# Template aus ../infrastructure/_templates/ kopieren
# Repo auf Gitea erstellen
# git remote add origin ...
# git push -u origin main
Dokumentations-Verifikation (PFLICHT)
Bei jeder Dokumentationsarbeit MUSS eine zweistufige Verifikation durchgefĂŒhrt werden:
- Neue Dokumentation erstellen
- Bestehende Dokumentation umstrukturieren
- Inhalte aus anderen Quellen ĂŒbernehmen
- Dokumentation aufteilen oder zusammenfĂŒhren
Schritt 1: Erstvergleich
Nach Abschluss der Dokumentationsarbeit, erstelle eine Vergleichstabelle:
| Abschnitt (Original) | Neue Datei | Status |
|---------------------|------------|--------|
| [Abschnitt 1] | [datei.md:zeilen] | â
/â |
| [Abschnitt 2] | [datei.md:zeilen] | â
/â |
...
- Liste JEDEN Abschnitt der Quelldokumentation auf
- PrĂŒfe ob er in der neuen Struktur vorhanden ist
- Markiere fehlende Abschnitte mit â
Schritt 2: Fehlende Inhalte ergÀnzen
- ErgĂ€nze alle mit â markierten Abschnitte
- Committe die Ănderungen
Schritt 3: Erneute Verifikation (PFLICHT)
Nach dem ErgĂ€nzen MUSS eine erneute, vollstĂ€ndige PrĂŒfung erfolgen:
- Lies alle neuen Dateien nochmals
- Erstelle eine finale Checkliste mit Zeilennummern:
| # | Abschnitt | Datei:Zeilen | Status |
|---|-----------|--------------|--------|
| 1 | [Name] | README.md:15-18 | â
|
| 2 | [Name] | hosts.md:5-8 | â
|
...
- BestÀtige: "X/X Abschnitte vollstÀndig dokumentiert. Keine Inhalte wurden vergessen."
Schritt 4: Zweiter unabhÀngiger Review-Pass (PFLICHT)
Nach Schritt 3 MUSS ein zweiter, komplett unabhĂ€ngiger Review-Pass erfolgen. Dieser Schritt existiert, weil erfahrungsgemÀà beim ersten Durchgang Fehler ĂŒbersehen werden, die erst bei einer Nachfrage auffallen. Der User soll NICHT nachfragen mĂŒssen.
Vorgehen:
- Alle bearbeiteten Dateien nochmals KOMPLETT lesen (nicht ĂŒberfliegen)
- Gezielt prĂŒfen â andere Perspektive als Schritt 3:
- Links: Sind alle Markdown-Links gĂŒltig? Anker korrekt (keine Leerzeichen, Sonderzeichen)?
- Diagramme: Spiegeln Mermaid-Diagramme den aktuellen Stand wider? Neue Knoten/Kanten nötig?
- Querverweise: Stimmen Referenz-Tabellen nach Diagrammen mit den tatsĂ€chlichen Knoten ĂŒberein?
- AbhÀngigkeiten: Sind alle neuen AbhÀngigkeiten in
dependencies.mdeingetragen (Mermaid + Impact-Tabelle)? - Konsistenz: Stimmen Angaben (IPs, Ports, Hostnamen, Netze) zwischen README und dependencies.md ĂŒberein?
- VollstÀndigkeit: Gibt es Erkenntnisse aus der Session, die NICHT dokumentiert sind? (Pitfalls, Workarounds, TODOs)
- Gefundene Fehler sofort fixen und committen
- BestÀtige: "Zweiter Review-Pass abgeschlossen. X Fehler gefunden und behoben." (oder: "Keine weiteren Fehler gefunden.")
Dieser zweite Pass ist NICHT optional und NICHT identisch mit Schritt 3. Schritt 3 prĂŒft VollstĂ€ndigkeit (sind alle Abschnitte da?). Schritt 4 prĂŒft Korrektheit und Konsistenz (sind die Inhalte richtig, Links gĂŒltig, Diagramme aktuell?).
Dieser Prozess ist nicht optional. Dokumentationsverlust oder fehlerhafte Dokumentation durch unvollstÀndige Arbeit ist inakzeptabel.
Wiki-Prinzip: Verlinkte Dokumentation (PFLICHT)
JEDE ErwÀhnung eines Hosts, Dienstes oder Systems in der Dokumentation MUSS als Markdown-Link auf dessen Dokumentation verweisen.
Dies gilt fĂŒr ALLE Dokumentation - nicht nur Netzwerk, sondern auch Host-Dateien, Dependencies, Hardware, README, etc.
Regeln
-
Host-Referenzen â Link auf
hosts/[hostname].md- Aus
hosts/-Dateien: relativer Pfad[srvdocker02](srvdocker02.md) - Aus Root-Dateien:
[srvdocker02](hosts/srvdocker02.md) - Aus Unterverzeichnissen:
[srvdocker02](../hosts/srvdocker02.md)
- Aus
-
Hardware-Referenzen â Link auf
hardware/[gerÀt].md[HPE Switch](hardware/hpe-switch.md)oder relativ[HPE Switch](../hardware/hpe-switch.md)
-
Dienst-/System-Referenzen â Link auf zugehörige Doku
- Externe Repos:
[Zabbix](https://gitea.egonetix.de/Egonetix/zabbix) - Interne Doku:
[Keycloak SSO](keycloak-sso.md)
- Externe Repos:
-
Mermaid-Diagramme: Hier sind keine Markdown-Links möglich. Stattdessen MUSS nach jedem Diagramm eine Referenz-Tabelle stehen mit Links zu den referenzierten Hosts/Diensten.
-
Tabellen: Host-/Dienstnamen in Tabellenzellen als Link formatieren.
-
OrganisationsĂŒbergreifende Referenzen â Hosts/Dienste, die zu einer anderen Kunden-Organisation gehören, werden auf deren Gitea-Repo verlinkt.
- Prinzip: Die kanonische Doku eines Hosts lebt in der Organisation, zu der er gehört. Andere Organisationen verweisen per Gitea-URL darauf.
- Aus Egonetix auf Vinos-Host:
[gw-nu-wan01](https://gitea.egonetix.de/Vinos/infrastructure/src/branch/main/hosts/gw-nu-wan01.md) - Aus Vinos auf Egonetix-Host:
[srvhost04](https://gitea.egonetix.de/Egonetix/infrastructure/src/branch/main/hosts/srvhost04.md) - Lokaler Stub: Im eigenen Repo kann eine Stub-Datei existieren, die auf die kanonische Doku verweist (z.B. wenn der Host in der eigenen Infrastruktur referenziert wird). Der Stub muss klar als "Gehört zu Organisation X" markiert sein.
- Wann: Immer wenn ein Host in der Doku einer anderen Organisation auftaucht (VPN-Gegenstellen, gemeinsame Dienste, AbhĂ€ngigkeiten ĂŒber Organisationsgrenzen).
Ausnahmen
- Derselbe Host innerhalb seiner eigenen Dokumentation (kein Self-Link)
- Hosts in der "Entdeckte aber nicht gescannte Hosts"-Liste (keine Doku vorhanden)
- Inline-Code-Blöcke (Befehle, Konfigurationen)
Beispiel
Falsch:
srvdocker02 benötigt srvdc01 fĂŒr DNS.
PBS auf Hetzner Storage Box (1TB)
Richtig:
[srvdocker02](srvdocker02.md) benötigt [srvdc01](srvdc01.md) fĂŒr DNS.
PBS auf Hetzner Storage Box (1TB) - siehe [srvhost04 Storage](srvhost04.md#hardware--storage)
Rolling Documentation: Opportunistisches Host-Scanning
Prinzip: Wenn du wĂ€hrend deiner Arbeit Zugriff auf einen Host bekommst, fĂŒhre einen VOLLSTĂNDIGEN Scan durch - nicht nur fĂŒr die aktuelle Aufgabe.
Auslöser
- SSH-Zugriff auf einen Host
- Web-UI Zugriff (pfsense, NPM, etc.)
- API-Zugriff
Workflow bei Host-Zugriff
- PrĂŒfe: Existiert
infrastructure/hosts/[hostname].md? - Falls nein oder unvollstĂ€ndig: VollstĂ€ndigen Scan durchfĂŒhren
- Dann erst: UrsprĂŒngliche Aufgabe erledigen
Scan-Checkliste nach Host-Typ
Netzwerk-GerÀte (pfsense, Router):
- Interfaces (Name, IP, Netz)
- ALLE Firewall-Regeln (nicht nur relevante!)
- ALLE Aliases
- NAT-Regeln (Port-Forwards, Outbound)
- DHCP/DNS-Konfiguration
- System-Version
- ABHĂNGIGKEITEN: Welche Hosts/Dienste hĂ€ngen von diesem GerĂ€t ab?
Linux-Server:
- OS/Version
- Interfaces und IPs
- Laufende Dienste
- Docker-Container
- Offene Ports
- Wichtige Configs
- ABHĂNGIGKEITEN: Welche anderen Hosts braucht dieser Server? Wer braucht ihn?
Windows-Server:
- OS/Version
- Interfaces und IPs
- Dienste und geplante Tasks
- Installierte Rollen
- ABHĂNGIGKEITEN: Verbindungen zu anderen Systemen
PFLICHT: AbhÀngigkeiten dokumentieren
Bei JEDEM Host-Scan mĂŒssen die AbhĂ€ngigkeiten erfasst werden:
| Frage | Dokumentieren in |
|---|---|
| Welche Hosts/Dienste braucht dieser Host? | hosts/[host].md â Abschnitt "AbhĂ€ngigkeiten" |
| Welche Hosts/Dienste hĂ€ngen von diesem Host ab? | hosts/[host].md â Abschnitt "AbhĂ€ngig von diesem Host" |
| Gibt es AbhĂ€ngigkeitsketten? | dependencies.md â Mermaid-Diagramm |
PFLICHT: Monitoring-Abgleich bei Infrastruktur-Ănderungen
Wenn sich an einem Host Hardware, Software oder Dienste Ă€ndern, MUSS geprĂŒft werden ob das Monitoring noch passt.
Dies gilt bei:
- Neuem Host/Dienst/Container hinzugefĂŒgt
- Host neuinstalliert oder migriert
- Dienst entfernt oder ersetzt
- Hardware-Ănderung (Disk, RAM, Netz)
- Template-Wechsel in Zabbix
PrĂŒf-Fragen:
| Frage | Aktion wenn Ja |
|---|---|
| Wird dieser Host/Dienst ĂŒberwacht? | PrĂŒfen ob Items/Trigger noch aktuell sind |
| Wird er NICHT ĂŒberwacht, sollte er aber? | â Onboarding-Entscheidung treffen (siehe Zabbix copilot-instructions.md) |
| Wurden Dienste entfernt? | Phantom-Triggers/Items prĂŒfen und ggf. löschen |
| Wurden neue Dienste hinzugefĂŒgt? | Template/Items ergĂ€nzen oder bewusst ausschlieĂen |
| Hat sich die Rolle des Hosts geÀndert? | Host Groups, Service-Baum, Dependencies in Zabbix aktualisieren |
Dokumentieren in:
hosts/[host].mdâ Abschnitt "Monitoring" oder "Wiederkehrende Probleme"- Zabbix
README.mdâ "Nicht ĂŒberwacht" Liste aktualisieren - Zabbix
copilot-instructions.mdâ Host-IDs Tabelle bei neuen Hosts
Ziel: Anhand der Dokumentation muss erkennbar sein:
- Was passiert wenn Host X ausfÀllt?
- Welche Dienste sind von Ănderungen an Host X betroffen?
- Welche Hosts mĂŒssen vor Host X gestartet werden?
Beispiel AbhÀngigkeits-Dokumentation:
## AbhÀngigkeiten
Dieser Host benötigt:
- **srv-docker02** (10.10.10.81) - n8n Backend
- **srv-nu-dc01** (10.10.10.111) - DNS-Auflösung
## AbhÀngig von diesem Host
Folgende Dienste/Hosts sind von diesem Host abhÀngig:
- **flow.wvits.de** - Webhook-Zugang fÀllt aus wenn dieser Host down ist
- **n8n.vinos.de** - Interner Zugang ĂŒber diesen NPM
## Impact bei Ausfall
| Ausfall-Szenario | Betroffene Dienste |
|------------------|-------------------|
| Komplett-Ausfall | flow.wvits.de, n8n.vinos.de, ... |
| Nur Port 443 | HTTPS-Zugriff auf alle proxied Dienste |
dependencies.md aktualisieren:
Nach jedem Host-Scan prĂŒfen ob infrastructure/dependencies.md aktualisiert werden muss:
- Neue AbhĂ€ngigkeitskette entdeckt? â Mermaid-Diagramm ergĂ€nzen
- Impact-Analyse hinzufĂŒgen
- Repo-Links aktualisieren
FĂŒr Vinos-Projekte gilt zusĂ€tzlich:
Der vollstÀndige Monitoring-Workflow ist im Monitoring-Skill definiert:
~/Nextcloud/vinos/clawd/skills/monitoring/SKILL.md
Dieser Skill MUSS bei jeder Infrastruktur-Arbeit aufgerufen werden (analog zu verification-before-completion). Details siehe Skill-Dokumentation.
Beispiel
Aufgabe: Firewall-Regel fĂŒr srv-revproxy01 prĂŒfen
| Falsch | Richtig |
|---|---|
| Nur die eine Regel prĂŒfen | Erst: Existiert hosts/gw-nu-dmz02.md? |
| Session beenden | Nein â VollstĂ€ndigen Scan aller Regeln, Aliases, Interfaces |
| Host-Datei erstellen | |
| Dann: UrsprĂŒngliche Aufgabe |
Rekursive Host-Entdeckung (WICHTIG!)
Wenn du bei einem Scan Referenzen zu anderen Hosts siehst, gehe AUTOMATISCH weiter:
Entdeckungsquellen:
- Firewall-Regeln (Ziel-IPs, Aliases)
- NAT-Regeln (Forward-Ziele)
- DNS-EintrÀge
- Docker-Compose (externe Hosts)
- Konfigurationsdateien
- Log-EintrÀge
- Netzwerk-Verbindungen
Workflow:
Host A scannen
â
Entdecke Referenz zu Host B (z.B. in Firewall-Regel)
â
Kann ich Host B erreichen?
ââ JA â Host B scannen (rekursiv)
ââ NEIN â Host B in Entdeckungsliste aufnehmen
Entdeckungsliste fĂŒhren:
Wenn ein Host nicht gescannt werden kann (kein Zugriff, keine Credentials, etc.):
## Entdeckte aber nicht gescannte Hosts
| Host | IP | Entdeckt in | Grund fĂŒr fehlenden Scan |
|------|----|-------------|-------------------------|
| srv-xyz01 | 10.10.10.99 | gw-nu-dmz02 Firewall-Regel | Kein SSH-Zugriff |
| db-server | 10.10.20.5 | docker-compose.yml | Credentials unbekannt |
Der User muss dich NICHT auf jeden Host einzeln hinweisen!
Du sollst selbststÀndig:
- Referenzen zu anderen Hosts erkennen
- Versuchen diese zu scannen
- Falls nicht möglich: Dokumentieren was du entdeckt hast
- Beim nÀchsten Mal nachfragen ob Zugriff jetzt möglich ist
Effizienz
Nutze parallele Agenten fĂŒr umfangreiche Scans und rekursive Entdeckung.
Indirekt betroffene Hosts dokumentieren (PFLICHT)
Wenn du auf Host A arbeitest und dabei Host B konfigurierst (z.B. per SSH, API, DNS), gilt die Rolling-Documentation-Pflicht auch fĂŒr Host B.
Dies ist eine hĂ€ufige Fehlerquelle: Man dokumentiert nur den "Ziel-Host" der Aufgabe, vergisst aber die Hosts, auf denen man nebenbei Ănderungen vorgenommen hat.
Beispiele:
| Aufgabe auf Host A | Nebenarbeit auf Host B | Doku-Pflicht |
|---|---|---|
| ActiveSync auf srvmail01 einrichten | nginx-Config auf srvrevproxy02 anlegen | srvrevproxy02.md aktualisieren |
| Neue Subdomain fĂŒr srvmail01 | DNS-Record auf srvdc01 anlegen | srvdc01.md prĂŒfen, domains.md ergĂ€nzen |
| Zertifikat fĂŒr Dienst X | certbot auf srvrevproxy02 ausfĂŒhren | srvrevproxy02.md aktualisieren |
| Spam-Learning einrichten | IMAP-Zugriff auf srvmail01 aktivieren | AbhÀngigkeit in dependencies.md ergÀnzen |
Regel: Nach jeder SSH-Session auf einem Host fragen: "Habe ich die Doku dieses Hosts aktualisiert?"
Parallele Agenten-Nutzung (PFLICHT)
Claude MUSS eigenstÀndig entscheiden, wie viele Agenten parallel gestartet werden, um Aufgaben schneller zu erledigen.
- Bis zu 10 oder mehr parallele Agenten sind erlaubt
- Claude entscheidet selbst, wie viele Agenten sinnvoll sind
- UnabhĂ€ngige Teilaufgaben MĂSSEN parallel bearbeitet werden
- Dies gilt fĂŒr: Host-Scans, Dokumentations-Updates, Verifikation, Recherche
Beispiele:
- 10 Host-Dateien aktualisieren â 10 Agenten parallel
- 5 unabhĂ€ngige Recherche-Aufgaben â 5 Agenten parallel
- Scan + Dokumentation + Commit â sequentiell (abhĂ€ngig)
Ausnahmen
- Zeitkritische NotfÀlle (erst fixen, dann dokumentieren)
- Explizite User-Anweisung nur aktuelle Aufgabe zu erledigen
- User sagt explizit "nicht weiter scannen"
Zabbix-Probleme beheben: Pflicht-Workflow
BEVOR Zabbix-Probleme behoben werden, MUSS immer zuerst ein Plan erstellt und dem User vorgelegt werden.
Phase A: Analyse (parallel, ohne User-Interaktion)
- Alle offenen Probleme via API abfragen (
problem.get) - Trigger-zu-Host-Mapping erstellen (
trigger.getmitselectHosts) - Aktuelle Item-Werte prĂŒfen (
item.getâ ist das Problem echt oder stale?) - Trigger-Expressions lesen (fĂŒr korrekte Macro-Namen)
Phase B: Klassifizieren und Liste erstellen
Jedes Problem in eine Kategorie einordnen:
| Kategorie | Beschreibung | Aktion |
|---|---|---|
| STALE | Trigger disabled, Event offen | manual_close setzen + Event schlieĂen |
| THRESHOLD | Wert normal, Schwellwert zu niedrig | Host-Macro erstellen/anpassen |
| ECHT | TatsÀchliches Problem | SSH-Intervention oder manuelle Aktion |
| TEMPLATE-NOISE | Trigger passt nicht zum Host-Typ | Trigger disablen oder Macro-Filter |
Phase C: Nummerierte Liste dem User vorlegen
PFLICHT: Dem User eine nummerierte, nach PrioritÀt sortierte Liste prÀsentieren:
# | Host | Problem | Kategorie | Geplante Aktion
1 | srvhost04 | Disk 95% | ECHT | SSH: Cleanup LXC 101
2 | srvdocker02 | Agent down | ECHT | SSH: Service starten
3 | gw-st01 | /mnt/share_new | STALE | API: FS-Macro + Event schlieĂen
...
Der User entscheidet:
- Welche Punkte bearbeitet werden
- In welcher Reihenfolge
- Ob SSH-Aktionen gewĂŒnscht sind
Phase D: Punkt fĂŒr Punkt abarbeiten
- Nur nach User-Freigabe ausfĂŒhren
- Parallele Agenten fĂŒr unabhĂ€ngige API-Fixes
- Nach jedem Punkt: Ergebnis melden
- Ergebnis-Verifikation via
problem.get
Phase E: Rolling Documentation aktualisieren (PFLICHT)
Nach JEDER Zabbix-Problem-Session:
-
Host-Dateien aktualisieren (
infrastructure/hosts/[host].md):- Abschnitt "Wiederkehrende Probleme" anlegen/ergÀnzen
- Datum, Problem, Lösung, ob wiederkehrend
- Beispiel:
## Wiederkehrende Probleme | Datum | Problem | Lösung | Wiederkehrend | |-------|---------|--------|---------------| | 2026-01-29 | Memory >90% | Macro {$MEMORY.UTIL.MAX}=95 | Ja (normal fĂŒr Workload) | | 2026-01-29 | Swap <50% free | Macro {$SWAP.PFREE.MIN.WARN}=10 | Ja (normal) |
-
Zabbix
copilot-instructions.mdaktualisieren:- Neue Pitfalls dokumentieren
- Macro-Namen-Korrekturen festhalten
- Patterns fĂŒr zukĂŒnftige Problemlösung
-
dependencies.mdprĂŒfen â Falls neue AbhĂ€ngigkeiten entdeckt
Wichtige Pitfalls
- Macro-Namen exakt prĂŒfen! Trigger-Expression lesen, nicht raten.
Beispiel:
{$PVE.MEMORY.PUSE.MAX.WARN}â{$PVE.MEM.PUSE.MAX.WARN} - LLD-Trigger: Discovered Triggers können nicht direkt
manual_closegesetzt werden. Stattdessen: Template Trigger-Prototyp updaten â LLD re-run (task.createtype 6) - Event schlieĂen: Erst
manual_close=1auf Trigger setzen, dannevent.acknowledgeaction=1 - curl | jq kann leere Ausgabe liefern: Immer erst in Datei speichern, dann lesen
- NIEMALS
/etc/hostseditieren! DNS-Probleme werden IMMER auf dem zustĂ€ndigen DNS-Server gelöst, nie auf dem Client. Keine Ausnahmen. - Split-Horizon-DNS bei UCS: Wenn ein UCS-DC eine lokale Zone fĂŒr eine öffentliche Domain hostet (z.B.
egonetix.de), werden externe DNS-EintrĂ€ge (z.B. auf INWX) nie erreicht â der DC antwortet autoritativ mit NXDOMAIN. Fix: Eintrag in der lokalen UCS-Zone perudm dns/host_record createanlegen. Bei jedem neuen externen Host prĂŒfen ob ein lokaler DNS-Eintrag nötig ist. - systemd-resolved: Vorsicht mit
resolvectl domain: Das Setzen von DNS-Domains perresolvectl domainĂŒberschreibt DHCP-gelieferte Einstellungen komplett. Search-Domains (ohne~) ermöglichen Kurzname-Auflösung (srvdocker02âsrvdocker02.egonetix.lan). Routing-Domains (mit~) routen nur Queries an bestimmte DNS-Server, erlauben aber keine Kurzname-Auflösung. Beides mischen:resolvectl domain wlp0s20f3 egonetix.lan "~egonetix.de". Wichtig: Nach einem WLAN-Reconnect werdenresolvectl-Ănderungen von NetworkManager/DHCP wieder ĂŒberschrieben â fĂŒr permanente Ănderungen die NetworkManager-Verbindung konfigurieren. - Proxmox VM-ID-Wechsel: Wenn VMs umgezogen/neu erstellt werden, ALLE Zabbix-Referenzen prĂŒfen: LLD-Items, Trigger, Actions, Scripts. Phantom-Items fĂŒr alte VMIDs per
item.deleteentfernen. - LXC-Container Swap-Monitoring: Auf LXC-Containern (Proxmox) Swap-Triggers generell disablen â Container haben keinen eigenen Swap und reporten den Host-Swap ĂŒber
/proc/swaps. Bei neuen LXC-Hosts immer prĂŒfen. - FreeBSD Agent-Spikes: pfSense/FreeBSD Zabbix-Agent kann kurzzeitig falsche Werte liefern (Uptime, Disk, Swap). Trigger mit
min(,5m)stattlast()hÀrten um Einzelspitzen zu ignorieren.
Skills-Referenz
| Skill | Zweck |
|---|---|
/troubleshoot-host |
Strukturierter Troubleshooting-Workflow |
/session-end |
Session beenden, Commits erstellen |
/new-project |
Neues Projekt anlegen |
/delegate-remote |
Tasks an Remote-Server delegieren (CRA) |
Kanbanize (Businessmap) - Aufgabenverwaltung fĂŒr Vinos
Instanz: https://weinvinosgmbh.kanbanize.com
API v2 Basis-URL: https://weinvinosgmbh.kanbanize.com/api/v2/
Token-Speicherort (NICHT im Git-Sync!): ~/.config/kanbanize/token
Geltungsbereich: Alle Arbeiten unter ~/Nextcloud/vinos/
Authentifizierung
curl -H "apikey: $(cat ~/.config/kanbanize/token)" \
"https://weinvinosgmbh.kanbanize.com/api/v2/<endpoint>"
Bekannte Struktur
| Ressource | ID | Name |
|---|---|---|
| Workspace | 5 | IT Abteilung |
| Board | 1 | Team Infrastruktur |
| User | 4 | Robert Wiegand |
Pflicht-Workflow bei Vinos-Arbeiten
Bei JEDER Arbeit im Kontext ~/Nextcloud/vinos/ MUSS geprĂŒft werden:
-
Karte suchen: Gibt es eine Kanbanize-Karte, die zur aktuellen Aufgabe passt?
# Karten auf dem Board suchen curl -s -H "apikey: $(cat ~/.config/kanbanize/token)" \ "https://weinvinosgmbh.kanbanize.com/api/v2/cards?board_ids=1&fields=card_id,title,section,column_name" | jq . -
Kommentar vorbereiten: Falls eine passende Karte existiert, eine Dokumentation der Problembehandlung/Lösung als Kommentar formulieren.
-
User-Freigabe einholen: Den vorbereiteten Kommentar dem User vorlegen und auf explizites OK warten.
-
Erst nach Freigabe posten:
curl -s -X POST -H "apikey: $(cat ~/.config/kanbanize/token)" \ -H "Content-Type: application/json" \ -d '{"text":"<Kommentar>"}' \ "https://weinvinosgmbh.kanbanize.com/api/v2/cards/<card_id>/comments"
WICHTIG: Keine eigenmÀchtigen Aktionen
Du darfst in Kanbanize NICHTS eigenmaechtig aendern. Fuer JEDE Aktion ist die explizite Freigabe des Users erforderlich:
- Kommentare schreiben â User-OK abwarten
- Karten verschieben â User-OK abwarten
- Karten erstellen â User-OK abwarten
- Karten bearbeiten â User-OK abwarten
- Jede andere Schreiboperation â User-OK abwarten
Lesen/Suchen ist jederzeit erlaubt â nur Schreiboperationen erfordern Freigabe.
Kommentar-Format fĂŒr Problemdokumentation
WICHTIG: Kanbanize-Kommentare ignorieren \n-ZeilenumbrĂŒche!
Formatierung MUSS ĂŒber HTML-Tags erfolgen: <br> fĂŒr ZeilenumbrĂŒche, <b> fĂŒr Fettschrift, fĂŒr EinrĂŒckung.
Die API gibt immer type: plain zurĂŒck, rendert aber trotzdem HTML.
Template (HTML):
<b>[TITEL: Kurzbeschreibung]</b><br><br><b>PROBLEM</b><br>âą [Punkt 1]<br>âą [Punkt 2]<br><br><b>URSACHE</b><br>âą [Ursache 1]<br>âą [Ursache 2]<br><br><b>LĂSUNG</b><br>âą [MaĂnahme 1]<br>âą [MaĂnahme 2, mit Unterpunkten:]<br> ⊠[Detail 1]<br> ⊠[Detail 2]<br><br><b>BETROFFENE SYSTEME</b><br>âą [Host/Dienst 1]<br>âą [Host/Dienst 2]
Formatierungs-Regeln:
| Element | HTML | Ergebnis |
|---|---|---|
| Zeilenumbruch | <br> |
Neue Zeile |
| Leerzeile | <br><br> |
Absatz |
| Fettschrift | <b>Text</b> |
Text |
| EinrĂŒckung | |
4 Leerzeichen |
| AufzÀhlung | ⹠Text (Unicode U+2022) |
âą Text |
| Unter-AufzÀhlung | ⊠Text (Unicode U+25E6) |
⊠Text |
Inhaltliche Anforderungen
Kommentare mĂŒssen genug Detail enthalten, um bei Problemen als Troubleshooting-Einstieg zu dienen.
- Bei jeder ErwÀhnung eines Dienstes/Protokolls die konkreten Verbindungsdaten angeben (Host, Port, Protokoll)
- Nicht: "per SMTP verschickt" â Sondern: "per SMTP ĂŒber smtp.mailbox.org:465 (SSL/TLS) verschickt"
- Nicht: "IMAP-Abruf" â Sondern: "IMAP IDLE auf imap.mailbox.org:993 (TLS)"
- Nicht: "auf dem Server" â Sondern: "auf srv-docker02 (/home/vinosadmin/n8n/)"
- Pfade, IPs, Ports, Credentials-Quellen immer mit angeben
- Ziel: Jemand der den Kommentar liest, weiĂ sofort wo er nachschauen muss wenn etwas nicht funktioniert
User taggen (@Mention)
@Vorname Nachname im Kommentartext wird automatisch als Mention erkannt â kein spezieller API-Parameter nötig. Kanbanize wandelt es in <strong id="mention-..."> um und der User erhĂ€lt eine Benachrichtigung.
Karten verschieben
curl -s -X PATCH -H "apikey: $(cat ~/.config/kanbanize/token)" \
-H "Content-Type: application/json" \
-d '{"column_id": <COLUMN_ID>}' \
"https://weinvinosgmbh.kanbanize.com/api/v2/cards/<CARD_ID>"
Bekannte Column-IDs (Board 1):
| Column-ID | Name | Section |
|---|---|---|
| 1 | Aufgaben Backlog | Backlog |
| 2 | ToDo | Requested |
| 3 | In Bearbeitung | In Progress |
| 4 | Erledigt | Done |
| 5 | Ready to Archive | Archive |
Achtung: Wenn alle Child-Karten einer Parent-Karte auf "Done" stehen, wird die Parent-Karte automatisch mit verschoben.
Pitfalls
- Kommentare können NICHT gelöscht werden â weder via API noch UI. Workaround: Inhalt durch
.ersetzen \nwird komplett ignoriert â immer<br>verwenden- Markdown wird NICHT gerendert â kein
##,**,-etc. typeist immerplainâ kann nicht aufhtmlgesetzt werden, HTML wird trotzdem gerendert
In die Task-Abschluss-Checkliste integriert
Bei Vinos-Arbeiten wird die Kanbanize-PrĂŒfung Teil der Pflicht-Checkliste:
- Kanbanize geprĂŒft? Passende Karte gesucht?
- Kommentar vorbereitet? Falls Karte existiert: Doku dem User vorgelegt?
- User-Freigabe erhalten? Erst nach OK posten
Claude Remote Agent (CRA) - Verteilte Task-AusfĂŒhrung
Repository: ~/Nextcloud/egonetix/claude-remote-agent
CLI-Tool: cra
Zweck: Delegiert Aufgaben an Remote-Server, die Claude Code CLI autonom ausfĂŒhren - auch wenn der Laptop offline ist.
Architektur
Laptop (Coordinator) ââSSH + JSON-RPC 2.0ââ> Server (claude-agent)
- Coordinator: Verwaltet Server, erstellt Tasks, sammelt Ergebnisse
- Agent: EmpfĂ€ngt Tasks, fĂŒhrt Claude Code CLI autonom aus, speichert Ergebnisse lokal
- Persistenz: SQLite auf beiden Seiten, Tasks ĂŒberleben VerbindungsabbrĂŒche
Wann CRA vorschlagen
Du SOLLST dem User CRA aktiv vorschlagen, wenn:
| Szenario | Beispiel |
|---|---|
| Lang laufende Tasks | Codebase-Analyse, Refactorings, Log-Analyse |
| Server-Wartung | Updates, Cleanup, Security-Audits |
| Multi-Server-Operationen | Gleiche Aufgabe auf mehreren Servern parallel |
| Offline-Delegation | User will Laptop zuklappen, Tasks sollen weiterlaufen |
| UnabhÀngige Teilaufgaben | Aufgabe lÀsst sich in parallele Sub-Tasks aufteilen |
"Diese Aufgabe eignet sich gut fĂŒr CRA - soll ich sie an einen Remote-Server delegieren?"
Kommando-Referenz
# Server verwalten
cra servers add <name> <host> [--user USER] [--port PORT] [--key PATH] [--tag TAG]
cra servers list [--all]
cra servers remove <name> [--yes]
cra servers status [name]
# Tasks
cra submit <server> "<prompt>" [--priority N] [--model MODEL] [--max-turns N]
cra status <server> [task_id]
cra cancel <server> <task_id>
# Ergebnisse
cra collect [server] [--task ID] [--since ISO-DATETIME] [--output FILE]
# Config synchronisieren
cra sync-config [server] [--no-claude-md] [--no-settings]
MCP-Server Integration
Wenn der CRA MCP-Server konfiguriert ist, stehen CRA-Funktionen als native Tools zur VerfĂŒgung (cra_submit, cra_status, cra_collect, cra_servers_list, cra_server_status, cra_sync_config). PrĂŒfe ob MCP-Tools verfĂŒgbar sind, bevor du auf CLI-Befehle zurĂŒckfĂ€llst.
Wichtige Hinweise
- Autonome AusfĂŒhrung: Server brauchen
~/.claude/settings.jsonmit Tool-Permissions - Config-Sync: Nach CLAUDE.md/settings.json Ănderungen â
cra sync-config - Retry: Fehlgeschlagene Tasks werden automatisch wiederholt (max 3x)