Deep Research Literature Survey
HKUSTDial/Supervisor-Skills
Runs a survey-grade literature investigation: fixes the research questions, searches from adversarial angles, verifies citations and writes an evidence-first report.
End-to-end scientific research pipeline combining Exa Search, Playwright, deep-research, text-humanization, and iterative Remi peer review.
The automated check flagged lines worth reading first. See the safety section below.
$ npx skills add CYC2002tommy/Deep-Research-Agent --skill deep-science-writer -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install CYC2002tommy/Deep-Research-Agent deep-science-writer --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/CYC2002tommy/Deep-Research-Agent.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/deep-science-writer .claude/skills/deep-science-writer && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "deep-science-writer" agent skill from https://github.com/CYC2002tommy/Deep-Research-Agent/tree/main/skills/deep-science-writer into .claude/skills/deep-science-writer/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "deep-science-writer", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/CYC2002tommy/Deep-Research-Agent/tree/main/skills/deep-science-writerType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add CYC2002tommy/Deep-Research-Agent --skill deep-science-writer -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install CYC2002tommy/Deep-Research-Agent deep-science-writer --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/CYC2002tommy/Deep-Research-Agent.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/deep-science-writer .agents/skills/deep-science-writer && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "deep-science-writer" agent skill from https://github.com/CYC2002tommy/Deep-Research-Agent/tree/main/skills/deep-science-writer into .agents/skills/deep-science-writer/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "deep-science-writer", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add CYC2002tommy/Deep-Research-Agent --skill deep-science-writer -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install CYC2002tommy/Deep-Research-Agent deep-science-writer --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/CYC2002tommy/Deep-Research-Agent.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/deep-science-writer .cursor/skills/deep-science-writer && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "deep-science-writer" agent skill from https://github.com/CYC2002tommy/Deep-Research-Agent/tree/main/skills/deep-science-writer into .cursor/skills/deep-science-writer/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "deep-science-writer", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/CYC2002tommy/Deep-Research-Agent.git --path skills/deep-science-writer--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add CYC2002tommy/Deep-Research-Agent --skill deep-science-writer -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install CYC2002tommy/Deep-Research-Agent deep-science-writer --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/CYC2002tommy/Deep-Research-Agent.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/deep-science-writer .gemini/skills/deep-science-writer && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "deep-science-writer" agent skill from https://github.com/CYC2002tommy/Deep-Research-Agent/tree/main/skills/deep-science-writer into .gemini/skills/deep-science-writer/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "deep-science-writer", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install CYC2002tommy/Deep-Research-Agent deep-science-writerInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add CYC2002tommy/Deep-Research-Agent --skill deep-science-writer -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/CYC2002tommy/Deep-Research-Agent.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/deep-science-writer .github/skills/deep-science-writer && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "deep-science-writer" agent skill from https://github.com/CYC2002tommy/Deep-Research-Agent/tree/main/skills/deep-science-writer into .github/skills/deep-science-writer/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "deep-science-writer", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add CYC2002tommy/Deep-Research-Agent --skill deep-science-writer -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install CYC2002tommy/Deep-Research-Agent deep-science-writer --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/CYC2002tommy/Deep-Research-Agent.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/deep-science-writer .opencode/skills/deep-science-writer && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "deep-science-writer" agent skill from https://github.com/CYC2002tommy/Deep-Research-Agent/tree/main/skills/deep-science-writer into .opencode/skills/deep-science-writer/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "deep-science-writer", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
deep-science-writerEnd-to-end scientific research pipeline combining Exa Search, Playwright, deep-research, text-humanization, and iterative Remi peer review.
Deep Science Writer is an agent skill from CYC2002tommy/Deep-Research-Agent. End-to-end scientific research pipeline combining Exa Search, Playwright, deep-research, text-humanization, and iterative Remi peer review.
Its SKILL.md is about 8.7k tokens, which your agent loads only when the skill is triggered. The skill folder holds 12 other files, including scripts and reference files (for example `references/academic-api-patterns.md`, `references/python-docx-manipulation.md` and `scripts/mermaid_to_png.py`).
It sits in Research & Science, covering Deep research, Academic paper search and Literature review. It works with Exa and Playwright. The repository describes itself as: An autonomous AI agent pipeline for rigorous academic research, featuring strict DOI verification, multi-agent Scopus/OpenAlex/Semantic Scholar retrieval, and APA 7th .docx…. The licence is MIT.
11 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 2dd0249. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Ships 7 files in scripts/ (JavaScript and Python), which the agent can run.
Shell commands in SKILL.md call:
pythoncurlFrom the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
api.zotero.orgapi.crossref.orgres.mdpi.combg.copernicus.orgnature.comeuropepmc.orgapi.elsevier.comFrom URLs in SKILL.md, links to its own repository left out.
Names these keys or tokens, usually read from environment variables:
SEMANTIC_SCHOLAR_API_KEYSCOPUS_API_KEYZOTERO_API_KEYAPI_KEYFrom names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Deep Science Writer loads about 8.7k tokens when it runs, and up to ~10k if it reads all its reference files. Until then it costs about 40 tokens; SKILL.md has 4,523 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found patterns that need a careful read before installing.
ese are present in the environment or a `.env` file before executing the pipeline. **CRITICAL:** `ZOTERO_LIBRARY_ID` MUS- **Action Over Planning:** Do not tell the user what you *will* do. Immediately start executing Exa Search and PlaywrigAutomated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.
The full file from CYC2002tommy/Deep-Research-Agent at commit 2dd0249, republished under its MIT licence (© CYC2002tommy). 4,523 words, ~8,660 tokens.
.claude/skills/deep-science-writer/SKILL.md (or your agent's skills folder). This skill also uses 9 other files; get the full folder from GitHub.This skill orchestrates a multi-stage pipeline for scientific research, combining neural search, browser automation, academic synthesis, and humanized writing. It merges the capabilities of Exa Search, Playwright, Google Science Skills, Deep Research, and Text Humanization into one cohesive workflow.
C:/Users/User/workspace/nature-skills/, C:/Users/User/workspace/academic-research-skills/, and C:/Users/User/workspace/superpowers/ — these are not installed skills, so read from them with Read/Grep rather than trying to invoke them.Agent to protect the main context window.Bash tool using run_in_background: true. You are re-invoked automatically when it exits — do not poll. Wait for that notification before proceeding.scopus-mcp + exa-search + openalex + semantic-scholar + anysearch)Journal Quality Filter: ONLY include Q1 and Q2 papers. If a Q3 paper provides crucial evidence, you MUST explicitly mark it in the text/table with [Q3]. STRICTLY EXCLUDE any Q4 papers and ANY papers published by MDPI.
Mandatory 5-Subagent Deployment: You MUST spawn exactly five concurrent subagents using Agent. Assign each subagent to specialize in one core database: Subagent 1 (Scopus), Subagent 2 (Exa Search), Subagent 3 (OpenAlex), Subagent 4 (Semantic Scholar), and Subagent 5 (AnySearch vertical academic search and citation graph).
Mandatory Subagent Rules: The subagents MUST strictly adhere to the MDPI/Q4 exclusion rules.
Mandatory Toolset Utilization: Each subagent (or the collective effort) MUST explicitly utilize ALL of the following databases to ensure exhaustive coverage:
scopus-mcp (for Elsevier/authoritative DB)exa-search (for neural web search and Open Access discovery)anysearch skill CLI -- see Subagent 5 below)
Failure to use all five sources is a violation of this skill.Subagent 5 -- AnySearch (vertical academic + citation graph). Installed at C:/Users/User/.claude/skills/anysearch/. Runs a bundled CLI against public HTTP endpoints; no MCP server, and no API key required (anonymous access works; a key only raises rate limits).
Its distinct value is the academic vertical domain, which the other four cannot match on cost or reliability:
| sub_domain | Use for |
|---|---|
academic.citation | Citation graph by DOI. op=citations (cited-by), op=references (full reference list with DOIs), op=citation-count, op=author. The highest-value call in this phase. |
academic.search | Cross-discipline paper search by keyword, title, author, institution; returns metadata and open-access links |
academic.preprint | arXiv / bioRxiv / medRxiv preprints, with field, year_from/year_to, open_access, and direct doi lookup |
academic.biomedical | MEDLINE / PMC with MeSH terms and PMC full-text links |
academic.dataset | Zenodo / Dryad / Figshare datasets and research software |
Always call get_sub_domains --domain academic first to confirm the current parameter set, then search. id is a required parameter for academic.citation; pass the bare DOI with no doi: prefix.
PY="C:/Users/User/AppData/Local/hermes/hermes-agent/venv/Scripts/python"
CLI="C:/Users/User/.claude/skills/anysearch/scripts/anysearch_cli.py"
"$PY" "$CLI" get_sub_domains --domain academic
"$PY" "$CLI" search "<DOI>" --tag academic.citation --params "id=<DOI>,op=references" --max_results 10
"$PY" "$CLI" batch_search --query "topic A" --query "topic B" --tag academic.search --max_results 5
"$PY" "$CLI" extract --url "<url>"Why this subagent exists. In the 2026-08 Fukuoka run the Semantic Scholar citation-graph track burned roughly 25 minutes against the rate-limited anonymous pool and initially reported a false negative. The same query through AnySearch returned a complete 64-entry reference list with DOIs in about one second, with no key. Assign Subagent 5 the citation-graph work explicitly: pull references and citations for every seed DOI, because that is where thematically disconnected literatures surface -- keyword search cannot reach a body of work that shares no vocabulary with the query.
Two cautions. AnySearch general web search returns MDPI, ResearchGate, and forum results, so the MDPI/Q4 exclusion must still be applied downstream -- it is not filtered at source. And prefer the vertical academic.* tags over plain search for literature work; plain web search returns blog-grade results.
Exhaustive Mapping (User Rule): Do NOT sample (e.g., just looking at 5 out of 20). Process the exhaustive set of relevant findings into a structured Markdown table: | Title | Authors/Year | Key Finding | URL/DOI |.
cloakbrowser + deep-research)article-writing)Skill tool with skill: "hermes-research:article-writing", then outline the article on its principles: strong hook, logical progression, evidence-backed claims, and clear logical headings.python-docx, programmatically implement APA hanging indents (p.paragraph_format.first_line_indent = Inches(-0.5) and p.paragraph_format.left_indent = Inches(0.5)) and ensure journal/book titles and volume numbers are properly italicized.text-humanizer)Skill tool with skill: "hermes-research:text-humanizer", then review the generated draft and ruthlessly strip AI-isms, applying the strict "No Fluff" style profile.Strict Requirement: This phase MUST be completed before Remi (Phase 5) is allowed to review the manuscript.
Bash tool (via curl -I), Exa Search MCP, or a Python script (e.g., requests.get / urllib) to ping every DOI or URL in the reference list. For bulk or programmatic URL resolution when links are missing, execute scripts/verify_urls.py (uses ddgs and requests).Strict Requirement: This phase bridges verified evidence with bibliography management before Remi's review.
assets/ directory.scripts/fetch_oa_fulltexts.py (Unpaywall API).cloakbrowser (launch_context_async) to navigate to the DOI landing page or PDF direct link. cloakbrowser will natively bypass bot protection by leveraging the user's University IP environment and stealth fingerprints.pyzotero): Skill tool with skill: "hermes-research:pyzotero" to integrate with the Zotero v3 API.journalArticle) populated with title, authors, year, DOI, and URL.zot.attachment_simple([local_pdf_path], parentid=parent_key) to upload the downloaded PDF as an attachment to its respective Zotero Parent Item.remi)Skill tool with skill: "hermes-research:remi" to act as a strict Nature/Science-level peer reviewer.CRITICAL RULE: You MUST NOT generate or export the final .docx file until Phase 4 (Text Humanizer), Phase 4.5 (DOI Verification), and Phase 5 (Remi Review) have been explicitly executed and passed. Skipping these steps before exporting is a strict violation of this pipeline.
@antv/infographic) framework. playwright-mcp or a local headless browser script to take a high-quality screenshot (.png) of the rendered AntV infographic. Save it to assets/.mermaid.ink for simple flowcharts, but all major data visualizations should leverage the AntV infographic capabilities for professional aesthetics.docx or python-docx): You MUST NOT just output Markdown as the final product. Write a Python script using python-docx to programmatically build the final Word document. Important Windows Environment Note: When executing the Python script via Bash, use absolute paths with forward slashes and enclose them in quotes (e.g., python "C:/path/to/generate_docx.py") to prevent MSYS bash from stripping backslashes and causing [Errno 2] No such file or directory..docx file at the appropriate logical sections. Ensure formatting aligns with APA 7th standards (e.g., proper figure captions)..docx file directly to the D:\ drive (e.g., D:\Research_Report.docx). Deliver this absolute D:\ path to the user.C:\Users\User\Documents\Obsidian Vault\) to maintain an ongoing, centralized knowledge base.notebooklm MCP tools to create a dedicated notebook for this research project. You MUST explicitly upload every single cited reference as an individual source into NotebookLM (do not just upload one compiled document). Upload the raw abstracts or full-texts for each cited paper so NotebookLM can accurately cross-reference and map individual citations.references/python-docx-manipulation.md: Patterns for reading, creating, and safely removing XML paragraphs from .docx files.references/academic-api-patterns.md: Reliable curl and Python patterns for hitting Crossref and OpenAlex APIs, including critical URL-encoding fixes.scripts/verify_urls.py: Python script utilizing ddgs and requests to programmatically search and verify evidence URLs for Phase 4.5.scripts/node/fetch_openalex_papers.js: Node.js script for safely fetching from OpenAlex and strictly filtering out MDPI/Q4.scripts/node/fetch_unpaywall_oa.js: Resolves DOI to Open Access PDF URLs via Unpaywall.scripts/node/scrape_html_fulltext.js: Scrapes HTML full texts to bypass basic PDF blocks.scripts/node/extract_pdf_text.js: PDF parsing script template using pdf-parse.scripts/node/generate_docx.js: Programmatically generates APA 7th compliant DOCX using the docx library.templates/fetch_openalex_background.js: Node.js template for background fetching from the OpenAlex API, including the logic to decode abstract_inverted_index and respect rate limits.scripts/fetch_oa_fulltexts.py: Python script utilizing the Unpaywall API and PyMuPDF to automatically locate, download, and extract text from Open Access PDFs for a given list of DOIs. Crucial for Phase 0.5.templates/fetch_openalex_background.js: Node.js template for background fetching from the OpenAlex API, including the logic to decode abstract_inverted_index and respect rate limits.pyzotero client. The pipeline will crash or fail to archive if the required environment variables (ZOTERO_API_KEY, ZOTERO_LIBRARY_ID, ZOTERO_LIBRARY_TYPE) are missing. Always verify these are present in the environment or a .env file before executing the pipeline. CRITICAL: ZOTERO_LIBRARY_ID MUST be the integer ID (e.g., 16500033), NOT the username. If the user provides a string username, resolve it programmatically via GET https://api.zotero.org/keys/<API_KEY> (r.json()['userID']).?email=...) or the request will fail with HTTP 422.10.3390) aggressively block headless requests (curl/node), resulting in 403 Forbidden errors during Phase 4.5 URL verification. Do NOT just fetch them and fail later. When writing the Phase 0.5 background fetch script (e.g., using OpenAlex), programmatically filter out MDPI by checking host_organization_name (must not include "mdpi") and doi (must not include "10.3390") before processing or presenting the results to the user.cloakbrowser (from cloakbrowser import launch_context_async) which provides native stealth bypassing. This perfectly synergizes with the user's University IP to unlock full-texts seamlessly.https://api.crossref.org/works/{doi}) before creating the pyzotero Parent Item.SEMANTIC_SCHOLAR_API_KEY. Include it in the Python/Node.js script's request headers as {'x-api-key': os.environ.get('SEMANTIC_SCHOLAR_API_KEY')} to bypass public rate limits and achieve high-throughput retrieval. For Scopus API, complex nested boolean logic with NOT may throw 400 Bad Request; fetch broader results and filter locally via Python. On Windows hosts, the Bash tool runs MSYS bash. Always use python -m pip install and execute absolute paths using forward slashes and quotes (e.g., python "C:/path/to/script.py") to prevent backslashes from being stripped by the shell. Additionally, when passing absolute Windows paths to python commands, MSYS bash may strip the backslashes causing [Errno 2] No such file or directory. Always use forward slashes for paths in terminal execution.host_organization_name field (e.g., rejecting "Multidisciplinary Digital Publishing Institute" or "MDPI").Bash tool runs MSYS bash where standard python and pip commands may fail or open the Windows Store. Always use py script.py to run scripts and py -m pip install to install dependencies. For background async tasks and PDF extraction, Node.js (node) is heavily preferred as it natively handles async loops well in the MSYS terminal without alias issues. See references/nodejs-pdf-extraction.md for stable pdf-parse templates.input() EOFError: Do NOT use Python's input() function to pause for manual user interaction in scripts executed via the Bash tool. The MSYS terminal is non-interactive and will throw EOFError: EOF when reading a line. Use time.sleep() with a generous buffer instead.playwright, cloudscraper, and playwright-stealth will fail (403 Forbidden or Timeout) against strict publishers like Wiley. You MUST use cloakbrowser via Python (launch_context_async). If still blocked, fallback to headless=False with asyncio.sleep(15) to allow the user to manually solve the Captcha visibly before the automated download resumes.schedule skill to create a reminder (e.g., "Time for the weekly track. Reply [Explicit Approval] to start."). When the user replies in the chat, launch the subagents via Agent so they render visibly in the UI.scopus-mcp is registered in Claude Code at C:\Users\User\.claude.json under mcpServers.scopus. Two things were required to make it work and must not be reverted: the real SCOPUS_API_KEY (the placeholder PUT_YOUR_KEY_HERE was the original failure), and the args ["--with", "mcp<2.0.0", "scopus-mcp"] — the package declares an unpinned mcp>=0.1.0, so uvx pulls mcp 2.0.0, whose Server class dropped list_tools() and crashes the server on import. MCP changes only take effect after a full desktop-app restart..docx draft or PDF via the Desktop UI paperclip/drag-and-drop and encounters an "Invalid API key" error, it means the UI is trying to send the file directly to the LLM provider (e.g. Gemini/OpenAI) which lacks the proper file endpoint permissions. Do not ask them to fix their API key. Instead, instruct the user to provide the absolute file path (e.g. D:\Tommy\document.docx) so you can use the built-in Read tool to parse the document locally without hitting external APIs.C:/Users/User/.claude/skills/hermes-research/skills/deep-science-writer/. Edit that one. Two other copies exist and are not loaded: C:/Users/User/.claude/skills/learned/research-writing/deep-science-writer/ (the original Hermes-era version, kept for Hermes and as the source of the bundled .venv/node_modules, which the live copy reaches via directory junctions) and C:/Users/User/workspace/deep-research-agent/skills/deep-science-writer/ (the GitHub mirror). After changing the live copy, mirror it to the workspace repo, commit with a conventional commit message, and push to origin/main; the live copy is the source of truth on conflict.A full four-subagent literature sweep was executed end to end in August 2026. These are the failures that actually occurred and the fixes that actually worked.
The registered SCOPUS_API_KEY also authorises Elsevier's Article Retrieval API. This retrieves full text for every Elsevier journal — Remote Sensing of Environment, Urban Climate, Urban Forestry & Urban Greening, Applied Geography, Cities, Solar Energy — as clean text, with no browser, no proxy, and no PDF extraction step.
import requests, json
KEY = json.load(open(r"C:/Users/User/.claude.json", encoding="utf-8"))["mcpServers"]["scopus"]["env"]["SCOPUS_API_KEY"]
r = requests.get(f"https://api.elsevier.com/content/article/doi/{doi}?httpAccept=text/plain",
headers={"X-ELS-APIKey": KEY, "Accept": "text/plain"}, timeout=60)pii/{PII} also works (take the PII from Crossref's alternative-id); httpAccept=text/xml preserves section structure. Sleep ~1 s between calls. Six paywalled papers were retrieved this way in one pass after every crawler route had failed. Try this before reaching for cloakbrowser on any 10.1016/ DOI.
Publisher routing that works:
| Publisher | Route |
|---|---|
Elsevier (10.1016/) | Article Retrieval API with the Scopus key, as above |
MDPI (10.3390/) | www.mdpi.com/.../pdf returns Access Denied, but the asset CDN https://res.mdpi.com/<journal>/<journal>-<vol>-<page>/article_deploy/<...>.pdf serves it |
| Copernicus (BG, ACP, ESSD) | Fully open: https://bg.copernicus.org/articles/<vol>/<page>/<year>/bg-<vol>-<page>-<year>.pdf |
| Nature / Sci Rep | https://www.nature.com/articles/<id>.pdf when OA |
| PMC | Public PMC sits behind reCAPTCHA; the Europe PMC mirror https://europepmc.org/articles/PMC<id>?pdf=render does not |
| Wiley / AGU | No reliable automated route found; needs institutional access |
Note that OpenAlex oa_status is not a reliable predictor here — papers reading closed in OpenAlex retrieved fine through the Elsevier API.
A guessed NTRS identifier returned a perfectly valid 1.2 MB PDF that was a NASA launch-abort-system paper, not the requested Landsat calibration study. Checking for a %PDF magic number and a plausible size is not sufficient. Read page 1 and match expected title keywords before trusting any download:
d = fitz.open(path)
first = d[0].get_text("text").lower()
assert "expected keyword" in first and "second keyword" in firstSubagent reports are leads, not evidence. Two concrete errors from this run:
Rule: before a subagent-reported number enters a synthesis or a manuscript, grep it out of the primary full text and read the sentence around it. Reserve this for load-bearing numbers; you cannot re-verify everything, so say plainly which numbers were re-verified and which were taken on report.
Two of four subagents initially reported "nothing usable" and both were wrong:
python ... | tail -70, so all stdout buffered inside tail and nothing appeared until exit; the script also wrote its JSON only after all 53 queries finished, so an interrupted run yielded nothing. It had in fact completed, with 9,088 records.Fix in the script, not in the retry: redirect to a log file instead of piping to tail, and checkpoint the results JSON after every query so a killed run still yields partial data. Cache responses so a re-run resumes rather than repeats.
Semantic Scholar's /paper/DOI:{doi}/citations revealed the structural reason a literature gap existed: the 53 papers citing the main site-context paper contained zero carbon or NPP work — the urban-greenspace literature and the carbon-cycle literature were disconnected communities. Keyword search on the site name could never have surfaced the numbers, because they live in a citation neighbourhood that never touches it. A single bridging paper connected the two.
Use citation-graph traversal when keyword search returns thematically narrow results. It is a ~20-call job with a key. Note that SEMANTIC_SCHOLAR_API_KEY is currently unset, and the backup file stores only a masked placeholder (s2k-V9...Zw6N, literal ellipsis) — the anonymous pool 429s heavily and a real key turns a 25-minute grind into about a minute.
Prefer the markitdown skill over raw PyMuPDF text extraction: it renders tables as Markdown pipe tables, which matters for papers whose load-bearing numbers live in a regional or parameter table. Fall back to PyMuPDF only when markitdown errors on a specific file.
© CYC2002tommy, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 9 other files (scripts, references) in skills/deep-science-writer of CYC2002tommy/Deep-Research-Agent.
Open the folder on GitHubat commit 2dd0249
Deep Science Writer next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Deep Science Writer this skillCYC2002tommy/Deep-Research-Agent | 311 | — | ~8.7k | Automated safety check: Warn | MIT | |
| Deep Research Literature SurveyHKUSTDial/Supervisor-Skills | 8.8k | — | ~2.4k | Automated safety check: Pass | CC-BY-NC-SA-4.0 | |
| Insane Searchfivetaku/gptaku-plugins-codex | 128 | — | ~5.6k | Automated safety check: Pass | MIT | |
| Deep Researchlingzhi227/agent-research-skills | 390 | — | ~2.9k | Automated safety check: Pass | None | |
| Web Application Testinganthropics/skills | 180k | 51 repos | ~966 | Automated safety check: Pass | Apache-2.0 | |
| Write and Verify Playwright Testsappsmithorg/appsmith | 41k | — | ~2.9k | Automated safety check: Notes | Apache-2.0 |
HKUSTDial/Supervisor-Skills
Runs a survey-grade literature investigation: fixes the research questions, searches from adversarial angles, verifies citations and writes an evidence-first report.
fivetaku/gptaku-plugins-codex
Adaptive access for blocked websites — tries every method until one works.
lingzhi227/agent-research-skills
Conduct systematic academic literature reviews in 6 phases, producing structured notes, a curated paper database, and a synthesized final report.
anthropics/skills
Tests local web applications with Python Playwright scripts, checking frontend behavior, capturing screenshots and reading browser console logs.
appsmithorg/appsmith
Writes a Playwright end-to-end test from a prompt, runs it against a live Appsmith deployment and retries with fixes up to three times until it passes.
github/gh-aw
Drives a real browser from the command line with playwright-cli to open pages, interact, mock requests, save state and work with Playwright tests.
CYC2002tommy/Deep-Research-Agent
Strict peer reviewer for academic manuscripts (Nature/Science level).
Works with
Categories
End-to-end scientific research pipeline combining Exa Search, Playwright, deep-research, text-humanization, and iterative Remi peer review. Deep Science Writer is an agent skill from CYC2002tommy/Deep-Research-Agent. End-to-end scientific research pipeline combining Exa Search, Playwright, deep-research, text-humanization, and iterative Remi peer review.
Deep Science Writer fits situations like: tasks that involve Deep research; tasks that involve Academic paper search; tasks that involve Literature review.
Run `npx skills add CYC2002tommy/Deep-Research-Agent --skill deep-science-writer -a claude-code`. Or copy the skill folder (skills/deep-science-writer in CYC2002tommy/Deep-Research-Agent) into .claude/skills/deep-science-writer in your project. Claude Code loads it when a task matches its description.
Run `npx skills add CYC2002tommy/Deep-Research-Agent --skill deep-science-writer -a codex`. Or copy the skill folder (skills/deep-science-writer in CYC2002tommy/Deep-Research-Agent) into .agents/skills/deep-science-writer in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add CYC2002tommy/Deep-Research-Agent --skill deep-science-writer -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/deep-science-writer, .gemini/skills/deep-science-writer, .github/skills/deep-science-writer and .opencode/skills/deep-science-writer in your project.
Going by SKILL.md and its folder, Deep Science Writer needs JavaScript and Python for the scripts in its folder, the command-line tools its instructions call (python and curl) and credentials named SEMANTIC_SCHOLAR_API_KEY, SCOPUS_API_KEY, ZOTERO_API_KEY and API_KEY. Our summary lists: Python 3; Node.js.
SKILL.md names 7 domains. In commands or code: api.zotero.org, api.crossref.org, res.mdpi.com, bg.copernicus.org, nature.com, europepmc.org and api.elsevier.com; the agent is likely to contact these when it follows the instructions. This is read from the text; nothing was executed.
Our automated static check of SKILL.md flagged 1 warning(s): contains instruction-override wording (e.g. “without asking the user”). Read the flagged lines before installing; the check is not a guarantee either way. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.
Deep Science Writer is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 8.7k tokens (SKILL.md is roughly 35k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 1.5k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Deep Science Writer: Deep Research Literature Survey (HKUSTDial/Supervisor-Skills, 8.8k stars), Insane Search (fivetaku/gptaku-plugins-codex, 128 stars), Deep Research (lingzhi227/agent-research-skills, 390 stars) and Web Application Testing (anthropics/skills, 180k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
CYC2002tommy (a GitHub user) maintains it in CYC2002tommy/Deep-Research-Agent, which has 311 GitHub stars. The repository holds 2 skills in this directory. The repository was last updated on August 23, 2026.
Source: CYC2002tommy/Deep-Research-Agent on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.