PTENES
macOS · Linux · WSL · Claude Code & Codex

Sube la marcha, el modelo cambia

Panel de Modelo y Esfuerzo

Model & Effort Panel Panel de Modelo y Esfuerzo

StickShift es un panel de barra de menú en macOS con un patrón H de cambios real: mueve la palanca para cambiar el modelo de Claude Code o Codex en el panel de terminal que estás viendo, arrastra el acelerador para cambiar el nivel de esfuerzo. Todo se comprueba antes de actuar — o se niega con un motivo; nunca escribe a ciegas.

Panel de StickShift: compuerta H-pattern, consola LCD y palanca de esfuerzo
Qué es

Una caja de cambios real para tu agente de código

Nada de editar la configuración a mano ni memorizar comandos: StickShift lee el panel mediante la Accessibility API de macOS, comprueba que sea un agente local inactivo y escribe exactamente lo que tú escribirías — /model, /effort, o las teclas del selector de Codex.

🔒 Fail-closed de verdad

Nunca edita archivos de configuración, nunca llama a la API de un proveedor ni usa automatización de terminal. Solo escribe después de comprobar que el panel está inactivo, que el proceso local es el correcto y que el binario está firmado y calificado — cualquier comprobación que falle se convierte en una negativa con un código de motivo.

🎛️ Un panel para cada proveedor

Cara de Claude (throttle hasta ULTRACODE) y cara de Codex (throttle hasta ULTRA), con las etiquetas exactas de cada proveedor y atajos globales (Cmd+Shift+1..5, Cmd+Shift+R) que cambian la marcha sin siquiera abrir el panel.

🖥️ App + CLI

bin/shift hace una simulación por defecto (no escribe nada); --commit se ejecuta de verdad. shift doctor diagnostica permisos, configuración y asignación del panel enfocado con un solo comando.

Cómo funciona

Anatomía de un cambio

Entre cambiar la marcha y el toast CHANGED, el motor pasa por una cadena de comprobaciones — cualquier eslabón que falle interrumpe el cambio y devuelve un código de motivo en vez de una pulsación de tecla.

1. Read→ 2. Classify→ 3. Attribute→ 4. Qualify→ 5. Plan→ 6. Precheck→ 7. Inject→ 8. Watch/Verify→ 9. Report

Leer + clasificar

El panel enfocado se lee mediante Accessibility API; un clasificador puro extrae el agente, el modelo, el effort, el cwd y si está inactivo/ocupado/con un diálogo abierto, con el composer comprobablemente vacío.

Atribuir + calificar

El panel se vincula a un proceso local (tty → grupo en primer plano → cwd), y se comprueban la firma, el team y la versión del binario atribuido frente al manifiesto.

Inyectar + verificar

Escribe con keycodes resueltos según la distribución actual del teclado y comprueba la entrega mediante el delta de ocurrencias antes de cualquier Enter. Solo informa que tuvo éxito con un veredicto confirmado al final del panel.

Requisitos previos

Antes de instalar

La ruta automática (setup.sh) cubre casi todo; esto es lo que debe existir antes en la máquina.

macOS + Xcode CLT

Necesita clang para compilar.

# instala las command line tools si faltan
xcode-select --install

Terminal compatible

Warp es el predeterminado verificado de punta a punta. Terminal.app ya pasó las dos pruebas más difíciles; otros terminales califican en 4 pasos.

# califica una terminal nueva
./scripts/qualify-terminal.sh "iTerm"

Accessibility

StickShift solicita el permiso por sí solo en el primer lanzamiento; solo tienes que concederlo en System Settings cuando aparezca el diálogo.

# confirma lo que está concedido
./bin/shift doctor
Guía de uso · paso a paso

Instalar y cambiar tu primera marcha

El script es idempotente: puedes volver a ejecutarlo sin miedo si algo falla a mitad del proceso.

1

Clona y ejecuta la configuración

Verifica los requisitos previos, crea una identidad de firma estable, compila, ejecuta toda la suite de pruebas, instala en ~/Applications/StickShift.app y ya abre la app.

git clone https://github.com/inematds/stickshift && cd stickshift  # descarga el repo
./scripts/setup.sh  # idempotente, instala todo
2

Concede acceso a Accessibility y vuelve a abrir la app una vez

Activa StickShift en System Settings → Privacy & Security → Accessibility. Después sal y vuelve a abrir la app (clic derecho en el gear del menú → Quit → vuelve a abrir) — el permiso solo se aplica al proceso después de reiniciarlo; este es el problema de soporte nº 1.

3

Enfoca un panel con Claude Code o Codex y cambia la marcha

Haz clic en el panel de la terminal donde se está ejecutando el agente y arrastra la palanca hasta una marcha (o actívala desde la CLI a partir de otro panel — la CLI rechaza el propio panel como SELF_TARGET).

./bin/shift 4          # simulación: muestra el plan, no escribe nada
./bin/shift 4 --commit # ejecuta de verdad
4

Revisa el registro

CHANGED significa que funcionó; cualquier otro código es un rechazo explicado — cada intento queda registrado con el motivo, nunca con el contenido del panel.

tail -5 ~/.stickshift/log
5

O sáltate la lectura: deja que el propio agente lo instale

Indícale a Claude Code, Codex o cualquier agente de código que use este repo y dile "configurar StickShift en esta Mac". O AGENTS.md del repo es el playbook operativo completo: instalación, adaptación a terminal y versión del agente, y depuración de rechazos por código de motivo.

🧩 Cualquier modelo

Modelo nuevo sin recompilar

La versión publicada solo conocía Opus 4.8, Fable 5 y la familia gpt-5.x. En la rama catalogo-modelos, los modelos se convierten en datos: un catálogo único indica qué modelos existen, cómo aparece cada uno en pantalla y qué niveles de esfuerzo acepta. Los niveles estándar ya incluyen Opus 5.5 y la familia GPT-6.

⚠️ Aún no compilado ni probado en una Mac

El código se escribió en un servidor Linux, sin el compilador de Apple. Los nombres de los modelos se obtuvieron de los programas instalados (Claude Code 2.1.282 y Codex 0.156.1) y fueron verificados en la pantalla real vía tmux en Linux, que es la misma interfaz de macOS. En esta revisión aparecieron dos cambios de Codex, ya corregidos en la rama: el pie de página muestra "GPT-6-Astra" con mayúsculas, y Max/Ultra ahora están en un submenú "More reasoning…". Puntos para revisar en Mac: la lista de textos fantasma del campo de Codex todavía es de la versión 0.144.1 (si rechaza con DRAFT_PRESENT, basta con volver a extraer) y el modelo de Claude se lee de una línea de estado 📂 pasta · Modelo, que parece provenir de una statusline personalizada. Antes de usarlo, en una Mac: git checkout catalogo-modelos, make test, make matrix, stickshift doctor e stickshift status en un panel con cada agente. Solo después de eso la rama entra en el main.

MarchaClaude CodeCodex
1Haiku 4.5gpt-6-luna · medium
2Sonnet 5gpt-6-sol · medium
3Opus 5.5 · mediumgpt-6-astra · medium
4Opus 5.5 · highgpt-6-astra · high
5Opus 5.5 · xhighgpt-6-astra · xhigh
ROpus 5.5 · lowgpt-6-sol · low
ULTRAOpus 5.5 · ultracodegpt-6-astra · ultra

La escalera sigue la referencia de esfuerzo: medium como nivel de trabajo, high cuando necesites más razonamiento y xhigh para los casos difíciles. max queda fuera de los niveles estándar, pero sigue disponible mediante el acelerador o la reasignación de teclas.

1 · Enseña el modelo nuevo

No ~/.stickshift/config.toml, una línea por modelo:

claude_model.opus = "Opus 5.6"
codex_model.gpt-7-nova = "low medium high xhigh max"
gear.3.claude = "opus medium"

En Claude, la clave es el argumento de /model y el valor es el nombre de la línea de estado. En Codex, la clave es el nombre en el selector y el valor es la lista de esfuerzos que acepta el modelo.

2 · Comprueba antes de cambiar

stickshift status en un panel con el modelo nuevo debe mostrar el mismo nombre. Después, stickshift 3 sin --commit imprime el plan sin escribir nada; solo entonces usa --commit.

La comparación de nombres acepta decoraciones ("Opus 5.5 (1M context)" cuenta como Opus 5.5), pero nunca confunde versiones: "Opus 5" no es "Opus 5.5". En Codex, cada modelo solo acepta sus propios niveles de esfuerzo; ultra en luna se rechaza.

🐧 Linux y Windows (WSL)

StickShift v2: panel web + chat en Linux

En Linux y en Windows mediante WSL, StickShift v2 le pide al propio terminal (tmux) que lea la pantalla y escriba, sin la Accesibilidad de macOS ni una app nativa. Cambia el modelo y el nivel de esfuerzo de Claude Code y Codex desde la línea de comandos o mediante un panel web con el mismo cambio, y tiene un chat nivel 1 que envía prompts al agente del panel elegido. Usa solo Python 3, sin instalar nada. Validado en vivo el 24/09/2026 con Claude Code 2.1.282 y Codex 0.156.1.

Panel web de StickShift v2: terminales con agente a la izquierda, caja de cambios en el centro y chat a la derecha

1 · Instala y enumera

Clona el repositorio y agrega el lanzador al PATH. El list muestra los paneles tmux con Claude Code o Codex y el estado de cada uno.

ln -s "$PWD/v2/bin/stickshift2" \
  ~/.local/bin/stickshift2
stickshift2 list

2 · Cambia desde la línea de comandos

Sin --commit, es solo una simulación y muestra el plan. Con --commit, escribe y confirma mediante el mensaje del propio agente.

stickshift2 shift 4 --pane %3
stickshift2 shift 4 --pane %3 --commit
stickshift2 keys   # atajos de tmux

3 · Abre el panel web

Se abre en 127.0.0.1 con un token. A la izquierda, los terminales; en el centro, el cambio; a la derecha, el chat con el agente.

stickshift2 web
# abre la dirección con ?t=… impreso

🔒 Garantías

El agente se identifica mediante proceso que se ejecuta en el panel, no por el texto. Solo escribe cuando el agente está inactivo y el campo está vacío; la sugerencia gris de Claude no cuenta como borrador. El cambio se confirma con el mensaje del agente ("Set model to …", "Model changed to …"). El panel web exige un token en cada llamada, verifica Host e Origin y registra todo en ~/.stickshift/v2.log.

💬 Chat nivel 1

Solo prompts: mensajes que empiezan con /, ! o # se rechazan, al igual que los saltos de línea. Las tareas del sistema pasan por el agente y sus permisos. Si el agente pide permiso, el chat te avisa y la decisión queda en el terminal; aprobar desde el chat será la v3.

⚠️ Bueno saberlo

Cada cambio también se convierte en la configuración predeterminada del agente para las sesiones nuevas, como escribir /model a mano. opus e opus[1m] son modelos diferentes (200K y 1M de contexto); los niveles usan opus[1m]. O Windows nativo (backend WezTerm) es la fase 5 del plan y todavía no existe. Por ahora, en Windows, usa WSL con tmux. Código y README de la v2 → · plan →

Ejemplos

Los diagramas que usa el propio proyecto

Directo desde docs/: la anatomía de un cambio y el mapa del código fuente, tal como aparecen en el README.

Diagrama del pipeline: Read → Classify → Attribute → Qualify → Plan → Precheck → Inject → Watch/Verify → Report
Anatomía de un cambio — las 9 etapas entre cambiar la marcha y el toast CHANGED.
Diagrama de arquitectura del código fuente de StickShift
Mapa de arquitectura — engine en src/core, app shell en src/app, CLI en src/cli.
Hoja de ruta

Dónde está y hacia dónde va

Tal como lo documenta el README actual.

Hoy
Warp verificado de punta a puntaTerminal.app con lectura e inserción verificadas; iTerm2 aún no está calificado. Solo Warp está habilitado de forma predeterminada.
Siguiente
Más terminales + identidad de panel más sólidaCalificar iTerm2 y otros mediante scripts/qualify-terminal.sh; reducir la ambigüedad que hoy depende del título de la ventana + la geometría + el cwd.
Distribución
Developer ID + notarizaciónLa identidad autofirmada resuelve localmente el problema del TCC; distribuirlo más allá de la propia máquina requiere un Developer ID de pago.
Modelos
Catálogo de modelos (branch catalogo-modelos)Opus 5.5 y GPT-6 en las marchas predeterminadas; modelo nuevo mediante config.toml; falta compilar y probar en una Mac antes del merge.
v2 ✓
Linux y WSL con panel web + chat de nivel 1 (listo)Núcleo en Python, tmux, panel web con token y chat, validados en vivo el 24/09/2026. Falta la fase 5: WezTerm para Windows nativo.
v3
Chat con permisosAprueba o rechaza por chat las solicitudes de permiso del agente. Desactivado de forma predeterminada; solo en diálogos reconocidos, con un registro de quién aprobó qué.