Paper Finder
Use this skill when you want to discover recent arXiv papers for a specific research profile and write the results as Obsidian-compatible Markdown notes.
Run Retrieval
Run the CLI from the repository root:
python skills/paper-finder/find_papers.py \
--profile path/to/research-interest.json \
--output path/to/obsidian/inbox
Optional semantic ranking:
python skills/paper-finder/find_papers.py \
--profile path/to/research-interest.json \
--output path/to/obsidian/inbox \
--semantic
Semantic settings can come from either source:
config/api_keys.jsonwithsemantic_model.api_base_url,semantic_model.api_key,semantic_model.model- Environment variables:
STABLE_JARVIS_SEMANTIC_API_BASE_URLSTABLE_JARVIS_SEMANTIC_API_KEYSTABLE_JARVIS_SEMANTIC_MODEL
You can still pass --semantic-config path/to/semantic-config.json for advanced overrides. The JSON file should match stable_jarvis.paper_finder.semantic.SemanticConfig.
Build or Refresh a Profile
If the user does not already have a profile JSON, use Zotero MCP read tools to collect evidence first:
zotero_list_collectionszotero_profile_evidence
Then write a JSON profile matching the same structure used by config/research-interest.example.json:
profile_idprofile_namezotero_basisretrieval_defaultsinterests[]
Prefer short method_keywords and only a small number of query_aliases per interest.
Write it in temp/paper-finder/research-interest.json, if there is no such directory, create it.
Enrich Candidate Notes
After the Python retrieval run finishes, read the generated Obsidian note and use Zotero MCP read tools to gather nearby library evidence. Then update the note's frontmatter and the Why It Matters, Quick Takeaways, and Caveats sections using the prompt in skills/paper-finder/prompts/enrich-candidate.prompt.txt.