원클릭으로
wiki-ingest
Ingest new academic papers, notes, or web articles into the raw/ folder of your active topic wiki.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
Ingest new academic papers, notes, or web articles into the raw/ folder of your active topic wiki.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
Compile raw sources into detailed, Obsidian-compatible, interlinked Markdown pages under wiki/ references/ and concepts/.
Deduplicates concepts, splits overly broad concepts, and synthesizes multi-source concept definitions by dynamically searching and analyzing all papers that reference them.
Ingest new academic papers or PDFs into the raw/ folder of your active topic wiki using the local OCR model configured in config.yaml.
Initialize a new topic workspace folder with standard raw/, wiki/, inbox/, and output/ directories.
Statically check and repair double-bracket linkages and frontmatter within your compiled wiki directory.
Automatically builds semantic links between concept markdown files by calculating vector similarity using a local Ollama embedding model.
| name | wiki_ingest |
| description | Ingest new academic papers, notes, or web articles into the raw/ folder of your active topic wiki. |
| commands | {"ingest":"Ingest new papers or sources (from inbox/ or a specific path) into the raw/ directory."} |
Resolving script paths (read first): Commands below invoke scripts as
<BIN>/X.py(and a few as<SKILLS>/...). Resolve these to absolute paths once before running anything:
<SKILL_DIR>= the directory thisSKILL.mdlives in.<SKILLS>= theskills/folder containing this skill =<SKILL_DIR>/..<BIN>= thebin/folder beside it =<SKILL_DIR>/../../binDo not hardcode a fixed prefix like
.agents/binor../bin: shell relative paths resolve against the current working directory (usually the topic root), not this skill's location. Once resolved,<BIN>is typically.agents/binwhen invoked from the hub root, or.claude/binfrom inside a topic directory.
This skill handles converting external material (URLs, PDFs, local text files, and items inside inbox/) into raw sources.
Tooling (framework-agnostic): This skill is written tool-agnostic. Map each capability to your own agent's tool — read-file (
Readin Claude Code,view_filein Antigravity), sub-agent / parallel task (Task/Agentin Claude Code,invoke_subagentin Antigravity), shell (Bash/PowerShell). Use the closest equivalent your framework provides; if a parallel sub-agent tool is unavailable, transcribe PDF pages sequentially yourself (still verifying the full page count).
When the user asks to ingest documents (or runs the command without a path):
Resolve Ingestion Targets:
inbox/ directory.inbox/ contains multiple files, you MUST loop through all of them and process them one by one in a batch.inbox/ is empty, only then prompt the user to specify a file or source URL.Identify Source Type: For each target file, academic papers go to raw/papers/, web pages to raw/articles/, manually typed notes to raw/notes/.
File Type Handling & Conversion:
.pdf files:
ocr.use_mineru is true and ocr.mineru_api_token is set in config.yaml. If so, use:
python <BIN>/mineru_cloud_worker.py "<PDF_PATH>" -o "<TOPIC_DIR>\\raw\\<type>"
Note: This script automatically generates YAML frontmatter, writes the file, and extracts referenced figures into images/ prefixed with the doc slug. Skip Step 4.pymupdf or PyPDF2). After all subagents return, verify that the number of returned transcriptions equals the total page count. If any pages are missing, re-invoke subagents for the missing pages. Do NOT proceed with assembly until all pages are accounted for.pymupdf or PyPDF2) purely to get the total page count before batching.python <BIN>/assemble_transcriptions.py --transcription-dir <PAGES_DIR> --output-file <FILE_PATH> --title <TITLE> --date <DATE>wiki_ingest_ocr skill instead. Do not mix native multimodal with local Python OCR scripts inside this skill..md files or general inbox files, call the ingest helper script:
python <BIN>/ingest_helper.py --source-file \"<MD_FILE>\" --type \"<TYPE>\" --topic-dir \"<TOPIC_DIR>\" [--date \"<DATE>\"]
This script handles parsing/injecting standard YAML frontmatter, slugifying, and moving/copying the file..tex files (and arXiv .tar.gz source bundles): You MUST use the Pandoc conversion script. Run:
python <BIN>/tex2md.py "<TEX_OR_TARGZ_PATH>" -o "<TOPIC_DIR>\raw\<type>"
Note: This script automatically generates YAML frontmatter, writes the file, and extracts referenced figures into images/ (rasterising .pdf/.eps figures to PNG, prefixed with the doc slug). Skip Step 4. Check the printed Figures: N embedded, M unresolved line.Assign Slug & YAML: Write to raw/<type>/YYYY-MM-DD-slug.md with standard frontmatter:
---
title: "Original Title"
source: "Original URL or path"
type: articles|papers|repos|notes
ingested: YYYY-MM-DD
tags: [tag1, tag2]
summary: "2-3 sentence overview of the source"
---
Frontmatter Validation (MANDATORY): After writing, run python <BIN>/llm-wiki.py lint <TOPIC_DIR> and check if the new file has any frontmatter-related critical or warning issues. Fix them before proceeding.
Post-Processing Pipeline: Extract the exact path of the generated Markdown file from the conversion script's output. Then, trigger the pipeline to handle moving and formatting (skipping global lint for now):
python <BIN>/ingest_pipeline.py "<ORIGINAL_FILE_PATH>" --topic-dir "<TOPIC_DIR>" --md-file "<GENERATED_MD_FILE>" --skip-lint --log-msg "Ingested <DOC_TITLE>"
Manual Math Error Correction (Agentic Fallback):
ingest_pipeline.py outputs any warnings like [WARNING] Math syntax errors in <FILE>:, you MUST immediately stop and fix them.Double subscript or Unexpected end of stream.python <BIN>/pdf_math_crop.py "<PDF_PATH>" --text "<search_text_near_error>" --out "<TOPIC_DIR>\scratch\crop.png"crop.png, then manually edit the Markdown file to correct the semantic math errors based on the ground truth in the original paper, and re-run python <BIN>/validate_math_latex.py <FILE> to confirm all errors are gone.Global Lint & Index (End of Batch):
inbox/ have been processed through steps 1-6, you MUST run the global lint and index operation ONCE outside the loop:python <BIN>/ingest_pipeline.py "none" --topic-dir "<TOPIC_DIR>" --lint-only