Skip to content
Back to skills

Wiki Scan

ASecurity

Scan a directory (or all source directories) for source files not yet ingested or changed since last ingest, then batch-ingest new and changed files. Shows a diff report and asks for confirmation before processing. Triggers on: wiki-scan, scan the wiki, scan for new files, wiki scan, batch ingest, ingest new files.

  • 2 stars
  • 0 votes
  • 0 copies
  • 2 views
  • Added August 31, 2026
ai-agentsbash

Works with

  • cli
  • mcp

Security analysis

A100/100

Scanned September 23, 2026

npx -y skills add ihudak/ihudak-claude-plugins --skill wiki-scan --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Wiki Scan?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Wiki Scan
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/ihudak-wiki-scan/badge)](https://www.skillsdirectory.com/skills/ihudak-wiki-scan)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: wiki-scan
description: >
  Scan a directory (or all source directories) for source files not yet ingested or
  changed since last ingest, then batch-ingest new and changed files. Shows a diff
  report and asks for confirmation before processing. Triggers on: wiki-scan, scan
  the wiki, scan for new files, wiki scan, batch ingest, ingest new files.
allowed-tools: Read Write Edit Glob Grep Bash
---

# wiki-scan

Read `skills/wiki-schema/SKILL.md` fully before proceeding.

Invoke with: `/wiki-scan [directory]`

If no directory argument is given, scan all Layer 1 directories plus `.raw/`.

---

## Step 1 — Resolve VAULT_PATH and target directories

Vault path: `~/obsidian_vault` by default; set `VAULT_PATH` to override. WSL users with a Windows-side vault must set `VAULT_PATH` explicitly (e.g. `/mnt/c/Users/<name>/obsidian_vault`).

Default scan targets (all Layer 1 + inbox):
```
Meetings/
Daily/
Projects/
Customers/
People/
Clippings/
Research/
.raw/
```

If a directory argument was given, scan only that directory tree.

---

## Step 2 — Read _manifest.json

Read `wiki/_manifest.json`. If it does not exist, treat all files as new.

---

## Step 3 — Enumerate files and compute hashes

For each `.md` file in the target directory tree:
```bash
find "<dir>" -name "*.md" -not -path "*/_processed/*"
```

For each file, compute hash:
```bash
md5sum "<filepath>" | cut -d' ' -f1
```

Classify each file:
- **New**: path not in manifest → needs ingest
- **Changed**: path in manifest, hash differs → needs re-ingest
- **Unchanged**: path in manifest, hash matches → skip

---

## Step 4 — Report and confirm

Show the scan summary before processing anything:

```
Wiki Scan Results — <directory or "all sources">
─────────────────────────────────────────────────
New files (N):
  - Meetings/ACME/2026-04-15 Sprint Review.md
  - .raw/articles/mcp-patterns-2026-04-20.md

Changed files (M):
  - Projects/Products/P1234 MCP server for Acme.md  (hash changed)

Unchanged files: K (skipping)

Proceed with ingesting N new + M changed files? [yes/no]
```

Wait for explicit confirmation before proceeding. If the user says no, stop.

---

## Step 5 — Ingest each new/changed file

Process files sequentially. For each file, follow the full `wiki-ingest` workflow
(Steps 2–10 of `wiki-ingest` skill — delta check, read, extract, resolve, write pages,
update index, log, manifest, hot cache).

Update `_log.md` once per file during processing (not a single batch entry at the end).

After all files are processed, append one summary entry to `_log.md`:

```markdown
## [YYYY-MM-DD] scan | <directory> — N new, M changed, K unchanged
- Directories scanned: <list>
- Total pages created: X
- Total pages updated: Y
```

---

## Step 6 — Archive processed .raw/ files

For every `.raw/` file that was successfully ingested:

1. Determine the archive destination:
   ```
   .raw/_processed/YYYY-MM/<filename>
   ```
2. Create the directory if needed:
   ```bash
   mkdir -p ".raw/_processed/$(date +%Y-%m)"
   ```
3. Move (not delete) the file:
   ```bash
   mv "<filepath>" ".raw/_processed/$(date +%Y-%m)/<filename>"
   ```

The manifest entry stays (records both original path and ingest date).
Layer 1 files are NEVER moved or deleted.

---

## Step 7 — Handle HTML files in .raw/

Before ingesting any `.html` file found in `.raw/`, check for defuddle:
```bash
npx defuddle --version 2>/dev/null && echo "available" || echo "not available"
```

If available: convert to markdown first:
```bash
npx defuddle parse "<filepath>" --md -o "<filepath>.md"
```
Then ingest the `.md` output. Include the original `.html` in the archive move.

If not available: ingest the `.html` directly (Claude can parse HTML natively).

---

## Finish

Report:
```
Scan complete — <directory>
New files ingested:     N
Changed files re-ingested: M
Unchanged files skipped:   K
.raw/ files archived:   P
Wiki pages created:     X
Wiki pages updated:     Y
```

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.