Use the official Obsidian CLI (obsidian.md/cli) to manage your vault from the terminal. Use this skill when working with Obsidian notes, managing vault files, searching content, handling daily notes, manipulating YAML properties, managing tags, backlinks, tasks, plugins, themes, and Obsidian Publish. Requires Obsidian v1.12+ with the CLI enabled. The Obsidian app must be running for commands to work.
Purpose: Master the official Obsidian CLI for managing vaults, notes, search, daily notes, properties, tags, links, tasks, plugins, themes, and automation from the terminal.
Requirements: Obsidian v1.12.4+ with CLI enabled (Settings → General → Command line interface). The Obsidian app must be running for commands to work.
Vaults Available: Jason (
/Users/jasondeland/dev/Jason), work-notes/work (/Users/jasondeland/dev/work-notes/work), work-notes/notes (/Users/jasondeland/dev/work-notes/notes/notes)
obsidian --version # Check CLI version (v0.5.1)
obsidian --help # Show general help
# Vault targeting (if not using default vault)
obsidian vault=vaultName command ... # Target specific vault
# Common commands
obsidian daily # Open today's daily note
obsidian files # List all files
obsidian search query="topic" # Search vault
obsidian create name="New Note" # Create note
obsidian tags # List all tags
obsidian --version# If 'obsidian: command not found', add to PATH:
echo 'export PATH="$PATH:/Applications/Obsidian.app/Contents/MacOS"' >> ~/.zshrc
source ~/.zshrc
# Or create a symlink:
sudo ln -s /Applications/Obsidian.app/Contents/MacOS/Obsidian /usr/local/bin/obsidian
# Obsidian stores vault configs in:
~/Library/Application\ Support/obsidian/obsidian.json
# Target a specific vault by name (for multi-vault users)
obsidian vault=Jason search query="meeting"
# Target by path
obsidian vault=/Users/jasondeland/dev/work-notes/work search query="project"
obsidian files # List all files (default vault)
obsidian files folder=Projects/Active # List files in folder
obsidian files folder=Bible format=paths # Output paths only
obsidian files total # Count total notes
obsidian folders # List all folders
obsidian folders format=tree # Hierarchy view
obsidian read file="Note Name" # Read by wikilink name
obsidian read path="Folder/Note.md" # Read by exact path
obsidian read file="Meeting Notes" format=json # JSON output
obsidian create name="New Note" # Basic note
obsidian create name="New Note" content="# Hello" # With content
obsidian create name="Script" template="YouTube" # From template
obsidian create name="Draft" --overwrite # Overwrite existing
obsidian create name="Silent Note" --silent # No output
obsidian create name="Project" content="# Project\n\n## Tasks\n- [ ] Item 1" # Multiline
obsidian append file="Note" content="More content here"
obsidian append file="Note" content="\n## Added Section" # Newline first
obsidian append file="Note" content="Log: $(date)" --inline # No trailing newline
obsidian prepend file="Note" content="# Prepended"
obsidian move file="Old Name" to=Archive/ # Move to folder
obsidian move file="Note" to="New Name" # Rename
obsidian move file="Note" to=Archive/New.md # Move and rename
# Note: Wikilinks across vault are automatically updated
obsidian delete file="Note" # Move to Obsidian trash
obsidian delete file="Note" --permanent # Permanent delete
obsidian search query="meeting notes" # Basic search
obsidian search query="second brain" format=json # JSON output
obsidian search query="project" format=paths # Paths only
obsidian search query="meeting" limit=10 # Limit results
obsidian search query="meeting" format=md # Markdown format
obsidian search query="[tag:publish]" # By tag
obsidian search query="[tag:done]" # By tag
obsidian search query="[status:active]" # By property
obsidian search query="[priority:>3]" # Numeric comparison
obsidian search query="[type:meeting]" # By type property
obsidian search query="[due:2026-03-20]" # By date property
obsidian search:open query="review" # Open results in app
obsidian search:open query="[tag:reading]" # With filter
obsidian daily # Open today's daily note
obsidian daily:read # Read today's content
obsidian daily:read --copy # Copy to clipboard
obsidian daily:open date=2026-03-19 # Specific date
obsidian daily:path # Return file path
obsidian daily:append content="- [ ] New task"
obsidian daily:append content="## Morning journal entry"
obsidian daily:prepend content="## Morning"
obsidian daily:append content="Meeting at 10am" date=2026-03-19
# Assuming you have a daily template configured in Obsidian settings
obsidian daily # Opens with template
obsidian daily:append content="- [ ] Review: $(date '+%Y-%m-%d')"
obsidian properties file="Note" # All properties
obsidian property:read file="Note" key=status # Single property
obsidian property:set file="Note" status=active
obsidian property:set file="Note" tags="pkm,obsidian" type=tags
obsidian property:set file="Note" priority=3 type=number
obsidian property:set file="Note" due=2026-04-01 type=date
obsidian property:set file="Note" type=checkbox
obsidian property:set file="Note" project="My Project" type=text
obsidian property:remove file="Note" key=draft
obsidian property:remove file="Note" key=priority
| Type | Example Value | Use Case |
|---|---|---|
text | "Some text" | General text |
list | ["item1","item2"] | Multiple values |
tags | "pkm,notes" | Tag-like values |
number | 3 | Numeric values |
checkbox | true/false | Boolean |
date | 2026-04-01 | Date values |
obsidian tags # All tags (alphabetical)
obsidian tags sort=count # Sort by frequency
obsidian tags sort=count limit=20 # Top 20 tags
obsidian tag tagname=pkm # Notes with #pkm
obsidian tag tagname="tag with spaces" # Quoted tag
obsidian tags:rename old=meeting new=meetings # Rename tag (all notes)
obsidian tags:rename old=meeting new=meetings vault=work-notes
obsidian links file="Note" # Files this note links to
obsidian links file="Note" format=json # JSON output
obsidian backlinks file="Note" # Notes linking to this note
obsidian backlinks file="Meeting Notes" format=json
obsidian unresolved # Broken [[links]]
obsidian orphans # Unlinked notes (no backlinks)
obsidian tasks # All tasks (from Tasks plugin)
obsidian tasks daily # Today's tasks only
obsidian tasks format=json # JSON for scripts
obsidian task:create content="Write report" # Create task
obsidian task:create content="Review PR" tags="work" # With tags
obsidian task:create content="Meeting" due=2026-03-20
obsidian task:complete task=task-id # Mark complete
obsidian task:todo task=task-id # Mark as todo
obsidian task toggle task=task-id # Toggle status
obsidian aliases file="Note" # List aliases
obsidian alias:add file="Note" alias="Short Name"
obsidian alias:remove file="Note" alias="Short Name"
obsidian templates # List templates
obsidian template:read name="Daily" # Read template content
obsidian template:insert name="Meeting" # Insert (copies to clipboard)
obsidian vault # Current vault info
obsidian vaults # List all vaults
obsidian vault:open vault=work-notes # Open vault in Obsidian
obsidian history file="Note" # Version history
obsidian diff file="Note" version=2 # Diff vs current
obsidian history:restore file="Note" version=3 # Restore version
obsidian sync:status # Sync status
obsidian sync:history file="Note" # Sync history
obsidian sync:read file="Note" version=5 # Read sync version
obsidian sync:restore file="Note" version=3 # Restore from sync
obsidian publish:list # List published notes
obsidian publish:status # Site status
obsidian publish:add file="Note" # Publish note
obsidian publish:remove file="Outdated" # Unpublish
obsidian publish:site # Open publish site
obsidian plugins # List installed plugins
obsidian plugin:enable id=dataview # Enable plugin
obsidian plugin:disable id=calendar # Disable plugin
obsidian plugin:reload id=my-plugin # Reload plugin (dev workflow)
obsidian plugin:install id=obsidian-plantuml # Install from community
obsidian themes # List available themes
obsidian theme:set name="Minimal" # Set theme
obsidian theme:install name="Obsidian Nord" # Install theme
obsidian theme:uninstall name="Blue Topaz" # Uninstall theme
obsidian snippets # List CSS snippets
obsidian devtools # Open devtools
obsidian dev:debug # Debug info
obsidian dev:errors # Show errors
obsidian dev:console limit=50 level=error # Console logs
obsidian dev:css selector=".markdown-preview-view"
obsidian dev:dom # DOM inspection
obsidian dev:screenshot path=~/Desktop/vault.png
obsidian eval code="app.vault.getFiles().length"
obsidian eval code="Object.keys(app.plugins.plugins).join(', ')"
obsidian eval code="app.metadataCache.getFileCache(app.vault.getAbstractFileByPath('Note.md'))"
| Format | Command Example | Best Use |
|---|---|---|
json | format=json | Scripts, jq, AI pipelines |
csv | format=csv | Spreadsheets, data analysis |
md | format=md | Readable output, pasting |
paths | format=paths | CLI chains with xargs |
yaml | format=yaml | Config, frontmatter |
tree | format=tree | Folder visualization |
tsv | format=tsv | awk/cut processing |
obsidian search query="meeting" format=json | jq '.[].path'
obsidian files format=paths | xargs wc -l
obsidian tags format=csv > tags.csv
obsidian folders format=tree
Launch the interactive terminal UI for browsing and quick commands:
obsidian # No arguments launches TUI
| Key | Action |
|---|---|
↑/↓ | Navigate file list |
Enter | Open file in Obsidian |
/ | Search by name |
n | New note |
d | Delete (with confirmation) |
r | Rename file |
Tab | Autocomplete |
Ctrl+R | Reverse history search |
Ctrl+L | Clear screen |
q | Quit |
# Open and append to daily note
obsidian daily
obsidian daily:append content="- [ ] Review yesterday's tasks"
obsidian daily:append content="## What went well"
obsidian daily:append content="## Improvement areas"
# Review tasks
obsidian tasks daily
obsidian tasks format=json | jq '.[] | select(.status == "pending")'
# Quick capture
obsidian create name="Inbox/$(date '+%Y-%m-%d-%H%M')" content="# $(date '+%Y-%m-%d')\n\n"
obsidian append file="Inbox" content="Source: "
obsidian tag tagname=inbox
# Search and link
obsidian search query="topic" format=json | jq '.[].path'
obsidian backlinks file="Current Note"
# Get vault stats
obsidian files total
obsidian tags sort=count limit=10
obsidian tasks format=json | jq '[.[] | select(.due <= "2026-03-23")]'
# Find untagged notes
obsidian search query="untagged" format=json
# Archive old notes
obsidian move file="2025/Week 52" to=Archive/2025/
# Set project properties
obsidian property:set file="Project Alpha" status=active type=text
obsidian property:set file="Project Alpha" priority=1 type=number
obsidian property:set file="Project Alpha" tags="work,project" type=tags
# Find all active projects
obsidian search query="[status=active]" format=json | jq '.'
# Update project status
obsidian property:set file="Project Alpha" status=completed
# Search vault for context
obsidian search query="[tag:reference]" format=json > context.json
obsidian tags sort=count limit=20 format=json > top_tags.json
# Create note from AI output
obsidian create name="AI Research/$(date '+%Y%m%d')" content="$(cat ai_output.md)"
obsidian property:set file="AI Research/20260319" tags="ai,research" type=tags
--silent # Suppress confirmation/output
--overwrite # Replace existing content
--inline # No trailing newline
--copy # Copy to clipboard
--permanent # Skip trash
# Use \n for newlines, \t for tabs
obsidian create name="Note" content="# Title\n\n## Section\n\nBody text"
# Or use shell quoting
obsidian create name="Note" content="# Title
## Section
Body text"
# Target specific vault (first parameter)
obsidian vault=Jason search query="meeting"
obsidian vault="work-notes" files total
# Non-default vault paths
obsidian vault=/Users/jasondeland/dev/work-notes/work search query="project"
# With jq
obsidian search query="[tag:project]" format=json | jq '.[] | {name: .name, path: .path}'
# With xargs
obsidian files format=paths | xargs -I {} sh -c 'echo "=== {} ===" && obsidian read path="{}"'
# With grep
obsidian search query="meeting" format=paths | grep -i weekly
# Files
obsidian files obsidian files folder= obsidian files total
obsidian read file= obsidian read path=
obsidian create name= obsidian append file= obsidian move file=
obsidian delete file=
# Search
obsidian search query= obsidian search:open query=
# Daily Notes
obsidian daily obsidian daily:read obsidian daily:append
obsidian daily:path
# Properties
obsidian properties file= obsidian property:set file= obsidian property:remove
obsidian property:read file=
# Tags
obsidian tags obsidian tag tagname= obsidian tags:rename
# Links
obsidian links file= obsidian backlinks file= obsidian unresolved
# Tasks
obsidian tasks obsidian task:create obsidian task:complete
# Vault
obsidian vault obsidian vaults obsidian vault:open
obsidian folders obsidian folders format=tree
# Sync & Publish
obsidian sync:status obsidian publish:list obsidian publish:add
# Plugins & Themes
obsidian plugins obsidian plugin:enable obsidian theme:set
# Developer
obsidian eval code= obsidian dev:screenshot
# macOS: Add to PATH
echo 'export PATH="$PATH:/Applications/Obsidian.app/Contents/MacOS"' >> ~/.zshrc
source ~/.zshrc
# Verify installation
ls -la /Applications/Obsidian.app/Contents/MacOS/Obsidian
# Specify vault explicitly
obsidian vault=VaultName command ...
# Check available vaults
cat ~/Library/Application\ Support/obsidian/obsidian.json
# Remove --silent flag to see output
obsidian create name="Test" # Without --silent
# Check Obsidian is running
# The CLI requires the Obsidian app to be running
obsidian -b command ... # --verbose for debug info