# mazmanov-portal-spotify-shunt-claude-code-tokens-2026-09-03

## Veille

Engineering-Beitrag von **Spotify**, veröffentlicht am 3. September 2026 auf engineering.atspotify.com (~1.600 Wörter, neun Abschnitte, zwei YAML-Manifeste, vier Befehlszeilenbeispiele), verfasst von **Dimitri Mazmanov**, Principal Product Manager. Er beschreibt ein persönliches Setup, das I/O-Aufgaben aus dem Kontext von **Claude Code** auslagern soll. Die eingangs formulierte Prämisse: *„Das meiste, was ein KI-Coding-Agent für mich tut, ist kein Denken. Es ist I/O“* — fünf Dateien lesen, um eine Frage zu einer einzelnen Methode zu beantworten, einen Test erstellen, der sich an den anderen zwanzig im Verzeichnis orientiert. **(A) Die Modes.** **Portal by Spotify** stellt *AiKA Modes* bereit, deklarative Agenten auf einer ephemeren Laufzeitumgebung — Instruktionen, Modell, Temperatur, **MCP**-Tools — verglichen mit *„AWS Lambda, aber für Agenten“*; zwei öffentliche Modes, `bulk-reader` und `code-writer`, laufen hier auf **Gemini 2.5 Flash**. **(B) Das Routing.** Ein Claude-Code-Plugin namens `shunt` ersetzt `CLAUDE.md`-Regeln, die als *„beratend, nicht erzwungen“* eingestuft werden, durch drei Schichten: `PreToolUse`-Hooks, die jedes Lesen über **350 Zeilen** hinaus blockieren (Schwellenwert anpassbar über `SHUNT_MIN_LINES`), zwei Bash-Skripte, die die Portal-CLI aufrufen, zwei Skills, die die Aufrufsyntax bereitstellen. Der Korpus geht an das sekundäre Modell und **gelangt nie in Claudes Kontext**. **(C) Messungen und ihre Grenzen.** Bei einem Java-Monorepo, vier Szenarien, liegt die berichtete durchschnittliche Einsparung bei **~90 %** für `bulk-read`; der Autor merkt an, dass das Szenario `code-write` *„schwerer zu messen“* sei, und nennt drei Einschränkungen — nicht delegierbares Editieren, nicht delegierbares Reasoning, **10 bis 30 Sekunden** Latenz pro Aufruf. Knüpft an die Budgetfragen aus [[gupta-token-budget-wars-marginal-token-utility-2026-05-28]] und die in [[willison-fable-judgement-delegation-subagents-2026-07-03]] untersuchte Delegation an.

## Titre Article

Portal by Spotify cut my Claude Code token usage by 90%

## Date

2026-09-03

## URL

https://engineering.atspotify.com/2026/9/portal-by-spotify-cut-my-claude-code-token-usage-by-90

## Keywords

Portal by Spotify, AiKA Modes, shunt, Claude-Code-Plugin, Modell-Routing, sekundäres Modell, I/O-Delegation, Gemini 2.5 Flash, bulk-reader, code-writer, PreToolUse-Hooks, Leseblockierung, Zeilenschwellenwert, SHUNT_MIN_LINES, Skills, Portal CLI, ephemere Laufzeitumgebung, deklarativer Agent, MCP, Token-Budget, Kosten pro Entwickler, Output-Tokens, Agent-Kontext, Java-Monorepo, Delegationslatenz, Plugin-Marketplace, spotify/portal-ai-plugins, Backstage, AI FinOps

## Authors

Dimitri Mazmanov (Principal Product Manager, Spotify), sur le blog d'ingénierie engineering.atspotify.com.

## Ton

**Profil**: ein individueller Erfahrungsbericht, veröffentlicht auf einem Unternehmens-Engineering-Blog, in der ersten Person, der zugleich eine offen eingestandene Bewerbung eines internen Produkts ist. Zielgruppe: fortgeschrittene Nutzer von Coding-Agenten und interne Plattformverantwortliche.

**Stil**: Der Text folgt einer technischen Demonstrationsstruktur — quantifiziertes Problem, Lösung, nummerierte Schicht-Architektur, Messungen, Einschränkungen, Nutzungshinweise. Die Artefakte werden vollständig angegeben: zwei vollständige YAML-Manifeste, vier Befehlszeilenaufrufe, die Umgebungsvariable für den Schwellenwert, die drei Installationsbefehle. Implementierungsdetails werden ausgebreitet statt zusammengefasst, einschließlich Mikroentscheidungen und ihrer Begründung — die Anweisung *„nur den Code ausgeben“* wird mit den Markdown-Fences begründet, die Claude sonst parsen müsste, die verpflichtende Referenzdatei mit dem kontextlosen Code, den ein Modell ohne sie erzeugen würde.

**Epistemische Position**: Der Titel zeigt ein quantifiziertes Ergebnis, doch der Text schränkt es selbst ein. Ein ganzer Abschnitt, *„Was nicht funktioniert“*, listet auf, was das Setup nicht leistet: kein delegiertes Editieren mangels verlässlicher Zeilennummern, kein delegiertes Reasoning — ein vom sekundären Modell übersehener Thread-Safety-Bug, von Claude sofort erkannt —, und ein Latenz-Overhead, der die Delegation unterhalb des Schwellenwerts kontraproduktiv macht. Die Messung selbst bleibt deklarativ: vier Szenarien an einem Java-Monorepo, ohne veröffentlichtes Protokoll, ohne absolute Volumina, ohne Berücksichtigung der Kosten des sekundären Modells. Der abschließende Abschnitt verschiebt den Einsatz explizit von der Zahl zur Wiederverwendbarkeit der Modes, formuliert als *„sie machen aus Modell-Routing ein Konfigurationsproblem statt eines Systementwicklungsproblems“*.

## Pense-betes

- **Die Ausgangsintuition ist Lastverteilung, nicht Prompt-Optimierung.** Das Lesen von Dateien und das Erzeugen repetitiven Codes verbraucht Tokens, ohne Reasoning zu erfordern; diese Aufgaben gehen an ein günstiges Modell, während das primäre Modell die Probleme behält, die Urteilsvermögen erfordern.
- **Was eingespart wird, ist nicht nur der Preis, sondern die Kontextbelegung.** Der gelesene Korpus wird an das sekundäre Modell gesendet und gelangt nie in Claudes Fenster; eine Folgeabfrage zu denselben Dateien lädt daher auf der primären Seite nichts neu. Derselbe Mechanismus wie die Delegation an Subagenten in [[willison-fable-judgement-delegation-subagents-2026-07-03]].
- **Ein Mode = ein deklarativer Agent**: Name, Beschreibung, Instruktionen, Modell, `visibility`, `resourceLimits`, `tags`. Ephemere Laufzeitumgebung, nichts serverseitig gespeichert, kein zu verwaltender API-Schlüssel. Auflösung nach Name, ohne Berücksichtigung von Groß-/Kleinschreibung, mit Vorrang persönlich → Team → öffentlich: Einen öffentlichen Mode zu forken reicht aus, um ihn ohne Konfiguration zu überschreiben.
- **Die Regeln in `CLAUDE.md` hielten nicht stand.** Erste Version des Routings: ein Block von Instruktionen, den Claude las und manchmal befolgte. Zwei genannte Schwächen — *beratend, nicht erzwungen* und die Notwendigkeit, in jedes Projekt kopiert zu werden. Das ist das Argument, das den Wechsel zu Hooks vorantreibt — harte Gates, unabhängig von der Entscheidung des Modells.
- **Der Schwellenwert ist der zentrale Tuning-Parameter.** `check-file-size` blockiert standardmäßig `Read`-Aufrufe über 350 Zeilen hinaus; `check-bash-read` fängt `cat`, `head`, `tail`, `less`, `more` ab. Gezielte Lesevorgänge (`offset`/`limit`) und Pipe-Befehle werden durchgelassen. Unterhalb des Schwellenwerts kostet die Delegationslatenz mehr, als sie einspart.
- **Graceful Degradation ist der architektonische Kernpunkt.** Drei Schichten: der Hook blockiert, das Skript führt aus, der Skill erklärt. Ignoriert Claude den Skill, blockiert der Hook trotzdem — der Vertrag wird nicht dem Modell überlassen.
- **Zwei Mode-Instruktionen leisten den Großteil der Arbeit.** *Nur den Code ausgeben* vermeidet Markdown-Fences und Prosa, die das primäre Modell erneut parsen müsste; eine für `code-writer` verpflichtende Referenzdatei vermeidet kontextlosen Code. Dieselbe Framing-Logik wie bei den in [[shihipar-claude-code-lessons-building-skills-2026-06-03]] beschriebenen Skills.
- ⚠️ **Die Schlüsselzahl beruht auf Eigenangaben und ist so, wie angegeben, nicht reproduzierbar**: ein Durchschnitt über vier Szenarien an einem Java-Monorepo, ohne Protokoll, ohne absolute Volumina, ohne Vergleich mit einem primären Modell, das mit gezielten Lesevorgängen eingesetzt wird. Der Autor räumt ein, dass das Szenario `code-write` schwerer zu messen ist, und die Kosten des sekundären Modells werden nicht abgezogen.
- **Die drei genannten Einschränkungen stecken den Rahmen ab**: kein delegiertes Editieren (Zeilennummern in Zusammenfassungen unzuverlässig), kein delegiertes Reasoning (Debugging, Architekturentscheidungen und kritischer Code explizit vom Routing ausgeschlossen), 10 bis 30 s Latenz pro Hin- und Rückweg, mit einer 30-s-Obergrenze von Portal, die große Generierungen zur Aufteilung zwingt.
- **Die operative Schlussfolgerung betrifft die Modes, nicht das Plugin**: über Projekte hinweg wiederverwendbar, teilbar (beide Modes sind öffentlich), komponierbar (`doc-writer`, `reviewer`, `translator` als mögliche Erweiterungen genannt) und vom Routing entkoppelt — ein Wechsel des Arbeitsmodells ändert das Plugin nicht. Diese Trennung von Packaging und Ausführung ist dieselbe, die von [[google-agent-plugins-packaging-skills-mcp-2026-08-06]] formalisiert wird.
- **Installation**: `claude plugin marketplace add spotify/portal-ai-plugins`, danach die Plugins `portal` (die CLI) und `shunt` (Routing), anschließend `/portal:setup` zur Authentifizierung gegenüber einer Portal-Instanz. Das Setup setzt somit eine Portal-Instanz mit aktiviertem AiKA-Plugin voraus — es ist außerhalb einer Organisation, die eine solche betreibt, nicht unverändert übertragbar.
- **Die rahmengebenden Zahlen stammen von außerhalb des Beitrags und sind ohne Quellenangabe**: KI-Coding-Kosten, die bis 2028 das durchschnittliche Entwicklergehalt übersteigen, ein Viertel der Engineering-Führungskräfte bei 200–500 $ pro Entwickler und Monat, einige über 2.000 $. Als Größenordnung zu behandeln, es lohnt sich der Vergleich mit den teambezogenen Messungen in [[patel-block-buzz-teams-tokens-benchmarks-2026-08-06]].

## RésuméDe400mots

Dimitri Mazmanov, Principal Product Manager bei Spotify, veröffentlichte am 3. September 2026 im Engineering-Blog des Unternehmens einen Bericht über ein Setup, das seinen Token-Verbrauch in Claude Code angeblich um 90 % senkt. Seine Ausgangsbeobachtung: Das meiste, was ein Coding-Agent für ihn erledigt, ist kein Reasoning, sondern I/O — fünf Dateien lesen, um eine Frage zu einer Methode zu beantworten, eine Testdatei erzeugen, die mit den zwanzig benachbarten identisch ist. Diese Arbeit geht an ein überqualifiziertes Frontier-Modell, obwohl ein günstiges Modell sie ebenso gut erledigen würde.

Die Lösung stützt sich auf die AiKA Modes von Portal by Spotify: deklarative Agenten, die auf einer ephemeren Laufzeitumgebung laufen, definiert durch Instruktionen, ein Modell, Parameter und MCP-Tools, ohne Infrastruktur oder zu verwaltende API-Schlüssel. Der Autor erstellt zwei öffentliche Modes, die auf Gemini 2.5 Flash laufen. Der erste, bulk-reader, liest einen Stapel von Dateien und antwortet in strukturierten Aufzählungspunkten. Der zweite, code-writer, erzeugt Code aus einer Spezifikation und einer Referenzdatei, deren Konventionen er reproduzieren muss.

Das Routing übernimmt ein Claude-Code-Plugin namens shunt, nach dem Scheitern einer ersten Version, die auf in CLAUDE.md geschriebenen Regeln beruhte, die das Modell ignorieren konnte und die in jedes Projekt kopiert werden mussten. Das Plugin stapelt drei Schichten. PreToolUse-Hooks blockieren Dateilesevorgänge jenseits eines konfigurierbaren Zeilenschwellenwerts sowie cat-, head- oder tail-Befehle auf großen Dateien; gezielte Lesevorgänge werden durchgelassen. Bash-Skripte umschließen Aufrufe der Portal-CLI, bauen die Anfrage auf und melden die Token-Nutzung zurück. Skill-Dateien teilen Claude mit, wann und wie diese Skripte aufzurufen sind. Der Korpus wandert zum sekundären Modell, ohne je in Claudes Kontext zu gelangen, der auch den erzeugten, direkt auf die Festplatte geschriebenen Code nie sieht.

Die Messungen werden als durchschnittliche Einsparung von etwa 90 % über vier an einem Java-Monorepo getestete Szenarien dargestellt, wobei der Autor einräumt, dass das Generierungsszenario schwer zu messen ist. Ein Abschnitt beschreibt im Detail, was nicht funktioniert: Editieren ist mangels verlässlicher Zeilennummern nicht delegierbar, Reasoning ebenso wenig — das sekundäre Modell übersah einen Thread-Safety-Bug, den Claude sofort erkannte —, und jede Delegation kostet zehn bis dreißig Sekunden Latenz, was sie bei kleinen Dateien kontraproduktiv macht.

Der Autor kommt zu dem Schluss, dass die Token-Einsparung nur ein Ausgangspunkt ist: Der eigentliche Wert der Modes liegt darin, Modell-Routing zu einem Konfigurationsproblem statt zu einem Systementwicklungsproblem zu machen.

## GrapheDeConnaissance

- Dimitri Mazmanov —travaille_chez→ Spotify (ORGANISATION, 0.97)
- Dimitri Mazmanov —a_créé→ shunt (TECHNOLOGIE, 0.95)
- Dimitri Mazmanov —affirme_que→ "Most of what an AI coding agent does for me isn't thinking. It's I/O" (CITATION, 0.96)
- Dimitri Mazmanov —affirme_que→ les coûts de codage IA dépasseront le salaire moyen d'un développeur d'ici 2028 (AFFIRMATION, 0.85)
- Dimitri Mazmanov —mesure→ un quart des responsables d'ingénierie dépensent 200-500 $ par développeur et par mois en tokens (MESURE, 0.82)
- Spotify —a_créé→ Portal by Spotify (TECHNOLOGIE, 0.95)
- Portal by Spotify —permet→ AiKA Modes (TECHNOLOGIE, 0.95)
- AiKA Modes —est_instance_de→ agent déclaratif sur runtime éphémère (CONCEPT, 0.92)
- AiKA Modes —utilise→ MCP (TECHNOLOGIE, 0.9)
- AiKA Modes —permet→ routage de modèles (CONCEPT, 0.93)
- routage de modèles —réduit→ consommation de tokens du modèle principal (CONCEPT, 0.92)
- shunt —fait_partie_de→ Claude Code (TECHNOLOGIE, 0.94)
- shunt —utilise→ Portal by Spotify (TECHNOLOGIE, 0.94)
- shunt —utilise→ hooks (TECHNOLOGIE, 0.95)
- shunt —remplace→ règles de routage écrites dans CLAUDE.md (CONCEPT, 0.93)
- Dimitri Mazmanov —affirme_que→ "The rules were advisory, not enforced" (CITATION, 0.93)
- hooks —permet→ blocage des lectures au-delà de 350 lignes par défaut (AFFIRMATION, 0.93)
- bulk-reader —est_instance_de→ AiKA Modes (TECHNOLOGIE, 0.94)
- code-writer —est_instance_de→ AiKA Modes (TECHNOLOGIE, 0.94)
- bulk-reader —utilise→ Gemini 2.5 Flash (TECHNOLOGIE, 0.93)
- code-writer —utilise→ Gemini 2.5 Flash (TECHNOLOGIE, 0.93)
- shunt —mesure→ économie moyenne de ~90 % de tokens sur le scénario bulk-read, monorepo Java, quatre scénarios (MESURE, 0.85)
- shunt —réduit→ occupation de la fenêtre de contexte du modèle principal (CONCEPT, 0.91)
- Dimitri Mazmanov —affirme_que→ le gain sur le scénario code-write est difficile à mesurer en tokens (AFFIRMATION, 0.9)
- routage de modèles —s_oppose_à→ délégation de l'édition de code et du raisonnement (AFFIRMATION, 0.9)
- Gemini 2.5 Flash —s_oppose_à→ détection d'un bug de thread-safety trouvé par Claude Code (AFFIRMATION, 0.86)
- shunt —mesure→ latence de 10 à 30 secondes par délégation, plafond Portal de 30 secondes (MESURE, 0.91)
- Dimitri Mazmanov —recommande→ exclure du routage le débogage, les décisions d'architecture et le code critique (AFFIRMATION, 0.93)
- Dimitri Mazmanov —affirme_que→ "They turn model routing from a systems engineering problem into a configuration problem" (CITATION, 0.93)
- spotify/portal-ai-plugins —publie→ shunt (TECHNOLOGIE, 0.92)

---
Canonical: https://www.thekb.eu/de/fiches/mazmanov-portal-spotify-shunt-claude-code-tokens-2026-09-03/
