{
  "schemaVersion": "1.0",
  "item": {
    "slug": "hxxra",
    "name": "hxxra",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/cxlhyx/hxxra",
    "canonicalUrl": "https://clawhub.ai/cxlhyx/hxxra",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/hxxra",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=hxxra",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md",
      "config.json",
      "scripts/hxxra.py"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-05-07T17:22:31.273Z",
      "expiresAt": "2026-05-14T17:22:31.273Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=afrexai-annual-report",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=afrexai-annual-report",
        "contentDisposition": "attachment; filename=\"afrexai-annual-report-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/hxxra"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/hxxra",
    "agentPageUrl": "https://openagent3.xyz/skills/hxxra/agent",
    "manifestUrl": "https://openagent3.xyz/skills/hxxra/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/hxxra/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "hxxra",
        "body": "This skill is a Research Assistant that helps users search, download, analyze, report, and save research papers."
      },
      {
        "title": "Recommended Directory Structure",
        "body": "For better organization, it is recommended to create a dedicated workspace for hxxra under your OpenClaw working directory:\n\n📁 workspace/                              # OpenClaw current working directory\n└── 📁 hxxra/\n    ├── 📁 searches/                       # Stores all search result JSON files\n        ├── 2025-03-07_neural_radiance_fields_arxiv.json\n        ├── 2025-03-07_transformer_architectures_scholar.json\n        └── ...\n    ├── 📁 papers/                           # Stores downloaded PDF files and per-paper analysis results (each as a subfolder)\n        ├── papers_report.md                # Generated Markdown report summarizing all analyzed papers\n        ├── 2023_Smith_NeRF_Explained/      # Folder named after the PDF (without extension)\n          ├── 2023_Smith_NeRF_Explained.pdf\n          ├── analysis.json                 # Structured output from LLM analysis\n          └── notes.md                      # (Optional) User-added notes\n        ├── 2024_Zhang_Transformer_Survey/\n          ├── 2024_Zhang_Transformer_Survey.pdf\n          ├── analysis.json\n          └── ...\n        └── ...\n    └── 📁 logs/ # Stores execution logs\n        └── hxxra_2025-03-07.log\n\nThis structure keeps all related files organized and easily accessible for review and further processing."
      },
      {
        "title": "1. hxxra search - Search for research papers",
        "body": "Dependencies: pip install scholarly\n\nPurpose: Search for papers using Google Scholar and arXiv APIs\n\nAcademic Note: To account for the distinct characteristics of each data source, the tool adopts a differentiated sorting strategy—arXiv results are ordered by submission date in descending order, prioritizing the timeliness of recent research; Google Scholar results retain the source's default relevance ranking, ensuring strong alignment with the query keywords while appropriately weighing influential or classical literature.\n\nParameters:\n\n-q, --query <string> (Required): Search keywords\n-s, --source <string> (Optional): Data source: arxiv (default), scholar\n-l, --limit <number> (Optional): Number of results (default: 10)\n-o, --output <path> (Optional): JSON output file (default: {workspace}/hxxra/searches/search_results.json)\n\nInput Examples:\n\n{\"command\": \"search\", \"query\": \"neural radiance fields\", \"source\": \"arxiv\", \"limit\": 10, \"output\": \"results.json\"} | python scripts/hxxra.py\n{\"command\": \"search\", \"query\": \"transformer architecture\", \"source\": \"scholar\", \"limit\": 15} | python scripts/hxxra.py\n\nOutput Structure:\n\n{\n  \"ok\": true,\n  \"command\": \"search\",\n  \"query\": \"<query>\",\n  \"source\": \"<source>\",\n  \"results\": [\n    {\n      \"id\": \"1\",\n      \"title\": \"Paper Title\",\n      \"authors\": [\"Author1\", \"Author2\"],\n      \"year\": \"2023\",\n      \"source\": \"arxiv\",\n      \"abstract\": \"Abstract text...\",\n      \"url\": \"https://arxiv.org/abs/xxxx.xxxxx\",\n      \"pdf_url\": \"https://arxiv.org/pdf/xxxx.xxxxx.pdf\",\n      \"citations\": 123\n    }\n  ],\n  \"total\": 10,\n  \"output_file\": \"/path/to/results.json\"\n}"
      },
      {
        "title": "2. hxxra download - Download PDF files",
        "body": "Purpose: Download PDFs for specified papers\n\nParameters:\n\n-f, --from-file <path> (Required): JSON file with search results\n-i, --ids <list> (Optional): Paper IDs (comma-separated or range)\n-d, --dir <path> (Optional): Download directory (default: {workspace}/hxxra/papers/)\n\nInput Examples:\n\n{\"command\": \"download\", \"from-file\": \"results.json\", \"ids\": [\"1\", \"3\", \"5\"], \"dir\": \"./downloads\"} | python scripts/hxxra.py\n{\"command\": \"download\", \"from-file\": \"results.json\", \"dir\": \"./downloads\"} | python scripts/hxxra.py\n\nOutput Structure:\n\n{\n  \"ok\": true,\n  \"command\": \"download\",\n  \"downloaded\": [\n    {\n      \"id\": \"1\",\n      \"title\": \"Paper Title\",\n      \"status\": \"success\",\n      \"pdf_path\": \"{workspace}/hxxra/papers/2023_Smith_NeRF_Explained/2023_Smith_NeRF_Explained.pdf\",\n      \"size_bytes\": 1234567,\n      \"url\": \"https://arxiv.org/pdf/xxxx.xxxxx.pdf\"\n    }\n  ],\n  \"failed\": [],\n  \"total\": 3,\n  \"successful\": 3,\n  \"download_dir\": \"{workspace}/hxxra/papers\"\n}"
      },
      {
        "title": "3. hxxra analyze - Analyze PDF content",
        "body": "Dependencies: pip install pymupdf pdfplumber openai\n\nPurpose: Analyze paper content using LLM\n\nParameters:\n\n-p, --pdf <path> (Optional*): Single PDF file to analyze\n-d, --directory <path> (Optional*): Directory with multiple PDFs\n-o, --output <path> (Optional): Output directory. If not specified, analysis results will be saved in the same subfolder as the PDF (default: {workspace}/hxxra/papers/{paper_title}/analysis.json)\n\n** Note: Either --pdf or --directory must be provided, but not both*\n\nInput Examples:\n\n{\"command\": \"analyze\", \"pdf\": \"paper.pdf\", \"output\": \"./analysis/\"} | python scripts/hxxra.py\n{\"command\": \"analyze\", \"directory\": \"hxxra/papers/\"} | python scripts/hxxra.py\n\nOutput Structure:\n\n{\n  \"ok\": true,\n  \"command\": \"analyze\",\n  \"analyzed\": [\n    {\n      \"id\": \"paper_1\",\n      \"original_file\": \"paper.pdf\",\n      \"analysis_file\": \"{workspace}/hxxra/papers/2023_Smith_NeRF_Explained/analysis.json\",\n      \"metadata\": {\n        \"title\": \"Paper Title\",\n        \"authors\": [\"Author1\", \"Author2\"],\n        \"year\": \"2023\",\n        \"abstract\": \"Abstract text...\"\n      },\n      \"analysis\": {\n        \"background\": \"Problem background...\",\n        \"methodology\": \"Proposed method...\",\n        \"results\": \"Experimental results...\",\n        \"conclusions\": \"Conclusions...\"\n      },\n      \"status\": \"success\"\n    }\n  ],\n  \"summary\": {\n    \"total\": 1,\n    \"successful\": 1,\n    \"failed\": 0\n  }\n}"
      },
      {
        "title": "4. hxxra report - Generate Markdown report",
        "body": "Purpose: Generate a comprehensive Markdown report from all analysis.json files in a directory\n\nParameters:\n\n-d, --directory <path> (Required): Directory containing paper folders with analysis.json files\n-o, --output <path> (Optional): Output Markdown file path (default: {directory}/report.md)\n-t, --title <string> (Optional): Report title (default: \"Research Papers Report\")\n-s, --sort <string> (Optional): Sort by: year (default, descending), title, or author\n\nInput Examples:\n\n{\"command\": \"report\", \"directory\": \"hxxra/papers/\", \"output\": \"hxxra/papers/report.md\", \"title\": \"My Research Papers\", \"sort\": \"year\"} | python scripts/hxxra.py\n{\"command\": \"report\", \"directory\": \"hxxra/papers/\"} | python scripts/hxxra.py\n\nOutput Structure:\n\n{\n  \"ok\": true,\n  \"command\": \"report\",\n  \"total_papers\": 10,\n  \"output_file\": \"/path/to/hxxra/papers/report.md\"\n}\n\nGenerated Markdown Format:\n\nThe generated report includes:\n\nHeader: Title, generation date, total papers, data source\nKeywords Table: Top 15 most frequent keywords across all papers\nOverview Table: Quick summary of all papers (title, author, year, keywords)\nDetailed Content: For each paper:\n\nTitle, authors, year, keywords, code link (if available)\nAbstract\nResearch background\nMethodology\nMain results\nConclusions\nLimitations\nImpact\nSource folder path\n\nNote: The report command recursively scans all subdirectories for analysis.json files and only includes papers with status: \"success\"."
      },
      {
        "title": "5. hxxra save - Save to Zotero",
        "body": "Purpose: Save papers to Zotero collection\n\nParameters:\n\n-f, --from-file <path> (Required): JSON file with search results (e.g., hxxra/searches/search_results.json)\n-i, --ids <list> (Optional): Paper IDs to save\n-c, --collection <string> (Required): Zotero collection name\n\nInput Examples:\n\n{\"command\": \"save\", \"from-file\": \"hxxra/searches/search_results.json\", \"ids\": [\"1\", \"2\", \"3\"], \"collection\": \"AI Research\"} | python scripts/hxxra.py\n{\"command\": \"save\", \"from-file\": \"hxxra/searches/search_results.json\", \"collection\": \"My Collection\"} | python scripts/hxxra.py\n\nOutput Structure:\n\n{\n  \"ok\": true,\n  \"command\": \"save\",\n  \"collection\": \"AI Research\",\n  \"saved_items\": [\n    {\n      \"id\": \"1\",\n      \"title\": \"Paper Title\",\n      \"zotero_key\": \"ABCD1234\",\n      \"url\": \"https://www.zotero.org/items/ABCD1234\",\n      \"status\": \"success\"\n    }\n  ],\n  \"failed_items\": [],\n  \"total\": 3,\n  \"successful\": 3,\n  \"zotero_collection\": \"ABCD5678\"\n}"
      },
      {
        "title": "Complete Workflow",
        "body": "# 1. Search for papers\n{\"command\": \"search\", \"query\": \"graph neural networks\", \"source\": \"arxiv\", \"limit\": 10, \"output\": \"hxxra/searches/gnn_arxiv.json\"} | python scripts/hxxra.py\n\n# 2. Download papers\n{\"command\": \"download\", \"from-file\": \"hxxra/searches/gnn_arxiv.json\", \"dir\": \"hxxra/papers\"} | python scripts/hxxra.py\n\n# 3. Analyze downloaded papers\n{\"command\": \"analyze\", \"directory\": \"hxxra/papers/\"} | python scripts/hxxra.py\n\n# 4. Generate comprehensive report\n{\"command\": \"report\", \"directory\": \"hxxra/papers/\", \"output\": \"hxxra/papers/report.md\", \"sort\": \"year\"} | python scripts/hxxra.py\n\n# 5. Save to Zotero\n{\"command\": \"save\", \"from-file\": \"hxxra/searches/gnn_arxiv.json\", \"collection\": \"GNN Papers\"} | python scripts/hxxra.py"
      },
      {
        "title": "Single Command Examples",
        "body": "# Search with scholar\n{\"command\": \"search\", \"query\": \"reinforcement learning\", \"source\": \"scholar\", \"limit\": 15} | python scripts/hxxra.py\n\n# Download specific papers\n{\"command\": \"download\", \"from-file\": \"hxxra/searches/search_results.json\", \"ids\": [\"2\", \"4\", \"6\"], \"dir\": \"hxxra/papers\"} | python scripts/hxxra.py\n\n# Analyze single PDF in detail\n{\"command\": \"analyze\", \"pdf\": \"hxxra/papers/2024_Zhang_Transformer_Survey/2024_Zhang_Transformer_Survey.pdf\"} | python scripts/hxxra.py\n\n# Generate report sorted by title\n{\"command\": \"report\", \"directory\": \"hxxra/papers/\", \"sort\": \"title\", \"output\": \"hxxra/papers/report_by_title.md\"} | python scripts/hxxra.py\n\n# Save with custom notes\n{\"command\": \"save\", \"from-file\": \"hxxra/searches/search_results.json\", \"ids\": [\"1\"], \"collection\": \"To Read\"} | python scripts/hxxra.py"
      },
      {
        "title": "API Credentials(config.json)",
        "body": "arXiv API: No key required for basic access\n\n\nGoogle Scholar: May require authentication for large queries\n\n\nZotero API: Required credentials:\n{\n  \"api_key\": \"YOUR_ZOTERO_API_KEY\", # Create at https://www.zotero.org/settings/keys/new\n  \"user_id\": \"YOUR_ZOTERO_USER_ID\", # Found on the same page (numeric, not username)\n  \"library_type\": \"user\"  # or \"group\"\n}\n\n\n\nLLM API: OpenAI or compatible API key for analysis"
      },
      {
        "title": "Notes",
        "body": "All commands are executed via stdin/stdout JSON communication\nError handling returns {\"ok\": false, \"error\": \"Error message\"}\nLarge operations support progress reporting via intermediate messages\nConfiguration is loaded from config.json or environment variables\nConcurrent operations have configurable limits to avoid rate limiting"
      },
      {
        "title": "Error Handling",
        "body": "Each command returns standard error format:\n\n{\n  \"ok\": false,\n  \"command\": \"<command>\",\n  \"error\": \"Error description\",\n  \"error_code\": \"ERROR_TYPE\",\n  \"suggestion\": \"How to fix it\"\n}"
      },
      {
        "title": "Version History",
        "body": "v1.2.0 · 2026/3/8\n\nAdded report command to generate comprehensive Markdown reports from all analysis.json files\nReport includes keyword statistics, overview table, and detailed content for each paper\nSupports sorting by year (default), title, or author\nGenerates clean, readable Markdown format with tables, headers, and structured content\nUpdated documentation to include the new report command in workflows and examples\n\nv1.1.1 · 2026/3/7\n\nAdded sanitize_filename() function to unify filename and folder name handling for downloaded papers.\nModified handle_download function to use the new sanitization function for author names and titles.\nImproved filename safety: now only allows letters, numbers, and underscores; multiple consecutive underscores are merged; length limited to 50 characters.\n\nv1.1.0 · 2026/3/7\n\nAdded a recommended directory structure for optimal organization of search results, papers, analysis, and logs.\nUpdated all examples and default output locations to align with the new {workspace}/hxxra/ folder layout.\nClarified file storage practices: each downloaded paper now has its own subfolder containing the PDF and analysis files.\nImproved documentation for command parameters and outputs to reflect the directory structure changes.\nEnhanced clarity of workflow steps, making it easier to manage, locate, and share research outputs.\nFixed ids data handling: improved ID matching logic to support both string and numeric ID comparisons in download and save commands.\nFixed analyze output parameter: output directory is now only created when explicitly specified, otherwise analysis results are saved in the same subfolder as the PDF.\nFixed Zotero API \"400 Bad Request\" error: changed data format from object to array ([item_data]) to comply with Zotero API requirements\n\nv1.0.2 · 2026/3/6\n\nModified hxxra.py script to add fix_proxy_env() function call, resolving the issue where ALL_PROXY and all_proxy are reset to socks://127.0.0.1:7897/ in new OpenClaw sessions, causing search failures\n\nv1.0.1 · 2026/3/6\n\nAdded academic note clarifying that arXiv search results are sorted by most recent submission date, while Google Scholar results use the source's default relevance ranking\nNo changes to command structure, parameters, or output formats\n\nv1.0.0 · 2026/2/9\n\nInitial release of hxxra – a research assistant tool for searching, downloading, analyzing, and saving research papers.\n\nIntroduces four core JSON-based commands: search, download, analyze, save\nSupports searching papers via Google Scholar and arXiv, with flexible parameters and output structure\nEnables PDF downloads using search results, with fine-grained ID selection and status reporting\nIntegrates LLM-driven PDF content analysis, providing structured output for one or many papers\nAllows saving papers to Zotero collections, requiring user API credentials\nFeatures robust parameter validation, error handling, and documentation with usage examples"
      }
    ],
    "body": "hxxra\n\nThis skill is a Research Assistant that helps users search, download, analyze, report, and save research papers.\n\nRecommended Directory Structure\n\nFor better organization, it is recommended to create a dedicated workspace for hxxra under your OpenClaw working directory:\n\n📁 workspace/                              # OpenClaw current working directory\n└── 📁 hxxra/\n    ├── 📁 searches/                       # Stores all search result JSON files\n        ├── 2025-03-07_neural_radiance_fields_arxiv.json\n        ├── 2025-03-07_transformer_architectures_scholar.json\n        └── ...\n    ├── 📁 papers/                           # Stores downloaded PDF files and per-paper analysis results (each as a subfolder)\n        ├── papers_report.md                # Generated Markdown report summarizing all analyzed papers\n        ├── 2023_Smith_NeRF_Explained/      # Folder named after the PDF (without extension)\n          ├── 2023_Smith_NeRF_Explained.pdf\n          ├── analysis.json                 # Structured output from LLM analysis\n          └── notes.md                      # (Optional) User-added notes\n        ├── 2024_Zhang_Transformer_Survey/\n          ├── 2024_Zhang_Transformer_Survey.pdf\n          ├── analysis.json\n          └── ...\n        └── ...\n    └── 📁 logs/ # Stores execution logs\n        └── hxxra_2025-03-07.log\n\n\nThis structure keeps all related files organized and easily accessible for review and further processing.\n\nCore Commands\n1. hxxra search - Search for research papers\n\nDependencies: pip install scholarly\n\nPurpose: Search for papers using Google Scholar and arXiv APIs\n\nAcademic Note: To account for the distinct characteristics of each data source, the tool adopts a differentiated sorting strategy—arXiv results are ordered by submission date in descending order, prioritizing the timeliness of recent research; Google Scholar results retain the source's default relevance ranking, ensuring strong alignment with the query keywords while appropriately weighing influential or classical literature.\n\nParameters:\n\n-q, --query <string> (Required): Search keywords\n-s, --source <string> (Optional): Data source: arxiv (default), scholar\n-l, --limit <number> (Optional): Number of results (default: 10)\n-o, --output <path> (Optional): JSON output file (default: {workspace}/hxxra/searches/search_results.json)\n\nInput Examples:\n\n{\"command\": \"search\", \"query\": \"neural radiance fields\", \"source\": \"arxiv\", \"limit\": 10, \"output\": \"results.json\"} | python scripts/hxxra.py\n{\"command\": \"search\", \"query\": \"transformer architecture\", \"source\": \"scholar\", \"limit\": 15} | python scripts/hxxra.py\n\n\nOutput Structure:\n\n{\n  \"ok\": true,\n  \"command\": \"search\",\n  \"query\": \"<query>\",\n  \"source\": \"<source>\",\n  \"results\": [\n    {\n      \"id\": \"1\",\n      \"title\": \"Paper Title\",\n      \"authors\": [\"Author1\", \"Author2\"],\n      \"year\": \"2023\",\n      \"source\": \"arxiv\",\n      \"abstract\": \"Abstract text...\",\n      \"url\": \"https://arxiv.org/abs/xxxx.xxxxx\",\n      \"pdf_url\": \"https://arxiv.org/pdf/xxxx.xxxxx.pdf\",\n      \"citations\": 123\n    }\n  ],\n  \"total\": 10,\n  \"output_file\": \"/path/to/results.json\"\n}\n\n2. hxxra download - Download PDF files\n\nPurpose: Download PDFs for specified papers\n\nParameters:\n\n-f, --from-file <path> (Required): JSON file with search results\n-i, --ids <list> (Optional): Paper IDs (comma-separated or range)\n-d, --dir <path> (Optional): Download directory (default: {workspace}/hxxra/papers/)\n\nInput Examples:\n\n{\"command\": \"download\", \"from-file\": \"results.json\", \"ids\": [\"1\", \"3\", \"5\"], \"dir\": \"./downloads\"} | python scripts/hxxra.py\n{\"command\": \"download\", \"from-file\": \"results.json\", \"dir\": \"./downloads\"} | python scripts/hxxra.py\n\n\nOutput Structure:\n\n{\n  \"ok\": true,\n  \"command\": \"download\",\n  \"downloaded\": [\n    {\n      \"id\": \"1\",\n      \"title\": \"Paper Title\",\n      \"status\": \"success\",\n      \"pdf_path\": \"{workspace}/hxxra/papers/2023_Smith_NeRF_Explained/2023_Smith_NeRF_Explained.pdf\",\n      \"size_bytes\": 1234567,\n      \"url\": \"https://arxiv.org/pdf/xxxx.xxxxx.pdf\"\n    }\n  ],\n  \"failed\": [],\n  \"total\": 3,\n  \"successful\": 3,\n  \"download_dir\": \"{workspace}/hxxra/papers\"\n}\n\n3. hxxra analyze - Analyze PDF content\n\nDependencies: pip install pymupdf pdfplumber openai\n\nPurpose: Analyze paper content using LLM\n\nParameters:\n\n-p, --pdf <path> (Optional*): Single PDF file to analyze\n-d, --directory <path> (Optional*): Directory with multiple PDFs\n-o, --output <path> (Optional): Output directory. If not specified, analysis results will be saved in the same subfolder as the PDF (default: {workspace}/hxxra/papers/{paper_title}/analysis.json)\n\n** Note: Either --pdf or --directory must be provided, but not both*\n\nInput Examples:\n\n{\"command\": \"analyze\", \"pdf\": \"paper.pdf\", \"output\": \"./analysis/\"} | python scripts/hxxra.py\n{\"command\": \"analyze\", \"directory\": \"hxxra/papers/\"} | python scripts/hxxra.py\n\n\nOutput Structure:\n\n{\n  \"ok\": true,\n  \"command\": \"analyze\",\n  \"analyzed\": [\n    {\n      \"id\": \"paper_1\",\n      \"original_file\": \"paper.pdf\",\n      \"analysis_file\": \"{workspace}/hxxra/papers/2023_Smith_NeRF_Explained/analysis.json\",\n      \"metadata\": {\n        \"title\": \"Paper Title\",\n        \"authors\": [\"Author1\", \"Author2\"],\n        \"year\": \"2023\",\n        \"abstract\": \"Abstract text...\"\n      },\n      \"analysis\": {\n        \"background\": \"Problem background...\",\n        \"methodology\": \"Proposed method...\",\n        \"results\": \"Experimental results...\",\n        \"conclusions\": \"Conclusions...\"\n      },\n      \"status\": \"success\"\n    }\n  ],\n  \"summary\": {\n    \"total\": 1,\n    \"successful\": 1,\n    \"failed\": 0\n  }\n}\n\n4. hxxra report - Generate Markdown report\n\nPurpose: Generate a comprehensive Markdown report from all analysis.json files in a directory\n\nParameters:\n\n-d, --directory <path> (Required): Directory containing paper folders with analysis.json files\n-o, --output <path> (Optional): Output Markdown file path (default: {directory}/report.md)\n-t, --title <string> (Optional): Report title (default: \"Research Papers Report\")\n-s, --sort <string> (Optional): Sort by: year (default, descending), title, or author\n\nInput Examples:\n\n{\"command\": \"report\", \"directory\": \"hxxra/papers/\", \"output\": \"hxxra/papers/report.md\", \"title\": \"My Research Papers\", \"sort\": \"year\"} | python scripts/hxxra.py\n{\"command\": \"report\", \"directory\": \"hxxra/papers/\"} | python scripts/hxxra.py\n\n\nOutput Structure:\n\n{\n  \"ok\": true,\n  \"command\": \"report\",\n  \"total_papers\": 10,\n  \"output_file\": \"/path/to/hxxra/papers/report.md\"\n}\n\n\nGenerated Markdown Format:\n\nThe generated report includes:\n\nHeader: Title, generation date, total papers, data source\nKeywords Table: Top 15 most frequent keywords across all papers\nOverview Table: Quick summary of all papers (title, author, year, keywords)\nDetailed Content: For each paper:\nTitle, authors, year, keywords, code link (if available)\nAbstract\nResearch background\nMethodology\nMain results\nConclusions\nLimitations\nImpact\nSource folder path\n\nNote: The report command recursively scans all subdirectories for analysis.json files and only includes papers with status: \"success\".\n\n5. hxxra save - Save to Zotero\n\nPurpose: Save papers to Zotero collection\n\nParameters:\n\n-f, --from-file <path> (Required): JSON file with search results (e.g., hxxra/searches/search_results.json)\n-i, --ids <list> (Optional): Paper IDs to save\n-c, --collection <string> (Required): Zotero collection name\n\nInput Examples:\n\n{\"command\": \"save\", \"from-file\": \"hxxra/searches/search_results.json\", \"ids\": [\"1\", \"2\", \"3\"], \"collection\": \"AI Research\"} | python scripts/hxxra.py\n{\"command\": \"save\", \"from-file\": \"hxxra/searches/search_results.json\", \"collection\": \"My Collection\"} | python scripts/hxxra.py\n\n\nOutput Structure:\n\n{\n  \"ok\": true,\n  \"command\": \"save\",\n  \"collection\": \"AI Research\",\n  \"saved_items\": [\n    {\n      \"id\": \"1\",\n      \"title\": \"Paper Title\",\n      \"zotero_key\": \"ABCD1234\",\n      \"url\": \"https://www.zotero.org/items/ABCD1234\",\n      \"status\": \"success\"\n    }\n  ],\n  \"failed_items\": [],\n  \"total\": 3,\n  \"successful\": 3,\n  \"zotero_collection\": \"ABCD5678\"\n}\n\nWorkflow Examples\nComplete Workflow\n# 1. Search for papers\n{\"command\": \"search\", \"query\": \"graph neural networks\", \"source\": \"arxiv\", \"limit\": 10, \"output\": \"hxxra/searches/gnn_arxiv.json\"} | python scripts/hxxra.py\n\n# 2. Download papers\n{\"command\": \"download\", \"from-file\": \"hxxra/searches/gnn_arxiv.json\", \"dir\": \"hxxra/papers\"} | python scripts/hxxra.py\n\n# 3. Analyze downloaded papers\n{\"command\": \"analyze\", \"directory\": \"hxxra/papers/\"} | python scripts/hxxra.py\n\n# 4. Generate comprehensive report\n{\"command\": \"report\", \"directory\": \"hxxra/papers/\", \"output\": \"hxxra/papers/report.md\", \"sort\": \"year\"} | python scripts/hxxra.py\n\n# 5. Save to Zotero\n{\"command\": \"save\", \"from-file\": \"hxxra/searches/gnn_arxiv.json\", \"collection\": \"GNN Papers\"} | python scripts/hxxra.py\n\nSingle Command Examples\n# Search with scholar\n{\"command\": \"search\", \"query\": \"reinforcement learning\", \"source\": \"scholar\", \"limit\": 15} | python scripts/hxxra.py\n\n# Download specific papers\n{\"command\": \"download\", \"from-file\": \"hxxra/searches/search_results.json\", \"ids\": [\"2\", \"4\", \"6\"], \"dir\": \"hxxra/papers\"} | python scripts/hxxra.py\n\n# Analyze single PDF in detail\n{\"command\": \"analyze\", \"pdf\": \"hxxra/papers/2024_Zhang_Transformer_Survey/2024_Zhang_Transformer_Survey.pdf\"} | python scripts/hxxra.py\n\n# Generate report sorted by title\n{\"command\": \"report\", \"directory\": \"hxxra/papers/\", \"sort\": \"title\", \"output\": \"hxxra/papers/report_by_title.md\"} | python scripts/hxxra.py\n\n# Save with custom notes\n{\"command\": \"save\", \"from-file\": \"hxxra/searches/search_results.json\", \"ids\": [\"1\"], \"collection\": \"To Read\"} | python scripts/hxxra.py\n\nConfiguration Requirements\nAPI Credentials(config.json)\n\narXiv API: No key required for basic access\n\nGoogle Scholar: May require authentication for large queries\n\nZotero API: Required credentials:\n\n{\n  \"api_key\": \"YOUR_ZOTERO_API_KEY\", # Create at https://www.zotero.org/settings/keys/new\n  \"user_id\": \"YOUR_ZOTERO_USER_ID\", # Found on the same page (numeric, not username)\n  \"library_type\": \"user\"  # or \"group\"\n}\n\n\nLLM API: OpenAI or compatible API key for analysis\n\nNotes\nAll commands are executed via stdin/stdout JSON communication\nError handling returns {\"ok\": false, \"error\": \"Error message\"}\nLarge operations support progress reporting via intermediate messages\nConfiguration is loaded from config.json or environment variables\nConcurrent operations have configurable limits to avoid rate limiting\nError Handling\n\nEach command returns standard error format:\n\n{\n  \"ok\": false,\n  \"command\": \"<command>\",\n  \"error\": \"Error description\",\n  \"error_code\": \"ERROR_TYPE\",\n  \"suggestion\": \"How to fix it\"\n}\n\nDevelopment Status\nCurrent Version: v1.2.0 (2026/3/8)\nVersion History\n\nv1.2.0 · 2026/3/8\n\nAdded report command to generate comprehensive Markdown reports from all analysis.json files\nReport includes keyword statistics, overview table, and detailed content for each paper\nSupports sorting by year (default), title, or author\nGenerates clean, readable Markdown format with tables, headers, and structured content\nUpdated documentation to include the new report command in workflows and examples\n\nv1.1.1 · 2026/3/7\n\nAdded sanitize_filename() function to unify filename and folder name handling for downloaded papers.\nModified handle_download function to use the new sanitization function for author names and titles.\nImproved filename safety: now only allows letters, numbers, and underscores; multiple consecutive underscores are merged; length limited to 50 characters.\n\nv1.1.0 · 2026/3/7\n\nAdded a recommended directory structure for optimal organization of search results, papers, analysis, and logs.\nUpdated all examples and default output locations to align with the new {workspace}/hxxra/ folder layout.\nClarified file storage practices: each downloaded paper now has its own subfolder containing the PDF and analysis files.\nImproved documentation for command parameters and outputs to reflect the directory structure changes.\nEnhanced clarity of workflow steps, making it easier to manage, locate, and share research outputs.\nFixed ids data handling: improved ID matching logic to support both string and numeric ID comparisons in download and save commands.\nFixed analyze output parameter: output directory is now only created when explicitly specified, otherwise analysis results are saved in the same subfolder as the PDF.\nFixed Zotero API \"400 Bad Request\" error: changed data format from object to array ([item_data]) to comply with Zotero API requirements\n\nv1.0.2 · 2026/3/6\n\nModified hxxra.py script to add fix_proxy_env() function call, resolving the issue where ALL_PROXY and all_proxy are reset to socks://127.0.0.1:7897/ in new OpenClaw sessions, causing search failures\n\nv1.0.1 · 2026/3/6\n\nAdded academic note clarifying that arXiv search results are sorted by most recent submission date, while Google Scholar results use the source's default relevance ranking\nNo changes to command structure, parameters, or output formats\n\nv1.0.0 · 2026/2/9\n\nInitial release of hxxra – a research assistant tool for searching, downloading, analyzing, and saving research papers.\n\nIntroduces four core JSON-based commands: search, download, analyze, save\nSupports searching papers via Google Scholar and arXiv, with flexible parameters and output structure\nEnables PDF downloads using search results, with fine-grained ID selection and status reporting\nIntegrates LLM-driven PDF content analysis, providing structured output for one or many papers\nAllows saving papers to Zotero collections, requiring user API credentials\nFeatures robust parameter validation, error handling, and documentation with usage examples"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/cxlhyx/hxxra",
    "publisherUrl": "https://clawhub.ai/cxlhyx/hxxra",
    "owner": "cxlhyx",
    "version": "1.2.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/hxxra",
    "downloadUrl": "https://openagent3.xyz/downloads/hxxra",
    "agentUrl": "https://openagent3.xyz/skills/hxxra/agent",
    "manifestUrl": "https://openagent3.xyz/skills/hxxra/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/hxxra/agent.md"
  }
}