[{"data":1,"prerenderedAt":6192},["ShallowReactive",2],{"blog-posts":3},[4,339,570,757,925,1430,1851,2164,2421,2585,2798,3224,3398,3677,4075,5367],{"id":5,"title":6,"author":7,"body":8,"category":322,"date":323,"description":324,"extension":325,"featured":326,"image":327,"meta":328,"navigation":326,"path":329,"seo":330,"stem":331,"tags":332,"__hash__":338},"blog/blog/finance/2026-03-05-volatility-adjusted-sizing.md","Warum volatilitätsbasiertes Position Sizing wichtiger ist, als du denkst","Wilson",{"type":9,"value":10,"toc":309},"minimark",[11,15,19,22,25,30,33,39,42,45,48,51,55,61,80,85,102,105,109,112,118,124,130,136,140,143,149,155,161,164,178,181,184,188,191,202,205,208,212,215,221,226,237,240,246,250,253,256,259,262,265,268,272,275,278,284,290,293,296,300,303,306],[12,13,6],"h1",{"id":14},"warum-volatilitätsbasiertes-position-sizing-wichtiger-ist-als-du-denkst",[16,17,18],"p",{},"Die meisten Trader scheitern nicht, weil ihre Strategie schlecht ist. Sie scheitern, weil ihr Position Sizing schlecht ist.",[16,20,21],{},"Sie handeln dieselbe Größe in einem tobenden Markt wie in einem ruhigen. Sie lassen die Volatilität ihr Risiko bestimmen. Sie sprengen ihr Konto nicht durch schlechte Signale, sondern durch schlechte Positionsgrößen.",[16,23,24],{},"Die harte Wahrheit: Dein Edge bedeutet nichts, wenn dein Sizing dein Konto zerstört, bevor es sich entfalten kann.",[26,27,29],"h2",{"id":28},"das-problem-jeden-trade-gleich-behandeln","Das Problem: Jeden Trade gleich behandeln",[16,31,32],{},"Die meisten Trader gehen Position Sizing so an wie ihren Einstieg – mit einer fixen Idee, die sich nie ändert.",[16,34,35],{},[36,37,38],"em",{},"„Ich trade heute 2 Kontrakte.\"",[16,40,41],{},"Wenn der Markt ruhig ist, fühlt sich das sicher an. Wenn die Volatilität sich verdoppelt, ist dieselbe Position plötzlich doppelt so gefährlich.",[16,43,44],{},"Dieser eine Fehler erodiert still und leise Konten – jeden einzelnen Tag.",[16,46,47],{},"Denn bei statischem Sizing bestraft dich jedes Volatilitätsregime unterschiedlich.",[16,49,50],{},"Quants denken anders. Sie handeln keine fixe Größe. Sie handeln ein fixes Risiko. Die Position passt sich dem Markt an – nicht umgekehrt.",[26,52,54],{"id":53},"statisches-vs-dynamisches-sizing","Statisches vs. dynamisches Sizing",[16,56,57],{},[58,59,60],"strong",{},"Der statische Trader:",[62,63,64,68,71,74,77],"ul",{},[65,66,67],"li",{},"Handelt dieselbe Größe unabhängig von den Bedingungen",[65,69,70],{},"Geht in volatilen Phasen enormes Risiko ein",[65,72,73],{},"Verschenkt Geld in ruhigen Phasen",[65,75,76],{},"Wird bei Regimewechseln zerstört",[65,78,79],{},"Backtests, die irreführen – Live-Ergebnisse, die schockieren",[16,81,82],{},[58,83,84],{},"Der dynamische Trader:",[62,86,87,90,93,96,99],{},[65,88,89],{},"Zielt auf einen fixen prozentualen Risiko pro Trade",[65,91,92],{},"Reduziert automatisch die Größe, wenn Volatilität steigt",[65,94,95],{},"Erhöht natürlich die Größe, wenn Märkte ruhig sind",[65,97,98],{},"Überlebt Regimewechsel, ohne das Konto zu sprengen",[65,100,101],{},"Backtests, die die Realität abbilden",[16,103,104],{},"Der Unterschied ist keine bessere Strategie. Es ist ein besseres Fundament.",[26,106,108],{"id":107},"die-vier-prinzipien","Die vier Prinzipien",[16,110,111],{},"So denken systematische Trader tatsächlich über Position Sizing:",[16,113,114,117],{},[58,115,116],{},"1. Volatilität ist die Variable. Risiko ist die Konstante.","\nDie ATR zeigt dir, wie viel sich ein Markt tatsächlich bewegt. Deine Aufgabe ist es, dein Dollar-Risiko stabil zu halten und die Positionsgröße als Variable anzupassen.",[16,119,120,123],{},[58,121,122],{},"2. Jeder Trade hat eine volatilitätsbasierte Größe – keine Standardgröße.","\nEine 14-Tage-ATR von 45 $ verlangt eine völlig andere Position als eine ATR von 8 $ – selbst beim selben Instrument, derselben Strategie, demselben Einstiegssignal.",[16,125,126,129],{},[58,127,128],{},"3. Statisches Sizing verzerrt deinen Backtest.","\nEin Backtest mit 1 Kontrakt pro Trade testet nicht konsistentes Risiko. Er testet wildly unterschiedliche Risikoniveaus, die zu einer einzigen irreführenden Zahl gemittelt werden. Der Backtest sieht glatt aus. Live-Trading wird es nicht sein.",[16,131,132,135],{},[58,133,134],{},"4. Drawdowns entstehen nicht nur durch Verluste – sondern durch Sizing.","\nDieselbe Verlustserie bei 0,5 % Risiko pro Trade und bei 4,5 % Risiko pro Trade sind nicht derselbe Drawdown. Der eine ist überlebbar. Der andere nicht.",[26,137,139],{"id":138},"ein-einfaches-beispiel-das-alles-verändert","Ein einfaches Beispiel, das alles verändert",[16,141,142],{},"Selbe Strategie. Selbes Instrument. Zwei Volatilitätsregime.",[16,144,145,148],{},[58,146,147],{},"März 2020"," — ATR: 45 $. Statische 1-Kontrakt-Position = 4,5 % Kontorisiko pro Trade.",[16,150,151,154],{},[58,152,153],{},"Juli 2021"," — ATR: 8 $. Statische 1-Kontrakt-Position = 0,8 % Kontorisiko pro Trade.",[16,156,157,160],{},[58,158,159],{},"5,6× Unterschied"," im tatsächlichen Risiko. Null Unterschied in der Positionsgröße.",[16,162,163],{},"Jetzt mit dynamischem Sizing bei einem Zielrisiko von 50 $ auf einem 10.000-$-Konto:",[62,165,166,172],{},[65,167,168,169],{},"März 2020: 50 $ ÷ 45 $ = ",[58,170,171],{},"1,1 Kontrakte",[65,173,174,175],{},"Juli 2021: 50 $ ÷ 8 $ = ",[58,176,177],{},"6,25 Kontrakte",[16,179,180],{},"Selbes Dollar-Risiko. Jedes Mal. Unabhängig vom Regime.",[16,182,183],{},"Das ist nicht kompliziert. Das ist der ganze Punkt.",[26,185,187],{"id":186},"wo-dynamisches-sizing-auf-echte-strategie-trifft","Wo dynamisches Sizing auf echte Strategie trifft",[16,189,190],{},"Die Formel besteht aus vier Zeilen Code:",[192,193,198],"pre",{"className":194,"code":196,"language":197},[195],"language-text","timeframe (daily)\natr = averagetruerange[14]\ncontractsToTrade = (riskPercent * 0.01) * portfolioSize / atr\ntimeframe (default)\n","text",[199,200,196],"code",{"__ignoreMap":201},"",[16,203,204],{},"Sie prognostiziert keine Volatilität. Sie reagiert darauf, dimensioniert korrekt und wiederholt.",[16,206,207],{},"Keine Emotionen. Kein Raten. Nur konsistentes Risiko über Hunderte von Trades, bis sich dein Edge statistisch manifestiert.",[26,209,211],{"id":210},"drei-gewohnheiten-für-die-umsetzung","Drei Gewohnheiten für die Umsetzung",[16,213,214],{},"Wenn du wie ein Quant statt wie ein Spieler dimensionieren willst, übernimm diese drei Gewohnheiten:",[16,216,217,220],{},[58,218,219],{},"1. Orientiere dich an der Daily ATR, nicht am Intraday-Rauschen.","\nIntraday-ATR schwankt ständig. Daily ATR spiegelt das wahre Marktregime wider. Verwende Daily ATR auch bei Intraday-Strategien. Gleichmäßiges Sizing schlägt reaktives Sizing jedes Mal.",[16,222,223],{},[58,224,225],{},"2. Definiere deinen Risikoprozentsatz, bevor du den Chart anschaust.",[62,227,228,231,234],{},[65,229,230],{},"Konservativ: 0,25–0,5 %",[65,232,233],{},"Moderat: 0,5–1 %",[65,235,236],{},"Aggressiv: 1–2 %",[16,238,239],{},"Wähle einen Wert. Bleib dabei. Berechne die Größe von dort aus – und niemals nach Bauchgefühl.",[16,241,242,245],{},[58,243,244],{},"3. Berechne vor jedem Trade neu.","\nPosition Sizing ist keine Set-and-Forget-Einstellung. Volatilität ändert sich täglich. Deine Größe sollte es auch. Die Formel braucht zehn Sekunden. Die Disziplin, sie jedes Mal anzuwenden, trennt konsistente Trader vom Rest.",[26,247,249],{"id":248},"warum-das-wichtiger-ist-als-dein-einstiegssignal","Warum das wichtiger ist als dein Einstiegssignal",[16,251,252],{},"Die unbequeme Realität:",[16,254,255],{},"Die meisten Trader haben Strategien, die funktionieren würden – wenn sie sich nicht vorher durch falsches Sizing aus dem Spiel nehmen würden.",[16,257,258],{},"Sie testen mit statischem Sizing, sehen glatte Renditen, gehen live und treffen auf eine volatile Phase mit derselben fixen Position. Der Drawdown sieht völlig anders aus als im Backtest. Panik setzt ein. Sie verwerfen die Strategie.",[16,260,261],{},"Das System war nicht kaputt. Das Sizing war es.",[16,263,264],{},"Währenddessen trifft der systematische Trader auf dieselbe Volatilität, beobachtet, wie seine Positionsgröße automatisch schrumpft, nimmt dasselbe prozentuale Risiko wie immer und macht weiter.",[16,266,267],{},"Warum? Weil die Lösung von Anfang an in die Strategie eingebaut war. Nicht als Nachgedanke. Als Fundament.",[26,269,271],{"id":270},"die-brutale-wahrheit-über-konsistenz","Die brutale Wahrheit über Konsistenz",[16,273,274],{},"Du wirst niemals eine Strategie finden, die unabhängig vom Sizing funktioniert.",[16,276,277],{},"Jedes Einstiegssignal bringt Varianz mit sich. Jeder Backtest hat Volatilitätsregime eingebaut. Jede Renditekennzahl setzt ein gewisses Maß an konsistentem Risiko voraus.",[16,279,280,281],{},"Die Frage ist nicht: ",[36,282,283],{},"„Wie finde ich ein besseres Signal?\"",[16,285,286,287],{},"Die Frage ist: ",[36,288,289],{},"„Wie stelle ich sicher, dass mein Sizing das Signal nicht zerstört, das ich bereits habe?\"",[16,291,292],{},"Das ist volatilitätsbasiertes Denken.",[16,294,295],{},"Und sobald du es in deinen Prozess einbaust, hört Trading auf, eine Serie zufälliger Ergebnisse zu sein – und wird zu einem System, das Risiko über jede Marktbedingung hinweg managt.",[26,297,299],{"id":298},"von-zufälligem-risiko-zu-kontrolliertem-risiko","Von zufälligem Risiko zu kontrolliertem Risiko",[16,301,302],{},"Die besten Trader hoffen nicht auf niedrige Volatilität. Sie bauen Systeme, die sich an jede Volatilität anpassen.",[16,304,305],{},"Sie handeln keine fixe Größe. Sie zielen auf ein fixes Risiko und lassen die Mathematik die Größe bestimmen.",[16,307,308],{},"Volatilitätsbasiertes Sizing verwandelt einen fragilen Backtest in eine robuste Live-Strategie. Es verwandelt emotionales Trading in Prozess. Und es trennt die Trader, die Regimewechsel überstehen, von denen, die davon ausgelöscht werden.",{"title":201,"searchDepth":310,"depth":311,"links":312},2,3,[313,314,315,316,317,318,319,320,321],{"id":28,"depth":310,"text":29},{"id":53,"depth":310,"text":54},{"id":107,"depth":310,"text":108},{"id":138,"depth":310,"text":139},{"id":186,"depth":310,"text":187},{"id":210,"depth":310,"text":211},{"id":248,"depth":310,"text":249},{"id":270,"depth":310,"text":271},{"id":298,"depth":310,"text":299},"finance","2026-03-05T00:00:00.000Z","Die meisten Trader scheitern nicht an ihrer Strategie – sie scheitern am Position Sizing. Wer statisch handelt, lässt die Volatilität über sein Risiko entscheiden.","md",true,"images/volatility-adjusted-sizing.svg",{},"/blog/finance/2026-03-05-volatility-adjusted-sizing",{"title":6,"description":324},"blog/finance/2026-03-05-volatility-adjusted-sizing",[333,334,335,336,337],"trading","position-sizing","volatility","risk-management","quantitative-trading","ONchhXGlcKzh2_8e30t5qBPkO6zKS8QmUaRoqGVO3ww",{"id":340,"title":341,"author":7,"body":342,"category":554,"date":555,"description":556,"extension":325,"featured":326,"image":557,"meta":558,"navigation":326,"path":559,"seo":560,"stem":561,"tags":562,"__hash__":569},"blog/blog/ai/2026-03-04-ai-weekly-recap-w10.md","Claude Code, agents.md Mythen und der KI-Tsunami: Was du jetzt wissen musst",{"type":9,"value":343,"toc":543},[344,347,358,362,373,376,380,403,406,411,425,429,436,439,443,450,461,465,471,474,478,485,488,502,505,509,516,519,523,530,533,537,540],[12,345,341],{"id":346},"claude-code-agentsmd-mythen-und-der-ki-tsunami-was-du-jetzt-wissen-musst",[16,348,349,350,353,354,357],{},"Die KI-Welt dreht sich schneller denn je. Während viele noch versuchen, ChatGPT im Alltag zu integrieren, setzen Tools wie ",[58,351,352],{},"Claude Code"," und ",[58,355,356],{},"Perplexity Computer"," bereits neue Maßstäbe in Sachen Autonomie und Produktivität. Hier sind die spannendsten Entwicklungen der Woche.",[26,359,361],{"id":360},"_1-claude-code-totale-kontrolle-sogar-von-unterwegs","1. Claude Code: Totale Kontrolle – sogar von unterwegs",[16,363,364,365,368,369,372],{},"Anthropic setzt die Konkurrenz massiv unter Druck. Mit der neuen ",[58,366,367],{},"Remote Control"," Funktion lässt sich Claude Code jetzt direkt via Telegram, WhatsApp oder Slack steuern. Zudem ermöglichen ",[58,370,371],{},"Scheduled Tasks"," in Claude Cowork das Automatisieren von Daily Briefings oder wöchentlichen Reports, ohne dass der Nutzer manuell eingreifen muss.",[16,374,375],{},"Der neue Plugin-Marktplatz rundet das Paket ab: Entwickler können eigene Erweiterungen teilen und nutzen – ein Ökosystem, das an VS Code Extensions erinnert, nur für KI-gestütztes Coding.",[26,377,379],{"id":378},"_2-die-überraschung-warum-du-deine-agentsmd-vielleicht-löschen-solltest","2. Die Überraschung: Warum du deine agents.md vielleicht löschen solltest",[16,381,382,383,386,387,390,391,394,395,398,399,402],{},"Ein Highlight der Woche ist die Studie von Dr. Mark Müller (ETH Zürich). Seine Untersuchung ",[58,384,385],{},"„Evaluating Agents MD\""," zeigt: Kontextdateien wie ",[199,388,389],{},"claude.md"," oder ",[199,392,393],{},"agents.md"," können die Erfolgsrate von KI-Agenten um ",[58,396,397],{},"3 % senken"," und die Kosten um ",[58,400,401],{},"20 % erhöhen",", wenn sie unnötige oder KI-generierte Informationen enthalten.",[16,404,405],{},"Die Kernaussage: Nicht die Existenz dieser Dateien ist das Problem, sondern ihr Inhalt. Automatisch generierte, aufgeblähte Kontextdateien schaden mehr als sie nutzen.",[16,407,408],{},[58,409,410],{},"Der Experten-Rat:",[62,412,413,416,419,422],{},[65,414,415],{},"Halte diese Dateien kurz und prägnant",[65,417,418],{},"Schreibe sie selbst, nicht mit KI",[65,420,421],{},"Kuratiere streng – jede Zeile muss einen klaren Zweck haben",[65,423,424],{},"Lösche regelmäßig veraltete Informationen",[26,426,428],{"id":427},"_3-nvidia-und-physical-ai-die-nächste-welle","3. Nvidia und Physical AI: Die nächste Welle",[16,430,431,432,435],{},"Während sich die Branche auf generative KI konzentriert, positioniert sich Nvidia für die nächste Revolution: ",[58,433,434],{},"Physical AI",". Humanoide Roboter, die mit KI-gesteuerten Modellen arbeiten, sollen die nächste große Welle nach LLMs werden.",[16,437,438],{},"Die Investitionen in diesen Bereich wachsen rasant. Nvidia liefert nicht nur die GPUs für Training und Inferenz, sondern baut ein komplettes Ökosystem für Robotik-KI auf.",[26,440,442],{"id":441},"_4-highspeed-ki-nano-banana-2-und-mercury-2","4. Highspeed-KI: Nano Banana 2 und Mercury 2",[16,444,445,446,449],{},"Google hat mit ",[58,447,448],{},"Nano Banana 2"," das aktuell beste Bildgenerierungsmodell der Welt veröffentlicht, das auf Gemini 3.1 Flash basiert und Platz 1 in der Image Arena belegt.",[16,451,452,453,456,457,460],{},"Parallel dazu zeigt ",[58,454,455],{},"Mercury 2",", dass LLMs nicht mehr Wort für Wort generieren müssen. Durch einen ",[58,458,459],{},"Diffusion-Ansatz"," ist das Modell bis zu fünfmal schneller als klassische autoregressive Architekturen. Statt Token für Token zu erzeugen, generiert Mercury 2 ganze Textblöcke gleichzeitig – ein fundamentaler Architekturwechsel, der die Inferenzkosten drastisch senken könnte.",[26,462,464],{"id":463},"_5-perplexity-computer-ki-als-zentraler-zugriffslayer","5. Perplexity Computer: KI als zentraler Zugriffslayer",[16,466,467,468,470],{},"Perplexity geht einen Schritt weiter als klassische Chatbots. Mit ",[58,469,356],{}," wird die KI zum „Entic Layer\" – einer zentralen Schicht, die autonom Aufgaben über verschiedene Modelle und Dienste hinweg löst.",[16,472,473],{},"Die Vision: Statt zwischen verschiedenen KI-Tools zu wechseln, gibt es einen einzigen Zugriffspunkt, der die beste Kombination aus Modellen für jede Aufgabe orchestriert. Das ist der logische nächste Schritt nach der Einzelmodell-Ära.",[26,475,477],{"id":476},"_6-corporate-llms-die-business-chance","6. Corporate LLMs: Die Business-Chance",[16,479,480,481,484],{},"Ein kritischer Punkt bleibt der Datenschutz. Wer sensible Firmendaten nicht in die US-Cloud senden möchte, braucht ",[58,482,483],{},"Enterprise-Lösungen",", die DSGVO-konform und teilweise on-premise arbeiten.",[16,486,487],{},"Hier entsteht ein riesiger Markt für Entwickler und Agenturen:",[62,489,490,493,496,499],{},[65,491,492],{},"Lokale LLM-Deployments mit Open-Source-Modellen",[65,494,495],{},"DSGVO-konforme RAG-Pipelines",[65,497,498],{},"Firmenspezifische Feinabstimmung",[65,500,501],{},"Hybride Architekturen (lokal + Cloud-Fallback)",[16,503,504],{},"Wer diesen Markt jetzt bedient, hat einen massiven First-Mover-Vorteil.",[26,506,508],{"id":507},"_7-openai-gpt-53-am-horizont","7. OpenAI: GPT 5.3 am Horizont",[16,510,511,512,515],{},"Erste Tests zu ",[58,513,514],{},"GPT 5.3"," (intern Vortex/Zenit genannt) deuten auf signifikante Verbesserungen bei Reasoning und Code-Generierung hin. Dazu kommen Updates für die Realtime API, die Voice-Anwendungen in Echtzeit ermöglicht.",[16,517,518],{},"Der Wettlauf zwischen Anthropic, OpenAI und Google wird immer enger – und die Zyklen immer kürzer.",[26,520,522],{"id":521},"_8-der-ki-tsunami-am-arbeitsmarkt","8. Der KI-Tsunami am Arbeitsmarkt",[16,524,525,526,529],{},"Die gesellschaftlichen Auswirkungen werden immer deutlicher. Jack Dorsey (Block) meldete massive Entlassungen, die direkt auf die Integration von KI-Tools zurückgeführt werden – ein Schritt, den der Aktienmarkt mit einem ",[58,527,528],{},"Kurssprung von 20 %"," belohnte.",[16,531,532],{},"Das Signal ist klar: Unternehmen, die KI konsequent einsetzen, brauchen weniger Mitarbeiter für dieselbe Leistung. Die Debatte über das Erreichen menschlicher Intelligenz ist nicht mehr akademisch – sie hat reale wirtschaftliche Konsequenzen.",[26,534,536],{"id":535},"fazit","Fazit",[16,538,539],{},"Es reicht nicht mehr aus, KI nur oberflächlich zu nutzen. Ob durch die Optimierung von Coding-Workflows, den Aufbau eigener Corporate LLMs oder das Verständnis neuer Architekturen wie Diffusion-basierte Textgenerierung – wer jetzt die Tiefe der neuen Tools versteht, sichert sich einen echten Wettbewerbsvorteil.",[16,541,542],{},"Die Geschwindigkeit der Entwicklung lässt keinen Raum für Abwarten. Die Tools sind da, die Infrastruktur steht, und die ersten Gewinner und Verlierer zeichnen sich bereits ab.",{"title":201,"searchDepth":310,"depth":311,"links":544},[545,546,547,548,549,550,551,552,553],{"id":360,"depth":310,"text":361},{"id":378,"depth":310,"text":379},{"id":427,"depth":310,"text":428},{"id":441,"depth":310,"text":442},{"id":463,"depth":310,"text":464},{"id":476,"depth":310,"text":477},{"id":507,"depth":310,"text":508},{"id":521,"depth":310,"text":522},{"id":535,"depth":310,"text":536},"ai","2026-03-04T00:00:00.000Z","Die wichtigsten KI-News der Woche – Claude Code Remote Control, die agents.md-Studie der ETH Zürich, Nvidias Physical AI, Mercury 2, Perplexity Computer und der Arbeitsmarkt-Tsunami.","images/ai-weekly-recap-w10.svg",{},"/blog/ai/2026-03-04-ai-weekly-recap-w10",{"title":341,"description":556},"blog/ai/2026-03-04-ai-weekly-recap-w10",[563,564,565,566,567,568],"ai-news","claude-code","nvidia","openai","perplexity","enterprise-ai","sdTo28xcliloIbMNd0SqRb6FakvdXw9LG67fXjKxj2I",{"id":571,"title":572,"author":7,"body":573,"category":554,"date":555,"description":745,"extension":325,"featured":326,"image":746,"meta":747,"navigation":326,"path":748,"seo":749,"stem":750,"tags":751,"__hash__":756},"blog/blog/ai/2026-03-04-claude-code-skill-creator-evals.md","Claude Code Skill Creator: Schluss mit Vibe-Testing – so baust du datengetriebene Skills",{"type":9,"value":574,"toc":735},[575,578,585,588,599,603,606,611,618,622,625,629,636,651,654,674,677,681,687,694,697,701,704,724,727,729,732],[12,576,572],{"id":577},"claude-code-skill-creator-schluss-mit-vibe-testing-so-baust-du-datengetriebene-skills",[16,579,580,581,584],{},"Bisher lief die Entwicklung von Skills für Claude Code und Claude Cowork bei den meisten nach dem gleichen Muster: einen Prozess einmal durchspielen, Claude bitten, daraus einen Skill zu machen, und hoffen, dass er funktioniert. ",[58,582,583],{},"Vibe-based Skill Development"," – kein Feedback, keine Metriken, keine Sicherheit.",[16,586,587],{},"Das hat gleich mehrere Probleme. Neue Modell-Updates können einen Skill überflüssig machen, wenn das Basismodell die Fähigkeit plötzlich nativ beherrscht. Und ohne systematische Tests lässt sich nicht nachvollziehen, ob Änderungen am Skill die Performance tatsächlich verbessern oder verschlechtern.",[16,589,590,591,594,595,598],{},"Anthropic hat jetzt den ",[58,592,593],{},"Skill Creator"," (erreichbar über ",[199,596,597],{},"/plugins",") grundlegend überarbeitet – und damit einen echten Framework-Wechsel eingeleitet.",[26,600,602],{"id":601},"zwei-kategorien-von-skills","Zwei Kategorien von Skills",[16,604,605],{},"Der neue Skill Creator unterscheidet klar zwischen zwei Typen:",[607,608,610],"h3",{"id":609},"capability-uplift","Capability Uplift",[16,612,613,614,617],{},"Skills, die eine aktuelle Schwäche des Modells ausgleichen – etwa bei Swift Concurrency, dem Ausfüllen von PDF-Formularen oder der Erstellung von PowerPoint-Präsentationen. Diese Skills haben implizit ein ",[58,615,616],{},"Ablaufdatum",": Sobald das Basismodell die Fähigkeit eigenständig beherrscht, werden sie überflüssig.",[607,619,621],{"id":620},"workflow-und-präferenz-encoding","Workflow- und Präferenz-Encoding",[16,623,624],{},"Skills, die spezifische interne Prozesse automatisieren – Compliance-Checks, persönliche Workflows oder wiederkehrende Aufgaben wie das Generieren wöchentlicher Reports aus Jira oder das Reviewen von NDAs. Diese Skills bleiben relevant, weil sie unternehmensspezifisches Wissen codieren, das kein Basismodell kennt.",[26,626,628],{"id":627},"automatisierte-evals-und-ab-testing","Automatisierte Evals und A/B-Testing",[16,630,631,632,635],{},"Das Herzstück des Updates: Der Skill Creator kann jetzt ",[58,633,634],{},"Testfälle erstellen, Benchmarks ausführen und A/B-Tests durchführen",".",[16,637,638,639,642,643,646,647,650],{},"In der Praxis sieht das so aus: Du erstellst einen Skill – zum Beispiel für SEO-Audits. Das System startet daraufhin parallele Sub-Agenten: eine Gruppe ",[58,640,641],{},"mit"," dem Skill und eine ",[58,644,645],{},"ohne",". Ein sogenannter ",[58,648,649],{},"Comparator"," bewertet blind, welche Ausgabe besser ist.",[16,652,653],{},"Das Ergebnis sind konkrete Metriken:",[62,655,656,662,668],{},[65,657,658,661],{},[58,659,660],{},"Erfolgsrate"," – wie oft liefert der Skill ein besseres Ergebnis als das Basismodell?",[65,663,664,667],{},[58,665,666],{},"Completion Time"," – wie wirkt sich der Skill auf die Bearbeitungszeit aus?",[65,669,670,673],{},[58,671,672],{},"Token Usage"," – wie viel zusätzlichen Kontext verbraucht der Skill?",[16,675,676],{},"Statt Bauchgefühl gibt es jetzt harte Zahlen, die zeigen, ob ein Skill tatsächlich einen Uplift liefert.",[26,678,680],{"id":679},"trigger-optimierung","Trigger-Optimierung",[16,682,683,684,635],{},"Ein weiteres Problem bisher: Skills wurden zu oft oder zu selten ausgelöst. Der neue Skill Creator löst das mit einem ",[58,685,686],{},"automatischen Optimierungs-Loop",[16,688,689,690,693],{},"Das System nutzt ein Training- und ein Test-Set, um die Skill-Beschreibung iterativ zu verfeinern – bis zu ",[58,691,692],{},"fünf Optimierungszyklen",". Ziel ist, dass der Skill zuverlässig auslöst, wenn er gebraucht wird, und sich zurückhält, wenn nicht.",[16,695,696],{},"Das klingt trivial, ist aber entscheidend: Ein Skill, der bei jedem zweiten Prompt fälschlicherweise greift, stört den Workflow mehr als er hilft.",[26,698,700],{"id":699},"lifecycle-management-skills-sind-keine-fire-and-forget-lösung","Lifecycle Management: Skills sind keine Fire-and-Forget-Lösung",[16,702,703],{},"Ein oft übersehener Punkt: Skills müssen gepflegt werden. Nach jedem größeren Modell-Update – etwa von Opus 4 auf Opus 5 – sollte man prüfen:",[62,705,706,712,718],{},[65,707,708,711],{},[58,709,710],{},"Behalten",": Der Skill liefert weiterhin messbaren Uplift.",[65,713,714,717],{},[58,715,716],{},"Aktualisieren",": Das Modell ist besser geworden, aber der Skill muss angepasst werden.",[65,719,720,723],{},[58,721,722],{},"Löschen",": Das Basismodell beherrscht die Fähigkeit jetzt nativ – der Skill ist überflüssig.",[16,725,726],{},"Wer das nicht tut, riskiert, dass veraltete Skills die Performance verschlechtern, anstatt sie zu verbessern.",[26,728,536],{"id":535},[16,730,731],{},"Der neue Skill Creator verwandelt Skill-Entwicklung von einer kreativen Übung in einen Engineering-Prozess. Automatisierte Evals, A/B-Tests und Trigger-Optimierung geben Entwicklern erstmals die Werkzeuge, um datengetrieben zu arbeiten.",[16,733,734],{},"Ja, das bedeutet mehr Aufwand pro Skill. Aber ein Skill, der nachweislich funktioniert und sich sauber in den Workflow integriert, ist langfristig mehr wert als zehn, die „irgendwie\" laufen. Qualität schlägt Quantität – auch bei KI-Skills.",{"title":201,"searchDepth":310,"depth":311,"links":736},[737,741,742,743,744],{"id":601,"depth":310,"text":602,"children":738},[739,740],{"id":609,"depth":311,"text":610},{"id":620,"depth":311,"text":621},{"id":627,"depth":310,"text":628},{"id":679,"depth":310,"text":680},{"id":699,"depth":310,"text":700},{"id":535,"depth":310,"text":536},"Anthropic hat den Skill Creator für Claude Code grundlegend überarbeitet. Mit automatisierten Evals, A/B-Tests und Trigger-Optimierung wird aus Trial-and-Error ein systematischer Prozess.","images/claude-code-skill-creator-evals.svg",{},"/blog/ai/2026-03-04-claude-code-skill-creator-evals",{"title":572,"description":745},"blog/ai/2026-03-04-claude-code-skill-creator-evals",[564,752,753,754,755],"anthropic","skills","evals","developer-tools","NnLpnU4GRA2qdwBJ-bu02LUYYklCo8l99ZGFdgUTFvw",{"id":758,"title":759,"author":7,"body":760,"category":554,"date":555,"description":913,"extension":325,"featured":914,"image":915,"meta":916,"navigation":326,"path":917,"seo":918,"stem":919,"tags":920,"__hash__":924},"blog/blog/vibe-coding/2026-03-04-cmux-ai-terminal-revolution.md","CMUX: Das Terminal, in dem KI-Agenten die Regie übernehmen",{"type":9,"value":761,"toc":906},[762,765,781,785,796,811,814,818,825,832,836,847,854,857,861,871,892,896,903],[12,763,759],{"id":764},"cmux-das-terminal-in-dem-ki-agenten-die-regie-übernehmen",[16,766,767,768,774,775,780],{},"Wer heute mit KI-Agenten wie ",[769,770,352],"a",{"href":771,"rel":772},"https://claude.com/product/claude-code",[773],"nofollow"," arbeitet, stößt schnell an die Grenzen herkömmlicher Terminals. Ein Agent kann Code schreiben, Tests ausführen und Logs analysieren – aber er kann sein Arbeitsumfeld nicht selbst organisieren. ",[769,776,779],{"href":777,"rel":778},"https://www.cmux.dev",[773],"CMUX"," ändert das grundlegend: Es ist ein Terminal, das speziell für multitasking-fähige, agentische Workflows gebaut wurde und den Agenten zum aktiven Mitgestalter der Arbeitsumgebung macht.",[26,782,784],{"id":783},"agentengesteuerte-terminal-kontrolle","Agentengesteuerte Terminal-Kontrolle",[16,786,787,788,791,792,795],{},"Der zentrale Unterschied zu klassischen Terminals: KI-Agenten können ",[769,789,779],{"href":777,"rel":790},[773]," aktiv steuern. Über eine CLI und eine Socket-API (Unix-Sockets) hat ein Agent wie ",[769,793,352],{"href":771,"rel":794},[773]," direkten Zugriff auf die Terminal-Oberfläche.",[16,797,798,799,802,803,806,807,810],{},"Konkret bedeutet das: Ein Agent kann ",[58,800,801],{},"Split-Panes erstellen"," – neue vertikale oder horizontale Bereiche öffnen, um Aufgaben parallel zu bearbeiten. Er kann ",[58,804,805],{},"Sub-Agenten delegieren",", also Instanzen von sich selbst in neuen Panes starten, ihnen spezifische Aufgaben zuweisen (Code-Analyse in Pane 1, Projektverständnis in Pane 2) und die Ergebnisse zentral zusammenführen. Und er kann ",[58,808,809],{},"Tabs verwalten"," – umbenennen oder schließen, sobald eine Aufgabe erledigt ist.",[16,812,813],{},"Das klingt nach einem Detail, verändert aber die Dynamik komplett. Statt sequentiell eine Aufgabe nach der anderen abzuarbeiten, orchestriert der Agent seine eigene Arbeitsumgebung.",[26,815,817],{"id":816},"integrierter-skriptfähiger-browser","Integrierter, skriptfähiger Browser",[16,819,820,821,824],{},"CMUX bringt einen In-App-Browser (WebKit) mit, der direkt neben dem Terminal in einem Split-Pane läuft. Das ist mehr als ein eingebetteter Webview – Agenten können den Browser ",[58,822,823],{},"per Befehl steuern",": Google-Suchen durchführen, auf Links klicken, Webseiten debuggen.",[16,826,827,828,831],{},"Der Vorteil für Entwickler: ",[58,829,830],{},"Echtzeit-Feedback",". Man kann zusehen, wie der Agent durch den Browser navigiert, Tests auf einer Staging-Umgebung durchführt und die Ergebnisse direkt im Terminal verarbeitet. Kein Tab-Wechsel, kein Copy-Paste zwischen Fenstern – alles passiert in einem zusammenhängenden Workspace.",[26,833,835],{"id":834},"intelligentes-benachrichtigungssystem","Intelligentes Benachrichtigungssystem",[16,837,838,839,842,843,846],{},"Bei parallelen Prozessen verliert man schnell den Überblick. ",[769,840,779],{"href":777,"rel":841},[773]," löst das mit sogenannten ",[58,844,845],{},"Notification Rings"," – visuellen Signalen, die gezielt die Aufmerksamkeit steuern.",[16,848,849,850,853],{},"Wenn ein Agent in einem Hintergrund-Pane Hilfe benötigt oder eine Aufgabe abgeschlossen hat, kann er einen ",[58,851,852],{},"Trigger Flash"," auslösen – einen blau blinkenden Rahmen um das betreffende Pane. Zusätzlich erscheinen Benachrichtigungen in der Seitenleiste. Die vertikalen Tabs zeigen kontextuelle Informationen wie Git-Branches, aktive Ports und den Fortschritt laufender Agenten direkt an.",[16,855,856],{},"Das Ergebnis: Man muss nicht mehr aktiv zwischen Panes hin- und herwechseln, um den Status zu prüfen. Das Terminal meldet sich, wenn es etwas zu tun gibt.",[26,858,860],{"id":859},"native-performance-und-erweiterbarkeit","Native Performance und Erweiterbarkeit",[16,862,863,866,867,870],{},[769,864,779],{"href":777,"rel":865},[773]," ist eine ",[58,868,869],{},"native macOS-App",", gebaut auf Swift und AppKit. Für das Terminal-Rendering nutzt es die GPU-beschleunigte Engine von Ghostty (libghostty) – was sich in extrem schneller Darstellung und niedrigem Speicherverbrauch bemerkbar macht.",[16,872,873,874,877,878,881,882,885,886,891],{},"Besonders relevant für Teams: ",[769,875,779],{"href":777,"rel":876},[773]," funktioniert mit ",[58,879,880],{},"jedem CLI-basierten Agenten"," – ",[769,883,352],{"href":771,"rel":884},[773],", Aider, ",[769,887,890],{"href":888,"rel":889},"https://opencode.ai",[773],"OpenCode",", Cursor Agent – ohne zusätzliche Konfiguration. Man muss sich nicht auf ein Ökosystem festlegen.",[26,893,895],{"id":894},"vom-werkzeug-zum-mitgestalter","Vom Werkzeug zum Mitgestalter",[16,897,898,899,902],{},"Der eigentliche Paradigmenwechsel: ",[769,900,779],{"href":777,"rel":901},[773]," macht den KI-Agenten vom passiven Werkzeug zum aktiven Mitgestalter der Arbeitsumgebung. Er kann komplexe Aufgaben parallel ausführen, seine eigene Oberfläche organisieren und dem Entwickler visuelles Echtzeit-Feedback geben.",[16,904,905],{},"Für Entwickler, die bereits intensiv mit KI-Agenten arbeiten, ist das der logische nächste Schritt – weg vom einzelnen Chat-Fenster, hin zu einem orchestrierten, multitasking-fähigen Workspace.",{"title":201,"searchDepth":310,"depth":311,"links":907},[908,909,910,911,912],{"id":783,"depth":310,"text":784},{"id":816,"depth":310,"text":817},{"id":834,"depth":310,"text":835},{"id":859,"depth":310,"text":860},{"id":894,"depth":310,"text":895},"CMUX gibt KI-Agenten wie Claude Code die volle Kontrolle über das Terminal – mit Split-Panes, integriertem Browser und intelligentem Benachrichtigungssystem für parallele Workflows.",false,"images/cmux-ai-terminal-revolution.svg",{},"/blog/vibe-coding/2026-03-04-cmux-ai-terminal-revolution",{"title":759,"description":913},"blog/vibe-coding/2026-03-04-cmux-ai-terminal-revolution",[921,922,923,564,755],"cmux","terminal","ai-agents","-Txg4w0YyXqo0CibkvUL5FfEhWkaDP2M6wEsI4FELTM",{"id":926,"title":927,"author":7,"body":928,"category":1416,"date":1417,"description":1418,"extension":325,"featured":326,"image":1419,"meta":1420,"navigation":326,"path":1421,"seo":1422,"stem":1423,"tags":1424,"__hash__":1429},"blog/blog/vibe-coding/2026-03-03-gmail-cli-mit-claude-code.md","Gmail CLI mit Claude Code bauen – 15.000 E-Mails in Minuten archiviert",{"type":9,"value":929,"toc":1396},[930,933,936,940,943,946,961,965,969,982,986,989,999,1013,1022,1042,1045,1049,1075,1079,1085,1101,1116,1120,1123,1150,1156,1160,1163,1167,1170,1193,1212,1216,1219,1244,1248,1255,1259,1262,1280,1283,1287,1290,1304,1307,1324,1327,1347,1350,1353,1357,1363,1369,1375,1384,1386,1389,1392],[12,931,927],{"id":932},"gmail-cli-mit-claude-code-bauen-15000-e-mails-in-minuten-archiviert",[16,934,935],{},"2026 wird zum Jahr der persönlichen KI-Agenten. Statt auf fertige Tools zu warten, kannst du heute schon selbst die Bausteine bauen, die deinen Alltag automatisieren. In diesem Beitrag zeige ich dir, wie ich mit Claude Code einen Gmail-CLI erstellt habe, mit dem ich meinen Posteingang per Kommandozeile verwalte und Newsletter zusammenfasse.",[26,937,939],{"id":938},"warum-ein-cli-statt-browser-automation","Warum ein CLI statt Browser-Automation?",[16,941,942],{},"Zunächst habe ich versucht, Gmail über Browser-Automation zu steuern. Das war langsam: DOM-Scraping, Klicks im Interface, Wartezeiten beim Laden. Ein CLI, das direkt die Gmail-API anspricht, ist schneller, zuverlässiger und liefert strukturierte Daten.",[16,944,945],{},"Der Ansatz funktioniert so:",[947,948,949,952,955,958],"ol",{},[65,950,951],{},"Google Cloud Projekt einrichten",[65,953,954],{},"OAuth-Authentifizierung konfigurieren",[65,956,957],{},"CLI mit Claude Code entwickeln",[65,959,960],{},"Features bei Bedarf erweitern",[26,962,964],{"id":963},"google-cloud-setup","Google Cloud Setup",[607,966,968],{"id":967},"projekt-erstellen-und-gmail-api-aktivieren","Projekt erstellen und Gmail-API aktivieren",[16,970,971,972,977,978,981],{},"Gehe zur ",[769,973,976],{"href":974,"rel":975},"https://console.cloud.google.com/",[773],"Google Cloud Console"," und erstelle ein neues Projekt. Navigiere zu ",[58,979,980],{},"APIs & Services > Bibliothek",", suche nach \"Gmail API\" und aktiviere sie.",[607,983,985],{"id":984},"oauth-zustimmungsbildschirm-konfigurieren","OAuth-Zustimmungsbildschirm konfigurieren",[16,987,988],{},"Der OAuth-Consent-Screen besteht aus drei Bereichen:",[16,990,991,994,995,998],{},[58,992,993],{},"Branding:"," Unter ",[58,996,997],{},"Google Auth Platform > Branding"," gibst du einen App-Namen (z.B. \"gmail-cli\"), deine E-Mail als Support-Adresse und Entwicklerkontakt ein.",[16,1000,1001,1004,1005,1008,1009,1012],{},[58,1002,1003],{},"Audience:"," Wähle unter ",[58,1006,1007],{},"Google Auth Platform > Audience"," den Typ ",[58,1010,1011],{},"External",", es sei denn, du nutzt Google Workspace. Füge dich selbst als Testnutzer hinzu.",[16,1014,1015,994,1018,1021],{},[58,1016,1017],{},"Datenzugriff (Scopes):",[58,1019,1020],{},"Google Auth Platform > Data Access"," fügst du die benötigten Berechtigungen hinzu:",[62,1023,1024,1030,1036],{},[65,1025,1026,1029],{},[199,1027,1028],{},"https://www.googleapis.com/auth/gmail.readonly"," (E-Mails lesen)",[65,1031,1032,1035],{},[199,1033,1034],{},"https://www.googleapis.com/auth/gmail.modify"," (Archivieren, Labels)",[65,1037,1038,1041],{},[199,1039,1040],{},"https://www.googleapis.com/auth/gmail.send"," (E-Mails senden)",[16,1043,1044],{},"Je enger der Scope, desto geringer das Risiko bei einem geleakten Token.",[607,1046,1048],{"id":1047},"oauth-credentials-erstellen","OAuth-Credentials erstellen",[16,1050,1051,1052,1055,1056,1059,1060,1063,1064,1066,1067,1070,1071,1074],{},"Unter ",[58,1053,1054],{},"Google Auth Platform > Clients"," erstellst du einen neuen Client vom Typ ",[58,1057,1058],{},"Desktop-App",". Lade die JSON-Datei herunter, speichere sie als ",[199,1061,1062],{},"credentials.json"," im Projektverzeichnis und füge beide Dateien (",[199,1065,1062],{}," und später ",[199,1068,1069],{},"token.json",") zur ",[199,1072,1073],{},".gitignore"," hinzu.",[26,1076,1078],{"id":1077},"den-cli-mit-claude-code-entwickeln","Den CLI mit Claude Code entwickeln",[16,1080,1081,1082,1084],{},"Mit der ",[199,1083,1062],{}," im Projekt kannst du Claude Code bitten, den CLI zu implementieren. Ein guter Startpunkt ist ein Plan, der die Architektur skizziert:",[62,1086,1087,1089,1092,1095,1098],{},[65,1088,964],{},[65,1090,1091],{},"OAuth-Konfiguration",[65,1093,1094],{},"CLI-Befehle (inbox, search, read, labels, archive)",[65,1096,1097],{},"Authentifizierungs-Flow",[65,1099,1100],{},"Edge Cases und Rate Limits",[16,1102,1103,1104,1107,1108,1111,1112,1115],{},"Claude Code generiert dann ",[199,1105,1106],{},"package.json",", die Hauptdatei ",[199,1109,1110],{},"index.js"," und macht das Script ausführbar. Mit ",[199,1113,1114],{},"npm link"," wird der Befehl systemweit verfügbar.",[607,1117,1119],{"id":1118},"erster-test","Erster Test",[16,1121,1122],{},"Beim ersten Aufruf öffnet sich der Browser für die OAuth-Autorisierung:",[192,1124,1128],{"className":1125,"code":1126,"language":1127,"meta":201,"style":201},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","gmail-cli inbox --limit 1\n","bash",[199,1129,1130],{"__ignoreMap":201},[1131,1132,1135,1139,1143,1146],"span",{"class":1133,"line":1134},"line",1,[1131,1136,1138],{"class":1137},"sBMFI","gmail-cli",[1131,1140,1142],{"class":1141},"sfazB"," inbox",[1131,1144,1145],{"class":1141}," --limit",[1131,1147,1149],{"class":1148},"sbssI"," 1\n",[16,1151,1152,1153,1155],{},"Nach der Zustimmung speichert der CLI ein ",[199,1154,1069],{}," für zukünftige Aufrufe.",[26,1157,1159],{"id":1158},"features-erweitern","Features erweitern",[16,1161,1162],{},"Die besten Features entstehen bei der Nutzung. Hier sind Beispiele, wie der CLI wuchs:",[607,1164,1166],{"id":1165},"json-output-und-body-inhalt","JSON-Output und Body-Inhalt",[16,1168,1169],{},"Für Newsletter-Zusammenfassungen brauchte ich strukturierte Daten:",[192,1171,1173],{"className":1125,"code":1172,"language":1127,"meta":201,"style":201},"gmail-cli inbox --json --body --max-length 5000\n",[199,1174,1175],{"__ignoreMap":201},[1131,1176,1177,1179,1181,1184,1187,1190],{"class":1133,"line":1134},[1131,1178,1138],{"class":1137},[1131,1180,1142],{"class":1141},[1131,1182,1183],{"class":1141}," --json",[1131,1185,1186],{"class":1141}," --body",[1131,1188,1189],{"class":1141}," --max-length",[1131,1191,1192],{"class":1148}," 5000\n",[16,1194,1195,1196,1199,1200,1203,1204,1207,1208,1211],{},"Claude Code fügte ",[199,1197,1198],{},"--json"," für strukturierte Ausgabe, ",[199,1201,1202],{},"--body"," für den Nachrichteninhalt und ",[199,1205,1206],{},"--max-length"," für Trunkierung hinzu. Ein ",[199,1209,1210],{},"batch-read","-Befehl holt mehrere E-Mails parallel.",[607,1213,1215],{"id":1214},"archivieren","Archivieren",[16,1217,1218],{},"Ein einfacher Archiv-Befehl:",[192,1220,1222],{"className":1125,"code":1221,"language":1127,"meta":201,"style":201},"gmail-cli archive --search \"from:linkedin.com\"\n",[199,1223,1224],{"__ignoreMap":201},[1131,1225,1226,1228,1231,1234,1238,1241],{"class":1133,"line":1134},[1131,1227,1138],{"class":1137},[1131,1229,1230],{"class":1141}," archive",[1131,1232,1233],{"class":1141}," --search",[1131,1235,1237],{"class":1236},"sMK4o"," \"",[1131,1239,1240],{"class":1141},"from:linkedin.com",[1131,1242,1243],{"class":1236},"\"\n",[607,1245,1247],{"id":1246},"batch-operationen-mit-batchmodify","Batch-Operationen mit batchModify",[16,1249,1250,1251,1254],{},"Die initiale Version verarbeitete E-Mails einzeln. Bei 2.000 LinkedIn-E-Mails wurde das ineffizient. Die Gmail-API bietet ",[199,1252,1253],{},"batchModify",", um bis zu 1.000 Nachrichten in einem Call zu verarbeiten. Mit dieser Optimierung lassen sich tausende E-Mails in Sekunden archivieren.",[607,1256,1258],{"id":1257},"top-sender-analysieren","Top-Sender analysieren",[16,1260,1261],{},"Um herauszufinden, welche Absender den Posteingang füllen:",[192,1263,1265],{"className":1125,"code":1264,"language":1127,"meta":201,"style":201},"gmail-cli top-senders --sample 1000\n",[199,1266,1267],{"__ignoreMap":201},[1131,1268,1269,1271,1274,1277],{"class":1133,"line":1134},[1131,1270,1138],{"class":1137},[1131,1272,1273],{"class":1141}," top-senders",[1131,1275,1276],{"class":1141}," --sample",[1131,1278,1279],{"class":1148}," 1000\n",[16,1281,1282],{},"Da die API pro Nachricht einen separaten Call für Header benötigt, würde ein Scan aller 15.000 E-Mails das Rate-Limit sprengen (250 Quota-Einheiten pro Sekunde). Die Lösung: Eine Stichprobe der letzten 1.000 E-Mails liefert ausreichend repräsentative Daten.",[26,1284,1286],{"id":1285},"_15000-e-mails-bereinigt","15.000 E-Mails bereinigt",[16,1288,1289],{},"Mit dem erweiterten CLI dauerte die Bereinigung etwa 45 Minuten. Der Workflow war ein iterativer Loop:",[947,1291,1292,1295,1298,1301],{},[65,1293,1294],{},"Nächsten E-Mail-Batch abrufen",[65,1296,1297],{},"In \"Bulk-Archiv\", \"Einzelarchiv\" und \"Behalten\" kategorisieren",[65,1299,1300],{},"Genehmigung mit Anpassungen (\"Daily Newsletter behalten, Rest archivieren\")",[65,1302,1303],{},"Parallele Archiv-Befehle ausführen",[16,1305,1306],{},"Runde für Runde verschwanden Tausende E-Mails:",[62,1308,1309,1312,1315,1318,1321],{},[65,1310,1311],{},"LinkedIn: 2.191",[65,1313,1314],{},"Garmin: 1.494",[65,1316,1317],{},"Going Travel Deals: 1.587",[65,1319,1320],{},"Amazon: 627",[65,1322,1323],{},"GitHub Notifications: 427",[16,1325,1326],{},"Schließlich wurde ich ungeduldig:",[192,1328,1330],{"className":1125,"code":1329,"language":1127,"meta":201,"style":201},"gmail-cli archive --search \"in:inbox before:2025/06/01\"\n",[199,1331,1332],{"__ignoreMap":201},[1131,1333,1334,1336,1338,1340,1342,1345],{"class":1133,"line":1134},[1131,1335,1138],{"class":1137},[1131,1337,1230],{"class":1141},[1131,1339,1233],{"class":1141},[1131,1341,1237],{"class":1236},[1131,1343,1344],{"class":1141},"in:inbox before:2025/06/01",[1131,1346,1243],{"class":1236},[16,1348,1349],{},"6.152 E-Mails auf einmal archiviert. Manchmal schlägt ein Zeitstempel die sorgfältige Prüfung.",[16,1351,1352],{},"Der Posteingang landete bei unter 500 E-Mails. Die verbliebenen Nachrichten – persönliche E-Mails, Einwanderungsunterlagen, Recruiting-Threads – wurden einzeln durchgegangen.",[26,1354,1356],{"id":1355},"lessons-learned","Lessons Learned",[16,1358,1359,1362],{},[58,1360,1361],{},"CLI schlägt Browser-Automation:"," Wenn eine API existiert, ist ein CLI schneller, zuverlässiger und liefert strukturierte Daten.",[16,1364,1365,1368],{},[58,1366,1367],{},"OAuth ist einfacher als gedacht:"," Die Einrichtung in Google Cloud dauert etwa eine Stunde. Danach verwaltet der CLI alles weitere.",[16,1370,1371,1374],{},[58,1372,1373],{},"Iterativ bauen:"," Die meisten Features entstanden, weil ich während der Nutzung auf Hindernisse stieß und Claude Code bat, sie zu beheben. Ein perfektes Tool am Anfang ist nicht nötig – ein guter Startpunkt und die Fähigkeit zur Erweiterung genügen.",[16,1376,1377,1380,1381,1383],{},[58,1378,1379],{},"Batch-Operationen sind entscheidend:"," Das Entdecken von ",[199,1382,1253],{}," machte den Unterschied zwischen einer Stunde und wenigen Minuten.",[26,1385,536],{"id":535},[16,1387,1388],{},"Ein selbstgebauter Gmail-CLI passt exakt zu deinem Workflow. Du verstehst, wie die Teile zusammenpassen, und kannst jederzeit erweitern. Die Investition in ein persönliches Tool zahlt sich aus – nicht nur für die E-Mail-Verwaltung, sondern als Blaupause für weitere Automationen.",[16,1390,1391],{},"Die Rezeptur ist simpel: Projekt aufsetzen, Plan schreiben, Google Cloud konfigurieren, mit Claude Code bauen, iterieren.",[1393,1394,1395],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}",{"title":201,"searchDepth":310,"depth":311,"links":1397},[1398,1399,1404,1407,1413,1414,1415],{"id":938,"depth":310,"text":939},{"id":963,"depth":310,"text":964,"children":1400},[1401,1402,1403],{"id":967,"depth":311,"text":968},{"id":984,"depth":311,"text":985},{"id":1047,"depth":311,"text":1048},{"id":1077,"depth":310,"text":1078,"children":1405},[1406],{"id":1118,"depth":311,"text":1119},{"id":1158,"depth":310,"text":1159,"children":1408},[1409,1410,1411,1412],{"id":1165,"depth":311,"text":1166},{"id":1214,"depth":311,"text":1215},{"id":1246,"depth":311,"text":1247},{"id":1257,"depth":311,"text":1258},{"id":1285,"depth":310,"text":1286},{"id":1355,"depth":310,"text":1356},{"id":535,"depth":310,"text":536},"vibe-coding","2026-03-03T00:00:00.000Z","Wie man mit Claude Code einen Gmail CLI entwickelt, um den Posteingang per Kommandozeile zu verwalten und tausende E-Mails effizient zu archivieren.","images/gmail-cli-mit-claude-code.svg",{},"/blog/vibe-coding/2026-03-03-gmail-cli-mit-claude-code",{"title":927,"description":1418},"blog/vibe-coding/2026-03-03-gmail-cli-mit-claude-code",[564,1425,1426,1427,1428],"gmail","automation","cli","productivity","S94Mb3bV6894Eh2V2-F_uVPSzFiH_dUAL83T8FgNcYc",{"id":1431,"title":1432,"author":7,"body":1433,"category":322,"date":1838,"description":1839,"extension":325,"featured":326,"image":1840,"meta":1841,"navigation":326,"path":1842,"seo":1843,"stem":1844,"tags":1845,"__hash__":1850},"blog/blog/finance/2026-03-01-dexter-autonomous-financial-research-agent.md","Dexter: Ein autonomer Agent für tiefgehende Finanzanalyse",{"type":9,"value":1434,"toc":1826},[1435,1438,1441,1448,1452,1461,1468,1472,1478,1484,1490,1496,1502,1506,1509,1541,1545,1548,1565,1568,1572,1579,1599,1603,1609,1615,1621,1627,1631,1634,1715,1718,1729,1732,1744,1747,1777,1781,1784,1791,1794,1798,1801,1804,1815,1818,1823],[12,1436,1432],{"id":1437},"dexter-ein-autonomer-agent-für-tiefgehende-finanzanalyse",[16,1439,1440],{},"Eine Aktie zu recherchieren bedeutete bisher: zwanzig Browser-Tabs öffnen, 10-K-Filings durcharbeiten, Analystenschätzungen vergleichen und Insider-Trading-Aktivitäten aufspüren. Eine gründliche Analyse konnte leicht 30 Minuten dauern – oder länger, wenn man sich von einer schlecht gestalteten Finanznachrichtenseite ablenken ließ.",[16,1442,1443,1444,1447],{},"Hier kommt ",[58,1445,1446],{},"Dexter",": ein autonomer Finanzanalyse-Agent, der tiefgehende Analysen mithilfe von Aufgabenplanung, Selbstreflexion und Echtzeit-Marktdaten durchführt. Man kann ihn sich wie Claude Code vorstellen, nur speziell für Finanzanalyse gebaut. Und er erledigt in 30 Sekunden, was früher eine halbe Stunde dauerte.",[26,1449,1451],{"id":1450},"was-ist-dexter","Was ist Dexter?",[16,1453,1454,1455,1460],{},"Dexter ist ein Open-Source-Agent von ",[769,1456,1459],{"href":1457,"rel":1458},"https://github.com/virattt",[773],"Virat Singh",", der komplexe Finanzfragen in klare, schrittweise Recherchepläne umwandelt. Er führt diese Aufgaben mit Live-Marktdaten aus, überprüft seine eigene Arbeit und verfeinert die Ergebnisse, bis er eine fundierte, datengestützte Antwort liefert.",[16,1462,1463,1464,1467],{},"Mit ",[58,1465,1466],{},"16.700 Stars"," auf GitHub und einer wachsenden Community von Mitwirkenden hat sich Dexter schnell zu einem der beliebtesten Open-Source-Tools für KI-gestützte Finanzanalyse entwickelt.",[26,1469,1471],{"id":1470},"kernfähigkeiten","Kernfähigkeiten",[16,1473,1474,1477],{},[58,1475,1476],{},"Intelligente Aufgabenplanung","\nDexter beantwortet nicht einfach Fragen – er zerlegt sie. Frage ihn nach NVIDIAs letzten Quartalszahlen, und er wird deine Anfrage automatisch in strukturierte Rechercheschritte aufteilen: gemeldete Ergebnisse mit Analystenschätzungen vergleichen, Insider-Trading-Aktivitäten prüfen, zukunftsgerichtete Aussagen aus aktuellen 10-K-Filings extrahieren und Analystenreaktionen sammeln.",[16,1479,1480,1483],{},[58,1481,1482],{},"Autonome Ausführung","\nDer Agent wählt die richtigen Tools aus und sammelt Finanzdaten ohne menschliches Eingreifen. Er weiß, wann er Gewinn- und Verlustrechnungen abfragen, wann er im Web nach Analystenkommentaren suchen und wann er in SEC-Filings eintauchen muss.",[16,1485,1486,1489],{},[58,1487,1488],{},"Selbstvalidierung","\nDexter überprüft seine eigene Arbeit und iteriert, bis die Aufgaben erledigt sind. Wenn er mehr Kontext benötigt, holt er ihn sich. Wenn ein Datenpunkt inkonsistent erscheint, verifiziert er ihn.",[16,1491,1492,1495],{},[58,1493,1494],{},"Echtzeit-Finanzdaten","\nÜber Integrationen mit der Financial Datasets API greift Dexter auf aktuelle Gewinn- und Verlustrechnungen, Bilanzen, Cashflow-Statements, Insider-Transaktionen und Analystenschätzungen zu.",[16,1497,1498,1501],{},[58,1499,1500],{},"Sicherheitsfeatures","\nEingebaute Schleifenerkennung und Schrittlimits verhindern unkontrollierte Ausführung. Dexter bleibt nicht in Endlosschleifen stecken und verursacht keine unerwarteten API-Kosten.",[26,1503,1505],{"id":1504},"architektur-so-funktioniert-dexter","Architektur: So funktioniert Dexter",[16,1507,1508],{},"Dexters System ist elegant simpel, aufgebaut auf fünf Kernkomponenten:",[947,1510,1511,1517,1523,1529,1535],{},[65,1512,1513,1516],{},[58,1514,1515],{},"LLM-Gehirn",": Die zentrale Intelligenz, die denkt, plant und Aufgaben weiterleitet",[65,1518,1519,1522],{},[58,1520,1521],{},"Subagenten",": Spezialisierte Module für bestimmte Aufgabentypen (Finanzsuche, SEC-Filing-Analyse, Web-Browsing)",[65,1524,1525,1528],{},[58,1526,1527],{},"Externe APIs",": Live-Datenquellen wie die Financial Datasets API und Web-Suchanbieter",[65,1530,1531,1534],{},[58,1532,1533],{},"Scratchpad",": Eine persistente JSONL-Datei, die Zustand und Kontext während des gesamten Rechercheprozesses erhält",[65,1536,1537,1540],{},[58,1538,1539],{},"Evaluierungsschicht",": Automatisierte Tests, um Genauigkeit sicherzustellen und Regressionen zu erkennen",[607,1542,1544],{"id":1543},"das-subagenten-muster","Das Subagenten-Muster",[16,1546,1547],{},"Eine der klügsten Designentscheidungen von Dexter ist die begrenzte Tool-Sichtbarkeit auf der obersten Ebene. Anstatt 20+ Endpunkte direkt dem Haupt-LLM zu exponieren, präsentiert Dexter nur fünf High-Level-Tools:",[62,1549,1550,1553,1556,1559,1562],{},[65,1551,1552],{},"Finanzsuche-Subagent",[65,1554,1555],{},"Finanzkennzahlen-Subagent",[65,1557,1558],{},"SEC-Filings-Subagent",[65,1560,1561],{},"Web-Browsing-Tool",[65,1563,1564],{},"Datei-Browsing-Tool",[16,1566,1567],{},"Jeder Subagent ist ein spezialisierter Agent mit eigenem internen LLM. Wenn der Haupt-Agent eine Aufgabe an den Finanzsuche-Subagenten weiterleitet, sieht dieser die spezifischen Finanz-Endpunkte (Gewinn- und Verlustrechnungen, Analystenschätzungen, Insider-Trades) und wählt die passenden aus. Dieses hierarchische Routing verbessert die Zuverlässigkeit dramatisch, weil jeder Agent auf das fokussiert bleibt, was er am besten kann.",[607,1569,1571],{"id":1570},"das-scratchpad","Das Scratchpad",[16,1573,1574,1575,1578],{},"Jedes Tool-Ergebnis wird in einer JSONL-Datei unter ",[199,1576,1577],{},".dexter/scratchpad/"," protokolliert. Dieses Append-Only-Log dient als Single Source of Truth für alles, was Dexter während einer Recherchesitzung lernt. Es ermöglicht:",[62,1580,1581,1587,1593],{},[65,1582,1583,1586],{},[58,1584,1585],{},"Debugging",": Genau nachvollziehen, welche Daten der Agent gesammelt hat und wie er Ergebnisse interpretiert hat",[65,1588,1589,1592],{},[58,1590,1591],{},"Resilienz",": Arbeit übersteht Prozessabstürze – einfach neustarten und dort weitermachen, wo man aufgehört hat",[65,1594,1595,1598],{},[58,1596,1597],{},"Kontextmanagement",": Intelligente Komprimierung verhindert Context-Window-Overflow bei großen Recherchen",[26,1600,1602],{"id":1601},"anwendungsfälle","Anwendungsfälle",[16,1604,1605,1608],{},[58,1606,1607],{},"Quartalsberichte analysieren","\n„NVIDIA hat die Ergebnisse für FY2025 veröffentlicht. Vergleiche die gemeldeten Zahlen mit dem Analystenkonsens, zeige Insider-Trading-Aktivitäten des letzten Quartals und fasse die Prognosen aus dem 10-K zusammen.\"",[16,1610,1611,1614],{},[58,1612,1613],{},"Wettbewerbsanalyse","\n„Vergleiche die Verschuldungsgrade von Apple, Microsoft und Google über die letzten 5 Jahre.\"",[16,1616,1617,1620],{},[58,1618,1619],{},"Risikoeinschätzung","\n„Analysiere, wie sich NVIDIAs Risikofaktoren in den letzten drei 10-K-Filings entwickelt haben.\"",[16,1622,1623,1626],{},[58,1624,1625],{},"Analystenstimmung","\n„Was sagen Analysten zu Teslas letzten Auslieferungszahlen, und wie hat die Aktie reagiert?\"",[26,1628,1630],{"id":1629},"erste-schritte","Erste Schritte",[16,1632,1633],{},"Dexter ist in TypeScript gebaut und läuft auf der Bun-Runtime. Das Setup ist unkompliziert:",[192,1635,1637],{"className":1125,"code":1636,"language":1127,"meta":201,"style":201},"# Repository klonen\ngit clone https://github.com/virattt/dexter.git\ncd dexter\n\n# Abhängigkeiten installieren\nbun install\n\n# Umgebungsvariablen einrichten\ncp env.example .env\n# .env mit deinen API-Keys bearbeiten\n",[199,1638,1639,1645,1656,1665,1671,1677,1686,1691,1697,1709],{"__ignoreMap":201},[1131,1640,1641],{"class":1133,"line":1134},[1131,1642,1644],{"class":1643},"sHwdD","# Repository klonen\n",[1131,1646,1647,1650,1653],{"class":1133,"line":310},[1131,1648,1649],{"class":1137},"git",[1131,1651,1652],{"class":1141}," clone",[1131,1654,1655],{"class":1141}," https://github.com/virattt/dexter.git\n",[1131,1657,1658,1662],{"class":1133,"line":311},[1131,1659,1661],{"class":1660},"s2Zo4","cd",[1131,1663,1664],{"class":1141}," dexter\n",[1131,1666,1668],{"class":1133,"line":1667},4,[1131,1669,1670],{"emptyLinePlaceholder":326},"\n",[1131,1672,1674],{"class":1133,"line":1673},5,[1131,1675,1676],{"class":1643},"# Abhängigkeiten installieren\n",[1131,1678,1680,1683],{"class":1133,"line":1679},6,[1131,1681,1682],{"class":1137},"bun",[1131,1684,1685],{"class":1141}," install\n",[1131,1687,1689],{"class":1133,"line":1688},7,[1131,1690,1670],{"emptyLinePlaceholder":326},[1131,1692,1694],{"class":1133,"line":1693},8,[1131,1695,1696],{"class":1643},"# Umgebungsvariablen einrichten\n",[1131,1698,1700,1703,1706],{"class":1133,"line":1699},9,[1131,1701,1702],{"class":1137},"cp",[1131,1704,1705],{"class":1141}," env.example",[1131,1707,1708],{"class":1141}," .env\n",[1131,1710,1712],{"class":1133,"line":1711},10,[1131,1713,1714],{"class":1643},"# .env mit deinen API-Keys bearbeiten\n",[16,1716,1717],{},"Du brauchst:",[62,1719,1720,1723,1726],{},[65,1721,1722],{},"OpenAI API Key (oder Anthropic, Google, xAI oder OpenRouter)",[65,1724,1725],{},"Financial Datasets API Key (AAPL, NVDA, MSFT-Daten sind kostenlos)",[65,1727,1728],{},"Exa API Key (optional, für Websuche)",[16,1730,1731],{},"Im interaktiven Modus starten:",[192,1733,1735],{"className":1125,"code":1734,"language":1127,"meta":201,"style":201},"bun start\n",[199,1736,1737],{"__ignoreMap":201},[1131,1738,1739,1741],{"class":1133,"line":1134},[1131,1740,1682],{"class":1137},[1131,1742,1743],{"class":1141}," start\n",[16,1745,1746],{},"Oder die WhatsApp-Integration nutzen, um per Handy mit Dexter zu chatten:",[192,1748,1750],{"className":1125,"code":1749,"language":1127,"meta":201,"style":201},"bun run gateway:login  # QR-Code scannen\nbun run gateway        # Gateway starten\n",[199,1751,1752,1765],{"__ignoreMap":201},[1131,1753,1754,1756,1759,1762],{"class":1133,"line":1134},[1131,1755,1682],{"class":1137},[1131,1757,1758],{"class":1141}," run",[1131,1760,1761],{"class":1141}," gateway:login",[1131,1763,1764],{"class":1643},"  # QR-Code scannen\n",[1131,1766,1767,1769,1771,1774],{"class":1133,"line":310},[1131,1768,1682],{"class":1137},[1131,1770,1758],{"class":1141},[1131,1772,1773],{"class":1141}," gateway",[1131,1775,1776],{"class":1643},"        # Gateway starten\n",[26,1778,1780],{"id":1779},"warum-dexter-wichtig-ist","Warum Dexter wichtig ist",[16,1782,1783],{},"Finanzanalyse war historisch entweder teuer (Bloomberg-Terminal und Researchplattformen) oder zeitaufwendig (manuelle Datensammlung und Analyse). Dexter demokratisiert den Zugang zu Researchfähigkeiten auf institutionellem Niveau.",[16,1785,1786,1787,1790],{},"Aber vielleicht noch wichtiger: Dexter repräsentiert eine neue Klasse von Software – ",[58,1788,1789],{},"Agenten, die nicht nur Informationen abrufen, sondern mehrstufiges Reasoning durchführen, um komplexe Fragen zu beantworten",". Er ist kein Chatbot, der Trainingsdaten wiedergibt – er ist ein Forschungsassistent, der Probleme durchdenkt, seine Ergebnisse validiert und seine Quellen angibt.",[16,1792,1793],{},"Für Entwickler bietet Dexters Open-Source-Codebase eine Masterclass in Agent-Architektur: Subagenten-Hierarchien, Scratchpad-Pattern für State-Management, Tool-Routing und umfassende Evaluierungs-Frameworks.",[26,1795,1797],{"id":1796},"der-weg-nach-vorn","Der Weg nach vorn",[16,1799,1800],{},"Das Projekt wird aktiv gepflegt mit regelmäßigen Releases. Jüngste Updates haben WhatsApp-Integration, erweiterte Datenanbieter-Unterstützung und verbesserte Evaluierungstools gebracht. Mit 31 offenen Pull Requests und einer engagierten Discord-Community entwickelt sich Dexter rasant weiter.",[16,1802,1803],{},"Ob du Investor bist und deinen Research-Workflow optimieren willst, Entwickler und Agent-Architekturen studierst, oder Fintech-Gründer und KI-Anwendungen erkundest – Dexter ist einen Blick wert.",[16,1805,1806,1809,1810],{},[58,1807,1808],{},"Zum Projekt:"," ",[769,1811,1814],{"href":1812,"rel":1813},"https://github.com/virattt/dexter",[773],"github.com/virattt/dexter",[1816,1817],"hr",{},[16,1819,1820],{},[36,1821,1822],{},"Dexter ist Open Source unter der MIT-Lizenz. Das Projekt stellt keine Anlageberatung dar – informiere dich immer selbst, bevor du Investitionsentscheidungen triffst.",[1393,1824,1825],{},"html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":201,"searchDepth":310,"depth":311,"links":1827},[1828,1829,1830,1834,1835,1836,1837],{"id":1450,"depth":310,"text":1451},{"id":1470,"depth":310,"text":1471},{"id":1504,"depth":310,"text":1505,"children":1831},[1832,1833],{"id":1543,"depth":311,"text":1544},{"id":1570,"depth":311,"text":1571},{"id":1601,"depth":310,"text":1602},{"id":1629,"depth":310,"text":1630},{"id":1779,"depth":310,"text":1780},{"id":1796,"depth":310,"text":1797},"2026-03-01T00:00:00.000Z","Dexter ist ein Open-Source-Agent für autonome Finanzanalyse, der denkt, plant und lernt – fähig, Quartalsberichte, SEC-Filings und Marktdaten in Sekunden auszuwerten.","images/dexter-financial-research-agent.svg",{},"/blog/finance/2026-03-01-dexter-autonomous-financial-research-agent",{"title":1432,"description":1839},"blog/finance/2026-03-01-dexter-autonomous-financial-research-agent",[1846,1847,1848,1426,1849],"ai-agent","financial-research","open-source","fintech","o3vrfHS1JUGvK1zFMDHSyqp4vFMb1Ksol6xCjmuNYQQ",{"id":1852,"title":1853,"author":7,"body":1854,"category":322,"date":1838,"description":2150,"extension":325,"featured":914,"image":2151,"meta":2152,"navigation":326,"path":2153,"seo":2154,"stem":2155,"tags":2156,"__hash__":2163},"blog/blog/finance/2026-03-01-msci-world-ex-usa-entklumpung.md","MSCI World ex USA: Die einfache Lösung gegen Depot-Klumpung",{"type":9,"value":1855,"toc":2139},[1856,1859,1862,1866,1869,1875,1881,1887,1891,1898,1905,1909,1913,1916,1920,1923,1937,1940,1944,1947,1952,1963,1968,2076,2080,2086,2092,2103,2109,2120,2123,2125,2128,2131,2134],[12,1857,1853],{"id":1858},"msci-world-ex-usa-die-einfache-lösung-gegen-depot-klumpung",[16,1860,1861],{},"Der MSCI World Index gilt vielen Anlegern als die Standardlösung für weltweite Aktienanlagen. Doch unter der Oberfläche brodelt ein Problem, das immer mehr Investoren beschäftigt: Das Depot klumpt. Mit über 72% USA-Anteil und mehr als 24% auf nur sieben Tech-Giganten konzentriert, entfernt sich der beliebte Index immer weiter von einer tatsächlich breiten Streuung.",[26,1863,1865],{"id":1864},"das-klumpenproblem","Das Klumpenproblem",[16,1867,1868],{},"Der MSCI World Index ist ein praktisches Produkt – kostengünstig, liquide und überall verfügbar. Doch die Realität seiner Zusammensetzung weicht erheblich vom Namen ab:",[16,1870,1871,1874],{},[58,1872,1873],{},"USA-Übergewichtung:"," Stand Anfang 2026 sind rund 72% des Index in US-amerikanische Aktien investiert. Vor zehn Jahren waren es noch 55%, vor 15 Jahren deutlich unter 50%. Was als weltweite Anlage gedacht war, ist faktisch zu einer USA-Wette geworden.",[16,1876,1877,1880],{},[58,1878,1879],{},"Die Magnificent Seven:"," Allein sieben US-Tech-Unternehmen – Alphabet, Amazon, Apple, Meta, Microsoft, Nvidia und Tesla – machen über 24% des Index aus. Das ist mehr als die gesamte Eurozone (ca. 12%) und das Vereinigte Königreich (ca. 4%) zusammen.",[16,1882,1883,1886],{},[58,1884,1885],{},"Keine Schwellenländer:"," Trotz des Namens \"World\" fehlen Emerging Markets komplett. China mit rund 18% des Welt-BSP, Indien mit 3,5% – keine Spur davon im Index.",[26,1888,1890],{"id":1889},"warum-das-problematisch-ist","Warum das problematisch ist",[16,1892,1893,1894,1897],{},"In der Kapitalmarkttheorie gibt es einen einfachen Grundsatz: Für zusätzliches Risiko sollte man eine Risikoprämie erhalten. Klumpenrisiken jedoch – also die willkürliche Konzentration auf bestimmte Länder oder Unternehmen – sind ",[58,1895,1896],{},"unsystematische Risiken",", die durch Diversifikation vermeidbar wären. Der Markt vergütet sie nicht.",[16,1899,1900,1901,1904],{},"Wer heute in einen Standard-MSCI-World-ETF investiert, nimmt also ",[58,1902,1903],{},"zusätzliches Risiko ohne entsprechende Entlohnung"," in Kauf. Die Geschichte lehrt, dass solche Konzentrationen früher oder später korrigieren – oft schmerzhaft für diejenigen, die zur falschen Zeit auf der falschen Seite standen.",[26,1906,1908],{"id":1907},"lösungsansätze-im-vergleich","Lösungsansätze im Vergleich",[607,1910,1912],{"id":1911},"_1-breitere-indizes-wählen","1. Breitere Indizes wählen",[16,1914,1915],{},"ETFs auf den FTSE Global All Cap oder MSCI ACWI IMI investieren zusätzlich in Schwellenländer und kleinere Unternehmen (Small Caps). Der USA-Anteil sinkt dadurch auf ca. 62%. Ein Schritt in die richtige Richtung, aber noch immer deutlich über dem BSP-gerechten Anteil von ca. 25%.",[607,1917,1919],{"id":1918},"_2-regionale-beimischungen","2. Regionale Beimischungen",[16,1921,1922],{},"Wer sein bestehendes MSCI-World-Depot behalten möchte, kann gezielt ergänzen:",[62,1924,1925,1931],{},[65,1926,1927,1930],{},[58,1928,1929],{},"Emerging Markets ETFs"," für Schwellenländer",[65,1932,1933,1936],{},[58,1934,1935],{},"Europa-ETFs"," (STOXX Europe 600, MSCI Europe) für mehr Kontinental-Europa",[16,1938,1939],{},"Das Problem: Die Lösung wird schnell komplex und erfordert ständiges Rebalancing.",[607,1941,1943],{"id":1942},"_3-die-elegante-alternative-msci-world-ex-usa","3. Die elegante Alternative: MSCI World ex USA",[16,1945,1946],{},"Seit 2024 gibt es für Privatanleger UCITS-konforme ETFs auf den MSCI World ex USA Index. Dieser enthält alle Unternehmen des klassischen MSCI World – nur eben ohne die US-Titel.",[16,1948,1949],{},[58,1950,1951],{},"Das Ergebnis:",[62,1953,1954,1957,1960],{},[65,1955,1956],{},"USA-Anteil: 0% (statt 72%)",[65,1958,1959],{},"Magnificent Seven: 0% (statt 24%)",[65,1961,1962],{},"Verbleibende ~800 Unternehmen aus 22 Industrieländern werden entsprechend höher gewichtet",[16,1964,1965],{},[58,1966,1967],{},"Verfügbare ETFs (Stand Februar 2026):",[1969,1970,1971,1993],"table",{},[1972,1973,1974],"thead",{},[1975,1976,1977,1981,1984,1987,1990],"tr",{},[1978,1979,1980],"th",{},"Name",[1978,1982,1983],{},"ISIN",[1978,1985,1986],{},"TER",[1978,1988,1989],{},"Ertragsverwendung",[1978,1991,1992],{},"Volumen",[1994,1995,1996,2014,2030,2045,2060],"tbody",{},[1975,1997,1998,2002,2005,2008,2011],{},[1999,2000,2001],"td",{},"Xtrackers MSCI World ex USA UCITS ETF 1C",[1999,2003,2004],{},"IE0006WW1TQ4",[1999,2006,2007],{},"0,15%",[1999,2009,2010],{},"thesaurierend",[1999,2012,2013],{},">4.700 Mio. €",[1975,2015,2016,2019,2022,2024,2027],{},[1999,2017,2018],{},"Xtrackers MSCI World ex USA UCITS ETF 1D",[1999,2020,2021],{},"IE000Z0FC0G5",[1999,2023,2007],{},[1999,2025,2026],{},"ausschüttend",[1999,2028,2029],{},">4.000 Mio. €",[1975,2031,2032,2035,2038,2040,2042],{},[1999,2033,2034],{},"Amundi MSCI World Ex USA UCITS ETF Acc",[1999,2036,2037],{},"IE00085PWS28",[1999,2039,2007],{},[1999,2041,2010],{},[1999,2043,2044],{},">600 Mio. €",[1975,2046,2047,2050,2053,2055,2057],{},[1999,2048,2049],{},"iShares MSCI World ex-USA UCITS ETF",[1999,2051,2052],{},"IE000R4ZNTN3",[1999,2054,2007],{},[1999,2056,2010],{},[1999,2058,2059],{},">2.000 Mio. €",[1975,2061,2062,2065,2068,2071,2073],{},[1999,2063,2064],{},"UBS MSCI World ex USA UCITS ETF",[1999,2066,2067],{},"LU2807512947",[1999,2069,2070],{},"0,14%",[1999,2072,2010],{},[1999,2074,2075],{},">80 Mio. €",[26,2077,2079],{"id":2078},"praktische-umsetzung","Praktische Umsetzung",[16,2081,2082,2085],{},[58,2083,2084],{},"Für Neueinsteiger:"," Wer frisch anlegt, kann gezielt einen Teil seines Kapitals in einen MSCI World ex USA ETF fließen lassen, statt alles in den überlasteten Standard-Index zu stecken.",[16,2087,2088,2091],{},[58,2089,2090],{},"Für Bestandsanleger:"," Eine vollständige Umschichtung löst Steuerpflicht aus und ist meist nicht sinnvoll. Stattdessen kann ein schrittweiser Ausgleich erfolgen:",[62,2093,2094,2097,2100],{},[65,2095,2096],{},"Neue Sparraten in den ex-USA-ETF",[65,2098,2099],{},"Gezielte Teilverkäufe des MSCI World, falls steuerlich vertretbar",[65,2101,2102],{},"Ziel: Ein Verhältnis, das dem tatsächlichen Welt-BSP besser entspricht",[16,2104,2105,2108],{},[58,2106,2107],{},"Die ideale Mischung?"," Viele Anleger landen bei einer Kombination wie:",[62,2110,2111,2114,2117],{},[65,2112,2113],{},"50% MSCI World (für globale Basis)",[65,2115,2116],{},"20% MSCI World ex USA (Anti-Klumpen-Gegengewicht)",[65,2118,2119],{},"30% Emerging Markets (für tatsächliche weltweite Abdeckung)",[16,2121,2122],{},"Diese Aufteilung reduziert den USA-Anteil auf ca. 35-40% und eliminiert gleichzeitig den Magnificent-Seven-Klumpen weitgehend.",[26,2124,536],{"id":535},[16,2126,2127],{},"Der MSCI World Index bleibt eine praktische Einstiegslösung – aber er ist eben kein echter Weltindex. Die extreme USA-Konzentration und die Dominanz weniger Tech-Giganten schaffen Klumpenrisiken, die der Markt nicht vergütet.",[16,2129,2130],{},"Der MSCI World ex USA Index bietet eine überraschend einfache Möglichkeit, dieses Problem anzugehen. Ohne komplexe Rebalancing-Strategien oder teure aktiv gemanagte Fonds lässt sich das Depot-Exposure diversifizieren.",[16,2132,2133],{},"Es geht nicht darum, gegen die USA oder gegen Tech zu wetten. Es geht darum, das Portfolio näher an eine tatsächlich breite weltweite Streuung heranzuführen – und damit Risiken zu reduzieren, für die es keine Prämie gibt.",[16,2135,2136],{},[36,2137,2138],{},"Basierend auf dem Artikel \"Klumpt nicht: MSCI World ex USA\" von Prof. Dr. Hartmut Walz",{"title":201,"searchDepth":310,"depth":311,"links":2140},[2141,2142,2143,2148,2149],{"id":1864,"depth":310,"text":1865},{"id":1889,"depth":310,"text":1890},{"id":1907,"depth":310,"text":1908,"children":2144},[2145,2146,2147],{"id":1911,"depth":311,"text":1912},{"id":1918,"depth":311,"text":1919},{"id":1942,"depth":311,"text":1943},{"id":2078,"depth":310,"text":2079},{"id":535,"depth":310,"text":536},"Warum der klassische MSCI World Index zunehmend problematisch wird und wie Anleger mit einer einfachen Strategie Klumpenrisiken reduzieren können.","images/msci-world-ex-usa-entklumpung.svg",{},"/blog/finance/2026-03-01-msci-world-ex-usa-entklumpung",{"title":1853,"description":2150},"blog/finance/2026-03-01-msci-world-ex-usa-entklumpung",[2157,2158,2159,2160,2161,2162],"etf","investing","msci-world","diversification","portfolio","magnificent-seven","s6A2bmQuhVRvZilRi3_TB2a7HkJVktj1TFUPJ8uLmTY",{"id":2165,"title":2166,"author":7,"body":2167,"category":322,"date":2408,"description":2409,"extension":325,"featured":326,"image":2410,"meta":2411,"navigation":326,"path":2412,"seo":2413,"stem":2414,"tags":2415,"__hash__":2420},"blog/blog/finance/2026-02-20-wie-man-einen-finanz-agenten-baut.md","Wie man einen Finanz-Agenten baut",{"type":9,"value":2168,"toc":2399},[2169,2172,2175,2178,2181,2184,2191,2194,2198,2201,2204,2207,2210,2218,2221,2224,2227,2230,2233,2236,2242,2246,2249,2252,2255,2261,2267,2271,2274,2277,2280,2287,2291,2294,2297,2302,2305,2311,2317,2320,2323,2326,2330,2333,2336,2339,2342,2345,2351,2355,2358,2361,2364,2370,2373,2376,2380,2387,2390,2393],[12,2170,2166],{"id":2171},"wie-man-einen-finanz-agenten-baut",[16,2173,2174],{},"Es ist 16:01 Uhr in New York und NVIDIA hat gerade nach Börsenschluss seine Quartalszahlen veröffentlicht.",[16,2176,2177],{},"Ich öffne einen Haufen Tabs, um die Ergebnisse mit den Analystenschätzungen zu vergleichen, lese den 10-K-Bericht nach der Zukunftsprognose des Managements, prüfe aktuelle Form-4-Meldungen auf Insideraktivitäten vor der Veröffentlichung und scanne Finanznachrichtenseiten nach Analystenreaktionen und der Marktstimmung.",[16,2179,2180],{},"Es gibt sicher elegantere Wege, das alles zu erledigen, aber so mache ich es. An einem guten Tag sind es etwa 30 Minuten Arbeit.",[16,2182,2183],{},"Vor zwei Monaten habe ich einen Agenten namens Dexter als Open Source veröffentlicht, um das schneller zu erledigen. Heute schafft Dexter all das in rund 30 Sekunden — und ist besser darin als ich.",[16,2185,2186],{},[2187,2188],"img",{"alt":2189,"src":2190},"Systemübersicht","images/how-to-build-a-financial-agent/01-system-overview.jpg",[16,2192,2193],{},"Einfach ist schön. Dexters System besteht aus nur fünf Bausteinen: (1) ein LLM, das denkt und Tools auswählt, (2) Tools, die die eigentliche Arbeit erledigen, (3) externe APIs für Live-Daten, (4) ein Scratchpad, das den Zustand hält, und (5) eine Evaluierungsschicht, um alles offline zu testen.",[26,2195,2197],{"id":2196},"_1-die-anfrage-kommt-rein","1. Die Anfrage kommt rein",[16,2199,2200],{},"Das gebe ich in Dexter ein:",[16,2202,2203],{},"„NVIDIA hat gerade die Geschäftszahlen für FY 2025 veröffentlicht. Vergleiche die gemeldeten Ergebnisse mit den Analystenschätzungen der letzten Tage. Zeige Insiderhandelsaktivitäten für das Quartal vor der Veröffentlichung. Hole die Zukunftsprognose des Managements aus dem aktuellsten 10-K (Abschnitt 7, MD&A). Was sagen die Analysten zu den Ergebnissen und wie hat der Markt reagiert?\"",[16,2205,2206],{},"Unsere NVIDIA-Anfrage kommt als User-Prompt an. Dexter erhält außerdem einen System-Prompt, der Beschreibungen aller verfügbaren Tools und Richtlinien zu deren Nutzung enthält.",[16,2208,2209],{},"Im System-Prompt sieht Dexter nur:",[62,2211,2212,2215],{},[65,2213,2214],{},"Drei Subagenten: Finanzsuche, Finanzkennzahlen und einen SEC-Filings-Leser. Jeder enthält ein eigenes inneres LLM, das an spezialisierte Sub-Tools weiterleitet. Mehr dazu weiter unten.",[65,2216,2217],{},"Zwei direkte Tools: Web-Browsing und Datei-Browsing.",[16,2219,2220],{},"Beachte, wie klein Dexters „Entscheidungsraum\" ist. Er sieht nur 5 Tools. Das ist eine bewusste Designentscheidung, die ich nach einigen Wochen Versuch und Irrtum getroffen habe.",[16,2222,2223],{},"Die erste Version von Dexter legte jeden Endpunkt direkt offen — insgesamt etwa 22. Das LLM konnte „Gewinn- und Verlustrechnungen abrufen\", „Insiderhandel abrufen\", „Analystenschätzungen abrufen\" und ein Dutzend weitere sehen. Manchmal funktionierte es ziemlich gut.",[16,2225,2226],{},"Bis es das nicht mehr tat.",[16,2228,2229],{},"Das Modell rief den richtigen Endpunkt für einen Ticker auf, vergaß aber, ihn für einen anderen erneut aufzurufen. Es holte Finanzkennzahlen, wenn es Gewinn- und Verlustrechnungen brauchte. Es übergab das falsche Datumsformat, weil es mit zu vielen Parameter-Schemas gleichzeitig jonglierte. Bei komplexen Anfragen, die mehrere Rechercheschritte erforderten, wurden die Probleme noch schlimmer.",[16,2231,2232],{},"Warum passierte das? Dexters Entscheidungsraum war zu groß.",[16,2234,2235],{},"Zurück zu unserer NVIDIA-Anfrage: Wenn Dexter unsere Anfrage liest, erkennt sein LLM vier separate Aufgaben: Ergebnisse vs. Schätzungen, Insiderhandel, 10-K-Zukunftsprognose und Marktreaktion. Anstatt das gesamte Abrufen und Berechnen selbst zu erledigen, übergibt Dexter diese Arbeit an seine Subagenten.",[16,2237,2238],{},[2187,2239],{"alt":2240,"src":2241},"Anfrage-Routing","images/how-to-build-a-financial-agent/02-query-enters.jpg",[26,2243,2245],{"id":2244},"_2-subagenten","2. Subagenten",[16,2247,2248],{},"Ein Subagent ist ein „Meta-Tool\", das sein eigenes LLM und eine eigene agentische Schleife besitzt. Wenn das äußere LLM den Finanzsuche-Subagenten mit „NVIDIA-Ergebnisse vs. Analystenschätzungen und Insideraktivitäten im letzten Quartal\" aufruft, übergibt es die Frage an einen kleineren, spezialisierten Agenten. Dieses innere LLM sieht unsere Finanz-Endpunkte — Gewinn- und Verlustrechnungen, Analystenschätzungen, Insiderhandel usw. — und wählt die richtigen aus. Anders als Dexters Haupt-LLM ist dieser Subagent fokussiert. Er hat eine einzige Aufgabe: auf Finanzdaten zugreifen.",[16,2250,2251],{},"Für unsere NVIDIA-Ergebnisanfrage wählt der Finanzsuche-Subagent Analystenschätzungen für NVDA und Insiderhandel für NVDA aus und setzt Datumsfilter für die letzten Tage. Für Geschwindigkeit führt er diese API-Aufrufe parallel aus.",[16,2253,2254],{},"Der Filings-Reader-Subagent funktioniert anders. Statt Tools parallel auszuführen, verkettet er zwei LLM-Aufrufe nacheinander. Der erste identifiziert, welches Filing geholt werden soll (Ticker, Filing-Typ, Datumsbereich). Der zweite extrahiert die Abschnitte, die wir brauchen. Anderer Subagent, andere Architektur, gleiches Muster: spezialisierter Agent, fokussierte Aufgabe.",[16,2256,2257],{},[2187,2258],{"alt":2259,"src":2260},"Subagenten-Architektur","images/how-to-build-a-financial-agent/03-subagents.jpg",[16,2262,2263,2266],{},[58,2264,2265],{},"Zentrale Erkenntnis:"," Subagenten ermöglichen es uns, spezifische Arbeitstypen zu kapseln — wie das Abrufen von Finanzdaten oder das Lesen von SEC-Filings. Subagenten können so angepasst werden, dass sie Experten für die Aufgabe(n) sind, für die sie bestimmt sind. Manche haben agentische Schleifen, andere sind einfacher und rufen LLMs sequenziell auf. Das Schöne daran ist, dass wir so viele bauen können, wie wir wollen. Das äußere LLM routet Aufgaben einfach an die Subagenten — und los geht's.",[26,2268,2270],{"id":2269},"_3-datenabruf","3. Datenabruf",[16,2272,2273],{},"Die wichtigste Designentscheidung in dieser Schicht: Strukturierte Daten gehen direkt ans LLM — ohne Zusammenfassungsschritt dazwischen. Es gibt keine Middleware, die die Antwort bereinigt oder Schlüsselfelder extrahiert. Das Modell sieht die rohe API-Ausgabe und erledigt die Arbeit selbst.",[16,2275,2276],{},"Das ist wichtig, weil es das System einfach und das Modell ehrlich hält. Analystenschätzungen kommen als Arrays mit Feldern wie geschätztem EPS, tatsächlichem EPS und Berichtszeitraum an. Insiderhandel kommt mit Transaktionstyp, Anzahl der Aktien, Preis pro Aktie und Meldedatum zurück. Wenn das Modell später schreibt „Insiderverkäufe beliefen sich auf 50.000 Aktien zu einem Durchschnittspreis von 142 $\", liest es aus Live-Daten — nicht aus dem Gedächtnis.",[16,2278,2279],{},"Für Finanzdaten nutzt Dexter die Financial Datasets API (Hinweis: Ich bin der Gründer von FD). Für die Websuche kaskadiert er durch mehrere Anbieter (Exa, Perplexity, Tavily) und fällt auf einen lokalen Browser zurück, wenn keiner konfiguriert ist. Zum Lesen einer bestimmten Webseite gibt es ein schlankes HTTP-Fetch-Tool, das HTML in sauberes Markdown umwandelt — mit einem vollständigen Playwright-basierten Browser als Fallback für JavaScript-lastige Seiten.",[16,2281,2282,2283,2286],{},"Um Kosten zu sparen, haben wir Caching hinzugefügt. Die Logik ist einfach: Cache, was unveränderlich ist, überspringe, was es nicht ist. SEC-Filings sind rechtlich unveränderlich — kein Grund, sie zweimal abzurufen. Die Gewinn- und Verlustrechnung des letzten Quartals ist ebenfalls unveränderlich. Der aktuelle Kurs-Snapshot ist es nicht. Der Cache liegt in ",[199,2284,2285],{},".dexter/cache/"," als menschenlesbare JSON-Dateien, was das Debugging schmerzfrei macht.",[26,2288,2290],{"id":2289},"_4-das-scratchpad","4. Das Scratchpad",[16,2292,2293],{},"Während Dexter an unserer Aufgabe arbeitet, ruft er Subagenten und Tools auf und sammelt Kontext. All dieser Kontext landet an einem Ort: dem Scratchpad.",[16,2295,2296],{},"Das Scratchpad ist eine Append-Only-JSON-Datei auf der Festplatte. Es ist die einzige Wahrheitsquelle für alles, was Dexter bei der Bearbeitung unserer Anfrage gelernt hat.",[16,2298,2299],{},[2187,2300],{"alt":1533,"src":2301},"images/how-to-build-a-financial-agent/04-scratchpad.jpg",[16,2303,2304],{},"Warum eine Datei und nicht einfach eine Variable im Speicher? Zwei Gründe:",[16,2306,2307,2310],{},[58,2308,2309],{},"Debugging."," Frühe Versionen speicherten Tool-Ergebnisse nur im Speicher. Dexter gab eine seltsame Antwort, ich wollte nachschauen, was er tatsächlich gesehen hatte — und die Daten waren weg. Mit JSONL auf der Festplatte wird jedes Tool-Ergebnis für immer persistiert. Ich kann die Datei nach einem Lauf öffnen, Zeile für Zeile lesen und genau sehen, was passiert ist.",[16,2312,2313,2316],{},[58,2314,2315],{},"Resilienz."," Dexter macht Netzwerkaufrufe, die fehlschlagen können, und ein CLI-Prozess kann mitten im Lauf abstürzen oder beendet werden. Wenn Tool-Ergebnisse nur im Speicher leben, bedeutet ein Absturz: von vorne anfangen. Mit dem Scratchpad auf der Festplatte überlebt die Arbeit den Prozess. Außerdem kann ich unvollständige Läufe inspizieren: Wenn Dexter bei Iteration 6 ein Timeout hatte, kann ich trotzdem sehen, was er bis Iteration 5 gesammelt hat.",[16,2318,2319],{},"Nach der Bearbeitung unserer NVIDIA-Anfrage enthält das Scratchpad nun fünf Ergebnisse: aktuelle Finanzergebnisse, Analystenschätzungen, Insiderhandel, Abschnitt 7 des 10-K und Web-Suchergebnisse. Etwa 15.000 Token. Weit entfernt vom Kontextlimit.",[16,2321,2322],{},"Aber stell dir eine größere Anfrage vor: „Analysiere Risikofaktoren über NVIDIAs letzte drei 10-Ks und vergleiche, wie sie sich verändert haben.\" Drei vollständige Risikofaktor-Abschnitte könnten allein über 50.000 Token Filing-Text übersteigen. Hier stieß ich auf meine erste echte Skalierungsgrenze. Ohne Leitplanken stopfte Dexter seine gesamte Historie in den Prompt, sprengte das Kontextfenster und brach mit einem Fehler ab.",[16,2324,2325],{},"Die Lösung ist Context Compaction: Nach jeder Runde von Subagent- und Tool-Aufrufen schätzt Dexter die Gesamtanzahl der Token. Überschreitet sie einen Schwellenwert (z.B. 100.000), werden die ältesten Tool-Ergebnisse aus dem aktiven Prompt entfernt — nur die 5 aktuellsten bleiben. Die JSONL-Datei auf der Festplatte wird nie angetastet. Compaction findet nur im Speicher statt. Dexter arbeitet mit einem kleineren Fenster weiter, und die vollständige Historie ist immer noch da, wenn wir sie brauchen.",[26,2327,2329],{"id":2328},"_5-die-finale-antwort","5. Die finale Antwort",[16,2331,2332],{},"Während der Schleife ist das LLM ein Entdecker: Es entscheidet, wonach als Nächstes gesucht wird. Wenn es aufhört, Tools anzufordern, ist es fertig und bereit zu antworten. In diesem Moment wechseln wir zu einem vollständig separaten LLM-Aufruf für die finale Antwort. Dieser zweite Aufruf erhält die ursprüngliche Anfrage plus jedes Tool-Ergebnis aus dem Scratchpad — einschließlich der Ergebnisse, die während der Context Compaction entfernt wurden.",[16,2334,2335],{},"Warum ein separater Aufruf?",[16,2337,2338],{},"Ich habe versucht, dasselbe LLM, das die Erkundung durchführt, auch die Antwort schreiben zu lassen. Das Problem war subtil: Das Modell verankerte sich an dem, was es zuletzt abgerufen hatte. Wenn der letzte Tool-Aufruf Insiderhandel zurückgab, begann die Antwort mit Insiderhandel und vergrub den Ergebnisvergleich — obwohl die Ergebnisse das Erste waren, wonach ich gefragt hatte.",[16,2340,2341],{},"Die Trennung der beiden Rollen löste das Problem. Der Entdecker sammelt. Der Antwortgenerator schreibt. Der Antwortgenerator sieht alles, was der Entdecker gefunden hat, und strukturiert die Antwort um meine ursprüngliche Frage herum — nicht um das, was zufällig als Letztes zurückkam.",[16,2343,2344],{},"Für unsere NVIDIA-Anfrage enthält die finale Antwort einen Ergebnisvergleich (gemeldet vs. Konsens), Insiderhandelsaktivitäten, zukunftsgerichtete Aussagen aus Abschnitt 7 und eine Synthese der Analystenreaktionen. Alles mit Quell-URLs.",[16,2346,2347],{},[2187,2348],{"alt":2349,"src":2350},"Finale Antwort","images/how-to-build-a-financial-agent/05-final-answer.jpg",[26,2352,2354],{"id":2353},"_6-evaluierung","6. Evaluierung",[16,2356,2357],{},"Nichts von alledem zählt, wenn die Antworten falsch sind.",[16,2359,2360],{},"Das ist der Teil, den viele Leute überspringen, wenn sie einen Finanzagenten bauen. Fairerweise hätte ich ihn fast selbst übersprungen. Die ersten paar Wochen habe ich Dexter „evaluiert\", indem ich ihm Fragen stellte und die Ausgabe las. Wenn es richtig aussah, machte ich weiter. Dann änderte ich eines Tages zwei Wörter in einer Tool-Beschreibung, und Dexter fing an, Quartals- und Jahresumsätze zu verwechseln. Ich bemerkte es drei Tage lang nicht. Und das war das letzte Mal, dass ich Evals auf Gefühl machte.",[16,2362,2363],{},"Dexter führt jetzt Evaluierungen offline durch, mit einem Datensatz aus Finanzfragen gepaart mit erwarteten Antworten. Jede Frage bekommt eine frische Agenteninstanz. Der Agent läuft, produziert eine Antwort, und ein separates LLM-als-Richter bewertet sie auf einer Skala von 0 bis 1. Ergebnisse werden in LangSmith protokolliert, um sie über die Zeit zu verfolgen.",[16,2365,2366],{},[2187,2367],{"alt":2368,"src":2369},"Evaluierungsdaten","images/how-to-build-a-financial-agent/06-eval-data.jpg",[16,2371,2372],{},"Die Bewertungsrubrik prüft spezifische Fakten: die richtigen Zahlen, das richtige Jahr, den richtigen Filing-Abschnitt. Aber sie prüft auch auf Widersprüche — Fälle, in denen die Antwort bekannten Daten widerspricht. Das fängt eine Fehlerklasse ab, die ich als wirklich problematisch empfinde: Dexter hat das richtige Tool aufgerufen, aber die Daten falsch gelesen, oder ein Subagent hat das falsche Sub-Tool gewählt und Dexters Haupt-LLM hat aus unvollständigen Ergebnissen halluziniert. Die Antwort liest sich richtig. Der Agent klingt selbstbewusst. Aber die Zahlen stimmen nicht. Ohne Evals rutschen diese durch.",[16,2374,2375],{},"Ich führe Evals vor jeder Änderung am System-Prompt, an Tool-Beschreibungen oder an der Routing-Logik durch. Man ändert den System-Prompt dutzende Male beim Bau eines Agenten. Das habe ich. Man braucht Evals. Sonst rät man nur, ob eine Änderung geholfen oder geschadet hat.",[26,2377,2379],{"id":2378},"abschließender-gedanke","Abschließender Gedanke",[16,2381,2382,2383,2386],{},"Meine wichtigste Erkenntnis aus drei Jahren Agenten-Entwicklung: Halte die Dinge einfach. Der schwierigste Teil beim Bau von Dexter war die Entscheidung, was Dexter ",[36,2384,2385],{},"nicht"," tun sollte.",[16,2388,2389],{},"Was früher 30 Minuten Tab-Jonglieren, Fehlinterpretation von Filings und Kampf mit Pop-ups auf miserablen Finanznachrichtenseiten war, ist jetzt eine 30-Sekunden-Aufgabe. Fünf Tool-Aufrufe, ein Scratchpad und eine saubere finale Antwort mit Quellen. Ein einfaches, aber leistungsstarkes agentisches System.",[16,2391,2392],{},"Wenn du eine Sache aus diesem Artikel mitnimmst, hoffe ich, es ist diese: Bevorzuge einfache Architekturen und lass das Modell die Arbeit machen.",[16,2394,2395,2396],{},"Der Dexter-Code ist hier: ",[769,2397,1812],{"href":1812,"rel":2398},[773],{"title":201,"searchDepth":310,"depth":311,"links":2400},[2401,2402,2403,2404,2405,2406,2407],{"id":2196,"depth":310,"text":2197},{"id":2244,"depth":310,"text":2245},{"id":2269,"depth":310,"text":2270},{"id":2289,"depth":310,"text":2290},{"id":2328,"depth":310,"text":2329},{"id":2353,"depth":310,"text":2354},{"id":2378,"depth":310,"text":2379},"2026-02-20T00:00:00.000Z","Eine Schritt-für-Schritt-Anleitung zum Aufbau eines KI-gestützten Finanzagenten — von Subagenten und Tool-Routing bis hin zu Scratchpads und Evaluierungen.","images/wie-man-einen-finanz-agenten-baut.svg",{},"/blog/finance/2026-02-20-wie-man-einen-finanz-agenten-baut",{"title":2166,"description":2409},"blog/finance/2026-02-20-wie-man-einen-finanz-agenten-baut",[2416,2417,2418,1848,2419],"ki-agenten","finanzen","llm","architektur","Y5lPEMlTvIwS8P9O_CFBs5FNQxznPGxyapWNm9AKxn0",{"id":2422,"title":2423,"author":7,"body":2424,"category":554,"date":2574,"description":2575,"extension":325,"featured":326,"image":2576,"meta":2577,"navigation":326,"path":2578,"seo":2579,"stem":2580,"tags":2581,"__hash__":2584},"blog/blog/ai/2026-02-19-ai-weekly-recap-w08.md","AI Weekly Recap: Sonnet 4.6, Alibaba's Qwen3.5, and the Global South Takes Center Stage",{"type":9,"value":2425,"toc":2563},[2426,2429,2432,2436,2439,2442,2446,2449,2452,2456,2459,2462,2466,2469,2472,2475,2479,2482,2485,2488,2492,2495,2498,2501,2505,2508,2511,2514,2518,2521,2524,2528,2560],[12,2427,2423],{"id":2428},"ai-weekly-recap-sonnet-46-alibabas-qwen35-and-the-global-south-takes-center-stage",[16,2430,2431],{},"Last week was about the big launches — Opus 4.6, GPT-5.3-Codex, and the SaaS shock. This week the dust started to settle, but the pace didn't. Anthropic shipped Sonnet 4.6, Alibaba fired back with Qwen3.5, China's AI labs went on a release spree, India opened the first major AI summit in the Global South, and Big Tech collectively pledged $650 billion in AI infrastructure. Here's what mattered.",[26,2433,2435],{"id":2434},"anthropic-ships-claude-sonnet-46","Anthropic Ships Claude Sonnet 4.6",[16,2437,2438],{},"Two weeks after dropping Opus 4.6, Anthropic followed up with Sonnet 4.6. The pitch: near-Opus-level intelligence at Sonnet pricing. Early reports point to meaningful improvements in multi-step coding, financial analysis, and computer use — with some users describing the computer use capability as approaching human-level.",[16,2440,2441],{},"This is a deliberate compression play. Frontier capabilities are trickling down to lower price tiers faster than ever. If Sonnet can do 90% of what Opus does at a fraction of the cost, most developers and businesses won't need the top tier. That's good for adoption, and it puts pressure on every competitor's pricing model.",[26,2443,2445],{"id":2444},"alibaba-drops-qwen35","Alibaba Drops Qwen3.5",[16,2447,2448],{},"Alibaba released Qwen3.5 on February 17, a 397-billion-parameter open-weight model with new agentic capabilities. Self-reported benchmarks put it on par with the leading models from OpenAI, Anthropic, and Google DeepMind.",[16,2450,2451],{},"The \"self-reported\" part deserves skepticism — it always does. But the broader signal is real: the gap between Chinese and Western frontier models is narrowing fast. A year ago, these labs were playing catch-up. Now they're launching within days of each other and competing on the same benchmarks. The open-weight approach also means Qwen3.5 will spread quickly through the developer ecosystem.",[26,2453,2455],{"id":2454},"chinas-ai-labs-go-on-a-release-spree","China's AI Labs Go on a Release Spree",[16,2457,2458],{},"Alibaba wasn't alone. Zhipu AI released GLM-5, a 128-billion-parameter open-source model built for coding and agentic tasks — and they claim it was trained entirely on domestic Chinese chips, not NVIDIA hardware. If true, that's a significant milestone for China's semiconductor independence story.",[16,2460,2461],{},"ByteDance launched Seedance 2.0 for video generation, and Kuaishou unveiled Kling 3.0 as a multimodal model. The Chinese AI ecosystem isn't just keeping up — it's shipping at a pace that makes Silicon Valley's release cadence look measured.",[26,2463,2465],{"id":2464},"openai-codex-spark-retirements-and-trademark-trouble","OpenAI: Codex-Spark, Retirements, and Trademark Trouble",[16,2467,2468],{},"OpenAI had a busy week too. GPT-5.3-Codex-Spark launched as a research preview — an ultra-fast coding model built in partnership with Cerebras, delivering over 1,000 tokens per second. Unlike the full Codex model designed for autonomous long-running tasks, Spark is optimized for rapid iteration: quick edits, instant feedback, real-time pair programming.",[16,2470,2471],{},"The legacy cleanup continued. OpenAI officially retired GPT-4o, GPT-4.1, GPT-4.1 mini, o4-mini, and the GPT-5 Instant and Thinking variants from ChatGPT. The model graveyard grows.",[16,2473,2474],{},"In less glamorous news, OpenAI has been temporarily blocked from using the word \"Cameo\" in a product due to a trademark dispute. Between this and the Jony Ive device delay, their non-model efforts keep hitting legal walls.",[26,2476,2478],{"id":2477},"india-hosts-the-first-global-ai-impact-summit","India Hosts the First Global AI Impact Summit",[16,2480,2481],{},"India opened the AI Impact Summit 2026 in New Delhi this week — the first major global AI conference held in the Global South. Around 100 countries are represented, with leaders like Sundar Pichai and Sam Altman in attendance.",[16,2483,2484],{},"Prime Minister Modi inaugurated the India AI Impact Expo, showcasing 12 new AI models built by Indian companies and trained for local languages and real-world problems. India also projected over $200 billion in AI investments over the next two years.",[16,2486,2487],{},"Sam Altman told the conference that the world \"urgently\" needs to regulate the fast-evolving technology. Coming from the CEO of the company that just started putting ads in ChatGPT, the call for regulation carries a certain irony — but he's not wrong.",[26,2489,2491],{"id":2490},"big-tech-pledges-650-billion-in-ai-infrastructure","Big Tech Pledges $650 Billion in AI Infrastructure",[16,2493,2494],{},"Google, Amazon, Meta, and Microsoft announced the largest collective capital spending plan in history — roughly $650 billion in AI infrastructure for 2026. Amazon alone is planning $200 billion.",[16,2496,2497],{},"The market's reaction? Their combined market cap dropped over $950 billion. Investors aren't questioning whether AI works — they're questioning whether the returns will justify the spend. It's the classic infrastructure dilemma: someone has to build the roads, but roads don't always pay for themselves.",[16,2499,2500],{},"Meta and NVIDIA also announced a multi-year strategic partnership, with Meta adopting NVIDIA's Vera Rubin platform for next-generation clusters and Spectrum-X Ethernet networking.",[26,2502,2504],{"id":2503},"googles-responsible-ai-report-and-new-regulations","Google's Responsible AI Report and New Regulations",[16,2506,2507],{},"Google published its 2026 Responsible AI Progress Report, highlighting work across product development, scientific discovery, and healthcare. The report leans into the idea that agentic AI systems are about to dramatically boost productivity — a claim that's both exciting and vague enough to mean almost anything.",[16,2509,2510],{},"On the regulation front, India's new IT Rules take effect February 20, requiring platforms to label AI-generated audio and video and remove illegal content within three hours. Heavy penalties for non-compliance. It's one of the most concrete and enforceable AI content regulations we've seen from a major economy.",[16,2512,2513],{},"Meanwhile in the US, federal agencies are reviewing state-level AI rules with a deadline of March 2026, with the goal of preempting overly restrictive state legislation like California's proposed AI hiring law.",[26,2515,2517],{"id":2516},"mozilla-launches-one-click-ai-privacy-tool","Mozilla Launches One-Click AI Privacy Tool",[16,2519,2520],{},"Mozilla shipped a new privacy feature in Firefox that lets users opt out of and delete their data from AI training datasets with a single click. It's part of their broader \"Trustworthy AI\" initiative.",[16,2522,2523],{},"This is a small but meaningful move. Most people have no idea their data is being used for training, and even fewer know how to opt out. Making it one click removes the biggest barrier: friction. Expect other browsers to follow — or face pressure to.",[26,2525,2527],{"id":2526},"quick-hits","Quick Hits",[62,2529,2530,2536,2542,2548,2554],{},[65,2531,2532,2535],{},[58,2533,2534],{},"UK"," announced major funding for global AI access, including an African Language Hub supporting 40 languages and reaching 700 million people, plus a compute hub in Cape Town.",[65,2537,2538,2541],{},[58,2539,2540],{},"Deutsche Bank"," reports 85% of developers now use AI coding assistants with up to 60% productivity gains — and notes that software development itself may be the sector most exposed to AI disruption.",[65,2543,2544,2547],{},[58,2545,2546],{},"OpenAI"," hired Peter Steinberger, creator of OpenClaw, the viral open-source AI agent. The talent war is shifting from researchers to agent-infrastructure builders.",[65,2549,2550,2553],{},[58,2551,2552],{},"Anthropic"," donated the Model Context Protocol (MCP) to the Linux Foundation. OpenAI, Microsoft, and Google are now all using it — a rare moment of industry convergence.",[65,2555,2556,2559],{},[58,2557,2558],{},"Safety concerns"," continue to simmer. Prominent researchers from multiple labs publicly flagged that capabilities are outpacing safety work. Dario Amodei described being \"just a few years away from a country of geniuses in a data center.\"",[16,2561,2562],{},"That's the week. The frontier models keep getting cheaper and faster, the infrastructure bets keep getting bigger, and the rest of the world is starting to show up at the table. The real question isn't who has the best model anymore — it's who builds the best system around it.",{"title":201,"searchDepth":310,"depth":311,"links":2564},[2565,2566,2567,2568,2569,2570,2571,2572,2573],{"id":2434,"depth":310,"text":2435},{"id":2444,"depth":310,"text":2445},{"id":2454,"depth":310,"text":2455},{"id":2464,"depth":310,"text":2465},{"id":2477,"depth":310,"text":2478},{"id":2490,"depth":310,"text":2491},{"id":2503,"depth":310,"text":2504},{"id":2516,"depth":310,"text":2517},{"id":2526,"depth":310,"text":2527},"2026-02-19T00:00:00.000Z","The biggest AI stories from the week — Anthropic ships Sonnet 4.6, Alibaba drops Qwen3.5, India hosts the first major AI summit in the Global South, and Big Tech bets $650 billion on infrastructure.","images/ai-weekly-recap-w08.svg",{},"/blog/ai/2026-02-19-ai-weekly-recap-w08",{"title":2423,"description":2575},"blog/ai/2026-02-19-ai-weekly-recap-w08",[563,752,566,2582,2583],"alibaba","india","inGmMHRLPwleyrFWPUXrBWQ0a-y6PI5AJVKat-REKO4",{"id":2586,"title":2587,"author":7,"body":2588,"category":1416,"date":2574,"description":2786,"extension":325,"featured":914,"image":2787,"meta":2788,"navigation":326,"path":2789,"seo":2790,"stem":2791,"tags":2792,"__hash__":2797},"blog/blog/vibe-coding/2026-02-19-scope-codebase-aware-ticket-generation.md","Scope: Generate Implementation-Ready Linear Tickets From Your Codebase",{"type":9,"value":2589,"toc":2776},[2590,2593,2596,2613,2619,2627,2631,2638,2684,2687,2691,2694,2698,2701,2705,2708,2712,2715,2718,2721,2729,2732,2736,2739,2742,2749,2756,2760,2763,2773],[12,2591,2587],{"id":2592},"scope-generate-implementation-ready-linear-tickets-from-your-codebase",[16,2594,2595],{},"If you've worked on a team using Linear (or any issue tracker, really), you've probably lived through this cycle:",[947,2597,2598,2604,2607,2610],{},[65,2599,2600,2601],{},"A PM or engineer writes a ticket: ",[36,2602,2603],{},"\"Add email notifications for orders\"",[65,2605,2606],{},"A developer reads the ticket, opens the codebase, and spends 30 minutes figuring out what files are involved",[65,2608,2609],{},"If the team uses AI tools like Claude Code or Cursor, the agent burns 10K+ tokens just exploring before writing a single line",[65,2611,2612],{},"The feature ships incomplete because the ticket didn't mention the three existing models that needed callbacks, the notification preference system that should have been wired in, or the admin endpoints for managing templates",[16,2614,2615,2616],{},"The gap between product intent and engineering execution is where most teams lose time. Not in the coding — in the clarification loops. ",[36,2617,2618],{},"\"Where does this live in the codebase?\" \"What models are affected?\" \"Does this need a migration?\" \"What about the existing notification system?\"",[16,2620,2621,2626],{},[769,2622,2625],{"href":2623,"rel":2624},"https://usescope.dev",[773],"Scope"," is a tool built to eliminate that gap. You connect your GitHub repo, describe a feature in plain English, and it generates Linear-ready tickets loaded with implementation context.",[26,2628,2630],{"id":2629},"what-implementation-ready-actually-means","What \"Implementation-Ready\" Actually Means",[16,2632,2633,2634,2637],{},"A typical Linear issue has a title and a human-written description. Scope generates tickets with ",[58,2635,2636],{},"32 structured fields",", including:",[62,2639,2640,2654,2660,2666,2672,2678],{},[65,2641,2642,2645,2646,2649,2650,2653],{},[58,2643,2644],{},"Exact files to create and modify"," — not \"update the backend,\" but ",[199,2647,2648],{},"app/services/order_notification_service.rb"," (create), ",[199,2651,2652],{},"app/models/order.rb"," (modify)",[65,2655,2656,2659],{},[58,2657,2658],{},"Related entities and endpoints"," — which data models are involved and how they connect",[65,2661,2662,2665],{},[58,2663,2664],{},"Schema changes"," — what migrations are needed",[65,2667,2668,2671],{},[58,2669,2670],{},"Dependencies"," — which tickets must ship first and why",[65,2673,2674,2677],{},[58,2675,2676],{},"Acceptance criteria"," — verifiable conditions, not vague \"it should work\"",[65,2679,2680,2683],{},[58,2681,2682],{},"Implementation plan"," — ordered steps within each ticket",[16,2685,2686],{},"You can export these directly to Linear via CSV import or copy as Markdown.",[26,2688,2690],{"id":2689},"how-it-works-under-the-hood","How It Works Under the Hood",[16,2692,2693],{},"When you connect your GitHub repo, Scope runs a three-layer analysis:",[607,2695,2697],{"id":2696},"_1-tree-sitter-ast-parsing","1. Tree-sitter AST Parsing",[16,2699,2700],{},"Scope extracts entities, endpoints, relationships, and routes from your actual code using deterministic AST parsing. No AI involved at this stage — just fast, reliable static analysis. It supports Ruby, Python, TypeScript, Go, Rust, and more.",[607,2702,2704],{"id":2703},"_2-dependency-graph-pagerank","2. Dependency Graph + PageRank",[16,2706,2707],{},"It builds a graph of how your code connects and ranks symbols by importance using PageRank. When you ask for a feature, Scope already knows which services are central to your architecture and which are peripheral.",[607,2709,2711],{"id":2710},"_3-llm-semantic-interpretation","3. LLM Semantic Interpretation",[16,2713,2714],{},"Claude Sonnet interprets the structural data to understand what your code does in business terms — what patterns it follows, what conventions to respect. This is where raw code structure becomes actionable project context.",[16,2716,2717],{},"This analysis runs once and produces a living model of your codebase. Scope never stores your source code — just the extracted metadata. When you generate tickets later, it pulls the relevant files from GitHub in real-time so tickets always reflect your current code.",[16,2719,2720],{},"Then you describe what you want:",[2722,2723,2724],"blockquote",{},[16,2725,2726],{},[36,2727,2728],{},"\"Add transactional email notifications for order lifecycle events, budget alerts, and supplier connections.\"",[16,2730,2731],{},"And Scope decomposes that into ordered, dependency-aware tickets with full codebase context baked in.",[26,2733,2735],{"id":2734},"why-this-matters-for-ai-assisted-development","Why This Matters for AI-Assisted Development",[16,2737,2738],{},"This is where Scope gets particularly interesting for vibe coding workflows.",[16,2740,2741],{},"If your developers use Claude Code, Cursor, or Codex, the biggest time sink isn't writing code — it's the AI agent exploring your codebase to build context before it can do anything useful. Scope short-circuits that entirely.",[16,2743,2744,2745,2748],{},"It also exposes ",[58,2746,2747],{},"12 MCP tools"," that let an AI agent pull ticket context, entity details, and dependency information directly while coding. The agent doesn't explore your codebase blind — it already knows the architecture.",[16,2750,2751,2752,2755],{},"The creator dogfooded this on their own project: two sentences generated 5 ordered tickets. Claude Code executed them and produced ",[58,2753,2754],{},"42 files, 5 services, 72 tests, and a full GraphQL API"," — with zero human steering during implementation. The callbacks, lifecycle hooks, and integration points that AI normally misses were all captured in the ticket decomposition.",[26,2757,2759],{"id":2758},"the-bigger-picture","The Bigger Picture",[16,2761,2762],{},"Vibe coding has shifted the bottleneck. Writing code is fast now. What's slow is the translation layer between \"what we want to build\" and \"a task description detailed enough that a human or AI can actually ship it.\"",[16,2764,2765,2766,2769,2770,635],{},"Tools like Scope suggest a future where the planning phase itself becomes AI-augmented — not by replacing human judgment on ",[36,2767,2768],{},"what"," to build, but by automating the tedious mapping of ",[36,2771,2772],{},"how it connects to what already exists",[16,2774,2775],{},"If your team spends more time clarifying tickets than executing them, this is worth a look.",{"title":201,"searchDepth":310,"depth":311,"links":2777},[2778,2779,2784,2785],{"id":2629,"depth":310,"text":2630},{"id":2689,"depth":310,"text":2690,"children":2780},[2781,2782,2783],{"id":2696,"depth":311,"text":2697},{"id":2703,"depth":311,"text":2704},{"id":2710,"depth":311,"text":2711},{"id":2734,"depth":310,"text":2735},{"id":2758,"depth":310,"text":2759},"Scope reads your codebase and turns plain-English feature descriptions into Linear-ready tickets with full implementation context — files to modify, schema changes, dependencies, and acceptance criteria.","images/scope-codebase-aware-tickets.svg",{},"/blog/vibe-coding/2026-02-19-scope-codebase-aware-ticket-generation",{"title":2587,"description":2786},"blog/vibe-coding/2026-02-19-scope-codebase-aware-ticket-generation",[2793,1428,2794,2795,2796],"ai-assisted","developer-experience","linear","project-management","Tiro1hHnbd0vkk4Bp7-sk8LUeUF2LSCnwzbWn-mFmwU",{"id":2799,"title":2800,"author":7,"body":2801,"category":554,"date":3213,"description":3214,"extension":325,"featured":326,"image":3215,"meta":3216,"navigation":326,"path":3217,"seo":3218,"stem":3219,"tags":3220,"__hash__":3223},"blog/blog/ai/getting-started-with-llms.md","Getting Started with Large Language Models",{"type":9,"value":2802,"toc":3203},[2803,2806,2809,2813,2816,2823,2837,2841,2845,2848,3109,3113,3116,3142,3146,3149,3166,3170,3190,3194,3197,3200],[12,2804,2800],{"id":2805},"getting-started-with-large-language-models",[16,2807,2808],{},"Large Language Models (LLMs) have transformed how we interact with technology. From code generation to content creation, these models are becoming essential tools for developers and professionals alike.",[26,2810,2812],{"id":2811},"what-is-an-llm","What is an LLM?",[16,2814,2815],{},"An LLM is a neural network trained on vast amounts of text data. It learns patterns in language — grammar, facts, reasoning — and can generate coherent text based on prompts.",[16,2817,2818,2819,2822],{},"The key insight is that ",[58,2820,2821],{},"scale matters",". Models with billions of parameters exhibit emergent capabilities that smaller models simply don't have:",[62,2824,2825,2828,2831,2834],{},[65,2826,2827],{},"Complex reasoning",[65,2829,2830],{},"Code generation",[65,2832,2833],{},"Multi-step problem solving",[65,2835,2836],{},"Cross-domain knowledge transfer",[26,2838,2840],{"id":2839},"how-to-start-building","How to Start Building",[607,2842,2844],{"id":2843},"_1-choose-your-api","1. Choose Your API",[16,2846,2847],{},"The most accessible way to work with LLMs is through APIs:",[192,2849,2853],{"className":2850,"code":2851,"language":2852,"meta":201,"style":201},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","const response = await fetch('https://api.anthropic.com/v1/messages', {\n  method: 'POST',\n  headers: {\n    'Content-Type': 'application/json',\n    'x-api-key': process.env.ANTHROPIC_API_KEY,\n    'anthropic-version': '2023-06-01',\n  },\n  body: JSON.stringify({\n    model: 'claude-sonnet-4-20250514',\n    max_tokens: 1024,\n    messages: [{ role: 'user', content: 'Explain quantum computing simply.' }],\n  }),\n})\n","typescript",[199,2854,2855,2892,2912,2921,2942,2968,2988,2993,3013,3029,3041,3089,3100],{"__ignoreMap":201},[1131,2856,2857,2861,2865,2868,2872,2875,2878,2881,2884,2886,2889],{"class":1133,"line":1134},[1131,2858,2860],{"class":2859},"spNyl","const",[1131,2862,2864],{"class":2863},"sTEyZ"," response ",[1131,2866,2867],{"class":1236},"=",[1131,2869,2871],{"class":2870},"s7zQu"," await",[1131,2873,2874],{"class":1660}," fetch",[1131,2876,2877],{"class":2863},"(",[1131,2879,2880],{"class":1236},"'",[1131,2882,2883],{"class":1141},"https://api.anthropic.com/v1/messages",[1131,2885,2880],{"class":1236},[1131,2887,2888],{"class":1236},",",[1131,2890,2891],{"class":1236}," {\n",[1131,2893,2894,2898,2901,2904,2907,2909],{"class":1133,"line":310},[1131,2895,2897],{"class":2896},"swJcz","  method",[1131,2899,2900],{"class":1236},":",[1131,2902,2903],{"class":1236}," '",[1131,2905,2906],{"class":1141},"POST",[1131,2908,2880],{"class":1236},[1131,2910,2911],{"class":1236},",\n",[1131,2913,2914,2917,2919],{"class":1133,"line":311},[1131,2915,2916],{"class":2896},"  headers",[1131,2918,2900],{"class":1236},[1131,2920,2891],{"class":1236},[1131,2922,2923,2926,2929,2931,2933,2935,2938,2940],{"class":1133,"line":1667},[1131,2924,2925],{"class":1236},"    '",[1131,2927,2928],{"class":2896},"Content-Type",[1131,2930,2880],{"class":1236},[1131,2932,2900],{"class":1236},[1131,2934,2903],{"class":1236},[1131,2936,2937],{"class":1141},"application/json",[1131,2939,2880],{"class":1236},[1131,2941,2911],{"class":1236},[1131,2943,2944,2946,2949,2951,2953,2956,2958,2961,2963,2966],{"class":1133,"line":1673},[1131,2945,2925],{"class":1236},[1131,2947,2948],{"class":2896},"x-api-key",[1131,2950,2880],{"class":1236},[1131,2952,2900],{"class":1236},[1131,2954,2955],{"class":2863}," process",[1131,2957,635],{"class":1236},[1131,2959,2960],{"class":2863},"env",[1131,2962,635],{"class":1236},[1131,2964,2965],{"class":2863},"ANTHROPIC_API_KEY",[1131,2967,2911],{"class":1236},[1131,2969,2970,2972,2975,2977,2979,2981,2984,2986],{"class":1133,"line":1679},[1131,2971,2925],{"class":1236},[1131,2973,2974],{"class":2896},"anthropic-version",[1131,2976,2880],{"class":1236},[1131,2978,2900],{"class":1236},[1131,2980,2903],{"class":1236},[1131,2982,2983],{"class":1141},"2023-06-01",[1131,2985,2880],{"class":1236},[1131,2987,2911],{"class":1236},[1131,2989,2990],{"class":1133,"line":1688},[1131,2991,2992],{"class":1236},"  },\n",[1131,2994,2995,2998,3000,3003,3005,3008,3010],{"class":1133,"line":1693},[1131,2996,2997],{"class":2896},"  body",[1131,2999,2900],{"class":1236},[1131,3001,3002],{"class":2863}," JSON",[1131,3004,635],{"class":1236},[1131,3006,3007],{"class":1660},"stringify",[1131,3009,2877],{"class":2863},[1131,3011,3012],{"class":1236},"{\n",[1131,3014,3015,3018,3020,3022,3025,3027],{"class":1133,"line":1699},[1131,3016,3017],{"class":2896},"    model",[1131,3019,2900],{"class":1236},[1131,3021,2903],{"class":1236},[1131,3023,3024],{"class":1141},"claude-sonnet-4-20250514",[1131,3026,2880],{"class":1236},[1131,3028,2911],{"class":1236},[1131,3030,3031,3034,3036,3039],{"class":1133,"line":1711},[1131,3032,3033],{"class":2896},"    max_tokens",[1131,3035,2900],{"class":1236},[1131,3037,3038],{"class":1148}," 1024",[1131,3040,2911],{"class":1236},[1131,3042,3044,3047,3049,3052,3055,3058,3060,3062,3065,3067,3069,3072,3074,3076,3079,3081,3084,3087],{"class":1133,"line":3043},11,[1131,3045,3046],{"class":2896},"    messages",[1131,3048,2900],{"class":1236},[1131,3050,3051],{"class":2863}," [",[1131,3053,3054],{"class":1236},"{",[1131,3056,3057],{"class":2896}," role",[1131,3059,2900],{"class":1236},[1131,3061,2903],{"class":1236},[1131,3063,3064],{"class":1141},"user",[1131,3066,2880],{"class":1236},[1131,3068,2888],{"class":1236},[1131,3070,3071],{"class":2896}," content",[1131,3073,2900],{"class":1236},[1131,3075,2903],{"class":1236},[1131,3077,3078],{"class":1141},"Explain quantum computing simply.",[1131,3080,2880],{"class":1236},[1131,3082,3083],{"class":1236}," }",[1131,3085,3086],{"class":2863},"]",[1131,3088,2911],{"class":1236},[1131,3090,3092,3095,3098],{"class":1133,"line":3091},12,[1131,3093,3094],{"class":1236},"  }",[1131,3096,3097],{"class":2863},")",[1131,3099,2911],{"class":1236},[1131,3101,3103,3106],{"class":1133,"line":3102},13,[1131,3104,3105],{"class":1236},"}",[1131,3107,3108],{"class":2863},")\n",[607,3110,3112],{"id":3111},"_2-master-prompting","2. Master Prompting",[16,3114,3115],{},"Good prompts are the difference between useful and useless outputs. Key principles:",[62,3117,3118,3124,3130,3136],{},[65,3119,3120,3123],{},[58,3121,3122],{},"Be specific"," — Tell the model exactly what you want",[65,3125,3126,3129],{},[58,3127,3128],{},"Provide context"," — Give relevant background information",[65,3131,3132,3135],{},[58,3133,3134],{},"Use examples"," — Show the format you expect",[65,3137,3138,3141],{},[58,3139,3140],{},"Set constraints"," — Define boundaries for the response",[607,3143,3145],{"id":3144},"_3-build-iteratively","3. Build Iteratively",[16,3147,3148],{},"Start small. Build a simple chatbot, then add features:",[947,3150,3151,3154,3157,3160,3163],{},[65,3152,3153],{},"Basic prompt → response",[65,3155,3156],{},"Conversation history",[65,3158,3159],{},"System prompts for persona",[65,3161,3162],{},"Tool use and function calling",[65,3164,3165],{},"RAG (Retrieval Augmented Generation)",[26,3167,3169],{"id":3168},"common-pitfalls","Common Pitfalls",[62,3171,3172,3178,3184],{},[65,3173,3174,3177],{},[58,3175,3176],{},"Hallucinations"," — LLMs can generate plausible but incorrect information. Always verify critical facts.",[65,3179,3180,3183],{},[58,3181,3182],{},"Token limits"," — Be aware of context window sizes and manage them carefully.",[65,3185,3186,3189],{},[58,3187,3188],{},"Cost management"," — API calls add up. Cache responses and use smaller models where appropriate.",[26,3191,3193],{"id":3192},"whats-next","What's Next?",[16,3195,3196],{},"In upcoming articles, we'll dive deeper into prompt engineering, building RAG systems, and deploying AI-powered applications in production.",[16,3198,3199],{},"The field moves fast, but the fundamentals of working with LLMs remain consistent: clear communication, iterative development, and thoughtful evaluation.",[1393,3201,3202],{},"html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":201,"searchDepth":310,"depth":311,"links":3204},[3205,3206,3211,3212],{"id":2811,"depth":310,"text":2812},{"id":2839,"depth":310,"text":2840,"children":3207},[3208,3209,3210],{"id":2843,"depth":311,"text":2844},{"id":3111,"depth":311,"text":3112},{"id":3144,"depth":311,"text":3145},{"id":3168,"depth":310,"text":3169},{"id":3192,"depth":310,"text":3193},"2026-02-15T00:00:00.000Z","A practical introduction to LLMs — what they are, how they work, and how to start building with them today.","/images/llm-cover.svg",{},"/blog/ai/getting-started-with-llms",{"title":2800,"description":3214},"blog/ai/getting-started-with-llms",[2418,3221,3222],"machine-learning","tutorial","jMptuceH5MHclAJeZsQsVqZsXpp6anw23yYRUFxdSFU",{"id":3225,"title":3226,"author":7,"body":3227,"category":554,"date":3388,"description":3389,"extension":325,"featured":326,"image":3390,"meta":3391,"navigation":326,"path":3392,"seo":3393,"stem":3394,"tags":3395,"__hash__":3397},"blog/blog/ai/2026-02-14-ai-weekly-recap-w07.md","AI Weekly Recap: Ads in ChatGPT, Anthropic's $30B Round, and the SaaS Trillion-Dollar Dip",{"type":9,"value":3228,"toc":3378},[3229,3232,3235,3239,3242,3245,3248,3252,3255,3258,3261,3265,3268,3271,3274,3278,3281,3284,3287,3291,3294,3297,3300,3304,3307,3310,3314,3317,3320,3323,3325,3375],[12,3230,3226],{"id":3231},"ai-weekly-recap-ads-in-chatgpt-anthropics-30b-round-and-the-saas-trillion-dollar-dip",[16,3233,3234],{},"What a week. OpenAI started testing ads in ChatGPT, Anthropic countered with a $30 billion funding round and a clear \"Claude stays ad-free\" stance, and somehow Claude ended up driving a rover on Mars. Here's everything worth knowing.",[26,3236,3238],{"id":3237},"openai-tests-ads-in-chatgpt","OpenAI Tests Ads in ChatGPT",[16,3240,3241],{},"OpenAI is officially testing advertisements inside ChatGPT, with privacy controls for users. It's a predictable move given the economics of running frontier models at consumer scale, but it's already drawing criticism. The question is how long the ads stay \"subtle.\"",[16,3243,3244],{},"In other OpenAI news: Deep Research now runs on GPT-5.2 and reportedly found a new result in theoretical physics. GPT-5.3-Codex-Spark launched as a real-time coding model with 15x speed for Pro users, running on a dedicated custom chip. And the legacy spring cleaning has begun — GPT-5, GPT-4, and several variants are being shut down.",[16,3246,3247],{},"OpenAI also accused DeepSeek of distilling US AI models for R1 training, launched a secure ChatGPT version for the US military, and the Jony Ive-designed hardware device got pushed to 2027 due to a trademark lawsuit.",[26,3249,3251],{"id":3250},"anthropic-raises-30-billion-at-380b-valuation","Anthropic Raises $30 Billion at $380B Valuation",[16,3253,3254],{},"Anthropic closed a $30 billion Series G round with a post-money valuation of $380 billion. Not bad for a company that's barely three years old.",[16,3256,3257],{},"The Super Bowl ad paid off — Claude shot into the App Store top 10 right after. The company also launched self-serve enterprise plans so organizations can sign up directly without a sales team, and shipped Cowork on Windows with full feature parity to macOS.",[16,3259,3260],{},"On the people side, a WSJ profile highlighted Amanda Askell, the philosopher shaping Claude's ethics. Meanwhile, safety researcher Mrinank Sharma resigned with a public warning about global AI risks. When the safety researcher leaves because things feel too risky, that's worth paying attention to.",[26,3262,3264],{"id":3263},"new-models-claude-opus-46-and-gpt-53-codex","New Models: Claude Opus 4.6 and GPT-5.3 Codex",[16,3266,3267],{},"Claude Opus 4.6 and GPT-5.3 Codex dropped within 20 minutes of each other. Both are extremely strong at coding, but the real story is the capability overhang — these models can already do far more than most people extract from them. Power users leverage 7x more reasoning and analysis capabilities than average users.",[16,3269,3270],{},"Opus 4.6 brings a 1-million-token context window (roughly 1,500 pages of text) and adaptive thinking with effort control. GPT-5.3-Codex is about 25% faster for agentic workflows and reportedly helped build itself.",[16,3272,3273],{},"The action is increasingly happening outside the chat window: better workflows, tool integration, autonomous agents.",[26,3275,3277],{"id":3276},"the-saas-trillion-dollar-dip","The SaaS Trillion-Dollar Dip",[16,3279,3280],{},"The software sector lost a trillion dollars in market cap. Asana, DocuSign, ServiceNow, Salesforce, Adobe, Figma — all in freefall. Even Microsoft dropped 5%.",[16,3282,3283],{},"The trigger? Anthropic's Cowork plugins demonstrated that AI agents can replicate specialized software workflows end-to-end. Productivity, project management, marketing, legal, finance, data, enterprise search, customer support — all covered as continuous workflows instead of tool silos.",[16,3285,3286],{},"The market's fear: if AI models handle standard workflows, why pay for SaaS subscriptions? Not every SaaS tool will disappear, but many will need to redefine their reason for existing. This isn't a random dip — it's a structural shift.",[26,3288,3290],{"id":3289},"super-bowl-goes-all-in-on-ai","Super Bowl Goes All-In on AI",[16,3292,3293],{},"15 of 66 Super Bowl ads came from AI companies — nearly one in four. Anthropic, OpenAI, Google, Amazon, Meta, plus startups like Genspark, Ramp, and Wix. Thirty seconds of airtime costs around $10 million. AI has officially gone mainstream.",[16,3295,3296],{},"But there's a déjà vu here. Four years ago it was crypto. FTX, Crypto.com, Coinbase, eToro — all had Super Bowl spots. Nine months later, FTX collapsed and $32 billion in valuation evaporated.",[16,3298,3299],{},"AI has more substance than crypto did — real use cases, real revenue, hundreds of millions of active users. But there's also a lot of hype. Stay skeptical, use the tools that actually work, and ignore the noise.",[26,3301,3303],{"id":3302},"perplexity-launches-model-council","Perplexity Launches Model Council",[16,3305,3306],{},"Perplexity shipped Model Council, and it's exactly what multi-model workflows needed. You ask a question, it goes to three models in parallel (say, Claude Opus 4.6, GPT-5.2, and Gemini 3.0), a synthesizer model compares the answers, and you get a response with clear markers showing where models agree and where they disagree.",[16,3308,3309],{},"All three agree? Go with it. Contradictions? Now you know where to dig deeper. Every AI model has blind spots. MIT researchers tested math problems — a single model hit about 70% accuracy. Three models debating? 95%. That's the difference between useful and reliable.",[26,3311,3313],{"id":3312},"bytedance-drops-seedance-20","ByteDance Drops Seedance 2.0",[16,3315,3316],{},"ByteDance released Seedance 2.0 in beta, and early tests look impressive. With access to millions of videos for training, the results for UGC content are strong.",[16,3318,3319],{},"The model handles multi-shot storytelling (multiple scenes, same character, consistent style), generates native audio matched to video, delivers 2K resolution with 15-second output, and produces usable results on over 90% of first attempts.",[16,3321,3322],{},"It's currently only available in China on Jimeng AI, but expansion to other platforms is expected by the end of February. It immediately drew pushback though — SAG-AFTRA accused ByteDance of using members' voices and likenesses without permission, and the Motion Picture Association called for it to be shut down over copyright infringement.",[26,3324,2527],{"id":2526},[62,3326,3327,3333,3339,3345,3351,3357,3363,3369],{},[65,3328,3329,3332],{},[58,3330,3331],{},"Google/DeepMind"," upgraded Gemini 3 Deep Think, their specialized reasoning mode for math, physics, and computer science.",[65,3334,3335,3338],{},[58,3336,3337],{},"MiniMax"," launched M2.5 with state-of-the-art productivity and lower operating costs.",[65,3340,3341,3344],{},[58,3342,3343],{},"Alibaba"," introduced Qwen-Image-2.0 for advanced image generation.",[65,3346,3347,3350],{},[58,3348,3349],{},"Runway"," shipped Story Panels for AI-generated film and content production.",[65,3352,3353,3356],{},[58,3354,3355],{},"Meta"," is reportedly building facial recognition into smart glasses, with a potential launch this year.",[65,3358,3359,3362],{},[58,3360,3361],{},"Spotify"," says their best developers haven't written a line of code since December, thanks to AI coding tools.",[65,3364,3365,3368],{},[58,3366,3367],{},"xAI"," lost two co-founders in two days. Not a great look.",[65,3370,3371,3374],{},[58,3372,3373],{},"T-Mobile"," brought live phone call translation — even to old flip phones.",[16,3376,3377],{},"That's the week. The pace isn't slowing down.",{"title":201,"searchDepth":310,"depth":311,"links":3379},[3380,3381,3382,3383,3384,3385,3386,3387],{"id":3237,"depth":310,"text":3238},{"id":3250,"depth":310,"text":3251},{"id":3263,"depth":310,"text":3264},{"id":3276,"depth":310,"text":3277},{"id":3289,"depth":310,"text":3290},{"id":3302,"depth":310,"text":3303},{"id":3312,"depth":310,"text":3313},{"id":2526,"depth":310,"text":2527},"2026-02-14T00:00:00.000Z","The biggest AI stories from the week — OpenAI starts showing ads, Anthropic raises a massive round, new frontier models drop, and the SaaS market takes a hit.","images/ai-weekly-recap-w07.svg",{},"/blog/ai/2026-02-14-ai-weekly-recap-w07",{"title":3226,"description":3389},"blog/ai/2026-02-14-ai-weekly-recap-w07",[563,566,752,3396],"saas","fxhH1Oty11wM130NxcswKXK33wFMcwzYnoQZr_njdyk",{"id":3399,"title":3400,"author":7,"body":3401,"category":1416,"date":3668,"description":3669,"extension":325,"featured":914,"image":3670,"meta":3671,"navigation":326,"path":3672,"seo":3673,"stem":3674,"tags":3675,"__hash__":3676},"blog/blog/vibe-coding/2026-02-12-what-is-vibe-coding.md","Was ist Vibe Coding?",{"type":9,"value":3402,"toc":3655},[3403,3406,3409,3413,3416,3433,3436,3452,3470,3474,3477,3503,3537,3541,3544,3570,3574,3578,3581,3585,3588,3592,3595,3612,3616,3619,3630,3634,3642,3646,3649,3652],[12,3404,3400],{"id":3405},"was-ist-vibe-coding",[16,3407,3408],{},"Vibe Coding ist ein Begriff, den Andrej Karpathy geprägt hat, um ein neues Paradigma in der Softwareentwicklung zu beschreiben: Statt jede Zeile Code selbst zu schreiben, beschreibst du in natürlicher Sprache, was du willst, und lässt die KI die Implementierung übernehmen.",[26,3410,3412],{"id":3411},"der-wandel","Der Wandel",[16,3414,3415],{},"Traditionelle Entwicklung:",[947,3417,3418,3421,3424,3427,3430],{},[65,3419,3420],{},"Über das Problem nachdenken",[65,3422,3423],{},"Die Lösung entwerfen",[65,3425,3426],{},"Den Code schreiben",[65,3428,3429],{},"Den Code debuggen",[65,3431,3432],{},"Den Code refactoren",[16,3434,3435],{},"Vibe Coding:",[947,3437,3438,3440,3443,3446,3449],{},[65,3439,3420],{},[65,3441,3442],{},"Die Lösung beschreiben",[65,3444,3445],{},"Die KI anleiten",[65,3447,3448],{},"Reviewen und iterieren",[65,3450,3451],{},"Shippen",[16,3453,3454,3455,3458,3459,353,3462,3465,3466,3469],{},"Der entscheidende Unterschied ist nicht Faulheit – es ist ",[58,3456,3457],{},"Hebelwirkung",". Du konzentrierst dich auf das ",[36,3460,3461],{},"Was",[36,3463,3464],{},"Warum",", während die KI das ",[36,3467,3468],{},"Wie"," übernimmt.",[26,3471,3473],{"id":3472},"wann-vibe-coding-funktioniert","Wann Vibe Coding funktioniert",[16,3475,3476],{},"Vibe Coding glänzt bei:",[62,3478,3479,3485,3491,3497],{},[65,3480,3481,3484],{},[58,3482,3483],{},"Prototyping"," — In Minuten von der Idee zum funktionierenden Demo",[65,3486,3487,3490],{},[58,3488,3489],{},"Boilerplate"," — Repetitive Code-Patterns sofort generieren",[65,3492,3493,3496],{},[58,3494,3495],{},"Lernen"," — Unbekannte Frameworks erkunden, während die KI beim Bauen erklärt",[65,3498,3499,3502],{},[58,3500,3501],{},"Refactoring"," — Zielstruktur beschreiben, die KI erledigt die mechanische Arbeit",[192,3504,3506],{"className":1125,"code":3505,"language":1127,"meta":201,"style":201},"# Eine Vibe-Coding-Session könnte so aussehen:\n# \"Erstelle einen REST-API-Endpunkt, der User-Input validiert,\n#  in PostgreSQL speichert und einen 201 mit der erstellten Ressource zurückgibt\"\n\n# Die KI generiert Handler, Validierungsschema, Datenbankabfrage,\n# Error Handling und Tests — alles in Sekunden\n",[199,3507,3508,3513,3518,3523,3527,3532],{"__ignoreMap":201},[1131,3509,3510],{"class":1133,"line":1134},[1131,3511,3512],{"class":1643},"# Eine Vibe-Coding-Session könnte so aussehen:\n",[1131,3514,3515],{"class":1133,"line":310},[1131,3516,3517],{"class":1643},"# \"Erstelle einen REST-API-Endpunkt, der User-Input validiert,\n",[1131,3519,3520],{"class":1133,"line":311},[1131,3521,3522],{"class":1643},"#  in PostgreSQL speichert und einen 201 mit der erstellten Ressource zurückgibt\"\n",[1131,3524,3525],{"class":1133,"line":1667},[1131,3526,1670],{"emptyLinePlaceholder":326},[1131,3528,3529],{"class":1133,"line":1673},[1131,3530,3531],{"class":1643},"# Die KI generiert Handler, Validierungsschema, Datenbankabfrage,\n",[1131,3533,3534],{"class":1133,"line":1679},[1131,3535,3536],{"class":1643},"# Error Handling und Tests — alles in Sekunden\n",[26,3538,3540],{"id":3539},"wann-es-nicht-funktioniert","Wann es nicht funktioniert",[16,3542,3543],{},"Vibe Coding stößt an Grenzen bei:",[62,3545,3546,3552,3558,3564],{},[65,3547,3548,3551],{},[58,3549,3550],{},"Neuartige Algorithmen"," — KI kann nicht erfinden, was in den Trainingsdaten nicht existiert",[65,3553,3554,3557],{},[58,3555,3556],{},"Komplexes Systemdesign"," — Architektur erfordert tiefes Domänenwissen",[65,3559,3560,3563],{},[58,3561,3562],{},"Sicherheitskritischer Code"," — KI-generierten Security-Code immer manuell reviewen",[65,3565,3566,3569],{},[58,3567,3568],{},"Performance-Optimierung"," — Profiling und Optimierung brauchen menschliches Urteilsvermögen",[26,3571,3573],{"id":3572},"best-practices","Best Practices",[607,3575,3577],{"id":3576},"_1-sei-ein-guter-editor","1. Sei ein guter Editor",[16,3579,3580],{},"Deine Rolle verschiebt sich vom Autor zum Editor. Lies jede Zeile, die die KI generiert. Versteh sie. Hinterfrage sie.",[607,3582,3584],{"id":3583},"_2-starte-mit-tests","2. Starte mit Tests",[16,3586,3587],{},"Beschreibe zuerst deine Tests. Dann bitte die KI, Code zu implementieren, der sie besteht. Das stellt Korrektheit sicher, auch wenn du die Implementierung nicht selbst geschrieben hast.",[607,3589,3591],{"id":3590},"_3-iteriere-in-kleinen-schritten","3. Iteriere in kleinen Schritten",[16,3593,3594],{},"Fordere nicht eine ganze Anwendung auf einmal an. Baue Feature für Feature und verifiziere jeden Schritt:",[947,3596,3597,3600,3603,3606,3609],{},[65,3598,3599],{},"„Erstelle das Datenmodell\"",[65,3601,3602],{},"„Füge den API-Endpunkt hinzu\"",[65,3604,3605],{},"„Schreibe die Frontend-Komponente\"",[65,3607,3608],{},"„Füge Error Handling hinzu\"",[65,3610,3611],{},"„Schreibe Tests\"",[607,3613,3615],{"id":3614},"_4-kenne-deine-tools","4. Kenne deine Tools",[16,3617,3618],{},"Die besten Vibe Coder sind immer noch exzellente Entwickler. Sie wissen:",[62,3620,3621,3624,3627],{},[65,3622,3623],{},"Wie guter Code aussieht",[65,3625,3626],{},"Wann KI-Output subtil falsch ist",[65,3628,3629],{},"Wie man die KI zu besseren Lösungen lenkt",[26,3631,3633],{"id":3632},"vertiefung-claude-code-tipps","Vertiefung: Claude Code Tipps",[16,3635,3636,3637,3641],{},"Wenn du Vibe Coding in die Praxis umsetzen willst, schau dir ",[769,3638,3640],{"href":3639},"vibe-coding/2026-01-28-claude-code-tips-from-basics-to-advanced","32 Claude Code Tips: From Basics to Advanced"," an — ein umfassender Guide von Voice Input und Kontextmanagement bis hin zu Container-Orchestrierung und Multi-Model-Workflows.",[26,3643,3645],{"id":3644},"die-zukunft","Die Zukunft",[16,3647,3648],{},"Vibe Coding ersetzt keine Entwickler – es verstärkt sie. Entwickler, die diesen Wandel annehmen, werden schneller ausliefern, mehr Ideen ausprobieren und weniger Zeit mit mechanischer Arbeit verbringen.",[16,3650,3651],{},"Der Vibe ist: beschreiben, reviewen, iterieren, ausliefern.",[1393,3653,3654],{},"html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":201,"searchDepth":310,"depth":311,"links":3656},[3657,3658,3659,3660,3666,3667],{"id":3411,"depth":310,"text":3412},{"id":3472,"depth":310,"text":3473},{"id":3539,"depth":310,"text":3540},{"id":3572,"depth":310,"text":3573,"children":3661},[3662,3663,3664,3665],{"id":3576,"depth":311,"text":3577},{"id":3583,"depth":311,"text":3584},{"id":3590,"depth":311,"text":3591},{"id":3614,"depth":311,"text":3615},{"id":3632,"depth":310,"text":3633},{"id":3644,"depth":310,"text":3645},"2026-02-12T00:00:00.000Z","Vibe Coding ist ein neuer Ansatz in der Softwareentwicklung, bei dem man KI per natürlicher Sprache anleitet, Software zu bauen.",null,{},"/blog/vibe-coding/2026-02-12-what-is-vibe-coding",{"title":3400,"description":3669},"blog/vibe-coding/2026-02-12-what-is-vibe-coding",[2793,2794,1428],"ScorbwjvsvhLw1eR6R3Y0JWWdUEtT_s-I7J9Bgu8hWk",{"id":3678,"title":3679,"author":7,"body":3680,"category":322,"date":4064,"description":4065,"extension":325,"featured":914,"image":4066,"meta":4067,"navigation":326,"path":4068,"seo":4069,"stem":4070,"tags":4071,"__hash__":4074},"blog/blog/finance/intro-to-personal-finance.md","Personal Finance für Entwickler – Ein Leitfaden",{"type":9,"value":3681,"toc":4056},[3682,3685,3688,3692,3695,3714,3717,3721,3724,3774,3777,3781,3788,3794,3797,3823,3827,3830,3856,3860,4026,4029,4033,4050,4053],[12,3683,3679],{"id":3684},"personal-finance-für-entwickler-ein-leitfaden",[16,3686,3687],{},"Als Entwickler sind wir gut darin, Systeme zu optimieren. Persönliche Finanzen sind nur ein weiteres System – eines, das dieselbe Sorgfalt verdient, die wir auf unseren Code anwenden.",[26,3689,3691],{"id":3690},"das-fundament-notgroschen","Das Fundament: Notgroschen",[16,3693,3694],{},"Bevor du irgendetwas anderes tust, bau dir einen Cash-Puffer auf:",[62,3696,3697,3703,3709],{},[65,3698,3699,3702],{},[58,3700,3701],{},"Ziel",": 3–6 Monatsausgaben",[65,3704,3705,3708],{},[58,3706,3707],{},"Wo",": Tagesgeldkonto mit guter Verzinsung",[65,3710,3711,3713],{},[58,3712,3464],{},": Verhindert, dass du Investments zum schlechtesten Zeitpunkt verkaufen musst",[16,3715,3716],{},"Stell ihn dir als finanziellen Sicherungsautomaten vor. Wenn etwas schiefläuft, löst er aus, bevor der Schaden sich ausbreitet.",[26,3718,3720],{"id":3719},"das-503020-framework","Das 50/30/20-Framework",[16,3722,3723],{},"Ein simples Budgetmodell, das tatsächlich funktioniert:",[1969,3725,3726,3739],{},[1972,3727,3728],{},[1975,3729,3730,3733,3736],{},[1978,3731,3732],{},"Kategorie",[1978,3734,3735],{},"% des Einkommens",[1978,3737,3738],{},"Beispiele",[1994,3740,3741,3752,3763],{},[1975,3742,3743,3746,3749],{},[1999,3744,3745],{},"Bedarf",[1999,3747,3748],{},"50%",[1999,3750,3751],{},"Miete, Lebensmittel, Versicherungen",[1975,3753,3754,3757,3760],{},[1999,3755,3756],{},"Wünsche",[1999,3758,3759],{},"30%",[1999,3761,3762],{},"Essen gehen, Hobbys, Reisen",[1975,3764,3765,3768,3771],{},[1999,3766,3767],{},"Sparen",[1999,3769,3770],{},"20%",[1999,3772,3773],{},"Investments, Schuldenabbau",[16,3775,3776],{},"Das Schöne an diesem Framework ist seine Einfachheit. Du musst nicht jeden Kaffee tracken – stelle nur sicher, dass die Prozentsätze ungefähr stimmen.",[26,3778,3780],{"id":3779},"index-investing-die-wahl-des-entwicklers","Index-Investing: Die Wahl des Entwicklers",[16,3782,3783,3784,3787],{},"Warum Indexfonds die ",[199,3785,3786],{},"O(1)","-Lösung für Geldanlage sind:",[192,3789,3792],{"className":3790,"code":3791,"language":197,"meta":201},[195],"Aktives Fondsmanagement: O(n) Aufwand, performt meist schlechter\nIndex-Investing:         O(1) Aufwand, matcht den Markt\n",[199,3793,3791],{"__ignoreMap":201},[16,3795,3796],{},"Kernprinzipien:",[947,3798,3799,3805,3811,3817],{},[65,3800,3801,3804],{},[58,3802,3803],{},"Breit diversifizieren"," — Ein Total-Market-Indexfonds hält tausende Aktien",[65,3806,3807,3810],{},[58,3808,3809],{},"Kosten niedrig halten"," — Achte auf Kostenquoten unter 0,1 %",[65,3812,3813,3816],{},[58,3814,3815],{},"Kurs halten"," — Zeit im Markt schlägt Markt-Timing",[65,3818,3819,3822],{},[58,3820,3821],{},"Automatisieren"," — Richte automatische Sparpläne ein",[26,3824,3826],{"id":3825},"steuerlich-begünstigte-konten","Steuerlich begünstigte Konten",[16,3828,3829],{},"In Deutschland gibt es andere Instrumente als in den USA, aber das Prinzip bleibt gleich – nutze steuerliche Vorteile, bevor du in ein normales Depot investierst:",[62,3831,3832,3838,3844,3850],{},[65,3833,3834,3837],{},[58,3835,3836],{},"Betriebliche Altersvorsorge (bAV)"," — Besonders wenn der Arbeitgeber zuzahlt (geschenktes Geld)",[65,3839,3840,3843],{},[58,3841,3842],{},"Rürup-Rente"," — Steuerlich absetzbare Beiträge, besonders für Selbstständige",[65,3845,3846,3849],{},[58,3847,3848],{},"Riester-Rente"," — Staatliche Zulagen, lohnt sich je nach Lebenssituation",[65,3851,3852,3855],{},[58,3853,3854],{},"Freistellungsauftrag"," — Bis zu 1.000 € Kapitalerträge pro Jahr steuerfrei (2.000 € bei Ehepaaren)",[26,3857,3859],{"id":3858},"die-kraft-des-zinseszins","Die Kraft des Zinseszins",[192,3861,3865],{"className":3862,"code":3863,"language":3864,"meta":201,"style":201},"language-python shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","def endwert(monatlich, rendite, jahre):\n    monate = jahre * 12\n    monatliche_rendite = rendite / 12\n    return monatlich * ((1 + monatliche_rendite)**monate - 1) / monatliche_rendite\n\n# 500 €/Monat bei 7 % über 30 Jahre\nprint(f\"{endwert(500, 0.07, 30):,.0f} €\")\n# → 566.764 €\n","python",[199,3866,3867,3894,3910,3925,3967,3971,3976,4021],{"__ignoreMap":201},[1131,3868,3869,3872,3875,3877,3881,3883,3886,3888,3891],{"class":1133,"line":1134},[1131,3870,3871],{"class":2859},"def",[1131,3873,3874],{"class":1660}," endwert",[1131,3876,2877],{"class":1236},[1131,3878,3880],{"class":3879},"sHdIc","monatlich",[1131,3882,2888],{"class":1236},[1131,3884,3885],{"class":3879}," rendite",[1131,3887,2888],{"class":1236},[1131,3889,3890],{"class":3879}," jahre",[1131,3892,3893],{"class":1236},"):\n",[1131,3895,3896,3899,3901,3904,3907],{"class":1133,"line":310},[1131,3897,3898],{"class":2863},"    monate ",[1131,3900,2867],{"class":1236},[1131,3902,3903],{"class":2863}," jahre ",[1131,3905,3906],{"class":1236},"*",[1131,3908,3909],{"class":1148}," 12\n",[1131,3911,3912,3915,3917,3920,3923],{"class":1133,"line":311},[1131,3913,3914],{"class":2863},"    monatliche_rendite ",[1131,3916,2867],{"class":1236},[1131,3918,3919],{"class":2863}," rendite ",[1131,3921,3922],{"class":1236},"/",[1131,3924,3909],{"class":1148},[1131,3926,3927,3930,3933,3935,3938,3941,3944,3947,3950,3953,3956,3959,3961,3964],{"class":1133,"line":1667},[1131,3928,3929],{"class":2870},"    return",[1131,3931,3932],{"class":2863}," monatlich ",[1131,3934,3906],{"class":1236},[1131,3936,3937],{"class":1236}," ((",[1131,3939,3940],{"class":1148},"1",[1131,3942,3943],{"class":1236}," +",[1131,3945,3946],{"class":2863}," monatliche_rendite",[1131,3948,3949],{"class":1236},")**",[1131,3951,3952],{"class":2863},"monate ",[1131,3954,3955],{"class":1236},"-",[1131,3957,3958],{"class":1148}," 1",[1131,3960,3097],{"class":1236},[1131,3962,3963],{"class":1236}," /",[1131,3965,3966],{"class":2863}," monatliche_rendite\n",[1131,3968,3969],{"class":1133,"line":1673},[1131,3970,1670],{"emptyLinePlaceholder":326},[1131,3972,3973],{"class":1133,"line":1679},[1131,3974,3975],{"class":1643},"# 500 €/Monat bei 7 % über 30 Jahre\n",[1131,3977,3978,3981,3983,3986,3989,3991,3994,3996,3999,4001,4004,4006,4009,4011,4014,4016,4019],{"class":1133,"line":1688},[1131,3979,3980],{"class":1660},"print",[1131,3982,2877],{"class":1236},[1131,3984,3985],{"class":2859},"f",[1131,3987,3988],{"class":1141},"\"",[1131,3990,3054],{"class":1148},[1131,3992,3993],{"class":1660},"endwert",[1131,3995,2877],{"class":1236},[1131,3997,3998],{"class":1148},"500",[1131,4000,2888],{"class":1236},[1131,4002,4003],{"class":1148}," 0.07",[1131,4005,2888],{"class":1236},[1131,4007,4008],{"class":1148}," 30",[1131,4010,3097],{"class":1236},[1131,4012,4013],{"class":2859},":,.0f",[1131,4015,3105],{"class":1148},[1131,4017,4018],{"class":1141}," €\"",[1131,4020,3108],{"class":1236},[1131,4022,4023],{"class":1133,"line":1693},[1131,4024,4025],{"class":1643},"# → 566.764 €\n",[16,4027,4028],{},"Früh anfangen zählt mehr als die Höhe. Ein 25-Jähriger, der 500 €/Monat investiert, wird bis zur Rente voraussichtlich einen 35-Jährigen überholen, der 1.000 €/Monat investiert.",[26,4030,4032],{"id":4031},"nächste-schritte","Nächste Schritte",[947,4034,4035,4038,4041,4044,4047],{},[65,4036,4037],{},"Notgroschen aufbauen",[65,4039,4040],{},"Arbeitgeberzuschuss zur bAV mitnehmen",[65,4042,4043],{},"Freistellungsauftrag einrichten",[65,4045,4046],{},"Automatischen ETF-Sparplan starten",[65,4048,4049],{},"Vergiss es und konzentrier dich darauf, dein Einkommen zu steigern",[16,4051,4052],{},"Der beste Finanzplan ist der, den du tatsächlich befolgst.",[1393,4054,4055],{},"html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":201,"searchDepth":310,"depth":311,"links":4057},[4058,4059,4060,4061,4062,4063],{"id":3690,"depth":310,"text":3691},{"id":3719,"depth":310,"text":3720},{"id":3779,"depth":310,"text":3780},{"id":3825,"depth":310,"text":3826},{"id":3858,"depth":310,"text":3859},{"id":4031,"depth":310,"text":4032},"2026-02-10T00:00:00.000Z","Die wichtigsten Konzepte der persönlichen Finanzplanung, die jeder Entwickler kennen sollte – vom Notgroschen bis zum Index-Investing.","images/intro-to-personal-finance.svg",{},"/blog/finance/intro-to-personal-finance",{"title":3679,"description":4065},"blog/finance/intro-to-personal-finance",[2158,4072,4073],"budgeting","financial-independence","xGt2eC_5XFAFmCgXCAyFNUJ6OwdW8j7yjdqIA3MqLus",{"id":4076,"title":3640,"author":7,"body":4077,"category":1416,"date":5358,"description":5359,"extension":325,"featured":914,"image":3670,"meta":5360,"navigation":326,"path":5361,"seo":5362,"stem":5363,"tags":5364,"__hash__":5366},"blog/blog/vibe-coding/2026-01-28-claude-code-tips-from-basics-to-advanced.md",{"type":9,"value":4078,"toc":5315},[4079,4082,4085,4087,4091,4094,4100,4103,4107,4116,4122,4125,4128,4132,4135,4138,4144,4147,4153,4156,4162,4165,4169,4172,4183,4190,4194,4197,4201,4204,4246,4249,4253,4256,4342,4361,4365,4372,4378,4383,4386,4392,4395,4399,4402,4408,4515,4522,4526,4533,4536,4540,4543,4546,4550,4553,4559,4562,4566,4569,4572,4576,4587,4681,4684,4688,4691,4697,4700,4704,4707,4713,4719,4722,4726,4729,4782,4789,4793,4796,4799,4803,4806,4812,4823,4827,4830,4844,4850,4853,4857,4860,4866,4870,4873,4877,4884,4888,4891,4915,4918,4922,4925,4929,4936,4939,4943,4946,4975,4978,5124,5131,5135,5138,5142,5149,5161,5164,5168,5171,5197,5200,5204,5210,5217,5221,5224,5230,5234,5237,5263,5267,5270,5273,5277,5280,5283,5287,5290,5293,5297,5300,5306,5309,5312],[12,4080,3640],{"id":4081},"_32-claude-code-tips-from-basics-to-advanced",[16,4083,4084],{},"Claude Code has quickly become a core part of many developers' workflows. But most people barely scratch the surface of what it can do. This guide covers 32 practical tips — from quick quality-of-life improvements to advanced techniques like running Claude Code inside containers and orchestrating multiple AI models.",[1816,4086],{},[26,4088,4090],{"id":4089},"tip-0-customize-your-status-line","Tip 0: Customize Your Status Line",[16,4092,4093],{},"You can customize Claude Code's status line to display useful info at a glance — current model, directory, git branch, uncommitted file count, sync status, and a token usage progress bar. A second line can show your last message for quick context recall:",[192,4095,4098],{"className":4096,"code":4097,"language":197},[195],"Opus 4.5 | dir:Daft | fix/colab-pydantic-pickle (0 files, synced) | █░░░░░░░░░ 12% of 200k tokens\nLast: Okay, and this part I don't quite understand. What is type checking and why are we using it there?\n",[199,4099,4097],{"__ignoreMap":201},[16,4101,4102],{},"This is especially useful for monitoring context usage and remembering what a conversation was about when switching between tabs.",[26,4104,4106],{"id":4105},"tip-1-talk-to-claude-code-with-your-voice","Tip 1: Talk to Claude Code with Your Voice",[16,4108,4109,4110,4115],{},"Voice input is significantly faster than typing for most people. On macOS, local transcription tools like ",[769,4111,4114],{"href":4112,"rel":4113},"https://superwhisper.com/",[773],"superwhisper",", MacWhisper, or open-source alternatives work well enough. Even when transcription contains errors, Claude is smart enough to interpret what you meant.",[192,4117,4120],{"className":4118,"code":4119,"language":197},[195],"![Voice transcription mistakes interpreted correctly](images/claude-code-tips/voice-transcription-mistakes.png)\n",[199,4121,4119],{"__ignoreMap":201},[16,4123,4124],{},"In this example, mistranscribed words like \"ExcelElanishMark\" and \"advast\" were correctly interpreted as \"exclamation mark\" and \"Advanced.\"",[16,4126,4127],{},"Think of it like sending voice messages to a colleague. You don't need perfect dictation — just speak naturally. If you're in a shared space, whispering into earphones works fine.",[26,4129,4131],{"id":4130},"tip-2-break-down-large-problems","Tip 2: Break Down Large Problems",[16,4133,4134],{},"This is fundamental. It's the same principle that makes great software engineers great — decomposition.",[16,4136,4137],{},"If Claude Code can't one-shot a complex task, break it down. If a subtask is still too hard, break it down further. Keep going until everything is solvable.",[16,4139,4140],{},[2187,4141],{"alt":4142,"src":4143},"Direct approach — trying to go from A to B in one step","images/claude-code-tips/breakdown-direct.png",[16,4145,4146],{},"Instead of jumping straight from A to B:",[16,4148,4149],{},[2187,4150],{"alt":4151,"src":4152},"Step-by-step approach — going from A through A1, A2, A3 to B","images/claude-code-tips/breakdown-steps.png",[16,4154,4155],{},"Go from A to A1 to A2 to A3, then to B.",[16,4157,4158,4161],{},[58,4159,4160],{},"Example:"," Building a voice transcription system involves model downloading, voice recording, audio transcription, cursor placement, and UI. Rather than tackling it all at once, build each piece independently — a standalone model downloader, a standalone recorder, a standalone transcriber — then combine them.",[16,4163,4164],{},"Your problem-solving and engineering skills still matter enormously. Claude Code is powerful on its own, but applying structured thinking to how you use it makes it dramatically more effective.",[26,4166,4168],{"id":4167},"tip-3-use-git-and-github-cli-like-a-pro","Tip 3: Use Git and GitHub CLI Like a Pro",[16,4170,4171],{},"Let Claude handle your Git and GitHub CLI work. Committing (no more writing commit messages by hand), branching, pulling, pushing — all of it.",[16,4173,4174,4175,4178,4179,4182],{},"A good practice: allow ",[199,4176,4177],{},"pull"," automatically but require confirmation for ",[199,4180,4181],{},"push",", since push affects the remote.",[16,4184,4185,4186,4189],{},"For GitHub CLI (",[199,4187,4188],{},"gh","), get into the habit of creating draft PRs. This lets Claude handle PR creation with low risk — you review everything before marking it ready.",[26,4191,4193],{"id":4192},"tip-4-context-is-milk-best-served-fresh","Tip 4: Context Is Milk — Best Served Fresh",[16,4195,4196],{},"Claude Code performs best at the start of a conversation. As context accumulates, performance can degrade. Start a new conversation for each new topic, or whenever you notice quality dropping.",[26,4198,4200],{"id":4199},"tip-5-get-output-out-of-your-terminal","Tip 5: Get Output Out of Your Terminal",[16,4202,4203],{},"Copying from the terminal isn't always clean. Here are better ways:",[62,4205,4206,4214,4224,4230,4240],{},[65,4207,4208,4213],{},[58,4209,4210],{},[199,4211,4212],{},"/copy"," — Copies Claude's last response to clipboard as markdown",[65,4215,4216,4219,4220,4223],{},[58,4217,4218],{},"Clipboard pipe"," — Ask Claude to use ",[199,4221,4222],{},"pbcopy"," on macOS to send output to clipboard",[65,4225,4226,4229],{},[58,4227,4228],{},"Write to file"," — Have Claude put content in a file and open it in your editor. You can specify a line number for precision",[65,4231,4232,4235,4236,4239],{},[58,4233,4234],{},"Open URLs"," — Ask Claude to open links in your browser with the ",[199,4237,4238],{},"open"," command",[65,4241,4242,4245],{},[58,4243,4244],{},"GitHub Desktop"," — Ask Claude to open the current repo in GitHub Desktop, especially useful when working in non-root directories like worktrees",[16,4247,4248],{},"You can combine these too. For example, have Claude copy a PR description to a local file, edit it there, review it yourself, then paste it back.",[26,4250,4252],{"id":4251},"tip-6-set-up-terminal-aliases","Tip 6: Set Up Terminal Aliases",[16,4254,4255],{},"Since you'll be living in the terminal more, set up short aliases:",[192,4257,4259],{"className":1125,"code":4258,"language":1127,"meta":201,"style":201},"alias c='claude'\nalias ch='claude --chrome'\nalias gb='github'\nalias co='code'\nalias q='cd ~/Desktop/projects'\n",[199,4260,4261,4279,4295,4311,4326],{"__ignoreMap":201},[1131,4262,4263,4266,4269,4271,4273,4276],{"class":1133,"line":1134},[1131,4264,4265],{"class":2859},"alias",[1131,4267,4268],{"class":2863}," c",[1131,4270,2867],{"class":1236},[1131,4272,2880],{"class":1236},[1131,4274,4275],{"class":1141},"claude",[1131,4277,4278],{"class":1236},"'\n",[1131,4280,4281,4283,4286,4288,4290,4293],{"class":1133,"line":310},[1131,4282,4265],{"class":2859},[1131,4284,4285],{"class":2863}," ch",[1131,4287,2867],{"class":1236},[1131,4289,2880],{"class":1236},[1131,4291,4292],{"class":1141},"claude --chrome",[1131,4294,4278],{"class":1236},[1131,4296,4297,4299,4302,4304,4306,4309],{"class":1133,"line":311},[1131,4298,4265],{"class":2859},[1131,4300,4301],{"class":2863}," gb",[1131,4303,2867],{"class":1236},[1131,4305,2880],{"class":1236},[1131,4307,4308],{"class":1141},"github",[1131,4310,4278],{"class":1236},[1131,4312,4313,4315,4318,4320,4322,4324],{"class":1133,"line":1667},[1131,4314,4265],{"class":2859},[1131,4316,4317],{"class":2863}," co",[1131,4319,2867],{"class":1236},[1131,4321,2880],{"class":1236},[1131,4323,199],{"class":1141},[1131,4325,4278],{"class":1236},[1131,4327,4328,4330,4333,4335,4337,4340],{"class":1133,"line":1673},[1131,4329,4265],{"class":2859},[1131,4331,4332],{"class":2863}," q",[1131,4334,2867],{"class":1236},[1131,4336,2880],{"class":1236},[1131,4338,4339],{"class":1141},"cd ~/Desktop/projects",[1131,4341,4278],{"class":1236},[16,4343,4344,4345,4348,4349,4352,4353,4356,4357,4360],{},"Combine with flags: ",[199,4346,4347],{},"c -c"," continues your last conversation, ",[199,4350,4351],{},"c -r"," shows recent conversations to resume. These work with all aliases (",[199,4354,4355],{},"ch -c",", ",[199,4358,4359],{},"ch -r",", etc.).",[26,4362,4364],{"id":4363},"tip-7-proactively-compact-your-context","Tip 7: Proactively Compact Your Context",[16,4366,4367,4368,4371],{},"The ",[199,4369,4370],{},"/compact"," command summarizes your conversation to free up context. Auto-compaction triggers when context fills up. On Opus 4.5, the total window is 200k tokens, with ~45k reserved for auto-compaction and ~10% consumed by system prompt, tools, and memory.",[16,4373,4374,4375,2900],{},"A better approach: manually manage compaction. Before starting fresh, ask Claude to write a ",[58,4376,4377],{},"handoff document",[2722,4379,4380],{},[16,4381,4382],{},"\"Write a handoff document explaining what you've tried, what worked, what didn't, so the next agent with fresh context can pick up where you left off.\"",[16,4384,4385],{},"Claude creates a summary file. Review it, ask for edits if needed, then start a new conversation and just pass the file path:",[192,4387,4390],{"className":4388,"code":4389,"language":197},[195],"> experiments/system-prompt-extraction/NEXT-STEPS.md\n",[199,4391,4389],{"__ignoreMap":201},[16,4393,4394],{},"The fresh agent can continue from there. In subsequent conversations, ask it to update the document for the next handoff.",[26,4396,4398],{"id":4397},"tip-8-complete-the-write-test-cycle","Tip 8: Complete the Write-Test Cycle",[16,4400,4401],{},"For autonomous tasks, Claude Code needs a way to verify results. The pattern: write code, run it, check output, repeat.",[16,4403,4404,4405,2900],{},"For interactive terminals (like testing Claude Code itself), use ",[58,4406,4407],{},"tmux",[192,4409,4411],{"className":1125,"code":4410,"language":1127,"meta":201,"style":201},"tmux kill-session -t test-session 2>/dev/null\ntmux new-session -d -s test-session\ntmux send-keys -t test-session 'claude' Enter\nsleep 2\ntmux send-keys -t test-session '/context' Enter\nsleep 1\ntmux capture-pane -t test-session -p\n",[199,4412,4413,4432,4448,4468,4476,4495,4501],{"__ignoreMap":201},[1131,4414,4415,4417,4420,4423,4426,4429],{"class":1133,"line":1134},[1131,4416,4407],{"class":1137},[1131,4418,4419],{"class":1141}," kill-session",[1131,4421,4422],{"class":1141}," -t",[1131,4424,4425],{"class":1141}," test-session",[1131,4427,4428],{"class":1236}," 2>",[1131,4430,4431],{"class":1141},"/dev/null\n",[1131,4433,4434,4436,4439,4442,4445],{"class":1133,"line":310},[1131,4435,4407],{"class":1137},[1131,4437,4438],{"class":1141}," new-session",[1131,4440,4441],{"class":1141}," -d",[1131,4443,4444],{"class":1141}," -s",[1131,4446,4447],{"class":1141}," test-session\n",[1131,4449,4450,4452,4455,4457,4459,4461,4463,4465],{"class":1133,"line":311},[1131,4451,4407],{"class":1137},[1131,4453,4454],{"class":1141}," send-keys",[1131,4456,4422],{"class":1141},[1131,4458,4425],{"class":1141},[1131,4460,2903],{"class":1236},[1131,4462,4275],{"class":1141},[1131,4464,2880],{"class":1236},[1131,4466,4467],{"class":1141}," Enter\n",[1131,4469,4470,4473],{"class":1133,"line":1667},[1131,4471,4472],{"class":1137},"sleep",[1131,4474,4475],{"class":1148}," 2\n",[1131,4477,4478,4480,4482,4484,4486,4488,4491,4493],{"class":1133,"line":1673},[1131,4479,4407],{"class":1137},[1131,4481,4454],{"class":1141},[1131,4483,4422],{"class":1141},[1131,4485,4425],{"class":1141},[1131,4487,2903],{"class":1236},[1131,4489,4490],{"class":1141},"/context",[1131,4492,2880],{"class":1236},[1131,4494,4467],{"class":1141},[1131,4496,4497,4499],{"class":1133,"line":1679},[1131,4498,4472],{"class":1137},[1131,4500,1149],{"class":1148},[1131,4502,4503,4505,4508,4510,4512],{"class":1133,"line":1688},[1131,4504,4407],{"class":1137},[1131,4506,4507],{"class":1141}," capture-pane",[1131,4509,4422],{"class":1141},[1131,4511,4425],{"class":1141},[1131,4513,4514],{"class":1141}," -p\n",[16,4516,4517,4518,4521],{},"With a test like this, Claude Code can run ",[199,4519,4520],{},"git bisect"," and automatically test each commit to find the one that introduced a bug.",[607,4523,4525],{"id":4524},"creative-testing-strategies","Creative Testing Strategies",[16,4527,4528,4529,4532],{},"For web apps, you can use Playwright MCP, Chrome DevTools MCP, or Claude's native browser integration (",[199,4530,4531],{},"/chrome","). Playwright generally works better — it focuses on the accessibility tree (structured data) rather than screenshots, making it more reliable.",[16,4534,4535],{},"Use Claude's native browser integration only when you need a logged-in state without providing credentials, or when you specifically need visual coordinate-based clicking.",[26,4537,4539],{"id":4538},"tip-9-cmda-is-your-friend","Tip 9: Cmd+A Is Your Friend",[16,4541,4542],{},"When Claude can't access a URL directly (private pages, blocked sites like Reddit), just select all the content you see (Cmd+A / Ctrl+A), copy it, and paste it into Claude Code. It handles raw text input extremely well.",[16,4544,4545],{},"This works for terminal output too — select all, copy, paste back to Claude Code.",[26,4547,4549],{"id":4548},"tip-10-use-gemini-cli-as-a-fallback-for-blocked-sites","Tip 10: Use Gemini CLI as a Fallback for Blocked Sites",[16,4551,4552],{},"Claude Code's WebFetch can't reach certain sites. Work around this by creating a skill that delegates to Gemini CLI, which has broader web access.",[16,4554,4555,4556,635],{},"This uses the tmux pattern from Tip 8 — start a session, send commands, capture output. Place the skill file in ",[199,4557,4558],{},"~/.claude/skills/reddit-fetch/SKILL.md",[16,4560,4561],{},"Skills are token-efficient because they only load when needed, unlike CLAUDE.md which loads into every conversation.",[26,4563,4565],{"id":4564},"tip-11-invest-in-your-workflow","Tip 11: Invest in Your Workflow",[16,4567,4568],{},"Take care of your CLAUDE.md. Build custom tools. Learn the features that matter to you.",[16,4570,4571],{},"You don't have to go overboard — even just maintaining a clean, concise CLAUDE.md that helps you achieve your goals makes a real difference. These are investments in the tools you use to build everything else.",[26,4573,4575],{"id":4574},"tip-12-search-through-conversation-history","Tip 12: Search Through Conversation History",[16,4577,4578,4579,4582,4583,4586],{},"All Claude Code conversation history is stored locally in ",[199,4580,4581],{},"~/.claude/",". Project-specific conversations live in ",[199,4584,4585],{},"~/.claude/projects/",", with folder names based on project paths.",[192,4588,4590],{"className":1125,"code":4589,"language":1127,"meta":201,"style":201},"# Find conversations mentioning \"Redis\"\ngrep -l -i \"redis\" ~/.claude/projects/-Users-*/*.jsonl\n\n# Find today's conversations about a topic\nfind ~/.claude/projects/-Users-*/*.jsonl -mtime 0 -exec grep -l -i \"keyword\" {} \\;\n",[199,4591,4592,4597,4627,4631,4636],{"__ignoreMap":201},[1131,4593,4594],{"class":1133,"line":1134},[1131,4595,4596],{"class":1643},"# Find conversations mentioning \"Redis\"\n",[1131,4598,4599,4602,4605,4608,4610,4613,4615,4618,4620,4622,4624],{"class":1133,"line":310},[1131,4600,4601],{"class":1137},"grep",[1131,4603,4604],{"class":1141}," -l",[1131,4606,4607],{"class":1141}," -i",[1131,4609,1237],{"class":1236},[1131,4611,4612],{"class":1141},"redis",[1131,4614,3988],{"class":1236},[1131,4616,4617],{"class":1141}," ~/.claude/projects/-Users-",[1131,4619,3906],{"class":2863},[1131,4621,3922],{"class":1141},[1131,4623,3906],{"class":2863},[1131,4625,4626],{"class":1141},".jsonl\n",[1131,4628,4629],{"class":1133,"line":311},[1131,4630,1670],{"emptyLinePlaceholder":326},[1131,4632,4633],{"class":1133,"line":1667},[1131,4634,4635],{"class":1643},"# Find today's conversations about a topic\n",[1131,4637,4638,4641,4643,4645,4647,4649,4652,4655,4658,4661,4664,4666,4668,4670,4673,4675,4678],{"class":1133,"line":1673},[1131,4639,4640],{"class":1137},"find",[1131,4642,4617],{"class":1141},[1131,4644,3906],{"class":2863},[1131,4646,3922],{"class":1141},[1131,4648,3906],{"class":2863},[1131,4650,4651],{"class":1141},".jsonl",[1131,4653,4654],{"class":1141}," -mtime",[1131,4656,4657],{"class":1148}," 0",[1131,4659,4660],{"class":1141}," -exec",[1131,4662,4663],{"class":1141}," grep",[1131,4665,4604],{"class":1141},[1131,4667,4607],{"class":1141},[1131,4669,1237],{"class":1236},[1131,4671,4672],{"class":1141},"keyword",[1131,4674,3988],{"class":1236},[1131,4676,4677],{"class":1141}," {}",[1131,4679,4680],{"class":2863}," \\;\n",[16,4682,4683],{},"Or just ask Claude Code directly: \"What did we discuss about X today?\" It'll search through history for you.",[26,4685,4687],{"id":4686},"tip-13-multitask-with-terminal-tabs","Tip 13: Multitask with Terminal Tabs",[16,4689,4690],{},"When running multiple Claude Code instances, organization matters more than any specific technical setup. Focus on at most three or four tasks at a time.",[16,4692,4693],{},[2187,4694],{"alt":4695,"src":4696},"Terminal tabs showing a multitasking workflow","images/claude-code-tips/multitasking-terminal-tabs.png",[16,4698,4699],{},"Use a \"cascade\" approach — each new task opens a new tab to the right. Sweep left to right, oldest to newest, checking on tasks as needed.",[26,4701,4703],{"id":4702},"tip-14-slim-down-the-system-prompt","Tip 14: Slim Down the System Prompt",[16,4705,4706],{},"Claude Code's system prompt and tools consume ~18k tokens (~9% of your 200k context) before you start working. Patching can reduce this to ~10k tokens, saving about 7,300 tokens (41% of static overhead).",[16,4708,4709],{},[2187,4710],{"alt":4711,"src":4712},"Unpatched context at ~18k tokens, 9%","images/claude-code-tips/context-unpatched.png",[16,4714,4715],{},[2187,4716],{"alt":4717,"src":4718},"Patched context at ~10k tokens, 5%","images/claude-code-tips/context-patched.png",[16,4720,4721],{},"The patches trim verbose examples and redundant text while preserving essential instructions. It feels more raw and powerful — more room before context fills up, which means longer conversations.",[607,4723,4725],{"id":4724},"lazy-load-mcp-tools","Lazy-Load MCP Tools",[16,4727,4728],{},"If you use MCP servers, their tool definitions load into every conversation by default. Enable lazy-loading:",[192,4730,4734],{"className":4731,"code":4732,"language":4733,"meta":201,"style":201},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"env\": {\n    \"ENABLE_TOOL_SEARCH\": \"true\"\n  }\n}\n","json",[199,4735,4736,4740,4753,4772,4777],{"__ignoreMap":201},[1131,4737,4738],{"class":1133,"line":1134},[1131,4739,3012],{"class":1236},[1131,4741,4742,4745,4747,4749,4751],{"class":1133,"line":310},[1131,4743,4744],{"class":1236},"  \"",[1131,4746,2960],{"class":2859},[1131,4748,3988],{"class":1236},[1131,4750,2900],{"class":1236},[1131,4752,2891],{"class":1236},[1131,4754,4755,4758,4761,4763,4765,4767,4770],{"class":1133,"line":311},[1131,4756,4757],{"class":1236},"    \"",[1131,4759,4760],{"class":1137},"ENABLE_TOOL_SEARCH",[1131,4762,3988],{"class":1236},[1131,4764,2900],{"class":1236},[1131,4766,1237],{"class":1236},[1131,4768,4769],{"class":1141},"true",[1131,4771,1243],{"class":1236},[1131,4773,4774],{"class":1133,"line":1667},[1131,4775,4776],{"class":1236},"  }\n",[1131,4778,4779],{"class":1133,"line":1673},[1131,4780,4781],{"class":1236},"}\n",[16,4783,4784,4785,4788],{},"Add this to ",[199,4786,4787],{},"~/.claude/settings.json",". As of version 2.1.7, this happens automatically when MCP tool descriptions exceed 10% of the context window.",[26,4790,4792],{"id":4791},"tip-15-git-worktrees-for-parallel-branch-work","Tip 15: Git Worktrees for Parallel Branch Work",[16,4794,4795],{},"Working on multiple branches simultaneously? Git worktrees let you work on different branches in separate directories without conflicts. Just ask Claude Code to create one — you don't need to remember the syntax.",[16,4797,4798],{},"Layer worktrees on top of the cascade tab method for maximum parallelism.",[26,4800,4802],{"id":4801},"tip-16-manual-exponential-backoff-for-long-jobs","Tip 16: Manual Exponential Backoff for Long Jobs",[16,4804,4805],{},"When waiting on Docker builds or GitHub CI, ask Claude Code to check status with increasing intervals — one minute, two minutes, four minutes, and so on.",[16,4807,4808],{},[2187,4809],{"alt":4810,"src":4811},"Manual exponential backoff checking Docker build progress","images/claude-code-tips/manual-exponential-backoff.png",[16,4813,4814,4815,4818,4819,4822],{},"For GitHub CI specifically, ",[199,4816,4817],{},"gh run watch"," outputs many lines continuously, wasting tokens. Manual backoff with ",[199,4820,4821],{},"gh run view \u003Crun-id> | grep \u003Cjob-name>"," is more token-efficient.",[26,4824,4826],{"id":4825},"tip-17-claude-code-as-a-writing-assistant","Tip 17: Claude Code as a Writing Assistant",[16,4828,4829],{},"Claude Code is an excellent writing partner. The workflow:",[947,4831,4832,4835,4838,4841],{},[65,4833,4834],{},"Give it context about what you're writing",[65,4836,4837],{},"Provide detailed instructions via voice",[65,4839,4840],{},"Get a first draft",[65,4842,4843],{},"Go through it line by line — \"I like this line,\" \"move this section there,\" \"change this part\"",[16,4845,4846],{},[2187,4847],{"alt":4848,"src":4849},"Side-by-side writing workflow with terminal and editor","images/claude-code-tips/writing-assistant-side-by-side.png",[16,4851,4852],{},"The back-and-forth iterative process, terminal on the left and editor on the right, produces surprisingly good results.",[26,4854,4856],{"id":4855},"tip-18-markdown-is-king","Tip 18: Markdown Is King",[16,4858,4859],{},"With Claude Code's writing capabilities, markdown becomes the most efficient document format. Blog posts, LinkedIn posts, documentation — talk to Claude Code, save as markdown, go from there.",[16,4861,4862,4865],{},[58,4863,4864],{},"Quick tip:"," If you need to paste markdown into a platform that doesn't accept it, paste into Notion first, then copy from Notion to the target platform. Notion converts it to a compatible format.",[26,4867,4869],{"id":4868},"tip-19-use-notion-to-preserve-links-when-pasting","Tip 19: Use Notion to Preserve Links When Pasting",[16,4871,4872],{},"The reverse works too. If you have text with links from Slack or other apps, paste it into Notion first, then copy from Notion to get clean markdown with links that Claude Code can read.",[26,4874,4876],{"id":4875},"tip-20-containers-for-long-running-risky-tasks","Tip 20: Containers for Long-Running Risky Tasks",[16,4878,4879,4880,4883],{},"Containerized environments are ideal for ",[199,4881,4882],{},"--dangerously-skip-permissions"," sessions. Use them for research, experimentation, and anything that takes a long time or carries risk.",[607,4885,4887],{"id":4886},"orchestrating-a-worker-instance","Orchestrating a Worker Instance",[16,4889,4890],{},"Take it further by having your local Claude Code control another instance inside a container via tmux:",[947,4892,4893,4896,4899,4904],{},[65,4894,4895],{},"Local Claude Code starts a tmux session",[65,4897,4898],{},"Connects to the container",[65,4900,4901,4902],{},"Inside: Claude Code runs with ",[199,4903,4882],{},[65,4905,4906,4907,4910,4911,4914],{},"Outer instance uses ",[199,4908,4909],{},"tmux send-keys"," and ",[199,4912,4913],{},"capture-pane"," for communication",[16,4916,4917],{},"This gives you a fully autonomous worker for experimental or long-running tasks, sandboxed in a container.",[607,4919,4921],{"id":4920},"multi-model-orchestration","Multi-Model Orchestration",[16,4923,4924],{},"Run different AI CLIs in containers — Codex, Gemini CLI, etc. Claude Code becomes the central interface that coordinates everything: spinning up models, sending data between containers and your host.",[26,4926,4928],{"id":4927},"tip-21-the-best-way-to-learn-is-by-doing","Tip 21: The Best Way to Learn Is by Doing",[16,4930,4931,4932,4935],{},"Think of it like a ",[58,4933,4934],{},"billion token rule"," instead of the 10,000 hour rule. The best way to build intuition for AI is to consume tokens. Use it. A lot. Multiple sessions at a time.",[16,4937,4938],{},"Tips and guides help, but nothing replaces hands-on experience.",[26,4940,4942],{"id":4941},"tip-22-clone-conversations-to-branch-off","Tip 22: Clone Conversations to Branch Off",[16,4944,4945],{},"Want to try a different approach without losing your original thread? Claude Code now has native forking:",[62,4947,4948,4956],{},[65,4949,4950,4955],{},[58,4951,4952],{},[199,4953,4954],{},"/fork"," — Forks the current session from within a conversation",[65,4957,4958,4963,4964,4967,4968,4971,4972,3097],{},[58,4959,4960],{},[199,4961,4962],{},"--fork-session"," — Use with ",[199,4965,4966],{},"--resume"," or ",[199,4969,4970],{},"--continue"," (e.g., ",[199,4973,4974],{},"claude -c --fork-session",[16,4976,4977],{},"Add a shortcut for the flag:",[192,4979,4981],{"className":1125,"code":4980,"language":1127,"meta":201,"style":201},"claude() {\n  local args=()\n  for arg in \"$@\"; do\n    if [[ \"$arg\" == \"--fs\" ]]; then\n      args+=(\"--fork-session\")\n    else\n      args+=(\"$arg\")\n    fi\n  done\n  command claude \"${args[@]}\"\n}\n",[199,4982,4983,4992,5003,5027,5058,5074,5079,5093,5098,5103,5120],{"__ignoreMap":201},[1131,4984,4985,4987,4990],{"class":1133,"line":1134},[1131,4986,4275],{"class":1660},[1131,4988,4989],{"class":1236},"()",[1131,4991,2891],{"class":1236},[1131,4993,4994,4997,5000],{"class":1133,"line":310},[1131,4995,4996],{"class":2859},"  local",[1131,4998,4999],{"class":2863}," args",[1131,5001,5002],{"class":1236},"=()\n",[1131,5004,5005,5008,5011,5014,5016,5019,5021,5024],{"class":1133,"line":311},[1131,5006,5007],{"class":2870},"  for",[1131,5009,5010],{"class":2863}," arg ",[1131,5012,5013],{"class":2870},"in",[1131,5015,1237],{"class":1236},[1131,5017,5018],{"class":3879},"$@",[1131,5020,3988],{"class":1236},[1131,5022,5023],{"class":1236},";",[1131,5025,5026],{"class":2870}," do\n",[1131,5028,5029,5032,5035,5037,5040,5042,5045,5047,5050,5052,5055],{"class":1133,"line":1667},[1131,5030,5031],{"class":2870},"    if",[1131,5033,5034],{"class":1236}," [[",[1131,5036,1237],{"class":1236},[1131,5038,5039],{"class":2863},"$arg",[1131,5041,3988],{"class":1236},[1131,5043,5044],{"class":1236}," ==",[1131,5046,1237],{"class":1236},[1131,5048,5049],{"class":1141},"--fs",[1131,5051,3988],{"class":1236},[1131,5053,5054],{"class":1236}," ]];",[1131,5056,5057],{"class":2870}," then\n",[1131,5059,5060,5063,5066,5068,5070,5072],{"class":1133,"line":1673},[1131,5061,5062],{"class":2863},"      args",[1131,5064,5065],{"class":1236},"+=(",[1131,5067,3988],{"class":1236},[1131,5069,4962],{"class":1141},[1131,5071,3988],{"class":1236},[1131,5073,3108],{"class":1236},[1131,5075,5076],{"class":1133,"line":1679},[1131,5077,5078],{"class":2870},"    else\n",[1131,5080,5081,5083,5085,5087,5089,5091],{"class":1133,"line":1688},[1131,5082,5062],{"class":2863},[1131,5084,5065],{"class":1236},[1131,5086,3988],{"class":1236},[1131,5088,5039],{"class":2863},[1131,5090,3988],{"class":1236},[1131,5092,3108],{"class":1236},[1131,5094,5095],{"class":1133,"line":1693},[1131,5096,5097],{"class":2870},"    fi\n",[1131,5099,5100],{"class":1133,"line":1699},[1131,5101,5102],{"class":2870},"  done\n",[1131,5104,5105,5108,5111,5114,5117],{"class":1133,"line":1711},[1131,5106,5107],{"class":1660},"  command",[1131,5109,5110],{"class":1141}," claude",[1131,5112,5113],{"class":1236}," \"${",[1131,5115,5116],{"class":2863},"args",[1131,5118,5119],{"class":1236},"[@]}\"\n",[1131,5121,5122],{"class":1133,"line":3043},[1131,5123,4781],{"class":1236},[16,5125,5126,5127,5130],{},"Now ",[199,5128,5129],{},"c -c --fs"," forks and continues in one command.",[607,5132,5134],{"id":5133},"half-clone-to-reduce-context","Half-Clone to Reduce Context",[16,5136,5137],{},"When a conversation is too long, a half-clone keeps only the later half — reducing token usage while preserving recent work.",[26,5139,5141],{"id":5140},"tip-23-use-realpath-for-absolute-paths","Tip 23: Use realpath for Absolute Paths",[16,5143,5144,5145,5148],{},"When telling Claude Code about files in other directories, use ",[199,5146,5147],{},"realpath"," to get the full absolute path:",[192,5150,5152],{"className":1125,"code":5151,"language":1127,"meta":201,"style":201},"realpath some/relative/path\n",[199,5153,5154],{"__ignoreMap":201},[1131,5155,5156,5158],{"class":1133,"line":1134},[1131,5157,5147],{"class":1137},[1131,5159,5160],{"class":1141}," some/relative/path\n",[16,5162,5163],{},"Simple, but saves confusion.",[26,5165,5167],{"id":5166},"tip-24-claudemd-vs-skills-vs-slash-commands-vs-plugins","Tip 24: CLAUDE.md vs Skills vs Slash Commands vs Plugins",[16,5169,5170],{},"These features can be confusing. Here's the breakdown:",[62,5172,5173,5179,5185,5191],{},[65,5174,5175,5178],{},[58,5176,5177],{},"CLAUDE.md"," — Always loaded into every conversation. Simple, but always present. Good for project context and persistent instructions",[65,5180,5181,5184],{},[58,5182,5183],{},"Skills"," — Like structured CLAUDE.md files, but only loaded when needed. More token-efficient. Can be invoked automatically or manually",[65,5186,5187,5190],{},[58,5188,5189],{},"Slash Commands"," — Similar to skills, but designed primarily for user invocation at a specific time",[65,5192,5193,5196],{},[58,5194,5195],{},"Plugins"," — Packages that can bundle skills, slash commands, agents, hooks, and MCP servers together",[16,5198,5199],{},"Skills and slash commands have been merging in recent versions. The key tradeoff is always-loaded (CLAUDE.md) vs on-demand (skills/commands).",[26,5201,5203],{"id":5202},"tip-25-interactive-pr-reviews","Tip 25: Interactive PR Reviews",[16,5205,5206,5207,5209],{},"Claude Code excels at PR reviews. Retrieve PR info with ",[199,5208,4188],{},", then go through it however you want — general overview, file by file, or deep dives into specific sections.",[16,5211,5212,5213,5216],{},"The key advantage: it's ",[58,5214,5215],{},"interactive",". Not a one-shot review, but a conversation where you control the pace and depth.",[26,5218,5220],{"id":5219},"tip-26-claude-code-as-a-research-tool","Tip 26: Claude Code as a Research Tool",[16,5222,5223],{},"Claude Code is a powerful research tool. Whether you're investigating GitHub Actions failures, doing sentiment analysis, exploring codebases, or digging into public information — it can handle it.",[16,5225,5226,5227,5229],{},"The key is giving it the right access methods: ",[199,5228,4188],{}," for GitHub, containers for risky operations, Gemini CLI for blocked sites, MCP for Slack and other services, Cmd+A for manual content transfer.",[26,5231,5233],{"id":5232},"tip-27-verify-output-in-multiple-ways","Tip 27: Verify Output in Multiple Ways",[16,5235,5236],{},"Don't rely on a single verification method:",[62,5238,5239,5245,5251,5257],{},[65,5240,5241,5244],{},[58,5242,5243],{},"Tests"," — Have Claude write and run tests for its own code",[65,5246,5247,5250],{},[58,5248,5249],{},"Visual diff"," — Use a Git client like GitHub Desktop to review changes",[65,5252,5253,5256],{},[58,5254,5255],{},"Draft PRs"," — Create draft PRs and review before marking ready",[65,5258,5259,5262],{},[58,5260,5261],{},"Self-check"," — Ask Claude to double-check its work: \"Verify every claim you made and produce a table of what you could confirm\"",[26,5264,5266],{"id":5265},"tip-28-claude-code-as-a-devops-engineer","Tip 28: Claude Code as a DevOps Engineer",[16,5268,5269],{},"For CI/CD failures, Claude Code can dig through logs that would be painful to parse manually. Give it a failing GitHub Actions run and ask it to find the root cause.",[16,5271,5272],{},"Keep pushing if it gives surface-level answers — was it a specific commit? A flaky test? A dependency issue? Once the root cause is identified, have it create a draft PR with the fix.",[26,5274,5276],{"id":5275},"tip-29-keep-claudemd-simple","Tip 29: Keep CLAUDE.md Simple",[16,5278,5279],{},"Start with no CLAUDE.md at all. Only add instructions when you find yourself repeating the same thing. Let Claude Code edit its own CLAUDE.md based on your verbal instructions — it knows exactly what to change.",[16,5281,5282],{},"Less is more. Every token in CLAUDE.md is loaded into every conversation.",[26,5284,5286],{"id":5285},"tip-30-claude-code-as-the-universal-interface","Tip 30: Claude Code as the Universal Interface",[16,5288,5289],{},"Claude Code isn't just a coding tool — it's a universal interface to your computer. Quick video edits through ffmpeg, audio transcription with Whisper, data visualization with Python, and with internet access the possibilities are endless.",[16,5291,5292],{},"It's a return to the text interface, but now each terminal tab is an autonomous brain you can delegate work to. As models improve, the proportion of tedious tasks you can offload only grows.",[26,5294,5296],{"id":5295},"tip-31-choose-the-right-level-of-abstraction","Tip 31: Choose the Right Level of Abstraction",[16,5298,5299],{},"It's not binary between \"vibe coding\" and \"careful engineering.\" It's a spectrum.",[16,5301,5302],{},[2187,5303],{"alt":5304,"src":5305},"The vibe coding spectrum from high-level to deep inspection","images/claude-code-tips/vibe-coding-spectrum.png",[16,5307,5308],{},"Sometimes flying over the surface is fine — one-time projects, non-critical code. Other times you need to go deep: inspecting file structure, individual functions, specific lines, dependencies.",[16,5310,5311],{},"Think of it like exploring an iceberg. You choose the depth. Claude Code is your guide at every level.",[1393,5313,5314],{},"html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}",{"title":201,"searchDepth":310,"depth":311,"links":5316},[5317,5318,5319,5320,5321,5322,5323,5324,5325,5328,5329,5330,5331,5332,5333,5336,5337,5338,5339,5340,5341,5345,5346,5349,5350,5351,5352,5353,5354,5355,5356,5357],{"id":4089,"depth":310,"text":4090},{"id":4105,"depth":310,"text":4106},{"id":4130,"depth":310,"text":4131},{"id":4167,"depth":310,"text":4168},{"id":4192,"depth":310,"text":4193},{"id":4199,"depth":310,"text":4200},{"id":4251,"depth":310,"text":4252},{"id":4363,"depth":310,"text":4364},{"id":4397,"depth":310,"text":4398,"children":5326},[5327],{"id":4524,"depth":311,"text":4525},{"id":4538,"depth":310,"text":4539},{"id":4548,"depth":310,"text":4549},{"id":4564,"depth":310,"text":4565},{"id":4574,"depth":310,"text":4575},{"id":4686,"depth":310,"text":4687},{"id":4702,"depth":310,"text":4703,"children":5334},[5335],{"id":4724,"depth":311,"text":4725},{"id":4791,"depth":310,"text":4792},{"id":4801,"depth":310,"text":4802},{"id":4825,"depth":310,"text":4826},{"id":4855,"depth":310,"text":4856},{"id":4868,"depth":310,"text":4869},{"id":4875,"depth":310,"text":4876,"children":5342},[5343,5344],{"id":4886,"depth":311,"text":4887},{"id":4920,"depth":311,"text":4921},{"id":4927,"depth":310,"text":4928},{"id":4941,"depth":310,"text":4942,"children":5347},[5348],{"id":5133,"depth":311,"text":5134},{"id":5140,"depth":310,"text":5141},{"id":5166,"depth":310,"text":5167},{"id":5202,"depth":310,"text":5203},{"id":5219,"depth":310,"text":5220},{"id":5232,"depth":310,"text":5233},{"id":5265,"depth":310,"text":5266},{"id":5275,"depth":310,"text":5276},{"id":5285,"depth":310,"text":5286},{"id":5295,"depth":310,"text":5296},"2026-01-28T00:00:00.000Z","A comprehensive collection of practical tips for getting the most out of Claude Code, from custom status lines and voice input to container orchestration and multi-model workflows.",{},"/blog/vibe-coding/2026-01-28-claude-code-tips-from-basics-to-advanced",{"title":3640,"description":5359},"blog/vibe-coding/2026-01-28-claude-code-tips-from-basics-to-advanced",[564,2793,1428,2794,5365],"cli-tools","rcfM8Crq1PN5-mTPLbtK3smmDvOMMQaP2pl3Pul9HFk",{"id":5368,"title":5369,"author":7,"body":5370,"category":6181,"date":6182,"description":6183,"extension":325,"featured":914,"image":3670,"meta":6184,"navigation":326,"path":6185,"seo":6186,"stem":6187,"tags":6188,"__hash__":6191},"blog/blog/devops/docker-compose-for-local-dev.md","Docker Compose für lokale Entwicklung",{"type":9,"value":5371,"toc":6169},[5372,5375,5378,5382,5408,5412,5415,5805,5809,5813,5816,5880,5883,5887,5890,5922,5929,5933,5940,5970,5988,5992,6112,6116,6158,6160,6163,6166],[12,5373,5369],{"id":5374},"docker-compose-für-lokale-entwicklung",[16,5376,5377],{},"„Es läuft auf meinem Rechner\" ist ein gelöstes Problem. Docker Compose ermöglicht es, den gesamten Entwicklungsstack als Code zu definieren – Datenbanken, Caches, Message Queues und die Anwendung selbst – alles in isolierten Containern.",[26,5379,5381],{"id":5380},"warum-docker-compose","Warum Docker Compose?",[62,5383,5384,5390,5396,5402],{},[65,5385,5386,5389],{},[58,5387,5388],{},"Reproduzierbar"," — Jedes Teammitglied bekommt dieselbe Umgebung",[65,5391,5392,5395],{},[58,5393,5394],{},"Isoliert"," — Keine Konflikte zwischen Projekten mit unterschiedlichen Dependency-Versionen",[65,5397,5398,5401],{},[58,5399,5400],{},"Wegwerfbar"," — Umgebung in Sekunden zerstören und neu aufbauen",[65,5403,5404,5407],{},[58,5405,5406],{},"Produktionsnah"," — Die Deployment-Topologie lokal abbilden",[26,5409,5411],{"id":5410},"ein-praktisches-beispiel","Ein praktisches Beispiel",[16,5413,5414],{},"Hier ist eine Compose-Datei für eine typische Webanwendung:",[192,5416,5420],{"className":5417,"code":5418,"language":5419,"meta":201,"style":201},"language-yaml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","services:\n  app:\n    build:\n      context: .\n      target: development\n    ports:\n      - \"3000:3000\"\n    volumes:\n      - .:/app\n      - /app/node_modules\n    environment:\n      DATABASE_URL: postgres://dev:dev@db:5432/myapp\n      REDIS_URL: redis://cache:6379\n    depends_on:\n      db:\n        condition: service_healthy\n      cache:\n        condition: service_started\n\n  db:\n    image: postgres:16-alpine\n    environment:\n      POSTGRES_USER: dev\n      POSTGRES_PASSWORD: dev\n      POSTGRES_DB: myapp\n    ports:\n      - \"5432:5432\"\n    volumes:\n      - pgdata:/var/lib/postgresql/data\n    healthcheck:\n      test: [\"CMD-SHELL\", \"pg_isready -U dev\"]\n      interval: 5s\n      timeout: 5s\n      retries: 5\n\n  cache:\n    image: redis:7-alpine\n    ports:\n      - \"6379:6379\"\n\nvolumes:\n  pgdata:\n","yaml",[199,5421,5422,5430,5437,5444,5454,5464,5471,5483,5490,5497,5504,5511,5521,5531,5539,5547,5558,5566,5576,5581,5589,5600,5607,5618,5628,5639,5646,5658,5665,5673,5681,5710,5721,5731,5742,5747,5755,5765,5772,5784,5789,5797],{"__ignoreMap":201},[1131,5423,5424,5427],{"class":1133,"line":1134},[1131,5425,5426],{"class":2896},"services",[1131,5428,5429],{"class":1236},":\n",[1131,5431,5432,5435],{"class":1133,"line":310},[1131,5433,5434],{"class":2896},"  app",[1131,5436,5429],{"class":1236},[1131,5438,5439,5442],{"class":1133,"line":311},[1131,5440,5441],{"class":2896},"    build",[1131,5443,5429],{"class":1236},[1131,5445,5446,5449,5451],{"class":1133,"line":1667},[1131,5447,5448],{"class":2896},"      context",[1131,5450,2900],{"class":1236},[1131,5452,5453],{"class":1148}," .\n",[1131,5455,5456,5459,5461],{"class":1133,"line":1673},[1131,5457,5458],{"class":2896},"      target",[1131,5460,2900],{"class":1236},[1131,5462,5463],{"class":1141}," development\n",[1131,5465,5466,5469],{"class":1133,"line":1679},[1131,5467,5468],{"class":2896},"    ports",[1131,5470,5429],{"class":1236},[1131,5472,5473,5476,5478,5481],{"class":1133,"line":1688},[1131,5474,5475],{"class":1236},"      -",[1131,5477,1237],{"class":1236},[1131,5479,5480],{"class":1141},"3000:3000",[1131,5482,1243],{"class":1236},[1131,5484,5485,5488],{"class":1133,"line":1693},[1131,5486,5487],{"class":2896},"    volumes",[1131,5489,5429],{"class":1236},[1131,5491,5492,5494],{"class":1133,"line":1699},[1131,5493,5475],{"class":1236},[1131,5495,5496],{"class":1141}," .:/app\n",[1131,5498,5499,5501],{"class":1133,"line":1711},[1131,5500,5475],{"class":1236},[1131,5502,5503],{"class":1141}," /app/node_modules\n",[1131,5505,5506,5509],{"class":1133,"line":3043},[1131,5507,5508],{"class":2896},"    environment",[1131,5510,5429],{"class":1236},[1131,5512,5513,5516,5518],{"class":1133,"line":3091},[1131,5514,5515],{"class":2896},"      DATABASE_URL",[1131,5517,2900],{"class":1236},[1131,5519,5520],{"class":1141}," postgres://dev:dev@db:5432/myapp\n",[1131,5522,5523,5526,5528],{"class":1133,"line":3102},[1131,5524,5525],{"class":2896},"      REDIS_URL",[1131,5527,2900],{"class":1236},[1131,5529,5530],{"class":1141}," redis://cache:6379\n",[1131,5532,5534,5537],{"class":1133,"line":5533},14,[1131,5535,5536],{"class":2896},"    depends_on",[1131,5538,5429],{"class":1236},[1131,5540,5542,5545],{"class":1133,"line":5541},15,[1131,5543,5544],{"class":2896},"      db",[1131,5546,5429],{"class":1236},[1131,5548,5550,5553,5555],{"class":1133,"line":5549},16,[1131,5551,5552],{"class":2896},"        condition",[1131,5554,2900],{"class":1236},[1131,5556,5557],{"class":1141}," service_healthy\n",[1131,5559,5561,5564],{"class":1133,"line":5560},17,[1131,5562,5563],{"class":2896},"      cache",[1131,5565,5429],{"class":1236},[1131,5567,5569,5571,5573],{"class":1133,"line":5568},18,[1131,5570,5552],{"class":2896},[1131,5572,2900],{"class":1236},[1131,5574,5575],{"class":1141}," service_started\n",[1131,5577,5579],{"class":1133,"line":5578},19,[1131,5580,1670],{"emptyLinePlaceholder":326},[1131,5582,5584,5587],{"class":1133,"line":5583},20,[1131,5585,5586],{"class":2896},"  db",[1131,5588,5429],{"class":1236},[1131,5590,5592,5595,5597],{"class":1133,"line":5591},21,[1131,5593,5594],{"class":2896},"    image",[1131,5596,2900],{"class":1236},[1131,5598,5599],{"class":1141}," postgres:16-alpine\n",[1131,5601,5603,5605],{"class":1133,"line":5602},22,[1131,5604,5508],{"class":2896},[1131,5606,5429],{"class":1236},[1131,5608,5610,5613,5615],{"class":1133,"line":5609},23,[1131,5611,5612],{"class":2896},"      POSTGRES_USER",[1131,5614,2900],{"class":1236},[1131,5616,5617],{"class":1141}," dev\n",[1131,5619,5621,5624,5626],{"class":1133,"line":5620},24,[1131,5622,5623],{"class":2896},"      POSTGRES_PASSWORD",[1131,5625,2900],{"class":1236},[1131,5627,5617],{"class":1141},[1131,5629,5631,5634,5636],{"class":1133,"line":5630},25,[1131,5632,5633],{"class":2896},"      POSTGRES_DB",[1131,5635,2900],{"class":1236},[1131,5637,5638],{"class":1141}," myapp\n",[1131,5640,5642,5644],{"class":1133,"line":5641},26,[1131,5643,5468],{"class":2896},[1131,5645,5429],{"class":1236},[1131,5647,5649,5651,5653,5656],{"class":1133,"line":5648},27,[1131,5650,5475],{"class":1236},[1131,5652,1237],{"class":1236},[1131,5654,5655],{"class":1141},"5432:5432",[1131,5657,1243],{"class":1236},[1131,5659,5661,5663],{"class":1133,"line":5660},28,[1131,5662,5487],{"class":2896},[1131,5664,5429],{"class":1236},[1131,5666,5668,5670],{"class":1133,"line":5667},29,[1131,5669,5475],{"class":1236},[1131,5671,5672],{"class":1141}," pgdata:/var/lib/postgresql/data\n",[1131,5674,5676,5679],{"class":1133,"line":5675},30,[1131,5677,5678],{"class":2896},"    healthcheck",[1131,5680,5429],{"class":1236},[1131,5682,5684,5687,5689,5691,5693,5696,5698,5700,5702,5705,5707],{"class":1133,"line":5683},31,[1131,5685,5686],{"class":2896},"      test",[1131,5688,2900],{"class":1236},[1131,5690,3051],{"class":1236},[1131,5692,3988],{"class":1236},[1131,5694,5695],{"class":1141},"CMD-SHELL",[1131,5697,3988],{"class":1236},[1131,5699,2888],{"class":1236},[1131,5701,1237],{"class":1236},[1131,5703,5704],{"class":1141},"pg_isready -U dev",[1131,5706,3988],{"class":1236},[1131,5708,5709],{"class":1236},"]\n",[1131,5711,5713,5716,5718],{"class":1133,"line":5712},32,[1131,5714,5715],{"class":2896},"      interval",[1131,5717,2900],{"class":1236},[1131,5719,5720],{"class":1141}," 5s\n",[1131,5722,5724,5727,5729],{"class":1133,"line":5723},33,[1131,5725,5726],{"class":2896},"      timeout",[1131,5728,2900],{"class":1236},[1131,5730,5720],{"class":1141},[1131,5732,5734,5737,5739],{"class":1133,"line":5733},34,[1131,5735,5736],{"class":2896},"      retries",[1131,5738,2900],{"class":1236},[1131,5740,5741],{"class":1148}," 5\n",[1131,5743,5745],{"class":1133,"line":5744},35,[1131,5746,1670],{"emptyLinePlaceholder":326},[1131,5748,5750,5753],{"class":1133,"line":5749},36,[1131,5751,5752],{"class":2896},"  cache",[1131,5754,5429],{"class":1236},[1131,5756,5758,5760,5762],{"class":1133,"line":5757},37,[1131,5759,5594],{"class":2896},[1131,5761,2900],{"class":1236},[1131,5763,5764],{"class":1141}," redis:7-alpine\n",[1131,5766,5768,5770],{"class":1133,"line":5767},38,[1131,5769,5468],{"class":2896},[1131,5771,5429],{"class":1236},[1131,5773,5775,5777,5779,5782],{"class":1133,"line":5774},39,[1131,5776,5475],{"class":1236},[1131,5778,1237],{"class":1236},[1131,5780,5781],{"class":1141},"6379:6379",[1131,5783,1243],{"class":1236},[1131,5785,5787],{"class":1133,"line":5786},40,[1131,5788,1670],{"emptyLinePlaceholder":326},[1131,5790,5792,5795],{"class":1133,"line":5791},41,[1131,5793,5794],{"class":2896},"volumes",[1131,5796,5429],{"class":1236},[1131,5798,5800,5803],{"class":1133,"line":5799},42,[1131,5801,5802],{"class":2896},"  pgdata",[1131,5804,5429],{"class":1236},[26,5806,5808],{"id":5807},"wichtige-patterns","Wichtige Patterns",[607,5810,5812],{"id":5811},"health-checks","Health Checks",[16,5814,5815],{},"Container nicht einfach starten – warten, bis sie bereit sind:",[192,5817,5819],{"className":5417,"code":5818,"language":5419,"meta":201,"style":201},"healthcheck:\n  test: [\"CMD-SHELL\", \"pg_isready -U dev\"]\n  interval: 5s\n  timeout: 5s\n  retries: 5\n",[199,5820,5821,5828,5853,5862,5871],{"__ignoreMap":201},[1131,5822,5823,5826],{"class":1133,"line":1134},[1131,5824,5825],{"class":2896},"healthcheck",[1131,5827,5429],{"class":1236},[1131,5829,5830,5833,5835,5837,5839,5841,5843,5845,5847,5849,5851],{"class":1133,"line":310},[1131,5831,5832],{"class":2896},"  test",[1131,5834,2900],{"class":1236},[1131,5836,3051],{"class":1236},[1131,5838,3988],{"class":1236},[1131,5840,5695],{"class":1141},[1131,5842,3988],{"class":1236},[1131,5844,2888],{"class":1236},[1131,5846,1237],{"class":1236},[1131,5848,5704],{"class":1141},[1131,5850,3988],{"class":1236},[1131,5852,5709],{"class":1236},[1131,5854,5855,5858,5860],{"class":1133,"line":311},[1131,5856,5857],{"class":2896},"  interval",[1131,5859,2900],{"class":1236},[1131,5861,5720],{"class":1141},[1131,5863,5864,5867,5869],{"class":1133,"line":1667},[1131,5865,5866],{"class":2896},"  timeout",[1131,5868,2900],{"class":1236},[1131,5870,5720],{"class":1141},[1131,5872,5873,5876,5878],{"class":1133,"line":1673},[1131,5874,5875],{"class":2896},"  retries",[1131,5877,2900],{"class":1236},[1131,5879,5741],{"class":1148},[16,5881,5882],{},"Das verhindert, dass die App abstürzt, weil die Datenbank noch keine Verbindungen akzeptiert.",[607,5884,5886],{"id":5885},"volume-mounts-für-hot-reload","Volume Mounts für Hot Reload",[16,5888,5889],{},"Den Quellcode in den Container mounten für Live-Reloading:",[192,5891,5893],{"className":5417,"code":5892,"language":5419,"meta":201,"style":201},"volumes:\n  - .:/app           # Quellcode\n  - /app/node_modules # Überschreiben der node_modules im Container verhindern\n",[199,5894,5895,5901,5912],{"__ignoreMap":201},[1131,5896,5897,5899],{"class":1133,"line":1134},[1131,5898,5794],{"class":2896},[1131,5900,5429],{"class":1236},[1131,5902,5903,5906,5909],{"class":1133,"line":310},[1131,5904,5905],{"class":1236},"  -",[1131,5907,5908],{"class":1141}," .:/app",[1131,5910,5911],{"class":1643},"           # Quellcode\n",[1131,5913,5914,5916,5919],{"class":1133,"line":311},[1131,5915,5905],{"class":1236},[1131,5917,5918],{"class":1141}," /app/node_modules",[1131,5920,5921],{"class":1643}," # Überschreiben der node_modules im Container verhindern\n",[16,5923,5924,5925,5928],{},"Das anonyme Volume für ",[199,5926,5927],{},"node_modules"," ist entscheidend – es verhindert, dass die Host-Module die plattformspezifischen Binaries des Containers überschreiben.",[607,5930,5932],{"id":5931},"umgebungsvariablen","Umgebungsvariablen",[16,5934,5935,5936,5939],{},"Secrets gehören nicht in die Compose-Datei. Nutze ",[199,5937,5938],{},".env","-Dateien:",[192,5941,5943],{"className":1125,"code":5942,"language":1127,"meta":201,"style":201},"# .env (niemals committen)\nPOSTGRES_PASSWORD=dev\nAPI_SECRET=local-dev-secret\n",[199,5944,5945,5950,5960],{"__ignoreMap":201},[1131,5946,5947],{"class":1133,"line":1134},[1131,5948,5949],{"class":1643},"# .env (niemals committen)\n",[1131,5951,5952,5955,5957],{"class":1133,"line":310},[1131,5953,5954],{"class":2863},"POSTGRES_PASSWORD",[1131,5956,2867],{"class":1236},[1131,5958,5959],{"class":1141},"dev\n",[1131,5961,5962,5965,5967],{"class":1133,"line":311},[1131,5963,5964],{"class":2863},"API_SECRET",[1131,5966,2867],{"class":1236},[1131,5968,5969],{"class":1141},"local-dev-secret\n",[192,5971,5973],{"className":5417,"code":5972,"language":5419,"meta":201,"style":201},"env_file:\n  - .env\n",[199,5974,5975,5982],{"__ignoreMap":201},[1131,5976,5977,5980],{"class":1133,"line":1134},[1131,5978,5979],{"class":2896},"env_file",[1131,5981,5429],{"class":1236},[1131,5983,5984,5986],{"class":1133,"line":310},[1131,5985,5905],{"class":1236},[1131,5987,1708],{"class":1141},[26,5989,5991],{"id":5990},"häufige-befehle","Häufige Befehle",[192,5993,5995],{"className":1125,"code":5994,"language":1127,"meta":201,"style":201},"# Alles starten\ndocker compose up -d\n\n# Logs anzeigen\ndocker compose logs -f app\n\n# Nach Dockerfile-Änderungen neu bauen\ndocker compose up -d --build\n\n# Alles zurücksetzen\ndocker compose down -v\n\n# Einmaligen Befehl ausführen\ndocker compose exec app npm run migrate\n",[199,5996,5997,6002,6016,6020,6025,6040,6044,6049,6062,6066,6071,6083,6087,6092],{"__ignoreMap":201},[1131,5998,5999],{"class":1133,"line":1134},[1131,6000,6001],{"class":1643},"# Alles starten\n",[1131,6003,6004,6007,6010,6013],{"class":1133,"line":310},[1131,6005,6006],{"class":1137},"docker",[1131,6008,6009],{"class":1141}," compose",[1131,6011,6012],{"class":1141}," up",[1131,6014,6015],{"class":1141}," -d\n",[1131,6017,6018],{"class":1133,"line":311},[1131,6019,1670],{"emptyLinePlaceholder":326},[1131,6021,6022],{"class":1133,"line":1667},[1131,6023,6024],{"class":1643},"# Logs anzeigen\n",[1131,6026,6027,6029,6031,6034,6037],{"class":1133,"line":1673},[1131,6028,6006],{"class":1137},[1131,6030,6009],{"class":1141},[1131,6032,6033],{"class":1141}," logs",[1131,6035,6036],{"class":1141}," -f",[1131,6038,6039],{"class":1141}," app\n",[1131,6041,6042],{"class":1133,"line":1679},[1131,6043,1670],{"emptyLinePlaceholder":326},[1131,6045,6046],{"class":1133,"line":1688},[1131,6047,6048],{"class":1643},"# Nach Dockerfile-Änderungen neu bauen\n",[1131,6050,6051,6053,6055,6057,6059],{"class":1133,"line":1693},[1131,6052,6006],{"class":1137},[1131,6054,6009],{"class":1141},[1131,6056,6012],{"class":1141},[1131,6058,4441],{"class":1141},[1131,6060,6061],{"class":1141}," --build\n",[1131,6063,6064],{"class":1133,"line":1699},[1131,6065,1670],{"emptyLinePlaceholder":326},[1131,6067,6068],{"class":1133,"line":1711},[1131,6069,6070],{"class":1643},"# Alles zurücksetzen\n",[1131,6072,6073,6075,6077,6080],{"class":1133,"line":3043},[1131,6074,6006],{"class":1137},[1131,6076,6009],{"class":1141},[1131,6078,6079],{"class":1141}," down",[1131,6081,6082],{"class":1141}," -v\n",[1131,6084,6085],{"class":1133,"line":3091},[1131,6086,1670],{"emptyLinePlaceholder":326},[1131,6088,6089],{"class":1133,"line":3102},[1131,6090,6091],{"class":1643},"# Einmaligen Befehl ausführen\n",[1131,6093,6094,6096,6098,6101,6104,6107,6109],{"class":1133,"line":5533},[1131,6095,6006],{"class":1137},[1131,6097,6009],{"class":1141},[1131,6099,6100],{"class":1141}," exec",[1131,6102,6103],{"class":1141}," app",[1131,6105,6106],{"class":1141}," npm",[1131,6108,1758],{"class":1141},[1131,6110,6111],{"class":1141}," migrate\n",[26,6113,6115],{"id":6114},"tipps","Tipps",[947,6117,6118,6124,6137,6143,6152],{},[65,6119,6120,6123],{},[58,6121,6122],{},"Alpine-Images verwenden"," — Sie sind 5–10x kleiner als Standard-Images",[65,6125,6126,6129,6130,6133,6134],{},[58,6127,6128],{},"Versionen pinnen"," — ",[199,6131,6132],{},"postgres:16-alpine",", nicht ",[199,6135,6136],{},"postgres:latest",[65,6138,6139,6142],{},[58,6140,6141],{},"Named Volumes"," — Daten über Container-Neustarts hinweg persistieren",[65,6144,6145,6129,6148,6151],{},[58,6146,6147],{},"Override-Dateien",[199,6149,6150],{},"docker-compose.override.yml"," für persönliche Einstellungen nutzen",[65,6153,6154,6157],{},[58,6155,6156],{},"Profiles"," — Optionale Services gruppieren (Monitoring, Debugging-Tools)",[26,6159,4032],{"id":4031},[16,6161,6162],{},"Im nächsten Artikel schauen wir uns Multi-Stage Dockerfiles für Produktions-Builds an und wie man seine CI/CD-Pipeline rund um Container strukturiert.",[16,6164,6165],{},"Docker Compose macht Infrastruktur zu Code. Behandle es mit derselben Sorgfalt wie jeden anderen Teil deiner Codebase.",[1393,6167,6168],{},"html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}",{"title":201,"searchDepth":310,"depth":311,"links":6170},[6171,6172,6173,6178,6179,6180],{"id":5380,"depth":310,"text":5381},{"id":5410,"depth":310,"text":5411},{"id":5807,"depth":310,"text":5808,"children":6174},[6175,6176,6177],{"id":5811,"depth":311,"text":5812},{"id":5885,"depth":311,"text":5886},{"id":5931,"depth":311,"text":5932},{"id":5990,"depth":310,"text":5991},{"id":6114,"depth":310,"text":6115},{"id":4031,"depth":310,"text":4032},"devops","2021-02-08T00:00:00.000Z","Wie man mit Docker Compose reproduzierbare lokale Entwicklungsumgebungen erstellt, die die Produktionsumgebung widerspiegeln.",{},"/blog/devops/docker-compose-for-local-dev",{"title":5369,"description":6183},"blog/devops/docker-compose-for-local-dev",[6006,6189,6190],"containers","local-development","M5qkhjxTKacvpCCHjLjqpPYAEPtuSIR1RAVe09gqpAU",1772700013933]