오픈소스 · 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를 통해 host합니다.

code()

결정적 로직

fetches, transforms, branches, loops, parallel work, waits, nested pipeline calls를 위한 순수 TypeScript steps. 일반 code처럼 type-check, refactor, test, version 관리할 수 있습니다.

infer()

단발 inference

타입이 있는 input과 structured output을 가진 하나의 model call. `infer()`는 tool loop 없이 LLM 판단이 필요할 때 쓰며, OpenAI-compatible endpoints, Anthropic, Pi, Vercel AI, custom backends 등이 지원합니다.

agent()

Multi-turn agent loops

tools, MCP servers, skills, workspaces, default-deny permissions를 갖춘 완전한 agent steps. Backends에는 @skelm/agent, Opencode, Pi, Codex, Vercel AI, ACP agents, custom providers가 포함됩니다.

gateway가 소유하는 trust boundary

권한은 사후 고려가 아니라 API의 일부입니다

모든 privileged action은 code에 선언된 permissions 아래 gateway를 통과합니다. 선언된 permission을 강제할 수 없는 backend는 조용히 우회하지 않고 step start에서 실패합니다.

  • Default-deny dimensions는 tools, executables, MCP servers, skills, network egress, filesystem roots, delegation, agentmemory operations를 포함합니다.
  • gateway는 HTTP + SSE로 workflows를 host하고 scheduler, queue, file-watch, poll, webhook, event-source triggers를 구동하며 execution surface를 소유합니다.
  • Runs는 human approval을 위해 pause하고, durable state에서 resume하며, session-keyed persistent chat conversations를 재시작 후에도 보존할 수 있습니다.
  • Audit, secrets, workspace isolation, MCP lifecycle, agent supervision은 같은 gateway trust boundary 안에 머뭅니다.

실제 workflow, end to end

현재 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은 focused packages로 배포됩니다. runtime과 CLI에는 meta-package `skelm`을 설치하고, 필요에 따라 backend, integration, memory, metrics, tracing packages를 추가하세요.

skelm

Meta-package — 이것을 설치하세요. @skelm/core를 re-export하고 skelm CLI binary를 제공하며 local execution에 필요한 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. 비 exempt commands는 local gateway로 dispatch됩니다. `init`, `validate`, `gateway *`는 live gateway 없이 실행할 수 있습니다.

@skelm/gateway

config, registries, permissions, audit, agent lifecycle, triggers, HTTP/SSE, dashboard API, execution trust boundary를 소유하는 long-running orchestrator.

@skelm/scheduler

deduplication과 overlap policies를 갖춘 cron, interval, webhook schedules용 trigger management. 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에 plug in되는 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를 통해 route됩니다.

@skelm/opencode

native permission mapping, granular enforcement, gateway-supervised lifecycle support를 갖춘 Opencode.ai coding-agent backend.

@skelm/pi

native tool allowlist enforcement, infer() support, sandbox defaults, queue controls를 갖춘 Pi coding-agent SDK backend.

@skelm/codex

@openai/codex-sdk 기반 OpenAI Codex backend. boundary permission mapping, MCP injection, skill loading, session lifecycle, streaming을 지원합니다.

@skelm/vercel-ai

skelm policy 아래 tool filtering과 call-time permission checks로 infer()와 agent()를 구동하는 Vercel AI SDK backend.

@skelm/metrics

skelm event streams용 Prometheus-format metrics: run counters, step timings, permission denials, approvals, trigger fires.

@skelm/otel

exporters를 대신 구성하지 않고 run 및 step spans를 emit하는 skelm event streams용 OpenTelemetry tracing.

workflow를 ship할 준비가 되셨나요?

CLI를 설치하고 project를 scaffold하거나 `skelm builder`로 natural-language spec에서 workflow를 draft하세요.