Agent skill

wiki-ingest

Ingest sources into the Obsidian wiki vault. Reads a source, extracts entities and concepts, creates or updates wiki pages, cross-references, and logs the operation. Supports files, URLs, and batch mode. Triggers on: ingest, process this source, add this to the wiki, read and file this, batch ingest, ingest all of these, ingest this url.

Stars 573
Forks 58

Install this agent skill to your Project

npx add-skill https://github.com/AgriciDaniel/claude-obsidian/tree/main/skills/wiki-ingest

SKILL.md

wiki-ingest: Source Ingestion

Read the source. Write the wiki. Cross-reference everything. A single source typically touches 8-15 wiki pages.

Syntax standard: Write all Obsidian Markdown using proper Obsidian Flavored Markdown. Wikilinks as [[Note Name]], callouts as > [!type] Title, embeds as ![[file]], properties as YAML frontmatter. If the kepano/obsidian-skills plugin is installed, prefer its canonical obsidian-markdown skill for Obsidian syntax reference. Otherwise, follow the guidance in this skill.


Delta Tracking

Before ingesting any file, check .raw/.manifest.json to avoid re-processing unchanged sources.

bash
# Check if manifest exists
[ -f .raw/.manifest.json ] && echo "exists" || echo "no manifest yet"

Manifest format (create if missing):

json
{
  "sources": {
    ".raw/articles/article-slug-2026-04-08.md": {
      "hash": "abc123",
      "ingested_at": "2026-04-08",
      "pages_created": ["wiki/sources/article-slug.md", "wiki/entities/Person.md"],
      "pages_updated": ["wiki/index.md"]
    }
  }
}

Before ingesting a file:

  1. Compute a hash: md5sum [file] | cut -d' ' -f1 (or sha256sum on Linux).
  2. Check if the path exists in .manifest.json with the same hash.
  3. If hash matches, skip. Report: "Already ingested (unchanged). Use force to re-ingest."
  4. If missing or hash differs, proceed with ingest.

After ingesting a file:

  1. Record {hash, ingested_at, pages_created, pages_updated} in .manifest.json.
  2. Write the updated manifest back.

Skip delta checking if the user says "force ingest" or "re-ingest".


URL Ingestion

Trigger: user passes a URL starting with https://.

Steps:

  1. Fetch the page using WebFetch.
  2. Clean (optional): if defuddle is available (which defuddle 2>/dev/null), run defuddle [url] to strip ads, nav, and clutter. Typically saves 40-60% tokens. Fall back to raw WebFetch output if not installed.
  3. Derive slug from the URL path (last segment, lowercased, spaces→hyphens, strip query strings).
  4. Save to .raw/articles/[slug]-[YYYY-MM-DD].md with a frontmatter header:
    markdown
    ---
    source_url: [url]
    fetched: [YYYY-MM-DD]
    ---
    
  5. Proceed with Single Source Ingest starting at step 2 (file is now in .raw/).

Image / Vision Ingestion

Trigger: user passes an image file path (.png, .jpg, .jpeg, .gif, .webp, .svg, .avif).

Steps:

  1. Read the image file using the Read tool. Claude can process images natively.
  2. Describe the image contents: extract all text (OCR), identify key concepts, entities, diagrams, and data visible in the image.
  3. Save the description to .raw/images/[slug]-[YYYY-MM-DD].md:
    markdown
    ---
    source_type: image
    original_file: [original path]
    fetched: YYYY-MM-DD
    ---
    # Image: [slug]
    
    [Full description of image contents, transcribed text, entities visible, etc.]
    
  4. Copy the image to _attachments/images/[slug].[ext] if it's not already in the vault.
  5. Proceed with Single Source Ingest on the saved description file.

Use cases: whiteboard photos, screenshots, diagrams, infographics, document scans.


Single Source Ingest

Trigger: user drops a file into .raw/ or pastes content.

Steps:

  1. Read the source completely. Do not skim.
  2. Discuss key takeaways with the user. Ask: "What should I emphasize? How granular?" Skip this if the user says "just ingest it."
  3. Create source summary in wiki/sources/. Use the source frontmatter schema from references/frontmatter.md.
  4. Create or update entity pages for every person, org, product, and repo mentioned. One page per entity.
  5. Create or update concept pages for significant ideas and frameworks.
  6. Update relevant domain page(s) and their _index.md sub-indexes.
  7. Update wiki/overview.md if the big picture changed.
  8. Update wiki/index.md. Add entries for all new pages.
  9. Update wiki/hot.md with this ingest's context.
  10. Append to wiki/log.md (new entries at the TOP):
    markdown
    ## [YYYY-MM-DD] ingest | Source Title
    - Source: `.raw/articles/filename.md`
    - Summary: [[Source Title]]
    - Pages created: [[Page 1]], [[Page 2]]
    - Pages updated: [[Page 3]], [[Page 4]]
    - Key insight: One sentence on what is new.
    
  11. Check for contradictions. If new info conflicts with existing pages, add > [!contradiction] callouts on both pages.

Batch Ingest

Trigger: user drops multiple files or says "ingest all of these."

Steps:

  1. List all files to process. Confirm with user before starting.
  2. Process each source following the single ingest flow. Defer cross-referencing between sources until step 3.
  3. After all sources: do a cross-reference pass. Look for connections between the newly ingested sources.
  4. Update index, hot cache, and log once at the end (not per-source).
  5. Report: "Processed N sources. Created X pages, updated Y pages. Here are the key connections I found."

Batch ingest is less interactive. For 30+ sources, expect significant processing time. Check in with the user after every 10 sources.


Context Window Discipline

Token budget matters. Follow these rules during ingest:

  • Read wiki/hot.md first. If it contains the relevant context, don't re-read full pages.
  • Read wiki/index.md to find existing pages before creating new ones.
  • Read only 3-5 existing pages per ingest. If you need 10+, you are reading too broadly.
  • Use PATCH for surgical edits. Never re-read an entire file just to update one field.
  • Keep wiki pages short. 100-300 lines max. If a page grows beyond 300 lines, split it.
  • Use search (/search/simple/) to find specific content without reading full pages.

Contradictions

[!note] Custom callout dependency The [!contradiction] callout type used below is a custom callout defined in .obsidian/snippets/vault-colors.css (auto-installed by /wiki scaffold). It renders with reddish-brown styling and an alert-triangle icon when the snippet is enabled. If the snippet is missing, Obsidian falls back to default callout styling, so the page still works without the visual flourish. See [[skills/wiki/references/css-snippets.md]] for the four custom callouts (contradiction, gap, key-insight, stale).

When new info contradicts an existing wiki page:

On the existing page, add:

markdown
> [!contradiction] Conflict with [[New Source]]
> [[Existing Page]] claims X. [[New Source]] says Y.
> Needs resolution. Check dates, context, and primary sources.

On the new source summary, reference it:

markdown
> [!contradiction] Contradicts [[Existing Page]]
> This source says Y, but existing wiki says X. See [[Existing Page]] for details.

Do not silently overwrite old claims. Flag and let the user decide.


What Not to Do

  • Do not modify anything in .raw/. These are immutable source documents.
  • Do not create duplicate pages. Always check the index and search before creating.
  • Do not skip the log entry. Every ingest must be recorded.
  • Do not skip the hot cache update. It is what keeps future sessions fast.

Expand your agent's capabilities with these related and highly-rated skills.

AgriciDaniel/claude-obsidian

defuddle

Strip clutter from web pages before ingesting into the wiki. Removes ads, navigation, headers, footers, and boilerplate: leaving clean readable markdown that saves 40-60% tokens. Triggers on: defuddle, clean this page, strip this url, fetch and clean, clean web content before ingesting, strip ads, remove clutter, clean URL content, readable markdown from URL.

573 58
Explore
AgriciDaniel/claude-obsidian

obsidian-markdown

Write correct Obsidian Flavored Markdown: wikilinks, embeds, callouts, properties, tags, highlights, math, and canvas syntax. Reference this when creating or editing any wiki page. Triggers on: write obsidian note, obsidian syntax, wikilink, callout, embed, obsidian markdown, wikilink format, callout syntax, embed syntax, obsidian formatting, how to write obsidian markdown.

573 58
Explore
AgriciDaniel/claude-obsidian

obsidian-bases

Create and edit Obsidian Bases (.base files): Obsidian's native database layer for dynamic tables, card views, list views, filters, formulas, and summaries over vault notes. Triggers on: create a base, add a base file, obsidian bases, base view, filter notes, formula, database view, dynamic table, task tracker base, reading list base.

573 58
Explore
AgriciDaniel/claude-obsidian

canvas

Visual layer of the wiki. Add images, text cards, PDFs, and wiki pages to Obsidian canvas files with auto-positioning inside zones. Integrates with /banana for image capture. Triggers on: /canvas, canvas new, canvas add image, canvas add text, canvas add pdf, canvas add note, canvas zone, canvas list, canvas from banana, add to canvas, put this on the canvas, open canvas, create canvas.

573 58
Explore
AgriciDaniel/claude-obsidian

save

Save the current conversation, answer, or insight into the Obsidian wiki vault as a structured note. Analyzes the chat, determines the right note type, creates frontmatter, files it in the correct wiki folder, and updates index, log, and hot cache. Triggers on: "save this", "save that answer", "/save", "file this", "save to wiki", "save this session", "file this conversation", "keep this", "save this analysis", "add this to the wiki".

573 58
Explore
AgriciDaniel/claude-obsidian

autoresearch

Autonomous iterative research loop. Takes a topic, runs web searches, fetches sources, synthesizes findings, and files everything into the wiki as structured pages. Based on Karpathy's autoresearch pattern: program.md configures objectives and constraints, the loop runs until depth is reached, output goes directly into the knowledge base. Triggers on: "/autoresearch", "autoresearch", "research [topic]", "deep dive into [topic]", "investigate [topic]", "find everything about [topic]", "research and file", "go research", "build a wiki on".

573 58
Explore

Didn't find tool you were looking for?

Be as detailed as possible for better results