[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6HWNBD4FHSQ50CT3PFAA8XT":3,"skill-same:01M6HWNBD4FHSQ50CT3PFAA8XT":70},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":26,"publishedAt":37,"linkOnly":38,"markdownContent":39,"markdownBody":40,"frontMatter":41,"refName":42,"commitSha":43,"skillDirectory":44,"forksCount":45,"repositoryHtmlUrl":46,"repositoryHomepageUrl":6,"ownerHtmlUrl":47,"ownerBlogUrl":48,"ownerDescription":6,"updatedAt":49,"install":50,"resources":63},"01M6HWNBD4FHSQ50CT3PFAA8XT","pdf-download-extract-fallback",null,"Multi-step PDF download and text extraction with progressive fallback strategies","HKUDS\u002FAgentPilot","HKUDS","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F118165258?v=4","01M6HW8VRNZP64G0P4MVJW2KKQ","✨Data Intelligence Lab@HKU✨","01M6HW8VWZVHBRHYH3T330PFWV",7993,"MIT","https:\u002F\u002Fgithub.com\u002FHKUDS\u002FAgentPilot\u002Fblob\u002Fmain\u002Fopenspace\u002Fbenchmarks\u002Fgdpval\u002Fskills\u002Fpdf-download-extract-fallback\u002FSKILL.md",[18,23],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000002","文档处理","SCENARIO","使用场景",{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发",[27,28,29,30,31,32,33,34,35,36],"PDF","download","extract","fallback","pdf download extract fallback","extraction","text","strategies","multi","with","2026-11-10 10:12:30",false,"---\nname: pdf-download-extract-fallback\ndescription: Multi-step PDF download and text extraction with progressive fallback strategies\n---\n\n# PDF Download and Extract with Fallback\n\nThis skill provides a robust workflow for acquiring PDF documents from web sources and extracting their text content, with multiple fallback mechanisms to handle various failure modes.\n\n## Overview\n\nWhen working with PDFs from web sources, encounters with JavaScript redirects, corrupted files, missing tools, or inaccessible content are common. This workflow ensures maximum success rate through progressive fallback strategies.\n\n## Step-by-Step Instructions\n\n### Step 1: Download PDF with Browser User-Agent\n\nMany PDF hosting sites use JavaScript-based redirects or block automated requests. Use curl with a realistic browser user-agent:\n\n```bash\ncurl -L -A \"Mozilla\u002F5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\u002F537.36 (KHTML, like Gecko) Chrome\u002F120.0.0.0 Safari\u002F537.36\" -o output.pdf \"URL_HERE\"\n```\n\nKey flags:\n- `-L`: Follow redirects\n- `-A`: Set user-agent header to mimic a real browser\n- `-o`: Specify output filename\n\n### Step 2: Verify File Type Before Parsing\n\nAlways validate the downloaded file is actually a PDF before attempting extraction:\n\n```bash\nfile output.pdf\n```\n\nExpected output should contain \"PDF document\". If not:\n- The URL may have redirected to an HTML error page\n- The file may be corrupted\n- Access may be blocked\n\n### Step 3: Primary Extraction with pdftotext\n\nFirst attempt extraction using the standard `pdftotext` utility (part of poppler-utils):\n\n```bash\npdftotext output.pdf output.txt\n```\n\nIf `pdftotext` is not available, install it:\n```bash\n# Debian\u002FUbuntu\napt-get update && apt-get install -y poppler-utils\n\n# macOS\nbrew install poppler\n\n# RHEL\u002FCentOS\nyum install -y poppler-utils\n```\n\n### Step 4: Fallback to PyMuPDF (fitz)\n\nIf `pdftotext` fails or produces poor results, use Python's PyMuPDF library:\n\n```python\nimport fitz  # PyMuPDF\n\ndoc = fitz.open(\"output.pdf\")\ntext = \"\"\nfor page in doc:\n    text += page.get_text()\ndoc.close()\n\nwith open(\"output.txt\", \"w\") as f:\n    f.write(text)\n```\n\nInstall if needed:\n```bash\npip install pymupdf\n```\n\n### Step 5: Graceful Degradation to Domain Knowledge\n\nIf the PDF cannot be accessed or extracted after all attempts:\n\n1. Document the failure mode (network issue, corrupted file, access denied, etc.)\n2. Extract any partial content that was successfully retrieved\n3. Supplement missing content from established domain knowledge\n4. Clearly mark which portions are from source vs. generated from knowledge\n5. Provide citations for any claimed requirements or specifications\n\nExample degradation note:\n```\nNOTE: Source document [URL] was inaccessible due to [reason]. \nContent below combines partial extraction with established domain knowledge \nfor [topic]. Verify against official sources when available.\n```\n\n## Complete Workflow Script\n\n```bash\n#!\u002Fbin\u002Fbash\n# pdf-extract-workflow.sh\n# pdf-extract-workflow.sh - Handles both URL downloads and local files\n\nINPUT=\"$1\"\nOUTPUT_PDF=\"downloaded.pdf\"\nOUTPUT_TXT=\"extracted.txt\"\n\nif [[ \"$INPUT\" =~ ^https?:\u002F\u002F ]]; then\n    # Mode A: URL download\n    PDF_URL=\"$INPUT\"\n    echo \"Downloading PDF from URL...\"\n    curl -L -A \"Mozilla\u002F5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\u002F537.36\" -o \"$OUTPUT_PDF\" \"$PDF_URL\"\nelse\n    # Mode B: Local file\n    if [ ! -f \"$INPUT\" ]; then\n        echo \"ERROR: Local file not found: $INPUT\"\n        exit 1\n    fi\n    OUTPUT_PDF=\"$INPUT\"\n    echo \"Using local file: $INPUT\"\nfi\n\n# Step 2: Verify file type\necho \"Verifying file type...\"\nif ! file \"$OUTPUT_PDF\" | grep -q \"PDF document\"; then\n    echo \"WARNING: Downloaded file is not a valid PDF\"\n    echo \"Attempting fallback extraction anyway...\"\nfi\n\n# Step 3: Try pdftotext\necho \"Attempting pdftotext extraction...\"\nif command -v pdftotext &> \u002Fdev\u002Fnull; then\n    if pdftotext \"$OUTPUT_PDF\" \"$OUTPUT_TXT\" 2>\u002Fdev\u002Fnull; then\n        echo \"Extraction successful with pdftotext\"\n        exit 0\n    fi\nfi\n\n# Step 4: Fallback to PyMuPDF\necho \"Falling back to PyMuPDF...\"\npython3 \u003C\u003C 'PYTHON_SCRIPT'\nimport fitz\nimport sys\n\ntry:\n    doc = fitz.open(\"downloaded.pdf\")\n    text = \"\"\n    for page in doc:\n        text += page.get_text()\n    doc.close()\n    with open(\"extracted.txt\", \"w\") as f:\n        f.write(text)\n    print(\"Extraction successful with PyMuPDF\")\n    sys.exit(0)\nexcept Exception as e:\n    print(f\"PyMuPDF failed: {e}\")\n    sys.exit(1)\nPYTHON_SCRIPT\n\n# Step 5: Handle complete failure\n# Step 5: Handle complete failure (domain knowledge fallback)\nif [ $? -ne 0 ]; then\n    echo \"ERROR: All extraction methods failed.\"\n    echo \"ACTION: Generate content from domain knowledge and clearly mark source limitations.\"\n    echo \"Document the failure and proceed with knowledge-based content generation.\"\nfi\n```\n\n## Best Practices\n\n1. **Always verify before parsing**: Never assume a downloaded file is valid\n2. **Pre-check tools before extraction**: Verify pdftotext or PyMuPDF availability before starting\n3. **Local files skip download**: When PDF is already on disk, begin at file validation step\n2. **Preserve original PDF**: Keep the downloaded file for debugging if needed\n3. **Log each step**: Document which method succeeded for future reference\n4. **Check extraction quality**: Verify extracted text is readable and complete\n5. **Cite source limitations**: When using fallback knowledge, clearly indicate source gaps\n\n## Common Failure Modes\n\n| Symptom | Cause | Solution |\n|---------|-------|----------|\n| HTML content in file | URL redirected to error page or wrong file type | Check HTTP status, verify file with `file` command |\n| Empty extraction | Password-protected or scanned PDF | Try OCR tools or request accessible version |\n| Garbled text | Encoding issues | Try PyMuPDF with different extraction mode |\n| Curl blocked | Anti-bot measures | Add more headers, use delay between requests |\n| **pdftotext not found** | Tool not installed | Run `apt-get install poppler-utils` or use PyMuPDF fallback |\n| **PyMuPDF import failed** | Package not installed | Run `pip install pymupdf` |\n| **File not found (local)** | Incorrect path or file not accessible | Verify file path, check permissions, confirm file was uploaded |\n\n## When to Use This Skill\n\n- **Mode A (URL download)**: Downloading documents from web sources\n- **Mode B (Local file)**: Processing PDFs already on disk or uploaded as reference files\n- Extracting content from technical manuals or handbooks\n- Processing PDFs in automated pipelines where reliability matters\n- Any situation where PDF access may be unreliable or restricted\n\n## Local File Processing Workflow\n\nWhen you already have the PDF file locally (not from a URL):\n\n### Step L1: Verify File Exists\n\n```bash\nif [ ! -f \"your_file.pdf\" ]; then\n    echo \"ERROR: File not found\"\n    echo \"ACTION: Verify the file path and that the file was successfully uploaded\"\n    exit 1\nfi\n```\n\n### Step L2: Validate File Type\n\n```bash\nfile your_file.pdf\n```\n\nExpected output should contain \"PDF document\". If not, the file may be corrupted or mislabeled.\n\n### Step L3: Proceed to Extraction\n\nAfter validation, skip directly to **Step 3: Primary Extraction with pdftotext** in the main workflow.\n\n## Tool Availability Pre-Check\n\nBefore attempting any PDF extraction, verify your environment has the necessary tools:\n\n```bash\n# Check pdftotext availability\ncommand -v pdftotext && echo \"pdftotext: AVAILABLE\" || echo \"pdftotext: NOT FOUND - install poppler-utils\"\n\n# Check PyMuPDF availability  \npython3 -c \"import fitz; print('PyMuPDF: AVAILABLE')\" 2>\u002Fdev\u002Fnull || echo \"PyMuPDF: NOT FOUND - run: pip install pymupdf\"\n```\n\n**Installation commands if tools are missing:**\n\n```bash\n# Install pdftotext (poppler-utils)\napt-get update && apt-get install -y poppler-utils  # Debian\u002FUbuntu\nyum install -y poppler-utils                        # RHEL\u002FCentOS\nbrew install poppler                                # macOS\n\n# Install PyMuPDF\npip install pymupdf\n```\n\n---\nname: pdf-download-extract-fallback\ndescription: Multi-step PDF download and text extraction with progressive fallback strategies\n---\nThis skill provides a robust workflow for acquiring PDF documents from web sources **or processing locally-available files** and extracting their text content, with multiple fallback mechanisms to handle various failure modes.\n## Entry Point: Determine Your Starting Point\n\n**Before beginning, identify your scenario:**\n\n| Scenario | Start Here | Skip |\n|----------|-----------|------|\n| PDF already on local disk | Step 2 (Verify File Type) | Step 1 (Download) |\n| PDF at a web URL | Step 1 (Download) | None |\n\n## Overview\n\nWhen working with PDFs from web sources **or local files**, encounters with corrupted files, missing tools, or inaccessible content are common. This workflow ensures maximum success rate through progressive fallback strategies.\n## Mode A: Web URL Download\n\n### Step 1: Download PDF with Browser User-Agent\n\nMany PDF hosting sites use JavaScript-based redirects or block automated requests. Use curl with a realistic browser user-agent:\n\n```bash\ncurl -L -A \"Mozilla\u002F5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\u002F537.36 (KHTML, like Gecko) Chrome\u002F120.0.0.0 Safari\u002F537.36\" -o output.pdf \"URL_HERE\"\n```\n\nKey flags:\n- `-L`: Follow redirects\n- `-A`: Set user-agent header to mimic a real browser\n- `-o`: Specify output filename\n\n## Mode B: Local File Processing\n\nIf you already have the PDF file locally, **skip Step 1** and begin here:\n\nAlways validate the file is actually a PDF before attempting extraction:\n## Complete Workflow Script (Handles Both URL and Local File)\n","# PDF Download and Extract with Fallback\n\nThis skill provides a robust workflow for acquiring PDF documents from web sources and extracting their text content, with multiple fallback mechanisms to handle various failure modes.\n\n## Overview\n\nWhen working with PDFs from web sources, encounters with JavaScript redirects, corrupted files, missing tools, or inaccessible content are common. This workflow ensures maximum success rate through progressive fallback strategies.\n\n## Step-by-Step Instructions\n\n### Step 1: Download PDF with Browser User-Agent\n\nMany PDF hosting sites use JavaScript-based redirects or block automated requests. Use curl with a realistic browser user-agent:\n\n```bash\ncurl -L -A \"Mozilla\u002F5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\u002F537.36 (KHTML, like Gecko) Chrome\u002F120.0.0.0 Safari\u002F537.36\" -o output.pdf \"URL_HERE\"\n```\n\nKey flags:\n- `-L`: Follow redirects\n- `-A`: Set user-agent header to mimic a real browser\n- `-o`: Specify output filename\n\n### Step 2: Verify File Type Before Parsing\n\nAlways validate the downloaded file is actually a PDF before attempting extraction:\n\n```bash\nfile output.pdf\n```\n\nExpected output should contain \"PDF document\". If not:\n- The URL may have redirected to an HTML error page\n- The file may be corrupted\n- Access may be blocked\n\n### Step 3: Primary Extraction with pdftotext\n\nFirst attempt extraction using the standard `pdftotext` utility (part of poppler-utils):\n\n```bash\npdftotext output.pdf output.txt\n```\n\nIf `pdftotext` is not available, install it:\n```bash\n# Debian\u002FUbuntu\napt-get update && apt-get install -y poppler-utils\n\n# macOS\nbrew install poppler\n\n# RHEL\u002FCentOS\nyum install -y poppler-utils\n```\n\n### Step 4: Fallback to PyMuPDF (fitz)\n\nIf `pdftotext` fails or produces poor results, use Python's PyMuPDF library:\n\n```python\nimport fitz  # PyMuPDF\n\ndoc = fitz.open(\"output.pdf\")\ntext = \"\"\nfor page in doc:\n    text += page.get_text()\ndoc.close()\n\nwith open(\"output.txt\", \"w\") as f:\n    f.write(text)\n```\n\nInstall if needed:\n```bash\npip install pymupdf\n```\n\n### Step 5: Graceful Degradation to Domain Knowledge\n\nIf the PDF cannot be accessed or extracted after all attempts:\n\n1. Document the failure mode (network issue, corrupted file, access denied, etc.)\n2. Extract any partial content that was successfully retrieved\n3. Supplement missing content from established domain knowledge\n4. Clearly mark which portions are from source vs. generated from knowledge\n5. Provide citations for any claimed requirements or specifications\n\nExample degradation note:\n```\nNOTE: Source document [URL] was inaccessible due to [reason]. \nContent below combines partial extraction with established domain knowledge \nfor [topic]. Verify against official sources when available.\n```\n\n## Complete Workflow Script\n\n```bash\n#!\u002Fbin\u002Fbash\n# pdf-extract-workflow.sh\n# pdf-extract-workflow.sh - Handles both URL downloads and local files\n\nINPUT=\"$1\"\nOUTPUT_PDF=\"downloaded.pdf\"\nOUTPUT_TXT=\"extracted.txt\"\n\nif [[ \"$INPUT\" =~ ^https?:\u002F\u002F ]]; then\n    # Mode A: URL download\n    PDF_URL=\"$INPUT\"\n    echo \"Downloading PDF from URL...\"\n    curl -L -A \"Mozilla\u002F5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\u002F537.36\" -o \"$OUTPUT_PDF\" \"$PDF_URL\"\nelse\n    # Mode B: Local file\n    if [ ! -f \"$INPUT\" ]; then\n        echo \"ERROR: Local file not found: $INPUT\"\n        exit 1\n    fi\n    OUTPUT_PDF=\"$INPUT\"\n    echo \"Using local file: $INPUT\"\nfi\n\n# Step 2: Verify file type\necho \"Verifying file type...\"\nif ! file \"$OUTPUT_PDF\" | grep -q \"PDF document\"; then\n    echo \"WARNING: Downloaded file is not a valid PDF\"\n    echo \"Attempting fallback extraction anyway...\"\nfi\n\n# Step 3: Try pdftotext\necho \"Attempting pdftotext extraction...\"\nif command -v pdftotext &> \u002Fdev\u002Fnull; then\n    if pdftotext \"$OUTPUT_PDF\" \"$OUTPUT_TXT\" 2>\u002Fdev\u002Fnull; then\n        echo \"Extraction successful with pdftotext\"\n        exit 0\n    fi\nfi\n\n# Step 4: Fallback to PyMuPDF\necho \"Falling back to PyMuPDF...\"\npython3 \u003C\u003C 'PYTHON_SCRIPT'\nimport fitz\nimport sys\n\ntry:\n    doc = fitz.open(\"downloaded.pdf\")\n    text = \"\"\n    for page in doc:\n        text += page.get_text()\n    doc.close()\n    with open(\"extracted.txt\", \"w\") as f:\n        f.write(text)\n    print(\"Extraction successful with PyMuPDF\")\n    sys.exit(0)\nexcept Exception as e:\n    print(f\"PyMuPDF failed: {e}\")\n    sys.exit(1)\nPYTHON_SCRIPT\n\n# Step 5: Handle complete failure\n# Step 5: Handle complete failure (domain knowledge fallback)\nif [ $? -ne 0 ]; then\n    echo \"ERROR: All extraction methods failed.\"\n    echo \"ACTION: Generate content from domain knowledge and clearly mark source limitations.\"\n    echo \"Document the failure and proceed with knowledge-based content generation.\"\nfi\n```\n\n## Best Practices\n\n1. **Always verify before parsing**: Never assume a downloaded file is valid\n2. **Pre-check tools before extraction**: Verify pdftotext or PyMuPDF availability before starting\n3. **Local files skip download**: When PDF is already on disk, begin at file validation step\n2. **Preserve original PDF**: Keep the downloaded file for debugging if needed\n3. **Log each step**: Document which method succeeded for future reference\n4. **Check extraction quality**: Verify extracted text is readable and complete\n5. **Cite source limitations**: When using fallback knowledge, clearly indicate source gaps\n\n## Common Failure Modes\n\n| Symptom | Cause | Solution |\n|---------|-------|----------|\n| HTML content in file | URL redirected to error page or wrong file type | Check HTTP status, verify file with `file` command |\n| Empty extraction | Password-protected or scanned PDF | Try OCR tools or request accessible version |\n| Garbled text | Encoding issues | Try PyMuPDF with different extraction mode |\n| Curl blocked | Anti-bot measures | Add more headers, use delay between requests |\n| **pdftotext not found** | Tool not installed | Run `apt-get install poppler-utils` or use PyMuPDF fallback |\n| **PyMuPDF import failed** | Package not installed | Run `pip install pymupdf` |\n| **File not found (local)** | Incorrect path or file not accessible | Verify file path, check permissions, confirm file was uploaded |\n\n## When to Use This Skill\n\n- **Mode A (URL download)**: Downloading documents from web sources\n- **Mode B (Local file)**: Processing PDFs already on disk or uploaded as reference files\n- Extracting content from technical manuals or handbooks\n- Processing PDFs in automated pipelines where reliability matters\n- Any situation where PDF access may be unreliable or restricted\n\n## Local File Processing Workflow\n\nWhen you already have the PDF file locally (not from a URL):\n\n### Step L1: Verify File Exists\n\n```bash\nif [ ! -f \"your_file.pdf\" ]; then\n    echo \"ERROR: File not found\"\n    echo \"ACTION: Verify the file path and that the file was successfully uploaded\"\n    exit 1\nfi\n```\n\n### Step L2: Validate File Type\n\n```bash\nfile your_file.pdf\n```\n\nExpected output should contain \"PDF document\". If not, the file may be corrupted or mislabeled.\n\n### Step L3: Proceed to Extraction\n\nAfter validation, skip directly to **Step 3: Primary Extraction with pdftotext** in the main workflow.\n\n## Tool Availability Pre-Check\n\nBefore attempting any PDF extraction, verify your environment has the necessary tools:\n\n```bash\n# Check pdftotext availability\ncommand -v pdftotext && echo \"pdftotext: AVAILABLE\" || echo \"pdftotext: NOT FOUND - install poppler-utils\"\n\n# Check PyMuPDF availability  \npython3 -c \"import fitz; print('PyMuPDF: AVAILABLE')\" 2>\u002Fdev\u002Fnull || echo \"PyMuPDF: NOT FOUND - run: pip install pymupdf\"\n```\n\n**Installation commands if tools are missing:**\n\n```bash\n# Install pdftotext (poppler-utils)\napt-get update && apt-get install -y poppler-utils  # Debian\u002FUbuntu\nyum install -y poppler-utils                        # RHEL\u002FCentOS\nbrew install poppler                                # macOS\n\n# Install PyMuPDF\npip install pymupdf\n```\n\n---\nname: pdf-download-extract-fallback\ndescription: Multi-step PDF download and text extraction with progressive fallback strategies\n---\nThis skill provides a robust workflow for acquiring PDF documents from web sources **or processing locally-available files** and extracting their text content, with multiple fallback mechanisms to handle various failure modes.\n## Entry Point: Determine Your Starting Point\n\n**Before beginning, identify your scenario:**\n\n| Scenario | Start Here | Skip |\n|----------|-----------|------|\n| PDF already on local disk | Step 2 (Verify File Type) | Step 1 (Download) |\n| PDF at a web URL | Step 1 (Download) | None |\n\n## Overview\n\nWhen working with PDFs from web sources **or local files**, encounters with corrupted files, missing tools, or inaccessible content are common. This workflow ensures maximum success rate through progressive fallback strategies.\n## Mode A: Web URL Download\n\n### Step 1: Download PDF with Browser User-Agent\n\nMany PDF hosting sites use JavaScript-based redirects or block automated requests. Use curl with a realistic browser user-agent:\n\n```bash\ncurl -L -A \"Mozilla\u002F5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\u002F537.36 (KHTML, like Gecko) Chrome\u002F120.0.0.0 Safari\u002F537.36\" -o output.pdf \"URL_HERE\"\n```\n\nKey flags:\n- `-L`: Follow redirects\n- `-A`: Set user-agent header to mimic a real browser\n- `-o`: Specify output filename\n\n## Mode B: Local File Processing\n\nIf you already have the PDF file locally, **skip Step 1** and begin here:\n\nAlways validate the file is actually a PDF before attempting extraction:\n## Complete Workflow Script (Handles Both URL and Local File)\n",{"name":5,"description":7},"main","6b84b0689ca0d9e7b1e4061188ff6b60758e0f8a","openspace\u002Fbenchmarks\u002Fgdpval\u002Fskills\u002Fpdf-download-extract-fallback",940,"https:\u002F\u002Fgithub.com\u002FHKUDS\u002FAgentPilot","https:\u002F\u002Fgithub.com\u002FHKUDS","https:\u002F\u002Fsites.google.com\u002Fview\u002Fchaoh","2026-11-06 23:04:01",{"source":8,"skillName":5,"commands":51,"prompt":61,"zipAvailable":62},[52,55,58],{"tool":53,"command":54},"npx","npx skills add HKUDS\u002FAgentPilot --skill pdf-download-extract-fallback",{"tool":56,"command":57},"bunx","bunx skills add HKUDS\u002FAgentPilot --skill pdf-download-extract-fallback",{"tool":59,"command":60},"pnpm","pnpm dlx skills add HKUDS\u002FAgentPilot --skill pdf-download-extract-fallback","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FHKUDS\u002FAgentPilot\u002Fblob\u002Fmain\u002Fopenspace\u002Fbenchmarks\u002Fgdpval\u002Fskills\u002Fpdf-download-extract-fallback\u002FSKILL.md",true,[64],{"path":65,"resourceType":66,"resourceTypeDesc":67,"sizeBytes":68,"sourceHtmlUrl":69},".skill_id","OTHER","其他",43,"https:\u002F\u002Fgithub.com\u002FHKUDS\u002FAgentPilot\u002Fblob\u002Fmain\u002Fopenspace\u002Fbenchmarks\u002Fgdpval\u002Fskills\u002Fpdf-download-extract-fallback\u002F.skill_id",[71,90,109,130,154,177],{"skillNo":72,"name":73,"nameZh":6,"description":74,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":75,"categories":76,"keywords":77,"publishedAt":37},"01M6HYB297NDABRERJRVG0K8R0","agentpilot","Set up AgentPilot and use its single entry to prepare missing inputs and run configured RSI experiments. Use when the user requests AgentPilot installation or work with AgentPilot.","https:\u002F\u002Fgithub.com\u002FHKUDS\u002FAgentPilot\u002Fblob\u002Fmain\u002Fplugins\u002Fagentpilot\u002Fskills\u002Fagentpilot\u002FSKILL.md",[],[73,78,79,36,80,81,82,83,84,85,86,87,88,89],"prepare","requests","missing","installation","rsi","up","use","user","work","SET","run","experiments",{"skillNo":91,"name":92,"nameZh":6,"description":93,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":94,"categories":95,"keywords":96,"publishedAt":37},"01M6HYAYWXTTE1J7DJM0MFNQ4H","remember","Review auto-memory entries and propose promotions to OPENSPACE.md, OPENSPACE.local.md, or retained auto-memory topics; detect duplicates, stale facts, conflicts, and ambiguous entries before making changes.","https:\u002F\u002Fgithub.com\u002FHKUDS\u002FAgentPilot\u002Fblob\u002Fmain\u002Fopenspace\u002Fopenspace\u002Fskills\u002Fremember\u002FSKILL.md",[],[92,97,98,99,100,101,102,103,104,105,106,107,108],"memory","review","auto","openspace","changes","facts","detect","entries","local","conflicts","stale","duplicates",{"skillNo":110,"name":111,"nameZh":6,"description":112,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":113,"categories":114,"keywords":116,"publishedAt":37},"01M6HYAVMPM4SBDV60R2B5HPV8","skill-discovery","Search reusable OpenSpace skills locally, and browse cloud packages step by step when a cloud skill may help. Reusing proven skills saves tokens, improves reliability, and extends your capabilities beyond built-in tools.","https:\u002F\u002Fgithub.com\u002FHKUDS\u002FAgentPilot\u002Fblob\u002Fmain\u002Fopenspace\u002Fopenspace\u002Fhost_skills\u002Fskill-discovery\u002FSKILL.md",[115],{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},[117,118,119,100,120,121,122,123,124,125,126,127,128,129],"skill discovery","discovery","reusable","step by step","tokens","packages","help","cloud","reliability","capabilities","browse","search","Tools",{"skillNo":131,"name":132,"nameZh":6,"description":133,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":134,"categories":135,"keywords":137,"publishedAt":37},"01M6HYAR811B3RB0M50RBEDGN6","delegate-task","Delegate tasks to OpenSpace — a full-stack autonomous worker for coding, DevOps, web research, and desktop automation, backed by an extensive MCP tool and skill library. Skills auto-improve through use, reducing token consumption over time. A cloud community lets agents share and collectively evolve reusable skills.","https:\u002F\u002Fgithub.com\u002FHKUDS\u002FAgentPilot\u002Fblob\u002Fmain\u002Fopenspace\u002Fopenspace\u002Fhost_skills\u002Fdelegate-task\u002FSKILL.md",[136],{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},[138,139,140,100,141,142,143,144,145,119,99,84,146,147,148,149,150,151,152,153],"delegate","task","delegate task","time","improve","desktop automation","worker","community","autonomous","tool","stack","for","share","tasks","automation","MCP",{"skillNo":155,"name":156,"nameZh":6,"description":157,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":158,"categories":159,"keywords":160,"publishedAt":37},"01M6HYAM9FSGV6E52AYENDQXYH","write-special-chars-ts-check","Workaround for write_file failures caused by special characters (apostrophes, backticks, template literals) using a Python heredoc script, plus a reliable TypeScript type-checking step that filters output to only the newly-written files to avoid being misled by pre-existing errors.","https:\u002F\u002Fgithub.com\u002FHKUDS\u002FAgentPilot\u002Fblob\u002Fmain\u002Fopenspace\u002Flegacy\u002Fv1\u002Fshowcase\u002Fskills\u002Fwrite-special-chars-ts-check\u002FSKILL.md",[],[161,162,163,164,165,166,167,168,169,170,171,172,173,174,149,175,176],"write special chars ts check","write","check","type","files","filters","only","template","file","python","typescript","output","Existing","type-checking","errors","script",{"skillNo":178,"name":179,"nameZh":6,"description":180,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":181,"categories":182,"keywords":183,"publishedAt":37},"01M6HYAH05HGV7SVWSVR8PJRQD","write-special-chars-readback","Workaround for write_file failures caused by special characters (apostrophes, backticks, template literals) using a Python heredoc script, with mandatory post-write verification via read_file and cleanup of \u002Ftmp helper scripts.","https:\u002F\u002Fgithub.com\u002FHKUDS\u002FAgentPilot\u002Fblob\u002Fmain\u002Fopenspace\u002Flegacy\u002Fv1\u002Fshowcase\u002Fskills\u002Fwrite-special-chars-readback\u002FSKILL.md",[],[184,185,162,36,149,176,186,187,188,189,190,168,169,191,192,170],"write special chars readback","readback","helper","post","via","scripts","read","verification","cleanup"]