SkillForge

by HaddenHunter (community) · Claude Desktop, Claude Code, OpenCode, Cursor, Gemini CLI, любой MCP-клиент, Windows, macOS, Linux

MCP MCP Servers Open Source v0.1.0 · 04.08.2026 активный

«Версия навыков» npm для AI coding-агентов (Claude Code / Cursor / Codex / Gemini CLI) — local-first, модель-агностичный, нативная поддержка MCP.

v0.1.0
04.08.2026 current

Установка
curl -sSL https://skillforge.c8.fit/dist/bin/skillforge-darwin-arm64-0.1.0.tar.gz -o /tmp/sf.tar.gz
curl -sSL https://skillforge.c8.fit/dist/bin/skillforge-darwin-arm64-0.1.0.tar.gz.sha256
sha256sum /tmp/sf.tar.gz
tar xzf /tmp/sf.tar.gz && sudo install skillforge-*/skillforge /usr/local/bin/skillforge
skillforge --help
показать оригинал переведено ИИ

SkillForge

Документация на английском

Этот репозиторий содержит публичный контент SkillForge. Исходный код веб-интерфейса, скрипты сборки, реализации core/registry и Rust CLI находятся в приватном репозитории HaddenHunter/SkillForge-Core. Ветка main этого репозитория хранит только исходные файлы контента (списки навыков, документацию, конфигурации зеркал и т.д.); доступный статический сайт собирается Actions из репозитория Core, затем кросс-репозиторно отправляется в ветку gh-pages этого репозитория и обслуживается GitHub Pages.

SkillForge — это локально-ориентированная среда выполнения навыков для AI Coding Agent. Она определяет навыки как проверяемые, композитные и экспортируемые в MCP независимые единицы, позволяя агентам повторно использовать возможности подобно "установке пакетов", одновременно ограничивая область чтения/записи через белый список песочницы.

Адреса для доступа

  • https://skillforge.c8.fit (GitHub Pages · исходная ветка: gh-pages / корневой каталог)
  • Также можно напрямую обращаться к https://HaddenHunter.github.io/SkillForge/ (CNAME разрешается в первый адрес)

📦 Готовые к использованию артефакты в этом репозитории (публичные, без ограничений доступа)

В этом репозитории нет исходного кода, но сохраняются все готовые артефакты — бинарные исполняемые файлы + собранные статические страницы фронтенда, всё доступно для просмотра и загрузки в публичном репозитории:

1) Собранные статические артефакты фронтенда (Registry Web UI)

Расположение: корневой каталог ветки gh-pages этого репозитория, это полностью собранный продукт Next 14 с output: export:

gh-pages (root)
├── index.html   skills/  docs/  audit/  settings/   ← 18 页已预渲染 SSG
├── _next/       packages/-/   ← 3 个技能 tarball + sha256 直接直链
└── dist/bin/    ← 编译好的 CLI 二进制卡片页(见下)

Онлайн-просмотр: https://skillforge.c8.fit, сборка исходников, упаковка навыков, инъекция CNAME — всё выполняется Actions приватного репозитория Core с последующей кросс-репозиторной отправкой.

2) Собранные бинарные исполняемые файлы (Rust CLI · четыре платформы)

В публичном репозитории доступны две копии (можно скачать без авторизации): - (Рекомендуется) Прямые статические ссылки Pages: https://skillforge.c8.fit/dist/bin/ — открывается страница с карточками, 4 карточки содержат прямые ссылки на tar.gz / sha256 - GitHub Releases: https://github.com/HaddenHunter/SkillForge/releases (автоматически зеркалируется workflow release из приватного репозитория Core)

Имена файлов для четырёх платформ:

Платформа Рекомендуемые сценарии Статическая ссылка для скачивания
macOS Apple Silicon (arm64) Mac на базе M-чипов (рекомендуется) skillforge-darwin-arm64-<VERSION>.tar.gz
macOS Intel (x86_64) Mac на базе Intel skillforge-darwin-amd64-<VERSION>.tar.gz
Linux ARM64 (aarch64) ARM-серверы / Raspberry Pi skillforge-linux-arm64-<VERSION>.tar.gz
Linux AMD64 (x86_64) CI / серверы (рекомендуется) skillforge-linux-amd64-<VERSION>.tar.gz

Рядом с каждым tar.gz есть одноимённый .sha256, после скачивания выполните строгую проверку: bash curl -sSL https://skillforge.c8.fit/dist/bin/skillforge-darwin-arm64-0.1.0.tar.gz -o /tmp/sf.tar.gz curl -sSL https://skillforge.c8.fit/dist/bin/skillforge-darwin-arm64-0.1.0.tar.gz.sha256 sha256sum /tmp/sf.tar.gz tar xzf /tmp/sf.tar.gz && sudo install skillforge-*/skillforge /usr/local/bin/skillforge skillforge --help

Структура репозитория (ветка main публичного репозитория)

  • skills/: исходники навыков (skill.yml · SKILL.md · eval.md · scripts/ · references/), при сборке статических страниц из репозитория Core здесь упаковываются tarball и генерируется индекс загрузки
  • docs/: публичная документация, при сборке фиксируется в Pages через Next output: export
  • mirrors/: конфигурации белых списков зеркал навыков (опционально)
  • README*, LICENSE: файлы документации

Не добавляйте в ветку main: registry-web/, скрипты сборки Node, pnpm/pnpm-lock, .github/workflows/ с workflow деплоя. Всё это находится в репозитории HaddenHunter/SkillForge-Core в каталогах web-assets/ и .github/workflows/build-and-push-pages.yml.

Как инициировать публикацию сайта

В приватном репозитории Core:

# 1. 准备一个可写本仓库的 Deploy Key(推荐)或 PAT:
#      ssh-keygen -t ed25519 -C "sf-core->sf gh-pages" -N '' -f /tmp/sf-deploy
#    将公钥(sf-deploy.pub)添加到本仓 Settings → Deploy keys → 勾选「Allow write access」
#    将私钥(sf-deploy)添加到 SkillForge-Core 的 Secrets:SKILLFORGE_DEPLOY_KEY
# 2. 推 core main 或在 SkillForge-Core Actions → build and publish pages → Run workflow
# 3. 本仓 gh-pages 分支会收到一次新的 commit

Конфигурация Pages для этого репозитория (одноразовая настройка, уже выполнена в Settings): Source = Deploy from branch, Branch = gh-pages, Directory = /(root), Custom domain = skillforge.c8.fit, отмечено «Enforce HTTPS».

🔐 Цепочка доверенных подписей (три уровня Ed25519 + Manifest + воспроизводимая сборка)

Все публикуемые артефакты (сами статические файлы фронтенда не подписываются; но tarball навыков, tarball бинарных файлов CLI, а также манифесты обоих) подписаны одним доверенным корневым ключом Ed25519, любые изменения будут отклонены на этапе проверки.

                      [可信根]  dist/signing/root.pub  (公开 JSON,含指纹 + 公钥)
                       │  Ed25519 公钥 32B hex,私钥只在 Core 私仓 Secrets 里
                       ▼
           ┌─────────────────────────────┐
           │ 签名清单 manifests          │  ── 每个 manifest 本身也被同一根签名
           │  ├─ packages/manifest.json
           │  ├─ packages/manifest.json.sfminisig
           │  ├─ dist/bin/manifest.json
           │  └─ dist/bin/manifest.json.sfminisig
           └─────────────────────────────┘
                       │ manifest 里列 entries[]:name / rel / sha256 / blake2b512 /
                       │                         signature.file / signature.rel / signature.keyIdHex
                       ▼
         ┌──────────────────────────────────────────────────────────────────┐
         │ 每个归档本体签名 .sfminisig (minisign-like untrusted/trusted comment) │
         │  packages/-/fix-ci-0.1.0.tgz + .sfminisig
         │  packages/-/grep-ts-0.1.0.tgz + .sfminisig
         │  packages/-/doc-gen-0.1.0.tgz + .sfminisig
         │  dist/bin/skillforge-darwin-arm64-<VER>.tar.gz + .sfminisig  (4 平台)
         └──────────────────────────────────────────────────────────────────┘
  • Отпечаток доверенного корня (текущий v1): SF:c0d444ccdf461a76:H1H77scjvT0kZ47lhQWewtEGLt13hRlt6BDhm80RpHE
    • Внешняя проверка: node -e 'console.log(JSON.parse(require("fs").readFileSync("/tmp/root.pub","utf8")).fingerprint)', если отличается от указанной строки — немедленно прекратите установку
    • Ротация корня в будущем: добавление keyIdHex в signing.publicKeys[], старый корень сохраняется на 180 дней для плавного перехода
  • Формат подписи: .sfminisig в три строки = untrusted comment (временная метка/файл/keyid) + Base64("SF" | ver=1 | keyId[8] | Ed25519 detached sig[64]) + trusted comment
    • Хеш-примитивы: BLAKE2b-512 (для архивных байтов) + Ed25519 (libcrypto.sign_detached)
  • Гарантия воспроизводимой сборки: при каждом CI устанавливается SOURCE_DATE_EPOCH = git log -1 --format=%ct, упаковка tar принудительно выполняется с параметрами: bash tar --sort=name --owner=0 --group=0 --numeric-owner \ --pax-option=exthdr.name=%d/PaxHeaders/%f,delete=atime,delete=ctime \ -czf out.tar.gz source-dir/ Поэтому повторная сборка из одного коммита → sha256 tar.gz полностью идентичен.

Проверка подписи в один клик (универсально для пакетов навыков и CLI)

На любой машине с Node 22+ (macOS / Linux):

# (0) 准备根 + 工具:
curl -sSL https://skillforge.c8.fit/dist/signing/root.pub -o /tmp/root.pub
curl -sSL https://skillforge.c8.fit/dist/signing/verify-sfminisig.mjs -o /tmp/verify.mjs
npm install --no-save libsodium-wrappers-sumo

# (1) 选一个目标:
export VER=0.1.0
# 比如技能:
export NAME=fix-ci
export ARCHIVE=https://skillforge.c8.fit/packages/-/${NAME}-${VER}.tgz
# 或者 CLI:
#   export NAME=skillforge-darwin-arm64
#   export ARCHIVE=https://skillforge.c8.fit/dist/bin/${NAME}-${VER}.tar.gz

curl -sSL "$ARCHIVE"                    -o /tmp/x
curl -sSL "$ARCHIVE.sfminisig"          -o /tmp/x.sfminisig

# (2) 带外核对指纹:
node -e 'console.log(JSON.parse(require("fs").readFileSync("/tmp/root.pub","utf8")).fingerprint)'
# → 输出应为 SF:c0d444ccdf461a76:H1H77scjvT0kZ47lhQWewtEGLt13hRlt6BDhm80RpHE
#    不一致:镜像投毒 / DNS 污染,立即中止

# (3) 清单签名(技能)或 bins 清单签名(CLI):
# 技能清单:
curl -sSL https://skillforge.c8.fit/packages/manifest.json            -o /tmp/m
curl -sSL https://skillforge.c8.fit/packages/manifest.json.sfminisig   -o /tmp/m.sfminisig
# 或 CLI 清单:
#   curl -sSL https://skillforge.c8.fit/dist/bin/manifest.json          -o /tmp/m
#   curl -sSL https://skillforge.c8.fit/dist/bin/manifest.json.sfminisig -o /tmp/m.sfminisig
node /tmp/verify.mjs --file /tmp/m   --root-pub /tmp/root.pub   # → [verify] OK manifest.json keyId=…

# (4) 归档本体签名:
node /tmp/verify.mjs --file /tmp/x   --root-pub /tmp/root.pub   # → [verify] OK <name> keyId=…

# (5) 哈希交叉核对 manifest:
grep -o '"sha256":"[a-f0-9]\{64\}"' /tmp/m     # 应与 sha256sum /tmp/x 一致

# (6) 全部通过后才 install:
# 技能:skillforge install /tmp/x
# CLI:  tar xzf /tmp/x && sudo install skillforge-*/skillforge /usr/local/bin/skillforge

Генерация доверенных ключей (одноразовая настройка Secrets в приватном репозитории Core)

cd SkillForge-Core/web-assets
npm install --no-save libsodium-wrappers-sumo
node scripts/sign-generate-keypair.mjs ./secrets-tmp
# → 产出 SF_SIGNING_SK_HEX + SF_SIGNING_PK_HEX 两个文件
# 私钥 → Core 仓 Secrets: SF_SIGNING_SK_HEX
# 公钥 → Core 仓 Secrets: SF_SIGNING_PK_HEX
# (同时公钥 JSON 会在每次构建时被写到 gh-pages/dist/signing/root.pub,不要手动维护)

Скачивание CLI и пакетов навыков

  • В верхней навигации сайта выберите Download или напрямую откройте https://skillforge.c8.fit/dist/bin/ для скачивания бинарного файла CLI для соответствующей платформы (многоплатформенный Release на Rust, публикуется в Releases приватного репозитория Core)
  • На странице каждого навыка доступны три кнопки: tar.gz + sha256 + .sfminisig Ed25519 подпись (/packages/-/<name>-<version>.tgz), стандартный полный процесс описан в предыдущем разделе «🔐 Цепочка доверенных подписей → Проверка подписи в один клик».

Почему SkillForge

Многие решения для навыков агентов ограничиваются уровнем "фрагментов промптов" или "шаблонов репозиториев", не имея версионирования, зависимостей, разграничения прав и границ выполнения. SkillForge пытается восполнить эти пробелы в инфраструктуре:

  • Навыки имеют структурированный манифест: skill.yml
  • Навыки имеют границы выполнения: allow.read_paths / allow.write_paths / allow.net_hosts
  • Навыки имеют точку повторного использования: skillforge serve <skill>
  • Навыки имеют базовую линию оценки: eval.md
  • Навыки могут использоваться как локальными агентами, так и MCP-клиентами

Общая архитектурная схема

Приведённая ниже схема показывает уже реализованные в текущем репозитории узлы SkillForge, а также направления их вызовов и ключевые маршруты (подписи, аутентификация, аудит, заполнение кэша):

                    ┌───────────────────────────────────────────────────────────┐
                    │              SkillForge(本仓库已全部实现)                │
                    └───────────────────────────────────────────────────────────┘

              ┌──────────────────────┐          ┌───────────────────────────────┐
              │    MCP 客户端 /      │◀─MCP────▶│        core/ (Rust)          │
              │  Claude Code/Cursor  │  :18080  │  serve/run/validate/eval     │
              └──────────────────────┘          └───────────────────────────────┘
                                                      │
                                                      │ 技能执行 + 沙箱
                                                      ▼
                   ┌─────────────────────────────────────────────────────────────┐
                   │  skills/<name>/   skill.yml · SKILL.md · eval.md · scripts │
                   └─────────────────────────────────────────────────────────────┘
                                                      │
                                                      │ publish / sync-github / 本地索引
                                                      ▼
        ┌──────────────────────────────────────────────────────────────────────────────────────┐
        │                     registry/ (本地 CLI + 多源聚合 + 签名链 + RBAC)                   │
        │ ──────────────────────────────────────────────────────────────────────────────────── │
        │  配置: ~/.skillforge/registry/{config.json, credentials.json(0600)}                 │
        │  本地存储: <repo>/.skillforge/registry/{registry.sqlite, archives/, packages/}        │
        │  signer keygen / sign / verify   +   scope publishers/admins 白名单                   │
        │  search / info / versions / plan / install  ── 支持 --remote --sources a,b            │
        └──────────────────────────────────────────────────────────────────────────────────────┘
                      │                               │                               │
                      │ CLI --github-repo              │ CLI --remote 多源聚合          │ CLI --sign
                      ▼                               ▼                               ▼
         ┌──────────────────────┐        ┌─────────────────────────────────┐   ┌────────────────────────┐
         │   GitHub Releases    │        │   registry-service/ (Fastify)   │   │ signing: Ed25519        │
         │  tarball + .minisig  │        │ :18081 · /v1/skills/* 协议      │   │  minisig 风格文本签名    │
         └──────────────────────┘        │ + Scope RBAC + Token + Audit    │   │ 发布签 · 安装验         │
                  ▲                       │ SQLite + Storage(文件/S3 接口) │   └────────────────────────┘
                  │  sync-github          └─────────────────────────────────┘
                  │ 元数据回写本地 SQLite            │                │
                  │                                 │                │
          ┌───────┴─────────────────────────────────┼────────────────┼───────────────┐
          │                                         │                │               │
          ▼                                         ▼                ▼               ▼
 ┌─────────────────────────┐            ┌──────────────────┐  ┌──────────────┐  ┌──────────────┐
 │    归档 tar.gz + 签名   │            │  audit_log 表    │  │ Scope 白名单 │  │ API Tokens   │
 │  objects storage 抽象  │            │  publish/yank    │  │ publishers/  │  │ read/publish │
 │  FS / 未来 S3 替换      │            │  scope/token     │  │ admins       │  │ yank/admin   │
 └─────────────────────────┘            └──────────────────┘  └──────────────┘  └──────────────┘
                                                          │
                                                          ▼
                                              ┌──────────────────────────┐
                                              │   registry-web/ (Next.js)│
                                              │  :18082                  │
                                              │  ┌─ 首页 Hero + KPI     │
                                              │  ├─ 技能列表(Scope 筛选)│
                                              │  ├─ 技能详情 + 版本对比   │
                                              │  ├─ 审计日志(可过滤)   │
                                              │  └─ 协议文档页           │
                                              └──────────────────────────┘
                                                      ▲
                                                      │ 浏览器访问 + 暗色主题切换

Краткая легенда:

Модуль Точка входа Особенности
core/ cargo run -p skillforge-core -- serve <skill> Агентный цикл + песочница Seatbelt + MCP tools/call
registry/ pnpm --filter registry cli -- … Приоритет нескольких источников / маршрутизация @scope / Token 0600 / подпись и проверка
registry-service/ pnpm registry-service:dev → :18081 Выравнивание /v1/skills, проверка подписи и scope при публикации, полный аудит-лог
registry-web/ pnpm registry-web:dev → :18082 Визуальный стиль Shadcn + переключение тёмной/светлой темы + интеграция страницы документации протокола
skills/<name>/ skills/fix-ci/ / grep-ts/ / doc-gen/ Триада skill.yml + SKILL.md + eval.md + примеры скриптов

Предпросмотр интерфейса (Web UI Gallery)

Все страницы отрисованы с помощью registry-web/ Next.js 14 SSR с реальными данными + Tailwind; страницы Token / Scope / Users используют серверную аутентификацию admin Bearer.

💡 Нажмите на заголовок миниатюры в таблице, чтобы перейти на соответствующую страницу.

Страница Путь Предпросмотр Ключевые возможности
🏠 Главная / Главная Hero + ASCII/SVG-схема архитектуры, 4 KPI, избранные карточки навыков, CTA командной строки
🛒 Маркетплейс навыков /skills Маркетплейс навыков Фильтр по scope в виде чипов, строка поиска, стена карточек с чипами отзыва/подписи
📋 Детали навыка /skills/@thirdparty/code-review-agent Детали навыка Таблица версий, загрузка tarball/подписи, дайджест подписи Ed25519, сниппет команды установки, чипы зависимостей, боковая панель с метаинформацией (Scope/Source Kind/статус отзыва)
🔀 Сравнение версий /skills/@thirdparty/code-review-agent/diff Сравнение версий Выпадающие списки версий From/To, двухколоночное сравнение skill.yml + SKILL.md, подсветка удалённых/добавленных строк, потоковая распаковка tarball на сервере
🔑 Панель управления токенами /settings/tokens Панель управления токенами Выдача Bearer-токенов с 4 уровнями scope (read/publish/yank/admin), отображение префикса, мгновенное отзывание, при первой выдаче одноразовое предупреждение "хранится только хэш, невозможно восстановить"
🛡️ Рабочий процесс одобрения Scope RBAC /settings/scopes Одобрение Scope Карточки заявок издателей слева (scope/role/requester/targetKeyId/reason), очередь ожидания одобрения справа + кнопки Approve/Reject, автоматическое слияние scope_rules после одобрения, аудит-лог одобрений внизу
👥 Панель управления пользователями /settings/users Панель управления пользователями Upsert userId/displayName/email, роли (user/scope-admin/registry-admin), мягкое удаление через disabled, резервный bootstrap-admin
📜 Аудит-лог /audit Аудит-лог Логирование всех операций записи (publish/yank/token.revoke/scope.approve и др.), обратный хронологический порядок, отображение actor+resource+detail в формате JSON
📖 Документация HTTP API /docs Документация протокола Полная документация /v1/skills/*, пример multipart publish, Bearer Token, процесс проверки подписи Ed25519

Текущие границы возможностей

Чтобы избежать расхождений между документацией и реализацией, здесь чётко обозначены границы текущей версии (доступен полный локальный + удалённый MVP-контур; недостающие элементы для "промышленной платформы для организаций любого масштаба" перечислены в Roadmap):

  • Триада Registry (MVP, готова к запуску):
    • Локальный CLI: агрегация нескольких источников, аутентификация Bearer Token, Scope RBAC, цепочка публикации с подписью Ed25519, план установки и загрузка по требованию
    • Удалённый HTTP-сервис registry-service/: Fastify + SQLite + абстракция хранилища на файловой системе, полное соответствие протоколу /v1/skills, аутентификация publish/yank/scope и аудит
    • Красивый Web UI registry-web/: Next.js 14 App Router + Tailwind (стиль Shadcn), единое представление главной страницы/списка навыков/деталей навыка/аудит-лога/документации протокола
  • Цепочка дистрибуции: локальная публикация, синхронизация с GitHub Release, загрузка в удалённый registry, а также индексация и заполнение кэша между ними
  • Сервис MCP: поддерживает перечисление навыков и вызовы tools/call, пока работает в модели "один навык — одна конечная точка", в будущем может быть расширен до агрегации нескольких навыков на одном порту
  • Песочница: поддерживает логический белый список и автоматическое подключение macOS Seatbelt; если хост-среда блокирует sandbox-exec, автоматически переключается на режим логического белого списка. Песочница на уровне платформы в основном покрывает вызовы файловых инструментов, сетевые и более широкие возможности процессов ещё требуют ужесточения
  • Встроенные примеры навыков: три ключевых примера — fix-ci, grep-ts, doc-gen, покрывающие исправление CI, поиск по коду и генерацию документации; больше отраслевых навыков можно добавить по тому же шаблону

Элементы, необходимые для промышленного внедрения (подробнее в разделе Roadmap): замена бэкенда на Postgres/S3, механизм ротации ключей в стиле TUF, ускорение зеркал и прозрачный кэш, метрики Prometheus + структурированные логи, управление токенами и рабочими процессами одобрения в Web UI и др.

Структура репозитория

.
├── core/             # Rust:CLI、技能加载、模型调用、沙箱、MCP
├── registry/         # TypeScript:本地 + 多远端聚合 CLI、签名发布链、RBAC 配置
├── registry-service/ # TypeScript:可部署的远端 HTTP 服务 MVP(Fastify + SQLite + Storage 抽象)
├── registry-web/     # Next.js 14 + Tailwind:Registry Web UI
├── schemas/          # 预留:schema/协议相关资源
├── skills/           # 技能定义:skill.yml / SKILL.md / eval.md / references/
├── docs/             # 使用说明与技能编写文档
└── mirrors/          # 预留:镜像/同步相关目录

Требования к зависимостям

  • Инструментарий Rust (проект в настоящее время протестирован в среде rustc 1.85)
  • Node.js 22+
  • pnpm 9+
  • Инструмент командной строки sqlite3 (необходим для тестирования Registry)
  • Опционально: ollama для локального вызова моделей

Быстрый старт

1. Установка зависимостей

pnpm install

2. Сборка Core CLI

cargo build -p skillforge-core

Если вы хотите сразу создать релизную сборку:

cargo build --release -p skillforge-core

3. Запуск тестов

cargo test
pnpm --filter registry test

4. Валидация навыка

cargo run -p skillforge-core -- validate fix-ci

Это загрузит skills/fix-ci/skill.yml, SKILL.md, eval.md и выведет разобранный манифест в формате JSON.

5. Запуск навыка

Использование mock-ответов позволяет быстро проверить процесс без модели:

SKILLFORGE_MODEL_MOCK_RESPONSE="计划已生成" \
cargo run -p skillforge-core -- run grep-ts --task "search publish" --token-budget 400

Если Ollama уже запущен, можно использовать реальную модель:

export OLLAMA_BASE_URL=http://127.0.0.1:11434
cargo run -p skillforge-core -- run fix-ci --task "修复当前仓库的 CI 配置"

6. Предоставление навыка в виде MCP

cargo run -p skillforge-core -- serve fix-ci --port 18080

После запуска MCP HTTP-вход будет доступен по адресу http://127.0.0.1:18080/mcp.

Команды CLI

skillforge --help
skillforge run --help

Доступные команды:

  • skillforge run <skill> --task <task> [--model <name>] [--token-budget <n>]
  • skillforge serve <skill> [--port 18080]
  • skillforge validate <skill>
  • skillforge validate-all
  • skillforge eval <skill>
  • skillforge eval-all

Глобальные параметры:

  • --repo-root <path>: Указывает корневую директорию репозитория, по умолчанию — текущая директория

Конфигурация модели

Параметр model.provider в skill.yml определяет вызываемый бэкенд:

  • ollama
  • openai
  • openai-compatible

Соответствующие переменные окружения:

  • SKILLFORGE_MODEL_MOCK_RESPONSE: Включает mock-ответы, подходит для локальной отладки
  • OLLAMA_BASE_URL: По умолчанию http://127.0.0.1:11434
  • OPENAI_API_BASE: По умолчанию https://api.openai.com/v1
  • OPENAI_API_KEY: Обязателен при использовании OpenAI-совместимого интерфейса

Обзор манифеста навыка (Skill Manifest)

Каждая директория навыка должна содержать как минимум:

  • skill.yml
  • SKILL.md
  • eval.md

Пример:

name: grep-ts
version: 0.1.0
description: 在 TypeScript 代码中执行受限搜索并输出结果摘要。
adapter:
  kind: raw
origin:
  source: local
  ref_name: main
  sha: workspace
model:
  provider: ollama
  name: qwen3:8b
  max_input_tokens: 800
deps: []
tools:
  - read_file
  - list_dir
mcp:
  exposed: true
  description: 暴露 TypeScript 搜索技能给 MCP 客户端。
allow:
  read_paths:
    - registry
    - skills
  write_paths: []
  net_hosts: []
eval:
  fixtures:
    - registry/src

В skill.yml включён параметр deny_unknown_fields, то есть любые неописанные поля вызовут ошибку валидации.

Примеры навыков

  • fix-ci: Чтение и исправление .github/workflows/ci.yml
  • grep-ts: Поиск кода TypeScript в ограниченных директориях
  • doc-gen: Обновление документации репозитория

Эти навыки служат как примерами, так и интеграционными тестами для текущих возможностей runtime.

Registry CLI + Удалённый сервис + Веб-интерфейс

В директории registry/ реализован CLI для локального и мульти-источникового удалённого реестра (включая явную регистрацию, планирование установки, список версий, отзыв версий, агрегацию источников и аутентификацию с помощью Bearer Token); registry-service/ — это запускаемый MVP-сервис на Fastify, соответствующий протоколу /v1/skills, используемому CLI; registry-web/ — красивый веб-интерфейс на Next.js + Tailwind (стиль Shadcn).

Уровни возможностей:

  • Мульти-источниковая агрегация CLI + аутентификация (config.ts + index.ts + cli.ts)
    • Управление источниками: registry add / remove / list / use / login / logout / config-path (source — алиас для registry)
    • Запросы/установка из разных источников: search / info / versions / plan / install по умолчанию работают только с локальными данными; с флагом --remote выполняется мульти-источниковая агрегация (с дедупликацией по приоритету и статусу yanked); --sources a,b задаёт белый список
    • Публикация/отзыв: publish (с опциональной синхронизацией через --github-repo), yank
    • Директории данных:
      • Проектная .skillforge/registry/: registry.sqlite (индекс), packages/ (снимки пакетов), archives/ (tar.gz)
      • Пользовательская ~/.skillforge/registry/: config.json (публичные источники/scope), credentials.json (Bearer Token, автоматически устанавливается chmod 0600 + предупреждение при проверке списка)
    • Подписи и проверка: registry/src/signing.ts предоставляет keygen / sign / verify / чтение-запись minisig для Ed25519; publish поддерживает --sign для автоматической подписи и генерации сопроводительного .tar.gz.minisig; install поддерживает --require-signature и --trust <pub> для принудительной проверки по белому списку
    • RBAC для scope: config.scopePublishers + серверный API /v1/scopes/:scope; навыки @scope/* могут публиковать/отзывать только ключи из списка publishers/admins
  • Удалённый HTTP-сервис MVP (registry-service/ · Fastify + SQLite + абстракция файлового хранилища)
    • Соответствие протоколу: /v1/skills?..., /v1/skills/:name/{latest,versions,@:version,package.tar.gz,package.tar.gz.minisig}
    • Операции записи: POST /v1/skills (multipart: manifest / archive / signature?) с проверкой подписи и прав scope при загрузке; PATCH /v1/skills/:name/:version/yank для отзыва
    • Управление: PUT/GET /v1/scopes/:scope, POST /v1/internal/tokens (admin scope)
    • Наблюдаемость: /v1/audit?limit=&action=&actor= для аудита; при запуске сервиса bootstrap-токен записывается в data/bootstrap-tokens.json для локальной отладки
    • Запуск: bash pnpm --filter registry-service dev # http://localhost:18081 cat registry-service/data/bootstrap-tokens.json
  • Красивый веб-интерфейс Registry (registry-web/ · Next.js 14 App Router + Tailwind + компоненты в стиле Shadcn)
    • Главная страница: Hero-секция + карточки с предварительным просмотром команд + 4 KPI-карточки (общее количество/подписи/scope/последние публикации) + сетка избранных навыков
    • Список навыков: поисковая строка, теги scope, переключатель отзыва, адаптивная сетка карточек
    • Детали навыка: таблица версий, блок кода с командой установки, зависимости, метаинформация подписи, вкладка с недавним аудитом
    • Журнал аудита: фильтрация по action / actor, переход к соответствующей странице навыка
    • Страница документации: протокол + аутентификация + подписи + RBAC + контрольный список аудита (всё в одном месте)
    • Запуск: bash pnpm --filter registry-web dev # http://localhost:18082 # Если 18081 не запущен, UI переключится на встроенные примеры данных

Часто используемые команды:

pnpm --filter registry cli -- registry list
pnpm --filter registry cli -- registry add official https://registry.skillforge.dev --priority 100 --default
pnpm --filter registry cli -- registry add corp https://registry.corp.example --priority 200 --scopes corp
echo "$OFFICIAL_TOKEN" | pnpm --filter registry cli -- registry login official --token-stdin
# 签名发布链(本地 CLI 侧)
pnpm --filter registry cli -- signer keygen --alias team-a
pnpm --filter registry cli -- signer export-pub team-a > ./team-a.pub
pnpm --filter registry cli -- publish @corp/security-review --sign --scoped
pnpm --filter registry cli -- install @corp/security-review --remote --require-signature --trust ./team-a.pub
# 其它常用
pnpm --filter registry cli -- versions fix-ci --remote
pnpm --filter registry cli -- plan fix-ci --remote
pnpm --filter registry cli -- search fix --remote --sources official
pnpm --filter registry cli -- install fix-ci --target-dir ./downloaded-skills --remote --install-deps
pnpm --filter registry cli -- yank fix-ci@0.1.0 --reason "broken manifest"

Протокол удалённого Registry HTTP (уже реализован в registry-service/):

- GET /v1/skills?q=&allVersions=&limit=&includeYanked= → { total, records: SkillRecord[] }

  • GET /v1/skills/:name/versions?includeYanked= → { name, versions: SkillRecord[] }
  • GET /v1/skills/:name/@:version?includeYanked= / GET /v1/skills/:name/latest → SkillRecord
  • GET /v1/skills/:name/@:version/package.tar.gz / …package.tar.gz.minisig: загрузка активов; Authorization: Bearer <token> (опционально, обязательно для приватных источников)
  • POST /v1/skills: публикация (требуется Authorization: Bearer <token> с scope publish; multipart manifest=JSON + archive + опционально signature)
  • PATCH /v1/skills/:name/@:version/yank: { yanked?: boolean, reason?: string }, требуется scope yank
  • Поля SkillRecord: { name, version, description, releaseTag, publishedAt, assetName, assetUrl, sourceRepo, sourceKind, yanked, deps: string[], publisherKeyId?, signature?: { keyId, algorithm, signature, timestamp, signatureAssetName?, signatureAssetUrl? } }
  • Поиск по умолчанию игнорирует отозванные версии; includeYanked=1 включает их в результаты; чтение доступно публично, publish/yank требуют аутентификации; 401 предлагает registry login, 403 указывает на отсутствие нужного scope токена

Текущая цепочка распространения через GitHub Release:

  • Каждый актив навыка именуется как <skill>-<version>.tar.gz (подпись сопровождается <skill>-<version>.tar.gz.minisig)
  • Тег по умолчанию: v<version>
  • publish --github-repo зависит от локального gh
  • sync-github через публичный Releases API загружает метаданные релиза и записывает их обратно в локальный registry

Ограничения разработки

Основные ограничения проекта описаны в AGENTS.md, ключевые моменты:

  • core/ содержит только Rust-рантайм и логику валидации
  • registry/ содержит только логику TS-регистра
  • Каталог skills/<name>/ должен включать манифест и описание навыка
  • Вызовы моделей должны проходить контроль бюджета токенов
  • При изменении схемы навыка необходимо синхронизировать Rust-валидатор и примеры навыков

Навигация по документации

Roadmap

Четыре пункта Roadmap уже реализованы (цепочка подписанных релизов / RBAC на основе scope / развёртываемый удалённый HTTP-сервис MVP / Web UI для Registry). Следующие шаги сосредоточены на «продуктовой зрелости» и «межкомандном взаимодействии»:

  • Подписанные релизы 2.0: внедрение TUF/Notary-подобных временных меток и ротации корневых ключей для снижения рисков компрометации единственного ключа подписи
  • Хранение на базе S3: добавление реальных реализаций S3/Azure Blob/GCS поверх существующего интерфейса StorageDriver, чтобы registry-service мог напрямую использовать объектное хранилище (с сохранением файловой системы как резервного варианта для локальной разработки)
  • Настоящая база данных: SQLite MVP → адаптация под Postgres или CockroachDB с 12-factor конфигурацией (DATABASE_URL / S3_*)
  • Улучшение Web UI: сравнение версий (diff SKILL.md / skill.yml до и после), панель управления пользователями и API-токенами, онлайн-процессы согласования для Scope RBAC
  • Зеркалирование и ускорение для кросс-репозиториев: добавление прозрачного локального кэша + зеркал источников для CLI (cache-only / pull-through cache), поддержка офлайн-сред
  • Наблюдаемость: интеграция Prometheus-метрик в registry-service (количество запросов, частота ошибок, перцентили объёмов публикаций) + структурированные JSON-логи
  • Мультипакетный протокол: помимо tar.gz, добавление поддержки OCI (distribution-spec) для совместимости с собственными Harbor / GHCR
Войдите, чтобы оставить комментарий