Fill in the per-paper TODO sections of research-wiki/papers/<slug>.md pages that literature-ingest skills leave as bare scaffolds. Use when user says 'enrich wiki', 'fill paper TODOs', 'wiki body 補完', '把 paper 摘要寫進 wiki', 'research-wiki 自動填', or after a batch ingest that left papers/ as TODO scaffolds.
npx skills add https://github.com/wanshuiyin/Auto-claude-code-research-in-sleep --skill wiki-enrich
Target: $ARGUMENTS
ingest_paper (called by /research-lit, /arxiv, /alphaxiv, /deepxiv, /semantic-scholar, /exa-search) only renders the per-paper scaffold — frontmatter + abstract + 10 fillable _TODO._ placeholder sections (plus two protected sections: ## Connections is graph-summary and ## Abstract (original) is auto-populated when --arxiv-id is given). No downstream skill in ARIS fills those 10 sections; the wiki sits as TODO until someone reads each paper.
This contradicts the Karpathy LLM-wiki design (https://gist.github.com/karpathy/442a6bf555914893e9891c11519de94f):
> "You never (or rarely) write the wiki yourself — the LLM writes and maintains all of it. … The tedious part of maintaining a knowledge base is not the reading or the thinking — it's the bookkeeping. … LLMs don't get bored, don't forget to update a cross-reference, and can touch 15 files in one pass."
/wiki-enrich is the missing back half of ingest_paper: it reads each scaffolded paper page, fetches paper content from external sources via a graceful fallback chain (see Phase 2.3 for the full 5-source chain), and rewrites the 10 fillable TODO sections into 1-3 sentence prose summaries.
research-wiki/ — Resolved relative to git root. Skill hard-fails if not a directory.missing — When no target is given, enrich only papers with ≥1 TODO section. Other targets: <slug> (one paper) or all (every paper, even ones already enriched — usually combined with --force to overwrite).auto — Fetch order: alphaxiv overview → alphaxiv abs → deepxiv brief → arXiv API abstract → page abstract fallback. First non-empty wins (full chain documented in Phase 2.3 table). Override with --source to pin one source.--max N.false (default), skip sections that already have non-TODO content. When true, overwrite every fillable section, but never touch the two protected sections: ## Connections (auto-generated from edges.jsonl) and ## Abstract (original) (immutable arXiv-fetched source data).ingest_paper (research_wiki.py:436-473) scaffolds 11 section headers unconditionally and a 12th — ## Abstract (original) — only when arXiv returns an abstract for the given --arxiv-id (research_wiki.py:469-473). Of these, 10 carry a _TODO._ (or _TODO: fill in after reading._) marker and need filling. The other 2 — ## Connections (position 10 in the enumeration below) and ## Abstract (original) (position 12, conditional) — are protected by construction: Connections is auto-generated from graph/edges.jsonl, Abstract (original) is immutable source data from the arXiv API. This skill writes to the 10, never the 2.One-line thesis (marker: _TODO: fill in after reading._)Problem / Gap (marker: _TODO._)Method (marker: _TODO._)Key Results (marker: _TODO._)Assumptions (marker: _TODO._)Limitations / Failure Modes (marker: _TODO._)Reusable Ingredients (marker: _TODO._)Open Questions (marker: _TODO._)Claims (marker: _TODO._) — fill with _No claims tracked yet._ if no claim: edges point to this paper; otherwise list them.10. Connections — NEVER edit (auto-generated from graph/edges.jsonl).
11. Relevance to This Project (marker: _TODO._) — use RESEARCH_BRIEF.md, CLAUDE.md, or gap_map.md for project context. If no project context exists, leave as TODO and report it.
12. Abstract (original) — leave alone (already populated by ingest_paper when --arxiv-id was used).
> 💡 Examples:
> - /wiki-enrich — enrich every paper with ≥1 TODO section (most common usage)
> - /wiki-enrich vllm — enrich a single paper by slug
> - /wiki-enrich all --force — rewrite every paper from scratch (use when you've adopted a new style)
> - /wiki-enrich --source alphaxiv --max 5 — only use alphaxiv, only do 5 papers
> - /wiki-enrich missing --max 50 — bigger batch (watch token budget)
Resolve $WIKI_ROOT and $WIKI_SCRIPT (canonical chain — see shared-references/wiki-helper-resolution.md):
cd "$(git rev-parse --show-toplevel 2>/dev/null || pwd)" || exit 1
[ -d research-wiki/ ] || { echo "ERROR: research-wiki/ not found. Run /research-wiki init first." >&2; exit 1; }
ARIS_REPO="${ARIS_REPO:-$(awk -F'\t' '$1=="repo_root"{print $2; exit}' .aris/installed-skills.txt 2>/dev/null)}"
if [ -z "${ARIS_REPO:-}" ] && [ -f "$HOME/.aris/repo" ]; then
ARIS_REPO=$(cat "$HOME/.aris/repo" 2>/dev/null) || true
fi
WIKI_SCRIPT=".aris/tools/research_wiki.py"
[ -f "$WIKI_SCRIPT" ] || WIKI_SCRIPT="tools/research_wiki.py"
[ -f "$WIKI_SCRIPT" ] || { [ -n "${ARIS_REPO:-}" ] && WIKI_SCRIPT="$ARIS_REPO/tools/research_wiki.py"; }
[ -f "$WIKI_SCRIPT" ] || { echo "ERROR: research_wiki.py not found." >&2; exit 1; }
If either fails, hard-fail — this skill manipulates wiki state and must not run blind.
Parse $ARGUMENTS for the first positional (target) and flags (--source, --force, --max).
Build the candidate paper list:
case "$TARGET" in
all)
PAPERS=( research-wiki/papers/*.md )
;;
missing|"")
# only papers with at least one TODO marker line
PAPERS=( $(grep -lE "^_TODO(\._?|: fill in after reading\._?)$" research-wiki/papers/*.md 2>/dev/null) )
;;
*)
P="research-wiki/papers/${TARGET}.md"
[ -f "$P" ] || { echo "ERROR: paper not found: $P" >&2; exit 1; }
PAPERS=( "$P" )
;;
esac
echo "Candidate papers: ${#PAPERS[@]} (cap ${MAX_PAPERS})"
PAPERS=( "${PAPERS[@]:0:${MAX_PAPERS}}" )
If the candidate list is empty, print "✓ Nothing to enrich." and exit 0. Do not error.
Iterate one paper at a time. For each $PAPER in $PAPERS:
Step 2.1 — Read the page and project context. Use the Read tool on the full paper file. Extract from the YAML frontmatter:
node_id (e.g. paper:vllm) — slug = part after paper:arxiv from external_ids.arxiv — empty string if absenttitle## Abstract (original) blockquote (if present) — fallback content sourceAdditionally, on the FIRST paper of the batch (cache for the rest), read project-context files needed for the Claims and Relevance to This Project sections:
research-wiki/graph/edges.jsonl — scan for claim: edges pointing to the current paper's node_idRESEARCH_BRIEF.md (project root) — if present, source for project goalsCLAUDE.md (project root) — if present, fallback for project contextresearch-wiki/gap_map.md — if non-empty, source for gap framingIf none of the project-context files exist, the Relevance to This Project section will be filled with the literal "context not yet set" line (see Step 2.4 table).
Step 2.2 — Identify which sections are TODO.
Match each section header against its marker:
_TODO._ → fill_TODO: fill in after reading._ → fill (One-line thesis)--force)## Connections → always skip (auto-generated)## Abstract (original) → always skip (immutable source data)If no fillable sections remain, log "skip: <slug> (already enriched)" and continue.
Step 2.3 — Fetch source content.
The fetch chain runs in order until one returns usable content (>200 chars of text):
| Order | Source | How |
|-------|--------|-----|
| 1 | alphaxiv overview (auto default; --source alphaxiv to pin) | WebFetch https://alphaxiv.org/overview/<arxiv_id>.md — LLM-optimized summary, often best for filling sections |
| 2 | alphaxiv abs (fallback within alphaxiv) | WebFetch https://alphaxiv.org/abs/<arxiv_id>.md |
| 3 | deepxiv brief (--source deepxiv to pin) | python3 "$DEEPXIV_FETCHER" paper-brief <arxiv_id> if helper resolves |
| 4 | arXiv API abstract — fresh fetch (--source arxiv to pin) | curl http://export.arxiv.org/api/query?id_list=<arxiv_id> — log label: arxiv-api-abstract |
| 5 | Page abstract — fallback (last resort) | Reuse the existing ## Abstract (original) blockquote already present in the page body from a prior ingest_paper run — log label: page-abstract-fallback |
| — | No arxiv id + no page abstract | Skip this paper, log "skip: <slug> (no arxiv id, no abstract)", continue |
When trying alphaxiv: if WebFetch returns 404 / "Paper not found" / a redirect to the homepage, treat as miss and fall through.
When trying deepxiv: resolve $DEEPXIV_FETCHER per shared-references/integration-contract.md. If the helper or deepxiv CLI is missing, fall through silently.
Save the fetched content as $SOURCE_TEXT. Record which source succeeded for the log entry.
Step 2.4 — Generate per-section content.
You (Claude) are the LLM doing the grunt work. Given:
$SOURCE_TEXT (the fetched overview / brief / abstract)$TITLEWrite each TODO section's body following these rules:
| Section | Length | Style | What to extract |
|---------|--------|-------|-----------------|
| One-line thesis | 1 sentence, ≤25 words | Declarative | The paper's core contribution in one sentence — what they built / proved / improved |
| Problem / Gap | 1-2 sentences | Declarative | What problem the field had, why prior work fell short |
| Method | 2-4 sentences | Technical, name the technique | Core mechanism — algorithm name + key idea + how it differs from baselines |
| Key Results | 1-3 bullets OR 2-3 sentences | Quantitative | Headline numbers from the abstract / overview (X% improvement, Yx speedup, etc.). Keep units verbatim. |
| Assumptions | 1-3 bullets | Declarative | What the paper takes for granted (workload type, hardware, model class, distribution shape) |
| Limitations / Failure Modes | 1-3 bullets | Honest | What the paper explicitly admits OR what's structurally absent (e.g. "no multi-node evaluation", "assumes uniform request length") |
| Reusable Ingredients | 1-3 bullets | Concrete | Techniques / datasets / insights from this paper that could be ported elsewhere. Highest value for /idea-creator — write carefully. |
| Open Questions | 1-2 bullets | Question form | What the paper does NOT answer but raises |
| Claims | 1 line | Static | If no claim: edges in graph/edges.jsonl reference this paper, write the literal italic line: _No claims tracked yet — populate via /proof-checker._. Else list claim node IDs. |
| Relevance to This Project | 1-2 sentences | Project-contextual | Use RESEARCH_BRIEF.md / CLAUDE.md / gap_map.md to phrase the connection. If no project context, write the literal italic line: _Project context not yet set — populate RESEARCH_BRIEF.md or gap_map.md to enable this section._ and report. |
Rules (Karpathy fidelity):
_Not stated in source._ over hallucination.CLAUDE.md declares a language preference (language: zh or language: bilingual), match it. Otherwise default to English (or follow shared-references/output-language.md).Step 2.5 — Edit the file.
For each fillable section, use the Edit tool to replace the TODO marker with the generated body. Match the exact section header + marker pair to keep edits unique, e.g.:
## Problem / Gap
_TODO._
→
## Problem / Gap
<generated body>
Never touch the YAML frontmatter, ## Connections, or ## Abstract (original).
Step 2.6 — Append log entry.
python3 "$WIKI_SCRIPT" log research-wiki/ "wiki-enrich: enriched paper:<slug> from <source> (filled N/M sections)"
Record which source provided content (alphaxiv-overview, alphaxiv-abs, deepxiv-brief, arxiv-api-abstract, or page-abstract-fallback) so the audit trail is honest about provenance.
After processing all candidates, print:
✓ wiki-enrich complete
Processed: N
Enriched: X (sections filled: total)
Skipped: Y (reasons: already enriched / no arxiv id / fetch failed)
Failed: Z (with paper + reason)
Source breakdown:
alphaxiv-overview: A
alphaxiv-abs: B
deepxiv-brief: C
arxiv-api-abstract: D
page-abstract-fallback: E
Re-ideation suggestion: <if ≥5 papers were enriched, recommend `/idea-creator "topic"` so the freshly-filled `Reusable Ingredients` and `Limitations` feed brainstorming. `query_pack.md` is already rebuilt below — the user does NOT need to call `/research-wiki query` manually.>
Also rebuild query_pack.md once at the end (single python3 "$WIKI_SCRIPT" rebuild_query_pack research-wiki/ call) so /idea-creator sees the new bodies on its next run.
> Follow the shared protocols:
> - No MANIFEST.md entry. This skill edits existing scaffolded pages in place rather than generating new artifacts. The audit trail lives in research-wiki/log.md (Step 2.6), with provenance per paper. Adding a wiki-enrich stage to shared-references/output-manifest.md is out of scope for this PR.
> - Output Language Protocol — respect the project's language setting.
--force only touches still-TODO sections. Safe to invoke as a cron.## Connections, or ## Abstract (original). Frontmatter is metadata, Connections is graph-generated, Abstract is immutable source data.research-wiki/ — if it's missing, the user is in the wrong cwd or hasn't run /research-wiki init./idea-creator. This skill builds the substrate; the user decides when to brainstorm next. Only *suggest* re-ideation in the final report.WebFetch is rate-limited, fall through to next source. If all sources miss, skip the paper and continue — don't abort the whole batch._Not stated in source._ than to hallucinate. The wiki's value is that it doesn't lie./research-lit "topic" ← ingests papers as scaffolds (Step 6)
/wiki-enrich ← THIS — fills paper bodies (you are here)
/research-wiki lint ← health-check (orphans, contradictions, dead ideas)
/idea-creator "direction" ← reads query_pack, ideates on top of enriched wiki
/research-wiki query "topic" ← rebuild query_pack after big wiki changes
After a fresh /research-pipeline run leaves Stage 1 Phase 1 done but Phase 2 not started (the failure mode that prompted this skill), the recovery path is:
/wiki-enrich # fill the paper TODOs ingest_paper left behind
/idea-creator "..." # now ideate with a wiki that actually has content
Assists in writing high-quality content by conducting research, adding citations, improving hooks, iterating on outlines, and providing real-time feedback on each section. Transforms your writing process from solo effort to collaborative partnership.
Identifies high-quality leads for your product or service by analyzing your business, searching for target companies, and providing actionable contact strategies. Perfect for sales, business development, and marketing professionals.
Use this skill to query your Google NotebookLM notebooks directly from Claude Code for source-grounded, citation-backed answers from Gemini. Browser automation, library management, persistent auth. Drastically reduced hallucinations through document-only responses.
Efficient database search tool for bioRxiv preprint server. Use this skill when searching for life sciences preprints by keywords, authors, date ranges, or categories, retrieving paper metadata, downloading PDFs, or conducting literature reviews.
Query and analyze scholarly literature using the OpenAlex database. This skill should be used when searching for academic papers, analyzing research trends, finding works by authors or institutions, tracking citations, discovering open access publications, or conducting bibliometric analysis across 240M+ scholarly works. Use for literature searches, research output analysis, citation analysis, and academic database queries.
Access USPTO APIs for patent/trademark searches, examination history (PEDS), assignments, citations, office actions, TSDR, for IP analysis and prior art searches.
Multiagent AI system for scientific research assistance that automates research workflows from data analysis to publication. This skill should be used when generating research ideas from datasets, developing research methodologies, executing computational experiments, performing literature searches, or generating publication-ready papers in LaTeX format. Supports end-to-end research pipelines with customizable agent orchestration.
Automated LLM-driven hypothesis generation and testing on tabular datasets. Use when you want to systematically explore hypotheses about patterns in empirical data (e.g., deception detection, content analysis). Combines literature insights with data-driven hypothesis testing. For manual hypothesis formulation use hypothesis-generation; for creative ideation use scientific-brainstorming.
Take wanshuiyin/auto-claude-code-research-in-sleep-wiki-enrich from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.