Portal by Spotify cut my Claude Code token usage by 90%
Post de ingeniería de Spotify publicado el 3 de septiembre de 2026 en engineering.atspotify.com (~1.600 palabras, nueve secciones, dos manifiestos YAML, cuatro ejemplos de línea de comandos), escrito por Dimitri Mazmanov, Principal Product Manager.
Dimitri Mazmanov, Principal Product Manager en Spotify, publicó el 3 de septiembre de 2026 en el blog de ingeniería de la empresa un relato de una configuración que, según sus datos, reduce en un 90% su consumo de tokens en Claude Code. Su observación de partida: la mayor parte de lo que un agente de codificación hace por él no es razonamiento sino E/S — leer cinco archivos para responder a una pregunta sobre un método, generar un archivo de prueba idéntico a los veinte vecinos. Este trabajo se envía a un modelo de frontera sobrecualificado, cuando un modelo barato lo gestionaría igual de bien.
La solución se basa en los AiKA Modes de Portal by Spotify: agentes declarativos ejecutados en un runtime efímero, definidos por instrucciones, un modelo, parámetros y herramientas MCP, sin infraestructura ni claves de API que gestionar. El autor crea dos modos públicos que se ejecutan sobre Gemini 2.5 Flash. El primero, bulk-reader, lee un lote de archivos y responde en viñetas estructuradas. El segundo, code-writer, genera código a partir de una especificación y un archivo de referencia cuyas convenciones debe reproducir.
Most of what an AI coding agent does for me isn't thinking. It's I/O
— Dimitri Mazmanov , engineering.atspotify.com
El enrutamiento lo gestiona un plugin de Claude Code llamado shunt, tras el fracaso de una primera versión basada en reglas escritas en CLAUDE.md, que el modelo podía ignorar y que había que copiar en cada proyecto. El plugin apila tres capas. Los hooks PreToolUse bloquean las lecturas de archivos más allá de un umbral de líneas configurable, así como los comandos cat, head o tail sobre archivos grandes; las lecturas puntuales pasan sin problema. Los scripts bash envuelven las llamadas a la CLI de Portal, construyen la solicitud y reportan el uso de tokens. Los archivos de skill indican a Claude cuándo y cómo llamar a estos scripts. El corpus se traslada al modelo secundario sin entrar nunca en el contexto de Claude, que tampoco ve nunca el código generado, escrito directamente en disco.
Las mediciones se presentan como un ahorro medio de alrededor del 90% en cuatro escenarios probados contra un monorepo Java, y el autor reconoce que el escenario de generación es difícil de medir. Una sección detalla lo que no funciona: la edición no es delegable por falta de números de línea fiables, tampoco lo es el razonamiento — el modelo secundario pasó por alto un error de thread-safety que Claude detectó de inmediato —, y cada delegación cuesta de diez a treinta segundos de latencia, lo que la hace contraproducente en archivos pequeños.
El autor concluye que el ahorro de tokens es solo un punto de partida: el valor real de los modos es convertir el enrutamiento de modelos en un problema de configuración en lugar de uno de ingeniería de sistemas.
Puntos clave
La intuición de partida es el reparto de carga, no la optimización de prompts. Leer archivos y generar código repetitivo consume tokens sin requerir razonamiento; estas tareas van a un modelo barato, mientras que el modelo principal conserva los problemas que exigen juicio.
Lo que se ahorra no es solo el precio, es la ocupación del contexto. El corpus que se lee se envía al modelo secundario y nunca entra en la ventana de Claude; una consulta posterior sobre los mismos archivos por tanto no recarga nada del lado principal. Mismo mecanismo que la delegación a subagentes en [[willison-fable-judgement-delegation-subagents-2026-07-03]].
Un modo = un agente declarativo. nombre, descripción, instrucciones, modelo, visibility, resourceLimits, tags. Runtime efímero, nada almacenado en el servidor, ninguna clave de API que gestionar. Resolución por nombre, sin distinción de mayúsculas, con precedencia personal → equipo → público: basta con bifurcar un modo público para sobrescribirlo sin configuración.
Las reglas en CLAUDE.md no se sostuvieron. Primera versión del enrutamiento: un bloque de instrucciones que Claude leía y a veces seguía. Dos fallos señalados — advisory, not enforced, y tener que copiarse en cada proyecto. Este es el argumento que impulsa el paso a hooks, puertas estrictas independientes de la decisión del modelo.
El umbral es el parámetro de ajuste central.check-file-size bloquea las llamadas Read más allá de 350 líneas por defecto; check-bash-read intercepta cat, head, tail, less, more. Las lecturas puntuales (offset/limit) y los comandos encadenados pasan sin problema. Por debajo del umbral, la latencia de delegación cuesta más de lo que ahorra.
La degradación controlada es el punto arquitectónico. Tres capas: el hook bloquea, el script ejecuta, el skill explica. Si Claude ignora el skill, el hook sigue bloqueando — el contrato no se confía al modelo.
Dos instrucciones de modo hacen la mayor parte del trabajo.Output only the code evita los bloques markdown y la prosa que el modelo principal tendría que volver a analizar; un archivo de referencia obligatorio para code-writer evita el código fuera de contexto. Misma lógica de encuadre que los skills descritos en [[shihipar-claude-code-lessons-building-skills-2026-06-03]].
⚠️ La cifra destacada es autodeclarada y no reproducible tal cual se presenta: una media en cuatro escenarios sobre un monorepo Java, sin protocolo, sin volúmenes absolutos, sin comparación con un modelo principal usado con lecturas puntuales. El autor admite que el escenario code-write es más difícil de medir, y el coste del modelo secundario no se resta.
Las tres limitaciones reconocidas delimitan el alcance. sin edición delegada (números de línea de los resúmenes poco fiables), sin razonamiento delegado (depuración, decisiones de arquitectura y código crítico explícitamente excluidos del enrutamiento), 10 a 30 s de latencia por ida y vuelta, con un límite de 30 s en Portal que obliga a dividir las generaciones grandes.
La conclusión operativa trata de los modos, no del plugin. reutilizables entre proyectos, compartibles (ambos modos son públicos), componibles (doc-writer, reviewer, translator citados como posibles extensiones), y desacoplados del enrutamiento — cambiar el modelo de trabajo no cambia el plugin. Esta separación entre empaquetado y ejecución es la formalizada por [[google-agent-plugins-packaging-skills-mcp-2026-08-06]].
Instalación.claude plugin marketplace add spotify/portal-ai-plugins, luego los plugins portal (la CLI) y shunt (enrutamiento), después /portal:setup para la autenticación contra una instancia de Portal. La configuración por tanto presupone una instancia de Portal con el plugin AiKA habilitado — no es trasladable tal cual fuera de una organización que lo ejecute.
Las cifras de contexto proceden de fuera del post y no están referenciadas. costes de IA de codificación que superan el salario medio de un desarrollador en 2028, una cuarta parte de los responsables de ingeniería entre 200 y 500 dólares por desarrollador al mes, algunos por encima de 2.000. Deben tratarse como un orden de magnitud, que vale la pena comparar con las mediciones por equipo de [[patel-block-buzz-teams-tokens-benchmarks-2026-08-06]].
Cifras clave
latencia de 10 a 30 segundos por delegación, límite de Portal de 30 segundos