Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Interactively build EasyPaper metadata from a research-materials folder using Claude Code's file-investigation tools. Output is JSON consumable by the `easypaper-paper-from-metadata` skill.
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 434% | 0% |
| case-04 | ✗→✓ | ▲ Improved | -13% | 0% |
| case-05 | ✗→✓ | ▲ Improved | 115% | 0% |
| case-06 | ✗→✓ | ▲ Improved | 216% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 103% | 0% |
Use this skill when the user has a folder of research materials and wants Claude to co-author the metadata in conversation instead of running the one-shot SDK pipeline silently.
The two paths are complementary:
| Path | Driver | Interaction | Use when | |------|--------|-------------|----------| | SDK one-shot (generate_metadata_from_folder) | EasyPaper internal LLM | None | Batch, CI, or fast autonomous extraction | | This skill | Claude Code | High | Single high-value paper, atypical folder, or ambiguity requiring user input |
Both paths produce metadata that can be consumed by easypaper-paper-from-metadata.
The final JSON must validate as PaperGenerationRequest and include:
title, idea_hypothesis, method, data, experimentsreferencesmaterials_rootfigurestablestemplate_path, style_guide, target_pages, generation flags, and output settingsEach figure/table object follows the SDK shape:
json{ "id": "fig:h<12hex>", "caption": "...", "description": "...", "section": "", "file_path": "relative/posix/path/to/asset.png", "wide": false, "auto_generate": false, "generation_prompt": null }
Tables use the same shape with tab: ids.
Folder-derived metadata uses the SDK convention:
materials_root: resolved source-folder path.figures[].file_path and tables[].file_path: relative POSIX paths under materials_root.template_path may be omitted or written relative to the saved metadata file location when the template is part of the same portable project.Downstream generation resolves figure/table assets via materials_root first. The generation command or example loader normalizes operational fields such as template_path and local code_repository.path before calling the SDK.
When operating in cold mode, generate stable ids the same way as the SDK:
pythonimport hashlib def figure_id(rel_posix_path: str) -> str: digest = hashlib.sha256(rel_posix_path.lower().encode("utf-8")).hexdigest()[:12] return f"fig:h{digest}" def table_id(rel_posix_path: str) -> str: digest = hashlib.sha256(rel_posix_path.encode("utf-8")).hexdigest()[:12] return f"tab:h{digest}"
Figures lowercase the relative path before hashing; tables do not.
The first interaction must present these options and wait for an explicit choice:
textChoose how you want to build the metadata: [1] cold — Claude walks the folder alone, no Python SDK call. Best for small folders or when full transparency is required. [2] warm-start — (recommended) Run ep.generate_metadata_from_folder() once to get a draft, then refine each field with Claude. Best signal-to-effort ratio. [3] refine — Load an existing metadata JSON and walk through fixing validation failures and warnings. Reply with 1 / 2 / 3, or the mode name.
Then ask for:
cold / warm-start: materials_root; verify it exists and is a directory.refine: existing metadata JSON path; verify it exists.Use read-only file tools to map the folder:
README*, root *.md, pyproject.toml, requirements.txt, setup.pyOutput a concise folder map before drafting fields.
Draft and confirm the five prose fields in order:
titleidea_hypothesismethoddataexperimentsFor each field, cite the files that support the draft and surface unresolved questions.
Glob candidates:
**/*.{png,jpg,jpeg,gif,svg,webp,bmp}**/*.{csv,tsv} and table-like .texFor each retained asset:
file_path as relative POSIX under materials_rootsection only when placement is clearParse BibTeX files when present and store entries as raw BibTeX strings. Empty references is a warning, not a save blocker.
Before writing, run public schema validation plus explicit checks:
PaperGenerationRequest.model_validate(metadata_dict) succeeds.title, idea_hypothesis, method, data, and experiments are non-empty.materials_root is set for folder-derived metadata.materials_root.fig: and table ids start with tab:.references is reported as a warning.Only save when the hard checks pass:
pythonimport json from pathlib import Path out_path = Path(materials_root) / "easypaper_metadata.json" out_path.write_text( json.dumps(metadata_dict, ensure_ascii=False, indent=2), encoding="utf-8", )
Report:
/easypaper-paper-from-metadata and point it at the saved JSONeasypaper-setup-environment.cold mode and inform the user.Other measured skills in the registry, with their headline benchmark lift.