Перейти к содержимому

Резолверы навыков

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@refGitHub tarball (без git).
local:// / обычный путьЛокальная директория.
https://Удалённый архив.
module://pkg.pathPython-пакет.

SkillResolverRegistry диспетчеризует по схеме; регистрируйте пользовательские резолверы для расширения. GithubResolver скачивает tarball-архивы с codeload.github.com и кэширует их в ~/.cache/mmar_carl/skills/github/<key>/.

Прикрепите навык к известному дайджесту 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 library

SkillManifest парсит frontmatter SKILL.md, включая get_allowed_tools() / get_allowed_tool_names() для списка allowed-tools.