Install
openclaw skills install hxxraResearch Assistant skill to search, download, analyze research papers via APIs, and save results to Zotero collections using Python scripts and LLM analysis.
openclaw skills install hxxraThis 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 authorInput 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:
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 nameInput 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
{"ok": false, "error": "Error message"}config.json or environment variablesEach 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
report command to generate comprehensive Markdown reports from all analysis.json filesv1.1.1 · 2026/3/7
sanitize_filename() function to unify filename and folder name handling for downloaded papers.handle_download function to use the new sanitization function for author names and titles.v1.1.0 · 2026/3/7
{workspace}/hxxra/ folder layout.[item_data]) to comply with Zotero API requirementsv1.0.2 · 2026/3/6
v1.0.1 · 2026/3/6
v1.0.0 · 2026/2/9
Initial release of hxxra – a research assistant tool for searching, downloading, analyzing, and saving research papers.