开源 · MIT · TypeScript · v0.4.7

skelm — 真正可以投入生产的 agentic workflows

构建类型化 TypeScript pipelines,把确定性 code、单次 inference 和完整 agent loops 放在 default-deny 权限与自有 gateway 之后。用同一种模块形态运行快速自动化、cron jobs、webhooks、durable approvals 和 persistent chat workflows。

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

从 scripts 到 durable agents 的同一种 authoring model。

workflow 是类型化 TypeScript 模块。直接使用确定性 code、model inference 和 agent loops;当需要 schedules、webhooks、queues 或 durable state 时,同一个 workflow 可由 gateway 托管。

code()

确定性逻辑

用于 fetches、transforms、branches、loops、parallel work、waits 和 nested pipeline calls 的纯 TypeScript steps。像普通 code 一样 type-check、refactor、test 和 version。

infer()

单次 inference

一次 model call,带类型化 input 和 structured output。`infer()` 用于没有 tool loop 的 LLM 判断,可由 OpenAI-compatible endpoints、Anthropic、Pi、Vercel AI 或 custom backends 支持。

agent()

Multi-turn agent loops

完整 agent steps,包含 tools、MCP servers、skills、workspaces 和 default-deny permissions。Backends 包括 @skelm/agent、Opencode、Pi、Codex、Vercel AI、ACP agents 和 custom providers。

gateway 所有的 trust boundary

权限是 API 的一部分,不是事后补丁

每个 privileged action 都通过 gateway,并受 code 中声明的 permissions 约束。无法执行声明 permission 的 backend 会在 step start 失败,而不是静默绕过。

  • Default-deny dimensions 覆盖 tools、executables、MCP servers、skills、network egress、filesystem roots、delegation 和 agentmemory operations。
  • gateway 通过 HTTP + SSE 托管 workflows,驱动 scheduler、queue、file-watch、poll、webhook 和 event-source triggers,并拥有 execution surface。
  • Runs 可以为 human approval 暂停,从 durable state 恢复,并在重启后保留 session-keyed persistent chat conversations。
  • Audit、secrets、workspace isolation、MCP lifecycle 和 agent supervision 都留在同一个 gateway trust boundary 内。

一个真实 workflow,从头到尾

来自当前 examples 的 incident response:并行 deterministic triage,然后执行一个带有明确 tools、MCP、filesystem 和 network permissions 的 agent step。

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 以聚焦的 packages 发布。安装 meta-package `skelm` 获取 runtime 和 CLI,然后按需添加 backend、integration、memory、metrics 或 tracing packages。

skelm

Meta-package — 安装这个。它 re-export @skelm/core,提供 skelm CLI binary,并依赖本地执行所需的 CLI、scheduler 和 integration SDK 组件。

@skelm/core

Runtime、types、builders、schemas、events、permissions、registries、backend interface、system prompt composition 和 pipeline execution primitives。

@skelm/cli

Command-line interface 和 programmatic primitives。非豁免 commands dispatch 到 local gateway;`init`、`validate` 和 `gateway *` 可在没有 live gateway 时运行。

@skelm/gateway

Long-running orchestrator,拥有 config、registries、permissions、audit、agent lifecycle、triggers、HTTP/SSE、dashboard API 和 execution trust boundary。

@skelm/scheduler

用于 cron、interval 和 webhook schedules 的 trigger management,支持 deduplication 和 overlap policies;gateway 用它处理 scheduled work。

@skelm/integrations

面向 GitHub、Slack、Jira、Telegram、Matrix 和 chat UI trigger sources 等 third-party services 的 typed integration package。

@skelm/integration-sdk

用于 custom skelm integrations 和 trigger sources 的 authoring SDK。用它构建可接入 gateway 的 connectors。

@skelm/agent

First-party native agent backend。针对 OpenAI-compatible chat endpoints 运行 infer() 和 agent(),并进行 in-process TrustEnforcer permission checks。

@skelm/agentmemory

用于 cross-session recall 的 typed REST client 与 gateway-wired AgentmemoryHandle。Operations 是 default-deny,并通过 gateway enforcement 路由。

@skelm/opencode

Opencode.ai coding-agent backend,支持 native permission mapping、granular enforcement 和 gateway-supervised lifecycle。

@skelm/pi

Pi coding-agent SDK backend,支持 native tool allowlist enforcement、infer()、sandbox defaults 和 queue controls。

@skelm/codex

通过 @openai/codex-sdk 的 OpenAI Codex backend,支持 boundary permission mapping、MCP injection、skill loading、session lifecycle 和 streaming。

@skelm/vercel-ai

Vercel AI SDK backend,在 skelm policy 下通过 tool filtering 和 call-time permission checks 驱动 infer() 与 agent()。

@skelm/metrics

面向 skelm event streams 的 Prometheus-format metrics:run counters、step timings、permission denials、approvals 和 trigger fires。

@skelm/otel

面向 skelm event streams 的 OpenTelemetry tracing,发出 run 和 step spans,而不替你配置 exporters。

准备 ship 一个 workflow?

安装 CLI、scaffold 一个 project,或使用 `skelm builder` 从自然语言 spec draft 一个 workflow。