Skip to content
Esta página fue generada y traducida con asistencia de IA. Si encuentra alguna imprecisión, no dude en ayudar a mejorarla. Editar en GitHub

Referencia de Executors

Esta página documenta los 5 tipos de executor en detalle, incluyendo sus campos de configuración, comportamiento y ejemplos.

openclaw

Envía notificaciones a través de plataformas de mensajería (Signal, Telegram) mediante la herramienta CLI de OpenClaw.

Cómo funciona: Construye un comando de shell que invoca el binario de OpenClaw con argumentos --channel, --target y --message.

Configuración:

toml
[[agents]]
id = "my-openclaw"
name = "Signal Notifier"
agent_type = "openclaw"
message_template = "[{project}] {key}: {title}"

[agents.openclaw]
command = "/usr/local/bin/openclaw"   # Path to the OpenClaw binary
channel = "signal"                     # Channel: "signal" or "telegram"
target = "+1234567890"                 # Phone number, group ID, or channel name

Campos:

CampoRequeridoDescripción
commandRuta al binario CLI de OpenClaw
channelCanal de mensajería (signal, telegram)
targetIdentificador del destinatario (número de teléfono, ID de grupo, etc.)

openprx

Envía mensajes a través de la infraestructura de mensajería OpenPRX. Soporta dos modos: API HTTP (daemon Signal) o comando CLI.

Modo 1: API Signal (preferido)

Envía un POST JSON a un daemon de API REST signal-cli:

toml
[[agents]]
id = "my-openprx"
name = "OpenPRX Signal"
agent_type = "openprx"

[agents.openprx]
signal_api = "http://127.0.0.1:8686"  # signal-cli REST API base URL
account = "+1234567890"                 # Sender phone number
target = "+0987654321"                  # Recipient phone number or UUID
channel = "signal"                      # Default: "signal"

La solicitud HTTP enviada a la API Signal:

POST {signal_api}/api/v1/send/{account}
Content-Type: application/json

{
  "recipients": ["{target}"],
  "message": "..."
}

Modo 2: Comando CLI

Recurre a ejecutar un comando de shell si signal_api no está establecido:

toml
[agents.openprx]
command = "openprx message send"
channel = "signal"
target = "+0987654321"

Campos:

CampoRequeridoDescripción
signal_apiNoURL base de la API HTTP del daemon Signal
accountNoNúmero de teléfono de la cuenta (usado con signal_api)
targetNúmero de teléfono o UUID del destinatario
channelNoNombre del canal (predeterminado: signal)
commandNoComando CLI (respaldo cuando signal_api no está establecido)

Se debe proporcionar al menos uno de signal_api o command.


webhook

Reenvía el payload completo del webhook tal como está a un endpoint HTTP. Útil para integrarse con Slack, Discord, APIs personalizadas o encadenar a otro servicio webhook.

Cómo funciona: Envía un POST JSON a la URL configurada con el payload original. Opcionalmente firma las solicitudes salientes con HMAC-SHA256.

toml
[[agents]]
id = "slack-forward"
name = "Slack Forwarder"
agent_type = "webhook"

[agents.webhook]
url = "https://hooks.slack.com/services/T.../B.../xxx"
secret = "outbound-signing-secret"  # Optional: sign outbound requests

Campos:

CampoRequeridoDescripción
urlURL de destino
secretNoSecreto HMAC-SHA256 para firma saliente (enviado como encabezado X-Webhook-Signature)

Cuando se establece secret, la solicitud saliente incluye un encabezado X-Webhook-Signature: sha256=... calculado sobre el cuerpo JSON, permitiendo al receptor verificar la autenticidad.


custom

Ejecuta un comando de shell arbitrario, pasando el mensaje formateado como argumento. Útil para integraciones personalizadas, registro o activación de scripts externos.

Cómo funciona: Ejecuta sh -c '{command} "{message}"' donde {message} es la plantilla renderizada con caracteres especiales escapados.

toml
[[agents]]
id = "custom-logger"
name = "Log to File"
agent_type = "custom"
message_template = "{event} | {key} | {title}"

[agents.custom]
command = "/usr/local/bin/log-event.sh"
args = ["--format", "json"]  # Optional additional arguments

Campos:

CampoRequeridoDescripción
commandRuta al ejecutable o comando de shell
argsNoArgumentos adicionales de línea de comandos

Nota de seguridad: El executor custom ejecuta comandos de shell. Asegúrate de que la ruta del comando sea de confianza y no controlable por el usuario.


cli

Ejecuta agentes de codificación IA para procesar incidencias. Este es el tipo de executor más poderoso, diseñado para generación automatizada de código y resolución de incidencias.

Requiere: features.cli_enabled = true en la configuración. Bloqueado cuando OPENPR_WEBHOOK_SAFE_MODE=1.

Executors soportados (lista blanca):

ExecutorBinarioPatrón de Comando
codexcodexcodex exec --full-auto "{prompt}"
claude-codeclaudeclaude --print --permission-mode bypassPermissions [--mcp-config path] "{prompt}"
opencodeopencodeopencode run "{prompt}"

Cualquier executor que no esté en esta lista blanca es rechazado.

Configuración:

toml
[features]
cli_enabled = true
callback_enabled = true  # Required for state transitions

[[agents]]
id = "my-coder"
name = "Code Agent"
agent_type = "cli"

[agents.cli]
executor = "claude-code"               # One of: codex, claude-code, opencode
workdir = "/opt/projects/backend"      # Working directory for the CLI tool
timeout_secs = 900                     # Timeout in seconds (default: 900)
max_output_chars = 12000               # Max chars to capture from stdout/stderr (default: 12000)
prompt_template = "Fix issue {issue_id}: {title}\nContext: {reason}"

# State transitions (requires callback_enabled)
update_state_on_start = "in_progress"  # Set issue state when task starts
update_state_on_success = "done"       # Set issue state on success
update_state_on_fail = "todo"          # Set issue state on failure/timeout

# Callback configuration
callback = "mcp"                       # Callback mode: "mcp" or "api"
callback_url = "http://127.0.0.1:8090/mcp/rpc"
callback_token = "bearer-token"        # Optional Bearer token for callback

# Bucle cerrado MCP (v0.3.0+)
skip_callback_state = true             # Omitir actualizaciones de estado en callbacks (la IA gestiona vía MCP)
# mcp_instructions = "..."            # Instrucciones MCP personalizadas (reemplaza las predeterminadas)
# mcp_config_path = "/path/to/mcp.json"  # claude-code --mcp-config path

# Variables de entorno por agente
[agents.cli.env_vars]
OPENPR_API_URL = "http://localhost:3000"
OPENPR_BOT_TOKEN = "opr_xxx"
OPENPR_WORKSPACE_ID = "e5166fd1-..."

Campos:

CampoRequeridoPredeterminadoDescripción
executor--Nombre de la herramienta CLI (codex, claude-code, opencode)
workdirNo--Directorio de trabajo
timeout_secsNo900Tiempo de espera del proceso
max_output_charsNo12000Límite de captura de cola de salida
prompt_templateNoFix issue {issue_id}: {title}\nContext: {reason}Prompt enviado a la herramienta CLI
update_state_on_startNo--Estado de la incidencia al iniciar la tarea
update_state_on_successNo--Estado de la incidencia al completarse con éxito
update_state_on_failNo--Estado de la incidencia al fallar o expirar
callbackNomcpProtocolo de callback (mcp o api)
callback_urlNo--URL a la que enviar callbacks
callback_tokenNo--Token Bearer para auth del callback
skip_callback_stateNofalseOmitir actualizaciones de estado en callbacks (cuando la IA gestiona el estado vía MCP)
mcp_instructionsNointegradoInstrucciones de herramientas MCP personalizadas añadidas al prompt
mcp_config_pathNo--Ruta al archivo de configuración MCP (pasado a claude-code vía --mcp-config)
env_varsNo{}Variables de entorno adicionales inyectadas en el subproceso del executor

Marcadores de posición del prompt template (específicos de cli):

MarcadorFuente
{issue_id}payload.data.issue.id
{title}payload.data.issue.title
{reason}payload.bot_context.trigger_reason

Payload de callback (modo MCP):

Cuando callback = "mcp", el servicio envía un POST estilo JSON-RPC a callback_url:

json
{
  "method": "issue.comment",
  "params": {
    "issue_id": "42",
    "run_id": "run-1711234567890",
    "executor": "claude-code",
    "status": "success",
    "summary": "cli execution completed",
    "exit_code": 0,
    "duration_ms": 45000,
    "stdout_tail": "...",
    "stderr_tail": "...",
    "state": "done"
  }
}

Ciclo de vida de transición de estado:

Evento recibido
    |
    v
[update_state_on_start] --> estado de incidencia = "in_progress"
    |
    v
Herramienta CLI se ejecuta (hasta timeout_secs)
    |
    +-- éxito --> [update_state_on_success] --> estado de incidencia = "done"
    |
    +-- fallo --> [update_state_on_fail] --> estado de incidencia = "todo"
    |
    +-- timeout --> [update_state_on_fail] --> estado de incidencia = "todo"

Cuando skip_callback_state = true, todas las transiciones de estado anteriores se suprimen — se espera que el agente IA gestione el estado de la incidencia directamente mediante herramientas MCP.


Automatización en Bucle Cerrado MCP

Cuando el agente IA tiene disponibles las herramientas MCP de OpenPR, puede leer de forma autónoma el contexto completo de la incidencia, corregir el problema y escribir los resultados de vuelta — formando un bucle cerrado completo.

Cómo funciona:

  1. openpr-webhook recibe un evento webhook de tarea de bot
  2. Construye un prompt a partir de prompt_template y añade instrucciones MCP (predeterminadas o personalizadas)
  3. El executor CLI se ejecuta con env_vars inyectadas (p. ej., OPENPR_BOT_TOKEN)
  4. El agente IA usa herramientas MCP para leer detalles de la incidencia, corregir el código, publicar comentarios y actualizar el estado
  5. El callback reporta metadatos de ejecución (duración, código de salida) pero omite las actualizaciones de estado

Instrucciones MCP predeterminadas (añadidas automáticamente cuando se configuran mcp_instructions, mcp_config_path o env_vars):

1. Call work_items.get with work_item_id="{issue_id}" to read full issue details
2. Call comments.list with work_item_id="{issue_id}" to read all comments
3. Call work_items.list_labels with work_item_id="{issue_id}" to read labels
4. After completing the fix, call comments.create to post a summary
5. Call work_items.update to set state to "done" if successful

Puedes reemplazarlas con un campo mcp_instructions personalizado.

Variables de entorno (env_vars):

Inyecta variables de entorno por agente en el subproceso del executor. Útil para proporcionar diferentes URLs de API, tokens o IDs de workspace a diferentes agentes:

toml
[agents.cli.env_vars]
OPENPR_API_URL = "http://localhost:3000"
OPENPR_BOT_TOKEN = "opr_bot_token_here"
OPENPR_WORKSPACE_ID = "e5166fd1-..."

Ruta de configuración MCP (mcp_config_path):

Para el executor claude-code, si el agente necesita una configuración MCP no global, especifica la ruta:

toml
mcp_config_path = "/etc/openpr-webhook/mcp-config.json"

Esto añade --mcp-config /etc/openpr-webhook/mcp-config.json al comando claude.

Released under the Apache-2.0 License.