Obsidian Auto Tagger
Add useful tags to untagged Obsidian notes while preserving the vault's existing tag vocabulary.
Use This Skill When
- The user points at an Obsidian vault, folder, or note and asks to add missing tags.
- Notes lack frontmatter, lack a
tags field, have an empty tags field, or have no inline tags.
- Existing vault tags should be reused before creating new tags.
- Tags should be written as Obsidian-compatible frontmatter
tags entries.
Do Not Use
- The user wants to redesign the entire taxonomy from scratch.
- Notes are generated, cache, plugin, template, attachment, or local skill files.
- Existing tags are already maintained and the user has not requested optimization.
- The note topic is too ambiguous to tag confidently.
Workflow
Determine scope.
For a single note, read it directly and still inspect nearby vault tags when possible. For a folder or vault, run the bundled scanner first. Run commands from this skill directory or replace scripts/... with the script's absolute path. The script uses Python 3 standard library only.
python3 scripts/vault_tag_inventory.py scan /path/to/vault --format json
Inventory the existing taxonomy before assigning tags.
Prefer high-frequency, semantically matching tags already present in the vault. Use references/tag-selection.md.
Read candidates and recommend tags in small batches.
For each untagged note, read the title, frontmatter, headings, and meaningful body text. Choose 1-3 tags from the existing list when possible; use 4 only for notes with distinct retrieval paths. Mark any proposed new tag as new in the recommendation.
Present a reviewable suggestion list before editing.
| File | Suggested Tags | Confidence | Reason |
| --- | --- | --- | --- |
| Notes/example.md | ai, research | high | Matches existing tags and note topic |
Dry-run writes first.
Put approved assignments in JSON and validate the exact files that would change:
python3 scripts/vault_tag_inventory.py apply /path/to/vault assignments.json
Apply only after the dry run is clean.
python3 scripts/vault_tag_inventory.py apply /path/to/vault assignments.json --write
Rescan and summarize.
Confirm fewer untagged notes remain and report reused tags, new tags, skipped notes, and any ambiguous cases. Use references/batch-mode.md.
Assignment Format
{
"assignments": [
{"path": "Notes/example.md", "tags": ["ai", "research"]}
]
}
Paths are relative to the vault root. The apply command is dry-run by default and skips files that already have frontmatter or inline tags unless --force is provided.
Ground Rules
- Preserve existing frontmatter and note content.
- Prefer existing tags over new tags.
- Never remove existing user-authored tags.
- Use concise, reusable tags rather than one-off sentence-like tags.
- Do not infer sensitive or private attributes from personal notes.
- Skip low-confidence notes instead of inventing misleading tags.
Reference Files
- references/tag-selection.md: tag reuse, new-tag criteria, and note-reading heuristics.
- references/batch-mode.md: vault-scale sequencing, dry-run checks, and final reporting.
1---2name: obsidian-auto-tagger3description: Add suitable tags to untagged Markdown notes in an Obsidian vault. Use when a vault, folder, or note should be audited for missing tags, existing vault tags should be inventoried first, recommendations should be reviewed in batches, and new tags should be introduced only when no existing tag fits.4license: MIT5---67# Obsidian Auto Tagger89Add useful tags to untagged Obsidian notes while preserving the vault's existing tag vocabulary.1011## Use This Skill When1213- The user points at an Obsidian vault, folder, or note and asks to add missing tags.14- Notes lack frontmatter, lack a `tags` field, have an empty `tags` field, or have no inline tags.15- Existing vault tags should be reused before creating new tags.16- Tags should be written as Obsidian-compatible frontmatter `tags` entries.1718## Do Not Use1920- The user wants to redesign the entire taxonomy from scratch.21- Notes are generated, cache, plugin, template, attachment, or local skill files.22- Existing tags are already maintained and the user has not requested optimization.23- The note topic is too ambiguous to tag confidently.2425## Workflow26271. Determine scope.28 For a single note, read it directly and still inspect nearby vault tags when possible. For a folder or vault, run the bundled scanner first. Run commands from this skill directory or replace `scripts/...` with the script's absolute path. The script uses Python 3 standard library only.2930 ```bash31 python3 scripts/vault_tag_inventory.py scan /path/to/vault --format json32 ```33342. Inventory the existing taxonomy before assigning tags.35 Prefer high-frequency, semantically matching tags already present in the vault. Use [references/tag-selection.md](references/tag-selection.md).36373. Read candidates and recommend tags in small batches.38 For each untagged note, read the title, frontmatter, headings, and meaningful body text. Choose 1-3 tags from the existing list when possible; use 4 only for notes with distinct retrieval paths. Mark any proposed new tag as `new` in the recommendation.39404. Present a reviewable suggestion list before editing.4142 ```text43 | File | Suggested Tags | Confidence | Reason |44 | --- | --- | --- | --- |45 | Notes/example.md | ai, research | high | Matches existing tags and note topic |46 ```47485. Dry-run writes first.49 Put approved assignments in JSON and validate the exact files that would change:5051 ```bash52 python3 scripts/vault_tag_inventory.py apply /path/to/vault assignments.json53 ```54556. Apply only after the dry run is clean.5657 ```bash58 python3 scripts/vault_tag_inventory.py apply /path/to/vault assignments.json --write59 ```60617. Rescan and summarize.62 Confirm fewer untagged notes remain and report reused tags, new tags, skipped notes, and any ambiguous cases. Use [references/batch-mode.md](references/batch-mode.md).6364## Assignment Format6566```json67{68 "assignments": [69 {"path": "Notes/example.md", "tags": ["ai", "research"]}70 ]71}72```7374Paths are relative to the vault root. The apply command is dry-run by default and skips files that already have frontmatter or inline tags unless `--force` is provided.7576## Ground Rules7778- Preserve existing frontmatter and note content.79- Prefer existing tags over new tags.80- Never remove existing user-authored tags.81- Use concise, reusable tags rather than one-off sentence-like tags.82- Do not infer sensitive or private attributes from personal notes.83- Skip low-confidence notes instead of inventing misleading tags.8485## Reference Files8687- [references/tag-selection.md](references/tag-selection.md): tag reuse, new-tag criteria, and note-reading heuristics.88- [references/batch-mode.md](references/batch-mode.md): vault-scale sequencing, dry-run checks, and final reporting.