[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6KF9CAHMZJ0C4M4PRSP0FXW":3,"skill-same:01M6KF9CAHMZJ0C4M4PRSP0FXW":53},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":17,"publishedAt":26,"linkOnly":27,"markdownContent":28,"markdownBody":29,"frontMatter":30,"refName":31,"commitSha":32,"skillDirectory":33,"forksCount":34,"repositoryHtmlUrl":35,"repositoryHomepageUrl":36,"ownerHtmlUrl":37,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":38,"install":39,"resources":52},"01M6KF9CAHMZJ0C4M4PRSP0FXW","run2_file-organization-robust",null,"Robust file organization with verification, cleanup, and comprehensive logging","cxcscmu\u002FSkillLearnBench","cxcscmu","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F142838272?v=4","01M6KCQDFQWPDSN0MKZY96MSQP","01M6KCQDM7G70TKJ28NTSQC0RZ",93,"MIT","https:\u002F\u002Fgithub.com\u002Fcxcscmu\u002FSkillLearnBench\u002Fblob\u002Fmain\u002Fskills\u002Fb2-self-feedback-claude-haiku-4-5\u002Forganize-messy-files\u002Frun2_file-organization-robust\u002FSKILL.md",[],[18,19,20,21,22,23,24,25],"file","organization","file organization","run2 file organization robust","cleanup","verification","logging","with","2026-11-10 10:12:30",false,"---\nname: run2_file-organization-robust\ndescription: Robust file organization with verification, cleanup, and comprehensive logging\n---\n\n# File Organization Skill (Robust)\n\n## Overview\nEnterprise-grade file organization with:\n1. **Folder creation** with validation\n2. **Safe file movement** with verification\n3. **Duplicate handling** for idempotent operations\n4. **Comprehensive logging** for audit trail\n5. **Cleanup** of source directory\n\n## Implementation\n\n```python\nimport os\nimport shutil\nfrom pathlib import Path\nfrom dataclasses import dataclass\nfrom typing import Dict, List\n\n@dataclass\nclass OrganizationStats:\n    \"\"\"Statistics for organization operation\"\"\"\n    total_files: int\n    successfully_moved: int\n    failed_moves: int\n    skipped_duplicates: int\n    categories_distribution: Dict[str, int]\n\nclass FileOrganizer:\n    \"\"\"Robust file organization with logging\"\"\"\n\n    def __init__(self, source_dir, base_path):\n        self.source_dir = Path(source_dir)\n        self.base_path = Path(base_path)\n        self.stats = OrganizationStats(0, 0, 0, 0, {})\n        self.move_log = []\n\n    def create_category_folders(self, categories):\n        \"\"\"Create target folders for each category\"\"\"\n        for category in categories:\n            folder_path = self.base_path \u002F category\n            folder_path.mkdir(parents=True, exist_ok=True)\n            self.stats.categories_distribution[category] = 0\n\n    def move_file_safely(self, file_path, category):\n        \"\"\"\n        Move file with verification and duplicate detection.\n        Returns: (success: bool, message: str)\n        \"\"\"\n        file_path = Path(file_path)\n        dest_folder = self.base_path \u002F category\n        dest_path = dest_folder \u002F file_path.name\n\n        # Skip if already at destination\n        if file_path == dest_path:\n            self.move_log.append(f\"SKIP: {file_path.name} already in {category}\")\n            self.stats.skipped_duplicates += 1\n            return True, f\"Already in {category}\"\n\n        # Check for duplicates in destination\n        if dest_path.exists():\n            self.move_log.append(f\"SKIP: Duplicate found: {dest_path.name}\")\n            self.stats.skipped_duplicates += 1\n            return False, f\"Duplicate exists in {category}\"\n\n        # Move file\n        try:\n            shutil.move(str(file_path), str(dest_path))\n\n            # Verify move\n            if dest_path.exists() and not file_path.exists():\n                self.move_log.append(f\"OK: {file_path.name} → {category}\")\n                self.stats.successfully_moved += 1\n                if category not in self.stats.categories_distribution:\n                    self.stats.categories_distribution[category] = 0\n                self.stats.categories_distribution[category] += 1\n                return True, f\"Moved to {category}\"\n            else:\n                self.move_log.append(f\"FAIL: Move incomplete: {file_path.name}\")\n                self.stats.failed_moves += 1\n                return False, \"Move verification failed\"\n\n        except Exception as e:\n            self.move_log.append(f\"ERROR: {file_path.name} - {str(e)}\")\n            self.stats.failed_moves += 1\n            return False, str(e)\n\n    def organize_all(self, category_map):\n        \"\"\"\n        Organize all files based on category map.\n        category_map: Dict[file_path_str, category]\n        Returns: OrganizationStats\n        \"\"\"\n        self.stats.total_files = len(category_map)\n\n        for file_path, category in category_map.items():\n            self.move_file_safely(file_path, category)\n\n        return self.stats\n\n    def save_log(self, log_file):\n        \"\"\"Save detailed move log to file\"\"\"\n        with open(log_file, 'w') as f:\n            f.write(\"FILE ORGANIZATION LOG\\n\")\n            f.write(\"=\" * 70 + \"\\n\\n\")\n            for entry in self.move_log:\n                f.write(entry + \"\\n\")\n```\n\n## Verification Functions\n\n```python\ndef verify_organization(base_path, categories, source_dir):\n    \"\"\"\n    Verify organization completeness.\n    Returns dict with verification results.\n    \"\"\"\n    verification = {\n        'folders_exist': {},\n        'total_files': 0,\n        'orphaned_files': []\n    }\n\n    # Check folders\n    for category in categories:\n        folder = Path(base_path) \u002F category\n        verification['folders_exist'][category] = folder.exists()\n        if folder.exists():\n            files = list(folder.glob('*'))\n            verification['total_files'] += len(files)\n\n    # Check source is empty\n    orphaned = list(Path(source_dir).glob('*'))\n    if orphaned:\n        verification['orphaned_files'] = [str(f) for f in orphaned]\n\n    return verification\n\ndef cleanup_empty_source(source_dir):\n    \"\"\"Remove empty source directory\"\"\"\n    try:\n        source_path = Path(source_dir)\n        if source_path.exists() and not any(source_path.iterdir()):\n            source_path.rmdir()\n            return True\n    except:\n        pass\n    return False\n```\n\n## Key Improvements from Run 1\n1. **Verification**: Confirms files were actually moved\n2. **Duplicate detection**: Prevents overwriting existing files\n3. **Comprehensive logging**: Every action logged for audit\n4. **Idempotent design**: Can run multiple times safely\n5. **Statistics tracking**: Detailed breakdown of results\n6. **Error recovery**: Graceful handling of failures\n\n## Usage Pattern\n```python\norganizer = FileOrganizer(source_dir, base_path)\norganizer.create_category_folders(categories)\nstats = organizer.organize_all(category_map)\norganizer.save_log('organization.log')\n\n# Verify\nverification = verify_organization(base_path, categories, source_dir)\ncleanup_empty_source(source_dir)\n```\n","# File Organization Skill (Robust)\n\n## Overview\nEnterprise-grade file organization with:\n1. **Folder creation** with validation\n2. **Safe file movement** with verification\n3. **Duplicate handling** for idempotent operations\n4. **Comprehensive logging** for audit trail\n5. **Cleanup** of source directory\n\n## Implementation\n\n```python\nimport os\nimport shutil\nfrom pathlib import Path\nfrom dataclasses import dataclass\nfrom typing import Dict, List\n\n@dataclass\nclass OrganizationStats:\n    \"\"\"Statistics for organization operation\"\"\"\n    total_files: int\n    successfully_moved: int\n    failed_moves: int\n    skipped_duplicates: int\n    categories_distribution: Dict[str, int]\n\nclass FileOrganizer:\n    \"\"\"Robust file organization with logging\"\"\"\n\n    def __init__(self, source_dir, base_path):\n        self.source_dir = Path(source_dir)\n        self.base_path = Path(base_path)\n        self.stats = OrganizationStats(0, 0, 0, 0, {})\n        self.move_log = []\n\n    def create_category_folders(self, categories):\n        \"\"\"Create target folders for each category\"\"\"\n        for category in categories:\n            folder_path = self.base_path \u002F category\n            folder_path.mkdir(parents=True, exist_ok=True)\n            self.stats.categories_distribution[category] = 0\n\n    def move_file_safely(self, file_path, category):\n        \"\"\"\n        Move file with verification and duplicate detection.\n        Returns: (success: bool, message: str)\n        \"\"\"\n        file_path = Path(file_path)\n        dest_folder = self.base_path \u002F category\n        dest_path = dest_folder \u002F file_path.name\n\n        # Skip if already at destination\n        if file_path == dest_path:\n            self.move_log.append(f\"SKIP: {file_path.name} already in {category}\")\n            self.stats.skipped_duplicates += 1\n            return True, f\"Already in {category}\"\n\n        # Check for duplicates in destination\n        if dest_path.exists():\n            self.move_log.append(f\"SKIP: Duplicate found: {dest_path.name}\")\n            self.stats.skipped_duplicates += 1\n            return False, f\"Duplicate exists in {category}\"\n\n        # Move file\n        try:\n            shutil.move(str(file_path), str(dest_path))\n\n            # Verify move\n            if dest_path.exists() and not file_path.exists():\n                self.move_log.append(f\"OK: {file_path.name} → {category}\")\n                self.stats.successfully_moved += 1\n                if category not in self.stats.categories_distribution:\n                    self.stats.categories_distribution[category] = 0\n                self.stats.categories_distribution[category] += 1\n                return True, f\"Moved to {category}\"\n            else:\n                self.move_log.append(f\"FAIL: Move incomplete: {file_path.name}\")\n                self.stats.failed_moves += 1\n                return False, \"Move verification failed\"\n\n        except Exception as e:\n            self.move_log.append(f\"ERROR: {file_path.name} - {str(e)}\")\n            self.stats.failed_moves += 1\n            return False, str(e)\n\n    def organize_all(self, category_map):\n        \"\"\"\n        Organize all files based on category map.\n        category_map: Dict[file_path_str, category]\n        Returns: OrganizationStats\n        \"\"\"\n        self.stats.total_files = len(category_map)\n\n        for file_path, category in category_map.items():\n            self.move_file_safely(file_path, category)\n\n        return self.stats\n\n    def save_log(self, log_file):\n        \"\"\"Save detailed move log to file\"\"\"\n        with open(log_file, 'w') as f:\n            f.write(\"FILE ORGANIZATION LOG\\n\")\n            f.write(\"=\" * 70 + \"\\n\\n\")\n            for entry in self.move_log:\n                f.write(entry + \"\\n\")\n```\n\n## Verification Functions\n\n```python\ndef verify_organization(base_path, categories, source_dir):\n    \"\"\"\n    Verify organization completeness.\n    Returns dict with verification results.\n    \"\"\"\n    verification = {\n        'folders_exist': {},\n        'total_files': 0,\n        'orphaned_files': []\n    }\n\n    # Check folders\n    for category in categories:\n        folder = Path(base_path) \u002F category\n        verification['folders_exist'][category] = folder.exists()\n        if folder.exists():\n            files = list(folder.glob('*'))\n            verification['total_files'] += len(files)\n\n    # Check source is empty\n    orphaned = list(Path(source_dir).glob('*'))\n    if orphaned:\n        verification['orphaned_files'] = [str(f) for f in orphaned]\n\n    return verification\n\ndef cleanup_empty_source(source_dir):\n    \"\"\"Remove empty source directory\"\"\"\n    try:\n        source_path = Path(source_dir)\n        if source_path.exists() and not any(source_path.iterdir()):\n            source_path.rmdir()\n            return True\n    except:\n        pass\n    return False\n```\n\n## Key Improvements from Run 1\n1. **Verification**: Confirms files were actually moved\n2. **Duplicate detection**: Prevents overwriting existing files\n3. **Comprehensive logging**: Every action logged for audit\n4. **Idempotent design**: Can run multiple times safely\n5. **Statistics tracking**: Detailed breakdown of results\n6. **Error recovery**: Graceful handling of failures\n\n## Usage Pattern\n```python\norganizer = FileOrganizer(source_dir, base_path)\norganizer.create_category_folders(categories)\nstats = organizer.organize_all(category_map)\norganizer.save_log('organization.log')\n\n# Verify\nverification = verify_organization(base_path, categories, source_dir)\ncleanup_empty_source(source_dir)\n```\n",{"name":5,"description":7},"main","726e1f79b96b0cb3d729d0e55a1c847e0b5353ae","skills\u002Fb2-self-feedback-claude-haiku-4-5\u002Forganize-messy-files\u002Frun2_file-organization-robust",7,"https:\u002F\u002Fgithub.com\u002Fcxcscmu\u002FSkillLearnBench","https:\u002F\u002Fcxcscmu.github.io\u002FSkillLearnBench","https:\u002F\u002Fgithub.com\u002Fcxcscmu","2026-10-02 22:55:36",{"source":8,"skillName":5,"commands":40,"prompt":50,"zipAvailable":51},[41,44,47],{"tool":42,"command":43},"npx","npx skills add cxcscmu\u002FSkillLearnBench --skill run2_file-organization-robust",{"tool":45,"command":46},"bunx","bunx skills add cxcscmu\u002FSkillLearnBench --skill run2_file-organization-robust",{"tool":48,"command":49},"pnpm","pnpm dlx skills add cxcscmu\u002FSkillLearnBench --skill run2_file-organization-robust","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fcxcscmu\u002FSkillLearnBench\u002Fblob\u002Fmain\u002Fskills\u002Fb2-self-feedback-claude-haiku-4-5\u002Forganize-messy-files\u002Frun2_file-organization-robust\u002FSKILL.md",true,[],[54,72,97,115,135,147],{"skillNo":55,"name":56,"nameZh":6,"description":57,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":58,"categories":59,"keywords":65,"publishedAt":26},"01M6KM5KH175P5ABP5JMX2SBDQ","object_counter","Count occurrences of an object in the image using computer vision algorithm.","https:\u002F\u002Fgithub.com\u002Fcxcscmu\u002FSkillLearnBench\u002Fblob\u002Fmain\u002Fskills\u002Fhuman_authored\u002Fvideo-object-counting\u002Fobject_counter\u002FSKILL.md",[60],{"categoryNo":61,"categoryName":62,"taxonomyType":63,"taxonomyTypeDesc":64},"01JBSEEDCAT000000000000016","图像与多媒体","SCENARIO","使用场景",[66,67,68,69,70,71],"object counter","object","vision","computer","Computer Vision","image",{"skillNo":73,"name":74,"nameZh":6,"description":75,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":76,"categories":77,"keywords":81,"publishedAt":26},"01M6KM51TMVXG79MMPCS6Y8G86","travel-planning-workflow","Invoke this skill when performing travel planning. It defines a structured workflow for generating itineraries. Following this workflow is essential to ensure the final plan satisfies user requirements.","https:\u002F\u002Fgithub.com\u002Fcxcscmu\u002FSkillLearnBench\u002Fblob\u002Fmain\u002Fskills\u002Fhuman_authored\u002Ftravel-planning\u002Ftravel-planning-workflow\u002FSKILL.md",[78],{"categoryNo":79,"categoryName":80,"taxonomyType":63,"taxonomyTypeDesc":64},"01JBSEEDCAT000000000000023","Skill与智能体开发",[82,83,84,85,86,87,88,89,90,91,92,93,94,95,96],"workflow","planning","planning workflow","travel","travel planning","travel planning workflow","structured","performing","plan","for","user","it","requirements","essential","itineraries",{"skillNo":98,"name":99,"nameZh":6,"description":100,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":101,"categories":102,"keywords":103,"publishedAt":26},"01M6KM4DY820XHS9YTSK5QP5HD","bundled-dataset-search-tool","invoke this skill when you need to perform database search for travel planning. This skill provides some useful pre-packaged tools to look up accommodations, attractions, cities, driving distance, flights, and restaurants from the bundled dataset.","https:\u002F\u002Fgithub.com\u002Fcxcscmu\u002FSkillLearnBench\u002Fblob\u002Fmain\u002Fskills\u002Fhuman_authored\u002Ftravel-planning\u002Fbundled-dataset-search-tool\u002FSKILL.md",[],[104,105,106,107,108,109,110,85,111,112,86,113,91,114,83],"search","tool","dataset","bundled dataset search tool","restaurants","Tools","up","look","flights","you","database",{"skillNo":116,"name":117,"nameZh":6,"description":118,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":119,"categories":120,"keywords":121,"publishedAt":26},"01M6KM465BB9PQ0B548HQSVAWZ","glm-output","Output-processing guidance for GLM tasks. Especially useful after glm-basics and glm-calibration when you need verifier-matching metrics from output.nc and a final \u002Froot\u002Fmetrics.json.","https:\u002F\u002Fgithub.com\u002Fcxcscmu\u002FSkillLearnBench\u002Fblob\u002Fmain\u002Fskills\u002Fhuman_authored\u002Ftemperature-simulation\u002Fglm-output\u002FSKILL.md",[],[122,123,124,91,125,126,127,128,129,130,131,132,113,133,134],"glm output","output","glm","tasks","metrics","json","basics","guidance","matching","verifier","processing","root","calibration",{"skillNo":136,"name":137,"nameZh":6,"description":138,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":139,"categories":140,"keywords":142,"publishedAt":26},"01M6KM40KY3QWDW5W97S39R2BC","glm-calibration","Calibration guidance for GLM tasks. Often most effective after glm-basics has clarified the setup; glm-output is the companion skill for exact final metric computation.","https:\u002F\u002Fgithub.com\u002Fcxcscmu\u002FSkillLearnBench\u002Fblob\u002Fmain\u002Fskills\u002Fhuman_authored\u002Ftemperature-simulation\u002Fglm-calibration\u002FSKILL.md",[141],{"categoryNo":79,"categoryName":80,"taxonomyType":63,"taxonomyTypeDesc":64},[143,134,124,123,129,128,125,144,145,91,146],"glm calibration","setup","companion","metric",{"skillNo":148,"name":149,"nameZh":6,"description":150,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":151,"categories":152,"keywords":153,"publishedAt":26},"01M6KM3VHHVSGMGHJQB3PPT6YG","glm-basics","A good starting point for GLM calibration tasks. Use to inspect glm3.nml, confirm how GLM runs, and identify the relevant files before moving on to calibration and output evaluation.","https:\u002F\u002Fgithub.com\u002Fcxcscmu\u002FSkillLearnBench\u002Fblob\u002Fmain\u002Fskills\u002Fhuman_authored\u002Ftemperature-simulation\u002Fglm-basics\u002FSKILL.md",[],[154,124,128,155,143,134,91,123,156,157,158,159,160,161,125],"glm basics","inspect","relevant","files","good","use","how","Evaluation"]