MCPcopy Index your code
hub / github.com/Geeksfino/openskills

github.com/Geeksfino/openskills @python-v0.5.0

Chat with this repo
repository ↗ · DeepWiki ↗ · release python-v0.5.0 ↗ · + Follow
746 symbols 2,145 edges 61 files 162 documented · 22% updated 29d ago★ 62
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

OpenSkills - 让你的Agent获得Skills

English | 中文

一个支持双沙箱方案Claude Skills 兼容运行时macOS seatbelt 用于原生 Python 和 Shell 脚本执行(主要方式),加上实验性的基于 WASM 的沙箱用于跨平台安全。OpenSkills 实现了 Claude Code Agent Skills 规范,为任何智能体框架提供安全、灵活的运行时来执行技能。

设计理念

OpenSkills 与 Claude Skills 100% 语法兼容,这意味着任何遵循 Claude Skills 格式(带有 YAML 前置元数据的 SKILL.md)的技能都可以在 OpenSkills 上运行。OpenSkills 的独特之处在于其双沙箱架构

  • macOS seatbelt 沙箱(主要方式):用于原生 Python 和 Shell 脚本执行 - 生产就绪,完全支持
  • WASM/WASI 沙箱(实验性):提供跨平台安全性和一致性 - 面向早期采用者

主要执行模型:通过 macOS seatbelt 的原生 Python 和 Shell 脚本(计划支持 Linux seccomp)。这是推荐的生产就绪方法,可与完整的 Python 生态系统和原生工具配合使用。

实验性 WASM 支持:WASM 沙箱可供希望探索跨平台确定性执行的开发者使用,但使用 OpenSkills 并不需要它。大多数技能使用原生脚本即可完美运行。

OpenSkills 可以集成到任何智能体框架(LangChain、Vercel AI SDK、自定义框架)中,为智能体提供 Claude 兼容的技能访问能力。

核心设计原则

  1. 100% 语法兼容性:OpenSkills 使用与 Claude Skills 完全相同的 SKILL.md 格式来读取和执行技能。技能可以在 Claude Code 和 OpenSkills 之间共享,无需修改。

  2. 双沙箱架构:OpenSkills 结合了 macOS seatbelt(主要方式)与实验性的 WASM/WASI 0.3 沙箱:

  3. macOS Seatbelt(主要方式):原生 Python 和 Shell 脚本执行,具有操作系统级别的沙箱隔离 - 生产就绪,完整生态系统支持
  4. WASM/WASI(实验性):跨平台安全性、基于能力的权限、内存安全、确定性执行 - 面向早期采用者
  5. 自动检测:运行时根据技能类型自动选择合适的沙箱
  6. 原生优先:大多数技能使用原生脚本;WASM 是特定用例的可选方案

  7. 原生脚本优先:OpenSkills 优先考虑原生 Python 和 Shell 脚本执行,这提供了对完整 Python 生态系统和原生工具的访问。WASM 编译作为实验性选项,适用于需要跨平台确定性的特定用例。

目标用例

OpenSkills 专为需要 Claude 兼容技能的任何智能体框架而设计:

  • 智能体框架集成:可与 LangChain、Vercel AI SDK、自定义框架或任何需要工具式功能的系统配合使用
  • 企业智能体:由受信任的开发人员开发的内部技能
  • 原生脚本:使用 Python 和 Shell 脚本的主要执行模型,具有操作系统级别的沙箱
  • 跨平台原生:macOS seatbelt(生产环境),Linux seccomp(计划中)
  • 实验性 WASM:用于需要确定性的特定用例的可选 WASM 执行
  • 安全性和可审计性:两种沙箱方法都提供强大的隔离和审计日志记录

推荐方法:大多数技能使用原生 Python 和 Shell 脚本。WASM 可用于实验性用例,但不是必需的。

限制

当前限制

  1. 非 macOS 平台上的原生脚本
  2. 原生 Python 和 Shell 脚本仅在 macOS 上支持(seatbelt)
  3. Linux seccomp 支持正在规划中

  4. WASM 支持(实验性)

  5. WASM 沙箱是实验性的,不是主要的执行方法
  6. 需要构建工作流:JavaScript/TypeScript 技能必须在执行前编译为 WASM 组件
  7. 有限的原生库支持:原生 Python 包、Shell 工具等在 WASM 中无法工作
  8. 需要 WASI 兼容性:代码必须使用 WASI API,而不是原生操作系统 API

建议:生产技能使用原生 Python 和 Shell 脚本。WASM 可用于实验性用例,但不是必需的。

路线图

OpenSkills 将在保持其原生优先方法的同时不断发展以解决限制:

  1. Linux 原生脚本:计划支持 Linux seccomp 以完成跨平台原生沙箱(macOS seatbelt 已经生产就绪)。

  2. WASM 改进(实验性):继续开发 WASM 支持,用于需要确定性和跨平台一致性的特定用例。

  3. 增强的工具:为原生脚本和 WASM 编译提供更好的开发工具和模板。

特性

  • 100% Claude Skills 兼容:完整支持 SKILL.md 格式
  • 🔒 双沙箱架构:macOS seatbelt(主要方式)+ 实验性 WASM/WASI 0.3
  • 🧰 原生脚本支持:通过 seatbelt 在 macOS 上执行 Python 和 Shell 脚本(生产就绪)
  • 🤖 任何智能体框架:与 LangChain、Vercel AI SDK 或自定义框架集成
  • 🚀 预构建工具:为 TS/Python 提供即用型工具定义(减少约 200 行代码)
  • 📊 渐进式披露:高效的分层加载(元数据 → 指令 → 资源)
  • 🔌 多语言绑定:Rust 核心,提供 TypeScript 和 Python 绑定
  • 🛡️ 基于能力的安全性:通过 seatbelt 配置文件实现细粒度权限(以及实验性 WASM 的 WASI)
  • 🏗️ 构建工具openskills build 用于将 TS/JS 编译为 WASM 组件(实验性)
  • 🌐 跨平台原生:macOS seatbelt(生产环境),Linux seccomp(计划中)
  • 📁 工作空间管理:内置沙箱化工作空间用于文件 I/O 操作

快速开始

安装

# Rust(从源码)
git clone https://github.com/Geeksfino/openskills.git
cd openskills

# 初始化子模块(测试和示例需要)
git submodule update --init --recursive

cd runtime
cargo build --release

# TypeScript
npm install @finogeek/openskills

# Python
pip install finclip-openskills
# 注意:预构建的 wheel 包仅适用于 macOS 和 Linux。
# Windows 用户需要从源码构建:git clone https://github.com/Geeksfino/openskills.git && cd openskills/bindings/python && pip install maturin && maturin develop

构建技能

OpenSkills 使用插件化构建系统将 JavaScript/TypeScript 编译为 WASM。系统支持多个构建后端(插件),您可以选择最适合您需求的编译器。

插件系统架构: - 插件:处理编译的模块化构建后端(例如:javyquickjsassemblyscript) - 自动检测:未指定插件时,系统按顺序尝试可用插件,直到找到一个可用的 - 插件选择:通过 --plugin 标志或 .openskills.toml 配置文件显式选择

新用户推荐quickjs 插件(设置最简单 - 只需运行下面的设置脚本)

首次设置(构建技能前必需):

运行设置脚本以安装构建工具并下载依赖:

# 这将:
# - 下载 WASI 适配器
# - 安装 javy CLI(如果可用则下载预构建二进制文件)
# - 安装 wasm-tools
# - 检查可选工具(AssemblyScript)
./scripts/setup_build_tools.sh

构建技能

# 从 TypeScript/JavaScript 构建技能
cd my-skill
openskills build

# 自动检测:按顺序尝试插件(javy → quickjs → assemblyscript)
# 直到找到一个可用且具有所有依赖项的插件

显式选择插件

openskills build --plugin quickjs       # 推荐:设置最简单
openskills build --plugin javy          # 需要 javy plugin.wasm 文件
openskills build --plugin assemblyscript # 需要 asc 编译器
openskills build --list-plugins         # 显示所有可用插件及其状态

插件对比: - quickjs(推荐):设置最简单 - 只需运行设置脚本。使用 javy CLI + wasm-tools。支持 WASI 0.3。 - javy:需要构建 javy plugin.wasm 文件。使用 javy-codegen 库。传统支持。 - assemblyscript:高性能的类似 TypeScript 的语言。需要 asc 编译器。

替代方案:javy 插件设置(如果您更喜欢默认的 javy 插件):

如果您想使用 javy 插件而不是 quickjs,您需要构建 javy 插件:

# 构建 javy 插件(一次性设置)
./scripts/build_javy_plugin.sh

# 导出插件路径(或添加到您的 shell 配置文件中)
export JAVY_PLUGIN_PATH=/tmp/javy/target/wasm32-wasip1/release/plugin_wizened.wasm

配置文件(可选):在技能目录放置 .openskills.tomlopenskills.toml

[build]
plugin = "quickjs"  # 或 "assemblyscript"

# 插件选项通常自动检测
# [build.plugin_options]
# adapter_path = "~/.cache/openskills/wasi_preview1_adapter.wasm"

插件系统工作原理: 1. 插件选择:您可以通过 --plugin 标志、配置文件指定插件,或让系统自动检测 2. 自动检测:未指定插件时,系统按顺序尝试已注册的插件,直到找到一个: - 可用(具有所有必需的依赖项) - 支持源文件扩展名(.ts、.js 等) 3. 插件执行:每个插件处理完整的编译管道: - TypeScript 转译(如需要) - JavaScript/TypeScript → WASM 核心模块 - WASM 核心 → WASI 0.3 组件(用于 quickjs/assemblyscript) 4. 自动设置:QuickJS/AssemblyScript 插件在需要时自动下载 WASI 适配器 5. 配置:可以通过 .openskills.toml--plugin-option 标志配置插件

查看 构建工具指南 了解有关构建过程和插件机制的详细信息。

使用技能

use openskills_runtime::{OpenSkillRuntime, ExecutionOptions};
use serde_json::json;

// 从标准位置发现技能
let mut runtime = OpenSkillRuntime::new();
runtime.discover_skills()?;

// 执行技能
let result = runtime.execute_skill(
    "my-skill",
    ExecutionOptions {
        timeout_ms: Some(5000),
        input: Some(json!({"input": "data"})),
        ..Default::default()
    }
)?;

查看 开发者指南 获取详细的使用示例。

与智能体框架集成

OpenSkills 可与任何智能体框架配合使用,为智能体提供 Claude 兼容的技能访问。以下是一些示例:

LangChain (TypeScript/Python)

import { OpenSkillRuntime } from "@finogeek/openskills";
import { DynamicStructuredTool } from "@langchain/core/tools";

const runtime = OpenSkillRuntime.fromDirectory("./skills");
runtime.discoverSkills();

const tool = new DynamicStructuredTool({
  name: "run_skill",
  schema: z.object({ skill_id: z.string(), input: z.string() }),
  func: async ({ skill_id, input }) => {
    const result = runtime.executeSkill(skill_id, { input });
    return result.outputJson;
  },
});

Vercel AI SDK

import { OpenSkillRuntime } from "@finogeek/openskills";
import { tool } from "ai";

const runtime = OpenSkillRuntime.fromDirectory("./skills");
const runSkill = tool({
  inputSchema: z.object({ skill_id: z.string(), input: z.string() }),
  execute: async ({ skill_id, input }) => {
    return runtime.executeSkill(skill_id, { input }).outputJson;
  },
});

查看 examples/agents 获取与 LangChain、Vercel AI SDK 等的完整集成示例。

架构

OpenSkills 使用 Rust 核心运行时和语言绑定:

┌────────────────────┐
│  您的应用程序      │
│  (TS/Python/Rust)  │
└──────────┬──────────┘
           │
    ┌──────▼──────┐
    │   绑定层    │  (napi-rs / PyO3)
    └──────┬──────┘
           │
    ┌──────▼──────┐
    │  Rust 核心  │  (openskills-runtime)
    └──────┬──────┘
           │
    ┌──────▼──────┐
    │   执行层    │  (WASM/WASI 0.3 + macOS seatbelt)
    └─────────────┘

执行模型

  1. 技能发现:扫描目录中的 SKILL.md 文件
  2. 渐进式加载:按需加载元数据 → 指令 → 资源
  3. 执行:在 Wasmtime 中运行 wasm/skill.wasm 或通过 macOS seatbelt 运行原生 .py/.sh
  4. 权限执行:从 allowed-tools 映射能力到 WASM 或 seatbelt
  5. 审计日志:所有执行都记录输入/输出哈希

OpenSkills 的独特之处

OpenSkills 是唯一结合以下特性的运行时:

  1. WASM/WASI 沙箱:具有基于能力权限的跨平台安全性
  2. macOS Seatbelt 沙箱:具有操作系统级别隔离的原生 Python 和 Shell 脚本执行
  3. 自动检测:运行时自动为每个技能选择合适的沙箱
  4. 智能体框架无关:可与任何智能体框架配合使用(LangChain、Vercel AI SDK、自定义)

这种双重方法意味着您将获得: - 原生灵活性:通过 seatbelt 获得完整的 Python 生态系统和原生工具(主要方式) - 实验性 WASM:用于特定用例的跨平台确定性(可选) - 安全性:两种沙箱方法都提供强大的隔离 - 兼容性:100% 兼容 Claude Skills 规范

WASM 支持:长期愿景

状态:WASM 沙箱是实验性的,不是主要的执行方法。大多数技能使用原生 Python 和 Shell 脚本即可完美运行。

为什么我们支持 WASM(长期)

虽然原生脚本是我们的主要执行模型,但我们正在为特定用例投资 WASM 支持,在这些用例中它提供独特的价值。以下是我们对 WASM 角色的观点:

WASM 擅长什么(目前)

确定性:相同输入 → 相同输出,对审计、重放和合规性至关重要
快速启动:毫秒级启动时间,非常适合频繁调用的智能体技能
设计上的强隔离:除非明确暴露,否则无系统调用,通过 WASI 实现基于能力的访问
可移植性:在 macOS、Linux、Windows 上执行完全相同
窄攻击面:无 Shell,无 fork 炸弹,无 ptrace 漏洞利用

最适合:策略逻辑、编排、验证、评分、推理粘合剂和确定性工作流。

WASM 不擅长什么(短期内也不会)

完整 Python 生态系统:NumPy、SciPy、pandas、PyTorch 依赖原生扩展、BLAS、CUDA
GPU 和硬件加速:实验性、脆弱、不符合监管要求
操作系统原生行为:文件监视器、共享内存技巧、复杂 IPC
传统技能:许多假设 Python + 操作系统能力

您无法回避这些限制。 这就是为什么我们优先考虑生产环境使用原生脚本。

正确的思维模型

Docker 是操作系统边界。WASM 是语言边界。

它们是互补的,而非竞争的

┌─────────────────────────────┐
│ 智能体运行时                │
│                             │
│  ┌───────────────────────┐ │
│  │ WASM 技能沙箱         │ │ ← 实验性:逻辑、策略、编排
│  │  - 确定性             │ │
│  │  - 可审计             │ │
│  │  - 快速启动           │ │
│  └───────────────────────┘ │
│             │               │
│     委托调用                │
│             ▼               │
│  ┌───────────────────────┐ │
│  │ 原生技能沙箱           │ │ ← 主要方式:Python、ML、量化、原生工具
│  │  - Python              │ │
│  │  - ML / 量化            │ │
│  │  - Seatbelt/seccomp    │ │
│  └───────────────────────┘ │
└─────────────────────────────┘

WASM 是: - 始终可用(实验性) - 需要确定性的特定用例的默认选择 - 值得信赖的逻辑和策略执行

原生是: - 主要执行模型 - 完整生态系统访问所必需 - 通过操作系统沙箱严格控制

WASM 是 Docker 的替代品吗?

不是。也不应该是。

  • Docker = 进程隔离、文件系统虚拟化、网络命名空间、cgroups
  • WASM = 指令沙箱、能力运行时

它们解决不同的问题。试图用 WASM 替代 Docker 会导致复杂性、失望和变通方案。

安全性:WASM 单独"足够强大"吗?

WASM 是一个强大的沙箱,但不是完整的沙箱。

WASM 隔离良好的方面: - ✅ 内存安全(无任意内存访问) - ✅ CPU 指令(无特权操作) - ✅ 除非暴露,否则无系统调用 - ✅ 确定性执行

WASM 无法完全单独控制的方面: - ❌ 资源耗尽(CPU 时间、内存增长、无限循环)- 需要主机强制限制 - ❌ 主机漏洞 - 如果 WASM 运行时存在漏洞,没有第二道防线 - ❌ 通过主机函数的原生逃逸 - 文件系统、网络、加密函数在原生环境中运行

行业现实:即使是严肃的系统也分层使用沙箱: - Cloudflare Workers:WASM + 操作系统隔离 - Fastly Compute@Edge:WASM + VM - 生产环境中的 Wasmtime:WASM + seccomp - Deno:V8 + 操作系统沙箱

没有人在高信任边界上裸运行 WASM。

金融特定视角

对于金融智能体,您关心:

需求 原生脚本 WASM(实验性)
可审计性 ⭐⭐⭐⭐ ⭐⭐⭐⭐⭐
确定性 ⭐⭐⭐ ⭐⭐⭐⭐⭐
策略执行 ⭐⭐⭐⭐ ⭐⭐⭐⭐⭐
传统量化代码 ⭐⭐⭐⭐⭐
ML 生态系统 ⭐⭐⭐⭐⭐

答案不是"WASM 或否"。

答案是:原生脚本优先,必要时使用 WASM。

长期可行性(5-10 年展望)

WASM 将: - 获得更好的 WASI 支持 - 获得更好的语言支持 - 成为标准控制层

WASM 不会: - 替代 Python ML 堆栈 - 替代操作系统级沙箱 - 成为"运行任何东西"

将其作为通用运行时下注是有风险的。
将其作为核心逻辑沙箱下注是明智的。

我们的建议

是的,长期支持 WASM/WASI - 用于特定用例
不,不要仅依赖 WASM - 原生脚本是主要方式
将 WASM 视为控制平面 - 逻辑、策略、编排
为原生代码分层操作系统沙箱 - 完整生态系统访问
不要承诺"Docker 替代品" - 它们解决不同问题

一句话来锚定我们的架构:

"WASM 给我们确定性控制;操作系统沙箱给我们实用能力。"

这给我们带来: - 可信度:对限制诚实 - 安全性:深度防御 - 灵活性:适合的工具 - 未来可选性:可以随着 WASM 成熟而发展

对比:OpenSkills vs Claude Code

方面 Claude Code OpenSkills
SKILL.md 格式 ✅ 完整支持 ✅ 100% 兼容
沙箱 seatbelt/seccomp seatbelt (macOS, 主要方式) + WASM/WASI 0.3 (实验性)
跨平台 操作系统特定 原生 macOS(生产环境),Linux 计划中;WASM 相同(实验性)
脚本执行 原生(Python、shell) 原生(macOS,主要方式)+ WASM 组件(实验性)
需要构建 原生脚本不需要。WASM 需要(实验性,TS/JS → WASM)
原生 Python ✅ 支持 ✅ macOS (seatbelt)
Shell 脚本 ✅ 支持 ✅ macOS (seatbelt)
智能体框架 Claude Desktop/Claude Agent SDK 任何框架
用例 桌面用户,任意技能 企业智能体,任何智能体框架

项目结构

openskills/
├── runtime/              # Rust 核心运行时
│   ├── src/
│   │   ├── build.rs      # TS/JS → WASM 构建工具
│   │   ├── wasm_runner.rs # WASI 0.3 执行
│   │   ├── native_runner.rs # Seatbelt 执行 (macOS)
│   │   └── ...
│   └── BUILD.md          # 构建工具文档
├── bindings/             # 语言绑定
│   ├── ts/              # TypeScript (napi-rs)
│   └── python/           # Python (PyO3)
├── docs/                 # 文档
│   ├── developers.md     # 开发者指南
│   ├── contributing.md   # 贡献指南
│   ├── architecture.md   # 架构详情
│   └── spec.md           # 规范
├── examples/             # 示例技能
└── scripts/              # 构建脚本

文档

构建

# 克隆并初始化子模块(用于测试和示例)
git clone https://github.com/Geeksfino/openskills.git
cd openskills
git submodule update --init --recursive

# 构建所有内容
./scripts/build_all.sh

# 仅构建运行时
cd runtime
cargo build --release

# 构建绑定
./scripts/build_bindings.sh

子模块

examples/claude-official-skills 目录是一个指向 anthropics/skills 的 git 子模块。这提供了对官方 Claude Skills 的访问,用于测试和参考。

  • 初始克隆:使用 git clone --recursive <url> 或在克隆后运行 git submodule update --init --recursive
  • 更新cd examples/claude-official-skills && git pull && cd ../.. && git add examples/claude-official-skills && git commit
  • 测试:如果未初始化子模块,测试套件会优雅地跳过测试

状态

  • Rust 运行时:完全功能
  • TypeScript 绑定:正常工作
  • Python 绑定:正常工作(需要 Python ≤3.13)
  • 原生脚本:Seatbelt 沙箱(macOS,生产就绪)
  • 🧪 WASM 执行:WASI 0.3 组件模型(实验性)
  • 🧪 构建工具openskills build 用于 TS/JS → WASM 编译(实验性)
  • 🚧 原生脚本(Linux):规划中的 Seccomp 支持

相关项目

  • FinClip ChatKit: 用于构建 AI 驱动的聊天体验的移动端 SDK。为 iOS 和 Android 提供生产就绪的聊天 UI 组件,支持AG-uI、 MCP-UI 和 OpenAI Apps SDK 集成。非常适合需要 OpenSkills 运行时能力和精美聊天界面的移动智能体应用开发者。

许可证

Apache-2.0

English | 中文

Extension points exported contracts — how you extend this code

Core symbols most depended-on inside this repo

Shape

Function 441
Method 191
Class 80
Interface 21
Enum 13

Languages

Rust86%
TypeScript9%
Python5%

Modules by API surface

runtime/src/lib.rs54 symbols
bindings/ts/src/lib.rs50 symbols
bindings/python/src/lib.rs38 symbols
runtime/tests/spec_conformance_tests.rs29 symbols
runtime/src/manifest.rs29 symbols
runtime/src/executor.rs26 symbols
bindings/python/openskills_tools.py26 symbols
runtime/src/permission_callback.rs25 symbols
runtime/src/validator.rs24 symbols
runtime/src/registry.rs24 symbols
runtime/tests/host_policy_tests.rs22 symbols
runtime/src/host_policy.rs22 symbols

For agents

$ claude mcp add openskills \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page