Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Navigate open access policies, repositories, and legal full-text retrieval me...
.claude/skills/brycewang-stanford-open-access-guide/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-06 | ✗→✓ | ▲ Improved | 61% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 55% | 0% |
| case-17 | ✗→✓ | ▲ Improved | 23% | 0% |
| case-20 | ✓→✗ | ▼ Worse | 86% | 0% |
| case-23 | ✓→✗ | ▼ Worse | 86% | 0% |
A skill for understanding open access publishing models, locating free full-text articles legally, and navigating self-archiving policies. Essential for researchers at institutions with limited journal subscriptions.
| Type | Description | Cost to Author | Reader Access | |------|------------|----------------|---------------| | Gold OA | Published OA by journal (APC paid) | $1,000-$11,000 | Immediate, permanent | | Green OA | Self-archived preprint/postprint | Free | After embargo (0-24 months) | | Diamond/Platinum OA | Journal charges no APC | Free | Immediate, permanent | | Bronze OA | Free to read on publisher site | Free | No reuse license, may be temporary | | Hybrid OA | OA article in subscription journal | $2,000-$5,000 | Immediate for that article |
pythonimport requests def check_oa_status(doi: str) -> dict: """ Check open access availability using the Unpaywall API. Args: doi: DOI of the paper (e.g., '10.1038/s41586-021-03819-2') Returns: OA status and best available link """ email = "researcher@university.edu" # Required by Unpaywall API url = f"https://api.unpaywall.org/v2/{doi}?email={email}" response = requests.get(url) if response.status_code != 200: return {'error': f'API returned status {response.status_code}'} data = response.json() # Find best OA location best_location = data.get('best_oa_location', {}) return { 'doi': doi, 'title': data.get('title', ''), 'is_oa': data.get('is_oa', False), 'oa_status': data.get('oa_status', 'closed'), 'journal_is_oa': data.get('journal_is_oa', False), 'best_oa_url': best_location.get('url', None) if best_location else None, 'version': best_location.get('version', None) if best_location else None, 'license': best_location.get('license', None) if best_location else None, 'all_locations': len(data.get('oa_locations', [])) } # Example result = check_oa_status('10.1038/s41586-021-03819-2') if result['is_oa']: print(f"OA available: {result['best_oa_url']}") else: print("Not openly available -- check Green OA options below")
| Source | Type | Coverage | URL | |--------|------|----------|-----| | PubMed Central (PMC) | Repository | Biomedical + life sciences | ncbi.nlm.nih.gov/pmc | | arXiv | Preprint server | Physics, CS, Math, Stats | arxiv.org | | bioRxiv/medRxiv | Preprint server | Biology, medicine | biorxiv.org / medrxiv.org | | SSRN | Preprint server | Social sciences, law, economics | ssrn.com | | Zenodo | Repository | All disciplines | zenodo.org | | CORE | Aggregator | 300M+ papers from repositories | core.ac.uk | | OpenAlex | Search + OA links | Cross-disciplinary | openalex.org | | BASE (Bielefeld) | Aggregator | 400M+ documents | base-search.net |
pythondef batch_oa_lookup(dois: list[str]) -> list[dict]: """ Check OA status for a batch of DOIs. Unpaywall supports up to 100,000 DOIs per day. """ results = [] for doi in dois: status = check_oa_status(doi) results.append(status) # Summary statistics total = len(results) oa_count = sum(1 for r in results if r.get('is_oa', False)) print(f"OA availability: {oa_count}/{total} ({oa_count/total*100:.1f}%)") # Group by OA status by_status = {} for r in results: status = r.get('oa_status', 'unknown') by_status.setdefault(status, []).append(r) for status, papers in by_status.items(): print(f" {status}: {len(papers)} papers") return results
Use SHERPA/RoMEO to determine what you can self-archive:
pythondef check_sherpa_romeo(issn: str, api_key: str) -> dict: """ Check journal self-archiving policy via SHERPA/RoMEO. Args: issn: Journal ISSN api_key: SHERPA/RoMEO API key """ url = f"https://v2.sherpa.ac.uk/cgi/retrieve/by_id?item-type=publication&format=Json&api-key={api_key}&filter=[[%22issn%22,%22equals%22,%22{issn}%22]]" response = requests.get(url) data = response.json() if not data.get('items'): return {'error': 'Journal not found'} journal = data['items'][0] policies = journal.get('publisher_policy', []) results = { 'journal': journal.get('title', [{}])[0].get('title', ''), 'publisher': journal.get('publishers', [{}])[0].get('publisher', {}).get('name', ''), 'policies': [] } for policy in policies: for permitted in policy.get('permitted_oa', []): results['policies'].append({ 'version': permitted.get('article_version', ''), 'location': permitted.get('location', {}).get('location', []), 'conditions': permitted.get('conditions', []), 'embargo': permitted.get('embargo', {}).get('amount', 0), 'license': permitted.get('license', []) }) return results
Most funders (NIH, UKRI, ERC) require deposit of at least the postprint in a repository. Always check your specific funder mandate and journal policy before self-archiving.
When depositing in your institutional repository:
This maximizes discoverability while respecting publisher agreements.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-16 | pass→pass | 3,424 | 3,708 | +8% | 1 | 1 | 0% | 446 | 2,278 | +411% | 0 | 0 | — |
case-01 | pass→pass | 4,484 | 3,778 | -16% | 1 | 1 | 0% | 668 | 2,365 | +254% | 0 | 0 | — |
case-02 | pass→pass | 9,147 | 11,232 | +23% | 1 | 1 | 0% | 1,554 | 3,279 | +111% | 0 | 0 | — |
case-03 | pass→pass | 6,066 | 6,434 | +6% | 1 | 1 | 0% | 994 | 2,799 | +182% | 0 | 0 | — |
case-04 | fail→fail | 8,302 | 3,957 | -52% | 1 | 1 | 0% | 1,577 | 2,523 | +60% | 0 | 0 | — |
case-05 | pass→pass | 5,848 | 4,559 | -22% | 1 | 1 | 0% | 928 | 2,520 | +172% | 0 | 0 | — |
case-06 | fail→pass | 8,352 | 2,401 | -71% | 1 | 1 | 0% | 1,314 | 2,116 | +61% | 0 | 0 | — |
case-07 | fail→fail | 6,512 | 6,639 | +2% | 1 | 1 | 0% | 1,078 | 2,774 | +157% | 0 | 0 | — |
case-08 | pass→pass | 7,317 | 4,085 | -44% | 1 | 1 | 0% | 1,076 | 2,436 | +126% | 0 | 0 | — |
case-09 | fail→pass | 9,939 | 4,250 | -57% | 1 | 1 | 0% | 1,551 | 2,411 | +55% | 0 | 0 | — |
case-10 | pass→pass | 2,465 | 4,955 | +101% | 1 | 1 | 0% | 311 | 2,461 | +691% | 0 | 0 | — |
case-11 | pass→pass | 7,453 | 3,028 | -59% | 1 | 1 | 0% | 1,057 | 2,264 | +114% | 0 | 0 | — |
case-12 | pass→pass | 6,578 | 4,694 | -29% | 1 | 1 | 0% | 961 | 2,551 | +165% | 0 | 0 | — |
case-13 | pass→pass | 17,964 | 10,744 | -40% | 1 | 1 | 0% | 2,675 | 3,375 | +26% | 0 | 0 | — |
case-14 | pass→pass | 7,085 | 7,390 | +4% | 1 | 1 | 0% | 999 | 2,833 | +184% | 0 | 0 | — |
case-15 | pass→pass | 9,075 | 5,372 | -41% | 1 | 1 | 0% | 1,522 | 2,628 | +73% | 0 | 0 | — |
case-17 | fail→pass | 13,980 | 5,592 | -60% | 1 | 1 | 0% | 2,169 | 2,674 | +23% | 0 | 0 | — |
case-18 | pass→pass | 5,613 | 2,928 | -48% | 1 | 1 | 0% | 803 | 2,213 | +176% | 0 | 0 | — |
case-19 | pass→pass | 5,031 | 3,359 | -33% | 1 | 1 | 0% | 712 | 2,243 | +215% | 0 | 0 | — |
case-20 | pass→fail | 15,078 | 16,909 | +12% | 1 | 1 | 0% | 2,271 | 4,223 | +86% | 0 | 0 | — |
case-21 | pass→pass | 5,492 | 5,735 | +4% | 1 | 1 | 0% | 988 | 2,752 | +179% | 0 | 0 | — |
case-22 | pass→pass | 12,053 | 12,272 | +2% | 1 | 1 | 0% | 2,224 | 3,962 | +78% | 0 | 0 | — |
case-23 | pass→fail | 11,811 | 9,002 | -24% | 1 | 1 | 0% | 1,671 | 3,113 | +86% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 23 cases were attempted. The headline lift of +4 percentage points is the difference between those two pass rates over the 23 comparable cases. 2 cases got worse with the skill loaded, and they are included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.