feat(skills): unpack skill packages into standard Agent Skills directories #170
Labels
No labels
auto/blocked-by-deps
auto/ci-timeout
auto/claimed-implementer
auto/claimed-merge
auto/claimed-reviewer
auto/driver-down
auto/invariant-violation
auto/last-attempt-tier-0
auto/last-attempt-tier-1
auto/last-attempt-tier-2
auto/last-attempt-tier-min
Automation Tracking
auto/needs-conflict-resolution
auto/needs-implementer
auto/postmortem
auto/ready-to-merge
auto/restart-throttled
auto/revert
auto/sentinel
auto/stale-inactivity
auto/unstable
Blocked
Bounty
$100
Bounty
$1000
Bounty
$10000
Bounty
$20
Bounty
$2000
Bounty
$250
Bounty
$50
Bounty
$500
Bounty
$5000
Bounty
$750
MoSCoW
Could have
MoSCoW
Must have
MoSCoW
Should have
Needs Feedback
Points
1
Points
13
Points
2
Points
21
Points
3
Points
34
Points
5
Points
55
Points
8
Points
88
Priority
Backlog
Priority
CI Blocker
Priority
Critical
Priority
High
Priority
Low
Priority
Medium
Signed-off: Owner
Signed-off: Scrum Master
Signed-off: Tech Lead
Spike
State
Completed
State
Duplicate
State
In Progress
State
In Review
State
Paused
State
Unverified
State
Verified
State
Wont Do
Type
Automation
Type
Bug
Type
Discussion
Type
Documentation
Type
Epic
Type
Feature
Type
Legendary
Type
Refactor
Type
Support
Type
Task
Type
Testing
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Blocks
#160 Epic: Agent Skills — Full Resource Support and Safe Execution
cleveragents/cleveractors-core
Reference
cleveragents/cleveractors-core#170
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Metadata
feat(skills): unpack skill packages into standard Agent Skills directoriesfeature/m1-skill-directory-unpackingBackground and context
ADR-2034 D-1/D-2 models a skill as one self-contained, content-addressed YAML mapping, and D-6 identifies directory-to-package packing as required authoring tooling. The repository now has a
SkillDirectoryPackerAPI, apack_skill_directoryconvenience function, and autils/pack_skill.pyCLI that perform the forward direction (on-disk Agent Skills directory →pkg_skl_mapping).The reverse direction is still missing. Inspecting a package, editing it in the familiar Agent Skills layout, republishing it, or handing it to agentskills.io-compatible tooling currently requires manually reconstructing
SKILL.md, splitting frontmatter from the body, decoding base64 resources, recreating directories, and guessing the canonicalsafe_moderepresentation. There is no API or CLI that deterministically turns a validated skill package back into a standard skill directory.Current behavior
SkillDirectoryPacker/pack_skill_directoryonly pack a directory into a mapping.utils/pack_skill.pyonly packs (stdout,--output,--check).SKILL.md, theallowed-toolsfrontmatter spelling, UTF-8 vs base64 resource handling, and the canonicalsafe_modeomission rule.Expected behavior
SkillDirectoryUnpacker/unpack_skill_package) that accepts either a validated skill package mapping, aSkillvalue object, or a local YAML package file and writes a standard skill directory.skill.nameand contains aSKILL.mdwhose YAML frontmatter carriesname,description,license,compatibility,metadata, andallowed-toolswhen present, and whose Markdown body is exactlyinstructions. The generated frontmatter MUST NOT contain the package-only fieldsskill,instructions, orresources.safe_modefollows the canonical rule: emit it inSKILL.mdonly when the package declaressafe_mode: false; omit it for the defaulttrue.resourcesentry as a file relative to the skill directory, creating parent directories.encoding: utf-8resources are written verbatim as UTF-8 text;encoding: base64resources are decoded and written as bytes../..segments, and path or symlink escapes outside the destination.utils/folder (for exampleutils/unpack_skill.py) so authors can unpack without writing Python. It should support a local package YAML input, a destination parent directory, and an explicit overwrite/force option.docs/guides/skill-packages.md.Acceptance criteria
references/,assets/,scripts/, a non-standard folder, and root-level files recreates the complete directory tree with the expected relative paths.SKILL.mdparses as YAML frontmatter plus Markdown body, uses theallowed-toolsspelling, omitsskill/instructions/resourcesfrom frontmatter, and round-trips its body exactly asinstructions.safe_modeproduces aSKILL.mdwithoutsafe_mode; a package withsafe_mode: falsepreserves it; an explicitsafe_mode: trueis normalized to absence.pkg_skl_Package ID.safe_mode, destination collision, and invalid inputs. A Robot integration scenario unpacks a real package, re-packs it, and loads the result through alocal:reference.utils/unpack command writes the same layout and reports the Package ID/skill name on standard error.nox -s coverage_report.noxdefault quality sessions pass.Supporting information
cleveractors.agents.skill_packer,cleveractors.agents.skill_schema,cleveractors.registry.canonical,utils/pack_skill.py,docs/guides/skill-packages.md.safe_modeemission rules.Subtasks
SKILL.mdfrontmatter/body with canonical field spelling andsafe_modeomissionutils/unpack_skill.pyCLI with overwrite handlinglocal:nox -s coverage_reportnox(all default sessions), fix any errorsDefinition of Done
This issue is complete when:
develop, reviewed, and merged.