{"id":20166,"date":"2026-09-29T09:17:46","date_gmt":"2026-09-29T13:17:46","guid":{"rendered":"https:\/\/wp.glbgpt.com\/?p=20166"},"modified":"2026-09-29T09:17:47","modified_gmt":"2026-09-29T13:17:47","slug":"claude-code-model-selection","status":"publish","type":"post","link":"https:\/\/wp.glbgpt.com\/de\/hub\/claude-code-model-selection","title":{"rendered":"Auswahl des Claude-Code-Modells: Standardwerte, Umschaltung und Kosten"},"content":{"rendered":"<p class=\"wp-block-paragraph\"><strong>Bei der Auswahl eines Modells nach dem Claude-Code sollten Sie \u201eHaiku\u201c f\u00fcr kleine, \u00fcberpr\u00fcfbare \u00c4nderungen, \u201eSonnet\u201c f\u00fcr die routinem\u00e4\u00dfige Umsetzung und \u201eOpus\u201c f\u00fcr Aufgaben mit h\u00f6herer Mehrdeutigkeit oder h\u00f6heren Anforderungen an die Argumentation verwenden.<\/strong> Anthropic empfiehlt derzeit Opus 5.5 als allgemeinen Ausgangspunkt; Ihre Aufgabenstellung, Ihr Pr\u00fcfungsaufwand und Ihr Budget entscheiden dar\u00fcber, ob ein kleineres Modell besser geeignet ist.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Um das Modell zu wechseln, \u00f6ffnen Sie <code>\/Modell<\/code>. Presse <kbd>Eingabe<\/kbd> um eine Standardeinstellung zu speichern, oder <kbd>s<\/kbd> um nur die aktuelle Sitzung umzuschalten. F\u00fcr einen einmaligen Start verwenden Sie <code>claude --Modell: Opus<\/code>. Da diese Optionen eine unterschiedliche Dauer haben, ist die Entscheidung, wie lange die Umstellung andauern soll, ebenso wichtig wie die Wahl des Modells.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Zur Programmierarbeit geh\u00f6ren auch Recherche, Erl\u00e4uterungen, Dokumentation und kreative Inhalte. GlobalGPT vereint f\u00fchrende KI-Modelle und zahlreiche KI-Tools in einem kosteng\u00fcnstigen Dashboard, w\u00e4hrend seine Befehlszeilenschnittstelle (CLI) diese Tools mit Terminal- und Entwicklungsabl\u00e4ufen verbindet. <a href=\"https:\/\/www.glbgpt.com\/home?inviter=hub_content_home&amp;login=1\">Gestalten Sie Ihren Arbeitsablauf mit GlobalGPT<\/a> um diese miteinander verbundenen Aufgaben zusammenzuhalten, w\u00e4hrend Sie von der Idee zum lauff\u00e4higen Code gelangen.<\/p>\n\n\n\n<div class=\"wp-block-group is-layout-constrained wp-block-group-is-layout-constrained\">\n<figure class=\"wp-block-image size-large\"><img alt=\"\" fetchpriority=\"high\" decoding=\"async\" width=\"1024\" height=\"636\" src=\"https:\/\/wp.glbgpt.com\/wp-content\/uploads\/2026\/07\/claude-opus-5-5-1024x636.png\" class=\"wp-image-19921\" srcset=\"https:\/\/wp.glbgpt.com\/wp-content\/uploads\/2026\/07\/claude-opus-5-5-1024x636.png 1024w, https:\/\/wp.glbgpt.com\/wp-content\/uploads\/2026\/07\/claude-opus-5-5-300x186.png 300w, https:\/\/wp.glbgpt.com\/wp-content\/uploads\/2026\/07\/claude-opus-5-5-767x477.png 767w, https:\/\/wp.glbgpt.com\/wp-content\/uploads\/2026\/07\/claude-opus-5-5-1536x955.png 1536w, https:\/\/wp.glbgpt.com\/wp-content\/uploads\/2026\/07\/claude-opus-5-5-18x11.png 18w, https:\/\/wp.glbgpt.com\/wp-content\/uploads\/2026\/07\/claude-opus-5-5.jpg 1897w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<div class=\"wp-block-buttons is-content-justification-center is-layout-flex wp-container-core-buttons-is-layout-3e41869c wp-block-buttons-is-layout-flex\">\n<div class=\"wp-block-button is-style-fill\"><a class=\"wp-block-button__link has-luminous-vivid-amber-to-luminous-vivid-orange-gradient-background has-background wp-element-button\" href=\"https:\/\/www.glbgpt.com\/home\/claude-opus-5-5?inviter=hub_claude55&amp;login=1\"><strong>Testen Sie Cluade Opus 5.5 jetzt auf GlobalGPT<\/strong><\/a><\/div>\n<\/div>\n<\/div>\n\n\n\n<nav class=\"ccms-toc\" aria-label=\"Auf dieser Seite\" style=\"background:#f0f4fb;border:1px solid #d7dfed;border-radius:8px;padding:18px 24px;margin:30px 0;color:#172438;font:16px\/1.65 system-ui,sans-serif\"><p><strong>Auf dieser Seite<\/strong><\/p><ul style=\"margin:0;padding-left:22px\"><li style=\"margin:8px 0\"><a style=\"color:#254fc2;text-decoration:underline\" href=\"#choose-a-model\">Welches Modell sollten Sie im Claude-Code verwenden?<\/a><\/li><li style=\"margin:8px 0\"><a style=\"color:#254fc2;text-decoration:underline\" href=\"#switch-models\">So wechselt man innerhalb einer Sitzung das Modell<\/a><\/li><li style=\"margin:8px 0\"><a style=\"color:#254fc2;text-decoration:underline\" href=\"#default-model\">So legen Sie ein Standardmodell fest<\/a><\/li><li style=\"margin:8px 0\"><a style=\"color:#254fc2;text-decoration:underline\" href=\"#opusplan\">Was Opusplan eigentlich macht<\/a><\/li><li style=\"margin:8px 0\"><a style=\"color:#254fc2;text-decoration:underline\" href=\"#coding-tests\">Was zwei Programmieraufgaben gezeigt haben<\/a><\/li><li style=\"margin:8px 0\"><a style=\"color:#254fc2;text-decoration:underline\" href=\"#model-cost\">Wie wirkt sich die Wahl des Modells auf die Kosten aus?<\/a><\/li><li style=\"margin:8px 0\"><a style=\"color:#254fc2;text-decoration:underline\" href=\"#troubleshooting\">Warum das von Ihnen gew\u00e4hlte Modell m\u00f6glicherweise nicht funktioniert<\/a><\/li><li style=\"margin:8px 0\"><a style=\"color:#254fc2;text-decoration:underline\" href=\"#globalgpt-workflow\">Erstellen Sie mit GlobalGPT einen umfassenderen Arbeitsablauf<\/a><\/li><li style=\"margin:8px 0\"><a style=\"color:#254fc2;text-decoration:underline\" href=\"#faq\">FAQ<\/a><\/li><\/ul><\/nav>\n\n\n\n<h2 id=\"choose-a-model\" class=\"wp-block-heading\">Welches Modell sollten Sie im Claude-Code verwenden?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Beginnen Sie mit der Struktur der Arbeit. Eine kurze Funktion mit klar definierten erwarteten Ergebnissen erfordert eine andere Bewertung als ein sporadisch auftretender Fehler, der sich \u00fcber mehrere Dienste erstreckt. Die entscheidende Frage lautet, ob das Modell mit angemessenem \u00dcberpr\u00fcfungsaufwand und durch Iterationen eine akzeptable \u00c4nderung hervorbringen kann.<\/p>\n\n\n\n<figure class=\"wp-block-table\" style=\"overflow-x:auto;margin:24px 0;border:1px solid #d7dfed;border-radius:8px;box-sizing:border-box;max-width:100%\"><table style=\"width:100%;min-width:640px;border-collapse:collapse;font:15px\/1.6 system-ui,sans-serif\"><thead><tr><th scope=\"col\" style=\"padding:12px;border-bottom:1px solid #d7dfed;text-align:left;vertical-align:top;color:#172438;background:#edf1fa\">Aktuelles Modell<\/th><th scope=\"col\" style=\"padding:12px;border-bottom:1px solid #d7dfed;text-align:left;vertical-align:top;color:#172438;background:#edf1fa\">Wof\u00fcr es vorgesehen ist<\/th><th scope=\"col\" style=\"padding:12px;border-bottom:1px solid #d7dfed;text-align:left;vertical-align:top;color:#172438;background:#edf1fa\">Eine praktische Einstiegsaufgabe<\/th><\/tr><\/thead><tbody><tr><td style=\"padding:12px;border-bottom:1px solid #d7dfed;text-align:left;vertical-align:top;color:#23334c\">Claude Haiku 4.5<\/td><td style=\"padding:12px;border-bottom:1px solid #d7dfed;text-align:left;vertical-align:top;color:#23334c\">Schnelles, effizientes Arbeiten mit einem eng gefassten Auftragsumfang<\/td><td style=\"padding:12px;border-bottom:1px solid #d7dfed;text-align:left;vertical-align:top;color:#23334c\">Eine kleine Umstrukturierung, eine sich wiederholende Transformation oder ein einfacher Testfall<\/td><\/tr><tr><td style=\"padding:12px;border-bottom:1px solid #d7dfed;text-align:left;vertical-align:top;color:#23334c\">Claude Sonett 5<\/td><td style=\"padding:12px;border-bottom:1px solid #d7dfed;text-align:left;vertical-align:top;color:#23334c\">Eine ausgewogene Mischung aus Intelligenz und Geschwindigkeit f\u00fcr das t\u00e4gliche Programmieren<\/td><td style=\"padding:12px;border-bottom:1px solid #d7dfed;text-align:left;vertical-align:top;color:#23334c\">Eine Funktion mit etablierten Mustern, eine routinem\u00e4\u00dfige Fehlerbehebung oder eine Erl\u00e4uterung des Codes<\/td><\/tr><tr><td style=\"padding:12px;border-bottom:1px solid #d7dfed;text-align:left;vertical-align:top;color:#23334c\">Claude Opus 5,5<\/td><td style=\"padding:12px;border-bottom:1px solid #d7dfed;text-align:left;vertical-align:top;color:#23334c\">Komplexe Schlussfolgerungen und umfangreichere Arbeiten zur agentischen Kodierung<\/td><td style=\"padding:12px;border-bottom:1px solid #d7dfed;text-align:left;vertical-align:top;color:#23334c\">Ein mehrdeutiger Fehler, ein architektonischer Kompromiss oder eine \u00c4nderung mit sich gegenseitig beeinflussenden Einschr\u00e4nkungen<\/td><\/tr><tr><td style=\"padding:12px;border-bottom:1px solid #d7dfed;text-align:left;vertical-align:top;color:#23334c\">Claude Fable 5.1<\/td><td style=\"padding:12px;border-bottom:1px solid #d7dfed;text-align:left;vertical-align:top;color:#23334c\">Die schwierigsten und am l\u00e4ngsten andauernden Ermittlungen<\/td><td style=\"padding:12px;border-bottom:1px solid #d7dfed;text-align:left;vertical-align:top;color:#23334c\">Eine Eskalation, bei der schwierige Arbeit immer noch ein h\u00f6heres Opus-Einsatzniveau \u00fcbertrumpft<\/td><\/tr><\/tbody><\/table><figcaption class=\"wp-element-caption\" style=\"font-size:14px;line-height:1.6;color:#52617a;padding:12px\">Aktuelle Modellfamilien und Eignung f\u00fcr bestimmte Aufgaben, basierend auf der Dokumentation zu Anthropic; die Aufgabenvorschl\u00e4ge dienen als praktische Anhaltspunkte.<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Haiku ist eine \u00dcberlegung wert, wenn Fehler leicht zu erkennen sind und die \u00c4nderungen gering sind. Sonnet ist eine sinnvolle Wahl, wenn die allt\u00e4gliche Umsetzung mehr Kontext und Urteilsverm\u00f6gen erfordert. Opus sollte in Betracht gezogen werden, wenn das Verst\u00e4ndnis des Problems einen wesentlichen Teil der Aufgabe ausmacht. Fable verdient eine gesonderte Entscheidung bei anspruchsvollen Aufgaben; es war nicht Teil unseres Codierungstests mit den drei Modellen.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Dies sind Ausgangspunkte, keine automatischen Qualit\u00e4tsgarantien. Eine kosteng\u00fcnstigere L\u00f6sung kann teuer werden, wenn sie mehrere \u00dcberarbeitungen oder eine umfassende \u00dcberpr\u00fcfung erfordert. Umgekehrt kann ein gr\u00f6\u00dferes Modell bei einer einfachen Transformation, die Ihre Pr\u00fcfungen bereits besteht, nur wenig zus\u00e4tzlichen Nutzen bieten. F\u00fcr eine breitere Anwendung \u00fcber den Claude-Code hinaus, <a href=\"https:\/\/www.glbgpt.com\/hub\/claude-haiku-vs-sonnet-vs-opus\/\">Vergleichen Sie die Claude-Modellreihen<\/a>.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"1440\" height=\"900\" src=\"https:\/\/wp.glbgpt.com\/wp-content\/uploads\/2026\/09\/anthropic-model-lineup-20260928_ac366ec699fe4dc393b80b2cf128cf46.webp\" alt=\"Der aktuelle Modellvergleich von Anthropic f\u00fcr Fable 5.1, Opus 5.5, Sonnet 5 und Haiku 4.5.\" class=\"wp-image-20171\" srcset=\"https:\/\/wp.glbgpt.com\/wp-content\/uploads\/2026\/09\/anthropic-model-lineup-20260928_ac366ec699fe4dc393b80b2cf128cf46.webp 1440w, https:\/\/wp.glbgpt.com\/wp-content\/uploads\/2026\/09\/anthropic-model-lineup-20260928_ac366ec699fe4dc393b80b2cf128cf46-300x188.webp 300w, https:\/\/wp.glbgpt.com\/wp-content\/uploads\/2026\/09\/anthropic-model-lineup-20260928_ac366ec699fe4dc393b80b2cf128cf46-1024x640.webp 1024w, https:\/\/wp.glbgpt.com\/wp-content\/uploads\/2026\/09\/anthropic-model-lineup-20260928_ac366ec699fe4dc393b80b2cf128cf46-768x480.webp 768w, https:\/\/wp.glbgpt.com\/wp-content\/uploads\/2026\/09\/anthropic-model-lineup-20260928_ac366ec699fe4dc393b80b2cf128cf46-18x12.webp 18w\" sizes=\"(max-width: 1440px) 100vw, 1440px\" \/><figcaption class=\"wp-element-caption\">Die Modellpalette von Anthropic, Stand: 28. September 2026. Die Verf\u00fcgbarkeit im Claude-Code h\u00e4ngt von Ihrem Anbieter und Ihrem Konto ab.<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Die <a href=\"https:\/\/platform.claude.com\/docs\/en\/about-claude\/models\/overview\">Offizielle Modell\u00fcbersicht<\/a> Listet Kontextfenster mit einer Gr\u00f6\u00dfe von 1 Mio. Token f\u00fcr Fable 5.1, Opus 5.5 und Sonnet 5 sowie 200.000 Token f\u00fcr Haiku 4.5 auf. Hierbei handelt es sich um API-Spezifikationen. Ihr Claude-Code-Anbieter, Ihr Konto und Ihre Konfiguration bestimmen, welche Kontextoptionen in einer Sitzung verf\u00fcgbar sind. Ein gro\u00dfes Fenster ist f\u00fcr den erforderlichen Kontext n\u00fctzlich; wenn Sie es jedoch mit irrelevanten Inhalten f\u00fcllen, bedeutet dies dennoch zus\u00e4tzliche Arbeit f\u00fcr das Modell.<\/p>\n\n\n\n<h2 id=\"switch-models\" class=\"wp-block-heading\">So wechselt man innerhalb einer Sitzung das Modell<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">F\u00fchren Sie innerhalb einer interaktiven Sitzung Folgendes aus: <code>\/Modell<\/code> um die Modellauswahl zu \u00f6ffnen. Markieren Sie die Modellzeile und dr\u00fccken Sie <kbd>s<\/kbd> falls es sich um eine einmalige \u00c4nderung handelt. Durch Dr\u00fccken von <kbd>Eingabe<\/kbd> speichert die Auswahl als Ihre Benutzervorauswahl. Durch Eingabe von <code>\/Modellsonett<\/code> In aktuellen Versionen wird es dadurch auch direkt gespeichert.<\/p>\n\n\n\n<style>\n.ccms-commands{border:1px solid #d8dfeb;border-radius:8px;padding:22px;background:#fff;color:#172438;font:16px\/1.6 system-ui,sans-serif;margin:28px 0}.ccms-commands h3{color:#172438;font-size:1.3rem;line-height:1.3;margin:0 0 10px}.ccms-commands p{color:#34435d;margin:12px 0}.ccms-commands a{color:#254fc2;text-decoration:underline}.ccms-commands code,.ccms-commands kbd{font:14px\/1.5 ui-monospace,SFMono-Regular,monospace;color:#172438;background:#edf1fa;padding:2px 5px;border-radius:3px}.ccms-commands__scroll{overflow-x:auto}.ccms-commands table{border-collapse:collapse;width:100%;min-width:620px;text-align:left}.ccms-commands th,.ccms-commands td{padding:12px 10px;border-bottom:1px solid #d8dfeb;color:#172438;vertical-align:top}.ccms-commands th{background:#edf1fa;font-weight:600}.ccms-commands caption{text-align:left;font-size:14px;color:#43536f;margin-bottom:10px}@media(max-width:520px){.ccms-commands{padding:16px}}\n<\/style>\n<section class=\"ccms-commands\" aria-labelledby=\"ccms-command-title\" style=\"border:1px solid #d8dfeb;border-radius:8px;padding:22px;background:#fff;color:#172438;font:16px\/1.6 system-ui,sans-serif;margin:28px 0;box-sizing:border-box;max-width:100%\">\n  <h3 id=\"ccms-command-title\" style=\"color:#172438;font-size:1.3rem;line-height:1.3;margin:0 0 10px\">W\u00e4hlen Sie den Befehl entsprechend der gew\u00fcnschten Dauer der \u00c4nderung aus<\/h3>\n  <div class=\"ccms-commands__scroll\" style=\"overflow-x:auto;box-sizing:border-box;max-width:100%\"><table style=\"border-collapse:collapse;width:100%;min-width:620px;text-align:left\"><caption style=\"text-align:left;font-size:14px;color:#43536f;margin-bottom:10px\">Dokumentiertes Verhalten des Codes Claude, \u00fcberpr\u00fcft am 28. September 2026<\/caption><thead><tr><th scope=\"col\" style=\"padding:12px 10px;border-bottom:1px solid #d8dfeb;color:#172438;vertical-align:top;background:#edf1fa;font-weight:600\">Dein Ziel<\/th><th scope=\"col\" style=\"padding:12px 10px;border-bottom:1px solid #d8dfeb;color:#172438;vertical-align:top;background:#edf1fa;font-weight:600\">Was tun?<\/th><th scope=\"col\" style=\"padding:12px 10px;border-bottom:1px solid #d8dfeb;color:#172438;vertical-align:top;background:#edf1fa;font-weight:600\">Wurden die Standard\u00e4nderungen gespeichert?<\/th><\/tr><\/thead><tbody>\n    <tr><th scope=\"row\" style=\"padding:12px 10px;border-bottom:1px solid #d8dfeb;color:#172438;vertical-align:top;background:#edf1fa;font-weight:600\">Nur diese interaktive Sitzung wechseln<\/th><td style=\"padding:12px 10px;border-bottom:1px solid #d8dfeb;color:#172438;vertical-align:top\">\u00d6ffnen Sie <code style=\"font:14px\/1.5 ui-monospace,SFMono-Regular,monospace;color:#172438;background:#edf1fa;padding:2px 5px;border-radius:3px\">\/Modell<\/code>, w\u00e4hlen Sie ein Modell aus, dr\u00fccken Sie <kbd style=\"font:14px\/1.5 ui-monospace,SFMono-Regular,monospace;color:#172438;background:#edf1fa;padding:2px 5px;border-radius:3px\">s<\/kbd>.<\/td><td style=\"padding:12px 10px;border-bottom:1px solid #d8dfeb;color:#172438;vertical-align:top\">Nein.<\/td><\/tr>\n    <tr><th scope=\"row\" style=\"padding:12px 10px;border-bottom:1px solid #d8dfeb;color:#172438;vertical-align:top;background:#edf1fa;font-weight:600\">Ein bevorzugtes Modell speichern<\/th><td style=\"padding:12px 10px;border-bottom:1px solid #d8dfeb;color:#172438;vertical-align:top\">\u00d6ffnen Sie <code style=\"font:14px\/1.5 ui-monospace,SFMono-Regular,monospace;color:#172438;background:#edf1fa;padding:2px 5px;border-radius:3px\">\/Modell<\/code> und dr\u00fccken Sie <kbd style=\"font:14px\/1.5 ui-monospace,SFMono-Regular,monospace;color:#172438;background:#edf1fa;padding:2px 5px;border-radius:3px\">Eingabe<\/kbd>, oder geben Sie Folgendes ein: <code style=\"font:14px\/1.5 ui-monospace,SFMono-Regular,monospace;color:#172438;background:#edf1fa;padding:2px 5px;border-radius:3px\">\/Modellsonett<\/code>.<\/td><td style=\"padding:12px 10px;border-bottom:1px solid #d8dfeb;color:#172438;vertical-align:top\">Ja, wenn die Benutzereinstellungen beschreibbar sind.<\/td><\/tr>\n    <tr><th scope=\"row\" style=\"padding:12px 10px;border-bottom:1px solid #d8dfeb;color:#172438;vertical-align:top;background:#edf1fa;font-weight:600\">Eine einzelne Sitzung auf Opus starten<\/th><td style=\"padding:12px 10px;border-bottom:1px solid #d8dfeb;color:#172438;vertical-align:top\">Start <code style=\"font:14px\/1.5 ui-monospace,SFMono-Regular,monospace;color:#172438;background:#edf1fa;padding:2px 5px;border-radius:3px\">claude --Modell: Opus<\/code>.<\/td><td style=\"padding:12px 10px;border-bottom:1px solid #d8dfeb;color:#172438;vertical-align:top\">Nein.<\/td><\/tr>\n    <tr><th scope=\"row\" style=\"padding:12px 10px;border-bottom:1px solid #d8dfeb;color:#172438;vertical-align:top;background:#edf1fa;font-weight:600\">Zur\u00fcck zur Standard-Laufzeit des Kontos<\/th><td style=\"padding:12px 10px;border-bottom:1px solid #d8dfeb;color:#172438;vertical-align:top\">Verwenden Sie <code style=\"font:14px\/1.5 ui-monospace,SFMono-Regular,monospace;color:#172438;background:#edf1fa;padding:2px 5px;border-radius:3px\">\/Standardmodell<\/code>.<\/td><td style=\"padding:12px 10px;border-bottom:1px solid #d8dfeb;color:#172438;vertical-align:top\">L\u00f6scht die Modell\u00fcberschreibung; der ermittelte Standardwert kann von den Konto- und Organisationseinstellungen abh\u00e4ngen.<\/td><\/tr>\n    <tr><th scope=\"row\" style=\"padding:12px 10px;border-bottom:1px solid #d8dfeb;color:#172438;vertical-align:top;background:#edf1fa;font-weight:600\">Aktives Modell \u00fcberpr\u00fcfen<\/th><td style=\"padding:12px 10px;border-bottom:1px solid #d8dfeb;color:#172438;vertical-align:top\">Ausf\u00fchren <code style=\"font:14px\/1.5 ui-monospace,SFMono-Regular,monospace;color:#172438;background:#edf1fa;padding:2px 5px;border-radius:3px\">\/status<\/code>.<\/td><td style=\"padding:12px 10px;border-bottom:1px solid #d8dfeb;color:#172438;vertical-align:top\">Nein.<\/td><\/tr>\n  <\/tbody><\/table><\/div>\n  <p style=\"color:#34435d;margin:12px 0\">Projekteinstellungen oder verwaltete Einstellungen, Umgebungs\u00fcberschreibungen und fortgesetzte Sitzungen k\u00f6nnen den n\u00e4chsten Start beeinflussen. \u00dcberpr\u00fcfen Sie das aktive Modell, wenn es auf Reproduzierbarkeit ankommt.<\/p>\n  <p style=\"color:#34435d;margin:12px 0\"><a href=\"https:\/\/code.claude.com\/docs\/en\/model-config#setting-your-model\" style=\"color:#254fc2;text-decoration:underline\">Quelle: Konfiguration des Modells \u201eClaude Code\u201c<\/a>.<\/p>\n<\/section>\n\n\n\n<p class=\"wp-block-paragraph\">W\u00e4hlen Sie in einer neuen Terminalsitzung das Modell beim Start aus. Diese Befehle gelten auch, wenn Claude Code im integrierten Terminal von VS Code ausgef\u00fchrt wird. In den Beispielen wird eine Version explizit ausgew\u00e4hlt:<\/p>\n\n\n\n<div style=\"margin:22px 0;padding:18px;background:#edf1f7;color:#172438;border:1px solid #d7dfed;border-radius:8px;overflow-x:auto\"><pre style=\"margin:0;white-space:pre-wrap;overflow-wrap:anywhere;font:14px\/1.6 ui-monospace,monospace\"><code>claude --model claude-opus-5-5\nclaude --model claude-sonnet-5<\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">F\u00fchren Sie den Befehl f\u00fcr die gew\u00fcnschte Sitzung aus; die Beispiele stellen Alternativen dar. Sie k\u00f6nnen verschiedene Terminals mit unterschiedlichen <code>-Modell<\/code> Werte, ohne einen gemeinsam genutzten, gespeicherten Standardwert immer wieder \u00e4ndern zu m\u00fcssen. Verwenden Sie <code>\/status<\/code> um das aktive Modell zu \u00fcberpr\u00fcfen.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Nachnamen wie <code>Opus<\/code> und <code>Sonett<\/code> k\u00f6nnen auf neuere Versionen umgestellt werden. Ihre Aufl\u00f6sung h\u00e4ngt zudem vom Anbieter ab: Die Anthropic-API ordnet sie derzeit Opus 5.5 und Sonnet 5 zu, w\u00e4hrend die Zuordnungen der Cloud-Anbieter davon abweichen k\u00f6nnen. Verwenden Sie eine vollst\u00e4ndige Modell-ID, wenn Sie einen reproduzierbaren Lauf ben\u00f6tigen, und \u00fcberpr\u00fcfen Sie den anbieterspezifischen Namen, falls Ihre Umgebung dies erfordert.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">F\u00fcr Opus 5.5 ist Claude Code v2.1.280 oder h\u00f6her erforderlich; f\u00fcr Sonnet 5 ist v2.1.197 oder h\u00f6her erforderlich. Das <a href=\"https:\/\/code.claude.com\/docs\/en\/model-config\">Dokumentation zur Modellkonfiguration<\/a> ist die Referenz f\u00fcr aktuelle Aliase, Versionsanforderungen und Anbieterzuordnungen. Die hier aufgef\u00fchrten Befehle sind Beispiele aus der Dokumentation; in unserem praktischen Abschnitt wird der generierte Code separat ausgewertet.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"1440\" height=\"900\" src=\"https:\/\/wp.glbgpt.com\/wp-content\/uploads\/2026\/09\/claude-model-switching-20260928_bdea45c6a3c84511afb34df961d9542d.webp\" alt=\"Claude \u2013 Dokumentation zum Code mit Erl\u00e4uterungen zur Modellauswahl sowie zu den Tasten \u201eEnter\u201c und \u201es\u201c.\" class=\"wp-image-20172\" srcset=\"https:\/\/wp.glbgpt.com\/wp-content\/uploads\/2026\/09\/claude-model-switching-20260928_bdea45c6a3c84511afb34df961d9542d.webp 1440w, https:\/\/wp.glbgpt.com\/wp-content\/uploads\/2026\/09\/claude-model-switching-20260928_bdea45c6a3c84511afb34df961d9542d-300x188.webp 300w, https:\/\/wp.glbgpt.com\/wp-content\/uploads\/2026\/09\/claude-model-switching-20260928_bdea45c6a3c84511afb34df961d9542d-1024x640.webp 1024w, https:\/\/wp.glbgpt.com\/wp-content\/uploads\/2026\/09\/claude-model-switching-20260928_bdea45c6a3c84511afb34df961d9542d-768x480.webp 768w, https:\/\/wp.glbgpt.com\/wp-content\/uploads\/2026\/09\/claude-model-switching-20260928_bdea45c6a3c84511afb34df961d9542d-18x12.webp 18w\" sizes=\"(max-width: 1440px) 100vw, 1440px\" \/><figcaption class=\"wp-element-caption\">Mit \u201eEnter\u201c wird das Modell als Standard gespeichert; mit \u201es\u201c wird nur die aktuelle Sitzung ge\u00e4ndert.<\/figcaption><\/figure>\n\n\n\n<h2 id=\"default-model\" class=\"wp-block-heading\">So legen Sie ein Standardmodell fest<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Um eine pers\u00f6nliche Standardeinstellung festzulegen, w\u00e4hlen Sie ein Modell aus <code>\/Modell<\/code> und dr\u00fccken Sie <kbd>Eingabe<\/kbd>, oder geben Sie eine Auswahl ein, zum Beispiel <code>\/Modellsonett<\/code>. Der Code \u201eClaude\u201c schreibt die <code>Modell<\/code> Feld in Ihren Benutzereinstellungen, wenn diese Datei beschreibbar ist. \u00d6ffnen Sie eine neue Sitzung und \u00fcberpr\u00fcfen Sie deren aktives Modell, um das Ergebnis zu best\u00e4tigen.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Eine gespeicherte Voreinstellung hat nicht Vorrang vor allen anderen Einstellungen. Ein Startparameter, <code>ANTHROPIC_MODEL<\/code> In der Shell, in den Projekteinstellungen, in den verwalteten Einstellungen oder in einer Organisationsvoreinstellung, die so konfiguriert ist, dass sie die Auswahl des Benutzers \u00fcberschreibt, kann beim Start eine andere Option ausgew\u00e4hlt werden. Eine wieder aufgenommene Sitzung beh\u00e4lt m\u00f6glicherweise auch das Modell aus dem gespeicherten Protokoll bei. \u00dcberpr\u00fcfen Sie die Startinformationen und <code>\/status<\/code> bevor man davon ausging, dass die Wahl verloren war.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>\/Standardmodell<\/code> l\u00f6scht Ihre Modell\u00fcberschreibung und kehrt zu den Laufzeitt standardeinstellungen f\u00fcr Ihr Konto und Ihre Konfiguration zur\u00fcck. Das Wort <code>Standard<\/code> ist ein R\u00fccksetzwert und nicht der Name eines festen Claude-Modells. Er sollte nicht als reproduzierbare Modellkennung verwendet werden.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">F\u00fcr erweiterte Konfigurationen, <code>ANTHROPIC_DEFAULT_MODEL<\/code> bietet ab Version 2.1.236 eine Standardauswahl als Ausweichm\u00f6glichkeit. Diese befindet sich unterhalb der expliziten Auswahlm\u00f6glichkeiten f\u00fcr \u201eStart\u201c, \u201eUmgebung\u201c, \u201eEinstellungen\u201c und \u201eOrganisation\u201c und ignoriert Werte wie beispielsweise <code>Haiku<\/code> und <code>opusplan<\/code>. Bei einer normalen pers\u00f6nlichen Pr\u00e4ferenz l\u00e4sst sich die Auswahl leichter \u00fcberpr\u00fcfen. Siehe <a href=\"https:\/\/code.claude.com\/docs\/en\/settings\">Claude Code-Einstellungen<\/a> wenn es sich um eine gemeinsam genutzte Konfiguration handelt.<\/p>\n\n\n\n<h2 id=\"opusplan\" class=\"wp-block-heading\">Was Opusplan eigentlich macht<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><code>opusplan<\/code> Im Planungsmodus wird Opus verwendet, w\u00e4hrend Sonnet f\u00fcr die Ausf\u00fchrung zum Einsatz kommt. Der Vorteil liegt auf der Hand: Zun\u00e4chst wird ein leistungsf\u00e4higeres Modell zur Argumentation verwendet, um den L\u00f6sungsansatz zu erarbeiten, anschlie\u00dfend ein allt\u00e4gliches Programmiermodell, um diesen Plan umzusetzen.<\/p>\n\n\n\n<style>\n.ccms-opusplan{border:1px solid #d7dfed;border-radius:8px;background:#f8faff;color:#172438;padding:22px;margin:26px 0;font:16px\/1.6 system-ui,sans-serif}.ccms-opusplan h3{color:#172438;font-size:1.25rem;margin:0 0 16px}.ccms-opusplan p{color:#34445e;margin:12px 0}.ccms-opusplan__flow{display:flex;gap:16px;align-items:center}.ccms-opusplan__step{background:#e9edfc;border-radius:6px;padding:18px;flex:1}.ccms-opusplan__step strong{display:block;color:#172438;font-size:1.2rem}.ccms-opusplan__arrow{font-size:24px;color:#4b55ba}.ccms-opusplan a{color:#254fc2;text-decoration:underline}@media(max-width:520px){.ccms-opusplan{padding:16px}.ccms-opusplan__flow{flex-direction:column;align-items:stretch}.ccms-opusplan__arrow{text-align:center;transform:rotate(90deg)}}\n<\/style>\n<section class=\"ccms-opusplan\" aria-labelledby=\"ccms-opusplan-title\" style=\"border:1px solid #d7dfed;border-radius:8px;background:#f8faff;color:#172438;padding:22px;margin:26px 0;font:16px\/1.6 system-ui,sans-serif;box-sizing:border-box;max-width:100%\">\n<h3 id=\"ccms-opusplan-title\" style=\"color:#172438;font-size:1.25rem;margin:0 0 16px\">Opusplan folgt der Arbeitsweise<\/h3>\n<div class=\"ccms-opusplan__flow\" style=\"display:flex;gap:16px;align-items:center;box-sizing:border-box;max-width:100%;flex-wrap:wrap\"><div class=\"ccms-opusplan__step\" style=\"background:#e9edfc;border-radius:6px;padding:18px;flex:1;box-sizing:border-box;max-width:100%\">Planungsmodus<strong style=\"display:block;color:#172438;font-size:1.2rem\">Opus<\/strong>Arbeiten Sie den Ansatz durch.<\/div><span class=\"ccms-opusplan__arrow\" aria-hidden=\"true\" style=\"font-size:24px;color:#4b55ba\">\u2192<\/span><div class=\"ccms-opusplan__step\" style=\"background:#e9edfc;border-radius:6px;padding:18px;flex:1;box-sizing:border-box;max-width:100%\">Ausf\u00fchrung<strong style=\"display:block;color:#172438;font-size:1.2rem\">Sonett<\/strong>Setzen Sie den Plan um.<\/div><\/div>\n<p style=\"color:#34445e;margin:12px 0\">Dokumentiertes Routing-Verhalten. Die hinter diesen Familiennamen stehenden Versionen h\u00e4ngen von Ihrem Anbieter und Ihrer Konfiguration ab.<\/p>\n<p style=\"color:#34445e;margin:12px 0\"><a href=\"https:\/\/code.claude.com\/docs\/en\/model-config#opusplan-model-setting\" style=\"color:#254fc2;text-decoration:underline\">Quelle: Konfiguration des Modells \u201eClaude Code\u201c<\/a><\/p>\n<\/section>\n\n\n\n<p class=\"wp-block-paragraph\">Dies ist eine modusabh\u00e4ngige Regel. Es werden nicht alle Eingabeaufforderungen gepr\u00fcft und automatisch die kosteng\u00fcnstigste geeignete Familie ausgew\u00e4hlt. Anbieterzuordnungen und Zugriffsbeschr\u00e4nkungen gelten weiterhin f\u00fcr die zugrunde liegenden Modelle. Auch der Name garantiert keine Einsparungen: Die Gesamtkosten h\u00e4ngen davon ab, wie viel Planung, Implementierung, \u00dcberarbeitung und Kontextverarbeitung die Aufgabe erfordert.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Stellen Sie sich zur Abwechslung einmal vor, dass das Design von einer gr\u00fcndlicheren Analyse profitiert und die Umsetzung einem klaren Plan folgt. Bei einer kleinen Korrektur ist diese zus\u00e4tzliche Planung m\u00f6glicherweise \u00fcberfl\u00fcssig.<\/p>\n\n\n\n<h2 id=\"coding-tests\" class=\"wp-block-heading\">Was zwei Programmieraufgaben gezeigt haben<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Um ein konkretes Beispiel f\u00fcr die Modellauswahl zu liefern, haben wir eine kleine Unicode-Umstrukturierung und eine Korrektur des Routenauswahlsystems mit sich gegenseitig beeinflussenden Anforderungen getestet. Dabei stellte sich heraus, dass der Unterschied zwischen einer korrekten Funktion und einer vollst\u00e4ndigen, geforderten Umsetzung eine gr\u00f6\u00dfere Rolle spielte als eine einfache Punktzahl.<\/p>\n\n\n\n<style>\n.ccms-test-setup{border:1px solid #d7dfed;border-radius:8px;padding:24px;background:#f8faff;color:#172438;margin:28px 0;font:16px\/1.6 system-ui,sans-serif;box-sizing:border-box}.ccms-test-setup *{box-sizing:border-box}.ccms-test-setup h3,.ccms-test-setup h4{color:#172438;line-height:1.35;margin:0 0 12px}.ccms-test-setup h3{font-size:1.35rem}.ccms-test-setup h4{font-size:1.1rem}.ccms-test-setup p{color:#35435a;margin:12px 0}.ccms-test-setup a{color:#254fc2;text-decoration:underline}.ccms-test-setup .ccms-scroll{overflow-x:auto}.ccms-test-setup table{width:100%;min-width:650px;border-collapse:collapse;text-align:left;font-size:14px}.ccms-test-setup th,.ccms-test-setup td{padding:12px 10px;border-bottom:1px solid #d7dfed;color:#172438;vertical-align:top}.ccms-test-setup th{background:#eaf0fa}.ccms-test-setup details{border:1px solid #d7dfed;border-radius:6px;padding:12px;margin:12px 0;background:#fff}.ccms-test-setup summary{cursor:pointer;font-weight:650;color:#254fc2}.ccms-test-setup pre{white-space:pre-wrap;overflow-wrap:anywhere;max-height:520px;overflow:auto;background:#edf1f7;padding:14px;border-radius:4px;color:#162239;font:13px\/1.55 ui-monospace,SFMono-Regular,monospace}.ccms-test-setup code{color:inherit}.ccms-test-setup .ccms-verdict{border-left:4px solid #5b62c8;padding:8px 14px;background:#eef0ff}.ccms-test-setup .ccms-note{font-size:14px}@media(max-width:520px){.ccms-test-setup{padding:16px}.ccms-test-setup pre{padding:10px}}\n<\/style>\n<section class=\"ccms-test-setup\" aria-labelledby=\"ccms-test-setup-title\" style=\"border:1px solid #d7dfed;border-radius:8px;padding:24px;background:#f8faff;color:#172438;margin:28px 0;font:16px\/1.6 system-ui,sans-serif;box-sizing:border-box;max-width:100%\">\n<h3 id=\"ccms-test-setup-title\" style=\"box-sizing:border-box;color:#172438;line-height:1.35;margin:0 0 12px;font-size:1.35rem\">Wie wir die Programmierergebnisse getestet haben<\/h3>\n<p style=\"box-sizing:border-box;color:#35435a;margin:12px 0\">Am 28. September 2026 haben wir den Modellen Claude Haiku 4.5, Claude Sonnet 5 und Claude Opus 5.5 \u00fcber GlobalGPT hinweg dieselben zwei JavaScript-Aufgaben gestellt. Jedes Modell lieferte Quellcode zur\u00fcck; wir haben den Code \u00fcberpr\u00fcft und festgelegte lokale Pr\u00fcfungen durchgef\u00fchrt. Die Anweisungen zum Modellwechsel bei Claude an anderer Stelle in diesem Leitfaden stammen aus der offiziellen Dokumentation des Modells.<\/p>\n<p style=\"box-sizing:border-box;color:#35435a;margin:12px 0\">Jede Anfrage unterlag einer Ausgabebegrenzung von 4.096 Tokens, es standen keine Tools und kein Konversationsverlauf zur Verf\u00fcgung, und es wurden die Standard-Modelleinstellungen verwendet. Wir haben die erste auswertbare Antwort beibehalten, einschlie\u00dflich unvollst\u00e4ndiger Antworten. Bei einem Dienstfehler im Rahmen der Routing-Aufgabe von Sonnet war ein Wiederholungsversuch zul\u00e4ssig: Sieben Anfragen f\u00fchrten zu sechs Ausgaben.<\/p>\n<p style=\"box-sizing:border-box;color:#35435a;margin:12px 0\">Diese beiden kleinen Aufgaben dienen der Messung des R\u00fcckgabecodes und der Vollst\u00e4ndigkeit der Bereitstellung. Sie erfassen weder die Ausf\u00fchrung von Claude Code durch den Agenten noch die Erkundung des Repositorys noch eine gesamte Entwicklungssitzung. Die tats\u00e4chlichen Kosten in Dollar wurden nicht angegeben. Eine einzelne Beobachtung pro Aufgabe reicht nicht aus, um eine allgemeine Rangliste hinsichtlich Geschwindigkeit oder Zuverl\u00e4ssigkeit zu erstellen.<\/p>\n<details style=\"box-sizing:border-box;border:1px solid #d7dfed;border-radius:6px;padding:12px;margin:12px 0;background:#fff\"><summary style=\"box-sizing:border-box;cursor:pointer;font-weight:650;color:#254fc2\">Genaue Modell-IDs und Testbedingungen anzeigen<\/summary><p style=\"box-sizing:border-box;color:#35435a;margin:12px 0\">Angeforderte IDs: <code style=\"box-sizing:border-box;color:inherit\">claude-haiku-4-5-20251001<\/code>, <code style=\"box-sizing:border-box;color:inherit\">claude-sonnet-5<\/code>, und <code style=\"box-sizing:border-box;color:inherit\">claude-opus-5-5<\/code>. Die lokalen Tests wurden mit Node.js v24.19.0 durchgef\u00fchrt. Die Eingabeaufforderungen sind f\u00fcr Node.js 18 und h\u00f6her vorgesehen; Node.js 18 selbst wurde nicht getestet.<\/p><p style=\"box-sizing:border-box;color:#35435a;margin:12px 0\">F\u00fcr die \u201eSlug\u201c-Aufgabe wurden acht Verhaltensgruppen festgelegt, f\u00fcr den \u201eRoute Selector\u201c zw\u00f6lf. Die Einhaltung des Formats und die vollst\u00e4ndige \u00dcbergabe werden separat ausgewiesen. Eine sp\u00e4tere \u00dcberpr\u00fcfung im Rahmen der Code-Review wird separat ausgewiesen und hat keinen Einfluss auf diese Zahlen. Wir haben den zur\u00fcckgesendeten Quellcode nicht bearbeitet, um ihn konform zu machen.<\/p><\/details>\n<\/section>\n\n\n\n<style>\n.ccms-test-t01{border:1px solid #d7dfed;border-radius:8px;padding:24px;background:#f8faff;color:#172438;margin:28px 0;font:16px\/1.6 system-ui,sans-serif;box-sizing:border-box}.ccms-test-t01 *{box-sizing:border-box}.ccms-test-t01 h3,.ccms-test-t01 h4{color:#172438;line-height:1.35;margin:0 0 12px}.ccms-test-t01 h3{font-size:1.35rem}.ccms-test-t01 h4{font-size:1.1rem}.ccms-test-t01 p{color:#35435a;margin:12px 0}.ccms-test-t01 a{color:#254fc2;text-decoration:underline}.ccms-test-t01 .ccms-scroll{overflow-x:auto}.ccms-test-t01 table{width:100%;min-width:650px;border-collapse:collapse;text-align:left;font-size:14px}.ccms-test-t01 th,.ccms-test-t01 td{padding:12px 10px;border-bottom:1px solid #d7dfed;color:#172438;vertical-align:top}.ccms-test-t01 th{background:#eaf0fa}.ccms-test-t01 details{border:1px solid #d7dfed;border-radius:6px;padding:12px;margin:12px 0;background:#fff}.ccms-test-t01 summary{cursor:pointer;font-weight:650;color:#254fc2}.ccms-test-t01 pre{white-space:pre-wrap;overflow-wrap:anywhere;max-height:520px;overflow:auto;background:#edf1f7;padding:14px;border-radius:4px;color:#162239;font:13px\/1.55 ui-monospace,SFMono-Regular,monospace}.ccms-test-t01 code{color:inherit}.ccms-test-t01 .ccms-verdict{border-left:4px solid #5b62c8;padding:8px 14px;background:#eef0ff}.ccms-test-t01 .ccms-note{font-size:14px}@media(max-width:520px){.ccms-test-t01{padding:16px}.ccms-test-t01 pre{padding:10px}}\n<\/style><section class=\"ccms-test-t01\" aria-labelledby=\"ccms-test-t01-title\" style=\"border:1px solid #d7dfed;border-radius:8px;padding:24px;background:#f8faff;color:#172438;margin:28px 0;font:16px\/1.6 system-ui,sans-serif;box-sizing:border-box;max-width:100%\"><h3 id=\"ccms-test-t01-title\" style=\"box-sizing:border-box;color:#172438;line-height:1.35;margin:0 0 12px;font-size:1.35rem\">Aufgabe 1: Unicode bei einer kleinen Refaktorisierung des \u201eSlugs\u201c beibehalten<\/h3><p style=\"box-sizing:border-box;color:#35435a;margin:12px 0\">Die Funktion musste nicht-lateinische Zeichen und Kombinationszeichen beibehalten, zerlegte Akzente normalisieren und das bestehende ASCII-Verhalten beibehalten.<\/p><div class=\"ccms-scroll\" style=\"box-sizing:border-box;overflow-x:auto;max-width:100%\"><table style=\"box-sizing:border-box;width:100%;min-width:650px;border-collapse:collapse;text-align:left;font-size:14px\"><caption style=\"box-sizing:border-box\">Erste R\u00fcckgabewerte mit festgelegten Pr\u00fcfungen des lokalen Verhaltens<\/caption><thead style=\"box-sizing:border-box\"><tr style=\"box-sizing:border-box\"><th scope=\"col\" style=\"box-sizing:border-box;padding:12px 10px;border-bottom:1px solid #d7dfed;color:#172438;vertical-align:top;background:#eaf0fa\">Modell<\/th><th scope=\"col\" style=\"box-sizing:border-box;padding:12px 10px;border-bottom:1px solid #d7dfed;color:#172438;vertical-align:top;background:#eaf0fa\">Verhaltens\u00fcberpr\u00fcfungen<\/th><th scope=\"col\" style=\"box-sizing:border-box;padding:12px 10px;border-bottom:1px solid #d7dfed;color:#172438;vertical-align:top;background:#eaf0fa\">Antwortformat<\/th><th scope=\"col\" style=\"box-sizing:border-box;padding:12px 10px;border-bottom:1px solid #d7dfed;color:#172438;vertical-align:top;background:#eaf0fa\">Die angeforderte Lieferung abschlie\u00dfen<\/th><\/tr><\/thead><tbody style=\"box-sizing:border-box\"><tr style=\"box-sizing:border-box\"><th scope=\"row\" style=\"box-sizing:border-box;padding:12px 10px;border-bottom:1px solid #d7dfed;color:#172438;vertical-align:top;background:#eaf0fa\">Claude Haiku 4.5<\/th><td style=\"box-sizing:border-box;padding:12px 10px;border-bottom:1px solid #d7dfed;color:#172438;vertical-align:top\">8\/8<\/td><td style=\"box-sizing:border-box;padding:12px 10px;border-bottom:1px solid #d7dfed;color:#172438;vertical-align:top\">Fehler: Markdown-Wrapper<\/td><td style=\"box-sizing:border-box;padding:12px 10px;border-bottom:1px solid #d7dfed;color:#172438;vertical-align:top\">Ja: vollst\u00e4ndige Funktion<\/td><\/tr><tr style=\"box-sizing:border-box\"><th scope=\"row\" style=\"box-sizing:border-box;padding:12px 10px;border-bottom:1px solid #d7dfed;color:#172438;vertical-align:top;background:#eaf0fa\">Claude Sonett 5<\/th><td style=\"box-sizing:border-box;padding:12px 10px;border-bottom:1px solid #d7dfed;color:#172438;vertical-align:top\">8\/8<\/td><td style=\"box-sizing:border-box;padding:12px 10px;border-bottom:1px solid #d7dfed;color:#172438;vertical-align:top\">Pass: JSON im Rohformat<\/td><td style=\"box-sizing:border-box;padding:12px 10px;border-bottom:1px solid #d7dfed;color:#172438;vertical-align:top\">Ja: vollst\u00e4ndige Funktion<\/td><\/tr><tr style=\"box-sizing:border-box\"><th scope=\"row\" style=\"box-sizing:border-box;padding:12px 10px;border-bottom:1px solid #d7dfed;color:#172438;vertical-align:top;background:#eaf0fa\">Claude Opus 5,5<\/th><td style=\"box-sizing:border-box;padding:12px 10px;border-bottom:1px solid #d7dfed;color:#172438;vertical-align:top\">8\/8<\/td><td style=\"box-sizing:border-box;padding:12px 10px;border-bottom:1px solid #d7dfed;color:#172438;vertical-align:top\">Pass: JSON im Rohformat<\/td><td style=\"box-sizing:border-box;padding:12px 10px;border-bottom:1px solid #d7dfed;color:#172438;vertical-align:top\">Ja: vollst\u00e4ndige Funktion<\/td><\/tr><\/tbody><\/table><\/div><div class=\"ccms-verdict\" style=\"box-sizing:border-box;border-left:4px solid #5b62c8;padding:8px 14px;background:#eef0ff;max-width:100%\"><p style=\"box-sizing:border-box;color:#35435a;margin:12px 0\"><strong style=\"box-sizing:border-box\">Beobachtetes Ergebnis:<\/strong> Alle drei Funktionen haben dieselben acht Gruppen verarbeitet. Sonnet und Opus haben zudem die Anforderung bez\u00fcglich der Raw-JSON-Antwort erf\u00fcllt. Haiku hat seine Antwort in Markdown verpackt, und in seiner \u00dcberpr\u00fcfungsnotiz wurde NFC f\u00e4lschlicherweise als \u201eZerlegung von Zeichen\u201c beschrieben; der Code hat NFC jedoch korrekt aufgerufen.<\/p><p style=\"box-sizing:border-box;color:#35435a;margin:12px 0\">Bei dieser gezielten Umgestaltung f\u00fchrte das Upgrade nicht zu einer Verbesserung des Verhaltens der getesteten Funktion. Die Formatvorgaben und die Genauigkeit der dazugeh\u00f6rigen Erl\u00e4uterung mussten noch \u00fcberpr\u00fcft werden.<\/p><\/div><details style=\"box-sizing:border-box;border:1px solid #d7dfed;border-radius:6px;padding:12px;margin:12px 0;background:#fff\"><summary style=\"box-sizing:border-box;cursor:pointer;font-weight:650;color:#254fc2\">Den vollst\u00e4ndigen gemeinsamen Prompt und den Eingabecode anzeigen<\/summary><pre style=\"box-sizing:border-box;white-space:pre-wrap;overflow-wrap:anywhere;max-height:520px;overflow:auto;background:#edf1f7;padding:14px;border-radius:4px;color:#162239;font:13px\/1.55 ui-monospace,SFMono-Regular,monospace\"><code style=\"box-sizing:border-box;color:inherit\">SYSTEM\nYou are completing a bounded JavaScript coding task. Return only the requested JSON object with complete source files and brief review notes. Do not claim to have edited files, run commands, or used tools. You have no tool access. Do not include hidden reasoning.\n\nUSER\nImplement the following Node.js 18+ CommonJS function from its current source. Return complete replacement source for src\/slugify.js. Do not add dependencies, imports, I\/O, or other files.\n\nRequired behavior:\n1. slugify(value) returns an empty string for every non-string input.\n2. Normalize string input to Unicode NFC, then lowercase it using JavaScript toLowerCase().\n3. Preserve Unicode letters, numbers, and combining marks. Replace each consecutive run of all other characters with one ASCII hyphen.\n4. Trim leading and trailing hyphens. Preserve the CommonJS export { slugify }.\n5. Existing ASCII behavior must continue to work. Examples: Hello, World! -&gt; hello-world; two   words -&gt; two-words; null -&gt; empty string.\n6. Additional examples: Caf\u00e9 d\u00e9j\u00e0 vu -&gt; caf\u00e9-d\u00e9j\u00e0-vu; decomposed Cafe\\u0301 -&gt; caf\u00e9; \u4e2d\u6587 \u6d4b\u8bd5 42 -&gt; \u4e2d\u6587-\u6d4b\u8bd5-42; **hi___there** -&gt; hi-there; only punctuation or whitespace -&gt; empty string.\n\nCurrent src\/slugify.js:\n```javascript\nfunction slugify(value) {\n  if (typeof value !== &quot;string&quot;) return &quot;&quot;;\n  return value\n    .trim()\n    .toLowerCase()\n    .replace(\/[^a-z0-9]+\/g, &quot;-&quot;)\n    .replace(\/^-+|-+$\/g, &quot;&quot;);\n}\n\nmodule.exports = { slugify };\n\n\n```\n\nReturn exactly one JSON object with this shape:\n{&quot;files&quot;:{&quot;src\/slugify.js&quot;:&quot;complete JavaScript source as a JSON string&quot;},&quot;review_notes&quot;:[&quot;at most four brief implementation or assumption notes&quot;]}\nNo Markdown wrapper. You are returning code for someone else to evaluate locally; do not say that tests passed or that you ran them.\n<\/code><\/pre><\/details><details style=\"box-sizing:border-box;border:1px solid #d7dfed;border-radius:6px;padding:12px;margin:12px 0;background:#fff\"><summary style=\"box-sizing:border-box;cursor:pointer;font-weight:650;color:#254fc2\">Die vollst\u00e4ndige Antwort von Claude Haiku 4.5 in der \u00fcbermittelten Form anzeigen<\/summary><pre style=\"box-sizing:border-box;white-space:pre-wrap;overflow-wrap:anywhere;max-height:520px;overflow:auto;background:#edf1f7;padding:14px;border-radius:4px;color:#162239;font:13px\/1.55 ui-monospace,SFMono-Regular,monospace\"><code style=\"box-sizing:border-box;color:inherit\">```json\n{\n  &quot;files&quot;: {\n    &quot;src\/slugify.js&quot;: &quot;function slugify(value) {\\n  if (typeof value !== \\&quot;string\\&quot;) return \\&quot;\\&quot;;\\n  \\n  \/\/ Normalize to NFC and lowercase\\n  const normalized = value.normalize(\\&quot;NFC\\&quot;).toLowerCase();\\n  \\n  \/\/ Replace consecutive runs of non-letter, non-number, non-combining-mark characters with a single hyphen\\n  \/\/ Unicode letter categories: L* (Lu, Ll, Lt, Lm, Lo)\\n  \/\/ Unicode number categories: N* (Nd, Nl, No)\\n  \/\/ Unicode combining mark categories: M* (Mn, Mc, Me)\\n  const slugged = normalized.replace(\/[^\\\\p{L}\\\\p{N}\\\\p{M}]+\/gu, \\&quot;-\\&quot;);\\n  \\n  \/\/ Trim leading and trailing hyphens\\n  return slugged.replace(\/^-+|-+$\/g, \\&quot;\\&quot;);\\n}\\n\\nmodule.exports = { slugify };&quot;\n  },\n  &quot;review_notes&quot;: [\n    &quot;Uses String.prototype.normalize(\\&quot;NFC\\&quot;) to decompose composed characters like \u00e9 into base+combining mark, then toLowerCase() applies to normalized string&quot;,\n    &quot;Unicode property escapes (\\\\p{L}, \\\\p{N}, \\\\p{M}) with \/u flag preserve all Unicode letters, numbers, and combining marks while replacing other consecutive characters with single hyphens&quot;,\n    &quot;Existing ASCII behavior is preserved: punctuation and whitespace are replaced with hyphens, then leading\/trailing hyphens are trimmed&quot;,\n    &quot;Non-string inputs return empty string as required; normalized decomposed characters (e.g., Cafe\\\\u0301) are handled correctly by NFC normalization&quot;\n  ]\n}\n```<\/code><\/pre><\/details><details style=\"box-sizing:border-box;border:1px solid #d7dfed;border-radius:6px;padding:12px;margin:12px 0;background:#fff\"><summary style=\"box-sizing:border-box;cursor:pointer;font-weight:650;color:#254fc2\">Die vollst\u00e4ndige Antwort von Claude Sonnet 5 in der \u00fcbermittelten Form anzeigen<\/summary><pre style=\"box-sizing:border-box;white-space:pre-wrap;overflow-wrap:anywhere;max-height:520px;overflow:auto;background:#edf1f7;padding:14px;border-radius:4px;color:#162239;font:13px\/1.55 ui-monospace,SFMono-Regular,monospace\"><code style=\"box-sizing:border-box;color:inherit\">{&quot;files&quot;:{&quot;src\/slugify.js&quot;:&quot;function slugify(value) {\\n  if (typeof value !== \\&quot;string\\&quot;) return \\&quot;\\&quot;;\\n  return value\\n    .normalize(\\&quot;NFC\\&quot;)\\n    .toLowerCase()\\n    .replace(\/[^\\\\p{L}\\\\p{N}\\\\p{M}]+\/gu, \\&quot;-\\&quot;)\\n    .replace(\/^-+|-+$\/g, \\&quot;\\&quot;);\\n}\\n\\nmodule.exports = { slugify };\\n&quot;},&quot;review_notes&quot;:[&quot;Used Unicode property escapes (\\\\p{L}, \\\\p{N}, \\\\p{M}) with the u flag to preserve letters, numbers, and combining marks across scripts.&quot;,&quot;NFC normalization ensures decomposed sequences like Cafe + combining acute compose to caf\u00e9 before lowercasing.&quot;,&quot;Runs of any other characters (punctuation, whitespace, symbols) collapse to a single hyphen, then leading\/trailing hyphens are trimmed.&quot;]}<\/code><\/pre><\/details><details style=\"box-sizing:border-box;border:1px solid #d7dfed;border-radius:6px;padding:12px;margin:12px 0;background:#fff\"><summary style=\"box-sizing:border-box;cursor:pointer;font-weight:650;color:#254fc2\">Die vollst\u00e4ndige Antwort von Claude Opus 5.5 in der \u00fcbermittelten Form anzeigen<\/summary><pre style=\"box-sizing:border-box;white-space:pre-wrap;overflow-wrap:anywhere;max-height:520px;overflow:auto;background:#edf1f7;padding:14px;border-radius:4px;color:#162239;font:13px\/1.55 ui-monospace,SFMono-Regular,monospace\"><code style=\"box-sizing:border-box;color:inherit\">{&quot;files&quot;:{&quot;src\/slugify.js&quot;:&quot;function slugify(value) {\\n  if (typeof value !== \\&quot;string\\&quot;) return \\&quot;\\&quot;;\\n  return value\\n    .normalize(\\&quot;NFC\\&quot;)\\n    .toLowerCase()\\n    .replace(\/[^\\\\p{L}\\\\p{N}\\\\p{M}]+\/gu, \\&quot;-\\&quot;)\\n    .replace(\/^-+|-+$\/g, \\&quot;\\&quot;);\\n}\\n\\nmodule.exports = { slugify };\\n&quot;},&quot;review_notes&quot;:[&quot;The input is normalized to NFC before lowercasing, so decomposed input like Cafe\\\\u0301 composes to caf\u00e9.&quot;,&quot;A Unicode property regex with the u flag keeps letters (\\\\p{L}), numbers (\\\\p{N}) and combining marks (\\\\p{M}). Each run of any other characters, including underscores and whitespace, becomes one hyphen.&quot;,&quot;The explicit trim() was removed because the final step strips leading and trailing hyphens, which covers surrounding whitespace.&quot;,&quot;Lowercasing happens after NFC normalization, as the spec orders. toLowerCase can occasionally produce non-NFC output for rare characters, and it is not re-normalized here.&quot;]}<\/code><\/pre><\/details><\/section>\n\n\n\n<style>\n.ccms-test-t02{border:1px solid #d7dfed;border-radius:8px;padding:24px;background:#f8faff;color:#172438;margin:28px 0;font:16px\/1.6 system-ui,sans-serif;box-sizing:border-box}.ccms-test-t02 *{box-sizing:border-box}.ccms-test-t02 h3,.ccms-test-t02 h4{color:#172438;line-height:1.35;margin:0 0 12px}.ccms-test-t02 h3{font-size:1.35rem}.ccms-test-t02 h4{font-size:1.1rem}.ccms-test-t02 p{color:#35435a;margin:12px 0}.ccms-test-t02 a{color:#254fc2;text-decoration:underline}.ccms-test-t02 .ccms-scroll{overflow-x:auto}.ccms-test-t02 table{width:100%;min-width:650px;border-collapse:collapse;text-align:left;font-size:14px}.ccms-test-t02 th,.ccms-test-t02 td{padding:12px 10px;border-bottom:1px solid #d7dfed;color:#172438;vertical-align:top}.ccms-test-t02 th{background:#eaf0fa}.ccms-test-t02 details{border:1px solid #d7dfed;border-radius:6px;padding:12px;margin:12px 0;background:#fff}.ccms-test-t02 summary{cursor:pointer;font-weight:650;color:#254fc2}.ccms-test-t02 pre{white-space:pre-wrap;overflow-wrap:anywhere;max-height:520px;overflow:auto;background:#edf1f7;padding:14px;border-radius:4px;color:#162239;font:13px\/1.55 ui-monospace,SFMono-Regular,monospace}.ccms-test-t02 code{color:inherit}.ccms-test-t02 .ccms-verdict{border-left:4px solid #5b62c8;padding:8px 14px;background:#eef0ff}.ccms-test-t02 .ccms-note{font-size:14px}@media(max-width:520px){.ccms-test-t02{padding:16px}.ccms-test-t02 pre{padding:10px}}\n<\/style><section class=\"ccms-test-t02\" aria-labelledby=\"ccms-test-t02-title\" style=\"border:1px solid #d7dfed;border-radius:8px;padding:24px;background:#f8faff;color:#172438;margin:28px 0;font:16px\/1.6 system-ui,sans-serif;box-sizing:border-box;max-width:100%\"><h3 id=\"ccms-test-t02-title\" style=\"box-sizing:border-box;color:#172438;line-height:1.35;margin:0 0 12px;font-size:1.35rem\">Aufgabe 2: Einen Routenw\u00e4hler reparieren und dessen Tests zur\u00fcckgeben<\/h3><p style=\"box-sizing:border-box;color:#35435a;margin:12px 0\">Die Funktion musste \u00dcbereinstimmungen mit dem l\u00e4ngsten Pr\u00e4fix, die Priorit\u00e4t von Methoden, Segmentgrenzen, fehlerhafte Regeln und unver\u00e4nderliche Eingaben ber\u00fccksichtigen. Die angeforderte Antwort enthielt au\u00dferdem eine neue Testdatei.<\/p><div class=\"ccms-scroll\" style=\"box-sizing:border-box;overflow-x:auto;max-width:100%\"><table style=\"box-sizing:border-box;width:100%;min-width:650px;border-collapse:collapse;text-align:left;font-size:14px\"><caption style=\"box-sizing:border-box\">Erste R\u00fcckgabewerte mit festgelegten Pr\u00fcfungen des lokalen Verhaltens<\/caption><thead style=\"box-sizing:border-box\"><tr style=\"box-sizing:border-box\"><th scope=\"col\" style=\"box-sizing:border-box;padding:12px 10px;border-bottom:1px solid #d7dfed;color:#172438;vertical-align:top;background:#eaf0fa\">Modell<\/th><th scope=\"col\" style=\"box-sizing:border-box;padding:12px 10px;border-bottom:1px solid #d7dfed;color:#172438;vertical-align:top;background:#eaf0fa\">Verhaltens\u00fcberpr\u00fcfungen<\/th><th scope=\"col\" style=\"box-sizing:border-box;padding:12px 10px;border-bottom:1px solid #d7dfed;color:#172438;vertical-align:top;background:#eaf0fa\">Antwortformat<\/th><th scope=\"col\" style=\"box-sizing:border-box;padding:12px 10px;border-bottom:1px solid #d7dfed;color:#172438;vertical-align:top;background:#eaf0fa\">Die angeforderte Lieferung abschlie\u00dfen<\/th><\/tr><\/thead><tbody style=\"box-sizing:border-box\"><tr style=\"box-sizing:border-box\"><th scope=\"row\" style=\"box-sizing:border-box;padding:12px 10px;border-bottom:1px solid #d7dfed;color:#172438;vertical-align:top;background:#eaf0fa\">Claude Haiku 4.5<\/th><td style=\"box-sizing:border-box;padding:12px 10px;border-bottom:1px solid #d7dfed;color:#172438;vertical-align:top\">12\/12 nur bei der vollst\u00e4ndigen Funktion<\/td><td style=\"box-sizing:border-box;padding:12px 10px;border-bottom:1px solid #d7dfed;color:#172438;vertical-align:top\">Fehler: abgeschnittenes JSON<\/td><td style=\"box-sizing:border-box;padding:12px 10px;border-bottom:1px solid #d7dfed;color:#172438;vertical-align:top\">Nr.: Testdatei abgeschnitten<\/td><\/tr><tr style=\"box-sizing:border-box\"><th scope=\"row\" style=\"box-sizing:border-box;padding:12px 10px;border-bottom:1px solid #d7dfed;color:#172438;vertical-align:top;background:#eaf0fa\">Claude Sonett 5<\/th><td style=\"box-sizing:border-box;padding:12px 10px;border-bottom:1px solid #d7dfed;color:#172438;vertical-align:top\">12\/12 nur bei der vollst\u00e4ndigen Funktion<\/td><td style=\"box-sizing:border-box;padding:12px 10px;border-bottom:1px solid #d7dfed;color:#172438;vertical-align:top\">Fehler: abgeschnittenes JSON<\/td><td style=\"box-sizing:border-box;padding:12px 10px;border-bottom:1px solid #d7dfed;color:#172438;vertical-align:top\">Nr.: Testdatei abgeschnitten<\/td><\/tr><tr style=\"box-sizing:border-box\"><th scope=\"row\" style=\"box-sizing:border-box;padding:12px 10px;border-bottom:1px solid #d7dfed;color:#172438;vertical-align:top;background:#eaf0fa\">Claude Opus 5,5<\/th><td style=\"box-sizing:border-box;padding:12px 10px;border-bottom:1px solid #d7dfed;color:#172438;vertical-align:top\">12\/12 nur bei der vollst\u00e4ndigen Funktion<\/td><td style=\"box-sizing:border-box;padding:12px 10px;border-bottom:1px solid #d7dfed;color:#172438;vertical-align:top\">Fehler: abgeschnittenes JSON<\/td><td style=\"box-sizing:border-box;padding:12px 10px;border-bottom:1px solid #d7dfed;color:#172438;vertical-align:top\">Nr.: Testdatei abgeschnitten<\/td><\/tr><\/tbody><\/table><\/div><div class=\"ccms-verdict\" style=\"box-sizing:border-box;border-left:4px solid #5b62c8;padding:8px 14px;background:#eef0ff;max-width:100%\"><p style=\"box-sizing:border-box;color:#35435a;margin:12px 0\"><strong style=\"box-sizing:border-box\">Beobachtetes Ergebnis:<\/strong> Kein Modell hat die angeforderte Antwort mit zwei Dateien innerhalb des vorgegebenen Ausgabelimits fertiggestellt. Alle drei h\u00f6rten bei 4.096 gemeldeten Abschluss-Tokens auf. Jedes hatte bereits eine vollst\u00e4ndige Router-Funktion zur\u00fcckgegeben, die die zw\u00f6lf festgelegten Verhaltensgruppen bestanden hatte; die neuen Testdateien waren unvollst\u00e4ndig und wurden nicht ausgef\u00fchrt.<\/p><p style=\"box-sizing:border-box;color:#35435a;margin:12px 0\">Wir haben ausschlie\u00dflich die vollst\u00e4ndig geschlossenen Quellcode-Strings extrahiert. Die urspr\u00fcnglichen, abgeschnittenen Antworten sind im Folgenden unver\u00e4ndert wiedergegeben. Eine bestandene Funktionsbewertung bedeutet daher nicht, dass die gesamte Anfrage erfolgreich war.<\/p><\/div><details style=\"box-sizing:border-box;border:1px solid #d7dfed;border-radius:6px;padding:12px;margin:12px 0;background:#fff\"><summary style=\"box-sizing:border-box;cursor:pointer;font-weight:650;color:#254fc2\">Weitere Feststellung bei der Code-Review: Gleichstand aufgrund gleicher Wurzelwerte<\/summary><p style=\"box-sizing:border-box;color:#35435a;margin:12px 0\">Nach den festgelegten \u00dcberpr\u00fcfungen stellten wir fest, dass Haiku normalisiert wurde <code style=\"box-sizing:border-box;color:inherit\">\/\/\/<\/code> zu einer leeren Zeichenkette statt <code style=\"box-sizing:border-box;color:inherit\">\/<\/code>. Bei einer separaten lokalen \u00dcberpr\u00fcfung wurden zwei GET-Regeln mit den Pr\u00e4fixen <code style=\"box-sizing:border-box;color:inherit\">\/\/\/<\/code> und <code style=\"box-sizing:border-box;color:inherit\">\/<\/code>, mit dem Ziel <code style=\"box-sizing:border-box;color:inherit\">erste<\/code> und <code style=\"box-sizing:border-box;color:inherit\">zweite<\/code> in dieser Reihenfolge. F\u00fcr <code style=\"box-sizing:border-box;color:inherit\">\/irgendetwas<\/code>, der Vertrag sieht vor, dass <code style=\"box-sizing:border-box;color:inherit\">erste<\/code>.<\/p><p style=\"box-sizing:border-box;color:#35435a;margin:12px 0\">Haiku ist zur\u00fcck <code style=\"box-sizing:border-box;color:inherit\">zweite<\/code>; Sonnet und Opus sind zur\u00fcckgekehrt <code style=\"box-sizing:border-box;color:inherit\">erste<\/code>. Diese zus\u00e4tzliche Pr\u00fcfung ergab sich aus der Code-Review und ist unabh\u00e4ngig von den zw\u00f6lf Pr\u00fcfungen, die vor dem Test festgelegt wurden. Sie hat keinen Einfluss auf deren Bewertungen.<\/p><\/details><p class=\"ccms-note\" style=\"box-sizing:border-box;color:#35435a;margin:12px 0;font-size:14px\">Sonnet stie\u00df auf einen Dienstfehler, bevor der zul\u00e4ssige Wiederholungsversuch die angezeigte, verk\u00fcrzte Antwort lieferte. Dieser Dienstfehler steht in keinem Zusammenhang mit der Codequalit\u00e4t. Kein Modell erhielt eine weitere Gelegenheit, seine Antwort zu verbessern oder zu vervollst\u00e4ndigen.<\/p><details style=\"box-sizing:border-box;border:1px solid #d7dfed;border-radius:6px;padding:12px;margin:12px 0;background:#fff\"><summary style=\"box-sizing:border-box;cursor:pointer;font-weight:650;color:#254fc2\">Den vollst\u00e4ndigen gemeinsamen Prompt und den Eingabecode anzeigen<\/summary><pre style=\"box-sizing:border-box;white-space:pre-wrap;overflow-wrap:anywhere;max-height:520px;overflow:auto;background:#edf1f7;padding:14px;border-radius:4px;color:#162239;font:13px\/1.55 ui-monospace,SFMono-Regular,monospace\"><code style=\"box-sizing:border-box;color:inherit\">SYSTEM\nYou are completing a bounded JavaScript coding task. Return only the requested JSON object with complete source files and brief review notes. Do not claim to have edited files, run commands, or used tools. You have no tool access. Do not include hidden reasoning.\n\nUSER\nRepair a Node.js 18+ CommonJS route selector. Return complete replacement src\/router.js and an additional test\/router-added.test.js using node:test and node:assert\/strict. Do not add dependencies or edit existing tests. Do not use I\/O other than the test runner, network, child processes, timers, or any files beyond the two requested outputs.\n\nContract for chooseRoute(request, rules):\n1. Invalid request or rules returns null, without throwing. Request must be a non-null, non-array object; method must be a nonempty ASCII-letter string; path must be a string beginning with \/. Rules must be an array.\n2. Before matching, remove the request path&#x27;s query and fragment starting at the earliest ? or #. Do not URL-decode or collapse interior slashes.\n3. Ignore invalid rules. A valid rule is a non-null, non-array object with method &#x27;*&#x27; or a nonempty ASCII-letter string, prefix a string starting with \/ containing neither ? nor #, and target a nonempty string.\n4. Compare methods case-insensitively. Prefer any matching exact-method rule over all wildcard-method &#x27;*&#x27; rules, even if a wildcard has a longer prefix. Use wildcard rules only if no exact-method route matches the path.\n5. Remove trailing slashes from a rule prefix, except that an all-slash prefix normalizes to \/. A prefix matches the path only at a segment boundary: \/api matches \/api and \/api\/users, never \/apix. Root \/ matches every valid request path.\n6. Within the chosen method group, choose the longest normalized matching prefix. On equal prefix length, choose the earlier rule in the original input array. Return its target. Return null if none matches.\n7. Do not mutate the request, rules array, or rule objects, including order or prefix strings. Preserve module.exports = { chooseRoute }.\n8. Add tests for segment boundaries, query\/fragment removal, method precedence, ties, malformed inputs and immutability. Existing simple GET \/api\/users and POST-no-match cases must still pass.\n\nCurrent src\/router.js:\n```javascript\nfunction chooseRoute(request, rules) {\n  if (!request || !Array.isArray(rules)) return null;\n  for (const rule of rules) {\n    if (request.method === rule.method &amp;&amp; request.path.startsWith(rule.prefix)) {\n      return rule.target;\n    }\n  }\n  return null;\n}\n\nmodule.exports = { chooseRoute };\n\n\n```\n\nExisting regression cases (unchanged): rules [{method:&#x27;GET&#x27;,prefix:&#x27;\/api&#x27;,target:&#x27;api&#x27;},{method:&#x27;GET&#x27;,prefix:&#x27;\/api\/admin&#x27;,target:&#x27;admin&#x27;}]; GET \/api\/users returns &#x27;api&#x27;; POST \/api\/users returns null.\n\nReturn exactly one JSON object with this shape:\n{&quot;files&quot;:{&quot;src\/router.js&quot;:&quot;complete JavaScript source as a JSON string&quot;,&quot;test\/router-added.test.js&quot;:&quot;complete JavaScript tests as a JSON string&quot;},&quot;review_notes&quot;:[&quot;at most four brief implementation or assumption notes&quot;]}\nNo Markdown wrapper. You are returning code for someone else to evaluate locally; do not say you edited files, ran tests, or observed passing results.\n<\/code><\/pre><\/details><details style=\"box-sizing:border-box;border:1px solid #d7dfed;border-radius:6px;padding:12px;margin:12px 0;background:#fff\"><summary style=\"box-sizing:border-box;cursor:pointer;font-weight:650;color:#254fc2\">Die vollst\u00e4ndige Antwort von Claude Haiku 4.5 in der \u00fcbermittelten Form anzeigen<\/summary><p class=\"ccms-note\" style=\"box-sizing:border-box;color:#35435a;margin:12px 0;font-size:14px\">Dies ist die gesamte erhaltene Antwort. Sie endet mitten in der Ausgabe, da das Limit erreicht wurde; fehlende Inhalte wurden nicht erg\u00e4nzt.<\/p><pre style=\"box-sizing:border-box;white-space:pre-wrap;overflow-wrap:anywhere;max-height:520px;overflow:auto;background:#edf1f7;padding:14px;border-radius:4px;color:#162239;font:13px\/1.55 ui-monospace,SFMono-Regular,monospace\"><code style=\"box-sizing:border-box;color:inherit\">```json\n{\n  &quot;files&quot;: {\n    &quot;src\/router.js&quot;: &quot;function chooseRoute(request, rules) {\\n  \/\/ Validate request\\n  if (request === null || Array.isArray(request) || typeof request !== &#x27;object&#x27;) {\\n    return null;\\n  }\\n  if (typeof request.method !== &#x27;string&#x27; || request.method.length === 0 || !\/^[a-zA-Z]+$\/.test(request.method)) {\\n    return null;\\n  }\\n  if (typeof request.path !== &#x27;string&#x27; || !request.path.startsWith(&#x27;\/&#x27;)) {\\n    return null;\\n  }\\n\\n  \/\/ Validate rules\\n  if (!Array.isArray(rules)) {\\n    return null;\\n  }\\n\\n  \/\/ Remove query and fragment from path\\n  const cleanPath = request.path.split(\/[?#]\/)[0];\\n\\n  \/\/ Filter and validate rules\\n  const validRules = [];\\n  for (const rule of rules) {\\n    if (rule === null || Array.isArray(rule) || typeof rule !== &#x27;object&#x27;) {\\n      continue;\\n    }\\n    \\n    const method = rule.method;\\n    if (typeof method !== &#x27;string&#x27; || (method !== &#x27;*&#x27; &amp;&amp; (method.length === 0 || !\/^[a-zA-Z]+$\/.test(method)))) {\\n      continue;\\n    }\\n    \\n    const prefix = rule.prefix;\\n    if (typeof prefix !== &#x27;string&#x27; || !prefix.startsWith(&#x27;\/&#x27;) || prefix.includes(&#x27;?&#x27;) || prefix.includes(&#x27;#&#x27;)) {\\n      continue;\\n    }\\n    \\n    const target = rule.target;\\n    if (typeof target !== &#x27;string&#x27; || target.length === 0) {\\n      continue;\\n    }\\n    \\n    validRules.push(rule);\\n  }\\n\\n  \/\/ Normalize prefixes and partition into exact-method and wildcard groups\\n  const exactMethodRules = [];\\n  const wildcardRules = [];\\n  \\n  for (const rule of validRules) {\\n    const normalizedPrefix = rule.prefix === &#x27;\/&#x27; ? &#x27;\/&#x27; : rule.prefix.replace(\/\\\\\/+$\/, &#x27;&#x27;);\\n    \\n    const entry = {\\n      originalRule: rule,\\n      normalizedPrefix: normalizedPrefix,\\n      method: rule.method\\n    };\\n    \\n    if (rule.method === &#x27;*&#x27;) {\\n      wildcardRules.push(entry);\\n    } else {\\n      exactMethodRules.push(entry);\\n    }\\n  }\\n\\n  const requestMethod = request.method.toUpperCase();\\n\\n  \/\/ Helper to check if a prefix matches the path at a segment boundary\\n  function prefixMatches(prefix, path) {\\n    if (prefix === &#x27;\/&#x27;) {\\n      return true;\\n    }\\n    if (!path.startsWith(prefix)) {\\n      return false;\\n    }\\n    \/\/ Check segment boundary: next character must be &#x27;\/&#x27; or end of string\\n    const nextChar = path[prefix.length];\\n    return nextChar === undefined || nextChar === &#x27;\/&#x27;;\\n  }\\n\\n  \/\/ Try exact-method rules first\\n  let bestMatch = null;\\n  let bestLength = -1;\\n  \\n  for (const entry of exactMethodRules) {\\n    if (entry.method.toUpperCase() === requestMethod) {\\n      if (prefixMatches(entry.normalizedPrefix, cleanPath)) {\\n        if (entry.normalizedPrefix.length &gt; bestLength) {\\n          bestMatch = entry.originalRule;\\n          bestLength = entry.normalizedPrefix.length;\\n        }\\n      }\\n    }\\n  }\\n  \\n  if (bestMatch !== null) {\\n    return bestMatch.target;\\n  }\\n\\n  \/\/ Try wildcard rules only if no exact-method match\\n  bestMatch = null;\\n  bestLength = -1;\\n  \\n  for (const entry of wildcardRules) {\\n    if (prefixMatches(entry.normalizedPrefix, cleanPath)) {\\n      if (entry.normalizedPrefix.length &gt; bestLength) {\\n        bestMatch = entry.originalRule;\\n        bestLength = entry.normalizedPrefix.length;\\n      }\\n    }\\n  }\\n  \\n  if (bestMatch !== null) {\\n    return bestMatch.target;\\n  }\\n\\n  return null;\\n}\\n\\nmodule.exports = { chooseRoute };&quot;,\n    &quot;test\/router-added.test.js&quot;: &quot;const test = require(&#x27;node:test&#x27;);\\nconst assert = require(&#x27;node:assert\/strict&#x27;);\\nconst { chooseRoute } = require(&#x27;..\/src\/router.js&#x27;);\\n\\n\/\/ Regression: existing test cases\\ntest(&#x27;GET \/api\/users matches \/api prefix (exact method)&#x27;, () =&gt; {\\n  const rules = [\\n    { method: &#x27;GET&#x27;, prefix: &#x27;\/api&#x27;, target: &#x27;api&#x27; },\\n    { method: &#x27;GET&#x27;, prefix: &#x27;\/api\/admin&#x27;, target: &#x27;admin&#x27; }\\n  ];\\n  assert.equal(chooseRoute({ method: &#x27;GET&#x27;, path: &#x27;\/api\/users&#x27; }, rules), &#x27;api&#x27;);\\n});\\n\\ntest(&#x27;POST \/api\/users returns null (no matching method)&#x27;, () =&gt; {\\n  const rules = [\\n    { method: &#x27;GET&#x27;, prefix: &#x27;\/api&#x27;, target: &#x27;api&#x27; },\\n    { method: &#x27;GET&#x27;, prefix: &#x27;\/api\/admin&#x27;, target: &#x27;admin&#x27; }\\n  ];\\n  assert.equal(chooseRoute({ method: &#x27;POST&#x27;, path: &#x27;\/api\/users&#x27; }, rules), null);\\n});\\n\\n\/\/ Invalid request handling\\ntest(&#x27;null request returns null&#x27;, () =&gt; {\\n  assert.equal(chooseRoute(null, []), null);\\n});\\n\\ntest(&#x27;array request returns null&#x27;, () =&gt; {\\n  assert.equal(chooseRoute([], []), null);\\n});\\n\\ntest(&#x27;request with missing method returns null&#x27;, () =&gt; {\\n  assert.equal(chooseRoute({ path: &#x27;\/api&#x27; }, []), null);\\n});\\n\\ntest(&#x27;request with empty method returns null&#x27;, () =&gt; {\\n  assert.equal(chooseRoute({ method: &#x27;&#x27;, path: &#x27;\/api&#x27; }, []), null);\\n});\\n\\ntest(&#x27;request with non-letter method returns null&#x27;, () =&gt; {\\n  assert.equal(chooseRoute({ method: &#x27;GET-POST&#x27;, path: &#x27;\/api&#x27; }, []), null);\\n});\\n\\ntest(&#x27;request with numeric method returns null&#x27;, () =&gt; {\\n  assert.equal(chooseRoute({ method: &#x27;123&#x27;, path: &#x27;\/api&#x27; }, []), null);\\n});\\n\\ntest(&#x27;request with missing path returns null&#x27;, () =&gt; {\\n  assert.equal(chooseRoute({ method: &#x27;GET&#x27; }, []), null);\\n});\\n\\ntest(&#x27;request with path not starting with \/ returns null&#x27;, () =&gt; {\\n  assert.equal(chooseRoute({ method: &#x27;GET&#x27;, path: &#x27;api&#x27; }, []), null);\\n});\\n\\ntest(&#x27;null rules returns null&#x27;, () =&gt; {\\n  assert.equal(chooseRoute({ method: &#x27;GET&#x27;, path: &#x27;\/api&#x27; }, null), null);\\n});\\n\\ntest(&#x27;non-array rules returns null&#x27;, () =&gt; {\\n  assert.equal(chooseRoute({ method: &#x27;GET&#x27;, path: &#x27;\/api&#x27; }, { method: &#x27;GET&#x27; }), null);\\n});\\n\\n\/\/ Query and fragment removal\\ntest(&#x27;query string is removed before matching&#x27;, () =&gt; {\\n  const rules = [{ method: &#x27;GET&#x27;, prefix: &#x27;\/api&#x27;, target: &#x27;found&#x27; }];\\n  assert.equal(chooseRoute({ method: &#x27;GET&#x27;, path: &#x27;\/api\/users?foo=bar&#x27; }, rules), &#x27;found&#x27;);\\n});\\n\\ntest(&#x27;fragment is removed before matching&#x27;, () =&gt; {\\n  const rules = [{ method: &#x27;GET&#x27;, prefix: &#x27;\/api&#x27;, target: &#x27;found&#x27; }];\\n  assert.equal(chooseRoute({ method: &#x27;GET&#x27;, path: &#x27;\/api\/users#section&#x27; }, rules), &#x27;found&#x27;);\\n});\\n\\ntest(&#x27;earliest ? or # is used as boundary&#x27;, () =&gt; {\\n  const rules = [{ method: &#x27;GET&#x27;, prefix: &#x27;\/api&#x27;, target: &#x27;found&#x27; }];\\n  assert.equal(chooseRoute({ method: &#x27;GET&#x27;, path: &#x27;\/api\/users?foo#bar&#x27; }, rules), &#x27;found&#x27;);\\n});\\n\\ntest(&#x27;fragment before query is used as boundary&#x27;, () =&gt; {\\n  const rules = [{ method: &#x27;GET&#x27;, prefix: &#x27;\/api&#x27;, target: &#x27;found&#x27; }];\\n  assert.equal(chooseRoute({ method: &#x27;GET&#x27;, path: &#x27;\/api\/users#foo?bar&#x27; }, rules), &#x27;found&#x27;);\\n});\\n\\n\/\/ Segment boundary matching\\ntest(&#x27;prefix \/api matches \/api\/users at segment boundary&#x27;, () =&gt; {\\n  const rules = [{ method: &#x27;GET&#x27;, prefix: &#x27;\/api&#x27;, target: &#x27;found&#x27; }];\\n  assert.equal(chooseRoute({ method: &#x27;GET&#x27;, path: &#x27;\/api\/users&#x27; }, rules), &#x27;found&#x27;);\\n});\\n\\ntest(&#x27;prefix \/api does not match \/apix (no segment boundary)&#x27;, () =&gt; {\\n  const rules = [{ method: &#x27;GET&#x27;, prefix: &#x27;\/api&#x27;, target: &#x27;found&#x27; }];\\n  assert.equal(chooseRoute({ method: &#x27;GET&#x27;, path: &#x27;\/apix&#x27; }, rules), null);\\n});\\n\\ntest(&#x27;prefix \/api matches \/api exactly at segment boundary&#x27;, () =&gt; {\\n  const rules = [{ method: &#x27;GET&#x27;, prefix: &#x27;\/api&#x27;, target: &#x27;found&#x27; }];\\n  assert.equal(chooseRoute({ method: &#x27;GET&#x27;, path: &#x27;\/api&#x27; }, rules), &#x27;found&#x27;);\\n});\\n\\ntest(&#x27;root \/ matches any valid path&#x27;, () =&gt; {\\n  const rules = [{ method: &#x27;GET&#x27;, prefix: &#x27;\/&#x27;, target: &#x27;root&#x27; }];\\n  assert.equal(chooseRoute({ method: &#x27;GET&#x27;, path: &#x27;\/anything\/here&#x27; }, rules), &#x27;root&#x27;);\\n});\\n\\ntest(&#x27;root \/ matches \/&#x27;, () =&gt; {\\n  const rules = [{ method: &#x27;GET&#x27;, prefix: &#x27;\/&#x27;, target: &#x27;root&#x27; }];\\n  assert.equal(chooseRoute({ method: &#x27;GET&#x27;, path: &#x27;\/&#x27; }, rules), &#x27;root&#x27;);\\n});\\n\\n\/\/ Prefix normalization (trailing slash removal)\\ntest(&#x27;trailing slash is removed from prefix&#x27;, () =&gt; {\\n  const rules = [{ method: &#x27;GET&#x27;, prefix: &#x27;\/api\/&#x27;, target: &#x27;found&#x27; }];\\n  assert.equal(chooseRoute({ method: &#x27;GET&#x27;, path: &#x27;\/api\/users&#x27; }, rules), &#x27;found&#x27;);\\n});\\n\\ntest(&#x27;multiple trailing slashes are removed&#x27;, () =&gt; {\\n  const rules = [{ method: &#x27;GET&#x27;, prefix: &#x27;\/api\/\/\/&#x27;, target: &#x27;found&#x27; }];\\n  assert.equal(chooseRoute({ method: &#x27;GET&#x27;, path: &#x27;\/api\/users&#x27; }, rules), &#x27;found&#x27;);\\n});\\n\\ntest(&#x27;all-slash prefix normalizes to single \/&#x27;, () =&gt; {\\n  const rules = [{ method: &#x27;GET&#x27;, prefix: &#x27;\/\/\/&#x27;, target: &#x27;found&#x27; }];\\n  assert.equal(chooseRoute({ method: &#x27;GET&#x27;, path: &#x27;\/api&#x27; }, rules), &#x27;found&#x27;);\\n});\\n\\n\/\/ Method case-insensitivity\\ntest(&#x27;method comparison is case-insensitive&#x27;, () =&gt; {\\n  const rules = [{ method: &#x27;get&#x27;, prefix: &#x27;\/api&#x27;, target: &#x27;found&#x27; }];\\n  assert.equal(chooseRoute({ method: &#x27;GET&#x27;, path: &#x27;\/api&#x27; }, rules), &#x27;found&#x27;);\\n});\\n\\ntest(&#x27;request method case does not affect matching&#x27;, () =&gt; {\\n  const rules = [{ method: &#x27;GET&#x27;, prefix: &#x27;\/api&#x27;, target: &#x27;found&#x27; }];\\n  assert.equal(chooseRoute({ method: &#x27;get&#x27;, path: &#x27;\/api&#x27; }, rules), &#x27;found&#x27;);\\n});\\n\\n\/\/ Exact-method vs wildcard precedence\\ntest(&#x27;exact-method rule preferred over wildcard with longer prefix&#x27;, () =&gt; {\\n  const rules = [\\n    { method: &#x27;*&#x27;, prefix: &#x27;\/api\/admin\/users&#x27;, target: &#x27;wildcard&#x27; },\\n    { method: &#x27;GET&#x27;, prefix: &#x27;\/api&#x27;, target: &#x27;exact&#x27; }\\n  ];\\n  assert.equal(chooseRoute({ method: &#x27;GET&#x27;, path: &#x27;\/api\/test&#x27; }, rules), &#x27;exact&#x27;);\\n});\\n\\ntest(&#x27;wildcard rule used when no exact-method matches&#x27;, () =&gt; {\\n  const rules = [\\n    { method: &#x27;*&#x27;, prefix: &#x27;\/api&#x27;, target: &#x27;wildcard&#x27; },\\n    { method: &#x27;GET&#x27;, prefix: &#x27;\/other&#x27;, target: &#x27;exact&#x27; }\\n  ];\\n  assert.equal(chooseRoute({ method: &#x27;POST&#x27;, path: &#x27;\/api\/users&#x27; }, rules), &#x27;wildcard&#x27;);\\n});\\n\\n\/\/ Longest prefix matching\\ntest(&#x27;longest matching prefix is chosen&#x27;, () =&gt; {\\n  const rules = [\\n    { method: &#x27;GET&#x27;, prefix: &#x27;\/api&#x27;, target: &#x27;short&#x27; },\\n    { method: &#x27;GET&#x27;, prefix: &#x27;\/api\/admin&#x27;, target: &#x27;long&#x27; }\\n  ];\\n  assert.equal(chooseRoute({ method: &#x27;GET&#x27;, path: &#x27;\/api\/admin\/users&#x27; }, rules), &#x27;long&#x27;);\\n});\\n\\n\/\/ Tie-breaking (first rule wins on equal prefix length)\\ntest(&#x27;first rule wins on equal prefix length&#x27;, () =&gt; {\\n  const rules = [\\n    { method: &#x27;GET&#x27;, prefix: &#x27;\/api&#x27;, target: &#x27;first&#x27; },\\n    { method: &#x27;GET&#x27;, prefix: &#x27;\/api&#x27;, target: &#x27;second&#x27; }\\n  ];\\n  assert.equal(chooseRoute({ method: &#x27;GET&#x27;, path: &#x27;\/api\/users&#x27; }, rules), &#x27;first&#x27;);\\n});\\n\\n\/\/ Invalid rules are ignored\\ntest(&#x27;null rule is ignored&#x27;, () =&gt; {\\n  const rules = [\\n    null,\\n    { method: &#x27;GET&#x27;, prefix: &#x27;\/api&#x27;, target: &#x27;found&#x27; }\\n  ];\\n  assert.equal(chooseRoute({ method: &#x27;GET&#x27;, path: &#x27;\/api&#x27; }, rules), &#x27;found&#x27;);\\n});\\n\\ntest(&#x27;array rule is ignored&#x27;, () =&gt; {\\n  const rules = [\\n    [],\\n    { method: &#x27;GET&#x27;, prefix: &#x27;\/api&#x27;, target: &#x27;found&#x27; }\\n  ];\\n  assert.equal(chooseRoute({ method: &#x27;GET&#x27;, path: &#x27;\/api&#x27; }, rules), &#x27;found&#x27;);\\n});\\n\\ntest(&#x27;rule with invalid method is ignored&#x27;, () =&gt; {\\n  const rules = [\\n    { method: &#x27;&#x27;, prefix: &#x27;\/api&#x27;, target: &#x27;invalid&#x27; },\\n    { method: &#x27;GET&#x27;, prefix: &#x27;\/api&#x27;, target: &#x27;valid&#x27; }\\n  ];\\n  assert.equal(chooseRoute({ method: &#x27;GET&#x27;, path: &#x27;\/api&#x27; }, rules), &#x27;valid&#x27;);\\n});\\n\\ntest(&#x27;rule with non-letter method (if not wildcard) is ignored&#x27;, () =&gt; {\\n  const rules = [\\n    { method: &#x27;G3T&#x27;, prefix: &#x27;\/api&#x27;, target: &#x27;invalid&#x27; },\\n    { method: &#x27;GET&#x27;, prefix: &#x27;\/api&#x27;, target: &#x27;valid&#x27; }\\n  ];\\n  assert.equal(chooseRoute({ method: &#x27;GET&#x27;, path: &#x27;\/api&#x27; }, rules), &#x27;valid&#x27;);\\n});\\n\\ntest(&#x27;rule with prefix not starting with \/ is ignored&#x27;, () =&gt; {\\n  const rules = [\\n    { method: &#x27;GET&#x27;, prefix: &#x27;api&#x27;, target: &#x27;invalid&#x27; },\\n    { method: &#x27;GET&#x27;, prefix: &#x27;\/api&#x27;, target: &#x27;valid&#x27; }\\n  ];\\n  assert.equal(chooseRoute({ method: &#x27;GET&#x27;, path: &#x27;\/api&#x27; }, rules), &#x27;valid&#x27;);\\n});\\n\\ntest(&#x27;rule with query in prefix is ignored&#x27;, () =&gt; {\\n  const rules = [\\n    { method: &#x27;GET&#x27;, prefix: &#x27;\/api?foo=bar&#x27;, target: &#x27;invalid&#x27; },\\n    { method: &#x27;GET&#x27;, prefix: &#x27;\/api&#x27;, target: &#x27;valid&#x27; }\\n  ];\\n  assert.equal(chooseRoute({ method: &#x27;GET&#x27;, path: &#x27;\/api&#x27; }, rules), &#x27;valid&#x27;);\\n});\\n\\ntest(&#x27;rule with fragment in prefix is ignored&#x27;, () =&gt; {\\n  const rules = [\\n    { method: &#x27;GET&#x27;, prefix: &#x27;\/api#section&#x27;, target: <\/code><\/pre><\/details><details style=\"box-sizing:border-box;border:1px solid #d7dfed;border-radius:6px;padding:12px;margin:12px 0;background:#fff\"><summary style=\"box-sizing:border-box;cursor:pointer;font-weight:650;color:#254fc2\">Die vollst\u00e4ndige Antwort von Claude Sonnet 5 in der \u00fcbermittelten Form anzeigen<\/summary><p class=\"ccms-note\" style=\"box-sizing:border-box;color:#35435a;margin:12px 0;font-size:14px\">Dies ist die gesamte erhaltene Antwort. Sie endet mitten in der Ausgabe, da das Limit erreicht wurde; fehlende Inhalte wurden nicht erg\u00e4nzt.<\/p><pre style=\"box-sizing:border-box;white-space:pre-wrap;overflow-wrap:anywhere;max-height:520px;overflow:auto;background:#edf1f7;padding:14px;border-radius:4px;color:#162239;font:13px\/1.55 ui-monospace,SFMono-Regular,monospace\"><code style=\"box-sizing:border-box;color:inherit\">{&quot;files&quot;:{&quot;src\/router.js&quot;:&quot;function isValidRequest(request) {\\n  return (\\n    request !== null &amp;&amp;\\n    typeof request === &#x27;object&#x27; &amp;&amp;\\n    !Array.isArray(request) &amp;&amp;\\n    typeof request.method === &#x27;string&#x27; &amp;&amp;\\n    request.method.length &gt; 0 &amp;&amp;\\n    \/^[A-Za-z]+$\/.test(request.method) &amp;&amp;\\n    typeof request.path === &#x27;string&#x27; &amp;&amp;\\n    request.path.startsWith(&#x27;\/&#x27;)\\n  );\\n}\\n\\nfunction isValidRule(rule) {\\n  if (rule === null || typeof rule !== &#x27;object&#x27; || Array.isArray(rule)) {\\n    return false;\\n  }\\n  const { method, prefix, target } = rule;\\n\\n  if (typeof method !== &#x27;string&#x27;) return false;\\n  if (method !== &#x27;*&#x27; &amp;&amp; !(method.length &gt; 0 &amp;&amp; \/^[A-Za-z]+$\/.test(method))) {\\n    return false;\\n  }\\n\\n  if (\\n    typeof prefix !== &#x27;string&#x27; ||\\n    !prefix.startsWith(&#x27;\/&#x27;) ||\\n    prefix.includes(&#x27;?&#x27;) ||\\n    prefix.includes(&#x27;#&#x27;)\\n  ) {\\n    return false;\\n  }\\n\\n  if (typeof target !== &#x27;string&#x27; || target.length === 0) return false;\\n\\n  return true;\\n}\\n\\nfunction normalizePrefix(prefix) {\\n  if (\/^\\\\\/+$\/.test(prefix)) return &#x27;\/&#x27;;\\n  return prefix.replace(\/\\\\\/+$\/, &#x27;&#x27;);\\n}\\n\\nfunction prefixMatches(normalizedPrefix, path) {\\n  if (normalizedPrefix === &#x27;\/&#x27;) return true;\\n  if (path === normalizedPrefix) return true;\\n  return path.startsWith(normalizedPrefix + &#x27;\/&#x27;);\\n}\\n\\nfunction stripQueryAndFragment(path) {\\n  let cutIndex = path.length;\\n  for (let i = 0; i &lt; path.length; i++) {\\n    const c = path[i];\\n    if (c === &#x27;?&#x27; || c === &#x27;#&#x27;) {\\n      cutIndex = i;\\n      break;\\n    }\\n  }\\n  return path.slice(0, cutIndex);\\n}\\n\\nfunction chooseRoute(request, rules) {\\n  if (!isValidRequest(request) || !Array.isArray(rules)) return null;\\n\\n  const path = stripQueryAndFragment(request.path);\\n  const reqMethodLower = request.method.toLowerCase();\\n\\n  let bestExact = null; \/\/ { len, idx, target }\\n  let bestWildcard = null;\\n\\n  for (let idx = 0; idx &lt; rules.length; idx++) {\\n    const rule = rules[idx];\\n    if (!isValidRule(rule)) continue;\\n\\n    const normPrefix = normalizePrefix(rule.prefix);\\n    if (!prefixMatches(normPrefix, path)) continue;\\n\\n    const len = normPrefix.length;\\n\\n    if (rule.method === &#x27;*&#x27;) {\\n      if (\\n        bestWildcard === null ||\\n        len &gt; bestWildcard.len ||\\n        (len === bestWildcard.len &amp;&amp; idx &lt; bestWildcard.idx)\\n      ) {\\n        bestWildcard = { len, idx, target: rule.target };\\n      }\\n    } else if (rule.method.toLowerCase() === reqMethodLower) {\\n      if (\\n        bestExact === null ||\\n        len &gt; bestExact.len ||\\n        (len === bestExact.len &amp;&amp; idx &lt; bestExact.idx)\\n      ) {\\n        bestExact = { len, idx, target: rule.target };\\n      }\\n    }\\n  }\\n\\n  if (bestExact !== null) return bestExact.target;\\n  if (bestWildcard !== null) return bestWildcard.target;\\n  return null;\\n}\\n\\nmodule.exports = { chooseRoute };\\n&quot;,&quot;test\/router-added.test.js&quot;:&quot;const test = require(&#x27;node:test&#x27;);\\nconst assert = require(&#x27;node:assert\/strict&#x27;);\\nconst { chooseRoute } = require(&#x27;..\/src\/router&#x27;);\\n\\ntest(&#x27;segment boundary: prefix matches at slash boundary only&#x27;, () =&gt; {\\n  const rules = [\\n    { method: &#x27;GET&#x27;, prefix: &#x27;\/api&#x27;, target: &#x27;api&#x27; },\\n  ];\\n  assert.equal(\\n    chooseRoute({ method: &#x27;GET&#x27;, path: &#x27;\/api\/users&#x27; }, rules),\\n    &#x27;api&#x27;\\n  );\\n  assert.equal(\\n    chooseRoute({ method: &#x27;GET&#x27;, path: &#x27;\/api&#x27; }, rules),\\n    &#x27;api&#x27;\\n  );\\n  assert.equal(\\n    chooseRoute({ method: &#x27;GET&#x27;, path: &#x27;\/apix&#x27; }, rules),\\n    null\\n  );\\n});\\n\\ntest(&#x27;root prefix matches every valid path&#x27;, () =&gt; {\\n  const rules = [{ method: &#x27;GET&#x27;, prefix: &#x27;\/&#x27;, target: &#x27;root&#x27; }];\\n  assert.equal(chooseRoute({ method: &#x27;GET&#x27;, path: &#x27;\/&#x27; }, rules), &#x27;root&#x27;);\\n  assert.equal(\\n    chooseRoute({ method: &#x27;GET&#x27;, path: &#x27;\/anything\/here&#x27; }, rules),\\n    &#x27;root&#x27;\\n  );\\n});\\n\\ntest(&#x27;trailing slashes in rule prefix are normalized&#x27;, () =&gt; {\\n  const rules = [{ method: &#x27;GET&#x27;, prefix: &#x27;\/api\/\/\/&#x27;, target: &#x27;api&#x27; }];\\n  assert.equal(\\n    chooseRoute({ method: &#x27;GET&#x27;, path: &#x27;\/api\/users&#x27; }, rules),\\n    &#x27;api&#x27;\\n  );\\n  assert.equal(chooseRoute({ method: &#x27;GET&#x27;, path: &#x27;\/api&#x27; }, rules), &#x27;api&#x27;);\\n});\\n\\ntest(&#x27;all-slash prefix normalizes to \/&#x27;, () =&gt; {\\n  const rules = [{ method: &#x27;GET&#x27;, prefix: &#x27;\/\/\/\/&#x27;, target: &#x27;root&#x27; }];\\n  assert.equal(\\n    chooseRoute({ method: &#x27;GET&#x27;, path: &#x27;\/whatever&#x27; }, rules),\\n    &#x27;root&#x27;\\n  );\\n});\\n\\ntest(&#x27;query and fragment are stripped before matching&#x27;, () =&gt; {\\n  const rules = [{ method: &#x27;GET&#x27;, prefix: &#x27;\/api&#x27;, target: &#x27;api&#x27; }];\\n  assert.equal(\\n    chooseRoute({ method: &#x27;GET&#x27;, path: &#x27;\/api\/users?x=1&amp;y=2&#x27; }, rules),\\n    &#x27;api&#x27;\\n  );\\n  assert.equal(\\n    chooseRoute({ method: &#x27;GET&#x27;, path: &#x27;\/api\/users#section&#x27; }, rules),\\n    &#x27;api&#x27;\\n  );\\n  assert.equal(\\n    chooseRoute({ method: &#x27;GET&#x27;, path: &#x27;\/api\/users?x=1#frag&#x27; }, rules),\\n    &#x27;api&#x27;\\n  );\\n});\\n\\ntest(&#x27;query\/fragment stripping does not decode or collapse slashes&#x27;, () =&gt; {\\n  const rules = [{ method: &#x27;GET&#x27;, prefix: &#x27;\/a\/\/b&#x27;, target: &#x27;weird&#x27; }];\\n  assert.equal(\\n    chooseRoute({ method: &#x27;GET&#x27;, path: &#x27;\/a\/\/b?x=1&#x27; }, rules),<\/code><\/pre><\/details><details style=\"box-sizing:border-box;border:1px solid #d7dfed;border-radius:6px;padding:12px;margin:12px 0;background:#fff\"><summary style=\"box-sizing:border-box;cursor:pointer;font-weight:650;color:#254fc2\">Die vollst\u00e4ndige Antwort von Claude Opus 5.5 in der \u00fcbermittelten Form anzeigen<\/summary><p class=\"ccms-note\" style=\"box-sizing:border-box;color:#35435a;margin:12px 0;font-size:14px\">Dies ist die gesamte erhaltene Antwort. Sie endet mitten in der Ausgabe, da das Limit erreicht wurde; fehlende Inhalte wurden nicht erg\u00e4nzt.<\/p><pre style=\"box-sizing:border-box;white-space:pre-wrap;overflow-wrap:anywhere;max-height:520px;overflow:auto;background:#edf1f7;padding:14px;border-radius:4px;color:#162239;font:13px\/1.55 ui-monospace,SFMono-Regular,monospace\"><code style=\"box-sizing:border-box;color:inherit\">{&quot;files&quot;:{&quot;src\/router.js&quot;:&quot;&#x27;use strict&#x27;;\\n\\nconst LETTERS = \/^[A-Za-z]+$\/;\\n\\nfunction isPlainObject(value) {\\n  return value !== null &amp;&amp; typeof value === &#x27;object&#x27; &amp;&amp; !Array.isArray(value);\\n}\\n\\nfunction isMethodName(value) {\\n  return typeof value === &#x27;string&#x27; &amp;&amp; value.length &gt; 0 &amp;&amp; LETTERS.test(value);\\n}\\n\\nfunction stripQueryAndFragment(path) {\\n  const q = path.indexOf(&#x27;?&#x27;);\\n  const h = path.indexOf(&#x27;#&#x27;);\\n  let cut = -1;\\n  if (q !== -1 &amp;&amp; h !== -1) cut = Math.min(q, h);\\n  else if (q !== -1) cut = q;\\n  else if (h !== -1) cut = h;\\n  return cut === -1 ? path : path.slice(0, cut);\\n}\\n\\nfunction normalizePrefix(prefix) {\\n  let end = prefix.length;\\n  while (end &gt; 0 &amp;&amp; prefix[end - 1] === &#x27;\/&#x27;) end -= 1;\\n  return end === 0 ? &#x27;\/&#x27; : prefix.slice(0, end);\\n}\\n\\nfunction prefixMatches(path, prefix) {\\n  if (prefix === &#x27;\/&#x27;) return true;\\n  return path === prefix || path.startsWith(prefix + &#x27;\/&#x27;);\\n}\\n\\nfunction chooseRoute(request, rules) {\\n  try {\\n    if (!isPlainObject(request) || !Array.isArray(rules)) return null;\\n    const method = request.method;\\n    const rawPath = request.path;\\n    if (!isMethodName(method)) return null;\\n    if (typeof rawPath !== &#x27;string&#x27; || rawPath[0] !== &#x27;\/&#x27;) return null;\\n\\n    const path = stripQueryAndFragment(rawPath);\\n    const upperMethod = method.toUpperCase();\\n\\n    let bestExact = null;\\n    let bestWildcard = null;\\n\\n    const count = rules.length;\\n    for (let i = 0; i &lt; count; i += 1) {\\n      const rule = rules[i];\\n      if (!isPlainObject(rule)) continue;\\n      const ruleMethod = rule.method;\\n      const prefix = rule.prefix;\\n      const target = rule.target;\\n      const isWildcard = ruleMethod === &#x27;*&#x27;;\\n      if (!isWildcard &amp;&amp; !isMethodName(ruleMethod)) continue;\\n      if (typeof prefix !== &#x27;string&#x27; || prefix[0] !== &#x27;\/&#x27;) continue;\\n      if (prefix.indexOf(&#x27;?&#x27;) !== -1 || prefix.indexOf(&#x27;#&#x27;) !== -1) continue;\\n      if (typeof target !== &#x27;string&#x27; || target.length === 0) continue;\\n\\n      const normalized = normalizePrefix(prefix);\\n      if (!prefixMatches(path, normalized)) continue;\\n\\n      const candidate = { length: normalized.length, target };\\n      if (isWildcard) {\\n        if (bestWildcard === null || candidate.length &gt; bestWildcard.length) bestWildcard = candidate;\\n      } else if (ruleMethod.toUpperCase() === upperMethod) {\\n        if (bestExact === null || candidate.length &gt; bestExact.length) bestExact = candidate;\\n      }\\n    }\\n\\n    if (bestExact !== null) return bestExact.target;\\n    if (bestWildcard !== null) return bestWildcard.target;\\n    return null;\\n  } catch (err) {\\n    return null;\\n  }\\n}\\n\\nmodule.exports = { chooseRoute };\\n&quot;,&quot;test\/router-added.test.js&quot;:&quot;&#x27;use strict&#x27;;\\n\\nconst test = require(&#x27;node:test&#x27;);\\nconst assert = require(&#x27;node:assert\/strict&#x27;);\\nconst { chooseRoute } = require(&#x27;..\/src\/router.js&#x27;);\\n\\nconst baseRules = [\\n  { method: &#x27;GET&#x27;, prefix: &#x27;\/api&#x27;, target: &#x27;api&#x27; },\\n  { method: &#x27;GET&#x27;, prefix: &#x27;\/api\/admin&#x27;, target: &#x27;admin&#x27; }\\n];\\n\\ntest(&#x27;existing regression cases still hold&#x27;, () =&gt; {\\n  assert.equal(chooseRoute({ method: &#x27;GET&#x27;, path: &#x27;\/api\/users&#x27; }, baseRules), &#x27;api&#x27;);\\n  assert.equal(chooseRoute({ method: &#x27;POST&#x27;, path: &#x27;\/api\/users&#x27; }, baseRules), null);\\n});\\n\\ntest(&#x27;longest prefix wins within method group&#x27;, () =&gt; {\\n  assert.equal(chooseRoute({ method: &#x27;GET&#x27;, path: &#x27;\/api\/admin\/x&#x27; }, baseRules), &#x27;admin&#x27;);\\n  assert.equal(chooseRoute({ method: &#x27;GET&#x27;, path: &#x27;\/api\/admin&#x27; }, baseRules), &#x27;admin&#x27;);\\n});\\n\\ntest(&#x27;segment boundaries&#x27;, () =&gt; {\\n  const rules = [{ method: &#x27;GET&#x27;, prefix: &#x27;\/api&#x27;, target: &#x27;api&#x27; }];\\n  assert.equal(chooseRoute({ method: &#x27;GET&#x27;, path: &#x27;\/api&#x27; }, rules), &#x27;api&#x27;);\\n  assert.equal(chooseRoute({ method: &#x27;GET&#x27;, path: &#x27;\/api\/&#x27; }, rules), &#x27;api&#x27;);\\n  assert.equal(chooseRoute({ method: &#x27;GET&#x27;, path: &#x27;\/api\/users&#x27; }, rules), &#x27;api&#x27;);\\n  assert.equal(chooseRoute({ method: &#x27;GET&#x27;, path: &#x27;\/apix&#x27; }, rules), null);\\n  assert.equal(chooseRoute({ method: &#x27;GET&#x27;, path: &#x27;\/ap&#x27; }, rules), null);\\n});\\n\\ntest(&#x27;trailing slashes in prefixes are normalized, all-slash is root&#x27;, () =&gt; {\\n  const rules = [{ method: &#x27;GET&#x27;, prefix: &#x27;\/api\/\/\/&#x27;, target: &#x27;api&#x27; }];\\n  assert.equal(chooseRoute({ method: &#x27;GET&#x27;, path: &#x27;\/api&#x27; }, rules), &#x27;api&#x27;);\\n  assert.equal(chooseRoute({ method: &#x27;GET&#x27;, path: &#x27;\/apix&#x27; }, rules), null);\\n  const rootRules = [{ method: &#x27;GET&#x27;, prefix: &#x27;\/\/\/&#x27;, target: &#x27;root&#x27; }];\\n  assert.equal(chooseRoute({ method: &#x27;GET&#x27;, path: &#x27;\/&#x27; }, rootRules), &#x27;root&#x27;);\\n  assert.equal(chooseRoute({ method: &#x27;GET&#x27;, path: &#x27;\/anything\/else&#x27; }, rootRules), &#x27;root&#x27;);\\n  assert.equal(chooseRoute({ method: &#x27;GET&#x27;, path: &#x27;\/x&#x27; }, [{ method: &#x27;GET&#x27;, prefix: &#x27;\/&#x27;, target: &#x27;r&#x27; }]), &#x27;r&#x27;);\\n});\\n\\ntest(&#x27;query and fragment are removed at earliest ? or #&#x27;, () =&gt; {\\n  assert.equal(chooseRoute({ method: &#x27;GET&#x27;, path: &#x27;\/api?next=\/api\/admin&#x27; }, baseRules), &#x27;api&#x27;);\\n  assert.equal(chooseRoute({ method: &#x27;GET&#x27;, path: &#x27;\/api#\/admin&#x27; }, baseRules), &#x27;api&#x27;);\\n  assert.equal(chooseRoute({ method: &#x27;GET&#x27;, path: &#x27;\/apix?\/api&#x27; }, baseRules), null);\\n  assert.equal(chooseRoute({ method: &#x27;GET&#x27;, path: &#x27;\/api\/admin#frag?q&#x27; }, baseRules), &#x27;admin&#x27;);\\n  assert.equal(chooseRoute({ method: &#x27;GET&#x27;, path: &#x27;\/api?q#\/admin&#x27; }, baseRules), &#x27;api&#x27;);\\n});\\n\\ntest(&#x27;no URL decoding and no slash collapsing&#x27;, () =&gt; {\\n  const rules = [{ method: &#x27;GET&#x27;, prefix: &#x27;\/api\/admin&#x27;, target: &#x27;admin&#x27; }];\\n  assert.equal(chooseRoute({ method: &#x27;GET&#x27;, path: &#x27;\/api%2Fadmin&#x27; }, rules), null);\\n  assert.equal(chooseRoute({ method: &#x27;GET&#x27;, path: &#x27;\/api\/\/admin&#x27; }, rules), null);\\n  assert.equal(chooseRoute({ method: &#x27;GET&#x27;, path: &#x27;\/api\/\/admin&#x27; }, baseRules), &#x27;api&#x27;);\\n});\\n\\ntest(&#x27;methods compare case-insensitively&#x27;, () =&gt; {\\n  const rules = [{ method: &#x27;get&#x27;, prefix: &#x27;\/a&#x27;, target: &#x27;lower&#x27; }];\\n  assert.equal(chooseRoute({ method: &#x27;GET&#x27;, path: &#x27;\/a&#x27; }, rules), &#x27;lower&#x27;);\\n  assert.equal(chooseRoute({ method: &#x27;gEt&#x27;, path: &#x27;\/a\/b&#x27; }, rules), &#x27;lower&#x27;);\\n});\\n\\ntest(&#x27;exact method beats longer wildcard; wildcard used only as fallback&#x27;, () =&gt; {\\n  const rules = [\\n    { method: &#x27;*&#x27;, prefix: &#x27;\/api\/admin&#x27;, target: &#x27;wild-admin&#x27; },\\n    { method: &#x27;GET&#x27;, prefix: &#x27;\/&#x27;, target: &#x27;get-root&#x27; },\\n    { method: &#x27;POST&#x27;, prefix: &#x27;\/other&#x27;, target: &#x27;post-other&#x27; },\\n    { method: &#x27;*&#x27;, prefix: &#x27;\/api&#x27;, target: &#x27;wild-api&#x27; }\\n  ];\\n  assert.equal(chooseRoute({ method: &#x27;GET&#x27;, path: &#x27;\/api\/admin\/x&#x27; }, rules), &#x27;get-root&#x27;);\\n  assert.equal(chooseRoute({ method: &#x27;POST&#x27;, path: &#x27;\/api\/admin\/x&#x27; }, rules), &#x27;wild-admin&#x27;);\\n  assert.equal(chooseRoute({ method: &#x27;POST&#x27;, path: &#x27;\/api\/x&#x27; }, rules), &#x27;wild-api&#x27;);\\n  assert.equal(chooseRoute({ method: &#x27;POST&#x27;, path: &#x27;\/other\/1&#x27; }, rules), &#x27;post-other&#x27;);\\n  assert.equal(chooseRoute({ method: &#x27;PUT&#x27;, path: &#x27;\/nothing&#x27; }, rules), null);\\n});\\n\\ntest(&#x27;ties go to earlier rule in input order&#x27;, () =&gt; {\\n  const rules = [\\n    { method: &#x27;GET&#x27;, pref<\/code><\/pre><\/details><\/section>\n\n\n\n<p class=\"wp-block-paragraph\">Die Obergrenze von 4.096 Token war das f\u00fcr diesen Test gew\u00e4hlte Ausgabebudget und nicht das dokumentierte Maximum eines bestimmten Modells. Das Routing-Ergebnis legt nahe, vor einer umfangreicheren Anfrage eine praktische \u00dcberpr\u00fcfung durchzuf\u00fchren: Sch\u00e4tzen Sie den Umfang der Implementierung, der Tests und der Erkl\u00e4rung, die Sie als R\u00fcckgabe erwarten. Eine Aufteilung der Ergebnisse oder die Bereitstellung von mehr Ausgabekapazit\u00e4t kann sinnvoll sein; wir haben diese Ausgaben nicht mit anderen Einstellungen erneut ausgef\u00fchrt.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Beurteilen Sie bei Ihrer eigenen Aufgabe drei Aspekte getrennt voneinander: ob die Antwort vollst\u00e4ndig ist, ob der Code n\u00fctzliche Pr\u00fcfungen besteht und ob bei der \u00dcberpr\u00fcfung L\u00fccken entdeckt werden, die diese Pr\u00fcfungen \u00fcbersehen haben. Das Bestehen von zw\u00f6lf Funktionspr\u00fcfungen machte keine der unvollst\u00e4ndigen Antworten aus zwei Dateien zu einer vollst\u00e4ndigen Lieferung.<\/p>\n\n\n\n<h2 id=\"model-cost\" class=\"wp-block-heading\">Wie wirkt sich die Wahl des Modells auf die Kosten aus?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u201eClaude Code\u201c ist das Codierungstool; \u201eHaiku\u201c, \u201eSonnet\u201c, \u201eOpus\u201c und \u201eFable\u201c sind Modelloptionen innerhalb der unterst\u00fctzten Umgebung. Die Art und Weise, wie Sie sich authentifizieren und bezahlen, ist eine weitere Wahlm\u00f6glichkeit. Ein Wechsel des Modells wandelt ein Abonnement nicht in ein API-Konto um und hebt auch nicht alle Nutzungsbeschr\u00e4nkungen auf.<\/p>\n\n\n\n<figure class=\"wp-block-table\" style=\"overflow-x:auto;margin:24px 0;border:1px solid #d7dfed;border-radius:8px;box-sizing:border-box;max-width:100%\"><table style=\"width:100%;min-width:640px;border-collapse:collapse;font:15px\/1.6 system-ui,sans-serif\"><thead><tr><th scope=\"col\" style=\"padding:12px;border-bottom:1px solid #d7dfed;text-align:left;vertical-align:top;color:#172438;background:#edf1fa\">Abrechnungsweg<\/th><th scope=\"col\" style=\"padding:12px;border-bottom:1px solid #d7dfed;text-align:left;vertical-align:top;color:#172438;background:#edf1fa\">Was man sich ansehen sollte<\/th><th scope=\"col\" style=\"padding:12px;border-bottom:1px solid #d7dfed;text-align:left;vertical-align:top;color:#172438;background:#edf1fa\">Wie ist die Modellwahl zu interpretieren?<\/th><\/tr><\/thead><tbody><tr><td style=\"padding:12px;border-bottom:1px solid #d7dfed;text-align:left;vertical-align:top;color:#23334c\">Zugang zum Claude-Abonnement<\/td><td style=\"padding:12px;border-bottom:1px solid #d7dfed;text-align:left;vertical-align:top;color:#23334c\">Im Tarif enthaltene Nutzung sowie etwaige separat freigeschaltete Nutzungskontingente<\/td><td style=\"padding:12px;border-bottom:1px solid #d7dfed;text-align:left;vertical-align:top;color:#23334c\">Die verschiedenen Modelle k\u00f6nnen die Kontingente unterschiedlich verbrauchen; informieren Sie sich \u00fcber die verf\u00fcgbaren Modelle und Beschr\u00e4nkungen des Tarifs.<\/td><\/tr><tr><td style=\"padding:12px;border-bottom:1px solid #d7dfed;text-align:left;vertical-align:top;color:#23334c\">Anthropic-API-Zugriff<\/td><td style=\"padding:12px;border-bottom:1px solid #d7dfed;text-align:left;vertical-align:top;color:#23334c\">Eingabe-\/Ausgabe-Token, Zwischenspeicherung und anfallende API-Geb\u00fchren<\/td><td style=\"padding:12px;border-bottom:1px solid #d7dfed;text-align:left;vertical-align:top;color:#23334c\">Verwenden Sie die aktuelle Preisliste und die tats\u00e4chliche Nutzung und best\u00e4tigen Sie anschlie\u00dfend die Geb\u00fchren in der Abrechnungskonsole.<\/td><\/tr><tr><td style=\"padding:12px;border-bottom:1px solid #d7dfed;text-align:left;vertical-align:top;color:#23334c\">Cloud-Anbieter oder Gateway<\/td><td style=\"padding:12px;border-bottom:1px solid #d7dfed;text-align:left;vertical-align:top;color:#23334c\">Von Ihrem Anbieter unterst\u00fctzte IDs, Tarife und Abrechnungsdaten<\/td><td style=\"padding:12px;border-bottom:1px solid #d7dfed;text-align:left;vertical-align:top;color:#23334c\">Ein Beispiel f\u00fcr einen Anthropic-Listenpreis entspricht m\u00f6glicherweise nicht dem Betrag, den Ihr Anbieter in Rechnung stellt.<\/td><\/tr><\/tbody><\/table><figcaption class=\"wp-element-caption\" style=\"font-size:14px;line-height:1.6;color:#52617a;padding:12px\">Die Modellauswahl und die Abrechnung h\u00e4ngen zusammen, doch die Abrechnungsart bestimmt, wie die Nutzung in Rechnung gestellt wird.<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Im Claude-Code, <code>\/Verwendung<\/code> zeigt Informationen zum Sitzungstoken und gegebenenfalls Balken zur Abonnementnutzung an. Der angegebene Dollarbetrag ist eine lokal berechnete Sch\u00e4tzung auf der Grundlage von Listenpreisen oder konfigurierten Tarifen; es handelt sich nicht um eine Rechnung. F\u00fcr Pro- und Max-Abonnenten bedeutet dieser Sitzungsbetrag nicht, dass dem Abonnement eine zus\u00e4tzliche API-Rechnung hinzugef\u00fcgt wurde. Erfahren Sie mehr \u00fcber <a href=\"https:\/\/www.glbgpt.com\/hub\/claude-code-pricing\/\">Claude \u2013 Preisgestaltung und Abrechnungswege<\/a> wenn Sie sich gerade \u00fcberlegen, wie Sie bezahlen m\u00f6chten.<\/p>\n\n\n\n<h3 id=\"api-price-example\" class=\"wp-block-heading\">Aktuelle API-Preise und ein Beispiel mit \u201eequal-Token\u201c<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Die regul\u00e4ren Grundgeb\u00fchren von Anthropic pro Million Eingabe-\/Ausgabe-Token betragen <strong>Haiku 4.5: $1\/$5; Sonnet 5: $2\/$10; Opus 5.5: $4\/$20; Fable 5.1: $10\/$50<\/strong>, abgerufen am 28. September 2026. In der folgenden Grafik wird das Token-Volumen konstant gehalten, damit die Zahlen leicht vergleichbar sind.<\/p>\n\n\n\n<style>\n.ccms-cost{box-sizing:border-box;border:1px solid #d8dfeb;border-radius:8px;padding:24px;background:#f8faff;color:#182439;margin:28px 0;font:16px\/1.6 system-ui,sans-serif}.ccms-cost *{box-sizing:border-box}.ccms-cost h3{color:#182439;font-size:1.3rem;line-height:1.3;margin:0 0 8px}.ccms-cost p{color:#34435d;margin:10px 0}.ccms-cost a{color:#254fc2;text-decoration:underline}.ccms-cost__rows{display:grid;gap:16px;margin:22px 0}.ccms-cost__row{display:grid;grid-template-columns:100px 1fr 55px;gap:12px;align-items:center}.ccms-cost__track{background:#e2e8f2;height:18px;border-radius:4px;overflow:hidden}.ccms-cost__bar{display:block;height:100%;background:#5460c9}.ccms-cost__value{text-align:right;font-variant-numeric:tabular-nums}.ccms-cost__table{overflow-x:auto}.ccms-cost table{border-collapse:collapse;width:100%;min-width:460px;color:#182439;font-size:14px}.ccms-cost th,.ccms-cost td{padding:10px 8px;text-align:left;border-bottom:1px solid #d8dfeb}.ccms-cost th{color:#182439;background:#edf1fa}.ccms-cost__note{font-size:14px}.ccms-cost summary{cursor:pointer;font-weight:600;color:#254fc2}.ccms-cost details{margin:16px 0 0}@media(max-width:520px){.ccms-cost{padding:16px}.ccms-cost__row{grid-template-columns:85px 1fr 48px;gap:8px}}\n<\/style>\n<section class=\"ccms-cost\" aria-labelledby=\"ccms-cost-title\" style=\"box-sizing:border-box;border:1px solid #d8dfeb;border-radius:8px;padding:24px;background:#f8faff;color:#182439;margin:28px 0;font:16px\/1.6 system-ui,sans-serif;max-width:100%\">\n  <h3 id=\"ccms-cost-title\" style=\"box-sizing:border-box;color:#182439;font-size:1.3rem;line-height:1.3;margin:0 0 8px\">Gleiche Token-Menge, vier unterschiedliche API-Kosten<\/h3>\n  <p style=\"box-sizing:border-box;color:#34435d;margin:10px 0\">Beispiel: <strong style=\"box-sizing:border-box\">100.000 nicht zwischengespeicherte Eingabetoken + 10.000 Ausgabetoken<\/strong>, basierend auf den regul\u00e4ren API-Listenpreisen von Anthropic, Stand: 28. September 2026.<\/p>\n  <div class=\"ccms-cost__rows\" aria-label=\"Grundkosten der API f\u00fcr das im Beispiel angegebene Token-Volumen\" style=\"box-sizing:border-box;display:grid;gap:16px;margin:22px 0;max-width:100%\">\n    <div class=\"ccms-cost__row\" style=\"box-sizing:border-box;display:grid;grid-template-columns:100px 1fr 55px;gap:12px;align-items:center;max-width:100%\"><span style=\"box-sizing:border-box\">Haiku 4.5<\/span><span class=\"ccms-cost__track\" aria-hidden=\"true\" style=\"box-sizing:border-box;background:#e2e8f2;height:18px;border-radius:4px;overflow:hidden\"><span class=\"ccms-cost__bar\" style=\"box-sizing:border-box;display:block;height:100%;background:#5460c9;width:10%\"><\/span><\/span><strong class=\"ccms-cost__value\" style=\"box-sizing:border-box;text-align:right;font-variant-numeric:tabular-nums\">$0.15<\/strong><\/div>\n    <div class=\"ccms-cost__row\" style=\"box-sizing:border-box;display:grid;grid-template-columns:100px 1fr 55px;gap:12px;align-items:center;max-width:100%\"><span style=\"box-sizing:border-box\">Sonett 5<\/span><span class=\"ccms-cost__track\" aria-hidden=\"true\" style=\"box-sizing:border-box;background:#e2e8f2;height:18px;border-radius:4px;overflow:hidden\"><span class=\"ccms-cost__bar\" style=\"box-sizing:border-box;display:block;height:100%;background:#5460c9;width:20%\"><\/span><\/span><strong class=\"ccms-cost__value\" style=\"box-sizing:border-box;text-align:right;font-variant-numeric:tabular-nums\">$0.30<\/strong><\/div>\n    <div class=\"ccms-cost__row\" style=\"box-sizing:border-box;display:grid;grid-template-columns:100px 1fr 55px;gap:12px;align-items:center;max-width:100%\"><span style=\"box-sizing:border-box\">Opus 5.5<\/span><span class=\"ccms-cost__track\" aria-hidden=\"true\" style=\"box-sizing:border-box;background:#e2e8f2;height:18px;border-radius:4px;overflow:hidden\"><span class=\"ccms-cost__bar\" style=\"box-sizing:border-box;display:block;height:100%;background:#5460c9;width:40%\"><\/span><\/span><strong class=\"ccms-cost__value\" style=\"box-sizing:border-box;text-align:right;font-variant-numeric:tabular-nums\">$0.60<\/strong><\/div>\n    <div class=\"ccms-cost__row\" style=\"box-sizing:border-box;display:grid;grid-template-columns:100px 1fr 55px;gap:12px;align-items:center;max-width:100%\"><span style=\"box-sizing:border-box\">Fable 5.1<\/span><span class=\"ccms-cost__track\" aria-hidden=\"true\" style=\"box-sizing:border-box;background:#e2e8f2;height:18px;border-radius:4px;overflow:hidden\"><span class=\"ccms-cost__bar\" style=\"box-sizing:border-box;display:block;height:100%;background:#5460c9;width:100%\"><\/span><\/span><strong class=\"ccms-cost__value\" style=\"box-sizing:border-box;text-align:right;font-variant-numeric:tabular-nums\">$1.50<\/strong><\/div>\n  <\/div>\n  <details style=\"box-sizing:border-box;margin:16px 0 0\"><summary style=\"box-sizing:border-box;cursor:pointer;font-weight:600;color:#254fc2\">Preise und Berechnung anzeigen<\/summary>\n    <div class=\"ccms-cost__table\" style=\"box-sizing:border-box;overflow-x:auto;max-width:100%\"><table style=\"box-sizing:border-box;border-collapse:collapse;width:100%;min-width:460px;color:#182439;font-size:14px\"><caption style=\"box-sizing:border-box\">USD pro Million Token und das Berechnungsbeispiel<\/caption><thead style=\"box-sizing:border-box\"><tr style=\"box-sizing:border-box\"><th scope=\"col\" style=\"box-sizing:border-box;padding:10px 8px;text-align:left;border-bottom:1px solid #d8dfeb;color:#182439;background:#edf1fa\">Modell<\/th><th scope=\"col\" style=\"box-sizing:border-box;padding:10px 8px;text-align:left;border-bottom:1px solid #d8dfeb;color:#182439;background:#edf1fa\">Eingang \/ 1M<\/th><th scope=\"col\" style=\"box-sizing:border-box;padding:10px 8px;text-align:left;border-bottom:1px solid #d8dfeb;color:#182439;background:#edf1fa\">Leistung \/ 1M<\/th><th scope=\"col\" style=\"box-sizing:border-box;padding:10px 8px;text-align:left;border-bottom:1px solid #d8dfeb;color:#182439;background:#edf1fa\">Beispiel-Gesamtsumme<\/th><\/tr><\/thead><tbody style=\"box-sizing:border-box\">\n      <tr style=\"box-sizing:border-box\"><th scope=\"row\" style=\"box-sizing:border-box;padding:10px 8px;text-align:left;border-bottom:1px solid #d8dfeb;color:#182439;background:#edf1fa\">Haiku 4.5<\/th><td style=\"box-sizing:border-box;padding:10px 8px;text-align:left;border-bottom:1px solid #d8dfeb\">$1<\/td><td style=\"box-sizing:border-box;padding:10px 8px;text-align:left;border-bottom:1px solid #d8dfeb\">$5<\/td><td style=\"box-sizing:border-box;padding:10px 8px;text-align:left;border-bottom:1px solid #d8dfeb\">$0.15<\/td><\/tr>\n      <tr style=\"box-sizing:border-box\"><th scope=\"row\" style=\"box-sizing:border-box;padding:10px 8px;text-align:left;border-bottom:1px solid #d8dfeb;color:#182439;background:#edf1fa\">Sonett 5<\/th><td style=\"box-sizing:border-box;padding:10px 8px;text-align:left;border-bottom:1px solid #d8dfeb\">$2<\/td><td style=\"box-sizing:border-box;padding:10px 8px;text-align:left;border-bottom:1px solid #d8dfeb\">$10<\/td><td style=\"box-sizing:border-box;padding:10px 8px;text-align:left;border-bottom:1px solid #d8dfeb\">$0.30<\/td><\/tr>\n      <tr style=\"box-sizing:border-box\"><th scope=\"row\" style=\"box-sizing:border-box;padding:10px 8px;text-align:left;border-bottom:1px solid #d8dfeb;color:#182439;background:#edf1fa\">Opus 5.5<\/th><td style=\"box-sizing:border-box;padding:10px 8px;text-align:left;border-bottom:1px solid #d8dfeb\">$4<\/td><td style=\"box-sizing:border-box;padding:10px 8px;text-align:left;border-bottom:1px solid #d8dfeb\">$20<\/td><td style=\"box-sizing:border-box;padding:10px 8px;text-align:left;border-bottom:1px solid #d8dfeb\">$0.60<\/td><\/tr>\n      <tr style=\"box-sizing:border-box\"><th scope=\"row\" style=\"box-sizing:border-box;padding:10px 8px;text-align:left;border-bottom:1px solid #d8dfeb;color:#182439;background:#edf1fa\">Fable 5.1<\/th><td style=\"box-sizing:border-box;padding:10px 8px;text-align:left;border-bottom:1px solid #d8dfeb\">$10<\/td><td style=\"box-sizing:border-box;padding:10px 8px;text-align:left;border-bottom:1px solid #d8dfeb\">$50<\/td><td style=\"box-sizing:border-box;padding:10px 8px;text-align:left;border-bottom:1px solid #d8dfeb\">$1.50<\/td><\/tr>\n    <\/tbody><\/table><\/div>\n    <p style=\"box-sizing:border-box;color:#34435d;margin:10px 0\">Berechnung: 0,1 \u00d7 Eingangsrate + 0,01 \u00d7 Ausgangsrate. F\u00fcr Opus 5.5: 0,1 \u00d7 $4 + 0,01 \u00d7 $20 = $0,60.<\/p>\n  <\/details>\n  <p class=\"ccms-cost__note\" style=\"box-sizing:border-box;font-size:14px;color:#34435d;margin:10px 0\">Dies ist ein Beispiel mit festen Token-Zahlen. Tats\u00e4chliche Aufgaben verbrauchen unterschiedliche Gesamtmengen an Token; Cache-Schreib- und Lesevorg\u00e4nge, Wiederholungsversuche, Tools, die Abrechnung durch den Anbieter und Abonnement-Limits m\u00fcssen separat ber\u00fccksichtigt werden.<\/p>\n  <p class=\"ccms-cost__note\" style=\"box-sizing:border-box;font-size:14px;color:#34435d;margin:10px 0\">Quelle: <a href=\"https:\/\/platform.claude.com\/docs\/en\/about-claude\/pricing#model-pricing\" style=\"box-sizing:border-box;color:#254fc2;text-decoration:underline\">Preise f\u00fcr die Anthropic-API<\/a>.<\/p>\n<\/section>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1440\" height=\"625\" src=\"https:\/\/wp.glbgpt.com\/wp-content\/uploads\/2026\/09\/claude-api-pricing-20260928_aa929ac5f992491abf410216b0d17992.webp\" alt=\"Die Preistabelle f\u00fcr die API von Anthropic mit den Tarifen f\u00fcr Eingabe, Ausgabe und Prompt-Cache.\" class=\"wp-image-20173\" srcset=\"https:\/\/wp.glbgpt.com\/wp-content\/uploads\/2026\/09\/claude-api-pricing-20260928_aa929ac5f992491abf410216b0d17992.webp 1440w, https:\/\/wp.glbgpt.com\/wp-content\/uploads\/2026\/09\/claude-api-pricing-20260928_aa929ac5f992491abf410216b0d17992-300x130.webp 300w, https:\/\/wp.glbgpt.com\/wp-content\/uploads\/2026\/09\/claude-api-pricing-20260928_aa929ac5f992491abf410216b0d17992-1024x444.webp 1024w, https:\/\/wp.glbgpt.com\/wp-content\/uploads\/2026\/09\/claude-api-pricing-20260928_aa929ac5f992491abf410216b0d17992-768x333.webp 768w, https:\/\/wp.glbgpt.com\/wp-content\/uploads\/2026\/09\/claude-api-pricing-20260928_aa929ac5f992491abf410216b0d17992-18x8.webp 18w\" sizes=\"(max-width: 1440px) 100vw, 1440px\" \/><figcaption class=\"wp-element-caption\">Die regul\u00e4ren API-Listenpreise gelten pro Million Token; f\u00fcr Schreib- und Lesevorg\u00e4nge im Cache gelten separate Tarife.<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Eine echte Claude-Code-Aufgabe besteht aus einer Abfolge von Anfragen. Fr\u00fchere Kontextdaten k\u00f6nnen erneut gesendet werden, ein Modell kann weitere Untersuchungen durchf\u00fchren, und Tools oder zus\u00e4tzliche Agenten k\u00f6nnen weitere Aufgaben erzeugen. Das Caching von Prompts weist zudem unterschiedliche Schreib- und Lesegeschwindigkeiten auf. Der unterste Balken im Beispiel gibt daher nicht die niedrigsten Kosten pro akzeptierter \u00c4nderung an.<\/p>\n\n\n\n<h3 id=\"cost-strategies\" class=\"wp-block-heading\">F\u00fcnf M\u00f6glichkeiten, die Kosten zu kontrollieren, ohne die Aufgabe zu beeintr\u00e4chtigen<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Legen Sie die Akzeptanzkriterien fest, bevor Sie sich f\u00fcr ein Modell entscheiden.<\/strong> Geben Sie das erwartete Verhalten, Randf\u00e4lle und die bestehenden Einschr\u00e4nkungen an. Eine klar definierte, kleine Aufgabe l\u00e4sst sich kosteng\u00fcnstiger delegieren und leichter \u00fcberpr\u00fcfen.<\/li>\n\n\n\n<li><strong>Geben Sie den entsprechenden Kontext an.<\/strong> F\u00fcgen Sie die Dateien und Fehlerdetails bei, die f\u00fcr das Modell ben\u00f6tigt werden. Bei nicht damit zusammenh\u00e4ngenden Aufgaben sollten Sie eine neue Konversation beginnen, anstatt einen langen Verlauf weiterzuf\u00fchren, nur weil er bereits existiert.<\/li>\n\n\n\n<li><strong>Unterscheide zwischen F\u00e4higkeit und Anstrengung.<\/strong> Anthropic empfiehlt, zun\u00e4chst mit dem vom Modell voreingestellten Aufwand zu beginnen. Wenn das Modell den Kontext richtig interpretiert hat und das Problem dennoch nicht l\u00f6sen konnte, k\u00f6nnte ein leistungsf\u00e4higeres Modell Abhilfe schaffen. Falls das Modell das Einlesen oder die \u00dcberpr\u00fcfung \u00fcbersprungen hat, \u00fcberpr\u00fcfen Sie die Aufgabenstellung und die gew\u00e4hlte Aufwandsstufe.<\/li>\n\n\n\n<li><strong>Budget f\u00fcr die gesamte Antwort.<\/strong> Quellcode, Tests und Erl\u00e4uterungen ben\u00f6tigen alle Platz. Unsere zweite Aufgabe zeigt, warum eine vollst\u00e4ndige Funktion allein noch kein Beweis daf\u00fcr ist, dass die geforderte Leistung im Rahmen des Budgets liegt.<\/li>\n\n\n\n<li><strong>Vergleiche anerkannte Arbeiten.<\/strong> Erfassen Sie n\u00fctzliche Ausgabeergebnisse, Wiederholungsversuche, \u00dcberpr\u00fcfungszeiten und tats\u00e4chliche Abrechnungsdaten f\u00fcr repr\u00e4sentative Aufgaben. Trennen Sie dabei Fehler des Anbieters von Fehlern, die auf die Modellqualit\u00e4t zur\u00fcckzuf\u00fchren sind.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Diese Strategien stehen im Einklang mit der <a href=\"https:\/\/code.claude.com\/docs\/en\/costs\">Offizieller Kostenleitfaden<\/a> und <a href=\"https:\/\/claude.com\/blog\/claude-model-and-effort-level-in-claude-code\">Die Leitlinien von Anthropic zu Modell und Aufwand<\/a>. Ein tarifweites Wochen- oder Sitzungslimit kann auch nach einem Modellwechsel weiterhin gelten; bei einem modellspezifischen Limit verh\u00e4lt es sich anders. \u00dcberpr\u00fcfen Sie das tats\u00e4chliche Limit, bevor Sie wiederholt wechseln.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Wenn Ihre Arbeit die Bereiche Programmierung, Forschung, Schreiben und Medien umfasst, vergleichen Sie auch den Workflow, f\u00fcr den Sie bezahlen. <a href=\"https:\/\/www.glbgpt.com\/home?inviter=hub_content_home&amp;login=1\">Der Multi-Modell-Arbeitsbereich von GlobalGPT<\/a> vereint diese Funktionen in einem Dashboard mit CLI-Zugriff f\u00fcr Entwicklungsaufgaben. Dieser umfassendere Mehrwert f\u00fcr den Arbeitsablauf sollte im Zusammenhang mit einer volumenabh\u00e4ngigen API-Route ber\u00fccksichtigt werden; die obige API-\u00dcbersicht ist keine Preisliste f\u00fcr GlobalGPT-Abonnements.<\/p>\n\n\n\n<h2 id=\"troubleshooting\" class=\"wp-block-heading\">Warum das von Ihnen gew\u00e4hlte Modell m\u00f6glicherweise nicht funktioniert<\/h2>\n\n\n\n<figure class=\"wp-block-table\" style=\"overflow-x:auto;margin:24px 0;border:1px solid #d7dfed;border-radius:8px;box-sizing:border-box;max-width:100%\"><table style=\"width:100%;min-width:640px;border-collapse:collapse;font:15px\/1.6 system-ui,sans-serif\"><thead><tr><th scope=\"col\" style=\"padding:12px;border-bottom:1px solid #d7dfed;text-align:left;vertical-align:top;color:#172438;background:#edf1fa\">Symptom<\/th><th scope=\"col\" style=\"padding:12px;border-bottom:1px solid #d7dfed;text-align:left;vertical-align:top;color:#172438;background:#edf1fa\">Wahrscheinliche \u00dcberpr\u00fcfung<\/th><th scope=\"col\" style=\"padding:12px;border-bottom:1px solid #d7dfed;text-align:left;vertical-align:top;color:#172438;background:#edf1fa\">Praktischer n\u00e4chster Schritt<\/th><\/tr><\/thead><tbody><tr><td style=\"padding:12px;border-bottom:1px solid #d7dfed;text-align:left;vertical-align:top;color:#23334c\">In der n\u00e4chsten Sitzung wird das alte Modell verwendet<\/td><td style=\"padding:12px;border-bottom:1px solid #d7dfed;text-align:left;vertical-align:top;color:#23334c\">Die Umschaltung war m\u00f6glicherweise nur f\u00fcr diese Sitzung g\u00fcltig<\/td><td style=\"padding:12px;border-bottom:1px solid #d7dfed;text-align:left;vertical-align:top;color:#23334c\">Speichere die Auswahl mit der \u201eEnter\u201c-Aktion des Auswahlwerkzeugs und w\u00e4hle anschlie\u00dfend eine neue Sitzung aus<\/td><\/tr><tr><td style=\"padding:12px;border-bottom:1px solid #d7dfed;text-align:left;vertical-align:top;color:#23334c\">Die Einstellung wird gespeichert, aber es wird ein anderes Modell gestartet<\/td><td style=\"padding:12px;border-bottom:1px solid #d7dfed;text-align:left;vertical-align:top;color:#23334c\">Eine Einstellung f\u00fcr \u201eStart\u201c, \u201eShell\u201c, \u201eProjekt\u201c, \u201eVerwaltung\u201c oder \u201eOrganisation\u201c kann Vorrang haben<\/td><td style=\"padding:12px;border-bottom:1px solid #d7dfed;text-align:left;vertical-align:top;color:#23334c\">Lesen Sie die Informationen zum Systemstart durch und \u00fcberpr\u00fcfen Sie die entsprechende Konfiguration gemeinsam mit dem Verantwortlichen.<\/td><\/tr><tr><td style=\"padding:12px;border-bottom:1px solid #d7dfed;text-align:left;vertical-align:top;color:#23334c\">Ein fortgesetztes Gespr\u00e4ch folgt einem anderen Muster<\/td><td style=\"padding:12px;border-bottom:1px solid #d7dfed;text-align:left;vertical-align:top;color:#23334c\">Die gespeicherte Sitzung kann ihr vorheriges Modell wiederherstellen<\/td><td style=\"padding:12px;border-bottom:1px solid #d7dfed;text-align:left;vertical-align:top;color:#23334c\">\u00dcberpr\u00fcfen Sie den Status; w\u00e4hlen Sie f\u00fcr die Wiederaufnahme der Arbeit bewusst das gew\u00fcnschte Modell aus.<\/td><\/tr><tr><td style=\"padding:12px;border-bottom:1px solid #d7dfed;text-align:left;vertical-align:top;color:#23334c\">Das Modell fehlt oder wurde abgelehnt.<\/td><td style=\"padding:12px;border-bottom:1px solid #d7dfed;text-align:left;vertical-align:top;color:#23334c\">Verf\u00fcgbarkeit der Anbieter, Organisationsregeln oder eine veraltete Version des Claude-Codes<\/td><td style=\"padding:12px;border-bottom:1px solid #d7dfed;text-align:left;vertical-align:top;color:#23334c\">\u00dcberpr\u00fcfen Sie die unterst\u00fctzten Modell-IDs, den Kontozugriff und die Versionsanforderungen<\/td><\/tr><tr><td style=\"padding:12px;border-bottom:1px solid #d7dfed;text-align:left;vertical-align:top;color:#23334c\">Derselbe Nachname wird an anderer Stelle anders zugeordnet<\/td><td style=\"padding:12px;border-bottom:1px solid #d7dfed;text-align:left;vertical-align:top;color:#23334c\">Aliase und Provider-Zuordnungen unterscheiden sich<\/td><td style=\"padding:12px;border-bottom:1px solid #d7dfed;text-align:left;vertical-align:top;color:#23334c\">Verwenden Sie die korrekte vollst\u00e4ndige ID des Anbieters, wenn eine Version unver\u00e4ndert bleiben muss<\/td><\/tr><tr><td style=\"padding:12px;border-bottom:1px solid #d7dfed;text-align:left;vertical-align:top;color:#23334c\">Durch einen Anbieterwechsel wird ein Nutzungslimit nicht zur\u00fcckgesetzt<\/td><td style=\"padding:12px;border-bottom:1px solid #d7dfed;text-align:left;vertical-align:top;color:#23334c\">Die Beschr\u00e4nkung kann f\u00fcr den gesamten Plan gelten.<\/td><td style=\"padding:12px;border-bottom:1px solid #d7dfed;text-align:left;vertical-align:top;color:#23334c\">Lesen Sie die Nutzungshinweise und stellen Sie den Zeitraum neu ein, anstatt davon auszugehen, dass ein Familienwechsel ausreicht.<\/td><\/tr><\/tbody><\/table><figcaption class=\"wp-element-caption\" style=\"font-size:14px;line-height:1.6;color:#52617a;padding:12px\">Stellen Sie zun\u00e4chst fest, wie gro\u00df das Problem ist, bevor Sie eine weitere Einstellung \u00e4ndern.<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Wenn der Code \u201eClaude\u201c Ihre Benutzereinstellungen nicht schreiben kann, kann eine interaktive Auswahl f\u00fcr die aktuelle Sitzung bestehen bleiben, ohne dauerhaft gespeichert zu werden. Bei einer verwalteten oder generierten Einstellungsdatei ist m\u00f6glicherweise eine \u00c4nderung durch den Eigent\u00fcmer erforderlich, anstatt einen weiteren Auswahlversuch zu unternehmen. Vermeiden Sie es, organisatorische Einschr\u00e4nkungen aufzuheben, nur um eine Option anzuzeigen.<\/p>\n\n\n\n<h2 id=\"globalgpt-workflow\" class=\"wp-block-heading\">Erstellen Sie mit GlobalGPT einen umfassenderen Arbeitsablauf<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Die Modellauswahl ist nur ein Teil des Arbeitsablaufs. M\u00f6glicherweise m\u00fcssen Sie eine Bibliothek recherchieren, eine Funktion entwerfen, einem Teamkollegen eine \u00c4nderung erkl\u00e4ren, Dokumentation erstellen und visuelle Elemente vorbereiten. GlobalGPT vereint mehrere f\u00fchrende Modelle und KI-Funktionen in einer kosteng\u00fcnstigen Arbeitsumgebung, sodass all diese Aufgaben in ein und demselben Dashboard abgewickelt werden k\u00f6nnen.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img alt=\"\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"547\" src=\"https:\/\/wp.glbgpt.com\/wp-content\/uploads\/2026\/07\/image-15-1024x547.png\" class=\"wp-image-16961\" srcset=\"https:\/\/wp.glbgpt.com\/wp-content\/uploads\/2026\/07\/image-15-1024x547.png 1024w, https:\/\/wp.glbgpt.com\/wp-content\/uploads\/2026\/07\/image-15-300x160.png 300w, https:\/\/wp.glbgpt.com\/wp-content\/uploads\/2026\/07\/image-15-768x410.png 768w, https:\/\/wp.glbgpt.com\/wp-content\/uploads\/2026\/07\/image-15-1536x820.png 1536w, https:\/\/wp.glbgpt.com\/wp-content\/uploads\/2026\/07\/image-15-2048x1094.png 2048w, https:\/\/wp.glbgpt.com\/wp-content\/uploads\/2026\/07\/image-15-18x10.png 18w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<div class=\"wp-block-buttons is-content-justification-center is-layout-flex wp-container-core-buttons-is-layout-3e41869c wp-block-buttons-is-layout-flex\">\n<div class=\"wp-block-button\"><a class=\"wp-block-button__link wp-element-button\" href=\"https:\/\/www.glbgpt.com\/home\/cli?inviter=hub_content_cli&amp;login=1\">Probieren Sie GlobalGPT CLI aus<\/a><\/div>\n<\/div>\n\n\n\n<p class=\"wp-block-paragraph\">F\u00fcr die Arbeit am Terminal gilt, dass die <a href=\"https:\/\/www.glbgpt.com\/home\/cli\">GlobalGPT-Befehlszeilenschnittstelle<\/a> verbindet die Tools der Plattform mit Entwicklungsumgebungen. Die dokumentierte Einrichtung nutzt Ihre Anmeldedaten f\u00fcr das GlobalGPT-Konto und den normalen Kontostand. Die CLI unterst\u00fctzt einen umfassenderen Workflow f\u00fcr Programmierung und Erstellung, w\u00e4hrend das eigene Modell von Claude Code durch seine Modellsteuerungen weiterhin eine bewusste Wahl bleibt.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Erstellen und \u00fcberpr\u00fcfen Sie beispielsweise einen Implementierungsentwurf, verwenden Sie ein anderes Modell f\u00fcr eine pr\u00e4gnante Erl\u00e4uterung und erstellen Sie anschlie\u00dfend die Dokumentation oder die Begleitmaterialien f\u00fcr die Ver\u00f6ffentlichung. Befolgen Sie die Anleitung, um <a href=\"https:\/\/www.glbgpt.com\/hub\/how-to-use-globalgpt-cli-in-claude-code\/\">GlobalGPT-CLI mit Claude-Code verbinden<\/a> wenn Sie diese Tool-Integration w\u00fcnschen. Passen Sie Ihr Claude-Code-Inferenzmodell entsprechend der Kodierungsaufgabe separat an.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">W\u00e4hlen Sie ein Ausgangsmodell, legen Sie die Kriterien fest, die den Erfolg definieren, und gehen Sie einen Schritt weiter, wenn es die Aufgabe erfordert. \u00dcberpr\u00fcfen Sie das gesamte Ergebnis, bevor Sie die Arbeit als abgeschlossen betrachten. <a href=\"https:\/\/www.glbgpt.com\/home?inviter=hub_content_home&amp;login=1\">Gestalten Sie Ihren Arbeitsablauf mit GlobalGPT<\/a> wenn Sie Modellauswahl, Recherche, Programmierung und kreative Tools miteinander verkn\u00fcpfen m\u00f6chten, um sie in Ihren Arbeitsalltag zu integrieren.<\/p>\n\n\n\n<h2 id=\"faq\" class=\"wp-block-heading\">FAQ<\/h2>\n\n\n\n<h3 id=\"faq-1\" class=\"wp-block-heading\">Wie \u00e4ndere ich das Modell im Claude-Code?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">F\u00fchren Sie den Befehl \/model aus, um die Auswahl zu \u00f6ffnen. Dr\u00fccken Sie \u201es\u201c, um nur die aktuelle Sitzung umzustellen, oder die Eingabetaste, um das ausgew\u00e4hlte Modell als Standard zu speichern. Um ein Modell f\u00fcr eine einzelne neue Sitzung auszuw\u00e4hlen, starten Sie das Programm mit dem Befehl claude \u2013model, gefolgt vom Modellnamen.<\/p>\n\n\n\n<h3 id=\"faq-2\" class=\"wp-block-heading\">\u00c4ndert \/model meine gespeicherte Standardeinstellung?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">In den aktuellen interaktiven Versionen wird die Auswahl eines Modells \u00fcber die Eingabetaste oder die Eingabe von \u201e\/model sonnet\u201c in den Benutzereinstellungen gespeichert, sofern diese beschreibbar sind. Das Dr\u00fccken der Taste \u201es\u201c im Auswahldialog gilt nur f\u00fcr die aktuelle Sitzung. Andere Einstellungen k\u00f6nnen beim n\u00e4chsten Start weiterhin Vorrang haben.<\/p>\n\n\n\n<h3 id=\"faq-3\" class=\"wp-block-heading\">Was ist das Standardmodell des Claude-Codes?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Die Standardlaufzeit h\u00e4ngt von Ihrem Konto, Ihrem Anbieter und Ihrer Konfiguration ab. Der Standardwert l\u00f6scht eine Modell\u00fcberschreibung; es handelt sich nicht um eine feste Modell-ID. \u00dcberpr\u00fcfen Sie das aktive Modell mit \/status und sehen Sie sich die Auswahlliste an, anstatt davon auszugehen, dass jedes Konto mit derselben Version beginnt.<\/p>\n\n\n\n<h3 id=\"faq-4\" class=\"wp-block-heading\">Was macht Opusplan?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Im Planungsmodus wird Opus verwendet, w\u00e4hrend der Ausf\u00fchrung Sonnet. Das System orientiert sich am Moduswechsel und w\u00e4hlt nicht automatisch f\u00fcr jede Eingabeaufforderung das kosteng\u00fcnstigste Modell aus. Die tats\u00e4chlichen Kosten h\u00e4ngen von der in der jeweiligen Phase geleisteten Arbeit ab.<\/p>\n\n\n\n<h3 id=\"faq-5\" class=\"wp-block-heading\">Warum fehlt ein Modell in der Auswahl?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Die Verf\u00fcgbarkeit kann von Ihrem Anbieter, Ihrem Konto, den Einschr\u00e4nkungen Ihrer Organisation und der Version des Claude-Codes abh\u00e4ngen. Informieren Sie sich in der Dokumentation zum aktuellen Modell und \u00fcber die in Ihrer Umgebung zul\u00e4ssigen Modelle. Ein Familienalias kann bei einem anderen Anbieter auch zu einer anderen Version f\u00fchren.<\/p>\n\n\n\n<h3 id=\"faq-6\" class=\"wp-block-heading\">Macht ein g\u00fcnstigeres Modell eine Aufgabe immer kosteng\u00fcnstiger?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Nein. Der Token-Preis ist nur ein Faktor. Die Gesamtnutzung, unvollst\u00e4ndige Antworten, Wiederholungsversuche und der \u00dcberpr\u00fcfungsaufwand beeinflussen die Kosten einer akzeptablen \u00c4nderung. Bei unserer kleinen Refaktorisierung wurden alle drei Funktionen bestanden, w\u00e4hrend alle drei gr\u00f6\u00dferen Antworten mit zwei Dateien aufgrund der gemeinsamen Ausgabebegrenzung gek\u00fcrzt wurden.<\/p>\n\n\n\n<h2 id=\"sources\" class=\"wp-block-heading\">Quellen<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/code.claude.com\/docs\/en\/model-config\">Konfiguration des Modells mit dem Code \u201eClaude\u201c<\/a> \u2014 Modellauswahl, Standardwerte, Aliase, Unterschiede zwischen Anbietern und Opusplan.<\/li>\n\n\n\n<li><a href=\"https:\/\/code.claude.com\/docs\/en\/costs\">Kosten f\u00fcr den Code Claude<\/a> \u2014 Nutzungssch\u00e4tzungen, Abonnementkontingente, Zwischenspeicherung und Kostenkontrolle.<\/li>\n\n\n\n<li><a href=\"https:\/\/platform.claude.com\/docs\/en\/about-claude\/models\/overview\">Modell\u00fcbersicht Anthropic<\/a> und <a href=\"https:\/\/platform.claude.com\/docs\/en\/about-claude\/pricing\">API-Preise<\/a> \u2014 Aktuelle Modellspezifikationen und Listenpreise.<\/li>\n\n\n\n<li><a href=\"https:\/\/claude.com\/blog\/claude-model-and-effort-level-in-claude-code\">Leitfaden zu Modellen und Ma\u00dfnahmen<\/a> \u2014 praktische Unterschiede zwischen F\u00e4higkeiten, Kontext und Aufwand.<\/li>\n\n\n\n<li><a href=\"https:\/\/www.glbgpt.com\/home\/cli\">GlobalGPT CLI-Dokumentation<\/a> \u2014 Terminal-Workflow und kontobasierte Einrichtung.<\/li>\n<\/ul>\n\n\n\n<script type=\"application\/ld+json\">{\n    \"@context\": \"https:\\\/\\\/schema.org\",\n    \"@type\": \"FAQPage\",\n    \"mainEntity\": [\n        {\n            \"@type\": \"Question\",\n            \"name\": \"How do I change the model in Claude Code?\",\n            \"acceptedAnswer\": {\n                \"@type\": \"Answer\",\n                \"text\": \"Run \\\/model to open the picker. Press s to switch only the current session, or Enter to save the selected model as your default. To choose a model for a single new session, launch with claude --model followed by the model name.\"\n            }\n        },\n        {\n            \"@type\": \"Question\",\n            \"name\": \"Does \\\/model change my saved default?\",\n            \"acceptedAnswer\": {\n                \"@type\": \"Answer\",\n                \"text\": \"In current interactive versions, selecting a model with Enter or typing \\\/model sonnet saves the choice in user settings when writable. Pressing s in the picker is session-only. Other settings can still take priority on the next launch.\"\n            }\n        },\n        {\n            \"@type\": \"Question\",\n            \"name\": \"What is the default Claude Code model?\",\n            \"acceptedAnswer\": {\n                \"@type\": \"Answer\",\n                \"text\": \"The runtime default depends on your account, provider, and configuration. The default value clears a model override; it is not one fixed model ID. Check the active model with \\\/status and inspect the picker rather than assuming every account starts on the same release.\"\n            }\n        },\n        {\n            \"@type\": \"Question\",\n            \"name\": \"What does opusplan do?\",\n            \"acceptedAnswer\": {\n                \"@type\": \"Answer\",\n                \"text\": \"It uses Opus during plan mode and Sonnet during execution. It follows the mode transition rather than automatically choosing the cheapest model for each prompt. Actual cost depends on the work performed in each phase.\"\n            }\n        },\n        {\n            \"@type\": \"Question\",\n            \"name\": \"Why is a model missing from the picker?\",\n            \"acceptedAnswer\": {\n                \"@type\": \"Answer\",\n                \"text\": \"Availability can depend on your provider, account, organization restrictions, and Claude Code version. Check the current model documentation and your environment\\u2019s allowed models. A family alias can also resolve to a different release on another provider.\"\n            }\n        },\n        {\n            \"@type\": \"Question\",\n            \"name\": \"Does a cheaper model always make a task cheaper?\",\n            \"acceptedAnswer\": {\n                \"@type\": \"Answer\",\n                \"text\": \"No. Token price is only one factor. Total usage, incomplete answers, retries, and review effort affect the cost of an acceptable change. In our small refactor all three functions passed, while all three larger two-file responses were truncated at the shared output limit.\"\n            }\n        }\n    ]\n}<\/script>","protected":false},"excerpt":{"rendered":"<p>Bei der Auswahl eines Modells nach dem Claude-Code sollten Sie \u201eHaiku\u201c f\u00fcr kleine, \u00fcberpr\u00fcfbare \u00c4nderungen, \u201eSonnet\u201c f\u00fcr die routinem\u00e4\u00dfige Implementierung und \u201eOpus\u201c f\u00fcr Aufgaben mit gr\u00f6\u00dferer Mehrdeutigkeit oder h\u00f6heren Anforderungen an die Argumentation verwenden. Anthropic empfiehlt derzeit Opus 5.5 als allgemeinen Ausgangspunkt; Ihre Aufgabe, der \u00dcberpr\u00fcfungsaufwand und Ihr Budget entscheiden dar\u00fcber, ob ein kleineres Modell besser geeignet ist. Um das Modell zu wechseln, \u00f6ffnen Sie \/model. [\u2026]<\/p>","protected":false},"author":7,"featured_media":20168,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_seopress_robots_primary_cat":"","_seopress_titles_title":"Claude Code Model Selection: Defaults, Switching, and Cost","_seopress_titles_desc":"Choose a Claude Code model for your task, set a default, switch for one session, and compare current API costs with practical coding examples.","_seopress_robots_index":"","footnotes":""},"categories":[7],"tags":[],"class_list":["post-20166","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ai-chat"],"acf":[],"_links":{"self":[{"href":"https:\/\/wp.glbgpt.com\/de\/wp-json\/wp\/v2\/posts\/20166","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wp.glbgpt.com\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wp.glbgpt.com\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wp.glbgpt.com\/de\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/wp.glbgpt.com\/de\/wp-json\/wp\/v2\/comments?post=20166"}],"version-history":[{"count":2,"href":"https:\/\/wp.glbgpt.com\/de\/wp-json\/wp\/v2\/posts\/20166\/revisions"}],"predecessor-version":[{"id":20174,"href":"https:\/\/wp.glbgpt.com\/de\/wp-json\/wp\/v2\/posts\/20166\/revisions\/20174"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wp.glbgpt.com\/de\/wp-json\/wp\/v2\/media\/20168"}],"wp:attachment":[{"href":"https:\/\/wp.glbgpt.com\/de\/wp-json\/wp\/v2\/media?parent=20166"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wp.glbgpt.com\/de\/wp-json\/wp\/v2\/categories?post=20166"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wp.glbgpt.com\/de\/wp-json\/wp\/v2\/tags?post=20166"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}