Install
$ agentstack add skill-isvlasov-rageatc-oss-collecting-sources ✓ scanned · ✓ verified — works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ● Network access Used
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
About
Collecting Sources
Purpose
Enable systematic, high-quality source collection for research workflows by discovering relevant sources using domain-appropriate tools, evaluating quality using RADAR framework, storing sources locally with complete metadata, and creating human-readable source indices.
This skill supports the first phase of two-phase research workflows:
- Phase 1 (this skill): Discover, evaluate, and store sources with metadata
- Phase 2: Synthesise findings from collected sources
- Phase 3 (optional): Fact-check claims in synthesis
When to Use This Skill
Use this skill when:
- Beginning research that requires collecting and storing sources with metadata
- User requests "collect sources", "gather sources", "find sources for research"
- Starting systematic research on unfamiliar topics requiring source quality assessment
- Building a source library with provenance tracking for reproducibility
- Conducting academic research requiring structured source management
- Working within two-phase research workflow (collection → synthesis)
Do NOT use this skill when:
- Conducting simple web searches for immediate answers (use WebSearch directly)
- Research requires only Claude's training knowledge
- User wants synthesis without separate collection phase
- Quick fact lookup rather than systematic research
Required Inputs
Before beginning source collection, ensure these inputs are provided:
Always required:
- [ ] Research question(s) - Specific questions or topics to investigate
- [ ] Task ID - Workspace identifier (for
work//directory structure) - [ ] Minimum source count - Target number of sources (default: 8-15)
Context-dependent:
- [ ] Domain context - Academic vs general; if academic: biomedical/CS/physics/social sciences/general (for tool selection)
- [ ] Quality threshold - Minimum acceptable reliability score (default: 0.6)
- [ ] Source type preferences - Prioritise academic papers, blogs, documentation, etc.
- [ ] Time constraints - Affects search breadth and depth
If inputs are missing, ask the orchestrator before proceeding.
Outputs Produced
This skill produces:
- Sources directory structure:
`` work//sources/ ├── papers/ # Academic papers (PDF or plain text) ├── web/ # Web pages (Markdown) ├── blogs/ # Blog posts (Markdown) ├── docs/ # Documentation (Markdown/HTML) └── source_index.md # Human-readable catalogue ``
- Source files: Content stored in appropriate formats (PDF/plain text for papers, Markdown for web pages)
- Metadata files:
.meta.yamlcompanion files with complete metadata conforming to schema v1.0
- Source index:
source_index.mdcataloguing all sources with statistics and grouped listings
- Collection summary: Report with statistics, limitations, and handoff notes
Core Workflow
Phase 0: Setup and Input Validation
Goal: Prepare workspace and validate inputs
- Validate required inputs:
- Confirm research question(s) received
- Confirm task_id received
- Check for domain context hints in research question
- Create workspace structure:
``bash mkdir -p work//sources/{papers,web,blogs,docs} ``
- Initialise tracking:
- Set source counter to 1 (for src001, src002, etc.)
- Create collection log for provenance tracking
- Check if
source_index.mdexists from previous collection (for duplicate detection)
Checkpoint: Workspace exists, inputs validated, ready to begin discovery.
Phase 1: Domain Detection and Query Formulation
Goal: Identify research domain and formulate effective search queries
Domain Detection
Apply domain detection heuristics to research question:
Academic domain indicators:
- Keywords: "paper", "study", "research", "peer-reviewed", "journal", "conference"
- Biomedical: "medicine", "clinical", "disease", "drug", "genomic", "patient", "healthcare"
- CS/Physics: "algorithm", "neural network", "machine learning", "quantum", "physics", "computer science"
- Social sciences: "policy", "governance", "sociology", "political science", "economics", "education"
- Academic URLs provided: arxiv.org, doi.org, pubmed.gov, semanticscholar.org
General web indicators:
- Keywords: "tutorial", "guide", "how-to", "blog", "documentation", "best practices"
- No academic terminology
- Practical/applied focus
Query Formulation Strategy
Based on domain detection:
For Academic Research:
Academic paper retrieval uses a two-step workflow:
- Discovery — Find papers via metadata APIs or web search
- Retrieval — Fetch full text using multi-source strategy (detailed in Phase 3)
Discovery queries:
- Biomedical topics → Site-specific searches + CORE API awareness
- Example:
site:pubmed.ncbi.nlm.nih.gov clinical trial metadata - Example:
clinical trial metadata standards peer-reviewed - Note DOIs/titles for full-text retrieval via CORE or PubMed Central
- CS/Physics topics → Site-specific searches + arXiv awareness
- Example:
site:arxiv.org transformer architecture - Example:
site:scholar.google.com neural network efficiency - Note arXiv IDs for direct PDF retrieval
- Social sciences → Metadata APIs + CORE fallback
- Example:
governance NGO policy research Egypt - Example:
site:scholar.google.com civil society regulation - Note: Social sciences have lower OA coverage (~33% vs ~66% STEM); expect higher metadata-only rate
- General academic → Multiple search strategies
- WebSearch with academic keywords:
research paper [topic] - Site-specific:
site:scholar.google.com [topic] - Extract DOIs/titles for full-text retrieval
For General Web Research:
- Use WebSearch with standard queries
- Target authoritative sources: official docs, expert blogs, reputable sites
- Use site-specific searches when known:
site:docs.python.org async
Checkpoint: Domain identified, search queries formulated, ready for discovery.
Phase 2: Source Discovery
Goal: Discover relevant candidate sources and extract identifiers for full-text retrieval
Discovery Strategy
For academic research:
The goal is to find papers and extract identifiers (DOI, arXiv ID, PubMed ID, title) for full-text retrieval, not to fetch full text during discovery.
- Formulate metadata queries:
- Extract key terms from research question
- Use domain-specific terminology
- Consider alternative phrasings
- Use site-specific searches where applicable
- Execute discovery searches:
- Run 3-5 targeted WebSearch queries
- Use domain-specific site searches (site:arxiv.org, site:pubmed.gov, site:scholar.google.com)
- Focus on finding paper metadata: titles, authors, DOIs, abstracts
- Collect identifiers for full-text retrieval:
- DOI (for CORE API, Unpaywall MCP)
- arXiv ID (for arXiv direct retrieval)
- PubMed ID (for PubMed Central)
- Full paper title (fallback for CORE API search)
- Collect candidate metadata:
- Paper titles and DOIs
- Authors and publication dates
- Venue (journal/conference)
- Abstract excerpts
- Repository identifiers (arXiv ID, PMID, etc.)
For general web research:
- Formulate search queries:
- Extract key terms from research question
- Use domain-specific terminology
- Consider alternative phrasings
- Execute searches:
- Run 3-5 targeted WebSearch queries
- Use site-specific searches where applicable
- Collect URLs and metadata from search results
- Aim for diverse source types
- Collect candidate metadata:
- URLs and titles
- Authors and publication dates (where available)
- Site names and descriptions
Target: 15-25 candidate sources from diverse source types (will filter to 8-15 based on quality)
Checkpoint: Candidate sources identified with identifiers (DOI/arXiv ID/title) for academic papers, URLs for web sources.
Phase 3: Source Retrieval and Storage
Goal: Fetch content using multi-source strategy and store in appropriate formats
For each candidate source:
3.1: Check for Duplicates
Before fetching, check if source already exists:
- Load existing sources (if
source_index.mdexists from previous collection) - Check URL match: Compare candidate URL against existing source URLs
- Check DOI match: For academic papers, compare candidate DOI against
doifields in existing.meta.yamlfiles in the sources directory - If exists: Skip fetching; log as "already collected"
- If differs: Continue to fetch (content_hash comparison will catch duplicate content later)
This avoids re-fetching sources already collected in previous sessions.
3.2: Fetch Content — Multi-Source Strategy
For academic papers:
Use a structured fallback chain to maximise full-text retrieval:
Retrieval Chain:
- CORE API (largest corpus, plain text in JSON)
- Unpaywall MCP (OA PDF extraction)
- Domain-specific repository (arXiv, PubMed Central)
- WebFetch (publisher sites, repository landing pages)
- Metadata-only (last resort for paywalled content)
Detailed retrieval strategy:
Step 1: CORE API (primary for all academic papers)
CORE API provides direct access to 46M full-text papers as plain text in JSON. No PDF extraction needed.
When to use:
- Always try first for academic papers with DOI or title
- Covers all academic domains (STEM, social sciences, humanities)
- Returns plain text extracted from PDFs during indexing
How to use:
- Query by DOI:
`` WebFetch: https://api.core.ac.uk/v3/search/works?q=doi:[DOI] ``
- Response: JSON with
fullTextfield containing plain text - Extract
fullTextfrom JSON response
- Query by title (if no DOI):
`` WebFetch: https://api.core.ac.uk/v3/search/works?q=title:"[exact title]" ``
- Review results for title match
- Extract
fullTextfrom matching paper
- Extract plain text:
- If
fullTextfield present and non-empty → save as.txtfile - Plain text is pre-extracted via Apache PDFBox; ready to use
- If
fullTextempty or absent → proceed to Step 2 (Unpaywall)
Rate limits: 1 batch request or 5 single requests per 10 seconds (free tier)
Step 2: Unpaywall MCP (fallback for OA papers)
If CORE API fails or returns no full text, use Unpaywall MCP tools to find and extract OA PDFs.
MCP tools available:
unpaywall_search_titles— Search by title, returns OA statusunpaywall_get_fulltext_links— Get best OA PDF URL by DOIunpaywall_fetch_pdf_text— Download PDF and extract text (configurable truncation)
How to use:
- Get OA PDF URL (if DOI available):
`` unpaywall_get_fulltext_links(doi="10.1234/example") ``
- Returns
best_oa_location.url_for_pdfif available - Proceed to extraction if PDF URL found
- Search by title (if no DOI):
`` unpaywall_search_titles(query="exact paper title") ``
- Review results for title match
- Extract DOI if found, then use
unpaywall_get_fulltext_links
- Extract PDF text:
`` unpaywall_fetch_pdf_text(doi="10.1234/example", truncate_chars=50000) ``
- Downloads PDF and extracts text
- Configure
truncate_charsto 50,000 for comprehensive coverage - Minimum 1,000 characters enforced
- Average papers: 20,000-30,000 chars; surveys: 90,000-100,000 chars
- Save extracted text:
- If extraction succeeds → save as
.txtfile - If extraction fails (paywalled, no OA version) → proceed to Step 3
Rate limits: Respect Unpaywall's 100,000 calls/day limit
Step 3: Domain-Specific Repository (for known domains)
If CORE and Unpaywall fail, try domain-specific repositories with near-complete coverage.
3a. arXiv (for CS, physics, mathematics, quantitative biology):
When to use:
- arXiv ID detected in metadata
- CS/physics/maths keywords in research question
- Paper published in arXiv venue
How to use:
- Prefer arXiv MCP server (if available) for metadata + text extraction
- Alternative — try CORE API first: arXiv papers are often in CORE's corpus. Query CORE by arXiv ID or title to get plain text without PDF extraction
- Last resort — direct PDF download:
`` WebFetch: https://export.arxiv.org/pdf/[arxiv_id].pdf ``
- Note: WebFetch cannot extract text from PDFs. This downloads the binary PDF for storage only
- Suggested rate: 4 requests/second with 1-second sleep per burst
- Store PDF:
- Save as
.pdfinsources/papers/ - Note in metadata:
Retrieved from arXiv
3b. PubMed Central (for biomedical, life sciences):
When to use:
- PubMed ID detected in metadata
- Biomedical keywords in research question
- Paper published in biomedical journal
How to use:
- WebFetch landing page:
`` WebFetch: https://pmc.ncbi.nlm.nih.gov/articles/PMC[PMCID]/ ``
- Extracts full-text HTML
- PMC provides full articles, not just abstracts
- Store as HTML or Markdown:
- Save HTML or convert to Markdown
- Note in metadata:
Retrieved from PubMed Central
Step 4: WebFetch (general fallback for open-access content)
If all targeted strategies fail, try standard web retrieval.
How to use:
- Use WebFetch on paper landing page URL
- Extract what's available:
- HTML metadata pages → abstract, bibliographic info
- Open-access PDFs → download if link found
- Repository pages → may include full text as HTML
- Result:
- If full text retrieved → store normally
- If landing page only → record metadata, proceed to Step 5
Step 5: Metadata-Only (last resort for paywalled content)
If all retrieval strategies fail (paywalled, not in OA repositories):
- Record metadata from abstract/landing page:
- Title, authors, DOI, abstract, venue, publication date
- Extract from WebFetch of landing page
- Attempt open-access alternatives:
- Search for preprint:
site:arxiv.org [title] - Search for preprint:
site:biorxiv.org [title] - Check author websites:
[author name] [title] pdf
- If unavailable:
- Create metadata file with all available fields
- Set
file_path: "unavailable" - Set
content_hash: "unavailable" - Note in
provenance.notes: "Paywalled; full text unavailable via CORE, Unpaywall, domain repositories; metadata only" - Flag in source index: "Metadata only (paywalled)"
Social sciences caveat:
Social sciences have substantially lower OA coverage (~33%) compared to STEM (~66%). For social science research:
- Expect higher metadata-only rates (50-60% paywalled not uncommon)
- SSRN (1.74M social sciences preprints) lacks API access; cannot retrieve programmatically
- No domain-specific repository equivalent to arXiv/PubMed Central for social sciences
- CORE + Unpaywall are primary strategies; calibrate expectations accordingly
For web pages/blogs/documentation:
Use WebFetch to retrieve content:
- WebFetch converts HTML to Markdown automatically
- Store as Markdown (
.md) - Preserve HTML only if formatting is critical
3.3: Determine Source Type
Classify source using URL and content patterns:
source_type: "academic_paper"- Peer-reviewed papers, preprints, conference paperssource_type: "web_page"- General web content, articles, guidessource_type: "blog"- Blog posts, Substack, Medium, personal sitessource_type: "documentation"- Official project docs, API references, specifications
3.4: Select Storage Format
Match format to source type and retrieval method:
| Source Type | Primary Format | Use Case | |-------------|---------------|----------| | Academic paper (CORE API) | Plain text (.txt) | Pre-extracted text from CORE, ready to use | | Academic p
…
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: isvlasov
- Source: isvlasov/rageatc-oss
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet — be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.