From f1994cce0af236f6d0fa6548e5d5ea59376311aa Mon Sep 17 00:00:00 2001 From: Gav Verma Date: Sat, 31 Jan 2026 19:00:10 -0800 Subject: [PATCH] Remove zipped .skill packaging from skill-creator (#74) --- skills/.system/skill-creator/SKILL.md | 31 ++--- .../skill-creator/scripts/package_skill.py | 111 ------------------ 2 files changed, 7 insertions(+), 135 deletions(-) delete mode 100644 skills/.system/skill-creator/scripts/package_skill.py diff --git a/skills/.system/skill-creator/SKILL.md b/skills/.system/skill-creator/SKILL.md index 7b44b52..c2e2283 100644 --- a/skills/.system/skill-creator/SKILL.md +++ b/skills/.system/skill-creator/SKILL.md @@ -11,7 +11,7 @@ This skill provides guidance for creating effective skills. ## About Skills -Skills are modular, self-contained packages that extend Codex's capabilities by providing +Skills are modular, self-contained folders that extend Codex's capabilities by providing specialized knowledge, workflows, and tools. Think of them as "onboarding guides" for specific domains or tasks—they transform Codex from a general-purpose agent into a specialized agent equipped with procedural knowledge that no model can fully possess. @@ -208,7 +208,7 @@ Skill creation involves these steps: 2. Plan reusable skill contents (scripts, references, assets) 3. Initialize the skill (run init_skill.py) 4. Edit the skill (implement resources and write SKILL.md) -5. Package the skill (run package_skill.py) +5. Validate the skill (run quick_validate.py) 6. Iterate based on real usage Follow these steps in order, skipping only if there is a clear reason why they are not applicable. @@ -266,7 +266,7 @@ To establish the skill's contents, analyze each concrete example to create a lis At this point, it is time to actually create the skill. -Skip this step only if the skill being developed already exists, and iteration or packaging is needed. In this case, continue to the next step. +Skip this step only if the skill being developed already exists. In this case, continue to the next step. When creating a new skill from scratch, always run the `init_skill.py` script. The script conveniently generates a new template skill directory that automatically includes everything a skill requires, making the skill creation process much more efficient and reliable. @@ -334,32 +334,15 @@ Do not include any other fields in YAML frontmatter. Write instructions for using the skill and its bundled resources. -### Step 5: Packaging a Skill +### Step 5: Validate the Skill -Once development of the skill is complete, it must be packaged into a distributable .skill file that gets shared with the user. The packaging process automatically validates the skill first to ensure it meets all requirements: +Once development of the skill is complete, validate the skill folder to catch basic issues early: ```bash -scripts/package_skill.py +scripts/quick_validate.py ``` -Optional output directory specification: - -```bash -scripts/package_skill.py ./dist -``` - -The packaging script will: - -1. **Validate** the skill automatically, checking: - - - YAML frontmatter format and required fields - - Skill naming conventions and directory structure - - Description completeness and quality - - File organization and resource references - -2. **Package** the skill if validation passes, creating a .skill file named after the skill (e.g., `my-skill.skill`) that includes all files and maintains the proper directory structure for distribution. The .skill file is a zip file with a .skill extension. - -If validation fails, the script will report the errors and exit without creating a package. Fix any validation errors and run the packaging command again. +The validation script checks YAML frontmatter format, required fields, and naming rules. If validation fails, fix the reported issues and run the command again. ### Step 6: Iterate diff --git a/skills/.system/skill-creator/scripts/package_skill.py b/skills/.system/skill-creator/scripts/package_skill.py deleted file mode 100644 index 9a03995..0000000 --- a/skills/.system/skill-creator/scripts/package_skill.py +++ /dev/null @@ -1,111 +0,0 @@ -#!/usr/bin/env python3 -""" -Skill Packager - Creates a distributable .skill file of a skill folder - -Usage: - python utils/package_skill.py [output-directory] - -Example: - python utils/package_skill.py skills/public/my-skill - python utils/package_skill.py skills/public/my-skill ./dist -""" - -import sys -import zipfile -from pathlib import Path - -from quick_validate import validate_skill - - -def package_skill(skill_path, output_dir=None): - """ - Package a skill folder into a .skill file. - - Args: - skill_path: Path to the skill folder - output_dir: Optional output directory for the .skill file (defaults to current directory) - - Returns: - Path to the created .skill file, or None if error - """ - skill_path = Path(skill_path).resolve() - - # Validate skill folder exists - if not skill_path.exists(): - print(f"[ERROR] Skill folder not found: {skill_path}") - return None - - if not skill_path.is_dir(): - print(f"[ERROR] Path is not a directory: {skill_path}") - return None - - # Validate SKILL.md exists - skill_md = skill_path / "SKILL.md" - if not skill_md.exists(): - print(f"[ERROR] SKILL.md not found in {skill_path}") - return None - - # Run validation before packaging - print("Validating skill...") - valid, message = validate_skill(skill_path) - if not valid: - print(f"[ERROR] Validation failed: {message}") - print(" Please fix the validation errors before packaging.") - return None - print(f"[OK] {message}\n") - - # Determine output location - skill_name = skill_path.name - if output_dir: - output_path = Path(output_dir).resolve() - output_path.mkdir(parents=True, exist_ok=True) - else: - output_path = Path.cwd() - - skill_filename = output_path / f"{skill_name}.skill" - - # Create the .skill file (zip format) - try: - with zipfile.ZipFile(skill_filename, "w", zipfile.ZIP_DEFLATED) as zipf: - # Walk through the skill directory - for file_path in skill_path.rglob("*"): - if file_path.is_file(): - # Calculate the relative path within the zip - arcname = file_path.relative_to(skill_path.parent) - zipf.write(file_path, arcname) - print(f" Added: {arcname}") - - print(f"\n[OK] Successfully packaged skill to: {skill_filename}") - return skill_filename - - except Exception as e: - print(f"[ERROR] Error creating .skill file: {e}") - return None - - -def main(): - if len(sys.argv) < 2: - print("Usage: python utils/package_skill.py [output-directory]") - print("\nExample:") - print(" python utils/package_skill.py skills/public/my-skill") - print(" python utils/package_skill.py skills/public/my-skill ./dist") - sys.exit(1) - - skill_path = sys.argv[1] - output_dir = sys.argv[2] if len(sys.argv) > 2 else None - - print(f"Packaging skill: {skill_path}") - if output_dir: - print(f" Output directory: {output_dir}") - print() - - result = package_skill(skill_path, output_dir) - - if result: - sys.exit(0) - else: - sys.exit(1) - - -if __name__ == "__main__": - main()