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 (Required): Search keywords-s, --source (Optional): Data source: arxiv (default), scholar-l, --limit (Optional): Number of results (default: 10)-o, --output (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 (Required): JSON file with search results-i, --ids
(Optional): Paper IDs (comma-separated or range)-d, --dir (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 (Optional*): Single PDF file to analyze-d, --directory (Optional*): Directory with multiple PDFs-o, --output (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 (Required): Directory containing paper folders with analysis.json files-o, --output (Optional): Output Markdown file path (default: {directory}/report.md)-t, --title (Optional): Report title (default: "Research Papers Report")-s, --sort (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 (Required): JSON file with search results (e.g., hxxra/searches/search_results.json)-i, --ids
(Optional): Paper IDs to save-c, --collection (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
```json
{
"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"
}
```
{"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.
共 3 个版本