> Scholarly research companion using Knows sidecar spec (.knows.yaml). Generates, validates, reviews, queries, and compares structured research-paper sidecars, and fetches them from knows.academy. Use for academic literature search, survey synthesis, paper authoring assistance, and peer review with token-efficient claim/evidence/relation access.
npx skills add https://github.com/first-fluke/oh-my-agent --skill oma-scholar
Search, fetch, generate, validate, analyze, review, and compare scholarly paper sidecars using the Knows .knows.yaml spec for token-efficient research workflows.
.knows.yaml, knows.academy, OpenAlex, claims, evidence, relations, or paper sidecars..knows.yaml sidecars from your own paper drafts, LaTeX, or research notesknows.academy (2026 papers only; current counts via /api/proxy/jobs/stats)oma-searchoma-translatoroma-pdf.knows.yaml sidecar, review sidecar, lint report, search/fetch result, natural-language analysis, or structural comparisonpaper@1 profileoma scholar CLI subcommandsresources/sidecar-spec.md, API endpoints, OpenAlex setup, upstream cache, checklist, and execution protocol| Action | SSL primitive | Evidence |
|--------|---------------|----------|
| Select mode | SELECT | Generate/Validate/Review/Analyze/Compare/Remote |
| Read paper or sidecar | READ | Source files or YAML |
| Request remote data | REQUEST | Knows/OpenAlex APIs |
| Infer claims/evidence/relations | INFER | Sidecar generation/analysis |
| Write sidecar | WRITE | .knows.yaml outputs |
| Validate sidecar | VALIDATE | oma scholar lint |
| Report result | NOTIFY | Summary or lint report |
oma scholar search|resolve|get|lintoma scholar search "<query>"
oma scholar resolve "<title-or-doi>"
oma scholar get "<record-id-or-doi>"
oma scholar lint "<paper.knows.yaml>"
| Scope | Resource target |
|-------|-----------------|
| LOCAL_FS | Paper drafts, sidecar YAML, review sidecars |
| NETWORK | knows.academy and OpenAlex APIs |
| PROCESS | oma scholar CLI and lint |
| USER_DATA | User-provided paper content and research notes |
paper@1 profile (review sidecars use review@1): verified against production sidecars from knows.academy; see resources/sidecar-spec.mdanthropic SDK or external LLM CLI; this skill runs inside an agentdoi: TODO or guesstitle, authors, venue, year live at the top level (no metadata wrapper)statement_type, evidence_type, predicate, artifact_type (not type/claim)provenance.actor is one object, NOT a provenance.actors array{claim_strength: ..., extraction_fidelity: ...}, both from high|medium|lowcoverage.statements (4-value enum) + coverage.evidence (3-value enum)tool|person|org (never ai/llm/model); artifact role subject|supporting|cited; predicates in present tense10. Numbers unquoted: value: 22, never value: '22'
11. Relation density: average ≥1.5 relations per statement; every claim needs supported_by evidence (checklist rule — lint enforces only the average-ratio warning and a per-id warning for statements with zero relations)
12. ID format: descriptive kebab-case with prefix: stmt:privacy-budget-tradeoff, ev:cifar10-accuracy-table, art:paper
13. Validate before sharing: run oma scholar lint after Generate and Review; cross-record refs (record_id#local_id) in review sidecars are recognized and not flagged as dangling
14. Remote API has no auth: https://knows.academy/api/proxy/* is public; do not invent auth headers
15. Partial fetch param is section (singular): fixed enum statements|evidence|relations|artifacts|citation
16. Fallback API keys are optional: OPENALEX_API_KEY (metadata enrichment) and S2_API_KEY (Semantic Scholar dedicated rate limit) both improve throughput but the cascade degrades gracefully without them
17. Sidecar content stays English: schema fields, IDs, statement text follow upstream convention; user-facing responses follow oma-config.yaml language
18. Spec drift awareness: our local rules track v0.9.0 production behavior, which differs from the upstream knows.md natural-language description; refresh resources/upstream-spec-cache.md periodically
| Mode | Trigger | Output |
|------|---------|--------|
| Generate | "create sidecar from this paper / abstract / draft", "generate .knows.yaml" | {paper}.knows.yaml (host LLM emits, then oma scholar lint validates) |
| Validate | "lint this sidecar", "validate .knows.yaml" | Pass/fail report with file:line issues |
| Review | "peer review this paper as sidecar" | {paper}.review.knows.yaml |
| Analyze | "summarize this sidecar", "what claims does it make?" | Natural-language answer |
| Compare | "compare paper A and paper B structurally" | Diff table (claims/methods/evidence) |
| Remote | "find papers on X", "fetch sidecar :id", "get claims only for :id" | Search results / sidecar payload |
knows.academy currently indexes only 2026 papers (mostly arXiv). For
older or non-2026 papers (Transformer 2017, BERT 2018, classics, journals),
the skill automatically falls back to OpenAlex for metadata and abstract,
then to Semantic Scholar (AI TL;DR, citation + influential-citation
counts) when OpenAlex also has nothing. See resources/fallback-providers.md.
Use the oma scholar CLI subcommands:
# Hybrid search: knows first, OpenAlex fallback
oma scholar search "vision language action"
# Cross-source resolve: figures out which source has the right paper
oma scholar resolve "Attention Is All You Need"
# Get by id (knows record_id, OpenAlex W-id, DOI, arXiv:<id>, CorpusId:<n>)
oma scholar get "10.48550/arXiv.1706.03762"
When OpenAlex returns the answer (knows.academy lacks the paper), use the
returned abstract as input to Mode 1 Generate to produce a local sidecar.
Follow resources/execution-protocol.md step by step for the selected mode.
oma scholar search "diffusion super resolution"
oma scholar search --year-min 2024 "vision language action"
oma scholar resolve "Attention Is All You Need"
# returns top hit from each source + recommendation
# knows.academy full sidecar
oma scholar get "knows:generated/reconvla/1.0.0"
# Partial fetch (claims only, ~700 tokens, 93% reduction vs PDF)
oma scholar get --section statements "knows:generated/reconvla/1.0.0"
# By DOI or OpenAlex W-id (works regardless of knows.academy availability)
oma scholar get "10.48550/arXiv.1706.03762"
# Semantic Scholar: AI TL;DR + citation/influential-citation counts
oma scholar get "arXiv:1706.03762"
When knows.academy is unreachable, get knows:... automatically falls back
to OpenAlex by extracting the slug from the record_id. The result is marked
with fallback: "openalex" and contains metadata + abstract, useful for
running Mode 1 Generate locally.
# Strict mode for own Generate output (default)
oma scholar lint paper.knows.yaml
# Lenient mode for third-party / fetched sidecars
oma scholar lint --lenient remote.knows.yaml
# Treat warnings as failures (CI mode)
oma scholar lint --fail-on-warning paper.knows.yaml
About **47% of knows.academy-served sidecars contain at least one dangling
cross-reference** (typo in subject_ref/object_ref, measured across 15
production samples). Use --lenient when consuming third-party records so
these surface as warnings rather than blocking errors.
curl -s "https://knows.academy/api/proxy/search?q=..."
curl -s "https://knows.academy/api/proxy/sidecars/<encoded-id>"
curl -s "https://knows.academy/api/proxy/partial?record_id=<id>§ion=statements"
curl -s "https://knows.academy/api/proxy/jobs/stats" # platform health
Project-specific settings: config/scholar-config.yaml
| Issue | Solution |
|-------|----------|
| [ERROR] *.value: numeric value '22' is quoted | Remove quotes: value: '22' -> value: 22 |
| [ERROR] provenance.actor.type: 'ai' is not allowed | Change to tool, person, or org |
| [ERROR] *.type: use \statement_type\ instead of \type\ | Rename type -> statement_type (or evidence_type/predicate/artifact_type) |
| [ERROR] provenance.actors: v0.9 spec uses singular \actor\ | Replace actors: [{...}] array with actor: {...} object |
| [ERROR] *.object_ref: reference 'X' does not match any defined id | Fix the subject_ref/object_ref to point to a real id, OR use --lenient if consuming third-party data (cross-record record_id#local_id refs are recognized and never flagged) |
| [WARN] relations: avg relations/statement is N.NN (target ≥ 1.5) | Add more supported_by/depends_on relations |
| [WARN] statements: only N statements; most papers warrant ≥ 8 | Expected when generating from abstract only; full-paper Generate should hit 15+ |
| [WARN] *.predicate: past-tense '...' is suspicious | Switch to present tense (evaluated_on -> evaluates_on) |
| Remote API returns empty results | Try broader query; check /api/proxy/jobs/stats; CLI auto-falls-back to OpenAlex |
| knows.academy search failed: fetch failed (stderr) | Platform timeout; fallback to OpenAlex is automatic; retry later for sidecars |
| OpenAlex 403/429 | Set OPENALEX_API_KEY (see resources/setup-openalex.md) |
| semanticscholar error: HTTP 429 (stderr) | Anonymous pool throttled; CLI retries once then skips the source. Set S2_API_KEY (free form at semanticscholar.org/product/api) for a dedicated limit |
| YAML won't parse | Check indentation; numbers/booleans must be unquoted; strings with : need quotes |
resources/execution-protocol.mdresources/sidecar-spec.mdresources/api-endpoints.mdresources/setup-openalex.mdresources/upstream-spec-cache.mdresources/checklist.mdoma scholar search|resolve|get|lint (implementation under cli/commands/scholar/)../_shared/core/context-loading.md../_shared/core/quality-principles.md../../rules/i18n-guide.mdAssists in writing high-quality content by conducting research, adding citations, improving hooks, iterating on outlines, and providing real-time feedback on each section. Transforms your writing process from solo effort to collaborative partnership.
Identifies high-quality leads for your product or service by analyzing your business, searching for target companies, and providing actionable contact strategies. Perfect for sales, business development, and marketing professionals.
Use this skill to query your Google NotebookLM notebooks directly from Claude Code for source-grounded, citation-backed answers from Gemini. Browser automation, library management, persistent auth. Drastically reduced hallucinations through document-only responses.
Efficient database search tool for bioRxiv preprint server. Use this skill when searching for life sciences preprints by keywords, authors, date ranges, or categories, retrieving paper metadata, downloading PDFs, or conducting literature reviews.
Query and analyze scholarly literature using the OpenAlex database. This skill should be used when searching for academic papers, analyzing research trends, finding works by authors or institutions, tracking citations, discovering open access publications, or conducting bibliometric analysis across 240M+ scholarly works. Use for literature searches, research output analysis, citation analysis, and academic database queries.
Access USPTO APIs for patent/trademark searches, examination history (PEDS), assignments, citations, office actions, TSDR, for IP analysis and prior art searches.
Multiagent AI system for scientific research assistance that automates research workflows from data analysis to publication. This skill should be used when generating research ideas from datasets, developing research methodologies, executing computational experiments, performing literature searches, or generating publication-ready papers in LaTeX format. Supports end-to-end research pipelines with customizable agent orchestration.
Automated LLM-driven hypothesis generation and testing on tabular datasets. Use when you want to systematically explore hypotheses about patterns in empirical data (e.g., deception detection, content analysis). Combines literature insights with data-driven hypothesis testing. For manual hypothesis formulation use hypothesis-generation; for creative ideation use scientific-brainstorming.
Take first-fluke/oma-scholar from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.