Open source · MIT · TypeScript · v0.4.7

skelm — workflows agentiques que vous pouvez réellement mettre en production

Créez des pipelines TypeScript typés qui mélangent code déterministe, inférence ponctuelle et boucles agent complètes derrière des permissions default-deny et un gateway que vous contrôlez. Exécutez automatisations rapides, cron jobs, webhooks, validations durables et workflows de chat persistants avec la même forme de module.

$ npm install -g skelm
$ skelm init my-bot && cd my-bot && npm install
$ skelm run workflows/hello.workflow.mts --input '{"name":"world"}'

Un seul modèle d’auteur, du script aux agents durables.

Un workflow est un module TypeScript typé. Utilisez directement du code déterministe, l’inférence de modèle et les boucles agent, puis hébergez le même workflow via le gateway quand il lui faut schedules, webhooks, queues ou état durable.

code()

Logique déterministe

Étapes TypeScript pures pour fetches, transformations, branches, loops, travail parallèle, waits et appels de pipelines imbriqués. Vérifiez les types, refactorisez, testez et versionnez-les comme du code ordinaire.

infer()

Inférence ponctuelle

Un appel de modèle avec entrée typée et output structuré. `infer()` sert au jugement du LLM sans boucle d’outils, avec des providers comme les endpoints compatibles OpenAI, Anthropic, Pi, Vercel AI ou des backends personnalisés.

agent()

Boucles agent multi-tours

Étapes agent complètes avec tools, serveurs MCP, skills, workspaces et permissions default-deny. Les backends incluent @skelm/agent, Opencode, Pi, Codex, Vercel AI, les agents ACP et les providers personnalisés.

Trust boundary détenue par le gateway

Les permissions font partie de l’API, pas une réflexion après coup

Chaque action privilégiée passe par le gateway avec des permissions déclarées dans le code. Un backend qui ne peut pas appliquer une permission déclarée échoue au démarrage de l’étape au lieu de la contourner silencieusement.

  • Les dimensions default-deny couvrent tools, executables, serveurs MCP, skills, egress réseau, racines filesystem, delegation et opérations agentmemory.
  • Le gateway héberge les workflows via HTTP + SSE, pilote scheduler, queue, file-watch, poll, webhook et event-source triggers, et possède la surface d’exécution.
  • Les runs peuvent se suspendre pour approval humaine, reprendre depuis un état durable et préserver des conversations de chat persistantes indexées par session key entre redémarrages.
  • Audit, secrets, isolation workspace, lifecycle MCP et supervision agent restent dans la même trust boundary du gateway.

Un vrai workflow, de bout en bout

Incident response depuis les exemples actuels : triage déterministe en parallèle, puis une étape agent avec permissions explicites pour tools, MCP, filesystem et réseau.

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,
    }),
  ],
})

Paquets

skelm est livré sous forme de paquets ciblés. Installez le méta-paquet `skelm` pour le runtime et la CLI, puis ajoutez des paquets backend, integration, memory, metrics ou tracing selon vos besoins.

skelm

Méta-paquet — installez celui-ci. Ré-exporte @skelm/core, fournit le binaire CLI skelm et dépend des parties CLI, scheduler et integration SDK nécessaires à l’exécution locale.

@skelm/core

Runtime, types, builders, schemas, events, permissions, registries, interface backend, composition du system prompt et primitives d’exécution pipeline.

@skelm/cli

Interface en ligne de commande et primitives programmatiques. Les commandes non exemptées dispatchent vers le gateway local ; `init`, `validate` et `gateway *` peuvent fonctionner sans gateway actif.

@skelm/gateway

Orchestrateur longue durée qui possède config, registries, permissions, audit, lifecycle agent, triggers, HTTP/SSE, dashboard API et trust boundary d’exécution.

@skelm/scheduler

Gestion des triggers pour schedules cron, interval et webhook avec déduplication et politiques d’overlap ; utilisé par le gateway pour le travail planifié.

@skelm/integrations

Paquet d’intégrations typées pour services tiers comme GitHub, Slack, Jira, Telegram, Matrix et sources de trigger chat UI.

@skelm/integration-sdk

SDK d’auteur pour intégrations skelm et trigger sources personnalisés. Utilisez-le pour créer des connecteurs branchés au gateway.

@skelm/agent

Backend agent natif first-party. Exécute infer() et agent() contre des endpoints chat compatibles OpenAI avec contrôles de permissions TrustEnforcer in-process.

@skelm/agentmemory

Client REST typé et AgentmemoryHandle câblé au gateway pour le recall entre sessions. Les opérations sont default-deny et passent par l’enforcement du gateway.

@skelm/opencode

Backend coding-agent Opencode.ai avec mapping natif des permissions, enforcement granulaire et prise en charge du lifecycle supervisé par le gateway.

@skelm/pi

Backend SDK coding-agent Pi avec enforcement natif de tool allowlist, support infer(), defaults sandbox et contrôles de queue.

@skelm/codex

Backend OpenAI Codex via @openai/codex-sdk avec mapping des permissions à la boundary, injection MCP, chargement des skills, session lifecycle et streaming.

@skelm/vercel-ai

Backend Vercel AI SDK qui pilote infer() et agent() avec filtrage des tools et contrôles de permission à chaque appel sous la policy skelm.

@skelm/metrics

Métriques au format Prometheus pour les skelm event streams : compteurs de runs, durées de steps, permission denials, approvals et trigger fires.

@skelm/otel

Tracing OpenTelemetry pour skelm event streams, émettant des spans run et step sans configurer les exporters pour vous.

Prêt à shipper un workflow ?

Installez la CLI, générez un projet ou utilisez `skelm builder` pour ébaucher un workflow depuis une spécification en langage naturel.