Ir al contenido

Extensiones

Una extensión es una carpeta con un apx-extension.json que junta varias cosas: skills, servidores MCP, plantillas de rutinas, los secretos que necesitan y, si hace falta, un plugin en un sandbox. APX lee el manifiesto sin correr nada, la instala apagada, y encenderla aprueba exactamente los archivos que tenía.

Empezá por lo más chico que resuelva el problema:

QuerésHacé
Saber hacer algo para los agentes de un proyectoUna skill de proyecto en .apc/skills/
Un servidor MCP más para tus agentesapx mcps add (mirá Servidores MCP)
Skills, servidores y rutinas que viajan juntos, para compartir o reusarUna extensión
Código que mira eventos o suma contexto a tus turnosUna extensión con plugin

El repositorio de APX trae examples/extensions/daily-brief: una skill y una rutina de días hábiles que la usa.

  • Directoriodaily-brief/
    • apx-extension.json
    • Directorioskills/
      • Directoriodaily-brief/
        • SKILL.md
apx-extension.json
{
"id": "daily-brief",
"name": "Daily brief",
"version": "1.0.0",
"description": "A short morning brief: open tasks, what is due, what others owe you.",
"skills": "skills",
"routines": [
{
"name": "Morning brief",
"schedule": { "kind": "cron", "cron": "30 8 * * 1-5" },
"prompt": "Use the daily-brief skill to write my morning brief."
}
]
}

La skill le dice al agente que lea tus tareas y compromisos abiertos, escriba como mucho ocho líneas y conteste SKIP cuando no hay nada que valga la pena decir (una rutina que contesta SKIP no le avisa a nadie).

El esquema es estricto: las claves desconocidas se rechazan.

CampoQué lleva
idMinúsculas, números, _ y -, hasta 20 caracteres.
name, versionObligatorios. description es opcional, hasta 500 caracteres.
skillsUna carpeta de carpetas de skills, cada una con su SKILL.md.
mcpServidores por nombre (letras, números y _): command + args + env, o url + headers. Un comando que empieza con ./ corre desde la carpeta de la extensión.
routinesPlantillas con name, schedule (cron, every cada N minutos con N de 5 o más, o once) y prompt.
secretsHasta 10, cada uno con name, label y una url opcional de dónde sacarlo. Cada valor lo escribís una vez.
pluginCódigo opcional; mirá más abajo.

Un servidor MCP de una extensión solo puede usar los secretos propios de la extensión, como secret://name. No puede nombrar tus otras variables ni el entorno, así que un paquete no puede llevarse tus credenciales a otro lado.

Un servidor MCP con su propio secreto
"mcp": {
"crm": { "command": "node", "args": ["./server.mjs"], "env": { "CRM_TOKEN": "secret://token" } }
},
"secrets": [{ "name": "token", "label": "CRM API token", "url": "https://example.com/settings/tokens" }]
  1. Abrí Recursos › Extensiones y tocá Instalar.

  2. Pegá la ruta de la carpeta, tocá Revisar para ver qué trae, y después Instalar.

  3. Llega apagada. Completá sus claves (Editar) y encendela.

  4. Sus rutinas son sugerencias: Agregar a Rutinas pone una en Rutinas, apagada hasta que la enciendas.

❯ apx extensions install ~/work/daily-brief
daily-brief  Daily brief v1.0.0  · off  · 3f9c1a7e5b2d8c40
A short morning brief: open tasks, what is due, what others owe you.
skills: daily-brief
routines: Morning brief

Turn it on with: apx extensions on daily-brief
Recursos, pestaña Extensiones: extensiones instaladas con su interruptor, skills, servidores y rutinasRecursos, pestaña Extensiones: extensiones instaladas con su interruptor, skills, servidores y rutinas
Recursos › Extensiones

Instalar copia archivos comunes a la carpeta de APX y les toma una huella. Si la copia instalada cambia en el disco, APX apaga la extensión en el próximo arranque hasta que la vuelvas a aprobar. Para traer cambios de la carpeta original, instalala de nuevo o usá Volver a leer en su detalle.

Cuando los archivos no alcanzan, una extensión puede traer un plugin: un archivo .mjs que corre en su propio proceso, mira eventos (una tarea cambió, llegó un mensaje…) y puede sumar contexto a tus turnos.

"plugin": { "entry": "plugin.mjs", "observe": ["task.updated"], "context": false, "network": false }

Corre en un sandbox con el modelo de permisos de Node: lee solo su carpeta, escribe solo su carpeta de datos, no arranca procesos y no puede llamar a APX. Llega a internet solo con "network": true, y nunca a esta máquina. Lo que suma como contexto le llega al agente como dato de afuera, no como instrucciones.