From 9b60bcc43aa8c9f1398920e1e3c3a53cece991c1 Mon Sep 17 00:00:00 2001 From: Christoph Emsenhuber Date: Wed, 26 Aug 2026 13:39:41 +0200 Subject: [PATCH] opencode: Permission + Quick-Index + TP-Management-Regel MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - opencode.jsonc: permission=allow + mikromcp/pve-mcp/home-assistant/cloudflare MCPs - docs/teilprojekte.md: Quick-Index-Tabelle (22 Zeilen) für 1-Read-Statusbaum - CLAUDE.md: TP-Management-Regel (vorschlagen -> abstimmen -> anlegen) --- CLAUDE.md | 8 ++++++++ docs/teilprojekte.md | 43 +++++++++++++++++++++++++++++++++++-------- opencode.jsonc | 41 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 84 insertions(+), 8 deletions(-) create mode 100644 opencode.jsonc diff --git a/CLAUDE.md b/CLAUDE.md index 6299668..8d83d81 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -12,6 +12,14 @@ für den Einstieg **nicht** nötig. Regel für beide Dateien: **ein TP wandert e mehr daran zu tun ist** — und der **Ist-Stand-Block wird bei jeder Änderung mitgezogen**, nicht nur der betroffene TP-Abschnitt. +🛠️ **TP-Management (2026-08-26):** Wenn während einer Session ein neues Teilprojekt, eine Abhängigkeit +oder ein Querschnittsthema sichtbar wird, das bisher in keinem TP abgebildet ist: +- Vorschlagen und mit dir abstimmen (nicht eigenmächtig anlegen). +- Auf dein Okay hin anlegen: Quick-Index-Zeile + `### TP`-Abschnitt mit Status `🔜`, Scope, + Abhängigkeiten, Abgrenzung. Nächste freie Nummer vergeben (höchste vergebene + 1; Lücken aus + verworfenen TPs bleiben frei). +- Ist-Stand-Block mitziehen (Datum, betroffene Zeilen). + --- ## VLAN-Modell (kanonisch) diff --git a/docs/teilprojekte.md b/docs/teilprojekte.md index 0ecf6bc..4a052f1 100644 --- a/docs/teilprojekte.md +++ b/docs/teilprojekte.md @@ -27,11 +27,10 @@ Mgmt (VLAN99, Ist 2026-08-16): core `.99.1` · branch `.99.2` · ap1 `.99.11` · ## Ist-Stand (Kurz) -**Stand 2026-08-18 — live gegen die Geräte geprüft (MikroMCP/REST), nicht aus der Doku abgeschrieben.** +**Stand 2026-08-26 — live gegen die Geräte geprüft (MikroMCP/REST), nicht aus der Doku abgeschrieben.** **Die Compliance-Zeile unten ist am 2026-08-23 gegen die Nautobot-API nachgezogen.** -*(Die Fassung vom 2026-08-16 stand bis zum 18. hier und war an vier Stellen überholt — Standalone-APs, -RouterOS-Versionen, „plain 1.1.1.1", 68/68. Wer diesen Block liest, liest ihn als Erstes: er wird -ab jetzt bei jeder Änderung mitgezogen, nicht nur die TP-Abschnitte.)* +*(Die Fassung vom 2026-08-16 stand bis zum 18. hier und war an vier Stellen überholt. Wer diesen Block +liest, liest ihn als Erstes: er wird bei jeder Änderung mitgezogen, nicht nur die TP-Abschnitte.)* - **Alle vier MikroTik laufen auf RouterOS 7.24** (stable, 2026-08-17 von Christoph selbst gehoben, TP27), **RouterBOOT ebenfalls 7.24** auf allen vieren (`current-firmware` = `upgrade-firmware`, geprüft 08-18). @@ -61,10 +60,10 @@ ab jetzt bei jeder Änderung mitgezogen, nicht nur die TP-Abschnitte.)* Relay-Reparatur suchte die **App** immer noch nicht (macOS-Local-Network-Gate stand auf „an" und griff nicht; Fix war Schalter aus/ein + Neustart, User-bestätigt 08-25). **Beide sind erledigt.** - **Reverse Proxy = `caddy-bf1`** (LXC 130 auf pve, **`10.40.20.40`**, TP31 ✅ Schritt 1–3 seit - 2026-08-25): Caddy 2.11.4, **16 Sites**, Zertifikate ausschliesslich per **DNS-01** mit einem eng - geschnittenen `Zone:DNS:Edit`-Token (`CF_DNS_API_TOKEN`, **nicht** das account-weite). Abnahme über - den Host-Header von einem zweiten Host: 11× 200, `nautobot` 302. **Offen: `hass` 400** (HA - `trusted_proxies` greift noch nicht) sowie Schritt 4–6 (Split-Horizon, Tunnel `bf-public`, Abbau). + 2026-08-25, **`hass` 400 behoben 2026-08-26**): Caddy 2.11.4, **16 Sites**, Zertifikate ausschliesslich + per **DNS-01** mit einem eng geschnittenen `Zone:DNS:Edit`-Token (`CF_DNS_API_TOKEN`, **nicht** das + account-weite). Abnahme über den Host-Header von einem zweiten Host: 11× 200, `nautobot` 302. + Offen: Schritt 4–6 (Split-Horizon, Tunnel `bf-public`, Abbau). - **Ausgebaut / gelöscht:** ALLNET-`sw1` und Omada-`sw2` sind **physisch weg** (2026-08-08 bzw. 2026-07-23, in Nautobot *Decommissioned*); Omada-Controller + `omada-mcp` gelöscht (2026-07-16); FritzBox 6660 raus seit 2026-07-01 (Liwest-Tausch auf Arris). **VLAN1 ist leer** (`/ip arp` auf `bridge` = 0 Einträge, @@ -171,6 +170,34 @@ nachmessen und dann entscheiden**. Blocker gibt es keine mehr. TP5 ist in der Na > Sub-TP offen war, steht dieses hier und das erledigte Eltern-TP im Archiv (so bei > ~~**TP17.2** ↔ TP17~~ *(TP17.2 ist am 2026-08-24 in **TP30** aufgegangen und kein eigenes TP mehr)* > und **TP20.1** ↔ TP20). +> +> ### 📊 Quick-Index (nur dieser Block ist für den Statusbaum nˆtig — 1 Read) +> +> | # | Status | Kurztitel | Abschluss | +> |---|---|---|---| +> | TP5.1 | ⏸️ | DNS-Visibility Airfryer | — | +> | TP8 | ⏸️ | Identity / 802.1X | — | +> | TP11 | ⏸️ | Monitoring | — | +> | TP12 | ⏸️ | IPv6 (3 Standorte) | — | +> | TP12.1 | 🔜 | IPv6 ULA + v6-Firewall | — | +> | TP13 | 🔜 | Botschafts-WLANs | — | +> | TP14.4 | 🔜 | CF-Access-Token | — | +> | TP16 | ✅ | CF-Tunnel HA wieder voll | 2026-08-24 | +> | TP16.2 | 🔜 | Härtung bypass-Dienste | — | +> | TP16.3 | ⏳ | cloudflared-Reduktion (Probe läuft) | — | +> | TP17.1 | ❌ | Shelly Gen4 → Zigbee | 2026-08-23 | +> | TP17.3 | ✅ | Shelly-Regression behoben | 2026-08-23 | +> | TP18 | 🔜 | Garage-Objektspeicher | — | +> | TP20.1 | 🔜 | Vaultwarden → Platform-PG | — | +> | TP23 | ⏳ | DNS-Policy (Stufe 1 ✅, Stufe 2 vorbereitet) | — | +> | TP24 | 🔜 | DC-USV | — | +> | TP25 | ✅ | WLAN-Stabilisierung (Kern erledigt) | 2026-08-24 | +> | TP29 | 💡 | Anwesenheitserkennung (Idee) | — | +> | TP30 | 🔜 | Credentials (Etappe 1 ✅, Rest gebündelt) | — | +> | TP31 | ⏳ | Reverse Proxy Caddy (Schritt 1–3 ✅) | — | +> | TP32 | 🟢 | Nummern-Systematik (Konzept) | — | +> | TP33 | 💡 | Sonos fern (Idee, zurückgestellt) | — | +> | — | — | **34 archivierte TPs** in `teilprojekte-archiv.md` | — | ### TP5.1 — DNS-Visibility & Flow-Observability für Low-Trust-Geräte (Airfryer-Fall) ▸ vorgemerkt - **Kontext (2026-07-08/09):** Airfryer „airschreier" (Philips/Versuni, ESP, `10.40.30.180`) bekam per DHCP-Option 6 `dns 1.1.1.1` als Override, weil das OTA-Update über den ap1-DoH-Gateway-Pfad nicht durchging (DoH-Latenz beim primitiven ESP-Stack — **kein** Content-Block, via Gateway-Logs bewiesen, s. `memory/ref_esp_ota_doh_not_block`). Nebenwirkung: public **1.1.1.1 = anonymer Consumer-Resolver ≠ accountgebundener Gateway-DoH** (`px35ynlol3.cloudflare-gateway.com`) → **DNS-Sicht auf das Gerät weg**, Gerät umgeht zudem die Filterung. diff --git a/opencode.jsonc b/opencode.jsonc new file mode 100644 index 0000000..c2210d1 --- /dev/null +++ b/opencode.jsonc @@ -0,0 +1,41 @@ +{ + "$schema": "https://opencode.ai/config.json", + "instructions": ["CLAUDE.md"], + "permission": "allow", + "mcp": { + "gitea-mcp": { + "type": "remote", + "url": "https://gitea-mcp.emsenhuber.net/mcp", + "enabled": true + }, + "mikromcp": { + "type": "local", + "command": ["npx", "-y", "mikromcp", "serve"], + "environment": { + "MIKROMCP_CONFIG_PATH": "/Users/christophemsenhuber/dev/bf-infra/mcp/mikromcp/config/routers.yaml", + "MIKROMCP_DEFAULT_ROUTER": "ap1" + }, + "enabled": true, + "timeout": 30000 + }, + "pve-mcp": { + "type": "remote", + "url": "http://10.40.20.173:3000/", + "enabled": true, + "timeout": 15000 + }, + "home-assistant": { + "type": "remote", + "url": "http://10.40.20.105:9583/private_29X8x73taoNEq6gzmbVdyg", + "enabled": true, + "timeout": 15000 + }, + "cloudflare": { + "type": "remote", + "url": "https://mcp.cloudflare.com/mcp", + "enabled": true, + "timeout": 15000, + "oauth": {} + } + } +}