Vor sechs Monaten brauchte man dafür einen Backend-Entwickler, einen DevOps-Ingenieur und zwei Wochen. Heute genügt ein einziger Satz und Claude. Hier ist die vollständige Architektur – und warum die meisten Entwickler das noch nicht verstanden haben.
Das Gedankenmodell der meisten Menschen bezüglich KI ist falsch.
Sie denken: KI-Assistent → du stellst Fragen → es antwortet.
Die Realität im Jahr 2026: KI-Agent → du beschreibst ein System → es baut, deployed und verbindet dieses System mit deiner Umgebung. Kein Prototyp. Kein Code-Snippet. Eine laufende Anwendung.
Dieser Wandel hat einen Namen: Generative App-Architektur. Und der Stack, der sie praktikabel macht – Claude + Obsidian + MCP – steht jedem sofort zur Verfügung.
1. Was Generative App-Architektur tatsächlich bedeutet
Traditionelle Softwareentwicklung:
1Idee → Spezifikation → Design → Frontend-Entwicklung → Backend-Entwicklung2→ Datenbank-Setup → API-Integration → Testen → Deployment3Dauer: Wochen. Kosten: Tausende.
Generative App-Architektur:
1Idee → Prompt → Laufendes System2Dauer: Minuten. Kosten: API-Tokens.
Der KI-Agent schreibt nicht nur Code. Er führt eine vollständige Agent Loop im Hintergrund aus:
Schritt 1 – Zerlegung
Deine abstrakte Anfrage ("baue ein CRM für eine Autowaschanlage") wird in Dutzende atomare Teilaufgaben zerlegt: Datenbankschema, UI-Komponenten, Benachrichtigungslogik, Authentifizierungsablauf, API-Endpunkte.
Schritt 2 – Umgebungsabbildung via MCP
Durch das Model Context Protocol versteht der Agent sofort, welche Werkzeuge ihm zur Verfügung stehen – dein Dateisystem, installierte Pakete, laufende Dienste, verfügbare APIs.
Schritt 3 – Iterativer Bau und Test
Der Agent schreibt Code, führt ihn aus, fängt Compiler-Fehler, behebt sie und testet erneut – autonom – bis das System korrekt läuft.
Schritt 4 – Kontextbezogenes Deployment
Die Ausgabe ist keine Textdatei mit Code. Es ist eine live lokale Umgebung oder eine deploybare Webanwendung.
Dies ist der Unterschied zwischen einem Werkzeug, das Entwickler unterstützt, und einem System, das die gesamte Build-Pipeline ersetzt.
2. Claude als Antrieb – drei Deployment-Modi
Modus 1 – Claude Artifacts
Der schnellste Weg vom Prompt zur laufenden Anwendung. Wenn du Claude bittest, etwas zu bauen, öffnet es ein interaktives Artifact-Fenster und setzt, kompiliert und startet eine vollständige Webanwendung in Echtzeit zusammen – React, HTML, JavaScript – während du zusiehst.
Du kannst mit der laufenden App im Artifact interagieren, sie in natürlicher Sprache iterieren und das vollständige Archiv exportieren.
Prompt, der einen produktionsreifen Finanz-Tracker erzeugt:
1Baue eine persönliche Finanz-Tracking-Anwendung mit:23FUNKTIONEN:4- Transaktionslog (hinzufügen/bearbeiten/löschen mit Kategorien)5- Monatliche Budgetansicht mit Fortschrittsbalken6- Krypto-Portfolio-Tracker, der Live-Preise von der CoinGecko-API zieht7- Nettovermögensberechnung in Echtzeit8- Dark-Mode-Umschalter910TECHNISCHE ANFORDERUNGEN:11- Single-File-React-Anwendung12- useState + useEffect (kein externes State-Management)13- Tailwind CSS für Styling14- Abruf von öffentlichen APIs (keine Authentifizierung erforderlich)15- Mobil responsive1617DATEN:18- Persistierung in localStorage zwischen Sitzungen19- Export von Transaktionen als CSV2021Ausgabe: vollständige, eigenständige, bereit zum Deployment.
Was Claude Artifacts zurückgibt – eine vollständige React-Anwendung:
1import { useState, useEffect } from "react";23const CATEGORIES = ["Housing","Food","Transport","Entertainment","Health","Savings","Income","Crypto","Other"];4const CRYPTO_IDS = { BTC: "bitcoin", ETH: "ethereum", SOL: "solana" };56export default function FinanceTracker() {7 const [transactions, setTransactions] = useState(() =>8 JSON.parse(localStorage.getItem("transactions") || "[]")9 );10 const [cryptoPrices, setCryptoPrices] = useState({});11 const [form, setForm] = useState({ description:"", amount:"", category:"Other", type:"expense", date:"" });12 const [darkMode, setDarkMode] = useState(false);1314 useEffect(() => {15 const ids = Object.values(CRYPTO_IDS).join(",");16 fetch(`https://api.coingecko.com/api/v3/simple/price?ids=${ids}&vs_currencies=usd`)17 .then(r => r.json())18 .then(data => {19 const prices = {};20 Object.entries(CRYPTO_IDS).forEach(([sym, id]) => { prices[sym] = data[id]?.usd || 0; });21 setCryptoPrices(prices);22 });23 }, []);2425 useEffect(() => {26 localStorage.setItem("transactions", JSON.stringify(transactions));27 }, [transactions]);2829 const addTransaction = () => {30 if (!form.description || !form.amount) return;31 setTransactions(prev => [...prev, { ...form, id: Date.now(), amount: parseFloat(form.amount),32 date: form.date || new Date().toISOString().split("T")[0] }]);33 setForm({ description:"", amount:"", category:"Other", type:"expense", date:"" });34 };3536 const totalIncome = transactions.filter(t => t.type === "income").reduce((s,t) => s + t.amount, 0);37 const totalExpenses = transactions.filter(t => t.type === "expense").reduce((s,t) => s + t.amount, 0);38 const netWorth = totalIncome - totalExpenses;3940 const bg = darkMode ? "#0D0D0D" : "#F9F7F4";41 const card = darkMode ? "#1A1A1A" : "#FFF";42 const text = darkMode ? "#F0F0F0" : "#1A1A1A";43 const border = darkMode ? "#2A2A2A" : "#E8E8E8";4445 return (46 <div style={{ minHeight:"100vh", background:bg, color:text, fontFamily:"system-ui, sans-serif" }}>47 <div style={{ maxWidth:800, margin:"0 auto", padding:"24px 16px" }}>4849 <div style={{ display:"flex", justifyContent:"space-between", marginBottom:24 }}>50 <div>51 <h1 style={{ fontSize:22, fontWeight:500, margin:0 }}>Finance Tracker</h1>52 <p style={{ margin:"4px 0 0", fontSize:13, color: netWorth >= 0 ? "#22C55E" : "#EF4444" }}>53 Nettovermögen: ${netWorth.toFixed(2)}54 </p>55 </div>56 <button onClick={() => setDarkMode(!darkMode)}57 style={{ padding:"8px 14px", borderRadius:8, border:`1px solid ${border}`,58 background:card, color:text, cursor:"pointer" }}>59 {darkMode ? "Hell" : "Dunkel"}60 </button>61 </div>6263 <div style={{ display:"grid", gridTemplateColumns:"1fr 1fr", gap:10, marginBottom:20 }}>64 {[["Einnahmen","#22C55E",totalIncome],["Ausgaben","#EF4444",totalExpenses]].map(([label,color,val]) => (65 <div key={label} style={{ background:card, border:`1px solid ${border}`, borderRadius:10, padding:14 }}>66 <p style={{ margin:0, fontSize:12, color:"#999" }}>{label}</p>67 <p style={{ margin:"4px 0 0", fontSize:20, fontWeight:600, color }}>${val.toFixed(2)}</p>68 </div>69 ))}70 </div>7172 <div style={{ background:card, border:`1px solid ${border}`, borderRadius:10, padding:16, marginBottom:20 }}>73 <div style={{ display:"grid", gridTemplateColumns:"2fr 1fr 1fr", gap:8, marginBottom:8 }}>74 <input placeholder="Beschreibung" value={form.description}75 onChange={e => setForm(p => ({ ...p, description: e.target.value }))}76 style={{ padding:"9px 12px", borderRadius:8, border:`1px solid ${border}`, background:bg, color:text, fontSize:13 }} />77 <input type="number" placeholder="Betrag" value={form.amount}78 onChange={e => setForm(p => ({ ...p, amount: e.target.value }))}79 style={{ padding:"9px 12px", borderRadius:8, border:`1px solid ${border}`, background:bg, color:text, fontSize:13 }} />80 <select value={form.type} onChange={e => setForm(p => ({ ...p, type: e.target.value }))}81 style={{ padding:"9px 12px", borderRadius:8, border:`1px solid ${border}`, background:bg, color:text, fontSize:13 }}>82 <option value="expense">Ausgabe</option>83 <option value="income">Einnahme</option>84 </select>85 </div>86 <div style={{ display:"grid", gridTemplateColumns:"2fr auto", gap:8 }}>87 <select value={form.category} onChange={e => setForm(p => ({ ...p, category: e.target.value }))}88 style={{ padding:"9px 12px", borderRadius:8, border:`1px solid ${border}`, background:bg, color:text, fontSize:13 }}>89 {CATEGORIES.map(c => <option key={c}>{c}</option>)}90 </select>91 <button onClick={addTransaction}92 style={{ padding:"9px 20px", borderRadius:8, background:"#E8692A",93 color:"#fff", border:"none", cursor:"pointer", fontSize:13, fontWeight:500 }}>94 Hinzufügen95 </button>96 </div>97 </div>9899 <div style={{ background:card, border:`1px solid ${border}`, borderRadius:10, overflow:"hidden" }}>100 <p style={{ margin:0, padding:"12px 16px", borderBottom:`1px solid ${border}`, fontSize:13, fontWeight:500 }}>101 Transaktionen ({transactions.length})102 </p>103 {transactions.slice().reverse().map(t => (104 <div key={t.id} style={{ display:"flex", justifyContent:"space-between",105 alignItems:"center", padding:"11px 16px", borderBottom:`1px solid ${border}` }}>106 <div>107 <p style={{ margin:0, fontSize:13, fontWeight:500 }}>{t.description}</p>108 <p style={{ margin:"2px 0 0", fontSize:12, color:"#999" }}>{t.category} · {t.date}</p>109 </div>110 <span style={{ fontSize:14, fontWeight:600, color: t.type==="income" ? "#22C55E" : "#EF4444" }}>111 {t.type==="income" ? "+" : "-"}${t.amount.toFixed(2)}112 </span>113 </div>114 ))}115 </div>116 </div>117 </div>118 );119}
Das ist die vollständige Anwendung. Ein Prompt. Läuft sofort in Claude Artifacts.
Modus 2 – Claude + MCP (lokales Deployment)
MCP (Model Context Protocol) gibt Claude direkten Zugriff auf deine lokale Umgebung. Ein Prompt generiert nicht nur Code – er erstellt Ordner auf deiner Festplatte, installiert Pakete über das Terminal, schreibt Konfigurationsdateien und startet einen lokalen Server.
Die MCP-Konfiguration, die Claude mit deinem Dateisystem verbindet:
1{2 "mcpServers": {3 "filesystem": {4 "command": "npx",5 "args": [6 "-y",7 "@modelcontextprotocol/server-filesystem",8 "/Users/deinname/Projekte"9 ]10 },11 "terminal": {12 "command": "npx",13 "args": ["-y", "@modelcontextprotocol/server-terminal"]14 },15 "sqlite": {16 "command": "npx",17 "args": [18 "-y",19 "@modelcontextprotocol/server-sqlite",20 "--db-path",21 "/Users/deinname/Projekte/app.db"22 ]23 }24 }25}
Mit dieser aktiven Konfiguration genügt ein einziger Prompt:
1Baue und deploye ein lokales CRM-System für eine Autowaschanlage.23Erstelle das Projekt unter ~/Projects/carwash-crm/4Installiere Abhängigkeiten automatisch.5Richte eine SQLite-Datenbank mit Tabellen ein für:6- customers (name, phone, email, vehicle, notes)7- visits (customer_id, date, service, price, status)8- staff (name, role, schedule)910Baue eine Weboberfläche mit:11- Kundensuche und -profilen12- Besuchshistorie pro Kunde13- Umsatz-Dashboard nach Monat14- SMS-Erinnerungssystem (Twilio-Integration, nur Konfiguration)1516Starte den Dev-Server nach Fertigstellung.17Melde die localhost-URL, wenn bereit.
Claude führt dies Ende-zu-Ende über MCP aus – erstellt die Verzeichnisstruktur, installiert Node-Pakete, schreibt das Datenbankschema, baut die UI und startet den Server. Du erhältst eine localhost-URL.
Modus 3 – Claude Projects mit Unternehmensstandards
Lade dein UI-Kit, Design-Tokens, API-Dokumentation und Sicherheitsanforderungen einmal in ein Claude Project hoch. Jedes System, das Claude danach generiert, entspricht automatisch deinem internen Stack.
1[Claude Project-Kontext enthält:]2- design-system.md (Farben, Typografie, Abstände)3- api-standards.md (Authentifizierungsmuster, Fehlercodes)4- security-policy.md (Eingabevalidierungsregeln, CORS-Konfiguration)5- stack.md (React 18, TypeScript, Tailwind, Prisma, PostgreSQL)67Prompt:8"Baue ein Client-Onboarding-Formular mit E-Mail-Verifizierung9und automatischem Notion-Datenbankeintrag bei Übermittlung."1011Ausgabe: produktionsreifer Code, der genau deinem Stack12entspricht – keine Nacharbeit erforderlich.
3. Obsidian als KI-Kommandozentrale
Obsidian ist 2026 keine Notiz-App. Es ist eine persönliche KI-Kommandozentrale, in der deine angesammelte Wissensbasis zur Kontextebene für jedes von dir gebaute System wird.
Der Architekturwechsel: Dein Vault ist kein Speicher mehr. Es ist RAG (Retrieval Augmented Generation) – eine lebende Wissensbasis, die KI-Agenten abfragen, bevor sie eine Aufgabe ausführen.
Der Plugin-Stack, der das ermöglicht:
Smart Connections – indexiert deinen gesamten Vault und sendet relevante Notizen als Kontext bei jedem KI-Aufruf mit.
Obsidian Copilot – verbindet deinen Vault direkt mit der Claude-API. Einmal konfigurieren:
12 "provider": "anthropic",3 "model": "claude-opus-4-8",4 "apiKey": "DEIN_ANTHROPIC_SCHLÜSSEL",5 "systemPrompt": "Du bist ein Systemarchitekt. Du hast Zugriff auf den vollständigen Wissensvault des Benutzers als Kontext. Beim Bauen von Systemen beziehe dich auf seine vorhandenen Notizen, früheren Entscheidungen und etablierten Muster. Ausgabe: funktionierender Code + Obsidian-Dateistruktur.",6 "contextWindow": {7 "includeActiveFile": true,8 "includeLinkedFiles": true,9 "includeRecentFiles": 10,10 "includeFolders": ["Projekte", "Systeme", "Entscheidungen"]11 }12}
Canvas als Systemdesign-Schnittstelle
Ein Prompt erstellt eine interaktive Obsidian-Canvas, in der Claude die vollständige Systemarchitektur als verbundene Blöcke darlegt.
1Prompt in Obsidian Canvas:2"Entwerfe eine Content-Produktionspipeline für meinen Twitter-Account.3Ich veröffentliche 3 Artikel pro Woche und verwalte 5 gesponserte Deals.4Beziehe dich auf meine vorhandenen Content-Kalender-Notizen."56Ausgabe: Canvas mit verbundenen Blöcken für:7→ Content-Ideenfindung (zieht aus deinen Interessennotizen)8→ Entwurf → Überprüfung → Veröffentlichungs-Workflow9→ Sponsor-Tracking mit Fristwarnungen10→ Analyse-Dashboard11→ Automatisierte Cross-Posting-Logik12→ Jeder Block verlinkt auf die relevante Obsidian-Datei
Die Canvas-Ausgabe, die Claude als strukturierte Datei generiert:
1{2 "nodes": [3 {4 "id": "ideation",5 "type": "file",6 "file": "Systeme/ContentPipeline/Ideenfindung.md",7 "x": 0, "y": 0, "width": 300, "height": 200,8 "color": "1"9 },10 {11 "id": "draft",12 "type": "file",13 "file": "Systeme/ContentPipeline/Entwurf.md",14 "x": 400, "y": 0, "width": 300, "height": 200,15 "color": "3"16 },17 {18 "id": "sponsors",19 "type": "file",20 "file": "Systeme/ContentPipeline/SponsorTracker.md",21 "x": 0, "y": 300, "width": 300, "height": 200,22 "color": "5"23 },24 {25 "id": "analytics",26 "type": "file",27 "file": "Systeme/ContentPipeline/Analyse.md",28 "x": 400, "y": 300, "width": 300, "height": 200,29 "color": "6"30 }31 ],32 "edges": [33 {34 "id": "e1",35 "fromNode": "ideation", "fromSide": "right",36 "toNode": "draft", "toSide": "left",37 "label": "genehmigte Konzepte"38 },39 {40 "id": "e2",41 "fromNode": "sponsors", "fromSide": "right",42 "toNode": "draft", "toSide": "bottom",43 "label": "Briefing-Integration"44 }45 ]46}
4. Lokale LLMs für vollständige Privatsphäre
Für sensible Daten – Kundensysteme, Finanztools, interne Werkzeuge – leitest du über ein lokales Modell statt über eine Cloud-API. Keine Daten verlassen deine Maschine.
1# Ollama installieren2curl -fsSL https://ollama.com/install.sh | sh34# Ein codefähiges Modell ziehen5ollama pull llama3.2:latest6# oder für stärkere Codegenerierung:7ollama pull qwen2.5-coder:32b89# Lokalen Server starten10ollama serve11# Läuft unter localhost:11434
Konfiguriere Obsidian Copilot für den lokalen Endpunkt:
1{2 "provider": "ollama",3 "model": "qwen2.5-coder:32b",4 "baseUrl": "http://localhost:11434",5 "systemPrompt": "Du bist ein lokaler Systembauer mit Zugriff auf das Dateisystem des Benutzers via MCP. Baue vollständige funktionierende Systeme. Sende niemals Daten an externe APIs ohne explizite Anweisung."6}
Die lokale Modell + MCP-Brücke:
1import requests2import json3from pathlib import Path4from watchdog.observers import Observer5from watchdog.events import FileSystemEventHandler67OBSIDIAN_INBOX = Path.home() / "Obsidian" / "AI-Inbox"8PROJECTS_DIR = Path.home() / "Projekte"9OLLAMA_URL = "http://localhost:11434/api/generate"1011class InboxWatcher(FileSystemEventHandler):12 """13 Überwacht den Obsidian AI-Inbox-Ordner.14 Wenn eine neue .md-Datei erscheint, wird sie als Build-Prompt behandelt.15 An lokales LLM übergeben -> über MCP ausführen -> Rückmeldung geben.16 """1718 def on_created(self, event):19 if not event.src_path.endswith(".md"):20 return2122 prompt_file = Path(event.src_path)23 prompt = prompt_file.read_text()2425 print(f"[Inbox] Neuer Prompt: {prompt_file.name}")26 self.execute_prompt(prompt, prompt_file.stem)2728 def execute_prompt(self, prompt: str, project_name: str):29 response = requests.post(OLLAMA_URL, json={30 "model": "qwen2.5-coder:32b",31 "prompt": f"""Du bist ein Systembauer.32 Baue dieses System: {prompt}3334 Gib einen JSON-Plan aus mit:35 {{36 "project_dir": "relativer Pfad",37 "files": [38 {{"path": "relativer Pfad", "content": "Dateiinhalt"}}39 ],40 "commands": ["npm install", "usw"],41 "summary": "was gebaut wurde"42 }}""",43 "stream": False44 })4546 plan = json.loads(response.json()["response"])47 project_dir = PROJECTS_DIR / plan["project_dir"]48 project_dir.mkdir(parents=True, exist_ok=True)4950 for file_spec in plan["files"]:51 file_path = project_dir / file_spec["path"]52 file_path.parent.mkdir(parents=True, exist_ok=True)53 file_path.write_text(file_spec["content"])54 print(f"[Build] Erstellt: {file_path}")5556 result_file = OBSIDIAN_INBOX / f"{project_name}-ergebnis.md"57 result_file.write_text(58 f"# Build abgeschlossen: {project_name}\n\n"59 f"**Speicherort:** {project_dir}\n\n"60 f"**Zusammenfassung:** {plan['summary']}\n\n"61 f"**Erstellte Dateien:** {len(plan['files'])}\n"62 )63 print(f"[Fertig] Ergebnis in Obsidian geschrieben")6465if __name__ == "__main__":66 OBSIDIAN_INBOX.mkdir(exist_ok=True)67 observer = Observer()68 observer.schedule(InboxWatcher(), str(OBSIDIAN_INBOX), recursive=False)69 observer.start()70 print(f"[Überwachung] {OBSIDIAN_INBOX}")7172 try:73 while True:74 import time; time.sleep(1)75 except KeyboardInterrupt:76 observer.stop()77 observer.join()
Lege eine .md-Datei mit einem Build-Prompt in deinen Obsidian-AI-Inbox-Ordner. Die Brücke nimmt sie auf, leitet sie durch das lokale Modell, baut das System in deinem Projektordner und schreibt eine Fertigstellungsnotiz zurück in Obsidian.
5. Der vollständige Workflow – von der Idee zum deployten System
1SCHRITT 1 – Eingabe2In Obsidian, in deinem KI-Panel, schreibe:3"Persönliches Finanzsystem mit Krypto-Integration4und monatlicher Budgetverfolgung."5Drücke Generieren.67SCHRITT 2 – Kontextzusammenstellung8Smart Connections Plugin scannt deinen Vault.9Findet deine Finanznotizen der letzten 3 Monate.10Sendet sie als Kontext an die Claude-API.1112SCHRITT 3 – Architektur13Claude (Opus 4.8) entwirft das System:14- Datenbankschema15- UI-Komponenten16- API-Integrationen17- Dateistruktur1819SCHRITT 4 – Bauen20Claude (Sonnet 5) implementiert via MCP:21- Erstellt ~/Projects/finance-tracker/22- Installiert Abhängigkeiten23- Schreibt alle Dateien24- Startet Dev-Server unter localhost:30002526SCHRITT 5 – Ergebnis27Obsidian erstellt Ordner: Finanzsystem/28Enthält: verlinkte Dashboards, Konfigurationsnotizen,29und einen direkten Link zur laufenden Anwendung.
Gesamtzeit von Schritt 1 bis zur laufenden Anwendung: 4-12 Minuten.
Die Bedeutung dieser Verschiebung
Dies ist kein schnellerer Weg, Code zu schreiben.
Es ist eine andere Beziehung zwischen Idee und Umsetzung.
Die Einschränkung dessen, was du bauen kannst, war früher technisches Können und Zeit. Ein Nicht-Entwickler konnte kein CRM bauen. Ein einzelner Entwickler konnte nicht fünf Systeme gleichzeitig bauen. Ein Team konnte nicht in Stunden statt Wochen ausliefern.
Alle drei dieser Einschränkungen sind weg.
Die neue Einschränkung ist die Klarheit des Denkens – die Fähigkeit, präzise zu beschreiben, was du brauchst, zu verstehen, wie eine gute Ausgabe aussieht, und daran zu iterieren. Das ist eine Denkfähigkeit, keine technische.
Generative App-Architektur macht Entwickler nicht überflüssig. Sie macht die Fähigkeit, in Systemen zu denken – darüber nachzudenken, was du brauchst, bevor du es baust – dramatisch wertvoller als die Fähigkeit, den Code zu schreiben, der es implementiert.
Der Stack ist da. Die Modelle sind leistungsfähig. Die einzige verbleibende Variable ist, ob du damit baust oder darüber liest, wie andere es tun.
Dieser Artikel beschreibt Fähigkeiten, die in Claude, Obsidian und MCP ab Juli 2026 verfügbar sind. Bestimmte Plugin-Versionen und API-Konfigurationen können sich ändern. Überprüfe vor der Implementierung immer die aktuelle Dokumentation.
Danke fürs Lesen.





