Резолверы навыков
resolve_skill(uri) загружает навык из URI и возвращает дескриптор с извлечённым
локальным путём. Поле AgentSkillStepConfig.skill использует то же разрешение.
from mmar_carl import resolve_skill
skill = resolve_skill("github://anthropics/skills/skills/pdf@main")print(skill.local_root) # ~/.cache/mmar_carl/skills/github/<key>/skills/pdfПоддерживаемые схемы
Заголовок раздела «Поддерживаемые схемы»| Схема | Откуда разрешается |
|---|---|
github://owner/repo/path@ref | GitHub tarball (без git). |
local:// / обычный путь | Локальная директория. |
https:// | Удалённый архив. |
module://pkg.path | Python-пакет. |
SkillResolverRegistry диспетчеризует по схеме; регистрируйте пользовательские резолверы для расширения.
GithubResolver скачивает tarball-архивы с codeload.github.com и кэширует их в
~/.cache/mmar_carl/skills/github/<key>/.
Целостность (SHA-пининг)
Заголовок раздела «Целостность (SHA-пининг)»Прикрепите навык к известному дайджесту SKILL.md, чтобы обнаруживать скомпрометированный upstream:
skill = resolve_skill( "github://anthropics/skills/skills/pdf@main", sha256="<hex-of-SKILL.md>", trust_policy="sha_pinned",)С trust_policy="sha_pinned" CARL проверяет SHA256 локального SKILL.md
после извлечения и вызывает SkillIntegrityError при несовпадении. Принудительно обновите
через GithubResolver().resolve(uri, force_refresh=True).
Обнаружение установленных навыков
Заголовок раздела «Обнаружение установленных навыков»from mmar_carl import SkillLoader
skills = SkillLoader().catalog_all() # SKILL.md dirs + the agent-skills librarySkillManifest парсит frontmatter SKILL.md, включая
get_allowed_tools() / get_allowed_tool_names() для списка allowed-tools.