Lógica determinista
Pasos de TypeScript puro para fetches, transformaciones, branch, loop, parallel, wait y llamadas a pipelines anidados. Verifícalos por tipos, refactorízalos, testéalos y versiónalos como código normal.
Construye pipelines TypeScript tipados que combinan código determinista, inferencia de un solo disparo y bucles completos de agent bajo permisos default-deny y un gateway propio. Ejecuta automatizaciones rápidas, cron jobs, webhooks, aprobaciones durables y workflows de chat persistente con la misma forma de módulo.
$ npm install -g skelm
$ skelm init my-bot && cd my-bot && npm install
$ skelm run workflows/hello.workflow.mts --input '{"name":"world"}'
Un workflow es un módulo TypeScript tipado. Usa código determinista, inferencia de modelo y bucles de agent directamente, y hospeda el mismo workflow en el gateway cuando necesite schedules, webhooks, queues o estado durable.
Pasos de TypeScript puro para fetches, transformaciones, branch, loop, parallel, wait y llamadas a pipelines anidados. Verifícalos por tipos, refactorízalos, testéalos y versiónalos como código normal.
Una llamada al modelo con entrada tipada y output estructurado. `infer()` sirve para juicio del LLM sin bucle de herramientas, con backends como endpoints compatibles con OpenAI, Anthropic, Pi, Vercel AI o backends personalizados.
Pasos agent completos con herramientas, servidores MCP, skills, workspaces y permisos default-deny. Los backends incluyen @skelm/agent, Opencode, Pi, Codex, Vercel AI, agentes ACP y proveedores personalizados.
Cada acción privilegiada fluye por el gateway bajo permisos declarados en código. Un backend que no pueda hacer cumplir un permiso declarado falla al iniciar el paso en lugar de saltárselo silenciosamente.
Incident response desde los ejemplos actuales: triaje determinista en paralelo y luego un paso agent con permisos explícitos para tools, MCP, filesystem y red.
import { agent, code, parallel, pipeline } from 'skelm'
import { z } from 'zod'
export default pipeline({
id: 'incident-response',
input: z.object({
incidentId: z.string(),
service: z.string(),
description: z.string(),
}),
output: z.object({
rootCause: z.string(),
immediateActions: z.array(z.string()),
}),
triggers: [{ kind: 'webhook', path: '/webhooks/incident' }],
steps: [
parallel({
id: 'triage',
steps: [
code({ id: 'search-issues', run: () => ({ issues: [] }) }),
code({ id: 'open-channel', run: () => ({ channel: 'inc-001' }) }),
],
}),
agent({
id: 'root-cause',
backend: 'opencode',
prompt: (ctx) => `Analyze this incident:\n${ctx.input.description}`,
permissions: {
allowedTools: ['gh.search_issues', 'slack.post_message'],
allowedMcpServers: ['github'],
allowedExecutables: [],
fsRead: [],
fsWrite: [],
networkEgress: { allowHosts: ['api.github.com', 'slack.com'] },
},
output: z.object({
rootCause: z.string(),
immediateActions: z.array(z.string()),
}),
maxTurns: 4,
}),
],
})
skelm se distribuye como paquetes enfocados. Instala el meta-paquete `skelm` para runtime y CLI; agrega backends, integraciones, memoria, métricas o trazas según necesites.
skelmMeta-paquete — instala este. Re-exporta @skelm/core, incluye el binario CLI skelm y depende de CLI, scheduler e integration SDK para ejecución local.
@skelm/coreRuntime, tipos, builders, schemas, eventos, permisos, registries, interfaz de backend, composición de system prompt y primitivas de ejecución de pipelines.
@skelm/cliInterfaz de línea de comandos y primitivas programáticas. Los comandos no exentos despachan al gateway local; `init`, `validate` y `gateway *` pueden correr sin gateway activo.
@skelm/gatewayOrquestador de larga duración que posee config, registries, permisos, audit, ciclo de vida de agentes, triggers, HTTP/SSE, dashboard API y trust boundary de ejecución.
@skelm/schedulerGestión de triggers cron, interval y webhook con deduplicación y políticas de solapamiento; lo usa el gateway para trabajo programado.
@skelm/integrationsPaquete de integraciones tipadas para servicios de terceros como GitHub, Slack, Jira, Telegram, Matrix y trigger sources de chat UI.
@skelm/integration-sdkSDK de autoría para integraciones skelm y trigger sources personalizados. Úsalo para construir conectores que se enchufen al gateway.
@skelm/agentBackend agent nativo first-party. Ejecuta infer() y agent() contra endpoints de chat compatibles con OpenAI con checks de permisos TrustEnforcer en proceso.
@skelm/agentmemoryCliente REST tipado y AgentmemoryHandle cableado al gateway para memoria entre sesiones. Las operaciones son default-deny y pasan por enforcement del gateway.
@skelm/opencodeBackend de coding-agent Opencode.ai con mapeo nativo de permisos, enforcement granular y soporte de ciclo de vida supervisado por el gateway.
@skelm/piBackend SDK de coding-agent Pi con allowlist nativa de tools, soporte infer(), defaults de sandbox y controles de cola.
@skelm/codexBackend OpenAI Codex vía @openai/codex-sdk con mapeo de permisos en el boundary, inyección MCP, carga de skills, ciclo de vida de sesión y streaming.
@skelm/vercel-aiBackend Vercel AI SDK que impulsa infer() y agent() con filtrado de tools y checks de permisos en cada llamada bajo la política de skelm.
@skelm/metricsMétricas en formato Prometheus para streams de eventos skelm: contadores de runs, tiempos de step, denegaciones, approvals y disparos de triggers.
@skelm/otelTrazas OpenTelemetry para streams de eventos skelm, emitiendo spans de run y step sin configurar exporters por ti.
Instala la CLI, genera un proyecto o usa `skelm builder` para crear un workflow desde una especificación en lenguaje natural.