Obsidian CLI Skill
The official Obsidian command-line interface allows you to interact with your vault from the terminal — reading notes, searching, managing properties, handling tasks, and more.
Prerequisites
Verify the CLI is installed and running:
bashobsidian --version obsidian help
Requirements:
- Obsidian v1.12+ (released late 2024)
- Catalyst license or higher (Obsidian Sync, Publish, or community support)
- Obsidian must be running — the CLI communicates via IPC with a live instance
- macOS, Windows, or Linux support
If not installed, download the latest Obsidian installer from https://obsidian.md/download
Key Concepts
IPC-Based Communication
The obsidian-cli works by connecting to a running Obsidian instance via inter-process communication (IPC). It does not manipulate files directly; all commands are executed through Obsidian's API, ensuring proper handling of plugins, sync, and vault structure.
File vs Path Parameters
Two ways to target files:
-
file=<name>— Resolves by name like wikilinks. Searches across folders to find the file. More flexible but slower.- Example:
obsidian read file="My Note"(finds the file regardless of folder) - Best for: Quick access when you know the filename
- Example:
-
path=<path>— Exact path from vault root. No searching, just direct access.- Example:
obsidian read path="Journal/2026-02-28.md"(exact path required) - Best for: Performance-sensitive operations, when you know the exact location
- Example:
Vault Parameter
By default, commands run against the currently active vault. Override with:
bashobsidian read file="Note" vault="My Vault"
Quoting & Escaping
- Spaces in values — Always quote:
name="My Note"notname=My Note - Newlines — Use
\n:content="Line 1\nLine 2" - Tabs — Use
\t:content="Column1\tColumn2"
Flags vs Parameters
- Flags — Boolean options, no value needed:
--verbose,--overwrite,--inline - Parameters — Key=value pairs:
file="Name",query="term",limit=10
Syntax Guide
Basic Command Structure
bashobsidian <command> [parameter=value...] [--flag...]
Examples
bash# Parameters with simple values obsidian read file="Journal" # Parameters with spaces (quoted) obsidian create name="My Daily Note" content="Hello world" # Multiple parameters obsidian search query="TODO" path="Projects" limit=10 # Flags obsidian files folder="Project" --verbose # Mixed obsidian create path="Journal/2026-02-28.md" content="Daily note" --open
File Targeting Patterns
Read a Note by Name
bashobsidian read file="Meeting Notes"
Searches vault for Meeting Notes.md anywhere.
Read by Exact Path
bashobsidian read path="Project/2026-02-28.md"
Reads from exact location; faster for known paths.
Create with Template
bashobsidian create name="New Note" template="Daily Note Template"
List Files in Folder
bashobsidian files folder="Journal"
Command Reference
Commands are organized by category. Use obsidian help <command> for detailed options.
File Operations
read
Read file contents. Returns full text or structured data.
bash# Read by name obsidian read file="My Note" # Read by path obsidian read path="Journal/2026-02-28.md" # Active file (omit file/path params) obsidian read
create
Create a new file with optional content and template.
bash# Simple creation obsidian create name="New Note" # With content obsidian create name="Daily Note" content="Today's note" # With template obsidian create name="Meeting" template="Meeting Template" --open --newtab # With exact path obsidian create path="Journal/2026-02-28.md" content="..." --overwrite
append
Add content to end of file.
bashobsidian append file="My Note" content="New line" # Inline (no newline before appended text) obsidian append file="My Note" content=" continued" --inline
prepend
Add content to beginning of file.
bashobsidian prepend file="My Note" content="Header\n" # Inline obsidian prepend file="My Note" content="[Start] " --inline
delete
Remove a file (sends to trash by default).
bashobsidian delete file="Old Note" # Permanent deletion obsidian delete path="Archive/obsolete.md" --permanent
rename
Change a file's name.
bashobsidian rename file="Old Name" name="New Name"
move
Move file to different folder.
bashobsidian move file="Note" to="Archive" # Move with new name obsidian move path="Journal/old.md" to="Archive/2025-old.md"
open
Open file in Obsidian editor.
bashobsidian open file="Note" # Open in new tab obsidian open file="Note" --newtab
File Information
file
Show metadata about a file.
bashobsidian file file="My Note"
Returns: created date, modified date, size, links, backlinks count.
files
List all files in vault (optionally filtered).
bash# All files obsidian files # By folder obsidian files folder="Journal" # By extension obsidian files ext="md" # With count obsidian files folder="Project" --total
folder
Show folder information.
bashobsidian folder path="Journal" # Specific info obsidian folder path="Journal" info=files # Number of files obsidian folder path="Journal" info=size # Total size obsidian folder path="Journal" info=folders # Number of subfolders
folders
List folders in vault.
bashobsidian folders # Subfolders only obsidian folders folder="Archive" # With count obsidian folders folder="Journal" --total
vault
Show vault information.
bashobsidian vault # All info obsidian vault info=name # Vault name obsidian vault info=path # Vault folder path obsidian vault info=files # Total files obsidian vault info=size # Total vault size
vaults
List all known vaults.
bashobsidian vaults # Verbose (include paths) obsidian vaults --verbose
wordcount
Count words and characters in file.
bashobsidian wordcount file="Chapter 1" # Word count only obsidian wordcount file="Chapter 1" --words # Character count only obsidian wordcount file="Chapter 1" --characters
Searching & Navigation
search
Full-text search vault.
bash# Basic search obsidian search query="TODO" # Limited results obsidian search query="meeting" limit=5 # In folder obsidian search query="TODO" path="Projects" # Case sensitive obsidian search query="MyClass" --case # JSON output obsidian search query="bug" format=json
search:context
Search with matching line context.
bash# Show surrounding lines obsidian search:context query="TODO" path="Journal" # JSON format obsidian search:context query="error" format=json
search:open
Open search dialog in Obsidian.
bashobsidian search:open query="TODO"
Links & References
links
List outgoing links from a file.
bashobsidian links file="My Note" # Count only obsidian links file="My Note" --total
backlinks
List files linking to a target (incoming links).
bashobsidian backlinks file="Project Overview" # Include link counts obsidian backlinks file="Project Overview" --counts # Format output obsidian backlinks file="Project" format=json
aliases
Show aliases for a file (alternative names).
bashobsidian aliases file="Meeting" # Count aliases obsidian aliases file="Meeting" --total # Verbose (include paths) obsidian aliases file="Meeting" --verbose # Aliases for active file obsidian aliases --active
unresolved
List broken/unresolved links in vault.
bashobsidian unresolved # Count only obsidian unresolved --total # Verbose (show source files) obsidian unresolved --verbose # JSON format obsidian unresolved format=json
deadends
List files with no outgoing links.
bashobsidian deadends # Count obsidian deadends --total # Include non-markdown files obsidian deadends --all
orphans
List files with no incoming links (not referenced).
bashobsidian orphans # Count obsidian orphans --total # Include non-markdown obsidian orphans --all
Tags
tags
List all tags in vault with frequencies.
bashobsidian tags # For specific file obsidian tags file="My Note" # By path obsidian tags path="Journal" # With counts obsidian tags --counts # Sort by count obsidian tags --counts sort=count # JSON format obsidian tags format=json # Tags for active file obsidian tags --active
tag
Get info about a specific tag.
bashobsidian tag name=meeting # Count only obsidian tag name=meeting --total # List files with tag obsidian tag name=work --verbose
Tasks & Checklists
tasks
List all tasks in vault.
bashobsidian tasks # Incomplete tasks obsidian tasks --todo # Completed tasks obsidian tasks --done # By file obsidian tasks file="My Note" # By path obsidian tasks path="Journal" # By status (e.g., "x" for done, "-" for in progress) obsidian tasks status="-" # Verbose (group by file with line numbers) obsidian tasks --verbose # JSON format obsidian tasks format=json # Tasks from daily note obsidian tasks --daily
task
Show or update a single task.
bash# Show task at line 5 in Journal/2026-02-28.md obsidian task ref="Journal/2026-02-28.md:5" # Toggle task status obsidian task ref="Journal/2026-02-28.md:5" --toggle # Mark as done obsidian task ref="Journal/2026-02-28.md:5" --done # Mark as incomplete obsidian task ref="Journal/2026-02-28.md:5" --todo # Set custom status (e.g., in progress) obsidian task file="My Note" line=3 status="-"
Properties & Metadata
properties
List all properties in vault with usage counts.
bashobsidian properties # Properties for specific file obsidian properties file="My Note" # By path obsidian properties path="Journal" # With counts obsidian properties --counts # Count specific property obsidian properties name=category --total # Sort by count obsidian properties sort=count # YAML format obsidian properties format=yaml # JSON format obsidian properties format=json # Properties for active file obsidian properties --active
property:set
Set a property on a file.
bashobsidian property:set name=category value=work file="My Note" # With type (auto-inferred if not specified) obsidian property:set name=priority value=high file="Task" type=text # List type obsidian property:set name=tags value="work,urgent" file="Note" type=list # Number type obsidian property:set name=wordcount value=1500 file="Article" type=number # Checkbox obsidian property:set name=reviewed value=true file="Document" type=checkbox # Date obsidian property:set name=deadline value=2026-03-01 file="Task" type=date
property:read
Get a property value from a file.
bashobsidian property:read name=category file="My Note" # By path obsidian property:read name=priority path="Tasks/urgent.md"
property:remove
Delete a property from a file.
bashobsidian property:remove name=draft file="Article" # By path obsidian property:remove name=status path="Archive/old.md"
Templates
templates
List all templates in vault.
bashobsidian templates # Count obsidian templates --total
template:read
Read template content (useful for understanding what template will insert).
bashobsidian template:read name="Daily Note" # Resolve variables obsidian template:read name="Daily Note" --resolve title="2026-02-28"
template:insert
Insert template into active file.
bashobsidian template:insert name="Daily Note"
Bookmarks
bookmarks
List all bookmarks.
bashobsidian bookmarks # Count obsidian bookmarks --total # Verbose (show types) obsidian bookmarks --verbose # JSON format obsidian bookmarks format=json
bookmark
Add a bookmark.
bash# Bookmark a file obsidian bookmark file="Journal/2026-02-28.md" # Bookmark a section obsidian bookmark file="Project Overview" subpath="Goals" # Bookmark a folder obsidian bookmark folder="Archive" # Bookmark a search obsidian bookmark search="TODO" # Bookmark a URL obsidian bookmark url="https://example.com" title="My Site"
Bases (Database-like Tables)
bases
List all base files in vault.
bashobsidian bases
base:views
List views in a base.
bashobsidian base:views file="Contacts" # By path obsidian base:views path="Databases/Projects.md"
base:query
Query a base and return filtered results.
bash# Query a view obsidian base:query file="Contacts" view="Active" # JSON output obsidian base:query file="Projects" view="2026" format=json # CSV output obsidian base:query file="Contacts" view="All" format=csv
base:create
Create a new record in a base.
bashobsidian base:create file="Contacts" view="All" name="John Doe" email="john@example.com" # With initial content obsidian base:create file="Projects" view="Active" name="Project X" content="Details..." # Open after creating obsidian base:create file="Tasks" view="Backlog" name="Task 1" --open
Publishing
publish:status
Check what files have unpublished changes.
bashobsidian publish:status # New files only obsidian publish:status --new # Changed files obsidian publish:status --changed # Deleted files obsidian publish:status --deleted # Count obsidian publish:status --total
publish:add
Publish files to Obsidian Publish.
bash# Publish specific file obsidian publish:add file="Project Overview" # Publish all changed obsidian publish:add --changed
publish:remove
Unpublish a file.
bashobsidian publish:remove file="Archived Note" # By path obsidian publish:remove path="Archive/old.md"
publish:list
List published files.
bashobsidian publish:list # Count obsidian publish:list --total
publish:site
Show Publish site info.
bashobsidian publish:site
publish:open
Open published file in browser.
bashobsidian publish:open file="My Article"
Sync & Version History
sync:status
Check sync status.
bashobsidian sync:status
sync
Pause or resume sync.
bashobsidian sync off # Pause sync obsidian sync on # Resume sync
sync:history
List version history for a file in sync.
bashobsidian sync:history file="My Note" # Count versions obsidian sync:history file="My Note" --total
sync:read
Read a specific sync version.
bashobsidian sync:read file="My Note" version=5
sync:restore
Restore a file to a previous sync version.
bashobsidian sync:restore file="My Note" version=3
sync:deleted
List files deleted in sync.
bashobsidian sync:deleted # Count obsidian sync:deleted --total
sync:open
Open sync history UI.
bashobsidian sync:open file="My Note"
history
List local file history versions.
bashobsidian history file="My Note" # By path obsidian history path="Journal/2026-02-28.md"
history:read
Read a local history version.
bashobsidian history:read file="My Note" version=2
history:restore
Restore from local history.
bashobsidian history:restore file="My Note" version=1
diff
Compare local and sync versions.
bashobsidian diff file="My Note" # Diff specific versions obsidian diff file="My Note" from=1 to=5 # Filter by source obsidian diff file="My Note" filter=local obsidian diff file="My Note" filter=sync
Plugins
plugins
List all installed plugins.
bashobsidian plugins # Core plugins only obsidian plugins filter=core # Community plugins obsidian plugins filter=community # Include versions obsidian plugins --versions # JSON format obsidian plugins format=json
plugins:enabled
List enabled plugins.
bashobsidian plugins:enabled # By type obsidian plugins:enabled filter=core
plugin
Get info about a plugin.
bashobsidian plugin id=dataview
plugin:enable
Enable a plugin.
bashobsidian plugin:enable id=dataview
plugin:disable
Disable a plugin.
bashobsidian plugin:disable id=templater
plugin:install
Install a community plugin.
bash# Install and enable obsidian plugin:install id=obsidian-git --enable # Just install obsidian plugin:install id=dataview
plugin:uninstall
Remove a plugin.
bashobsidian plugin:uninstall id=templater
plugin:reload
Reload a plugin (development use).
bashobsidian plugin:reload id=my-plugin
plugins:restrict
Toggle restricted mode.
bashobsidian plugins:restrict on # Enable restricted mode obsidian plugins:restrict off # Disable restricted mode
Themes
themes
List installed themes.
bashobsidian themes # Include versions obsidian themes --versions
theme
Get current theme or info about a theme.
bashobsidian theme # Show active theme obsidian theme name=Obsidian # Info about a theme
theme:set
Set active theme.
bashobsidian theme:set name=Obsidian # Back to default obsidian theme:set name=""
theme:install
Install community theme.
bashobsidian theme:install name="Minimal" --enable # Just install obsidian theme:install name="Things"
theme:uninstall
Remove theme.
bashobsidian theme:uninstall name="Minimal"
Snippets (CSS)
snippets
List CSS snippets.
bashobsidian snippets
snippets:enabled
List enabled snippets.
bashobsidian snippets:enabled
snippet:enable
Enable a CSS snippet.
bashobsidian snippet:enable name="hide-metadatablock"
snippet:disable
Disable a CSS snippet.
bashobsidian snippet:disable name="custom-colors"
Commands & Hotkeys
commands
List all available Obsidian command IDs.
bashobsidian commands # Filter by prefix obsidian commands filter=editor
command
Execute an Obsidian command.
bashobsidian command id=editor:save-file
hotkeys
List hotkeys (keyboard shortcuts).
bashobsidian hotkeys # Verbose (show if custom or default) obsidian hotkeys --verbose # Include all (even commands without hotkeys) obsidian hotkeys --all # Count obsidian hotkeys --total
hotkey
Get hotkey for a specific command.
bashobsidian hotkey id=editor:save-file --verbose
Workspaces
workspaces
List saved workspaces.
bashobsidian workspaces # Count obsidian workspaces --total
workspace
Show workspace tree.
bashobsidian workspace # Include workspace item IDs obsidian workspace --ids
workspace:save
Save current layout as a workspace.
bashobsidian workspace:save name="Writing" obsidian workspace:save name="Development"
workspace:load
Load a saved workspace.
bashobsidian workspace:load name="Writing"
workspace:delete
Delete a saved workspace.
bashobsidian workspace:delete name="Old Workspace"
Tabs & Windows
tabs
List open tabs.
bashobsidian tabs # Include tab IDs obsidian tabs --ids
tab:open
Open a new tab.
bashobsidian tab:open file="Journal/2026-02-28.md" # Specific group obsidian tab:open group=main-group file="Note" # View type obsidian tab:open view=search
Utility & Navigation
open
Open a file in editor (same as open in File Operations).
bashobsidian open file="Note"
random
Open a random note.
bashobsidian random # From folder obsidian random folder="Journal" # In new tab obsidian random --newtab
random:read
Read a random note.
bashobsidian random:read # From folder obsidian random:read folder="Ideas"
recents
List recently opened files.
bashobsidian recents # Count obsidian recents --total
outline
Show headings in a file.
bashobsidian outline file="Project Plan" # Tree format (default) obsidian outline file="Project Plan" format=tree # Markdown format obsidian outline file="Project Plan" format=md # JSON format obsidian outline file="Project Plan" format=json # Count only obsidian outline file="Project Plan" --total
reload
Reload the vault.
bashobsidian reload
restart
Restart Obsidian completely.
bashobsidian restart
version
Show Obsidian version.
bashobsidian version
Developer Tools
dev:screenshot
Take a screenshot of Obsidian UI.
bashobsidian dev:screenshot path=screenshot.png
dev:console
Show captured console messages.
bashobsidian dev:console # Filter by level obsidian dev:console level=error # Clear buffer obsidian dev:console --clear # Limit output obsidian dev:console limit=20
dev:errors
Show captured errors.
bashobsidian dev:errors # Clear obsidian dev:errors --clear
dev:debug
Attach/detach Chrome DevTools debugger.
bashobsidian dev:debug on # Attach obsidian dev:debug off # Detach
dev:dom
Query DOM elements.
bash# Find elements obsidian dev:dom selector=".cm-editor" # Get text obsidian dev:dom selector=".status-bar" --text # Count matches obsidian dev:dom selector="button" --total # Get attribute obsidian dev:dom selector="a.link" attr=href # Get CSS property obsidian dev:dom selector=".title" css=color
dev:css
Inspect CSS with source locations.
bashobsidian dev:css selector=".heading" # Filter by property obsidian dev:css selector=".text" prop=color
dev:cdp
Run Chrome DevTools Protocol command.
bashobsidian dev:cdp method=Page.printToPDF params='{"path":"output.pdf"}'
dev:mobile
Toggle mobile emulation.
bashobsidian dev:mobile on # Enable obsidian dev:mobile off # Disable
devtools
Toggle Electron dev tools.
bashobsidian devtools
eval
Execute JavaScript in Obsidian context.
bashobsidian eval code='app.vault.getMarkdownFiles().length' # Get custom object obsidian eval code='app.workspace.activeEditor?.file?.name'
Opening Files After Creation/Modification
Always open newly created or modified files in a new tab to avoid replacing the user's current view:
bashobsidian open file="New Note" --newtab obsidian create name="Meeting" template="Meeting Template" --open --newtab
Common Patterns for GOBI Vault
Reading Daily Notes
bash# Today's journal obsidian read file="Journal" # Specific date obsidian read path="Journal/2026-02-28.md"
Appending to Journal
bashobsidian append file="Journal" content="\n## Reflection\n[Your thoughts]"
Finding Todos
bash# All incomplete tasks obsidian tasks --todo # TODOs in projects obsidian search query="TODO" path="Projects"
Getting File Properties
bash# Read specific property obsidian property:read name=tags file="Article" # All properties on a file obsidian properties file="My Note"
Searching Your Vault
bash# Find by keyword obsidian search query="machine learning" limit=10 # In specific folder obsidian search query="meeting" path="Work" # Case-sensitive obsidian search query="MyClass" --case
Managing Projects
bash# List all project files obsidian files folder="Projects" # Get project outline obsidian outline file="Project X" # Search project issues obsidian search query="BUG:" path="Projects/ProjectX"
Working with Tags
bash# All tags and their counts obsidian tags --counts # Files with tag obsidian tag name=important --verbose # Tags in article obsidian tags file="Article"
Discovering Options
Every command has built-in help. Use obsidian help to learn more:
bash# List all commands obsidian help # Help for specific command obsidian help read obsidian help search obsidian help property:set # Short help (in command output) obsidian <command>
Quality Checklist
Before using obsidian CLI commands:
- Obsidian is running and responding
- Correct vault targeted (if using
vault=parameter) - File name or path is correct
- Use
file=for name-based lookup - Use
path=for exact vault-root paths
- Use
- Parameters quoted if containing spaces
- Output format appropriate (json/tsv/csv available for most commands)
- Understand the difference between metadata (properties/tags) and content
Error Handling
Common Issues
"Obsidian is not running"
- Solution: Start Obsidian before running CLI commands. The CLI requires IPC connection.
"Vault not found"
- Solution: Use
obsidian vaultsto list available vaults, then specifyvault="Name"
"File not found" (with file= parameter)
- Solution: Verify file exists with
obsidian files. Consider usingpath=instead for exact match.
"Permission denied"
- Solution: Ensure you have read/write permissions in Obsidian vault folder and plugins are not interfering.
Debug Commands
bash# Check vault status obsidian vault # List all files obsidian files --total # Test search obsidian search query="test" limit=1 # Check version obsidian version
Next Steps: Run obsidian help to explore specific commands, or use pattern examples above for GOBI vault operations.


