SkillGo,支持多用户与独立沙箱执行的 Skill 平台 一、为什么要做 SkillGo聚焦于解决创造一个私有化部署的社区Skill 获得以后在社区中怎样管理、怎样运行、怎样隔离以及怎样将skill配置成可以接入业务系统的api。这是 SkillGo 出现的原因。GitHubGitHub - Max-cu/SkillGo: A self-hosted multi-user Agent and Skill platform with isolated execution, auditable runs, and verifiable artifacts. · GitHub最新正式版本Release SkillGo v0.2.1 · Max-cu/SkillGo · GitHub二、SkillGo 是什么SkillGo 是一个面向企业私有化部署的多用户 Skill 管理与运行平台。它不是单纯的 Skill 商店也不是一个只负责安装 Skill 的命令行工具。SkillGo 希望建立一条完整链路上传 Skill ↓ 结构校验 ↓ 版本管理 ↓ 审核与发布 ↓ 用户选择并运行 ↓ 独立沙箱执行 ↓ 结果与产物交付 ↓ 发布为外部 API它主要解决四个问题Skill 的统一管理Skill 的真实运行不同用户和任务之间的环境隔离Skill 的 API 化与企业内部接入一句话概括SkillGo 让 Skill 不只是一个可以下载的文件包而是一个可以被治理、运行、复用和接入业务的能力单元。三、Skill 的统一管理当 Skill 数量逐渐增加以后仅仅把它们放在文件夹或代码仓库中是不够的。SkillGo 为此提供了完整的 Skill 生命周期管理Skill 上传包结构校验SKILL.md解析版本管理不可变发布版本私有与社区可见性管理员审核发布状态管理运行画像识别所有者与权限管理历史任务版本追踪SkillGo 兼容以顶层SKILL.md为入口的通用 Agent Skill同时支持可选的skillgo.yaml扩展配置。一个基础 Skill 可以是weather/ └── SKILL.md复杂 Skill 也可以包含脚本、依赖和参考资料document-review/ ├── SKILL.md ├── scripts/ │ └── review.py ├── references/ │ └── formatting-rules.md └── requirements.txt平台会分析 Skill 中声明或实际使用的脚本命令Python 依赖输入文件输出文件网络需求工具需求执行方式经过审核和发布的版本会被固定保存。任务运行时绑定到确切的 Skill 版本后续即使上传了新版本也不会改变历史任务的执行依据。四、Skill 不只是被管理还要能够真正运行SkillGo 和普通 Skill Hub 最大的区别是它不仅保存和展示 Skill还负责真正运行 Skill。有些 Skill 只包含文字指令可以直接交给模型执行。但更多实用 Skill 会涉及执行 Python调用 Shell 命令读取用户文件安装临时依赖调用工具执行多轮流程生成 Word、Excel、PDF 或其他文件对生成结果进行验证这些操作需要一个真实运行环境。因此SkillGo 在控制面之外实现了一套 Worker 和沙箱执行链路。当用户运行需要工具或脚本的 Skill 时平台会创建任务记录固定本次使用的 Skill 版本保存当前用户和输入文件归属由 Worker 领取任务创建本次任务专属的 Docker Volume将 Skill 和输入文件放入独立工作区创建独立任务容器在容器中执行 Agent、工具和脚本收集并验证输出文件保存任务结果销毁临时容器和 Volume。这意味着 Skill 在 SkillGo 中不是一段只供模型阅读的说明而是能够进入真实执行环境、调用工具并交付结果的完整工作单元。五、多用户之间怎样保证互不干扰企业内部部署 Skill 平台时不可能只考虑一个用户。多个用户会同时上传不同 Skill运行不同任务上传内部文件生成任务产物创建 API Endpoint查看自己的历史记录如果只使用一个公共工作目录就容易出现文件混用、任务覆盖和数据越权。SkillGo 使用两层隔离解决这个问题。第一层用户资源隔离SkillGo 中的以下资源都有明确的所有者Skill会话附件任务输入文件生成产物API Endpoint后端 API 查询资源时会同时校验当前用户和对象归属。这不是简单地在前端隐藏其他人的菜单而是在数据库查询和接口层限制访问。文件存储路径也会按照用户和任务划分workspaces/{user_id}/{conversation_id}/... job-inputs/{user_id}/{job_id}/... job-artifacts/{user_id}/{job_id}/...第二层任务级沙箱隔离SkillGo 不会给每个用户永久运行一台虚拟机而是采用更细粒度的任务隔离每次 Skill 任务的每次执行尝试都创建一套独立沙箱。例如用户 A ├── 任务 A1 → Volume A1 容器 A1 └── 任务 A2 → Volume A2 容器 A2 用户 B └── 任务 B1 → Volume B1 容器 B1不同任务之间不会共享可写文件系统/workspace/tmp临时依赖进程状态输入文件生成产物即使同一个用户并发运行两个 Skill这两个任务也拥有各自独立的执行环境。因此SkillGo 实际实现的是用户级资源隔离 任务级运行环境隔离。六、使用 Docker 和 gVisor 运行 SkillSkillGo 的完整部署模式面向 Linux 服务器并支持使用 gVisor 的runsc作为 Docker Runtime。gVisor 是 Google 开源的容器沙箱技术。在 SkillGo 中执行关系如下SkillGo Worker ↓ Docker SDK ↓ Docker Container ↓ runtimerunsc gVisor ↓ Skill 任务进程每个 Skill 任务容器还会应用以下限制使用非 root 用户根文件系统只读独立可写工作区独立/tmp移除 Linux Capabilities启用no-new-privileges限制 CPU限制内存限制进程数量默认关闭任务网络不挂载 Docker Socket不提供数据库连接不提供平台 JWT Secret不向任务容器暴露模型 API KeyWorker 只会把本次任务选择的 Skill 和输入文件放入独立 Volume不会把平台完整存储目录挂载到任务容器。这使得不同用户运行 Skill 时不会共享工作目录和进程环境。七、将配置好的 Skill 发布为 API企业内部完成一个 Skill 的配置、审核和验证以后往往不希望它只能在网页中运行。其他系统可能也需要调用同一项能力例如OA 系统文档管理系统数据平台企业内部工作流审批系统研发平台业务后台因此SkillGo 支持把已发布的 Skill 版本部署成 API Endpoint。平台根据 Skill 的执行方式提供两种接口。指令型 Skill同步 API适合不需要独立沙箱文件任务的 SkillPOST /api/v1/invoke/{slug}调用方提交 JSON 数据平台同步返回结构化结果和run_id。沙箱型 Skill异步任务 API适合需要上传文件、运行脚本和生成产物的 SkillPOST /api/v1/workflow-endpoints/{slug}/jobs调用示例curl -X POST https://your-skillgo.example/api/v1/workflow-endpoints/document-review/jobs \ -H X-SkillGo-Key: $SKILLGO_API_KEY \ -H Idempotency-Key: request-001 \ -F file./input.docx \ -F instruction请执行文档校对并生成结果文件接口返回任务 ID 后调用方可以继续查询任务状态取消任务获取执行结果下载生成产物每个 Endpoint 使用独立 API Key。密钥完整内容只会在创建或轮换时返回一次数据库仅保存密钥前缀和 SHA-256 摘要。外部 API 创建的任务不会绕过平台原有的用户归属和沙箱机制。它仍然会绑定 Endpoint 所有者固定 Skill 版本创建独立任务进入独立沙箱验证输出文件记录执行过程这使企业可以先在 SkillGo 网页中配置和验证 Skill再把同一项能力接入现有业务系统。八、为什么适合企业私有化部署SkillGo 从一开始就不是按照公共 SaaS 工具设计的而是面向企业内部部署场景。完整平台可以部署在企业自己的 Linux 服务器中包括Web 前端FastAPI 控制面PostgreSQLSandbox WorkerDockergVisor文件存储模型连接配置企业可以连接自己的 OpenAI-compatible 模型服务。用户上传的 Skill、附件、任务记录和生成产物都保存在自己的实例中。平台支持成员、管理员和唯一超级管理员管理员注册审核Skill 发布审核用户资源归属模型连接管理API Key 管理审计记录数据库迁移备份与恢复版本升级存储生命周期管理对话附件、任务输入和生成产物默认保留 15 天到期后自动删除避免长期运行后文件无限堆积。管理员可以在存储管理页面查看服务器磁盘容量和不同用户的文件占用情况。九、SkillGo 的运行架构SkillGo 当前的整体执行链路如下主要组件包括用户工作台 / 外部业务系统 ↓ React TypeScript ↓ FastAPI 控制面 ↓ PostgreSQL 任务与资源记录 ↓ Sandbox Worker 领取任务 ↓ 独立 Docker Volume ↓ gVisor runsc 任务容器 ↓ Agent 执行 Skill ↓ 产物验证与持久化 ↓ 网页下载 / API 返回控制面负责用户身份权限检查Skill 管理版本管理任务创建Endpoint 管理审计记录Worker 负责任务租约模型编排容器生命周期工具执行产物收集结果验证任务容器只负责运行当前 Skill不拥有平台控制权限。十、技术栈层级技术前端React、TypeScript、Vite、Nginx后端Python 3.12、FastAPI、Pydantic、SQLAlchemy数据库PostgreSQL开发环境支持 SQLite数据库迁移Alembic身份认证JWT、Argon2模型接入OpenAI-compatible API任务调度数据库行锁、任务租约、心跳与失效恢复沙箱运行Docker SDK、独立 Volume、gVisorrunsc前端动画GSAP部署Docker Compose自动化测试pytest、TypeScript、Vite、GitHub Actions十一、快速体验基础模式基础模式可以预览 SkillGo 界面、用户管理和普通对话不包含完整沙箱 Worker。git clone https://github.com/Max-cu/SkillGo.git cd SkillGo git checkout v0.2.1 cp .env.example .env启动前需要编辑.env至少替换PostgreSQL 密码JWT Secret初始超级管理员邮箱初始超级管理员密码然后执行docker compose up -d --build默认访问地址http://127.0.0.1:8080完整沙箱模式完整模式需要LinuxDocker EngineDocker Compose v2gVisorrunsc配置.env和deploy/ecs.env后执行docker compose \ --env-file .env \ --env-file deploy/ecs.env \ --profile build-only \ build sandbox-runtime docker compose \ --env-file .env \ --env-file deploy/ecs.env \ --profile sandbox \ up -d --build完整部署文档SkillGo/deploy/README.md at main · Max-cu/SkillGo · GitHub十二、SkillGo 适合哪些场景SkillGo 适合需要统一管理和运行 Skill 的团队或企业例如企业内部 Skill 中心私有化 Agent 能力平台文档处理与审核平台数据处理 Skill 平台研发自动化工具平台多用户 AI 工作台AI 能力 API 网关将已有 Skill 接入业务系统需要隔离运行第三方 Skill 的场景如果只是搜索或下载 Skill现有 Skill Hub 已经能够很好地解决问题。但如果你还需要管理 Skill审核 Skill固定 Skill 版本让多个用户运行 Skill保证不同任务环境独立交付真实生成的文件将 Skill 发布成 API在企业内部私有化部署那么这正是 SkillGo 想解决的问题。十三、写在最后SkillGo 的出发点并不是再做一个 Skill Hub。现有生态已经有很多优秀的 Skill 发现、分享和安装工具。SkillGo 希望补齐的是 Skill 被发现和安装之后的下一段链路怎样统一管理 Skill怎样让 Skill 真正运行怎样让不同用户和任务互不干扰以及怎样把验证过的 Skill 接入企业业务。这也是 SkillGo 最核心的定位一个支持多用户管理、任务级独立沙箱运行和 Skill API 化的私有化平台。项目已经正式开源并发布了正式版本 v0.2.1。GitHubGitHub - Max-cu/SkillGo: A self-hosted multi-user Agent and Skill platform with isolated execution, auditable runs, and verifiable artifacts. · GitHub正式 ReleaseRelease SkillGo v0.2.1 · Max-cu/SkillGo · GitHub如果你正在寻找一套能够管理并真正运行 Skill 的私有化功能平台欢迎体验 SkillGo。如果项目对你有帮助也欢迎点一个 ⭐ Star或者提交 Issue 分享你的使用反馈。