Install
openclaw skills install @pinkgranite/easypaperGenerate academic papers from metadata using EasyPaper Python SDK. Use when user wants to create structured LaTeX papers programmatically. References the EasyPaper repository, especially plugins/easypaper/ directory for detailed workflows, commands, and skills.
openclaw skills install @pinkgranite/easypaperGenerate structured academic papers from metadata using the EasyPaper multi-agent system via Python SDK.
Source: https://github.com/PinkGranite/EasyPaper
Primary Reference Directory: plugins/easypaper/
This directory contains comprehensive guidance for OpenClaw agents:
plugins/easypaper/commands/plugins/easypaper/skills/plugins/easypaper/.claude-plugin/README.mdImportant: Install EasyPaper in an isolated environment (recommended for dependency management).
Using venv:
python -m venv easypaper-env
source easypaper-env/bin/activate # On Windows: easypaper-env\Scripts\activate
pip install easypaper
Using conda:
conda create -n easypaper python=3.11
conda activate easypaper
pip install easypaper
Direct install (not recommended):
pip install easypaper
EasyPaper requires LaTeX toolchain (pdflatex + bibtex) for PDF compilation. Install based on your system:
macOS:
# Using Homebrew (recommended)
brew install --cask mactex
# Or minimal installation
brew install basictex
sudo tlmgr update --self
sudo tlmgr install collection-basic collection-latex collection-bibtexextra
Linux (Ubuntu/Debian):
sudo apt-get update
sudo apt-get install texlive-latex-base texlive-bibtex-extra texlive-latex-extra
Linux (Fedora/RHEL):
sudo dnf install texlive-scheme-basic texlive-bibtex texlive-latex
Windows:
pdflatex and bibtex are in your PATHmacOS:
brew install poppler
Linux (Ubuntu/Debian):
sudo apt-get install poppler-utils
Linux (Fedora/RHEL):
sudo dnf install poppler-utils
Windows:
bin directory to PATHconda install -c conda-forge popplerRecommended workflow: Prepare a metadata.json (see examples/meta.json), parse it as PaperGenerationRequest, then run with to_metadata() + to_generate_options().
Typesetter behavior (SDK + Server): PDF compilation prefers in-process Typesetter when available (SDK self-contained). If no local peer is available, EasyPaper falls back to the HTTP Typesetter endpoint (AGENTSYS_SELF_URL).
import asyncio
from pathlib import Path
from easypaper import EasyPaper, PaperGenerationRequest
async def main():
ep = EasyPaper(config_path=str(Path("configs/dev.yaml").resolve()))
request = PaperGenerationRequest.model_validate_json_file("metadata.json")
metadata = request.to_metadata()
options = request.to_generate_options()
result = await ep.generate(metadata, **options)
print(f"Status: {result.status}, Words: {result.total_word_count}")
asyncio.run(main())
import asyncio
from easypaper import EasyPaper, PaperMetaData
async def main():
ep = EasyPaper(config_path="configs/dev.yaml")
metadata = PaperMetaData(
title="My Paper Title",
idea_hypothesis="...",
method="...",
data="...",
experiments="...",
references=["@article{...}"],
)
result = await ep.generate(metadata)
print(f"Status: {result.status}, Words: {result.total_word_count}")
asyncio.run(main())
When working with EasyPaper, refer to these files in the repository:
plugins/easypaper/commands/easypaper.md - End-to-end metadata workflow contractplugins/easypaper/commands/paper-from-metadata.md - Direct metadata-to-paper generationplugins/easypaper/commands/paper-section.md - Single section generationplugins/easypaper/skills/setup-environment/SKILL.md - Automatic environment setup (Python, LaTeX)plugins/easypaper/skills/paper-from-metadata/SKILL.md - Full paper generation workflowplugins/easypaper/skills/venue-selection/SKILL.md - Venue-specific formatting (NeurIPS, ICML, ICLR, ACL, AAAI, COLM, Nature)plugins/easypaper/skills/academic-writing-rules/SKILL.md - Academic writing and LaTeX conventionsconfigs/example.yaml - Complete configuration templateeconomist_example/metadata.json - Full metadata example with all fieldsuser_case/ - Standalone usage exampleREADME.md - Main documentationAGENTS.md - Repository-level agent instructionsRequired:
title, idea_hypothesis, method, data, experiments, referencesOptional:
style_guide (venue name), target_pages, template_path, figures, tables, code_repository, export_prompt_tracesSee examples/meta.json and economist_example/metadata.json for full examples. Treat examples/meta.json as a full PaperGenerationRequest sample: use request = PaperGenerationRequest.model_validate_json_file(...), then request.to_metadata() and request.to_generate_options() for SDK generation.
When review loop is enabled, multiple iteration PDFs can exist. Always report the final artifact using this priority:
result.pdf_path (authoritative final output)result.output_path: iteration_*_final/**/*.pdfresult.output_path: latest iteration_* directory PDFresult.output_path/paper.pdf (last fallback)If no PDF is found, report that final PDF is unavailable and include recent compile errors.
from easypaper import EasyPaper, PaperMetaData, EventType
async for event in ep.generate_stream(metadata):
if event.event_type == EventType.PHASE_START:
print(f"▶ [{event.phase}] {event.message}")
elif event.event_type == EventType.COMPLETE:
result = event.data["result"]
print(f"Done! {result['total_word_count']} words")
Use this skill when:
For detailed workflows and execution contracts, refer to files in plugins/easypaper/ directory.