Active Work

Pro aktivem Projekt: ein next-session-prompt.md im Projekt-Ordner haelt den Kopf-Kontext fuer den naechsten Chat. Neuer Chat startet immer mit „lies _index und next-session-prompt.md”.

Kapazitaets-Split (eingefuehrt 2026-05-19, Doppel-Linien-Strategie)

Solo-GF-Kapazitaet ist auf zwei Revenue-Linien aufgeteilt (Quelle: requirements v2.3):

SpurAnteilInhalt
MCP-Hosting Welle-1 (Subscription, KMU-DACH)70%Now-Slots + Standard-Kunden-Pipeline, MRR-Wachstum, Welle-1.0-White-Glove bis 5 Tenants
Industriekunden-Festpreis (Becker-Pattern generalisiert)30%BAS-Twin-Wartung + Folge-Engagements (z.B. Nils-Angebote a 9.500 EUR via Alex, TODO in ~/source/bas-twin/projekt/steuerung/kanban.md), Akquise zweiter Industriekunde, Standard-Stack-Layer aus Engagements generalisieren

Konsequenz fuer Now-3-Limit: 30% Industriekunden ist Bereich-Reservierung, NICHT zwingend ein Now-Slot. BAS-Twin steht aktuell in Wartend (Vertragsunterschrift). Wenn Industriekunden-Engagement aktive Bauphase trifft → ein Now-Slot wird dafuer reserviert, dann nur noch 2 Slots fuer MCP-Hosting/andere. Wochen-Check pruefen.

WIP-Regel (eingefuehrt 2026-05-18)

Now hat max 3 Slots. Neuer Now-Slot nur wenn vorher einer raus (Done/Next/Pause/Wartend). Nie 4+.

„Diese Woche nichts daran gemacht” → wandert in Next oder Pause. Now ist live, nicht Wunschdenken. Wochen-Check Sonntag-Abend oder Montag-Morgen.

Next ist nicht „auch aktiv”. Next-Items werden bewusst NICHT angefasst bis ein Now-Slot frei wird. Pause = bewusst geparkt mit Re-Eval-Datum. Wartend = Ball liegt extern.

Begruendung: Zusammenbruch 2026-04-10 wegen 10+ Parallel-Projekten. Pattern wiederholt sich strukturell ohne hartes Limit. Siehe nicht-alles-selber-bauen.

🛑 Security-TODOs aus Audit 2026-05-15

Voll-Audit-Run: report. Fix-Plan: fix-plan. Status-Tracking: baseline.json.

5 Fix-Agents haben am 2026-05-15 PRs erstellt. Hier nur was DU machen musst — Code-Diffs sind in den PRs.

Heute Abend — 90 Min, schliesst 3 CRITs

S1. Cloudflare-Access vor mcp-whatsapp.agenticventures.de/mcp (F001) — DONE 2026-05-15

Access-App mcp-whatsapp ist live: Domain mcp-whatsapp.agenticventures.de/mcp*, Policy „Marvin only” (hello@marvinkuehlmann.com) + Service-Token „receptionist-brain”. Verifiziert 2026-05-18 per curl -IHTTP/2 302 auf cloudflareaccess.com fuer /mcp und /mcp/. Steht so auch in baseline.json F001.

S2. [10 Min] Token-Rotation (F003) — NAECHSTER OFFENER CRIT

  1. GitHub:
    • https://github.com/settings/tokens
    • alten gho_... Token finden („Claude Code dev” oder unbenannt) → „Delete”
    • „Generate new token (classic)” → Scopes: repo, read:org → 90 Tage Expiry → kopieren
    • In 1Password: neuer Eintrag „GitHub PAT — Claude Code dev (2026-05)”
  2. ElevenLabs:
  3. Beide neue Werte in ~/.claude.json eintragen (Format wie vorher):
    # Marvin pruefe vorher mit
    grep -E '"GITHUB_TOKEN|ELEVENLABS' ~/.claude.json
    # dann mit Editor ersetzen
  4. Test: gh auth status (sollte ok sein), ElevenLabs in Claude Desktop neu laden

S3. [30 Min] AWS Mgmt-Account haerten (F004)

  1. Console-Login als Mgmt-Root: https://signin.aws.amazon.com/console
    • Root-Email + Passwort (1Password: „AWS Mgmt Root”)
    • Bei Login wirst du nach MFA gefragt → falls keiner: oben rechts → Security credentials → MFA → „Assign MFA device”
    • Hardware-Key bevorzugt (YubiKey), sonst Authenticator-App
  2. Selbe Seite: „Access keys” → falls vorhanden:
    • jeden Key auf „Make inactive” → 24h warten → „Delete” (zur Sicherheit erst inactive)
    • alternativ wenn sicher: direkt „Delete”
  3. IAM → Users → mkuehlmann → „Security credentials” Tab:
    • „Multi-factor authentication (MFA)” → „Assign MFA device” → Authenticator-App
    • „Access keys”: die 2 alten Keys (8+ Monate) auf „Make inactive” setzen → wenn nichts kracht in den naechsten Tagen → loeschen
    • Falls noetig: neuer Key via Identity-Center-Role statt User-Key
  4. Verifikation: aws iam get-account-summary --profile av-mgmt zeigt AccountMFAEnabled: 1

S4. [15 Min] Root-MFA av-prod + becker + privat (F005)

Pro Account selbe Schritte:

  1. https://.signin.aws.amazon.com/console (Account-IDs aus accounts)
  2. Login als Root → IAM → Security credentials → MFA → „Assign MFA device”
  3. Authenticator-App-QR scannen, 2 Codes eingeben

Reihenfolge: av-production zuerst (wichtigster), dann av-becker (Kunden-Daten), dann mk-privat.

S5. [10 Min] APP_SECRET fuer mcp-whatsapp ergaenzen — Pre-Merge-Step fuer PR

Vor Merge von https://github.com/agentic-ventures/mcps/pull/1:

  1. Meta Developer Console: https://developers.facebook.com/apps/
  2. Deine WhatsApp-App → Settings → Basic → „App Secret” → „Show” → kopieren
  3. AWS:
    aws secretsmanager get-secret-value \
      --secret-id mcp-whatsapp-hosted/whatsapp-config-825vxB \
      --profile av-prod \
      --query SecretString --output text | jq .
    # → notiere alle bestehenden Keys
     
    aws secretsmanager update-secret \
      --secret-id mcp-whatsapp-hosted/whatsapp-config-825vxB \
      --profile av-prod \
      --secret-string '{"<bestehende keys>":"...", "APP_SECRET":"<meta-app-secret>"}'
  4. Dann erst PR mergen + cdk deploy — sonst crasht der Container am fail-fast-Check.

PR-Merges + Deploys (heute oder morgen)

Status nach Audit — Reihenfolge nach Wichtigkeit:

  1. mcps PR #1 mcp-whatsapp HMAC + Digest + CI
    • Vor Merge: S5 ausfuehren
    • Nach Merge: cd ~/source/mcps && cdk deploy McpWhatsappStack --profile av-prod
    • Smoke: Meta Webhook-Tester schickt signed Payload → 200, unsigned → 401
  2. agents-platform PR #1 CDK-Bump + presignup-msg
    • Mergen, dann npm run synth lokal, dann cdk deploy der drei Stacks
    • Stash auf main: wip beleg-pipeline schedule — vorher git stash pop bevor du Hin-und-Her-Branch wechselst
  3. a-icking PR #4 Rate-Limit + cloudflared essential
    • Mergen, dann Terraform plan + apply (Repo nutzt Terraform, nicht CDK)
    • Smoke nach Deploy: aws ecs stop-task auf cloudflared-Container → App-Task soll mitkommen
  4. agentic-ventures PR #1 Pre-Commit-Hook + Doku-Stubs
    • Mergen, dann lokal aktivieren: ln -s _meta/hooks/pre-commit-visibility-guard.sh .git/hooks/pre-commit

Diese Woche — 2h, schliesst die letzten 2 HIGHs

S6. [30 Min] DNSSEC + CAA auf beiden Domains (F007)

  1. agenticventures.de (Cloudflare-NS):
    • Cloudflare → DNS → Settings → „Enable DNSSEC” → bekommst DS-Record
    • Domain-Registrar (Hetzner Domain-Robot oder wo registriert): DS-Record eintragen
    • DNS → Records → „Add record” CAA:
      Name: @
      Tag: issue, Value: letsencrypt.org
      Tag: issue, Value: amazon.com   (fuer ACM/CloudFront)
      Tag: iodef, Value: mailto:hello@marvinkuehlmann.com
      
  2. marvinkuehlmann.com (Route 53):
    aws route53 list-hosted-zones --profile mk-privat
    # Hosted-Zone-ID merken, dann:
    aws route53 enable-hosted-zone-dnssec --hosted-zone-id <id> --profile mk-privat
    # KMS-Key wird auto-erstellt, DS-Record kommt zurueck → bei Registrar eintragen
    Dann CAA-Records analog via change-resource-record-sets.
  3. Verifikation:
    • dig +dnssec agenticventures.de SOAAD-Flag gesetzt
    • dig CAA agenticventures.de → Records sichtbar

S7. [30 Min] pdf.agenticventures.de absichern (F008)

  1. SSH auf av-tools-shared-01 (IP aus Hetzner-Console):
    ssh root@<ip>
    # Stirling-Container stoppen und neu starten mit force-login + neuem User
    docker exec -it stirling-pdf /bin/sh
    # in container: configs/settings.yml editieren — security.enableLogin: true, force initial password
    # oder: container ganz neu starten und ueber Erst-Setup neuer Admin
    docker restart stirling-pdf
  2. Cloudflare-Access-App vor pdf.agenticventures.de analog S1
    • Application domain: pdf.agenticventures.de
    • Path: *
    • Policy: Marvin only

S8. [10 Min] SSH-Firewall av-tools-shared-01 (F009)

  1. Hetzner Cloud Console → Firewalls → av-tools-firewall
  2. SSH-Regel (22): Source aendern von 0.0.0.0/0, ::/0 auf:
    • deine fixe Heim-IP (falls vorhanden), ODER
    • Tailscale-CGNAT 100.64.0.0/10 (falls Tailscale auf dem Server eingerichtet), ODER
    • Notfall: SSH-Port von 22 auf z.B. 22222 verschieben + fail2ban schaerfer (security-by-obscurity, aber besser als jetzt)
  3. Save → testen: ssh root@<server-ip> von erlaubter Quelle → ok, von Mobile-Hotspot → timeout

Tracking

Wenn fertig: in baseline (JSON) den entsprechenden Eintrag von "fixed": false auf "fixed": true aendern. Naechster automatischer Audit-Lauf: 1. Juni — der zeigt dir automatisch was offen geblieben ist.


Now — max 3 Slots, daran arbeite ich diese Woche

#ProjektPhaseNaechster SchrittPrompt
1Security-Fixes S2-S8audit-fixsiehe Block oben — Token-Rotation, AWS-MFA, DNSSEC, Stirling-Login, SSH-Firewall. Schliesst 3 CRITs + 2 HIGHs. Naechster Audit 01.06.fix-plan
2_indexphase-1-buildNEU 2026-05-18 — Cockpit-Seite /vf im av-cockpit, drei Bloecke (Jetzt-Status, Diesen Monat, 90-Tage-Forecast). Datenquellen Papierkram (VF-Mandant, bestehender Zugang — Sparkasse Hamm Connection 6 + Standard 3 verifiziert) + TicketPay + manuelle Forecast-Annahmen. 7 Arbeitstage netto. Tag 1: Daten-Discovery via papierkram_list_bank_transactions(bank_connection_id=6) + ticketpay_list_events.next-session-prompt
3_indexpre-salesQuick-Wins-Deck + Demo-Video fuer Pizza-Termin 02.06

Wenn Now-Slot frei: naechstes Item aus Next nach oben ziehen, hier vermerken wann.

Next — wartet auf freien Now-Slot

Wird bewusst NICHT angefasst bis ein Now-Slot frei wird. Reihenfolge in der Tabelle = grobe Prio, oben zuerst.

ProjektPhaseNaechster SchrittPrompt
_indexphase-1-buildDNS-Cutover VF-Pilot abschliessennext-session-prompt
_indeximplementationsiehe plan.md im Projekt
_indexv3-PivotMarkdown-only Dashboard v3 bauen — Plan + Design erstnext-session-prompt
_indexphase-1-buildEmail-Agent-Loop fertigbauennext-session-prompt
_indexredesign-prepRedesign-Plan fixieren, Skill: frontend-designnext-session-prompt
_indexphase-2+nach Phase-1 (= Security-Fixes Now) weitere Phasen 1Password + claude.json
_indexdeliverysiehe Projekt-Index
_indexchat-ui-replatform-evalLobe-Chat 3-Tage-Spike + Lizenz-Anfrage hello@lobehub.com — siehe report. GO/NO-GO an Tag 2 (MCP-OAuth-Test).
_indexdiscoveryNEU 2026-05-20 nach Gespraech mit Julian — Brainstorm zu 4 Saeulen (Trend-Scout Instagram/Eventbranche, AI-Social-Posts, AI-LinkedIn-Posts, Meta-Ads-MCP) bis zum naechsten Termin. Selbstkostenpreis wie bisheriges VF-Setup, produktisierbar als Standard-Stack-Layer. Termin-Datum TBD.

Pause — bewusst geparkt, Re-Eval-Datum

Marvin pflegt: Projekte die laenger nicht aktiv sein sollen. Bei Re-Eval entscheiden: weiter Pause, in Next, oder archivieren.

ProjektPause seitRe-EvalGrund
_index2026-05-182026-07-01POC laeuft, kein Druck — erst nach Welle-1-Stabilisierung wieder reinholen
_index2026-05-182026-06-01nicht zeitkritisch — nach Now-3-Reset entscheiden
_index2026-05-182026-06-15discovery-Phase ohne externen Druck
_index2026-05-182026-06-15sprint-2 — pruefen ob Kunden-Druck da ist
_index2026-05-182026-06-15delivery-Phase — Status mit Kunde klaeren
_index2026-05-182026-06-01phase-1-cf-setup — kommt nach Security-Fixes
_index2026-05-182026-06-15„Status klaeren” seit Wochen — entweder anfassen oder archivieren
_index2026-05-182026-06-30„glaube nicht mehr dran” — wenn keine Reaktion bis 06-30: archiv

Wartend — Ball extern oder geparkt

ProjektPhaseWartet auf
_indexwelle-1 admin-ReststufenMarvin selbst — (a) System-Prompt-Paste in OWUI Admin via cat ~/source/apps/open-webui-vf/prompts/vf-sonnet.txt | pbcopy (5 Min) (b) SNS-Email-Subscription bestaetigen (c) ZDR-Mail an AWS-TAM (Draft fertig in 2026-05-17-zdr-addendum-anfrage) (d) VF-AVV-Erweiterung an Andre/Christoph (Draft in avv-2026-openwebui-vf) (e) OWUI-API-Key fuer Tag-5-Baseline. Code-Deploy ist DURCH (2026-05-18 19:42 UTC). Spar-Potenzial ~$320-380/Mo wirkt erst nach System-Prompt-Paste.
_indexsprint-1Becker Vertragsunterschrift (Code: Phase A Aufwandsschluessel gemerged 2026-05-15, Phase B Pipeline-Kalibrierung wartet auf Alex-Klaerung)
Beim 2. Spoke-Account (naechster konkreter Kunden-Hosting-Workload nach av-becker)TriggerCost-Allocation-Tag tenant aktivieren via LiteLLM aws_session_tags oder per-Tenant-Hub-Role mit Resource-Tag. Pattern-Doku intern/wissen/prozesse/cross-account-bedrock-hub.md aus zwei realen Instanzen extrahieren.
tmp/owui-admin-key CleanupReminder Sep 2026Pruefen ob nach Welle-4-Stabilisierung noch noetig (lebt unter tmp/-Prefix).
_indexdiscoveryKunden-Kontakt
_indexdiscoveryKunden-Kontakt

Deployed / laeuft

ProjektStatus
_indexdeployed, laeuft als Cron-Routine
_indexactive, Asset-Pool

Workflow

  1. Neuer Chat: „lies [[../projekte//_index]] und [[../projekte//next-session-prompt]]”
  2. Ende der Session: next-session-prompt.md updaten — was als naechstes ansteht, mit welchem Skill
  3. Wenn Projekt vom Tisch: status: archived im _index, hier rausnehmen
  4. Neues Projekt: _index anlegen, hier eintragen — Default in Next, NICHT direkt Now. Stub-Prompt anlegen wenn Action-Phase.
  5. Wochen-Check (Sonntag oder Montag): Now-Tabelle anschauen — was nicht angefasst → Next oder Pause. Pause-Re-Eval-Daten pruefen.
  6. Neuer Now-Slot frei: naechstes Item aus Next nach oben ziehen. NIE 4+ Now.

Konvention next-session-prompt.md

Minimum:

  • Frontmatter mit type: doc, purpose
  • Rolle (Senior X — wenn relevant)
  • Was wir gerade bauen + Stand
  • Erster konkreter Schritt
  • Skill-Hinweis (welche Phase, welcher Skill)

Beispiel-Anker: next-session-prompt (ausfuehrlich, fuer Pivot-Session) und next-session-prompt (schlank, fuer Build-Phase).