TL;DR Un nivel por modelo. Corre
/efforten cada modelo que uses y confirma con Enter: se guarda enmodelSettings.<modelo>.effortLevely esa entrada gana aleffortLevelglobal del mismo archivo.slo deja en esta sesión y/effort autoborra el del modelo activo.
Si usas más de un modelo, llevas tiempo moviendo dos mandos. Primero /model, luego /effort, porque el nivel de razonamiento que quieres en el modelo que investiga una hora no es el que quieres en el que te renombra tres variables. Desde la v2.1.251 el segundo mando viaja pegado al primero: Claude Code guarda el nivel por modelo, así que lo pones una vez en cada uno y cambiar de modelo ya te trae el nivel que le corresponde.
Mismo archivo de settings, dos modelos, dos niveles:
$ claude --model sonnet --settings '{"effortLevel":"high","modelSettings":{
"claude-sonnet-5":{"effortLevel":"low"},
"claude-opus-5":{"effortLevel":"xhigh"}}}' -p "/whicheffort"
EFFORT=low
$ claude --model opus (el mismo --settings)
EFFORT=xhigh
Ni toqué /effort ni cambié el archivo entre las dos líneas. Cambié de modelo. (/whicheffort es la skill de seis líneas del tip de la precedencia: sigue siendo la única forma de leer el nivel real desde un script.)
Dónde se guarda el nivel
Abre tu configuración de usuario y mira las dos claves que deciden esto:
$ jq '{effortLevel, modelSettings}' ~/.claude/settings.json
{
"effortLevel": "high",
"modelSettings": {
"claude-opus-5": { "effortLevel": "high" },
"claude-fable-5": { "effortLevel": "high" },
"claude-fable-5-1": { "effortLevel": "high" }
}
}
El effortLevel de arriba lo escribí yo hace meses. Las tres entradas de abajo no: las ha ido escribiendo /effort solo, cada vez que confirmaba un nivel con Enter estando en un modelo distinto. Y como las tres dicen lo mismo que la clave global, llevo meses con un único nivel de razonamiento para tres modelos que uso para cosas que no se parecen. Escribir este tip es lo que me ha hecho abrir el archivo.
Dos detalles que importan al leerlo:
- La entrada del modelo gana a la clave global dentro del mismo archivo. Es lo que prueba la primera línea de la prueba de arriba:
effortLevel: "high"y aun asíEFFORT=low, porqueclaude-sonnet-5teníalow. - Se guarda con el nombre canónico (
claude-opus-5) y aplica igual cuando arrancas con el alias: esa prueba salió de un--model sonnetcontra una entradaclaude-sonnet-5.
Y una cosa que no cambia: una entrada de otro modelo no te toca nada. Con claude-opus-5 en xhigh y corriendo Sonnet, sigues en lo que diga Sonnet.
Cómo dejarlo puesto
1. Mira en qué nivel estás ahora
/effort sin argumentos te lo dice para el modelo que tienes puesto. Si hay algo guardado, Current effort level: high. Si no hay nada, Effort level: auto (currently high), que es el default del modelo.
2. Guarda el nivel de ese modelo
/effort medium
Claude Code responde Set effort level to medium (saved as your default for new sessions) y escribe la entrada. El slider de /effort (y el de /model, con las flechas) hace lo mismo al confirmar con Enter. Si solo lo quieres para esta sesión, pulsa s en el slider: la respuesta cambia a (this session only) y no se guarda nada. Es el mismo reparto Enter / s que /model tiene para el modelo.
Un caso aparte: en Fable 5, Opus 4.8 y Opus 4.7, el modelo impone su propio default hasta que confirmas un nivel a mano. Confirmar con Enter (o teclear /effort <nivel>) lo libera; arrancar con --effort no. Opus 5 y Fable 5.1 no tienen esa retención.
3. Repite en el siguiente modelo
/model para cambiar, /effort <nivel> para fijarlo ahí. Cuál merece cuál es la conversación de Sonnet 5, Opus 5 y Fable: el que delega y verifica aguanta un nivel bajo mucho mejor que el que investiga solo.
4. Si te arrepientes
/effort auto
Borra lo guardado del modelo activo y lo devuelve a su default. No toca las entradas de los otros modelos ni la clave global.
Referencia
| Cómo lo pones | Alcance | Qué deja escrito |
|---|---|---|
/effort <nivel> o Enter en el slider |
Ese modelo, también en sesiones nuevas | modelSettings.<modelo>.effortLevel |
s en el slider de /effort o /model |
Solo esta sesión | Nada |
/effort max |
Solo esta sesión | Nada, max no se acepta en settings |
/effort auto |
Vuelve al default de ese modelo | Quita esa entrada |
effortLevel a mano en settings |
Los modelos sin entrada propia | Lo que escribas |
--effort al lanzar |
Solo esa sesión | Nada |
CLAUDE_CODE_EFFORT_LEVEL |
La sesión, y pisa todo lo de arriba | Nada |
El tope por modelo: maxEffortLevel
Dentro de la entrada del modelo cabe otra cosa: maxEffortLevel. Recorta cualquier nivel que pidas por encima, incluido el flag con el que arrancas.
$ claude --model sonnet --effort xhigh \
--settings '{"modelSettings":{"claude-sonnet-5":{"maxEffortLevel":"low"}}}' \
-p "/whicheffort"
Effort 'xhigh' exceeds the cap for claude-sonnet-5 set by your settings or organization; using 'low'
EFFORT=low
El aviso es la excepción: el effort en settings falla callado cuando escribes un nivel que no existe, y este tope es el único que te dice que ha recortado lo que pediste.
El modelo de tus subagentes
Tus subagentes no heredan tu nivel por defecto. Corren en el modelo que Claude les pase al invocarlos, o en el de su definición, y solo si nada de eso aplica heredan el de tu conversación. CLAUDE_CODE_SUBAGENT_MODEL entra por detrás de los dos primeros: desde la v2.1.251 es un valor por defecto, no una imposición. Si quieres que gane a todo, acompáñala:
{
"env": {
"CLAUDE_CODE_SUBAGENT_MODEL": "haiku",
"CLAUDE_CODE_SUBAGENT_MODEL_FORCE": "1"
}
}
Y el sitio donde compruebas que se aplicó es el panel /tasks. La fila de cada subagente lleva el modelo en el que corre, y le añade el nivel de effort cuando su definición, o la skill de la que salió, trae effort en el frontmatter. La fila, tal como sale en el panel:
craft:review › Adversarial review of cache-marker patch
9m 21s · 118.4k tokens · 45 tools · Opus 5 (1M context)
Queda un motivo viejo para no tocar el mando a mitad de tarea: cambiar el effort rompía la caché y la siguiente petición releía la conversación entera. En Fable 5.1 con API key o suscripción ya no, desde la v2.1.260: Claude Code aplica el nivel nuevo sin preguntarte. En los demás modelos sigue preguntando antes de romperla, y por eso conviene que el nivel esté puesto de antes.
Documentación oficial: Model configuration: adjust effort level ·
modelSettings· Sub-agents: choose a model
Requisitos
- Comprobado en Claude Code v2.1.269. Lo ejecutado son las pruebas con
--settingsde este tip, incluido el aviso del tope. Las respuestas de/effort,sy/effort autoson las cadenas exactas del binario de la v2.1.269, no una sesión interactiva capturada, y la fila de/taskssale del propio panel. modelSettingsnecesita la v2.1.251, la teclasdel slider la v2.1.257, elmaxEffortLevelpor modelo la v2.1.267 y el modelo en la fila de/tasksla v2.1.242.- Guardar el nivel con Enter es cosa de una sesión interactiva en tu máquina: con
-p,/effortsolo vale para esa sesión y no escribe nada.