运行时依赖
安装命令
点击复制本土化适配说明
skeleton(骨架)的非正式缩写,但“skelm”一词在特定语境中可能指代南非俚语中的“流氓”或“无赖”,因此翻译为“流氓”或“无赖”可能更为合适。 安装说明: 安装命令:["openclaw skills install skelm"]
技能文档
skelm
在TypeScript中构建安全、自治、长期运行的工作流。可以在任何Node运行的环境中运行它。
为什么skelm存在
大多数LLM工作流工具将安全性视为次要考虑因素。代理调用任意工具,读取任意文件,访问任意URL——因为框架没有预防机制。当出现问题(提示注入、无限循环、意外秘密泄露)时,您会在事后才发现。skelm的设计则相反。每个代理步骤从零权限开始。文件系统根目录、网络主机、MCP服务器、CLI二进制文件、秘密——每个都在步骤定义中预先声明。未声明的内容将在分发时被拒绝,在后端启动之前。审计日志以防篡改的链表记录每个特权操作,因此您可以始终重构发生了什么。
其余设计遵循该原则:
真正的TypeScript。工作流是.ts模块,您可以像其他代码一样对其进行类型检查、重构、测试和版本控制。没有DSL,没有YAML,没有JSON配置。三种步骤类型,彼此不包装。code()用于确定性逻辑,llm()用于单次推理调用,agent()用于完整的多回合循环。在单个管道中自由混合它们。多后端代理。Opencode、ACP(Copilot、Claude Code、Gemini)、OpenAI、Anthropic、Pi——以及自定义后端的提供者SPI。通过更改一个配置键来切换后端。首选MCP支持。MCP服务器由网关管理,而不是附加的。将其附加到每个步骤;权限模型控制哪些步骤可以访问哪些服务器。原生控制流。parallel、forEach、branch、loop、wait和嵌套管道是核心原语。可调度。Cron、间隔、Webhook、一次性和队列触发器。网关托管所有长期运行的内容。防篡改审计。哈希链审计日志。使用skelm audit query查询它。
在60秒内开始
# 1. 安装CLI
npm install -g skelm
# 2. 创建项目框架
skelm init my-bot && cd my-bot && npm install
# 3. 运行第一个工作流
skelm run workflows/hello.workflow.ts --input '{"name":"world"}'
# 4. 启动网关(长期运行,处理调度+代理步骤)
skelm gateway start
何时激活此技能
使用此技能时:
用户正在处理skelm项目(任何.workflow.ts / .pipeline.ts文件)
用户想要创建、编写或修改管道
用户询问AgentPermissions、skelm.config.ts、MCP连接、后端设置
用户想要运行、检查、调度或调试管道
用户正在从其他工作流工具(LangChain、Inngest、llm-task、lobster)迁移
工作单位
管道是导出pipeline()调用的TypeScript文件:
导入{代码、llm、agent、pipeline}来自'skelm'
导入{z}来自'zod'
导出默认管道({
id:'my-workflow',
描述:'此管道的作用。',
输入:z.object({
任务:z.string()
)),
输出:z.object({
结果:z.string()
)),
步骤:[/ 步骤[] /],
最终:(ctx)=> ctx.steps['last-step'] as { result:string },
)
步骤类型:代码·llm·agent·parallel·forEach·branch·loop·wait·pipelineStep·idempotent
从'skelm'导入所有内容。通过ctx.steps['step-id']访问先前步骤的输出。
步骤快速参考
代码()— 确定性逻辑
代码({
id:'parse',
运行:(ctx)=> ({
值:(ctx.input as { raw:string })。raw.trim()
)),
)
llm()— 单次推理
llm({
id:'classify',
后端:'openai',
提示:(ctx)=> classify:${(ctx.input as { text:string })。text},
输出:z.object({
标签:z.string(),
置信度:z.number()
)),
最大令牌:512,
)
代理()— 完整代理循环(默认拒绝)
代理({
id:'implement',
后端:'pi',
提示:(ctx)=> implement ticket ${(ctx.input as { id:string })。id}。返回JSON {prUrl}。,
权限:{
允许工具:['gh.'],
允许可执行文件:['git'],
允许MCP服务器:['github'],
fsRead:['./'],
fsWrite:['./src/'],
网络出口:{
allowHosts:['api.github.com']
},
},
工作区:{
模式:'ephemeral',
清理:'on-run-end'
},
输出:z.object({
prUrl:z.string()
}),
最大回合:20,
)
默认拒绝:每个AgentPermissions字段在省略时默认为拒绝。没有权限块的代理无法调用工具、读取文件、执行二进制文件、附加MCP服务器或发出网络请求。
权限是API维度字段默认工具允许工具/拒绝工具拒绝可执行文件允许可执行文件拒绝MCP服务器允许MCP服务器拒绝技能允许技能拒绝秘密允许秘密拒绝网络网络出口拒绝FS读取FS读取FS写入FS写入拒绝批准门批准——组合是交集。项目默认值→命名配置文件→步骤级别。每个层只能缩小,从不扩大。skelm.config.ts中的命名配置文件:
默认值:{
权限配置文件:{
'github-write':{
允许可执行文件:['git'],
允许工具:['gh.'],
允许MCP服务器:['github'],