| name | batch-normalize-and-package |
| model | sonnet |
| description | Produces a signed distribution manifest and CAS-packaged skill set by orchestrating the full community-to-Dojo pipeline: shallow-clone repos, scan for compatibility, normalize frontmatter in parallel batches of 10, package via dojo CLI, and emit manifest.json with source attribution for every entry. Use when: "import community skills", "batch normalize skills", "package skills from repos", "onboard external skills", "run the skill supply chain". |
| license | Complete terms in LICENSE.txt |
| category | skill-forge |
| triggers | ["import community skills","batch normalize skills","package skills from repos","onboard external skills","run the skill supply chain"] |
| tier | 1 |
| agents | ["primary"] |
| tool_dependencies | ["file_system"] |
| inputs | [{"name":"repo_urls","type":"string[]","description":"GitHub repository URLs or local paths containing community skills to import","required":true}] |
| outputs | [{"name":"distribution_manifest","type":"ref","format":"cas-ref","description":"Signed distribution manifest and CAS-packaged skill set with source attribution for every entry"}] |
Batch Normalize and Package
I. Workflow
This is a 6-step DAG with dependency structure:
Step 1: Acquire sources (parallel per repo)
|
Step 2: Scan all sources (invokes scan-community-repos)
|
Step 3: Filter catalog (select normalizable + ready skills)
|
Step 4: Normalize (parallel per skill, invokes normalize-community-skill)
|
Step 5: Package (invokes dojo skill package-all on normalized directory)
|
Step 6: Generate distribution manifest
Step 1: Acquire Sources
For each input repo:
- If GitHub URL: shallow clone (
git clone --depth=1) to temp directory
- If local path: validate exists, use directly
- If already cloned (cache hit):
git pull --ff-only to update
- Record: repo name, local path, acquisition timestamp
Parallelization: All repos can be acquired simultaneously. No dependencies.
Step 2: Scan All Sources
Invoke scan-community-repos with the list of acquired paths.
Input: list of {repo_name, local_path} pairs
Output: JSON catalog with per-file classification (ready / normalizable / incompatible)
Step 3: Filter Catalog
From the scan catalog, build the work queue:
| Classification | Action |
|---|
| ready | Copy to staging directory as-is |
| normalizable | Add to normalization queue |
| incompatible | Log and skip — include in manifest as "skipped" |
Decision criteria for "normalizable":
- Has
name field in frontmatter (required — cannot be inferred)
- Has
description field (required — cannot be inferred)
- Has markdown body with at least one section heading
- File size > 100 bytes and < 50KB (too small = stub, too large = not a skill)
Step 4: Normalize
For each skill in the normalization queue, invoke normalize-community-skill:
Input: path to the community SKILL.md
Output: enriched SKILL.md with Dojo-compatible frontmatter
Parallelization: All normalizations are independent. Run in parallel batches of 10.
Error handling: