From research-papers
Extracts concepts from a paper's claims.yaml via propose_concepts.py, enriches definitions from notes.md, and registers them into a propstore source branch using pks.
npx claudepluginhub ctoth/research-papers-plugin --plugin research-papersThis skill uses the workspace's default tool permissions.
Register all concepts needed by a paper into its propstore source branch. This must run after extract-claims (needs claims.yaml) and after `pks source init` has created the source branch.
Retrieves scientific papers by URL, DOI, or title, extracts structured notes, concepts, claims, and justifications, then ingests into propstore via nested skills.
Extracts claims, figures, and evidence from academic paper drafts (Word, LaTeX, Markdown, Obsidian folders) plus Zotero metadata into .paper/claims.yml and figures.yml for AI writing skills.
Builds Wikipedia-style Obsidian vaults from academic PDFs, extracting concepts into linked notes with atomic sentences and citations. Expands existing networks with new papers.
Share bugs, ideas, or general feedback.
Register all concepts needed by a paper into its propstore source branch. This must run after extract-claims (needs claims.yaml) and after pks source init has created the source branch.
paper_dir="$ARGUMENTS"
ls "$paper_dir"/notes.md 2>/dev/null || echo "MISSING: notes.md"
ls "$paper_dir"/claims.yaml 2>/dev/null || echo "MISSING: claims.yaml"
If notes.md is missing → STOP, run paper-reader first.
If claims.yaml is missing → STOP, run extract-claims first.
ls knowledge/.git 2>/dev/null
pks source --help 2>/dev/null | head -20
If no knowledge/ directory exists → STOP. Report: "No propstore found. Run pks init first."
Run the concept proposer to extract all concept names from this paper's claims.yaml:
uv run scripts/propose_concepts.py pks-batch "$paper_dir" \
--registry-dir knowledge/concepts \
--output "$paper_dir/concepts.yaml"
Read the output concepts.yaml. It will have entries like:
concepts:
- local_name: "hazard_ratio"
proposed_name: "hazard_ratio"
definition: "Auto-proposed from 5 claim(s)."
form: "structural"
The auto-generated definitions are placeholders. For each concept in concepts.yaml:
notes.md to find how this concept is describedGood: "Ratio of hazard rates between treatment and control arms, measuring the relative risk of an event occurring in the intervention group." Bad: "A ratio."
Verify the form is correct:
ratio for dimensionless ratios (hazard ratio, odds ratio, rate ratio, relative risk)rate for event rates (events per person-year, incidence rate)score for evaluation metrics, p-values, absolute risk differencescount for discrete quantities (person-years, sample size)structural for methods, architectures, abstract conceptscategory for condition variables with enumerated valuesWrite the enriched concepts.yaml back to disk.
source_name=$(basename "$paper_dir")
pks source add-concepts "$source_name" --batch "$paper_dir/concepts.yaml"
If this fails with "unknown source branch", the source branch hasn't been initialized. Run:
# See paper-process skill for full init sequence
pks source init "$source_name" --kind academic_paper --origin-type doi --origin-value "<doi>"
After add-concepts, check which concepts exact-matched existing canonical names vs which remain newly proposed:
Concepts registered for: papers/[dirname]
Exact-match links: N (list names)
Newly proposed: N (list names)
Total in concepts.yaml: N
Newly proposed concepts will need alignment decisions after all papers are finalized.