Markdown Article Formatter
JimLiu/baoyu-skills
Reformats plain text or Markdown articles with frontmatter, a title, a summary, headings, bold, lists and code blocks, and saves a separate formatted copy.
Run focused literature and web research from a grounded note.
$ npx skills add gaotiexinqu/OneResearchClaw --skill grounded-research-lit -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install gaotiexinqu/OneResearchClaw grounded-research-lit --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/gaotiexinqu/OneResearchClaw.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.cursor/skills/grounded-research-lit .claude/skills/grounded-research-lit && 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 "grounded-research-lit" agent skill from https://github.com/gaotiexinqu/OneResearchClaw/tree/main/.cursor/skills/grounded-research-lit into .claude/skills/grounded-research-lit/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "grounded-research-lit", 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/gaotiexinqu/OneResearchClaw/tree/main/.cursor/skills/grounded-research-litType 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 gaotiexinqu/OneResearchClaw --skill grounded-research-lit -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install gaotiexinqu/OneResearchClaw grounded-research-lit --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/gaotiexinqu/OneResearchClaw.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.cursor/skills/grounded-research-lit .agents/skills/grounded-research-lit && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "grounded-research-lit" agent skill from https://github.com/gaotiexinqu/OneResearchClaw/tree/main/.cursor/skills/grounded-research-lit into .agents/skills/grounded-research-lit/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "grounded-research-lit", 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 gaotiexinqu/OneResearchClaw --skill grounded-research-lit -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install gaotiexinqu/OneResearchClaw grounded-research-lit --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/gaotiexinqu/OneResearchClaw.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.cursor/skills/grounded-research-lit .cursor/skills/grounded-research-lit && 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 "grounded-research-lit" agent skill from https://github.com/gaotiexinqu/OneResearchClaw/tree/main/.cursor/skills/grounded-research-lit into .cursor/skills/grounded-research-lit/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "grounded-research-lit", 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/gaotiexinqu/OneResearchClaw.git --path .cursor/skills/grounded-research-lit--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 gaotiexinqu/OneResearchClaw --skill grounded-research-lit -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install gaotiexinqu/OneResearchClaw grounded-research-lit --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/gaotiexinqu/OneResearchClaw.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.cursor/skills/grounded-research-lit .gemini/skills/grounded-research-lit && 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 "grounded-research-lit" agent skill from https://github.com/gaotiexinqu/OneResearchClaw/tree/main/.cursor/skills/grounded-research-lit into .gemini/skills/grounded-research-lit/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "grounded-research-lit", 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 gaotiexinqu/OneResearchClaw grounded-research-litInstalls 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 gaotiexinqu/OneResearchClaw --skill grounded-research-lit -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/gaotiexinqu/OneResearchClaw.git skills-src && mkdir -p .github/skills && cp -r skills-src/.cursor/skills/grounded-research-lit .github/skills/grounded-research-lit && 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 "grounded-research-lit" agent skill from https://github.com/gaotiexinqu/OneResearchClaw/tree/main/.cursor/skills/grounded-research-lit into .github/skills/grounded-research-lit/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "grounded-research-lit", 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 gaotiexinqu/OneResearchClaw --skill grounded-research-lit -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install gaotiexinqu/OneResearchClaw grounded-research-lit --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/gaotiexinqu/OneResearchClaw.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.cursor/skills/grounded-research-lit .opencode/skills/grounded-research-lit && 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 "grounded-research-lit" agent skill from https://github.com/gaotiexinqu/OneResearchClaw/tree/main/.cursor/skills/grounded-research-lit into .opencode/skills/grounded-research-lit/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "grounded-research-lit", 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.
grounded-research-litRun focused literature and web research from a grounded note.
Grounded Research Lit is an agent skill from gaotiexinqu/OneResearchClaw. Run focused literature and web research from a grounded note. Use when a grounded note already exists and you want targeted research results, opened-link evidence, deeper per-paper analysis materials, optional downloaded literature, and a two-stage literature output (litinitial.md then refined lit.md).
Its SKILL.md is about 11k tokens, which your agent loads only when the skill is triggered. The skill folder holds 5 other files, including scripts (for example `scripts/download_opened_literature.py`, `scripts/prepare_opened_paper_notes.py` and `scripts/refine_notes_from_downloaded_pdfs.py`).
It sits in Documents & Office. The repository describes itself as: Any research. One Claw. 🦞 From any materials to research with fully autonomous & skill-driven researcher. The licence is MIT.
12 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 37e86c6. 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 4 files in scripts/ (Python), which the agent can run.
Shell commands in SKILL.md call:
pythonFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names these keys or tokens, usually read from environment variables:
BIGMODEL_SEARCH_API_KEYFrom names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Grounded Research Lit loads about 11k tokens when it runs. Until then it costs about 83 tokens; SKILL.md has 5,116 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 no risky patterns in SKILL.md.
Automated 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 gaotiexinqu/OneResearchClaw at commit 37e86c6, republished under its MIT licence (© gaotiexinqu). 5,116 words, ~11,196 tokens.
.claude/skills/grounded-research-lit/SKILL.md (or your agent's skills folder). This skill also uses 4 other files; get the full folder from GitHub.Use a structured grounded note to perform targeted literature / web research.
This skill is not a generic survey skill. It is a grounding-conditioned research stage.
Its responsibilities are:
lit_initial.md) from opened-source evidencelit.md) for downstream stagesLoad constants from:
config/research_pipeline.envUse:
source config/research_pipeline.env| Variable | Values | Meaning |
|---|---|---|
SEARCH_BACKEND | auto / external / cursor | Select research backend |
REQUIRE_OPEN_LINK | true / false | Whether links must be opened and read |
DOWNLOAD_OPENED_LITERATURE | true / false | Whether opened research literature should be downloaded |
DOWNLOAD_DIR | path | Download root directory |
OPEN_TOP_K | integer ≥ 1 | Minimum number of results to open per query |
MIN_OPENED_PAPERS | integer ≥ 1 | (Cursor-native only) Minimum number of opened papers required before writing lit_initial.md; value is controlled by research_mode via config/research_pipeline.env |
MIN_RECENT_PAPERS | integer ≥ 1 | (Cursor-native only) Minimum number of recently-published opened papers required (within the last 2 years) |
if SEARCH_BACKEND == "external":
use external API backend only
elif SEARCH_BACKEND == "cursor":
use Cursor-native research only
else: # auto
if BIGMODEL_SEARCH_API_KEY exists:
use external API backend
else:
use Cursor-native researchImportant:
web_search_reader.py is only for the external backendprepare_opened_paper_notes.py is used for both backendsdownload_opened_literature.py is a local downloader / backfill helperrefine_notes_from_downloaded_pdfs.py is the PDF refinement helper used after downloads completeUse this skill when:
Do not use this skill when:
grounded-summary after this)ground_idRead ground_id.txt from the grounding bundle to get the stable pipeline identifier:
data/grounded_notes/<ground_id>/ground_id.txtDo NOT generate a new ground_id. All downstream directories reuse the same ground_id.
Usually:
data/grounded_notes/<ground_id>/grounded.mdqueries_confirmed_path: path to a user-confirmed queries JSON file (e.g., data/lit_inputs/<ground_id>/queries_confirmed.json). When provided, use the queries from this file directly instead of generating new ones.This skill should adapt to the grounded note's actual schema rather than forcing one universal section layout.
When queries_confirmed_path is provided, use the queries from that file as the authoritative source — do not re-generate.
When queries_confirmed_path is NOT provided, fall back to:
Search Keywords is present in the grounded note, use it as the primary query seed.Map the grounded note into research-relevant semantic slots.
Archive OverviewIncluded MaterialsSuccessfully Processed Child ItemsKey Signals Across MaterialsSkipped / Unsupported / Failed ItemsSuggested Next StepsSearch KeywordsMain Topic / PurposeMain PointsKey Findings / ClaimsConstraints / RisksImportant Non-Textual ElementsUnresolved IssuesSuggested Next StepsSearch KeywordsMeeting TopicMain Discussion PointsKey ConclusionsConstraints / RisksDisagreements or Unresolved IssuesSuggested Next StepsSearch KeywordsMain Topic / PurposeDeck Structure / Narrative FlowMain PointsImportant Evidence and AssetsSpeaker Notes SignalsGaps / Risks / AmbiguitiesSuggested Next StepsSearch KeywordsMain Topic / PurposeMain FieldsKey SignalsAnomalies / OutliersPossible Supported ConclusionsRisks / Data Quality IssuesSuggested Next ChecksSearch KeywordsGenerate query groups with grounding-type-aware emphasis.
Use for:
Use for:
Use for:
queries.json formatqueries.json must use plain string arrays for each query group.
Preferred structure:
{
"ground_id": "<ground_id>",
"problem_queries": [
"query string 1",
"query string 2"
],
"method_queries": [
"query string 1",
"query string 2"
],
"constraint_queries": [
"query string 1",
"query string 2"
]
}Rules:
problem_queries, method_queries, and constraint_queries as arrays of strings onlyquery, emphasis, keywords, or rationaleground_id is allowed, but query entries themselves must remain plain stringsUnder:
data/lit_inputs/<ground_id>/Write:
data/lit_inputs/<ground_id>/queries.jsondata/lit_inputs/<ground_id>/search_results.jsonIf any literature item is successfully opened and readable, preserve source material under:
data/lit_inputs/<ground_id>/opened_sources/After search/open, generate structured paper-note artifacts under:
data/lit_inputs/<ground_id>/opened_paper_notes.jsonldata/lit_inputs/<ground_id>/opened_paper_notes/These artifacts are internal to this skill and do not change downstream contracts. They exist to make the literature report deeper, less snippet-driven, and more evidence-backed.
Under:
data/lit_inputs/<ground_id>/lit_initial.mdThis is an internal research-stage intermediate artifact. It may be used to checkpoint the first pass based on opened-page evidence, but it must not be treated as the final output for downstream stages.
Under:
data/lit_results/<ground_id>/lit.mdThis is the final research-stage output that downstream stages should consume. It must be written only after the PDF refinement pass completes or no eligible downloaded PDFs are available.
If DOWNLOAD_OPENED_LITERATURE=true:
data/lit_downloads/<ground_id>/data/lit_downloads/<ground_id>/manifest.json.cursor/skills/grounded-research-lit/scripts/web_search_reader.py.cursor/skills/grounded-research-lit/scripts/prepare_opened_paper_notes.py.cursor/skills/grounded-research-lit/scripts/download_opened_literature.py.cursor/skills/grounded-research-lit/scripts/refine_notes_from_downloaded_pdfs.pyWhen invoked, this skill must:
infer ground_id from the grounded note path if possible
read the grounded note
detect or infer the grounding type from the note structure
load constants from config/research_pipeline.env
load confirmed queries if queries_confirmed_path is provided; otherwise extract and generate:
if queries_confirmed_path is provided: read queries from that file and copy them as queries.json — do NOT regenerate or ask the user again
if queries_confirmed_path is NOT provided: use Search Keywords as the primary query seed, generate query groups:
queries.json using plain string arrays for each query group; do not use per-query objects with fields such as query, emphasis, keywords, or rationalerun research:
web_search_reader.pypreserve opened readable sources under opened_sources/
generate opened_paper_notes.jsonl and per-paper note markdown files using prepare_opened_paper_notes.py
for backend=cursor, explicitly verify the opened-paper count using the exact opened-count verification rule before writing data/lit_inputs/<ground_id>/lit_initial.md
11.5. Paper Opened Confirmation (Agent Inline Check) — this step must be completed before writing data/lit_inputs/<ground_id>/lit_initial.md:
opened_paper_notes.jsonl and verify, for each one:opened_sources/opened_sources/lit_initial.mdwrite data/lit_inputs/<ground_id>/lit_initial.md from opened-page evidence and paper notes
if DOWNLOAD_OPENED_LITERATURE=true:
download_opened_literature.py after the opened-source artifacts and initial note artifacts existdata/lit_inputs/<ground_id>/lit_initial.md and final lit.mdcompleted or no_eligible_items) before finalizing the research stagerefine_notes_from_downloaded_pdfs.py to enrich notes from successfully downloaded PDFslit.md from the refined notesdata/lit_inputs/<ground_id>/lit_initial.md, you must search and open at least MIN_OPENED_PAPERS unique relevant literature itemsat least $MIN_OPENED_PAPERS opened items is a hard requirement, not a best-effort suggestion$MIN_OPENED_PAPERS rule must be enforced using the exact opened-count verification rule, not by rough browsing impressions alone$MIN_OPENED_PAPERS unique relevant literature items satisfy the exact opened-count verification rule, the Cursor-native research stage is not complete and must continue searching / opening more itemsDOWNLOAD_OPENED_LITERATURE=true, the Cursor-native backend must also successfully download at least MIN_OPENED_PAPERS unique relevant literature items before the research stage can be treated as complete, unless the run explicitly reports why this target could not be reached after continued search/open/download attemptsMIN_RECENT_PAPERS papers published in the last 2 years have been opened before writing lit_initial.md; if insufficient, supplement searches with year-filtered queries must be performeddata/lit_inputs/<ground_id>/lit_initial.md first, lit.md lastThe research stage must follow this post-search order:
data/lit_inputs/<ground_id>/lit_initial.md based primarily on those paper noteslit.mdThe goal is:
data/lit_inputs/<ground_id>/lit_initial.md is internal to this research stage.
Downstream stages should consume only the final lit.md.
lit_initial.mdBefore writing data/lit_inputs/<ground_id>/lit_initial.md, the following confirmation process must be completed for all candidate papers. This step is executed by the agent inline, without relying on external scripts.
Each paper in opened_paper_notes.jsonl.
For each paper, verify:
| Check | Logic | If Problem Found |
|---|---|---|
| Source file exists | Corresponding file found under opened_sources/ | Missing → re-search and open |
| Content sufficient | Readable body content ≥ 500 chars | Insufficient → re-search and open |
| Analysis substantive | Paper note is not hollow and has real content | Too thin → attempt to expand; if not possible, remove |
| Source-analysis alignment | Content referenced in the analysis can be traced back to the source file | Suspicious → re-search to confirm |
opened_paper_notes.jsonl to get the paper listopened_source_path exists under opened_sources/opened_sources/prepare_opened_paper_notes.pylit_initial.mdThe purpose of this step is to eliminate hallucination risk before writing, not to fix it after writing.
When backend=cursor, do not treat browsing alone as research completion.
The Cursor-native branch must produce explicit local artifacts before the writing stage.
The required sequence is:
$MIN_OPENED_PAPERS unique relevant items satisfy the exact opened-count verification ruledata/lit_inputs/<ground_id>/opened_sources/search_results.jsonprepare_opened_paper_notes.pyopened_paper_notes.jsonl existsopened_paper_notes/ contains generated per-paper note files$MIN_OPENED_PAPERS using the exact opened-count verification rule6.5 (Cursor-native only) recent papers enforcement:
Load constant from `config/research_pipeline.env`:
MIN_RECENT_PAPERS (value depends on `research_mode`)
This check is always active for the Cursor-native backend.
a. From all opened papers in `search_results.json` where:
- opened == true
- open_status == "success"
- is_research_literature == true
extract the publication year from:
- the `publish_date` field, or
- the opened source file content (look for a year in the visible
metadata or near the title/abstract)
b. Count papers with year >= (current_year - 1). In 2026, the cutoff is 2025.
c. If count < MIN_RECENT_PAPERS:
i. Extract Search Keywords from the grounded note.
ii. Generate supplementary queries by appending year filters for
the last 2 years to keywords:
e.g. "[keyword] 2025..2026"
"[keyword] 2025 site:arxiv.org"
"[keyword] 2026 site:arxiv.org"
iii. Run WebSearch with these supplementary queries.
iv. Use WebFetch to open newly found papers.
v. Save each newly opened source under `opened_sources/`.
vi. Update `search_results.json` with new opened items
(append to the existing queries array).
vii. Re-run `prepare_opened_paper_notes.py`.
viii.Re-verify: opened count >= `$MIN_OPENED_PAPERS` AND recent count >= MIN_RECENT_PAPERS.
If still insufficient after supplement, apply the fallback
policy below only after exhausting the escalation steps in
section d.
d. (Escalation — must be attempted before any fallback is taken)
If supplement search in step c still leaves recent count < MIN_RECENT_PAPERS,
the agent must escalate before falling back:
- Broaden the keyword strategy: try shorter core terms, remove
modifiers, try synonyms (e.g. from "long-context transformer"
to "transformer", from "RAG" to "retrieval augmented generation")
- Search arxiv's cs.* categories directly with year filters
- Search Google Scholar with year filters if available
- Try searching for "state of the art [keyword] 2025" and
"latest research on [keyword]" as standalone queries
- Try the arxiv cs.CV / cs.CL / cs.AI new submission pages
- Record every escalation attempt in the run report:
what was tried, how many results were found, how many
were opened, why each attempt fell short
After completing all escalation steps, re-count recent papers.
Only if recent count is still < MIN_RECENT_PAPERS AND the agent can
document a concrete reason why recent papers do not exist for this topic
(e.g. the research area literally did not exist until this year),
then the fallback in section e may be taken.
e. (Strict fallback — only as last resort, requires explicit justification)
Fallback means: the minimum is reduced to 1 recent paper if at least
1 can be found; if even 1 cannot be found after all escalation steps,
the research stage reports the complete absence of recent literature
as a finding in the run report and proceeds.
⚠️ ANTI-GAMING RULE: The fallback is NOT a permission to skip the
recent-paper requirement. It exists only for genuinely novel topics
where research from the last 2 years is physically absent.
The agent must NOT use fallback as a convenience escape hatch.
Any fallback taken without documented escalation attempts in section d
constitutes a skill violation.
Before taking fallback, the agent must explicitly state in the run
report:
- Which escalation steps in section d were attempted
- How many results each yielded
- The concrete reason recent papers could not be found
- Whether the fallback to 1 recent paper or zero-recent finding
was taken, and whydata/lit_inputs/<ground_id>/lit_initial.mddownload_opened_literature.pyrefine_notes_from_downloaded_pdfs.pylit.mdWhen backend=cursor, you MUST use these tools for search and open:
WebSearch — Use this tool to search for literature. Provide a targeted search_term and an explanation of what you're looking for.WebFetch — Use this tool to fetch and read individual paper/abstract pages from URLs returned by WebSearch.ListMcpResources, FetchMcpResource, browser_* tools) — these are for different purposes, NOT for literature researchweb_search_reader.py) — these are for the external API backend only, not Cursor-nativeCallMcpTool for browser/IDE-related operations during researchqueries.json, call WebSearch with the query stringWebFetch to read the paper pagedata/lit_inputs/<ground_id>/opened_sources/data/lit_inputs/<ground_id>/search_results.json recording each item's opened statusprepare_opened_paper_notes.pyThe skill file says "Cursor-native fallback is orchestration logic in this skill" and "Do not try to call Cursor-native search through Python". This means you must use the WebSearch and WebFetch tools directly — there is NO Python script that does the searching for you in Cursor-native mode.
For backend=cursor, the minimum opened-paper requirement must be verified explicitly from local artifacts before data/lit_inputs/<ground_id>/lit_initial.md is written.
A literature item counts toward the required opened count only if all of the following are true:
is_research_literature == trueopened == trueopen_status == "success"opened_source_path is present in search_results.jsonopened_source_path actually exists on disk under data/lit_inputs/<ground_id>/opened_sources/The following do not count as opened papers for the minimum-$MIN_OPENED_PAPERS rule:
opened=falseopen_status is not successopened_source_pathopened_source_path is recorded but the file does not actually exist on diskFor backend=cursor, data/lit_inputs/<ground_id>/lit_initial.md must not be written until the explicitly verified opened count is at least $MIN_OPENED_PAPERS.
For each successfully opened and readable literature item in the Cursor-native backend, save one markdown file under:
data/lit_inputs/<ground_id>/opened_sources/Each saved opened-source file should include, when available:
The corresponding item in search_results.json should record, when available:
titleurlopenedopen_statusopened_source_pathis_research_literatureAfter search_results.json and opened_sources/ are populated, run:
python .cursor/skills/grounded-research-lit/scripts/prepare_opened_paper_notes.py \
--search-results data/lit_inputs/<ground_id>/search_results.json \
--output data/lit_inputs/<ground_id>/opened_paper_notes.jsonl \
--notes-dir data/lit_inputs/<ground_id>/opened_paper_notesIf DOWNLOAD_OPENED_LITERATURE=true, then run:
python .cursor/skills/grounded-research-lit/scripts/download_opened_literature.py \
--search-results data/lit_inputs/<ground_id>/search_results.json \
--output-dir data/lit_downloads/<ground_id> \
--ground-id <ground_id> \
--manifest-path data/lit_downloads/<ground_id>/manifest.json \
--wait \
--wait-timeout-sec 1800⚠️
--ground-idis required.--manifest-pathis optional (defaults to{output-dir}/manifest.json) but must be provided when also using--waitso that the wait loop checks the correct file.--waitmakes the script poll for a terminal-valid manifest state:status=completedORstatus=no_eligible_itemswithdownloaded_count>0. A manifest withstatus=no_eligible_itemsanddownloaded_count=0means the download failed before producing results (e.g._iter_itemsreturned 0 items) — the script will keep polling and timeout rather than treat the broken state as terminal.
After the download stage reaches a terminal manifest state, run:
python .cursor/skills/grounded-research-lit/scripts/refine_notes_from_downloaded_pdfs.py \
--search-results data/lit_inputs/<ground_id>/search_results.json \
--notes-path data/lit_inputs/<ground_id>/opened_paper_notes.jsonl \
--notes-dir data/lit_inputs/<ground_id>/opened_paper_notes \
--manifest-path data/lit_downloads/<ground_id>/manifest.json \
--wait \
--wait-timeout-sec 1800⚠️ Argument names differ from the old
--notes-jsonl / --downloads-dir / --output-jsonlnames. Use--notes-path,--notes-dir,--manifest-pathexactly as shown.--waitmakes refine poll the manifest until it reaches a terminal-valid state before reading it, avoiding the case where refine runs before download has finished. The poll loop also correctly ignoresno_eligible_itemsmanifests withdownloaded_count=0— it keeps waiting for the next download attempt.
Failure to produce these artifacts means the Cursor-native research stage is incomplete.
lit.md must be paper-note-drivenNeither data/lit_inputs/<ground_id>/lit_initial.md nor lit.md may be driven mainly by snippets.
They must use, in order of priority:
opened_paper_notes.jsonlopened_paper_notes/opened_sources/After PDF refinement, the final lit.md should prefer:
data/lit_inputs/<ground_id>/lit_initial.md structure# Literature Research Results (Initial)
## Research Focus
## Overall Literature Synthesis
## Detailed Analysis of Opened Papers
## Snippet-Level / Not-Fully-Opened Candidates
## Initial Takeaways for the Current Grounded Topiclit.md structure# Literature Research Results
## Research Focus
## Overall Literature Synthesis
## Detailed Analysis of Opened Papers
## Newly Strengthened / Newly Added Papers from Downloaded PDFs
## Snippet-Level / Not-Fully-Opened Candidates
## Takeaways for the Current Grounded TopicIf no downloaded PDFs were successfully refined, the final lit.md may omit the dedicated “Newly Strengthened / Newly Added Papers from Downloaded PDFs” heading, but it must still reflect the completed refinement pass.
For each opened paper, do not stop at a short abstract-like summary. Core papers should be written as compact literature mini-reviews, not QA-style checklists.
For the main opened-paper body, prefer:
For core papers, methodology is not optional background. It should be one of the main bodies of the analysis. Do not reduce the method section to a one-sentence idea summary. When the source is rich enough, explain the main pipeline/stages, key modules, training signal or loss, inference flow, and why the design should help.
At minimum, the opened-paper analysis should, when the source is rich enough, include:
Avoid generic claims such as strong, effective, promising, important, significant, or useful unless they are immediately grounded in setup details, method details, quantitative evidence, or explicit comparisons.
If the source does not expose enough information to support these fields, say so explicitly instead of fabricating details.
Neither data/lit_inputs/<ground_id>/lit_initial.md nor the final lit.md may collapse into a thin recap.
Every major section must be substantial, topic-aware, and evidence-backed.
## Research FocusThis section must clearly state:
Do not leave this as one vague sentence.
## Overall Literature SynthesisThis section must be a real synthesis, not a list of disconnected paper names. It should explain:
Prefer multiple substantial paragraphs over a few bullets when enough material exists.
## Detailed Analysis of Opened PapersThis is the core body of the literature report and must be the longest section when enough opened material exists. Do not compress it into brief abstract-like summaries. For each core opened paper, provide a deep standalone formal paper analysis grounded in the actual opened or refined evidence. Do not rely on generic filler prose or reuse the same abstract template across many papers. Each subsection should reflect the paper's actual task setting, method design, evidence pattern, and limits.
## Newly Strengthened / Newly Added Papers from Downloaded PDFsWhen downloaded PDFs added real value, explain exactly what became clearer after PDF access, such as:
Do not make this section a placeholder heading with one generic sentence.
This section must also provide explicit coverage for successfully downloaded and parsable PDFs that are not already fully covered in ## Detailed Analysis of Opened Papers.
Each such paper must appear as its own standalone subsection. Do not merge multiple downloaded papers into one mixed paragraph, one grouped bullet list, or one shallow recap block.
For each such paper, write a medium-to-deep formal paper analysis that includes:
Coverage is mandatory, but coverage must not be satisfied with generic placeholder language such as "the paper addresses...", "methods exist for...", or "the work improves..." unless concrete extracted details immediately follow. The goal is not a short note. The goal is a real standalone paper analysis, even when it is somewhat shorter than the analysis for the most central papers.
## Snippet-Level / Not-Fully-Opened CandidatesThis section should stay clearly separated from the opened-paper body. Still, it must be useful: explain why each candidate matters, what can and cannot be inferred from the snippet alone, and what uncertainty remains.
## Initial Takeaways for the Current Grounded Topic / ## Takeaways for the Current Grounded TopicThese takeaways must connect the literature back to the grounded topic in a concrete way. They should state:
Do not end with generic statements such as “more work is needed” without specifying what kind of work and why.
The refinement pass should:
data/lit_inputs/<ground_id>/lit_initial.md when their PDFs were downloaded successfullyDo not discard usable opened-page analyses just because some PDFs were unavailable. The refinement stage is additive and corrective, not destructive.
After PDF extraction completes, you must enumerate every paper in data/lit_downloads/<ground_id>/manifest.json with downloaded=true. For each successfully downloaded and parsable PDF, the final lit.md must contain an explicit corresponding analysis entry, either by:
## Detailed Analysis of Opened Papers, or## Newly Strengthened / Newly Added Papers from Downloaded PDFsA downloaded PDF may be excluded from explicit final-report coverage only when the PDF text could not be parsed into usable content. In that case, the failure should be reported explicitly rather than silently dropping the paper.
Do not satisfy this coverage rule with short memo-style notes, grouped summaries, or shallow filler prose. Every covered downloaded PDF should read like a real paper analysis with concrete task, method, evidence, relevance, and limits.
When available, use data/lit_inputs/<ground_id>/refine_coverage.json from refine_notes_from_downloaded_pdfs.py as the checklist of downloaded papers that still require explicit final lit.md coverage.
Candidates that were not fully opened must be placed under:
## Snippet-Level / Not-Fully-Opened CandidatesDo not mix snippet-only candidates into the main opened-paper analysis section.
DOWNLOAD_OPENED_LITERATURE=true, prefer background/auxiliary download rather than blocking the first-pass writing pathlit.mddata/lit_inputs/<ground_id>/lit_initial.md, you must search, open, and read at least MIN_OPENED_PAPERS unique relevant literature itemsat least $MIN_OPENED_PAPERS opened items is a hard requirement, not a best-effort suggestion$MIN_OPENED_PAPERS unique relevant literature items have been opened, the Cursor-native research stage is not complete and must continue searching / opening more itemsopened_sources/ and record the corresponding metadata/path in search_results.jsonprepare_opened_paper_notes.py so the writing stage uses structured paper notes rather than snippets aloneDOWNLOAD_OPENED_LITERATURE=true, run download_opened_literature.py after the opened-source artifacts and initial note artifacts existDOWNLOAD_OPENED_LITERATURE=true, the Cursor-native backend must successfully download at least MIN_OPENED_PAPERS unique relevant literature items before the run can be treated as complete, unless it explicitly reports why this target could not be reached after continued search/open/download attemptslit.md until the refinement pass is completeA run is not complete unless all of the following are true:
queries.json existssearch_results.json existsopened_sources/ exists and contains saved opened-source files when readable pages were openedopened_paper_notes.jsonl exists when readable pages were openedopened_paper_notes/ exists and contains generated per-paper note files when readable pages were openedMIN_OPENED_PAPERS unique relevant literature items were actually searched/opened/read before data/lit_inputs/<ground_id>/lit_initial.md was writtenprepare_opened_paper_notes.py actually ran after opened-source preservationdata/lit_inputs/<ground_id>/lit_initial.md was written$MIN_OPENED_PAPERS before data/lit_inputs/<ground_id>/lit_initial.md was writtenlit_initial.md; if the minimum was not met after supplement, the agent completed all escalation steps in section d before any fallback was taken, and the fallback decision is documented in the run report with explicit justificationdata/lit_inputs/<ground_id>/lit_initial.md existslit_initial.md was writtenDOWNLOAD_OPENED_LITERATURE=true, manifest.json exists and is in a terminal state (completed or no_eligible_items)cursor and DOWNLOAD_OPENED_LITERATURE=true, at least MIN_OPENED_PAPERS unique relevant literature items were successfully downloaded, or the run explicitly reports why this target could not be reached after continued search/open/download attemptsDOWNLOAD_OPENED_LITERATURE=true, every successfully downloaded and parsable PDF from manifest.json has a corresponding explicit strengthened or newly added analysis entry in final lit.mdlit.md existslit.md contains:## Newly Strengthened / Newly Added Papers from Downloaded PDFs section that covers all successfully downloaded and parsable PDFs not already fully covered in the opened-paper sectionAt the end of a run, report concisely but concretely:
cursor with downloads enabled, whether the successful-download target of MIN_OPENED_PAPERS was satisfied; if not, explain why notcursor, how many recent papers were found (within the last 2 years), whether supplement and escalation searches were triggered, whether the MIN_RECENT_PAPERS target was reached; if not, which escalation steps from section d were attempted, how many results each yielded, and whether a fallback was taken with explicit documented justification© gaotiexinqu, 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 4 other files (scripts) in .cursor/skills/grounded-research-lit of gaotiexinqu/OneResearchClaw.
Open the folder on GitHubat commit 37e86c6
Grounded Research Lit 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 |
|---|---|---|---|---|---|---|
| Grounded Research Lit this skillgaotiexinqu/OneResearchClaw | 450 | — | ~11k | Automated safety check: Pass | MIT | |
| Markdown Article FormatterJimLiu/baoyu-skills | 27k | 6 repos | ~3.5k | Automated safety check: Pass | MIT | |
| MarkitdownImCa0/just-laws | 781 | 14 repos | ~3.2k | Automated safety check: Notes | MIT | |
| Obsidian MarkdownAtmosphere/atmosphere | 3.8k | 20 repos | ~1.3k | Automated safety check: Pass | Apache-2.0 | |
| DOCXrvdbreemen/OTGW-firmware | 207 | 33 repos | ~4.3k | Automated safety check: Pass | Proprietary | |
| Word Document Reader and WriterHKUDS/DeepTutor | 41k | — | ~2.5k | Automated safety check: Pass | Apache-2.0 |
JimLiu/baoyu-skills
Reformats plain text or Markdown articles with frontmatter, a title, a summary, headings, bold, lists and code blocks, and saves a separate formatted copy.
ImCa0/just-laws
Convert files and office documents to Markdown. An agent skill from ImCa0/just-laws.
Atmosphere/atmosphere
Create and edit Obsidian Flavored Markdown with wikilinks, embeds, callouts, properties, and other Obsidian-specific syntax.
rvdbreemen/OTGW-firmware
A skill your agent uses whenever the user wants to create, read, edit, or manipulate Word documents (.docx files).
HKUDS/DeepTutor
Reads, creates and edits Word .docx files with python-docx, and drops to raw OOXML for tracked changes, comments and byte-exact edits.
wasp-lang/wasp
Crosspost Wasp blog articles (MDX) to DEV.to and Medium. An agent skill from wasp-lang/wasp.
gaotiexinqu/OneResearchClaw
Download remote content (arxiv papers, YouTube videos, Bilibili videos) to local storage and route to downstream grounding pipeline.
gaotiexinqu/OneResearchClaw
Unpack a ZIP archive, inventory its files, run the corresponding child grounding skill for each supported child file, and then write a real archive-level grounded.md.
gaotiexinqu/OneResearchClaw
Convert a raw document into a structured grounding note for downstream research and summarization.
gaotiexinqu/OneResearchClaw
Convert a meeting audio file into a transcript bundle, then use meeting-grounding to produce structured meeting grounding outputs.
gaotiexinqu/OneResearchClaw
Convert a meeting video into an audio-first transcript bundle, then use meeting-grounding to produce structured meeting grounding outputs.
gaotiexinqu/OneResearchClaw
Extract a structured evidence bundle from a .pptx deck, then write a real grounded.md from the bundle.
Categories
Run focused literature and web research from a grounded note. Grounded Research Lit is an agent skill from gaotiexinqu/OneResearchClaw. Run focused literature and web research from a grounded note.
Grounded Research Lit fits situations like: A grounded note already exists and you want targeted research results; opened-link evidence; deeper per-paper analysis materials; optional downloaded literature.
Run `npx skills add gaotiexinqu/OneResearchClaw --skill grounded-research-lit -a claude-code`. Or copy the skill folder (.cursor/skills/grounded-research-lit in gaotiexinqu/OneResearchClaw) into .claude/skills/grounded-research-lit in your project. Claude Code loads it when a task matches its description.
Run `npx skills add gaotiexinqu/OneResearchClaw --skill grounded-research-lit -a codex`. Or copy the skill folder (.cursor/skills/grounded-research-lit in gaotiexinqu/OneResearchClaw) into .agents/skills/grounded-research-lit 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 gaotiexinqu/OneResearchClaw --skill grounded-research-lit -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/grounded-research-lit, .gemini/skills/grounded-research-lit, .github/skills/grounded-research-lit and .opencode/skills/grounded-research-lit in your project.
Going by SKILL.md and its folder, Grounded Research Lit needs Python for the scripts in its folder, the command-line tools its instructions call (python) and credentials named BIGMODEL_SEARCH_API_KEY. Our summary lists: Python 3; A credential in BIGMODEL_SEARCH_API_KEY.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.
Grounded Research Lit is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 11k tokens (SKILL.md is roughly 45k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Grounded Research Lit: Markdown Article Formatter (JimLiu/baoyu-skills, 27k stars), Markitdown (ImCa0/just-laws, 781 stars), Obsidian Markdown (Atmosphere/atmosphere, 3.8k stars) and DOCX (rvdbreemen/OTGW-firmware, 207 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
gaotiexinqu (a GitHub user) maintains it in gaotiexinqu/OneResearchClaw, which has 450 GitHub stars. The repository holds 15 skills in this directory. The repository was last updated on May 9, 2026.
Source: gaotiexinqu/OneResearchClaw on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.