npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@ipads-skvm/skvm

v0.1.5

Published

SkVM — compile and run LLM agent skills across heterogeneous models and harnesses

Readme

SkVM

跨异构模型与 Harness 的 LLM Agent Skill 编译和运行系统

English | 中文

官网 · GitHub · 论文

npm license release last commit

SkVM 是一个面向 LLM Agent Skill 的编译与运行时系统,用来让 Skill 能在不同模型和 Harness 之间迁移与复用。它主要包含四个部分:

  • Profiling — 评测某个模型 + Harness 组合在一组预定义原语能力上的表现
  • AOT 编译 — 通过多阶段 AOT 编译器对 Skill 进行编译
  • JIT 优化 — 同时优化运行效率(JIT-boost)和 Skill 内容质量(JIT-optimize)
  • 基准测试 — 在不同任务、条件和模型下评估原始、编译后和优化后的 Skill

参考论文:SkVM: Revisiting Language VM for Skills across Heterogenous LLMs and Harnesses — https://arxiv.org/abs/2604.03088

Demo

SkVM 优化 skill 质量对比

SkVM 加速 Agent 执行

安装

# 一键安装(macOS / Linux)
curl -fsSL https://skillvm.ai/install.sh | sh

# 或通过 npm(任意支持 Node >= 18 的平台;postinstall 会自动拉取对应平台的二进制)
npm i -g @ipads-skvm/skvm

# 自检
skvm --help

安装器会将独立二进制放在 ~/.local/share/skvm/bin/skvm(并链接到 ~/.local/bin/skvm),同时内置一份隔离的 headless agent 运行时,供 skvm jit-optimize 内部使用;整个安装完全自包含,不会影响你系统中已有的任何 agent 或 CLI。

面向 Agent 的 Skill 会随安装包一起提供。把它们复制到对应 Agent Harness 的 skills 目录后,Agent 就能学会如何驱动 skvm:

# OpenClaw
cp -r ~/.local/share/skvm/skills/skvm-jit ~/.openclaw/workspace/skills/
cp -r ~/.local/share/skvm/skills/skvm-general ~/.openclaw/workspace/skills/

# Hermes Agent
cp -r ~/.local/share/skvm/skills/skvm-jit ~/.hermes/skills/
cp -r ~/.local/share/skvm/skills/skvm-general ~/.hermes/skills/
  • skvm-jit — 任务结束后收集对话日志,并提交给 skvm jit-optimize
  • skvm-general — 帮助用户驱动 profile / aot-compile / bench / proposals

快速开始

如果你是直接从源码仓库运行 SkVM,而不是使用已经安装好的二进制,那么下面的命令示例请把 skvm 替换为 bun run skvm

先配置 API Key:

export OPENROUTER_API_KEY=sk-or-...

如果你使用其他 provider,可以参考 docs/providers.md

命令行上的 model id 形式为 <provider>/<model-id>:开头的 <provider> 用来匹配 providers.routes 中的路由(skvm 会在调用后端 SDK 前剥掉这一段)。走 OpenRouter 时是三段,例如 openrouter/qwen/qwen3.5-35b-a3b;走原生 SDK(Anthropic / OpenAI 等)时是两段,例如 anthropic/claude-sonnet-4.6。下文示例统一用 <provider>/<model-id> 占位符。

1. 评测模型的原语能力

运行后会在 ~/.skvm/profiles/ 下生成对应的能力 Profile。

如果你要使用的目标模型 + adapter 组合已经包含在 skvm-data/profiles/ 提供的预构建 Profile 里,那么可以直接把这些缓存结果复制到本地 Profile 缓存目录中,跳过 skvm profile

mkdir -p ~/.skvm/profiles
cp -R skvm-data/profiles/. ~/.skvm/profiles/

当前仓库内已提供的预构建 Profile 组合如下:

  • 例如目前内置了 openrouter/qwen/qwen3.5-35b-a3bopenrouter/deepseek/deepseek-v3.2openrouter/anthropic/claude-opus-4.6 等目标的预构建 Profile。
skvm profile \
  --model=<provider>/<model-id> \
  --adapter=bare-agent

在默认 --concurrency=1 的情况下,这个示例完整运行一次通常约需 20 分钟。如果你希望更快完成,可以调大 --concurrency,让更多原语能力评测并行执行。

2. 基于 Profile 编译 Skill

编译器会根据目标模型的能力改写 Skill。你需要先准备好同一组 --model + --adapter 对应的缓存 Profile(先运行 skvm profile,或者直接使用会自动完成 profiling 的 skvm pipeline)。

skvm aot-compile \
  --skill=path/to/skill-dir \
  --model=<provider>/<model-id> \
  --adapter=bare-agent \
  --pass=1 \
  --compiler-model=<provider>/<model-id>

编译产物默认会写入:

~/.skvm/proposals/aot-compile/<adapter>/<safeModel>/<skillName>/<passTag>/

3. 用合成任务自动调优 Skill

优化器会从 Skill 本身生成任务,然后反复执行“修改 → 重跑 → 评分”的循环。

默认情况下,synthetic 模式会生成 2 个 training task 和 1 个独立的 test task。

skvm jit-optimize \
  --skill=path/to/skill-dir \
  --task-source=synthetic \
  --task-concurrency=3 \
  --target-adapter=bare-agent \
  --optimizer-model=<provider>/<model-id> \
  --rounds=1 \
  --target-model=<provider>/<model-id>

生成的 proposal 默认会写入:

~/.skvm/proposals/jit-optimize/<adapter>/<safeTargetModel>/<skillName>/<timestamp>/

4. 基于已有对话日志进行优化

这种模式不会重跑任务,而是直接基于已有日志做诊断和修改。适合做事后分析,也适合配合 skvm-jit 的任务后反馈流程使用。

skvm jit-optimize \
  --skill=path/to/skill-dir \
  --task-source=log \
  --target-adapter=bare-agent \
  --logs=path/to/session.jsonl \
  --optimizer-model=<provider>/<model-id> \
  --target-model=<provider>/<model-id>

查看、接受或拒绝 Proposal

skvm proposals list        # CLI:列出 proposal
skvm proposals show <id>   # CLI:查看 proposal 详情
skvm proposals accept <id> # CLI:接受 proposal
skvm proposals serve       # Web:打开本地审阅界面

配置

SkVM 会把所有运行时产物统一放在同一个缓存根目录下,包括缓存的 Profile、Proposal 树,以及 bench 和 compile 日志:

~/.skvm/
├── profiles/   # 缓存的目标能力 Profile
├── log/        # Profile、compile、bench 和运行时日志
└── proposals/  # AOT-compile、jit-boost、jit-optimize 产物

这个缓存目录是用户级共享的。无论你在什么目录下运行 skvm,都会共用同一份缓存;因此,在一个项目中生成的 Profile,也可以在其他项目中复用。

你可以通过以下方式覆盖缓存位置:

  • --skvm-cache=<path> 参数(单次生效)
  • SKVM_CACHE 环境变量(长期生效),例如:export SKVM_CACHE=/mnt/fast/skvm

此外,也可以分别通过 SKVM_PROFILES_DIRSKVM_LOGS_DIRSKVM_PROPOSALS_DIR 单独指定子目录位置。

数据集:skvm-data

基准测试使用的 Skill、Task 和预构建 Profile 存放在一个独立的 Git 子模块中:SJTU-IPADS/SkVM-data

如果你计划运行 skvm bench,或者想直接使用内置的 Skill / Task,请先拉取这个子模块:

git submodule update --init   # 或:git clone --recurse-submodules

执行后会得到 skvm-data/ 目录:

skvm-data/
├── skills/     # 108 个 Skill 目录(每个目录都包含一个 SKILL.md)
├── tasks/      # 216 个 Task 目录(每个目录都包含一个 task.json)
└── profiles/   # 预构建的目标能力 Profile
    ├── bare-agent/
    └── openclaw/

skvm bench 默认会从 skvm-data/ 中解析 Skill 和 Task。你也可以通过下面的方式覆盖它的位置:

  • --skvm-data-dir=<path> 参数(单次生效)
  • SKVM_DATA_DIR 环境变量(长期生效)

对于显式传入 --skill=<path>--task=<path> 的命令,则不依赖这个子模块,可以直接使用磁盘上的任意目录。

skvm-data/profiles/ 已经包含了一部分模型 + adapter 组合的预构建 Profile。如果你需要的组合已经存在,那么只需要先把它们复制到本地 Profile 缓存目录中(默认是 ~/.skvm/profiles/,也可以通过 SKVM_PROFILES_DIR 指定),就可以跳过该目标上的 skvm profile。当前内置组合可以参考上面“评测模型的原语能力”一节中的列表:

mkdir -p ~/.skvm/profiles
cp -R skvm-data/profiles/. ~/.skvm/profiles/

更多文档

  • docs/usage.md — 完整命令参考,包括 profileaot-compilerunbenchjit-optimizeproposals
  • docs/architecture.md — 子系统结构图、数据流和磁盘布局
  • docs/grade-protocols.md — 自定义 grade.py 任务评分器的协议说明
  • 论文:https://arxiv.org/abs/2604.03088

引用

如果你在研究中使用了 SkVM,请引用:

@article{chen2026skvm,
  title={SkVM: Revisiting Language VM for Skills across Heterogenous LLMs and Harnesses},
  author={Chen, Le and Feng, Erhu and Xia, Yubin and Chen, Haibo},
  journal={arXiv preprint arXiv:2604.03088},
  year={2026}
}