一键导入
register-concepts
Register concepts from a paper into its propstore source branch using pks source propose-concept.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Register concepts from a paper into its propstore source branch using pks source propose-concept.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Credentialed-source backend for retrieving books from Bookshare (bookshare.org) into the papers/ collection. Given a book title or ISBN and a target directory name, it searches Bookshare and downloads the EPUB via the published `bookshare` CLI. Download-only (produces book.epub). Enable only if you have a Bookshare account; requires credentials in a gitignored .secrets/bookshare.json.
Paywalled-access backend for paper-retriever. Retrieves a paywalled paper's PDF through an institutional / library subscription (a library proxy such as EZproxy or OpenAthens, or an institutional login), given an identifier (DOI/URL) and the target paper directory name. Invoked by paper-retriever when open-access channels fail. Enable this skill only if the install has institutional access configured.
Paywalled-access backend for paper-retriever. Retrieves a paywalled paper's PDF via sci-hub browser automation, given an identifier (DOI/URL) and the target paper directory name. Invoked by paper-retriever when open-access channels fail; enabled by default. Disable this skill to remove sci-hub from the retrieval waterfall.
Retrieve a scientific paper PDF given an arxiv URL, DOI, or paper title. Downloads to papers/ directory. Handles open-access retrieval (arxiv direct, Chrome print-to-pdf for publisher-direct HTML, Unpaywall, title-based open-repository search); for paywalled papers it hands off to whichever paper-retriever-* access skill is enabled (sci-hub by default, or institutional).
Read scientific papers and extract implementation-focused notes. Converts PDFs to page images, then reads them. Papers <=300pp are read directly by the assigned worker; papers >300pp use a chapter-aligned chunk protocol (preferred) or 50-page chunks (fallback) and synthesize a master notes.md that links to per-chapter files. Creates structured notes in papers/ directory.
Cross-reference a paper against the collection. Finds which cited papers are already collected, which are new leads, which collection papers cite this one, and reconciles all cross-references bidirectionally. Run on a single paper directory or use --all for the entire collection.
| name | register-concepts |
| description | Register concepts from a paper into its propstore source branch using pks source propose-concept. |
| argument-hint | <papers/Author_Year_Title> |
| disable-model-invocation | false |
| compatibility | Claude Code, Codex CLI, and Gemini CLI. |
Register the concepts needed by one paper into its propstore source branch using per-concept pks source propose-concept commands.
This skill is rerunnable. Its source is the paper notes plus any missing-concept feedback emitted by pks source propose-claim.
Ontology-policy reference:
plugins/research-papers/docs/ontology-authoring-policy.mdpaper_dir="$ARGUMENTS"
ls "$paper_dir"/notes.md 2>/dev/null || echo "MISSING: notes.md"
ls knowledge/.git 2>/dev/null || echo "MISSING: knowledge/.git"
If notes.md is missing, stop and run paper-reader first.
If knowledge/.git is missing, stop and report: No propstore found. Run pks init first.
Verify the source branch exists for this paper:
source_name=$(basename "$paper_dir")
pks source finalize "$source_name" 2>&1 || true
If the output indicates the source branch does not exist, stop and tell the user to run source-bootstrap first.
Run pks form list and read the output. These are the only valid form values you may assign to concepts. Do NOT hardcode any form list -- use whatever pks form list returns.
pks form list
Read notes.md, especially sections such as:
From notes.md, identify all domain concepts the paper actually uses. For each concept, determine:
local_name: how this paper refers to the concept (snake_case identifier)definition: 1-2 sentence definition that distinguishes it from near-neighborsform: chosen from the pks form list output in Step 2values (category concepts only): comma-separated list of known values this paper uses for the conceptlocal_name is how this paper refers to the concept. proposed_name is what it should be called in the registry. For new concepts these are usually the same. When proposing, pks source propose-concept uses --name for the local name.
Concepts ARE: domain-specific measurable quantities (hazard_ratio, event_rate), methodological constructs (cox_proportional_hazards, factorial_design), clinical categories (diabetes_mellitus, peripheral_arterial_disease), conditioning axes (endpoint, comparison, intervention — dimensions along which parameter values vary).
Concepts are NOT: named entities (Scotland, BMJ), specific trial names (these are category values or source metadata), generic terms (data, result, study).
When in doubt: if two papers could independently measure or define the same thing, it's probably a concept.
When a quantity has a compound unit (mg/day, events/patient-year, dollars/hour), ask: are the components independently variable? If yes, they are separate concepts, not one concept with a compound unit.
Example: "intervention dose 100 mg daily" is two independent facts — the dose (100 mg, form: mass) and the frequency (once daily, form: category). Another paper might use the same dose at a different frequency, or a different dose at the same frequency. Baking both into one concept with unit mg/day collapses two dimensions into one and prevents independent querying.
Test: If Paper A reports "100 mg daily" and Paper B reports "100 mg twice daily," can you tell them apart? If the concept is intervention_dose with unit mg/day, Paper A is 100 mg/day and Paper B is 200 mg/day — you've lost the fact that both use the same dose amount. With separate concepts (intervention_dose = 100 mg, dosing_frequency = once_daily vs twice_daily), both dimensions are preserved.
Rule: When you see a compound unit, split it into its independently-variable components. Each component gets its own concept with its own form. The relationship between them is expressed through CEL conditions, not through compound units.
Claims use CEL conditions like endpoint == 'primary_outcome' or comparison == 'intervention_vs_comparator'. Every name on the LHS of a CEL condition must be a registered concept. The propstore CEL checker validates condition names against the concept registry — unregistered names cause hard validation errors.
This means you must register conditioning axes as concepts, not just measurement targets. Common conditioning-axis concepts include:
endpoint (category) — which outcome is being measuredcomparison (category) — which groups are being comparedintervention (category) — which treatment armpopulation (category) — which subgroup or cohortconfidence_level (ratio) — confidence level for interval estimatesThese are real domain concepts: multiple papers will condition their parameters on the same axes. Register them with appropriate forms (usually category for string-valued axes, ratio or other quantity forms for numeric axes).
When proposing conditioning-axis concepts, include --values with the values this paper actually uses:
endpoint with --values primary_outcome,secondary_outcome,adverse_outcomecomparison with --values intervention_vs_comparatorpopulation with --values intention_to_treat,per_protocolThe value set is extensible by default — listing only this paper's values is correct. Other papers will add theirs when they propose the same concept and get linked.
Before proposing a concept or category value, classify it using the ontology policy.
primary_endpoint or per_protocol, it is usually a category value on an axis, not the concept itself.Examples:
all_cause_mortality, adverse_event, target_outcome -> usually first-class conceptsprimary_endpoint, secondary_endpoint, safety_endpoint -> usually category values on endpointintention_to_treat -> usually a first-class methodological concept; may also appear as a selected population value for specific claimsintervention_vs_comparator -> decompose by default; keep as one comparison value only if the paper truly treats it as an indivisible named contrastpks form list is the authoritative current set — always consult it before choosing. Common picks for numeric quantities:
score — bounded score-like quantity (kappa, IoU, F1, accuracy, BLEU).ratio — proportion or rate-of-occurrence (event_rate, hazard_ratio).dimensionless (if pks form list includes it) — unbounded dimensionless quantity (effect size, log-odds, z-score, Cohen's d).probability (if pks form list includes it) — [0,1] probabilities, p-values.correlation (if pks form list includes it) — [-1,1] correlations (Pearson r, Spearman rho).mass, time, pressure, length, acceleration, etc.) — use the matching named form.Do not invent a form name. dimensionless as a bare form may not yet exist in your propstore — check pks form list and fall back to the closest available form (often score for bounded quantities, ratio for proportions) if a more specific one isn't registered.
Good: "Ratio of hazard rates between treatment and control arms, measuring relative event risk over time."
Bad: "A ratio."
For each concept identified in Step 3, run:
source_name=$(basename "$paper_dir")
pks source propose-concept "$source_name" \
--concept-name "<local_name>" \
--definition "<definition>" \
--form "<form>" \
--values "<val1>,<val2>,<val3>" # category concepts only; omit for non-category
For non-category concepts (ratio, count, time, mass, etc.), omit --values entirely. Using --values with a non-category form will produce an error.
Read the output for each concept:
Linked '<name>' -> existing '<canonical_name>' (<artifact_id>): this concept already exists in the registry. Note the match. Any --values provided will be added to the existing concept's value set.Proposed new concept '<name>' (form: <form>): this is a new concept being proposed, with values stored in form_parameters.values.Unknown form '<form>': the form name is wrong. Check pks form list and try again with a valid form.When extract-claims runs, pks source propose-claim may reject a claim with unknown concept reference(s): .... Treat that error as authoritative. For each missing concept, propose it with the same command:
pks source propose-concept "$source_name" \
--concept-name "<local_name>" \
--definition "<definition>" \
--form "<form>" \
--values "<val1>,<val2>" # category concepts only; omit for non-category
Then rerun the failed pks source propose-claim command. Do not create or edit a paper-local concept batch file.
Concepts registered for: papers/[dirname]
From notes: N
From missing-claim feedback: N
Linked to existing: N
Newly proposed: N
Total: N