Requirements
- Target platform
- OpenClaw
- Install method
- Manual import
- Extraction
- Extract archive
- Prerequisites
- OpenClaw
- Primary doc
- SKILL.md
Research Assistant skill to search, download, analyze research papers via APIs, and save results to Zotero collections using Python scripts and LLM analysis.
Research Assistant skill to search, download, analyze research papers via APIs, and save results to Zotero collections using Python scripts and LLM analysis.
Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.
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.
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.
This skill is a Research Assistant that helps users search, download, analyze, report, and save research papers.
For better organization, it is recommended to create a dedicated workspace for hxxra under your OpenClaw working directory: π workspace/ # OpenClaw current working directory βββ π hxxra/ βββ π searches/ # Stores all search result JSON files βββ 2025-03-07_neural_radiance_fields_arxiv.json βββ 2025-03-07_transformer_architectures_scholar.json βββ ... βββ π papers/ # Stores downloaded PDF files and per-paper analysis results (each as a subfolder) βββ papers_report.md # Generated Markdown report summarizing all analyzed papers βββ 2023_Smith_NeRF_Explained/ # Folder named after the PDF (without extension) βββ 2023_Smith_NeRF_Explained.pdf βββ analysis.json # Structured output from LLM analysis βββ notes.md # (Optional) User-added notes βββ 2024_Zhang_Transformer_Survey/ βββ 2024_Zhang_Transformer_Survey.pdf βββ analysis.json βββ ... βββ ... βββ π logs/ # Stores execution logs βββ hxxra_2025-03-07.log This structure keeps all related files organized and easily accessible for review and further processing.
Dependencies: pip install scholarly Purpose: Search for papers using Google Scholar and arXiv APIs Academic 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. Parameters: -q, --query <string> (Required): Search keywords -s, --source <string> (Optional): Data source: arxiv (default), scholar -l, --limit <number> (Optional): Number of results (default: 10) -o, --output <path> (Optional): JSON output file (default: {workspace}/hxxra/searches/search_results.json) Input Examples: {"command": "search", "query": "neural radiance fields", "source": "arxiv", "limit": 10, "output": "results.json"} | python scripts/hxxra.py {"command": "search", "query": "transformer architecture", "source": "scholar", "limit": 15} | python scripts/hxxra.py Output Structure: { "ok": true, "command": "search", "query": "<query>", "source": "<source>", "results": [ { "id": "1", "title": "Paper Title", "authors": ["Author1", "Author2"], "year": "2023", "source": "arxiv", "abstract": "Abstract text...", "url": "https://arxiv.org/abs/xxxx.xxxxx", "pdf_url": "https://arxiv.org/pdf/xxxx.xxxxx.pdf", "citations": 123 } ], "total": 10, "output_file": "/path/to/results.json" }
Purpose: Download PDFs for specified papers Parameters: -f, --from-file <path> (Required): JSON file with search results -i, --ids <list> (Optional): Paper IDs (comma-separated or range) -d, --dir <path> (Optional): Download directory (default: {workspace}/hxxra/papers/) Input Examples: {"command": "download", "from-file": "results.json", "ids": ["1", "3", "5"], "dir": "./downloads"} | python scripts/hxxra.py {"command": "download", "from-file": "results.json", "dir": "./downloads"} | python scripts/hxxra.py Output Structure: { "ok": true, "command": "download", "downloaded": [ { "id": "1", "title": "Paper Title", "status": "success", "pdf_path": "{workspace}/hxxra/papers/2023_Smith_NeRF_Explained/2023_Smith_NeRF_Explained.pdf", "size_bytes": 1234567, "url": "https://arxiv.org/pdf/xxxx.xxxxx.pdf" } ], "failed": [], "total": 3, "successful": 3, "download_dir": "{workspace}/hxxra/papers" }
Dependencies: pip install pymupdf pdfplumber openai Purpose: Analyze paper content using LLM Parameters: -p, --pdf <path> (Optional*): Single PDF file to analyze -d, --directory <path> (Optional*): Directory with multiple PDFs -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) ** Note: Either --pdf or --directory must be provided, but not both* Input Examples: {"command": "analyze", "pdf": "paper.pdf", "output": "./analysis/"} | python scripts/hxxra.py {"command": "analyze", "directory": "hxxra/papers/"} | python scripts/hxxra.py Output Structure: { "ok": true, "command": "analyze", "analyzed": [ { "id": "paper_1", "original_file": "paper.pdf", "analysis_file": "{workspace}/hxxra/papers/2023_Smith_NeRF_Explained/analysis.json", "metadata": { "title": "Paper Title", "authors": ["Author1", "Author2"], "year": "2023", "abstract": "Abstract text..." }, "analysis": { "background": "Problem background...", "methodology": "Proposed method...", "results": "Experimental results...", "conclusions": "Conclusions..." }, "status": "success" } ], "summary": { "total": 1, "successful": 1, "failed": 0 } }
Purpose: Generate a comprehensive Markdown report from all analysis.json files in a directory Parameters: -d, --directory <path> (Required): Directory containing paper folders with analysis.json files -o, --output <path> (Optional): Output Markdown file path (default: {directory}/report.md) -t, --title <string> (Optional): Report title (default: "Research Papers Report") -s, --sort <string> (Optional): Sort by: year (default, descending), title, or author Input Examples: {"command": "report", "directory": "hxxra/papers/", "output": "hxxra/papers/report.md", "title": "My Research Papers", "sort": "year"} | python scripts/hxxra.py {"command": "report", "directory": "hxxra/papers/"} | python scripts/hxxra.py Output Structure: { "ok": true, "command": "report", "total_papers": 10, "output_file": "/path/to/hxxra/papers/report.md" } Generated Markdown Format: The generated report includes: Header: Title, generation date, total papers, data source Keywords Table: Top 15 most frequent keywords across all papers Overview Table: Quick summary of all papers (title, author, year, keywords) Detailed Content: For each paper: Title, authors, year, keywords, code link (if available) Abstract Research background Methodology Main results Conclusions Limitations Impact Source folder path Note: The report command recursively scans all subdirectories for analysis.json files and only includes papers with status: "success".
Purpose: Save papers to Zotero collection Parameters: -f, --from-file <path> (Required): JSON file with search results (e.g., hxxra/searches/search_results.json) -i, --ids <list> (Optional): Paper IDs to save -c, --collection <string> (Required): Zotero collection name Input Examples: {"command": "save", "from-file": "hxxra/searches/search_results.json", "ids": ["1", "2", "3"], "collection": "AI Research"} | python scripts/hxxra.py {"command": "save", "from-file": "hxxra/searches/search_results.json", "collection": "My Collection"} | python scripts/hxxra.py Output Structure: { "ok": true, "command": "save", "collection": "AI Research", "saved_items": [ { "id": "1", "title": "Paper Title", "zotero_key": "ABCD1234", "url": "https://www.zotero.org/items/ABCD1234", "status": "success" } ], "failed_items": [], "total": 3, "successful": 3, "zotero_collection": "ABCD5678" }
# 1. Search for papers {"command": "search", "query": "graph neural networks", "source": "arxiv", "limit": 10, "output": "hxxra/searches/gnn_arxiv.json"} | python scripts/hxxra.py # 2. Download papers {"command": "download", "from-file": "hxxra/searches/gnn_arxiv.json", "dir": "hxxra/papers"} | python scripts/hxxra.py # 3. Analyze downloaded papers {"command": "analyze", "directory": "hxxra/papers/"} | python scripts/hxxra.py # 4. Generate comprehensive report {"command": "report", "directory": "hxxra/papers/", "output": "hxxra/papers/report.md", "sort": "year"} | python scripts/hxxra.py # 5. Save to Zotero {"command": "save", "from-file": "hxxra/searches/gnn_arxiv.json", "collection": "GNN Papers"} | python scripts/hxxra.py
# Search with scholar {"command": "search", "query": "reinforcement learning", "source": "scholar", "limit": 15} | python scripts/hxxra.py # Download specific papers {"command": "download", "from-file": "hxxra/searches/search_results.json", "ids": ["2", "4", "6"], "dir": "hxxra/papers"} | python scripts/hxxra.py # Analyze single PDF in detail {"command": "analyze", "pdf": "hxxra/papers/2024_Zhang_Transformer_Survey/2024_Zhang_Transformer_Survey.pdf"} | python scripts/hxxra.py # Generate report sorted by title {"command": "report", "directory": "hxxra/papers/", "sort": "title", "output": "hxxra/papers/report_by_title.md"} | python scripts/hxxra.py # Save with custom notes {"command": "save", "from-file": "hxxra/searches/search_results.json", "ids": ["1"], "collection": "To Read"} | python scripts/hxxra.py
arXiv API: No key required for basic access Google Scholar: May require authentication for large queries Zotero API: Required credentials: { "api_key": "YOUR_ZOTERO_API_KEY", # Create at https://www.zotero.org/settings/keys/new "user_id": "YOUR_ZOTERO_USER_ID", # Found on the same page (numeric, not username) "library_type": "user" # or "group" } LLM API: OpenAI or compatible API key for analysis
All commands are executed via stdin/stdout JSON communication Error handling returns {"ok": false, "error": "Error message"} Large operations support progress reporting via intermediate messages Configuration is loaded from config.json or environment variables Concurrent operations have configurable limits to avoid rate limiting
Each command returns standard error format: { "ok": false, "command": "<command>", "error": "Error description", "error_code": "ERROR_TYPE", "suggestion": "How to fix it" }
v1.2.0 Β· 2026/3/8 Added report command to generate comprehensive Markdown reports from all analysis.json files Report includes keyword statistics, overview table, and detailed content for each paper Supports sorting by year (default), title, or author Generates clean, readable Markdown format with tables, headers, and structured content Updated documentation to include the new report command in workflows and examples v1.1.1 Β· 2026/3/7 Added sanitize_filename() function to unify filename and folder name handling for downloaded papers. Modified handle_download function to use the new sanitization function for author names and titles. Improved filename safety: now only allows letters, numbers, and underscores; multiple consecutive underscores are merged; length limited to 50 characters. v1.1.0 Β· 2026/3/7 Added a recommended directory structure for optimal organization of search results, papers, analysis, and logs. Updated all examples and default output locations to align with the new {workspace}/hxxra/ folder layout. Clarified file storage practices: each downloaded paper now has its own subfolder containing the PDF and analysis files. Improved documentation for command parameters and outputs to reflect the directory structure changes. Enhanced clarity of workflow steps, making it easier to manage, locate, and share research outputs. Fixed ids data handling: improved ID matching logic to support both string and numeric ID comparisons in download and save commands. Fixed analyze output parameter: output directory is now only created when explicitly specified, otherwise analysis results are saved in the same subfolder as the PDF. Fixed Zotero API "400 Bad Request" error: changed data format from object to array ([item_data]) to comply with Zotero API requirements v1.0.2 Β· 2026/3/6 Modified 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 v1.0.1 Β· 2026/3/6 Added 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 No changes to command structure, parameters, or output formats v1.0.0 Β· 2026/2/9 Initial release of hxxra β a research assistant tool for searching, downloading, analyzing, and saving research papers. Introduces four core JSON-based commands: search, download, analyze, save Supports searching papers via Google Scholar and arXiv, with flexible parameters and output structure Enables PDF downloads using search results, with fine-grained ID selection and status reporting Integrates LLM-driven PDF content analysis, providing structured output for one or many papers Allows saving papers to Zotero collections, requiring user API credentials Features robust parameter validation, error handling, and documentation with usage examples
Code helpers, APIs, CLIs, browser automation, testing, and developer operations.
Largest current source with strong distribution and engagement signals.