Skip to main content
skill CX Codex

tag-taxonomy — Claude Code skill: what it does, how to install

This skill audits and normalizes tags across an Obsidian vault using a controlled vocabulary. It spots aliases, cleans up excess tags, and suggests canonical labels for new notes.

Install into Claude Code · Skills CLI (Vercel) All methods and platforms ↓
npx skills add Ar9av/obsidian-wiki --skill tag-taxonomy -a claude-code
Open on GitHub

What tag-taxonomy does

The skill enforces a controlled vocabulary across notes using $OBSIDIAN_VAULT_PATH/_meta/taxonomy.md as the canonical source of truth. That file defines valid tags, alias redirects, lowercase hyphenated formatting, and a strict cap of 5 tags per document. The skill operates in four explicit modes: vault-wide tag auditing, batch YAML frontmatter normalization, assigning taxonomy-compliant tags to fresh pages, and proposing additions to the vocabulary.

Special rules protect the visibility/ namespace, which includes visibility/public, visibility/internal, and visibility/pii. These system markers bypass alias substitution, skip the five-tag count, and appear in dedicated audit sections. Once vault files change, the skill invokes obsidian-wiki memory sync to safely commit changes to the log and hot cache, followed by an optional qmd vector search refresh if $QMD_WIKI_COLLECTION is configured.

Execution will fail without a defined OBSIDIAN_VAULT_PATH and an existing _meta/taxonomy.md file. Manual edits to index.md or log.md are strictly prohibited by design, because only the locking CLI command prevents concurrent writers from corrupting metadata.

What it helps with

  • audit existing frontmatter tags across vault markdown files
  • map non-canonical aliases to authorized vocabulary terms
  • prune over-tagged documents down to the 5-tag limit
  • assign domain and type tags to newly created wiki notes
  • register approved canonical tags inside _meta/taxonomy.md

Example prompts for the agent

  • Run a tag audit across the vault and list non-canonical tags
  • Normalize frontmatter tags in entities/jane-doe.md against the taxonomy
  • Select up to 5 canonical tags for my new note on database indexing

How to install tag-taxonomy

1Skills CLI (Vercel)

npx skills add Ar9av/obsidian-wiki --skill tag-taxonomy -a claude-code

2Manually: put the files in place

~/.claude/skills/tag-taxonomy/SKILL.md

Copy the whole skill folder; for one project use .claude/skills/tag-taxonomy/

Step by step, with commands for each platform: How to install skills in Claude Code: five ways

Questions about tag-taxonomy

How to install tag-taxonomy in Claude Code?

Run npx skills add Ar9av/obsidian-wiki --skill tag-taxonomy -a claude-code in your terminal.

What does tag-taxonomy do?

It scans Obsidian frontmatter tags, compares them against _meta/taxonomy.md, remaps aliases to canonical terms, and keeps page tags capped at 5.

How are visibility tags handled?

Tags under visibility/ like visibility/internal or visibility/pii belong to a reserved system group. The skill never replaces them with aliases, excludes them from the 5-tag cap, and reports them separately during audits.

Source text

SKILL.md · MIT
---
name: tag-taxonomy
description: >
  Apply and maintain the wiki's controlled tag vocabulary. Use for choosing, normalizing, auditing, or extending tags when creating or updating wiki pages; consult the taxonomy before assigning tags.
---

# Tag Taxonomy — Controlled Vocabulary for Wiki Tags

You are enforcing consistent tagging across the wiki by normalizing tags to a controlled vocabulary.

## Before You Start

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`
2. Read `$OBSIDIAN_VAULT_PATH/_meta/taxonomy.md` — this is the canonical tag list
3. Read `index.md` to understand the wiki's scope

## The Taxonomy File

The canonical tag vocabulary lives at `$OBSIDIAN_VAULT_PATH/_meta/taxonomy.md`. It defines:

- **Canonical tags** — the tags that should be used
- **Aliases** — common alternatives that should be mapped to the canonical form
- **Rules** — max 5 tags per page, lowercase/hyphenated, prefer broad over narrow
- **Migration guide** — specific renames for known inconsistencies

**Always read this file before tagging.** It's the source of truth.

## Reserved System Tags

`visibility/` is a reserved tag group with special rules. These tags are **not** domain or type tags and are managed separately from the taxonomy vocabulary:

| Tag | Purpose |
|---|---|
| `visibility/public` | Explicitly public — shown in all modes (same as no tag) |
| `visibility/internal` | Team-only — excluded in filtered query/export mode |
| `visibility/pii` | Sensitive data — excluded in filtered query/export mode |

**Rules for `visibility/` tags:**
- They do **not** count toward the 5-tag limit
- Only one `visibility/` tag per page
- Omit entirely when content is clearly public — no tag needed
- Never add `visibility/internal` just because content is technical; use it only for genuinely team-restricted knowledge
- When running a tag audit, report `visibility/` tag usage separately — do not flag them as unknown or non-canonical

When normalizing tags, leave `visibility/` tags untouched — they are not subject to alias mapping.

## Mode 1: Tag Audit

When the user wants to see the current state of tags:

### Step 1: Scan all pages

```
Glob: $VAULT_PATH/**/*.md (excluding _archives/, .obsidian/, _meta/)
Extract: tags field from YAML frontmatter
```

### Step 2: Build a tag frequency table

For each tag found, count how many pages use it. Flag:

- **Unknown tags** — not in the taxonomy's canonical list
- **Alias tags** — using an alias instead of the canonical form (e.g., `nextjs` instead of `react`)
- **Over-tagged pages** — pages with more than 5 tags
- **Untagged pages** — pages with no tags or empty tags field

### Step 3: Report

```markdown
## Tag Audit Report

### Summary

- Total unique tags: 47
- Canonical tags used: 32
- Non-canonical tags found: 15
- Pages over tag limit (5): 3
- Untagged pages: 2

### Non-Canonical Tags Found

| Current Tag | → Canonical | Pages Affected |
| ----------- | ----------- | -------------- |
| `nextjs`    | `react`     | 4              |
| `next-js`   | `react`     | 2              |
| `robotics`  | `ml`        | 1              |
| `windows98` | `retro`     | 3              |

### Unknown Tags (not in taxonomy)

| Tag          | Pages | Recommendation                   |
| ------------ | ----- | -------------------------------- |
| `flutter`    | 1     | Add to taxonomy under Frameworks |
| `kubernetes` | 2     | Add to taxonomy under DevOps     |

### Over-Tagged Pages

| Page                   | Tag Count | Tags                 |
| ---------------------- | --------- | -------------------- |
| `entities/jane-doe.md` | 8         | ai, ml, founder, ... |
```

## Mode 2: Tag Normalization

When the user wants to fix the tags:

### Step 1: Run audit (above)

### Step 2: Apply fixes

For each page with non-canonical tags:

1. Read the page
2. Replace alias tags with their canonical form from the taxonomy
3. If page has > 5 tags, suggest which to drop (keep the most specific/relevant ones)
4. Write the updated frontmatter

**Example:**

```yaml
# Before
tags: [nextjs, ai, ml-engineer, windows98, creative-coding, game, 8-bit, portfolio]

# After
tags: [react, ai, ml, retro, generative-art]
```

### Step 3: Handle unknowns

For tags that aren't in the taxonomy and aren't aliases:

- If the tag is used on 2+ pages, suggest adding it to the taxonomy
- If the tag is used on 1 page, suggest replacing it with the closest canonical tag
- Ask the user before making changes to unknown tags

### Step 4: Update taxonomy

If new canonical tags were agreed upon, append them to `_meta/taxonomy.md` in the correct section.

## Mode 3: Tagging a New Page

When you're creating a wiki page and need to choose tags:

1. Read `_meta/taxonomy.md`
2. Select up to 5 tags that best describe the page:
   - 1-2 **domain tags** (what subject area)
   - 1 **type tag** (what kind of thing)
   - 0-1 **project tags** (if project-specific)
   - 0-1 additional descriptive tags
3. Use only canonical tags — never aliases
4. If no existing tag fits, check if it's worth adding to the taxonomy

## Mode 4: Adding a New Tag

When the user wants to add a tag to the vocabulary:

1. Check if an existing tag already covers the concept (suggest it if so)
2. If genuinely new, determine which section it belongs in (Domain, Type, Project)
3. Add it to `_meta/taxonomy.md` with:
   - The canonical tag name
   - What it's used for
   - Any aliases to redirect

## After Any Tag Operation

One locked call updates the log, the index (tags appear in index entries), and the hot cache:

```bash
# audit
obsidian-wiki memory sync TAG_AUDIT \
  tags_normalized=<N> unknown_tags=<M> pages_modified=<P> \
  --takeaways "Tag audit: normalized 14 tags across 28 pages; 2 new canonical tags added."

# normalization
obsidian-wiki memory sync TAG_NORMALIZE \
  tags_renamed=<N> pages_modified=<M> new_tags_added=<P>
```

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.

## 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 · Ar9av/obsidian-wiki

Similar skills

All skills for Notes, tasks and projects →

From the same set38

wiki-lint Audits Obsidian vault health by identifying broken wikilinks, orphan pages, missing frontmatter, and stale content without reading every file in full. CX Codex +1 3,500installs wiki-update Distills architecture decisions and project context from your current repository into an Obsidian vault. Useful when you need durable notes without manual copy-pasting. CX Codex +1 3,400installs wiki-status Reports what an Obsidian wiki has ingested, what changed since the last run, and which pages went stale. Run it before deciding whether to append or rebuild the vault. CX Codex +1 3,400installs cross-linker Finds wiki pages that ought to reference each other but don't, then inserts the missing [[wikilinks]]. Useful right after a bulk import of notes. CX Codex +1 3,300installs wiki-history-ingest A thin router that picks the right history-ingest skill from an agent name or a session path, then hands the job over. CX Codex +1 3,200installs wiki-export Turns the wikilink graph of an Obsidian vault into JSON, GraphML, Cypher, SQL, HTML or OKF. Handy when the notes have to land in Gephi, Neo4j or a script of your own. CX Codex +1 3,200installs wiki-rebuild Creates full snapshots of an Obsidian wiki, restores earlier archives, and wipes the vault to let you reprocess all raw sources from scratch. CX Codex +1 3,200installs claude-history-ingest Distills past Claude Code sessions into structured Obsidian wiki notes. Useful for preserving project context and mining technical takeaways from chat logs. CX Codex +1 3,000installs

Project sponsors

Companies that keep this analytics open
Gold sponsor

Impressions, clicks and code copies — open statistics. We keep the numbers public for the same reason NeBlask itself is public. Become a sponsor