Skip to main content

s-skillgate

Pre-publish gate для навыков Skills Hub: секреты + денилист внутренней инфы + валидация манифеста (zero-deps Python)

Что это

«Охранник» (pre-publish gate), который проверяет папку навыка перед публикацией на три вещи:

  1. Секреты/токеныglpat-, ghp_, sk-, AKIA, JWT, приватные ключи, DSN с паролем.
  2. Внутренняя инфа — локальные пути, публичные IP (warn) + собственная конкретика через приватный оверлей.
  3. Структура/манифест — обязательные поля SKILL.md, инвариант «tooling ⇒ есть cli/mcp», совпадение объявленного name с именем каталога навыка.

Возвращает вердикт ok / warn / fail и exit-code 0/1/2. Zero-deps, только stdlib Python ≥3.11 — работает везде, включая Windows без установки бинарей.

Установка

pip install s-skillgate
# или без установки:
uvx --from s-skillgate skillgate run path/to/skill

Запуск

skillgate run path/to/skill           # человекочитаемо
skillgate run path/to/skill --json    # машинно; exit 0 ok / 1 warn / 2 fail
skillgate sweep                       # прогон по ~/.claude/skills: имя ≠ каталог
skillgate sweep <dir> --json --all    # свой каталог навыков, машинно, со всеми

Имя навыка против каталога

Объявленное во фронтматтере name обязано совпадать с именем каталога. Расхождение не ломает вызов (резолвер ключует по каталогу), но канал установки читает именно name — навык встаёт под чужим slug, а ссылки на него ведут в пустоту. Поэтому уровень fail, и вердикт называет обе стороны: «каталог graphify, объявлено graphify-windows». sweep показывает такие расхождения по всему каталогу навыков списком, заодно называя каталоги без SKILL.md. junction не разыменовывается — имя навыка это имя точки монтирования. Плагинный навык (короткое name, а форму plugin:skill собирает харнесс) ложной тревоги не даёт.

Как библиотека:

from skillgate import run_gate, sweep_skills

report = run_gate("path/to/skill")
print(report.verdict, report.exit_code)

for entry in sweep_skills():          # по умолчанию ~/.claude/skills
    if not entry.ok:
        print(entry.directory, [f.message for f in entry.findings])

Правила

  • Общие паттерны (токены, пути, IP) — src/skillgate/data/denylist.toml. Один файл, формат TOML, regex в literal-строках (одинарные кавычки). Дописал [[rule]] — правило работает.
  • Исключения/заглушки (публичные домены-примеры, __set_me__, RFC1918) — src/skillgate/data/allowlist.toml. Если совпадение попало под allowlist — находка гасится.
  • Приватная конкретика (реальные IP серверов, имена приватных git-групп, внутренние домены) — НЕ в публичном пакете. Скопируй data/denylist.local.example.tomldata/denylist.local.toml (он в .gitignore) и впиши свои значения; run_gate подхватит оверлей автоматически.

Правила покрыты golden-тестами (tests/golden/): must_match.txt (обязано ловиться) / must_not_match.txt (легальные заглушки). Менять правило → добавить кейс.

Тесты

uv run --with pytest pytest -q

License

MIT

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

s_skillgate-0.1.7.tar.gz (34.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

s_skillgate-0.1.7-py3-none-any.whl (24.4 kB view details)

Uploaded Python 3

File details

Details for the file s_skillgate-0.1.7.tar.gz.

File metadata

  • Download URL: s_skillgate-0.1.7.tar.gz
  • Upload date:
  • Size: 34.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.26 {"installer":{"name":"uv","version":"0.11.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for s_skillgate-0.1.7.tar.gz
Algorithm Hash digest
SHA256 6d3c0749dc250727bd131d06e1ede141a7232d09773baa8a51ae71fcab88a5bc
MD5 093104b2b59062e1934caaa61419ac00
BLAKE2b-256 de97f04eacf942ec8d89e8f7b454adc55affa80eb22573397467f361bd22cfdf

See more details on using hashes here.

File details

Details for the file s_skillgate-0.1.7-py3-none-any.whl.

File metadata

  • Download URL: s_skillgate-0.1.7-py3-none-any.whl
  • Upload date:
  • Size: 24.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.26 {"installer":{"name":"uv","version":"0.11.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for s_skillgate-0.1.7-py3-none-any.whl
Algorithm Hash digest
SHA256 a5e202c40812d7627be93c308f4506b48c55e937bd66e4295a83481f5f52f600
MD5 33c8fa5e38cf726365f47eebbfad04d0
BLAKE2b-256 74283bbc48cb13c6881a3c673381d8bdda176dba75246b4e4af90023f2e69eff

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.1.7 This release

2 files

0.1.5

2 files

0.1.4

2 files

0.1.3

2 files

0.1.2

2 files

0.1.1

2 files

0.1.0

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page