SDK de complementos
Construye la pieza que falta, dentro de KeelOps.
Un complemento es una carpeta de JavaScript que KeelOps carga en su propio proceso: usa su acceso, sus permisos y su aspecto, lee sus datos y aparece donde se trabaja — en el menú, en la página de un proyecto, en el detalle de una tarea, en la barra superior. Sin segundo servidor, sin tokens que repartir, sin dependencias que instalar. El SDK es libre (AGPL), y un complemento declara en su manifiesto si requiere la edición pro.
Qué puedes construir
Lo que solo tu equipo necesita, con todo el resto de KeelOps alrededor.
Una página en el menú
Una entrada con su icono, una página que se abre dentro de la aplicación y toma sus colores, el tema claro u oscuro y el idioma de quien la lee.
Dentro del trabajo
Un comando en la página de un proyecto, un panel en el detalle de una tarea, un botón entre los adjuntos de una oferta, un recuadro en el día: los anclajes llevan el complemento donde hace falta.
Tus datos
Tablas propias en la misma base de datos, con sus migraciones, en los dos motores — SQLite y MariaDB. La copia de seguridad de KeelOps se las lleva.
Informes y notas de versión
El trabajo hecho se convierte en un documento que se lee, escrito por modelos de IA en tu servidor: para los usuarios, para la administración, para los comerciales.
Herramientas para los asistentes
Un complemento ofrece herramientas a los demás, a través del núcleo: así Claude, ChatGPT y Mistral leen los datos de calidad de QABox, con los permisos de quien pregunta.
El trabajo del núcleo, con sus reglas
Crear una tarea, adjuntar un documento generado, tener un grupo de personas: el complemento pasa por las puertas del núcleo, con los permisos, las notificaciones y el historial de siempre.
Un ejemplo
El mapa de tareas: un complemento dentro de la página de un proyecto.
No tiene entrada en el menú: se abre desde el menú ⋯ de un proyecto. Lee las tareas con los permisos de quien mira, saca los temas del texto con los modelos locales y las dibuja como una red — jerarquía, ventanas de tiempo, quién trabajó con quién, y los vínculos que sugiere añadir.

IA local
El trabajo hecho se convierte en un documento que se lee.
KeelOps sabe qué se hizo, para quién, en qué semana. Un modelo que funciona en tu propio servidor — Ollama, nada sale de la empresa — lo convierte en texto para quien tiene que leerlo.
- Notas de versión para los usuarios de un producto, semana a semana, divididas en novedades y correcciones.
- El mes de un cliente para la administración: solicitudes abiertas, trabajo hecho, horas por actividad, con palabras sencillas.
- La semana de las ofertas para los comerciales: qué se movió, qué está parado, a quién volver a llamar.
- Las no conformidades del mes para calidad, con las acciones que las cerraron.
El modelo escribe las frases; lo que entra en el documento y los números los decide el código. Sin modelo el documento sale igual, con los títulos en lugar de las frases, y lo dice. Es la misma receta de las notas de versión que KeelOps ya genera — al lado, una real, enviada a los usuarios de un producto.

Por dónde empezar
Un complemento en veinte líneas.
Un manifiesto que dice quién es y dónde aparece, y una función create(ctx) que recibe del núcleo la base de datos, la sesión y las puertas, y devuelve sus rutas. Se añade su nombre a PLUGINS, se reinicia, y la entrada está en el menú.
// plugins/Hello/plugin.mjs
export const manifest = { nome: "Hello", versione: "0.1.0", ui: { voce: "Hello", icona: "puzzle" } };
export async function create(ctx) {
const { json } = await import(`${ctx.sdkDir}/http.mjs`);
return {
routes: [
["GET", /^\/api\/summary$/, async (req, res) => {
const user = await ctx.sessionUser(req); // the real KeelOps session
if (!user) return json(res, 401, { error: "no session" });
const row = await ctx.db.get( // the KeelOps database, read-only
"SELECT COUNT(*) AS open FROM Task t JOIN TaskStatus s ON s.id = t.statusId " +
"WHERE t.assigneeId = ? AND s.isClosed = 0 AND t.deletedAt IS NULL", user.id);
json(res, 200, { name: user.name, open: row.open });
}],
],
staticDir: new URL("./ui", import.meta.url).pathname, // a page, inside the app
};
}
El código y los comentarios de los complementos están en inglés, como la documentación; las páginas se traducen a los cinco idiomas de KeelOps con un único mecanismo, que da el SDK.
Las reglas
Dentro del proceso, dentro de las reglas.
Una base de datos cercada
Las lecturas pasan por una conexión que no sabe escribir; las escrituras solo en las tablas del complemento, y la barrera lee cada instrucción antes de dejarla pasar.
La sesión de KeelOps
Cada ruta pasa por el control de sesión del núcleo. Los clientes del portal no llegan a los complementos, y un complemento muestra solo lo que la persona puede ver.
Todo a través del SDK
Sin acceso directo a la base de datos, al entorno del servidor ni a los modelos: una prueba del núcleo lee las fuentes de cada complemento y se detiene ante un import prohibido.
Se enciende y se apaga
Desde la página Sistema el administrador ve la versión, la licencia y la descripción de cada complemento, y lo apaga sin reiniciar. Apagado desaparece; sus datos se quedan.
La documentación.
Guías paso a paso, ejemplos, las reglas y la referencia completa de la API, en once capítulos. Está en inglés, el idioma de quien escribe código.