Agent skill

Wiki Dedup

by Ar9av in Ar9av/obsidian-wiki

Detect and merge wiki pages representing the same concept under different names.

MITAuto-check: notesKnowledge Management

Install Wiki Dedup

skills CLI
$ npx skills add Ar9av/obsidian-wiki --skill wiki-dedup -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install Ar9av/obsidian-wiki wiki-dedup --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/Ar9av/obsidian-wiki.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.skills/wiki-dedup .claude/skills/wiki-dedup && rm -rf skills-src

Use ~/.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/

Facts

Skill name
wiki-dedup
GitHub stars
3.5k
Token cost
~3.8k tokens
SKILL.md length
1,678 words
Files
1
Skills in repo
39
Repo updated
First seen
Licence
MIT

At a glance

Detect and merge wiki pages representing the same concept under different names.

  • Works in 6 steps: Build the Page Registry → Detect Candidate Pairs → Semantic Verdict → …
  • Page-identity deduplication and consolidation
  • SKILL.md covers Before You Start, Modes, Step 1: Build the Page Registry and Step 2: Detect Candidate Pairs, plus 7 more sections
  • Calls git

What it does

Wiki Dedup is an agent skill from Ar9av/obsidian-wiki. Detect and merge wiki pages representing the same concept under different names. Use for page-identity deduplication and consolidation. Destructive merges require confirmation; not for link repair or general linting.

Its SKILL.md is about 3.8k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in Knowledge Management, covering LLM wikis, Data cleaning and Linting and formatting. It works with Obsidian. The repository describes itself as: Framework for AI agents to build and maintain a digital brain through Obsidian wiki | Memory System for Agents. The licence is MIT.

When your agent uses it

  • Page-identity deduplication and consolidation
  • Tasks that involve LLM wikis
  • Tasks that involve Data cleaning

Example prompts

  • “/wiki-dedup”

Workflow steps

6 steps, taken from the step headings in SKILL.md.

  1. Build the Page Registry
  2. Detect Candidate Pairs
  3. Semantic Verdict
  4. Audit Report
  5. Merge
  6. Log

What it can do on your machine

Read from SKILL.md and the folder at commit 4a0630b. It shows what the files ask for, not the result of running them.

  • Tool permissions

    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.

  • Runs code

    Shell commands in SKILL.md call:

    • git

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md. Its commands use git, which can reach the network depending on how they are called.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Wiki Dedup loads about 3.8k tokens when it runs. Until then it costs about 57 tokens; SKILL.md has 1,678 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~57
When it runs · the whole SKILL.md, loaded when a task matches
~3.8k

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.

Safety

Auto-check: notes

The automated check noted patterns worth knowing about, such as sudo or a known installer.

  • NoteMentions a .env fileSKILL.md:18
    line `@name` override → walk up CWD for `.env` → global config → prompt setup). This gives `OBSIDIAN_VAULT_PATH` and `OB

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); files beside SKILL.md are not scanned.

SKILL.md

The full file from Ar9av/obsidian-wiki at commit 4a0630b, republished under its MIT licence (© Ar9av). 1,678 words, ~3,825 tokens.

Download SKILL.mdSave it as .claude/skills/wiki-dedup/SKILL.md (or your agent's skills folder).
name
wiki-dedup
description
Detect and merge wiki pages representing the same concept under different names. Use for page-identity deduplication and consolidation. Destructive merges require confirmation; not for link repair or general linting.

Wiki Dedup — Identity Resolution and Page-Level Deduplication

You are finding and merging wiki pages that cover the same concept under different names. This is a write-heavy, potentially destructive skill — page merges cannot be automatically undone. Work carefully and confirm before acting in merge mode.

Follow the Retrieval Primitives table in llm-wiki/SKILL.md. The candidate-detection pass uses only frontmatter and titles (cheap). Only open full page bodies for confirmed candidate pairs.

Before You Start

Writing profile: Before drafting or rewriting natural-language Markdown, read and apply the Writing Profile Resolution section in llm-wiki/SKILL.md. Framework schema, provenance, safety, and operation-specific requirements take precedence. WRITING.md preferences apply only to newly drafted or rewritten natural-language Markdown; preserve source content and structured records.

  1. Resolve config — follow the Config Resolution Protocol in llm-wiki/SKILL.md (inline @name override → walk up CWD for .env → global config → prompt setup). This gives OBSIDIAN_VAULT_PATH and OBSIDIAN_LINK_FORMAT.
  2. Read index.md to get the full page inventory with one-line descriptions and tags.
  3. Read log.md briefly — if a dedup run just happened, note what was already merged.

Modes

ModeFlagBehavior
Audit(default)Report candidates only — no writes
Merge--mergeShow each confirmed pair, ask for confirmation before merging
Auto-merge--autoMerge all high-confidence pairs (score ≥ 0.90) non-interactively

If the user doesn't specify, run in Audit mode and present findings before asking whether to proceed.

Step 1: Build the Page Registry

Glob all .md files in the vault (excluding _archives/, _raw/, .obsidian/, index.md, log.md, hot.md, _insights.md, and any file that contains redirects_to: in its frontmatter — those are already merged redirect stubs).

For each remaining page, extract from frontmatter:

  • node_id — relative path from vault root, without .md
  • title — frontmatter title field
  • aliases — frontmatter aliases list (may be absent)
  • tags — frontmatter tags list
  • category — directory prefix

Build a lookup table: node_id → {title, aliases, tags, category, summary}.

Step 2: Detect Candidate Pairs

For every pair of pages in the registry, compute a similarity score using these signals:

2a. Title similarity signals
SignalHow to assessMax contribution
Token overlapJaccard similarity of lowercased title word-tokens (split on spaces, hyphens, underscores, punctuation)0.65
Edit distanceNormalized edit distance on lowercased titles: 1 - (edits / max(len_a, len_b))0.40
Substring containmentOne title is a substring of the other (e.g. "RSC" ⊂ "React Server Components")0.50
Alias cross-matchPage A's title appears in page B's aliases, or vice versa0.65

Composite title score = min(max(token_overlap, edit_distance, substring), 0.65) + alias_cross_bonus.

You don't need exact arithmetic — make a confident judgement about degree of similarity.

Title extraction note: Some pages use YAML block scalars (title: >- or title: |). When the title: value is >-, >, |, or |-, the actual title is on the next indented line — read it from there. Never compare the literal string >- as a title.

2b. Semantic signals (cheap pass)
SignalPoints
Same category directory+0.10
Tag overlap ≥ 3 shared tags+0.15
Tag overlap ≥ 2 shared tags+0.05
Same first tag (dominant tag)+0.05
2c. Threshold

Flag pairs with composite score ≥ 0.75 as candidates. Pairs scoring 0.90+ are high-confidence.

Score ranges → confidence labels:

ScoreLabel
≥ 0.90HIGH — almost certainly the same concept
0.75–0.89MEDIUM — likely the same, verify
0.60–0.74LOW — possible abbreviation or specialisation; skip unless user asks

Only carry HIGH and MEDIUM candidates into Step 3.

2d. Quick exit rule

If the vault has fewer than 10 pages, skip the pair loop and report "vault too small to have meaningful duplicates". If the vault has more than 500 pages, process candidates in batches of 50 pairs — pause and report progress between batches.

Step 3: Semantic Verdict

For each candidate pair (sorted by score descending):

  1. Read both pages in full (full page read — justified because candidate pool is small).
  2. Ask: are these pages covering the same concept, or are they distinct?

Assign one of three verdicts:

VerdictMeaning
mergeSame concept — different name, abbreviation, alias, or accidental duplicate. Safe to merge.
keep-separateRelated but distinct — e.g. "Server Actions" vs "Server Components" are related React features, not duplicates.
needs-reviewAmbiguous — substantial overlap but also meaningful differences. Flag for the user to decide.

Attach a short reason to each verdict (one sentence). This appears in the report and the log.

Step 4: Audit Report

Always produce this report, even in merge/auto-merge mode (so the user sees what will happen):

markdown
## Wiki Dedup Report

### High-Confidence Candidates (score ≥ 0.90): N pairs

| Score | Page A | Page B | Verdict | Reason |
|---|---|---|---|---|
| 0.95 | `concepts/rsc.md` | `concepts/react-server-components.md` | merge | "RSC" is the abbreviation; both pages cover identical material |
| 0.91 | `entities/vaswani-2017.md` | `references/attention-is-all-you-need.md` | keep-separate | One is a person stub, one is a paper reference |

### Medium-Confidence Candidates (score 0.75–0.89): N pairs

| Score | Page A | Page B | Verdict | Reason |
|---|---|---|---|---|
| 0.82 | `concepts/fine-tuning.md` | `concepts/finetuning.md` | merge | Same concept, hyphenation variant |

### Needs Human Review: N pairs

| Score | Page A | Page B | Reason |
|---|---|---|---|
| 0.78 | `concepts/agents.md` | `concepts/autonomous-agents.md` | Substantial overlap but "agents" may intentionally be broader |

### Summary
- Pages scanned: N
- Candidate pairs found: M
- Recommended merges: X
- Keep separate: Y
- Needs review: Z

In Audit mode, stop here and ask: "Run --merge to interactively merge the recommended pairs, or --auto to merge all high-confidence ones automatically?"

Step 5: Merge

Pre-write snapshot — before the first file write, check whether the vault itself is the root of a Git repository. Merely being a subdirectory of a larger repository does not qualify: running git add -A there could capture unrelated files. If the vault is not a standalone Git repository, skip this step silently — no nagging, no suggesting git init.

bash
VAULT_REAL_PATH=$(cd "$OBSIDIAN_VAULT_PATH" && pwd -P)
VAULT_GIT_ROOT=$(git -C "$OBSIDIAN_VAULT_PATH" rev-parse --show-toplevel 2>/dev/null || true)
SNAPSHOT_SHA=""

if [ -n "$VAULT_GIT_ROOT" ] && [ "$VAULT_GIT_ROOT" = "$VAULT_REAL_PATH" ]; then
  if git -C "$OBSIDIAN_VAULT_PATH" diff --quiet \
    && git -C "$OBSIDIAN_VAULT_PATH" diff --cached --quiet \
    && [ -z "$(git -C "$OBSIDIAN_VAULT_PATH" ls-files --others --exclude-standard)" ]; then
    SNAPSHOT_SHA=$(git -C "$OBSIDIAN_VAULT_PATH" rev-parse HEAD)
  else
    if ! git -C "$OBSIDIAN_VAULT_PATH" add -A; then
      echo "Pre-write snapshot failed; abort the skill without writing any vault files." >&2
      exit 1
    fi
    if ! git -C "$OBSIDIAN_VAULT_PATH" commit -m "pre-wiki-dedup snapshot" --quiet; then
      echo "Pre-write snapshot failed; abort the skill without writing any vault files." >&2
      exit 1
    fi
    SNAPSHOT_SHA=$(git -C "$OBSIDIAN_VAULT_PATH" rev-parse HEAD)
  fi
fi

The clean-repository branch deliberately avoids calling git commit, so "nothing to commit" is not treated as an error. If git add or git commit fails, stop before editing the vault; never continue without the promised snapshot.

If SNAPSHOT_SHA is non-empty and the skill writes files, include the SHA in the final report. To discard the entire run, after confirming there are no later changes worth keeping, the user can run:

bash
git -C "$OBSIDIAN_VAULT_PATH" reset --hard "$SNAPSHOT_SHA"
git -C "$OBSIDIAN_VAULT_PATH" clean -fd

For each merge verdict pair (in merge or auto-merge mode):

In merge mode: show the pair and verdict, then ask: "Merge [Page A] into [Page B]? (yes/skip/review)". Skip on anything other than yes.

In auto-merge mode: only process HIGH-confidence (score ≥ 0.90) merges without prompting.

5a: Pick the canonical page

Apply these tiebreakers in order until one wins:

  1. More incoming wikilinks — grep the vault for [[node_id]] references; higher count wins
  2. Richer content — longer page body (more lines) wins
  3. More sources — larger sources: list wins
  4. Title length — longer, more descriptive title wins (e.g. "React Server Components" beats "RSC")
  5. Alphabetical — earlier title wins

The canonical page is the survivor. The other page becomes the secondary (to be merged in, then replaced with a redirect stub).

Show full SKILL.md (696 more words)Show less
5b: Merge content into the canonical page

Read both pages. Update the canonical page:

  • aliases: — add secondary page's title and all its aliases (no duplicates)
  • tags: — merge both tag lists (deduplicate, cap at 5 domain tags + system tags)
  • sources: — merge both source lists (deduplicate)
  • relationships: — merge both relationship lists (deduplicate by target, prefer typed entries over untyped)
  • base_confidence — recompute using the union of sources and the formula from llm-wiki/SKILL.md
  • updated — set to now
  • summary: — rewrite to cover the merged scope if the secondary page added new ground
  • Body content — merge unique sections and bullets from the secondary page. Do not blindly append — integrate the content. Avoid duplicating claims already present in the canonical page. Use ^[inferred] markers where synthesis is needed.
  • provenance: — recompute after merging
5c: Write a redirect stub at the secondary page path
markdown
---
title: <secondary page title>
redirects_to: "[[<canonical node_id>]]"
aliases: [<secondary aliases>]
category: <secondary category>
tags: []
created: <secondary original created>
updated: <ISO timestamp now>
---

This page has been merged into [[<canonical page title>]].

The redirects_to: field tells any skill reading this page to follow the redirect rather than treat it as content.

Grep the entire vault for any link pointing at the secondary slug:

  • [[secondary-slug]] → [[canonical-slug]]
  • [[secondary-slug|display text]] → [[canonical-slug|display text]]
  • If OBSIDIAN_LINK_FORMAT=markdown: [text](../path/to/secondary.md) → [text](../path/to/canonical.md)

Safety rules:

  • Never rewrite inside code blocks (``` fences or inline code)
  • Never rewrite inside the redirect stub itself (that's the one place the old slug should remain legible)
  • Never use rm or destructive shell ops — only Edit/Write tools
  • Rewrite one file at a time, verifying each before moving on
  • If a file has zero occurrences, skip it
5e: Update tracking files

index.md and hot.md are regenerated by the memory sync call in Step 6 — the redirect stub is skipped by the page walker, so the secondary's entry disappears and the canonical entry picks up the merged summary on its own.

.manifest.json — For the secondary page's source entries: add "merged_into": "<canonical node_id>" to each. For the canonical page: merge in the secondary's pages_created and pages_updated lists.

5f: Final check

After all merges, grep the vault for any remaining [[secondary-slug]] references (in non-stub files). If any survive, report them — the rewrite step may have missed a non-standard link format.

Step 6: Log

One locked call writes the log line and reconciles the index and hot cache:

bash
obsidian-wiki memory sync DEDUP \
  mode=<audit|merge|auto-merge> pages_scanned=<N> pairs_found=<M> \
  merged=<X> kept_separate=<Y> needs_review=<Z> \
  wikilinks_rewritten=<W> \
  --takeaways "Merged N duplicate pairs; canonical pages updated."

In audit mode (nothing merged) use obsidian-wiki memory log DEDUP ... instead — a read-only run must not rewrite the index or hot cache.

Never hand-edit index.md, log.md, or hot.md — the command takes the lock that keeps a parallel writer from dropping your update.

See .skills/llm-wiki/references/MEMORY.md for the full procedure.

Redirect Stub Handling

Other skills should handle redirect stubs as follows:

  • wiki-export — skip pages with redirects_to: in frontmatter; they are not content nodes
  • wiki-query — if a search hits a redirect stub, follow redirects_to: and read the canonical page instead
  • wiki-lint — validate that every redirects_to: wikilink resolves to an existing, non-stub page (a redirect chain — stub pointing to stub — is an error)
  • cross-linker — treat redirect stubs as non-targets; never add a new [[wikilink]] pointing at a stub page

Tips

  • Audit first, always. Even in auto-merge mode, the audit report is shown. Read it before trusting the results.
  • Check needs-review last. These are the hard cases — don't batch them with obvious merges.
  • Abbreviations are the most common case. "GPT" / "GPT-4" / "GPT4", "RSC" / "React Server Components", "LLM" / "Large Language Models" — these score high on substring containment and are almost always safe to merge.
  • Different versions are not duplicates. "GPT-3" and "GPT-4" are related but distinct. "fine-tuning" and "fine-tuning-llms" may be distinct (technique vs. specific application).
  • Run cross-linker after dedup. The redirect stubs leave the graph in a slightly inconsistent state. Cross-linker will tighten it up.

QMD Refresh After Vault Writes

QMD is a search index, not the source of truth. If $QMD_WIKI_COLLECTION is empty or unset, skip this step. Run it only after this skill has written or rewritten vault markdown. If QMD refresh fails, do not roll back the vault changes; report the QMD status separately.

Use $QMD_CLI if set; otherwise use qmd.

bash
${QMD_CLI:-qmd} update

If the output says vectors are needed or embeddings may be stale, run:

bash
${QMD_CLI:-qmd} embed

Verify the collection with either:

bash
${QMD_CLI:-qmd} ls "$QMD_WIKI_COLLECTION"

or, when a specific page path is known:

bash
${QMD_CLI:-qmd} get "qmd://$QMD_WIKI_COLLECTION/<page>.md" -l 5

Record one of:

  • QMD refreshed: update + embed + verified
  • QMD refreshed: update only + verified
  • QMD skipped: QMD_WIKI_COLLECTION unset
  • QMD skipped: qmd CLI unavailable
  • QMD failed: <short error summary>

© Ar9av, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in .skills/wiki-dedup of Ar9av/obsidian-wiki.

Open the folder on GitHubat commit 4a0630b

Compare with similar skills

Wiki Dedup 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.

Wiki Dedup compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Wiki Dedup this skillAr9av/obsidian-wiki3.5k—~3.8kAutomated safety check: NotesMIT
LLM Wikilewislulu/llm-wiki-skill655—~3.7kAutomated safety check: PassNone
LLM WikiCharlesHoskinson/sevenlayer116—~1.5kAutomated safety check: PassCustom licence
Knowledge Base Health Lintjason-effi-lab/karpathy-llm-wiki-vault720—~336Automated safety check: PassNone
Wiki AllPratiyush/llm-wiki397—~587Automated safety check: PassMIT
Obsidian Wiki LinterAgriciDaniel/claude-obsidian15k—~938Automated safety check: PassMIT

Similar skills

  • LLM Wiki

    lewislulu/llm-wiki-skill

    Build and maintain a Karpathy-style LLM knowledge base — a self-compiling Obsidian markdown wiki where an Agent ingests raw sources, compiles cross-linked concept/entity/summary pages, answers…

    655 GitHub stars~3.7k tokensUpdated 5 mo ago
    Knowledge ManagementAuto-check passed
  • LLM Wiki

    CharlesHoskinson/sevenlayer

    Builds and maintains a persistent, interlinked Obsidian-compatible markdown knowledge wiki in a git repo via three operations — ingest a source into linked pages, answer a question from the…

    116 GitHub stars~1.5k tokensUpdated 1 mo ago
    Knowledge ManagementAuto-check passed
  • Knowledge Base Health Lint

    jason-effi-lab/karpathy-llm-wiki-vault

    Scans an Obsidian-style wiki for broken double-link references, orphan pages, files missing from the index and unresolved knowledge conflicts, then reports the findings.

    720 GitHub stars~336 tokensUpdated 5 mo ago
    Knowledge ManagementAuto-check passed
  • Wiki All

    Pratiyush/llm-wiki

    Run the complete llmwiki pipeline from scratch — init, sync, graph, build, lint, and serve.

    397 GitHub stars~587 tokensUpdated 3 mo ago
    Knowledge ManagementAuto-check passed
  • Obsidian Wiki Linter

    AgriciDaniel/claude-obsidian

    Runs a deterministic, read-only health check on an Obsidian vault, reporting dead or ambiguous links, orphan pages, missing frontmatter, empty sections and stale index entries.

    15k GitHub stars~938 tokensUpdated 28 days ago
    Knowledge ManagementAuto-check passed
  • Second Brain

    coreyhaines31/makerskills

    When you want to capture into, compile, query, lint, or connect your personal Second Brain.

    850 GitHub stars~3k tokensUpdated today
    Knowledge ManagementAuto-check passed

More from Ar9av/obsidian-wiki

All 39 skills in this repo
  • Codex History Ingest

    Ar9av/obsidian-wiki

    Ingest Codex CLI conversation/session history into Obsidian as distilled knowledge.

    3.5k GitHub stars~2.2k tokensUpdated today
    Auto-check: notes
  • Copilot History Ingest

    Ar9av/obsidian-wiki

    Ingest GitHub Copilot CLI/session history into Obsidian as distilled knowledge.

    3.5k GitHub stars~4.4k tokensUpdated today
    Auto-check: notes
  • Hermes History Ingest

    Ar9av/obsidian-wiki

    Ingest Hermes agent history into Obsidian as distilled knowledge.

    3.5k GitHub stars~2.2k tokensUpdated today
    Auto-check: notes
  • Obsidian Layout Adjustment

    Ar9av/obsidian-wiki

    Adjust the user's Obsidian visual layout with CSS snippets. An agent skill from Ar9av/obsidian-wiki.

    3.5k GitHub stars~2.5k tokensUpdated today
    Auto-check passed
  • Openclaw History Ingest

    Ar9av/obsidian-wiki

    Ingest OpenClaw session/history data into Obsidian as distilled knowledge.

    3.5k GitHub stars~2.5k tokensUpdated today
    Auto-check: notes
  • Wiki Capture

    Ar9av/obsidian-wiki

    Turn the current conversation or finding into a structured permanent wiki note.

    3.5k GitHub stars~4.3k tokensUpdated today
    Auto-check: notes

Works with

Questions about Wiki Dedup

What does Wiki Dedup do?

Detect and merge wiki pages representing the same concept under different names. Wiki Dedup is an agent skill from Ar9av/obsidian-wiki. Detect and merge wiki pages representing the same concept under different names.

When should I use Wiki Dedup?

Wiki Dedup fits situations like: page-identity deduplication and consolidation; tasks that involve LLM wikis; tasks that involve Data cleaning.

How do I install Wiki Dedup in Claude Code?

Run `npx skills add Ar9av/obsidian-wiki --skill wiki-dedup -a claude-code`. Or copy the skill folder (.skills/wiki-dedup in Ar9av/obsidian-wiki) into .claude/skills/wiki-dedup in your project. Claude Code loads it when a task matches its description.

How do I install Wiki Dedup in Codex?

Run `npx skills add Ar9av/obsidian-wiki --skill wiki-dedup -a codex`. Or copy the skill folder (.skills/wiki-dedup in Ar9av/obsidian-wiki) into .agents/skills/wiki-dedup in your project. Codex loads it when a task matches its description.

Can I use Wiki Dedup in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add Ar9av/obsidian-wiki --skill wiki-dedup -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/wiki-dedup, .gemini/skills/wiki-dedup, .github/skills/wiki-dedup and .opencode/skills/wiki-dedup in your project.

What does Wiki Dedup need to run?

Going by SKILL.md and its folder, Wiki Dedup needs the command-line tools its instructions call (git).

Does Wiki Dedup access the network?

SKILL.md contains no URLs. Its commands use git, which can reach the network depending on how they are called. This is read from the text; nothing was executed.

Is Wiki Dedup safe to install?

Our automated static check of SKILL.md found notes only (mentions a .env file), nothing it rates as a warning. It is not a guarantee. Review the folder before installing.

What licence does Wiki Dedup use?

Wiki Dedup is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Wiki Dedup use?

About 3.8k tokens (SKILL.md is roughly 15k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Wiki Dedup?

Skills that share tags, products or a category with Wiki Dedup: LLM Wiki (lewislulu/llm-wiki-skill, 655 stars), LLM Wiki (CharlesHoskinson/sevenlayer, 116 stars), Knowledge Base Health Lint (jason-effi-lab/karpathy-llm-wiki-vault, 720 stars) and Wiki All (Pratiyush/llm-wiki, 397 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Wiki Dedup?

Ar9av (a GitHub user) maintains it in Ar9av/obsidian-wiki, which has 3,538 GitHub stars. The repository holds 39 skills in this directory. The repository was last updated on October 8, 2026.

Source: Ar9av/obsidian-wiki on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.