
Semaphore UI 2.21 ejecuta agentes de IA para programación. Dos aplicaciones nuevas, Claude Code Agent y Codex Agent, inician la herramienta de línea de comandos del agente en un repositorio y le pasan un prompt. El agente trabaja por su cuenta e informa de lo que hace en el log de la tarea. El prompt puede tomar valores de grupos de variables y variables de encuesta, el agente puede llamar a las herramientas de servidores MCP, y el log muestra su trabajo como una transcripción.
Semaphore 2.21 está en desarrollo. Aún no se ha publicado: esta página describe lo que ya está en la rama de desarrollo y crecerá hasta el lanzamiento. Los detalles todavía pueden cambiar.
Aspectos destacados
- Plantillas Claude Code Agent y Codex Agent: un agente es una plantilla como cualquier otra. Iníciala a mano, mediante una programación, una integración o como paso de un flujo de trabajo.
- Expresiones en el prompt:
${{ vars.extra.NAME }},${{ vars.env.NAME }},${{ secrets.extra.NAME }}y${{ secrets.env.NAME }}insertan en el prompt los valores de los grupos de variables y de las variables de encuesta, como en GitHub Actions. - Prompt de una tarea: una plantilla puede permitir que quien inicia una tarea sustituya el prompt para una ejecución.
- Inventario MCP: un nuevo tipo de inventario con los servidores MCP remotos cuyas herramientas puede llamar el agente. Los tokens se almacenan cifrados.
- Log de la tarea del agente: el texto del agente, las llamadas a herramientas, los subagentes y un resumen con los tokens y el coste, actualizado mientras el agente trabaja.
- Aislamiento: cada tarea recibe su propio directorio de configuración del agente, vacío. Los tokens y los secretos insertados en el prompt se enmascaran en el log.
Plantillas de agentes de IA

Una plantilla de agente inicia Claude Code o Codex en un directorio de un repositorio y le pasa un prompt. Úsala para el trabajo que de otro modo describirías a un compañero: revisar el último commit, encontrar y corregir un test que falla, actualizar una dependencia y abrir un pull request.
Para crear una, ve a Plantillas de tareas, haz clic en Nueva plantilla y después en Claude Code Agent o Codex Agent.
| Campo | Descripción |
|---|---|
| Repositorio | El repositorio en el que trabaja el agente. Semaphore lo clona o lo actualiza antes de la tarea, como con cualquier otra plantilla. |
| Ruta del subdirectorio | Opcional. El directorio del repositorio en el que se inicia el agente. |
| Servidores MCP | Opcional. Un inventario MCP con los servidores cuyas herramientas puede llamar el agente. |
| Grupos de variables | Variables y secretos para el agente: la clave de API, valores para las expresiones del prompt, variables de entorno del proceso del agente. |
| Prompt | La instrucción con la que se ejecuta el agente. |
| Argumentos de CLI | Argumentos adicionales para el comando del agente: el modelo, los límites, los permisos. |
| Variables de encuesta | Preguntas que se hacen al iniciar la tarea. Las respuestas se pueden insertar en el prompt. |
Qué necesitas. La herramienta de línea de comandos del agente debe estar instalada en la máquina que ejecuta las tareas, el servidor de Semaphore o el runner:
| Aplicación | Comando | Instalación |
|---|---|---|
| Claude Code Agent | claude |
npm install -g @anthropic-ai/claude-code |
| Codex Agent | codex |
npm install -g @openai/codex |
Semaphore habilita una aplicación cuando encuentra su comando en PATH al arrancar. Un administrador
también puede habilitarla y establecer la ruta del ejecutable en la página Aplicaciones.
Cómo se ejecuta el agente. Semaphore inicia el agente en el directorio del repositorio con el prompt en su entrada estándar, de modo que el prompt no aparece en la lista de procesos:
| Aplicación | Comando |
|---|---|
| Claude Code Agent | claude -p --output-format=stream-json --verbose --include-partial-messages --mcp-config=<file> --strict-mcp-config --no-session-persistence <CLI args> |
| Codex Agent | codex exec --json --skip-git-repo-check <CLI args> - |
- No se conserva nada entre tareas. Cada ejecución es una sesión nueva del agente. Lo que deba sobrevivir a una ejecución debe quedar en el repositorio: un commit, un pull request, un archivo.
- En runners de Docker y Kubernetes el agente se ejecuta en un contenedor, por lo que la imagen del ejecutor debe
contener el comando
claudeocodex.
Clave de API
El agente toma su clave de API de una variable de entorno. Añade la clave a un grupo de variables de la plantilla como variable de entorno secreta:
| Aplicación | Variable | También se acepta |
|---|---|---|
| Claude Code Agent | ANTHROPIC_API_KEY |
CLAUDE_CODE_OAUTH_TOKEN |
| Codex Agent | OPENAI_API_KEY |
CODEX_API_KEY |
El inicio de sesión del usuario que ejecuta Semaphore no se usa: el directorio de configuración del agente se crea para la tarea y está vacío, así que una clave de un grupo de variables es la única forma de autenticarse. Si no está definida ninguna de las variables, el log de la tarea indica cuál añadir.
Expresiones en el prompt
El prompt de una plantilla puede tomar valores de los grupos de variables de la plantilla. Escribe una expresión entre llaves dobles, como en GitHub Actions, y Semaphore la sustituye cuando se inicia la tarea:
| Expresión | Valor |
|---|---|
${{ vars.extra.NAME }} |
Una variable adicional de un grupo de variables. |
${{ vars.env.NAME }} |
Una variable de entorno de un grupo de variables. |
${{ secrets.extra.NAME }} |
Una variable adicional secreta de un grupo de variables. |
${{ secrets.env.NAME }} |
Una variable de entorno secreta de un grupo de variables. |
Find the flaky tests in services/api and fix them.
Open a pull request against ${{ vars.extra.base_branch }} and post its link
to ${{ vars.env.TRACKER_URL }} with the token ${{ secrets.env.TRACKER_TOKEN }}.
- Las variables de encuesta son variables adicionales: la respuesta a la variable de encuesta
versiones${{ vars.extra.version }}, y una secreta es${{ secrets.extra.NAME }}. Una variable de encuesta que se entrega como variable de entorno está en cambio bajoenv. Una variable de encuesta sin responder da una cadena vacía. - Una variable que no existe hace fallar la tarea antes de que se inicie el agente, con un mensaje que nombra la expresión. Semaphore no ejecuta un agente con un hueco en su prompt.
- Una expresión mal escrita se rechaza al guardar la plantilla:
${{ secrets.TOKEN }}no tieneextranienv. - Las demás expresiones se dejan como están. Solo
vars.…ysecrets.…pertenecen a Semaphore, así que un prompt puede pedir al agente que escriba un workflow con${{ github.sha }}dentro. Para conservar una expresiónvarsosecretscomo texto, pon un signo de dólar más delante de ella:$${{ secrets.env.NAME }}. - Un valor se inserta tal cual. Una cadena se usa como está escrita, una lista o un objeto como JSON. En un valor no se vuelven a buscar expresiones.
- Un secreto insertado en el prompt se enmascara en el log de la tarea, allí donde el agente lo repita.
Un secreto en el prompt se envía al proveedor del modelo junto con el resto del prompt. Es preferible dar un secreto a las herramientas del agente: como variable de entorno secreta de un grupo de variables, o como el token de un servidor MCP.
Prompt de una tarea
Con la casilla Prompt activada en la plantilla, el formulario de la tarea muestra el prompt de la plantilla y permite cambiarlo para una ejecución. Una programación, una integración o un paso de un flujo de trabajo pueden guardar un prompt propio del mismo modo. A través de la API, envíalo en los parámetros de la tarea:
{
"template_id": 12,
"params": {
"prompt": "Review the changes of the last release and list the risky ones."
}
}
Un prompt aportado por una tarea se usa exactamente como está escrito: las expresiones del prompt se sustituyen solo en el prompt almacenado en la plantilla. Así las variables y los secretos del proyecto quedan fuera del alcance de quien solo puede ejecutar tareas. Si la plantilla no lo permite, una tarea que trae un prompt se rechaza.
Servidores MCP

Un agente puede llamar a las herramientas de servidores MCP remotos: un gestor de incidencias, una búsqueda en la documentación, tu propio servicio. Los servidores se guardan en un inventario del nuevo tipo Inventario MCP, y un mismo inventario sirve tanto para plantillas de Claude Code como de Codex.
| Campo | Descripción |
|---|---|
| Interruptor | Un servidor desactivado permanece en la lista y no se entrega al agente. |
| Nombre | El nombre con el que el agente conoce el servidor: hasta 64 letras, dígitos, - y _. |
| URL | Una dirección http o https de un servidor que habla MCP sobre HTTP o SSE. No se acepta un nombre de usuario ni una contraseña en la URL. |
| Token | Opcional. El agente lo envía en la cabecera Authorization como token bearer. |
- Un token guardado se almacena cifrado y no se vuelve a mostrar: escribe uno nuevo para sustituirlo, o elimínalo.
- El token llega al agente como variable de entorno de su proceso. No se escribe en el archivo de configuración del agente, ni en la línea de comandos, ni en el log de la tarea.
- El agente recibe exactamente estos servidores. Sus herramientas se aprueban de antemano, ya que no hay nadie para confirmar una llamada, y los servidores MCP configurados para el usuario que ejecuta Semaphore no se usan.
Log de la tarea

El log de la tarea muestra el trabajo del agente a medida que ocurre, como una transcripción y no como los eventos JSON que imprime la herramienta de línea de comandos:
- Texto del agente, línea a línea. Codex imprime un mensaje cuando está completo.
- Llamadas a herramientas, cada una en una fila: el estado, el servidor MCP y la herramienta, los argumentos. Haz clic en una fila para ver los argumentos y el resultado. Una llamada fallida aparece abierta desde el principio.
- Subagentes: las filas de un subagente se marcan con su nombre.
- La primera fila de una ejecución de Claude Code nombra el modelo y los servidores MCP, con los que no se conectaron en rojo.
- El resumen al final: el número de turnos, la duración, los tokens y el coste, en la medida en que el agente los comunica.
Log sin procesar muestra el mismo log como texto plano.
Seguridad
- Un agente ejecuta comandos. Dentro de los permisos que le da su herramienta de línea de comandos, el agente puede leer y modificar el directorio del repositorio, ejecutar programas como el usuario que ejecuta las tareas y llamar a las herramientas de sus servidores MCP. Da a una plantilla de agente un repositorio y tokens con los derechos más restringidos que basten para el trabajo, y un runner aparte para el trabajo que quieras mantener separado del servidor.
- Cada tarea tiene su propio directorio de configuración del agente (
CLAUDE_CONFIG_DIR,CODEX_HOME), creado para la tarea y eliminado después de ella. Los ajustes, los inicios de sesión y los servidores MCP del usuario que ejecuta Semaphore no llegan al agente, y una variable de un grupo de variables no puede redirigir el directorio. - El prompt y lo que el agente lee van al proveedor del modelo: los archivos del repositorio, la salida de los comandos, los resultados de las herramientas.
- Un repositorio puede dar instrucciones al agente. El texto de los archivos que lee el agente, de una incidencia o del resultado de una herramienta puede cambiar lo que hace el agente. No apuntes un agente con tokens potentes a contenido que no controlas.
- Los tokens y los secretos se enmascaran en el log de la tarea: los tokens de los servidores MCP y los secretos
insertados en el prompt se sustituyen por
********. - Las variables y los secretos no pasan por la línea de comandos de un agente, donde la lista de procesos los mostraría.
Documentación
La guía de usuario tiene una página con todos los campos y reglas: Agentes de IA.
