ui.render cada vez que está a punto de dibujar un punto de renderizado, y tu hook para ese evento devuelve lo que se debe dibujar allí.
Este mapa muestra dónde puede dibujar un mod en una sesión de terminal:
Para consultar una prop o un límite específico, consulta la referencia.
Crea un panel con pestañas
En esta sección creas un mod que agrega un comando/hello-tabs, y el comando abre un panel. Un panel es una barra lateral junto a la transcripción en una terminal de pantalla completa ancha, o una región enmarcada sobre el prompt en otros casos. Este panel muestra dos pestañas, y la segunda pestaña tiene un botón que suma uno a un contador. El conteo sigue ahí después de reiniciar Claude Code.
El mod terminado se ve así. La grabación abre el panel, cambia a la segunda pestaña, presiona el botón algunas veces y vuelve a la primera pestaña:
1
Crea el plugin
Un mod es un plugin con un manifiesto, un Indica tu punto de entrada en
hooks.json que apunta a tu código y el archivo de código. Crear un mod explica cada uno. Crea un directorio llamado hello-tabs con los directorios .claude-plugin y hooks dentro, y luego guarda los dos primeros archivos.Guarda el manifiesto como hello-tabs/.claude-plugin/plugin.json:hello-tabs/.claude-plugin/plugin.json
hello-tabs/hooks/hooks.json:hello-tabs/hooks/hooks.json
2
Escribe el código
Esta lista indica qué hace cada hook, en el orden en que aparecen en el código:Cada hook también hace algo que el código no deja claro:
- Agrega el comando
/hello-tabsy carga el conteo que guardó una sesión anterior - Abre el panel cuando ejecutas ese comando
- Dibuja el contenido del panel: la fila de pestañas y el cuerpo de la pestaña abierta
tab y count, contienen el estado del panel.Guarda esto como hello-tabs/hooks/register.js:hello-tabs/hooks/register.js
session.starttambién lee el conteo guardado desde$.store, un almacén de clave-valor que persiste entre sesiones.command.runsolo le indica a Claude Code que el panel existe. Abrir un panel no dibuja nada por sí solo: Claude Code luego disparaui.renderpara preguntar qué va dentro.ui.renderdevuelve el árbol de elementos, unBoxque contiene otras cajas, texto y botones, y lo vuelve a construir a partir detabycountcada vez que se ejecuta.
onPress, que cambia una variable y llama a redraw. Claude Code luego vuelve a ejecutar el hook ui.render, y el hook construye un árbol nuevo a partir de los valores nuevos. Todo dibujo interactivo usa ese ciclo de renderizado: un callback cambia el estado y el hook vuelve a renderizar a partir del nuevo estado.3
Abre el panel
En tu shell, inicia Claude Code con
claude --plugin-dir ./hello-tabs. En el prompt de Claude Code, ejecuta /hello-tabs. Se abre un panel con 1: One y 2: Two en la parte superior. Presiona 2 y luego presiona a, la tecla de acceso rápido de Add one, algunas veces. El conteo sube.4
Comprueba que el conteo se guardó
Presiona Esc para cerrar el panel y luego sal de la sesión. En tu shell, vuelve a iniciar Claude Code con el mismo comando
claude --plugin-dir ./hello-tabs y, en el prompt de Claude Code, ejecuta /hello-tabs. El conteo está donde lo dejaste.Para borrar el conteo, haz que el mod llame a $.store.delete('count'). Conservar el estado explica cuánto dura cada tipo de valor.Elige dónde dibujar
Un hookui.render se ejecuta para cada punto de renderizado, a menos que lo restrinjas al punto en el que quieres dibujar. Para elegir el punto de renderizado, pasa un filtro, llamado matcher, como segundo argumento de on. { component: 'Pane' } ejecuta el hook solo para paneles. En el hook, e.component indica el punto, e.surface indica qué aplicación está dibujando y e.props contiene los datos propios del punto. Para un panel, e.requestId es el id con el que lo abriste.
El panel y la franja están vacíos hasta que un mod los llena. Selecciona una pestaña para ver qué es cada uno y cómo dibujar en él:
- Panel
- Franja encima del prompt
Un panel es una barra lateral junto a la transcripción en una terminal de pantalla completa ancha o, en caso contrario, una región enmarcada encima del prompt. Con varios paneles abiertos, cada uno tiene una pestaña que muestra su título.Un panel aparece cuando tu mod llama a
$.ui.open con un id que eliges, como en $.ui.open({ id: 'hello-tabs' }). Abre un panel en el momento adecuado describe los demás campos y cuándo un panel espera a que la terminal sea más ancha.Para dibujar en tu panel, filtra por { component: 'Pane' } y comprueba que e.requestId sea tu id.Cambia lo que Claude Code ya dibuja
Claude Code dibuja por sí mismo la mayor parte de su interfaz: mensajes, filas de llamadas a herramientas, el spinner y más. Cada una de esas partes también es un punto de renderizado, así que un mod puede cambiar su estilo o reemplazarla. Para cambiar una, filtra tu hookui.render por su nombre de esta tabla:
Pane, AskUserQuestion, Spinner, UserMessage, AssistantMessage y los puntos de llamadas a herramientas funcionan en la terminal, la aplicación Desktop y la extensión de VS Code. La tabla de puntos de renderizado indica dónde se genera cada uno de los demás.
En un punto que Claude Code ya dibuja, tu hook puede cambiar un detalle, reemplazar el dibujo o dejarlo como está. Selecciona una pestaña para ver cada opción aplicada al spinner. Los ejemplos leen una variable calls que otro hook cuenta, como en el mod del tutorial.
- Cambiar un detalle
- Reemplazar el dibujo
- Dejarlo como está
Para conservar el dibujo de Claude Code y cambiar una parte, pasa a
next una copia del evento con las props modificadas. Este hook cambia el texto que sigue a la palabra del spinner: