Skip to main content
Un mod puede dibujar su propia interfaz en Claude Code y cambiar partes de la interfaz que Claude Code ya dibuja. Cada lugar donde un mod puede dibujar se llama punto de renderizado, como un panel, la franja sobre el prompt o el spinner. Claude Code dispara el evento 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: Mapa de una sesión de terminal de Claude Code con renderizado en pantalla completa. Un mod puede agregar un panel como barra lateral a la derecha, una notificación emergente en la parte superior derecha de la transcripción, una línea de registro en la transcripción, una franja sobre el prompt y una línea de estado debajo del prompt. Un mod puede redibujar mensajes, filas de llamadas a herramientas y el spinner. El prompt es propio de Claude Code. Mapa de una sesión de terminal de Claude Code con renderizado en pantalla completa. Un mod puede agregar un panel como barra lateral a la derecha, una notificación emergente en la parte superior derecha de la transcripción, una línea de registro en la transcripción, una franja sobre el prompt y una línea de estado debajo del prompt. Un mod puede redibujar mensajes, filas de llamadas a herramientas y el spinner. El prompt es propio de Claude Code. En una terminal más angosta, el panel se ubica sobre el prompt en lugar de junto a la transcripción. Crea tu primer mod antes de empezar aquí. Comienza con el ejemplo práctico, que crea un panel con dos pestañas y un contador, y luego lee la sección de cada parte que quieras cambiar.
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:
Las pestañas son dos botones en una fila. El mod registra cuál está activa y dibuja el contenido de esa pestaña debajo de la fila.
1

Crea el plugin

Un mod es un plugin con un manifiesto, un 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
Indica tu punto de entrada en 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:
  • Agrega el comando /hello-tabs y 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
Dos variables a nivel de módulo, tab y count, contienen el estado del panel.Guarda esto como hello-tabs/hooks/register.js:
hello-tabs/hooks/register.js
Cada hook también hace algo que el código no deja claro:
  • session.start también lee el conteo guardado desde $.store, un almacén de clave-valor que persiste entre sesiones.
  • command.run solo le indica a Claude Code que el panel existe. Abrir un panel no dibuja nada por sí solo: Claude Code luego dispara ui.render para preguntar qué va dentro.
  • ui.render devuelve el árbol de elementos, un Box que contiene otras cajas, texto y botones, y lo vuelve a construir a partir de tab y count cada vez que se ejecuta.
Presionar un botón ejecuta su callback 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 hook ui.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:
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 hook ui.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.
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: