From obsidian
Manages note type definitions in Obsidian vaults via obsidian:types commands and note_types.py CLI — creating, editing, listing, and removing note types with their folder mappings, required/optional properties, icons, and template associations. MANDATORY: When user provides --config JSON, pass it EXACTLY as-is to the script — do NOT manually edit settings.yaml. Use this skill to define new note types (e.g. meeting, blog, book), view existing note types and their configurations, edit note type settings (folder, properties, icon, description), remove note types, run the interactive wizard, or set up folder-to-type mappings. Always consult for obsidian:types commands, note type CRUD operations, or questions about which note types exist and what they contain. This skill manages note type definitions only — not individual property schemas (use frontmatter), not note validation (use validate), not settings.yaml structure (use config), not note templates themselves (use templates).
How this skill is triggered — by the user, by Claude, or both
Slash command
/obsidian:note-typesThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
| Command | Description |
| Command | Description |
|---|---|
obsidian:types | List all note types |
obsidian:types list | List all note types (explicit) |
obsidian:types show <name> | Show details for a note type |
obsidian:types add <name> --config '{...}' | Add with full JSON config |
obsidian:types edit <name> --config '{...}' | Edit with JSON config |
obsidian:types remove <name> --yes | Remove a note type |
obsidian:types wizard | Interactive wizard |
When user provides --config '{...}', pass it EXACTLY as-is to the script!
DO NOT:
Just execute the command with --config. The script handles everything.
User types:
obsidian:types add meeting --config '{"folder": "Meetings/", "required_props": ["date"]}'
Execute:
uv run types_command.py --vault . add meeting --config '{"folder": "Meetings/", "required_props": ["date"]}'
User types:
obsidian:types edit meeting --config '{"description": "Updated", "icon": "video"}'
Execute:
uv run types_command.py --vault . edit meeting --config '{"description": "Updated", "icon": "video"}'
DO NOT read or manually edit settings.yaml!
Note: This skill reads and writes to .claude/settings.yaml. Run obsidian:init first to initialize your vault.
# List all note types from settings.yaml
uv run skills/note-types/scripts/note_types.py --list
# Show details for a specific type
uv run skills/note-types/scripts/note_types.py --show project
# Add a note type with full config (RECOMMENDED for Claude Code)
uv run skills/note-types/scripts/note_types.py --add blog --config '{"description": "Blog posts", "folder": "Blog/", "required_props": ["status"], "icon": "pen-tool"}'
# Add with minimal defaults only (when no config specified)
uv run skills/note-types/scripts/note_types.py --add blog --non-interactive
# Remove a note type
uv run skills/note-types/scripts/note_types.py --remove blog --yes
# Specify vault path explicitly
uv run skills/note-types/scripts/note_types.py --vault /path/to/vault --list
The wizard mode guides you through creating a new note type:
uv run skills/note-types/scripts/note_types.py --wizard
Note types are defined by the methodology you chose during obsidian:init:
PARA (default):
LYT-ACE:
Zettelkasten:
Minimal:
Note types are stored in .claude/settings.yaml, which is the single source of truth for all vault configuration. This file is generated by obsidian:init and shared with all other skills (validation, config, etc.).
# .claude/settings.yaml
version: '1.0'
methodology: para
core_properties:
all: [type, up, created, tags]
note_types:
project:
description: Active projects with defined outcomes
folder_hints:
- Projects/
properties:
additional_required: [status]
optional: [deadline, priority]
validation:
allow_empty_up: false
icon: target
area:
description: Areas of responsibility
folder_hints:
- Areas/
properties:
additional_required: []
optional: [review_frequency]
validation:
allow_empty_up: false
icon: home
uv run skills/note-types/scripts/note_types.py --list
Output:
📋 Note Types (5):
daily
Folder: Calendar/Daily/
Properties: type, daily
dot
Folder: Atlas/Dots/
Properties: type, up
...
uv run skills/note-types/scripts/note_types.py --show map
Output:
📄 Note Type: map
Folder: Atlas/Maps/
Properties: type, up, related
uv run skills/note-types/scripts/note_types.py --add blog
Prompts:
Define note type: blog
(Press Enter to keep current value or use default)
Folder [Blog/]:
Properties (comma-separated) [type, up]: type, up, author, published
Template [none]: templates/blog-post.md
uv run skills/note-types/scripts/note_types.py --add blog --non-interactive
Creates a note type with minimal defaults:
Blog/type, upUse --config with JSON for full wizard-like setup in a single command:
# Full wizard-like setup
uv run skills/note-types/scripts/note_types.py --add meeting --config '{
"description": "Meeting notes and action items",
"folder": "Meetings/",
"required_props": ["attendees", "date"],
"optional_props": ["action_items", "next_meeting"],
"icon": "calendar"
}'
# Shorter syntax (all on one line)
uv run skills/note-types/scripts/note_types.py --add blog --config '{"description": "Blog posts and drafts", "folder": "Blog/", "required_props": ["status", "published"], "icon": "pen-tool"}'
Config JSON fields:
| Field | Type | Description |
|---|---|---|
description | string | Note type description |
folder | string | Folder path (e.g., "Meetings/") |
required_props | array/string | Required properties (comma-separated or array) |
optional_props | array/string | Optional properties (comma-separated or array) |
icon | string | Lucide icon name |
allow_empty_up | boolean | Allow empty up links (default: false) |
This is the recommended approach for Claude Code as it provides full wizard functionality without interactive prompts.
With JSON config (RECOMMENDED for Claude Code):
# Update multiple fields at once
uv run skills/note-types/scripts/note_types.py --edit meeting --config '{
"description": "Updated meeting notes",
"required_props": ["attendees", "date", "location"],
"optional_props": ["action_items", "recording_link"],
"icon": "video"
}'
# Single line
uv run skills/note-types/scripts/note_types.py --edit project --config '{"description": "New description", "icon": "rocket"}'
With individual parameters:
# Update description
uv run skills/note-types/scripts/note_types.py --edit project --non-interactive --description "New description"
# Update properties
uv run skills/note-types/scripts/note_types.py --edit project --non-interactive --required-props "status,priority"
# Combine multiple updates
uv run skills/note-types/scripts/note_types.py --edit project --non-interactive \
--description "Updated" --folder "Projects/" --icon "rocket"
Interactive (terminal only):
uv run skills/note-types/scripts/note_types.py --edit project
Shows current values and prompts for changes:
📝 Editing note type: project
📄 Note Type: project
Folder: Efforts/Projects/
Properties: type, status, due
Define note type: project
(Press Enter to keep current value or use default)
Folder [Efforts/Projects/]:
Properties (comma-separated) [type, status, due]: type, status, due, priority
Template [none]: templates/project.md
uv run skills/note-types/scripts/note_types.py --remove custom
Prompts for confirmation:
⚠️ Delete note type 'custom'? (y/N): y
✅ Removed note type 'custom'
uv run skills/note-types/scripts/note_types.py --wizard
Interactive wizard:
🧙 Note Type Wizard
Let's create a new note type for your Obsidian vault.
Note type name: meeting
Folder [Meeting/]: Efforts/Meetings/
Properties (comma-separated) [type, up]: type, up, date, attendees
Template [none]: templates/meeting-notes.md
📋 Summary:
Name: meeting
Folder: Efforts/Meetings/
Properties: type, up, date, attendees
Template: templates/meeting-notes.md
✅ Create this note type? (Y/n): y
✅ Created note type 'meeting'
Note types defined here can be used by the vault validator for type inference:
# In .claude/config/validator.yaml
type_rules:
'Atlas/Maps/': map
'Efforts/Projects/': project
'Efforts/Meetings/': meeting # Custom type
Create note types for your specific workflow:
Define required properties for each note type to maintain consistency:
book:
folder: Atlas/Books/
properties:
- type
- author
- isbn
- rating
- read_date
Link note types to templates for quick note creation:
client:
folder: Efforts/Clients/
properties:
- type
- up
- status
- contact
template: templates/client-intake.md
There are two ways to manage note types:
--wizard guides through all options step by step--config '{...}' with JSON for non-interactive operationFor Claude Code, always prefer Direct Mode with --config.
In terminal mode, the interactive wizard guides you through note type creation and editing.
When called without a terminal (e.g., in Claude Code), JSON is returned:
{
"interactive_required": true,
"action": "add",
"config_schema": {...}
}
Use --config='...' or --yes to pass values directly.
0: Success1: Error (note type not found, validation failed, etc.)npx claudepluginhub wep4you/wep4you-agent-skills --plugin obsidianGuides creation, editing, and verification of skills for AI coding agents using test-driven development with subagent scenarios. Use when authoring or debugging skills.