by HaddenHunter (community) Claude Desktop, Claude Code, OpenCode, Cursor, Gemini CLI, любой MCP-клиент, Windows, macOS, Linux
«Версия навыков» npm для AI coding-агентов (Claude Code / Cursor / Codex / Gemini CLI) — local-first, модель-агностичный, нативная поддержка MCP.
Git-based control plane для навыков, инструментов, контекста, прав доступа и идентичности AI-агентов. Self-hosted, MCP-native.
Open-source навыки, дающие любому AI-агенту (Claude, Cursor, Hermes и др.) возможность генерировать полный цикл маркетинговых кампаний …
MCP-сервер для доступа к актуальной документации библиотек прямо в контексте LLM. Вместо устаревших обучающих данных — …
Официальный MCP от команды Chrome DevTools: дает AI-агентам полный доступ к инструментам разработчика браузера. Автоматизация через …
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. Исходный код веб-интерфейса, скрипты сборки, реализации 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 разрешается в первый адрес)В этом репозитории нет исходного кода, но сохраняются все готовые артефакты — бинарные исполняемые файлы + собранные статические страницы фронтенда, всё доступно для просмотра и загрузки в публичном репозитории:
Расположение: корневой каталог ветки 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 с последующей кросс-репозиторной отправкой.
В публичном репозитории доступны две копии (можно скачать без авторизации):
- (Рекомендуется) Прямые статические ссылки 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
skills/: исходники навыков (skill.yml · SKILL.md · eval.md · scripts/ · references/), при сборке статических страниц из репозитория Core здесь упаковываются tarball и генерируется индекс загрузкиdocs/: публичная документация, при сборке фиксируется в Pages через Next output: exportmirrors/: конфигурации белых списков зеркал навыков (опционально)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».
Все публикуемые артефакты (сами статические файлы фронтенда не подписываются; но 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 平台)
└──────────────────────────────────────────────────────────────────┘
SF:c0d444ccdf461a76:H1H77scjvT0kZ47lhQWewtEGLt13hRlt6BDhm80RpHEnode -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 commentSOURCE_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 полностью идентичен.На любой машине с 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
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,不要手动维护)
Download или напрямую откройте https://skillforge.c8.fit/dist/bin/ для скачивания бинарного файла CLI для соответствующей платформы (многоплатформенный Release на Rust, публикуется в Releases приватного репозитория Core)tar.gz + sha256 + .sfminisig Ed25519 подпись (/packages/-/<name>-<version>.tgz), стандартный полный процесс описан в предыдущем разделе «🔐 Цепочка доверенных подписей → Проверка подписи в один клик».Многие решения для навыков агентов ограничиваются уровнем "фрагментов промптов" или "шаблонов репозиториев", не имея версионирования, зависимостей, разграничения прав и границ выполнения. SkillForge пытается восполнить эти пробелы в инфраструктуре:
skill.ymlallow.read_paths / allow.write_paths / allow.net_hostsskillforge serve <skill>eval.mdПриведённая ниже схема показывает уже реализованные в текущем репозитории узлы 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 + примеры скриптов |
Все страницы отрисованы с помощью 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/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-service/: Fastify + SQLite + абстракция хранилища на файловой системе, полное соответствие протоколу /v1/skills, аутентификация publish/yank/scope и аудитregistry-web/: Next.js 14 App Router + Tailwind (стиль Shadcn), единое представление главной страницы/списка навыков/деталей навыка/аудит-лога/документации протоколаtools/call, пока работает в модели "один навык — одна конечная точка", в будущем может быть расширен до агрегации нескольких навыков на одном порту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/ # 预留:镜像/同步相关目录
rustc 1.85)pnpm 9+sqlite3 (необходим для тестирования Registry)ollama для локального вызова моделейpnpm install
cargo build -p skillforge-core
Если вы хотите сразу создать релизную сборку:
cargo build --release -p skillforge-core
cargo test
pnpm --filter registry test
cargo run -p skillforge-core -- validate fix-ci
Это загрузит skills/fix-ci/skill.yml, SKILL.md, eval.md и выведет разобранный манифест в формате JSON.
Использование 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 配置"
cargo run -p skillforge-core -- serve fix-ci --port 18080
После запуска MCP HTTP-вход будет доступен по адресу http://127.0.0.1:18080/mcp.
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-allskillforge eval <skill>skillforge eval-allГлобальные параметры:
--repo-root <path>: Указывает корневую директорию репозитория, по умолчанию — текущая директорияПараметр model.provider в skill.yml определяет вызываемый бэкенд:
ollamaopenaiopenai-compatibleСоответствующие переменные окружения:
SKILLFORGE_MODEL_MOCK_RESPONSE: Включает mock-ответы, подходит для локальной отладкиOLLAMA_BASE_URL: По умолчанию http://127.0.0.1:11434OPENAI_API_BASE: По умолчанию https://api.openai.com/v1OPENAI_API_KEY: Обязателен при использовании OpenAI-совместимого интерфейсаКаждая директория навыка должна содержать как минимум:
skill.ymlSKILL.mdeval.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.ymlgrep-ts: Поиск кода TypeScript в ограниченных директорияхdoc-gen: Обновление документации репозиторияЭти навыки служат как примерами, так и интеграционными тестами для текущих возможностей runtime.
В директории registry/ реализован CLI для локального и мульти-источникового удалённого реестра (включая явную регистрацию, планирование установки, список версий, отзыв версий, агрегацию источников и аутентификацию с помощью Bearer Token); registry-service/ — это запускаемый MVP-сервис на Fastify, соответствующий протоколу /v1/skills, используемому CLI; registry-web/ — красивый веб-интерфейс на Next.js + Tailwind (стиль Shadcn).
Уровни возможностей:
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> для принудительной проверки по белому спискуconfig.scopePublishers + серверный API /v1/scopes/:scope; навыки @scope/* могут публиковать/отзывать только ключи из списка publishers/admins/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.jsonbash
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 → SkillRecordGET /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 yankSkillRecord: { 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 зависит от локального ghsync-github через публичный Releases API загружает метаданные релиза и записывает их обратно в локальный registryОсновные ограничения проекта описаны в AGENTS.md, ключевые моменты:
core/ содержит только Rust-рантайм и логику валидацииregistry/ содержит только логику TS-регистраskills/<name>/ должен включать манифест и описание навыкаЧетыре пункта Roadmap уже реализованы (цепочка подписанных релизов / RBAC на основе scope / развёртываемый удалённый HTTP-сервис MVP / Web UI для Registry). Следующие шаги сосредоточены на «продуктовой зрелости» и «межкомандном взаимодействии»:
StorageDriver, чтобы registry-service мог напрямую использовать объектное хранилище (с сохранением файловой системы как резервного варианта для локальной разработки)