4e43a03f8c
Adds CSS Snippets, Commands & Hotkeys, Obsidian Bases, History, Workspace & Tabs, and Diff sections to command-reference.md. Expands existing sections with missing commands (search:context, daily:path, random, rename, bookmark add, plugins:restrict, theme management, dev DOM/CSS/CDP tools, restart). Documents all 8 output format options. Updates SKILL.md command table and count to 130+. Bumps version to 1.2.0. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
632 lines
20 KiB
Markdown
632 lines
20 KiB
Markdown
# Obsidian CLI — Full Command Reference
|
|
|
|
Complete reference for all official Obsidian CLI commands (v1.12+).
|
|
|
|
**Syntax**: `obsidian [vault] <command> [subcommand] [key=value ...] [flags]`
|
|
|
|
All parameters use `key=value` syntax. Quote values containing spaces: `content="hello world"`.
|
|
|
|
---
|
|
|
|
## Table of Contents
|
|
|
|
1. [Files](#files)
|
|
2. [Daily Notes](#daily-notes)
|
|
3. [Search](#search)
|
|
4. [Properties](#properties)
|
|
5. [Tags](#tags)
|
|
6. [Tasks](#tasks)
|
|
7. [Links](#links)
|
|
8. [Bookmarks](#bookmarks)
|
|
9. [Templates](#templates)
|
|
10. [Plugins](#plugins)
|
|
11. [Sync](#sync)
|
|
12. [Themes](#themes)
|
|
13. [CSS Snippets](#css-snippets)
|
|
14. [Commands & Hotkeys](#commands--hotkeys)
|
|
15. [Obsidian Bases](#obsidian-bases)
|
|
16. [History](#history)
|
|
17. [Workspace & Tabs](#workspace--tabs)
|
|
18. [Diff](#diff)
|
|
19. [Developer](#developer)
|
|
20. [Vault & System](#vault--system)
|
|
|
|
---
|
|
|
|
## Files
|
|
|
|
File operations: read, write, create, move, delete, list.
|
|
|
|
### Reading Notes
|
|
|
|
```bash
|
|
obsidian read path="folder/note.md"
|
|
```
|
|
|
|
Prints raw markdown content of a note to stdout. Path is vault-relative.
|
|
|
|
### Creating Notes
|
|
|
|
```bash
|
|
obsidian create path="folder/note" content="# Title\n\nBody text"
|
|
obsidian create path="folder/note" template="template-name"
|
|
```
|
|
|
|
- Path should **not** include `.md` — it is appended automatically.
|
|
- Use `template=` to create from a template file.
|
|
- Use `content=` to set initial content directly.
|
|
|
|
### Appending & Prepending
|
|
|
|
```bash
|
|
obsidian append path="folder/note.md" content="Appended text"
|
|
obsidian prepend path="folder/note.md" content="Prepended text"
|
|
```
|
|
|
|
- `append` adds content at the end of the file.
|
|
- `prepend` adds content after the frontmatter (not at byte 0).
|
|
|
|
### Moving & Renaming
|
|
|
|
```bash
|
|
obsidian move path="old/path/note.md" to="new/path/note.md"
|
|
```
|
|
|
|
- `to=` is the full vault-relative target path including the `.md` extension.
|
|
- Can be used to move, rename, or both in a single command.
|
|
|
|
### Deleting
|
|
|
|
```bash
|
|
obsidian delete path="folder/note.md" # Moves to trash
|
|
obsidian delete path="folder/note.md" permanent # Permanent deletion
|
|
```
|
|
|
|
### File Discovery
|
|
|
|
```bash
|
|
obsidian files # List all files in vault
|
|
obsidian files ext=md # Filter by extension
|
|
obsidian files folder="subfolder" # Files in specific folder
|
|
obsidian files total # Just the file count
|
|
obsidian folders # List all folders
|
|
obsidian file path="folder/note.md" # File info (size, created, modified dates)
|
|
```
|
|
|
|
### Random Notes
|
|
|
|
```bash
|
|
obsidian random # Open a random note in Obsidian
|
|
obsidian random:read # Print content of a random note to stdout
|
|
```
|
|
|
|
### Renaming
|
|
|
|
```bash
|
|
obsidian rename path="folder/note.md" name="new-name"
|
|
```
|
|
|
|
- `name=` is the new filename only (no path, no `.md` extension).
|
|
- Use `move` when you also want to change the folder.
|
|
|
|
---
|
|
|
|
## Daily Notes
|
|
|
|
Operations on the daily note (requires Daily Notes core plugin enabled).
|
|
|
|
```bash
|
|
obsidian daily # Open today's daily note in Obsidian
|
|
obsidian daily:read # Print today's daily note content to stdout
|
|
obsidian daily:append content="text" # Append content to today's note
|
|
obsidian daily:prepend content="text" # Prepend content (after frontmatter)
|
|
obsidian daily:path # Print vault-relative path of today's note
|
|
```
|
|
|
|
**Notes:**
|
|
- `daily:prepend` inserts content after the frontmatter block, not at the very beginning.
|
|
- If today's note doesn't exist, `daily` will create it (using the configured template if set).
|
|
- Daily note format/folder are configured in Obsidian's Daily Notes plugin settings.
|
|
|
|
---
|
|
|
|
## Search
|
|
|
|
Full-text search across the vault.
|
|
|
|
```bash
|
|
obsidian search query="search text"
|
|
obsidian search query="text" path="folder" # Scope to folder
|
|
obsidian search query="text" limit=10 # Limit results
|
|
obsidian search query="text" format=json # JSON output (array of file paths)
|
|
obsidian search query="text" matches # Accepted but returns file paths only
|
|
obsidian search query="text" case # Case-sensitive search
|
|
```
|
|
|
|
**Parameters:**
|
|
- `query=` — Search term (required)
|
|
- `path=` — Restrict search to a folder
|
|
- `limit=` — Maximum number of results
|
|
- `format=json` — Returns a JSON array of matching file paths: `["folder/note.md", ...]`
|
|
- `matches` — Flag accepted by the CLI but does not return match context/snippets in v1.12
|
|
- `case` — Enable case-sensitive matching
|
|
|
|
### Search with Context
|
|
|
|
```bash
|
|
obsidian search:context query="search text"
|
|
obsidian search:context query="text" path="folder" limit=10
|
|
obsidian search:context query="text" case
|
|
obsidian search:context query="text" format=json
|
|
```
|
|
|
|
Returns matching lines with surrounding context (not just file paths). Useful when you need to see the actual content that matched rather than just file paths.
|
|
|
|
### Open Search View
|
|
|
|
```bash
|
|
obsidian search:open query="search text"
|
|
```
|
|
|
|
Opens the Obsidian search panel in the UI with the given query.
|
|
|
|
---
|
|
|
|
## Properties
|
|
|
|
Manage frontmatter (YAML metadata) on notes.
|
|
|
|
### Read All Properties
|
|
|
|
```bash
|
|
obsidian properties path="note.md"
|
|
```
|
|
|
|
### Read Single Property
|
|
|
|
```bash
|
|
obsidian property:read path="note.md" name="status"
|
|
```
|
|
|
|
### Set Property
|
|
|
|
```bash
|
|
obsidian property:set path="note.md" name="status" value="active"
|
|
obsidian property:set path="note.md" name="tags" value="[project, alpha]"
|
|
obsidian property:set path="note.md" name="date" value="2026-02-27"
|
|
```
|
|
|
|
### Remove Property
|
|
|
|
```bash
|
|
obsidian property:remove path="note.md" name="draft"
|
|
```
|
|
|
|
### Aliases
|
|
|
|
```bash
|
|
obsidian aliases path="note.md"
|
|
```
|
|
|
|
Lists all aliases defined in the note's frontmatter.
|
|
|
|
---
|
|
|
|
## Tags
|
|
|
|
Tag discovery and filtering.
|
|
|
|
```bash
|
|
obsidian tags # List all tags in the vault
|
|
obsidian tags counts # Tags with usage counts
|
|
obsidian tags counts sort=count # Sorted by frequency (most used first)
|
|
obsidian tags path="note.md" # Tags in a specific file
|
|
obsidian tag name="project/alpha" # List notes with a specific tag
|
|
```
|
|
|
|
**Notes:**
|
|
- Nested tags are supported (e.g., `project/alpha`).
|
|
- Tags from both frontmatter and inline `#tag` syntax are included.
|
|
|
|
---
|
|
|
|
## Tasks
|
|
|
|
Query and manage checkbox tasks across the vault.
|
|
|
|
### Querying Tasks
|
|
|
|
```bash
|
|
obsidian tasks # All tasks (same as tasks all in v1.12)
|
|
obsidian tasks all # All tasks (complete + incomplete)
|
|
obsidian tasks done # Only completed tasks
|
|
obsidian tasks path="note.md" # Tasks in a specific file
|
|
obsidian tasks daily # Tasks in today's daily note
|
|
```
|
|
|
|
> **Note:** In v1.12, `tasks` with no arguments returns all tasks (complete + incomplete), identical to `tasks all`. Filtering to incomplete-only is not currently supported without post-processing (e.g. pipe to `grep "\[ \]"`).
|
|
|
|
### Toggling Task Status
|
|
|
|
```bash
|
|
obsidian task path="note.md" line=12 toggle
|
|
```
|
|
|
|
Toggles the checkbox on the specified line number between `- [ ]` and `- [x]`.
|
|
|
|
---
|
|
|
|
## Links
|
|
|
|
Graph analysis and link management.
|
|
|
|
```bash
|
|
obsidian backlinks path="note.md" # Notes linking TO this note
|
|
obsidian backlinks path="note.md" counts # With link counts per file
|
|
obsidian links path="note.md" # Outgoing links FROM this note
|
|
obsidian unresolved # All unresolved [[wikilinks]]
|
|
obsidian orphans # Notes with no incoming or outgoing links
|
|
obsidian deadends # Notes with no outgoing links
|
|
```
|
|
|
|
---
|
|
|
|
## Bookmarks
|
|
|
|
Manage Obsidian bookmarks (requires Bookmarks core plugin).
|
|
|
|
```bash
|
|
obsidian bookmarks # List all bookmarks
|
|
obsidian bookmark file="folder/note.md" # Bookmark a note
|
|
obsidian bookmark file="folder/note.md" subpath="#Heading" # Bookmark a heading
|
|
obsidian bookmark folder="projects" # Bookmark a folder
|
|
obsidian bookmark search="query text" title="My Search" # Bookmark a search
|
|
obsidian bookmark url="https://example.com" title="Link" # Bookmark a URL
|
|
```
|
|
|
|
---
|
|
|
|
## Templates
|
|
|
|
Work with note templates (requires Templates or Templater plugin).
|
|
|
|
```bash
|
|
obsidian templates # List available templates
|
|
obsidian template:read name="weekly-review" # Read template content
|
|
obsidian template:read name="weekly-review" resolve title="My Note" # Render with variables
|
|
obsidian template:insert name="weekly-review" # Insert template into the active Obsidian UI file
|
|
```
|
|
|
|
**Parameters:**
|
|
- `name=` — Template name (without path prefix or extension)
|
|
- `resolve` — Process template variables (`{{date}}`, `{{title}}`, etc.)
|
|
- Title and other variables can be passed as `key=value` for template rendering.
|
|
|
|
> **Note:** `template:insert` inserts into whichever file is currently active in the Obsidian UI — it does not accept a `path=` parameter. If no file is open, it returns `Error: No active editor. Open a file first.` To create a new file from a template, use `obsidian create path="..." template="..."` instead.
|
|
|
|
---
|
|
|
|
## Plugins
|
|
|
|
Manage community and core plugins.
|
|
|
|
```bash
|
|
obsidian plugins # List all plugins (core + community)
|
|
obsidian plugins:enabled # Only enabled plugins
|
|
obsidian plugins versions # Plugins with version numbers (community only)
|
|
obsidian plugins:restrict # Show restricted mode status
|
|
obsidian plugins:restrict on # Enable restricted mode (disables community plugins)
|
|
obsidian plugins:restrict off # Disable restricted mode
|
|
obsidian plugin id="dataview" # Get info about a specific plugin
|
|
obsidian plugin:enable id="canvas" # Enable a plugin
|
|
obsidian plugin:disable id="canvas" # Disable a plugin
|
|
obsidian plugin:install id="dataview" # Install from community plugins
|
|
obsidian plugin:uninstall id="dataview" # Uninstall a community plugin
|
|
obsidian plugin:reload id="my-plugin" # Reload a plugin (useful for dev)
|
|
```
|
|
|
|
> **Note:** `plugins versions` only shows version numbers for community plugins. Core (built-in) plugins share Obsidian's version and display blank version fields.
|
|
|
|
---
|
|
|
|
## Sync
|
|
|
|
Manage Obsidian Sync (requires active Sync subscription).
|
|
|
|
```bash
|
|
obsidian sync # Show sync status summary
|
|
obsidian sync on # Resume syncing
|
|
obsidian sync off # Pause syncing
|
|
obsidian sync:status # Detailed sync status
|
|
obsidian sync:history path="note.md" # Version history for a file
|
|
obsidian sync:read path="note.md" version=3 # Read a specific version
|
|
obsidian sync:restore path="note.md" version=3 # Restore a previous version
|
|
obsidian sync:deleted # List files deleted via sync
|
|
obsidian sync:open # Open the Sync history view in the UI
|
|
```
|
|
|
|
---
|
|
|
|
## Themes
|
|
|
|
Manage appearance themes.
|
|
|
|
```bash
|
|
obsidian themes # List installed themes
|
|
obsidian themes versions # List installed themes with version numbers
|
|
obsidian theme # Show the currently active theme
|
|
obsidian theme name="Minimal" # Get details about a specific theme
|
|
obsidian theme:set name="Minimal" # Switch to a theme
|
|
obsidian theme:set name="" # Switch back to default theme
|
|
obsidian theme:install name="Minimal" # Install a community theme
|
|
obsidian theme:install name="Minimal" enable # Install and activate immediately
|
|
obsidian theme:uninstall name="Minimal" # Uninstall a theme
|
|
```
|
|
|
|
---
|
|
|
|
## CSS Snippets
|
|
|
|
Manage custom CSS snippet files (snippets live in `.obsidian/snippets/`).
|
|
|
|
```bash
|
|
obsidian snippets # List all installed CSS snippets
|
|
obsidian snippets:enabled # List only enabled snippets
|
|
obsidian snippet:enable name="my-style" # Enable a snippet
|
|
obsidian snippet:disable name="my-style" # Disable a snippet
|
|
```
|
|
|
|
---
|
|
|
|
## Commands & Hotkeys
|
|
|
|
Execute any Obsidian command by its ID, and inspect hotkey bindings.
|
|
|
|
```bash
|
|
obsidian commands # List all available command IDs
|
|
obsidian command id="app:reload" # Execute a command by ID
|
|
obsidian command id="editor:toggle-bold" # Example: toggle bold in active editor
|
|
obsidian hotkeys # List all hotkeys (tab-separated: id \t keybinding)
|
|
obsidian hotkey id="app:open-settings" # Get hotkey for a specific command
|
|
obsidian hotkey id="app:open-settings" verbose # Show if custom or default
|
|
```
|
|
|
|
**Typical workflow — find and run a command:**
|
|
|
|
```bash
|
|
obsidian commands | grep "canvas" # Find canvas-related command IDs
|
|
obsidian command id="canvas:new-file" # Execute the matched command
|
|
```
|
|
|
|
**Getting plugin command IDs:**
|
|
|
|
```bash
|
|
obsidian commands | grep "dataview" # List all Dataview plugin commands
|
|
```
|
|
|
|
---
|
|
|
|
## Obsidian Bases
|
|
|
|
Obsidian Bases (v1.12+) is a built-in database feature. Base files (`.base`) store structured data and support multiple views.
|
|
|
|
```bash
|
|
obsidian bases # List all .base files in vault
|
|
obsidian base:query file="tasks" format=json # Query default view of a base
|
|
obsidian base:query file="tasks" view="Kanban" # Query a specific view
|
|
obsidian base:query path="folder/tasks.base" format=csv # Query by path
|
|
obsidian base:views file="tasks" # List all views in a base file
|
|
obsidian base:create file="tasks" title="Buy milk" # Add an item to a base
|
|
```
|
|
|
|
**Supported output formats for `base:query`:** `json` (default), `csv`, `tsv`, `md`, `paths`
|
|
|
|
---
|
|
|
|
## History
|
|
|
|
File version history (built-in to Obsidian, separate from Sync). Requires the File Recovery core plugin.
|
|
|
|
```bash
|
|
obsidian history:list # List all files that have history
|
|
obsidian history path="folder/note.md" # List versions of a specific file
|
|
obsidian history:read path="folder/note.md" # Read the latest saved version
|
|
obsidian history:read path="folder/note.md" version=3 # Read a specific version
|
|
obsidian history:restore path="folder/note.md" version=3 # Restore a version
|
|
obsidian history:open path="folder/note.md" # Open file recovery UI for a file
|
|
```
|
|
|
|
> **Note:** History is distinct from [Sync version history](#sync). History uses Obsidian's built-in File Recovery snapshots; Sync history uses Obsidian Sync cloud versions.
|
|
|
|
---
|
|
|
|
## Workspace & Tabs
|
|
|
|
Inspect and manage the Obsidian workspace layout and open tabs.
|
|
|
|
```bash
|
|
obsidian workspace # Show the full workspace tree
|
|
obsidian tabs # List all open tabs (flat list)
|
|
obsidian tab:open file="folder/note.md" # Open a file in a new tab
|
|
obsidian tab:open view="graph" # Open a view type in a new tab
|
|
```
|
|
|
|
---
|
|
|
|
## Diff
|
|
|
|
Compare local and sync versions of a file.
|
|
|
|
```bash
|
|
obsidian diff path="folder/note.md" # List available versions (local + sync)
|
|
obsidian diff path="folder/note.md" from=1 to=2 # Diff two specific versions
|
|
obsidian diff path="folder/note.md" filter=local # Show only local versions
|
|
obsidian diff path="folder/note.md" filter=sync # Show only sync versions
|
|
```
|
|
|
|
---
|
|
|
|
## Developer
|
|
|
|
Debugging and development tools.
|
|
|
|
### Screenshots
|
|
|
|
```bash
|
|
obsidian dev:screenshot path="folder/screenshot.png"
|
|
```
|
|
|
|
Takes a screenshot of the Obsidian window and saves it. **Path must be vault-relative** — absolute filesystem paths are silently ignored.
|
|
|
|
### JavaScript Evaluation
|
|
|
|
```bash
|
|
obsidian eval code="app.vault.getFiles().length"
|
|
obsidian eval code="app.vault.getMarkdownFiles().map(f => f.path).join('\n')"
|
|
```
|
|
|
|
Executes arbitrary JavaScript in the Obsidian app context. Has access to the full Obsidian API (`app`, `app.vault`, `app.workspace`, `app.metadataCache`, etc.).
|
|
|
|
### Console & Errors
|
|
|
|
```bash
|
|
obsidian dev:debug on # Start capturing console output (required before dev:console)
|
|
obsidian dev:debug off # Stop capturing console output
|
|
obsidian dev:console limit=20 # Recent console output (requires dev:debug on first)
|
|
obsidian dev:errors # Recent error messages
|
|
```
|
|
|
|
> **Note:** `dev:console` will return an error unless `dev:debug on` has been run first in the current session.
|
|
|
|
### DOM Inspection
|
|
|
|
```bash
|
|
obsidian dev:dom selector=".view-content" # Get outerHTML of first match
|
|
obsidian dev:dom selector=".view-content" all # Get all matches
|
|
obsidian dev:dom selector=".view-content" text # Get text content
|
|
obsidian dev:dom selector=".view-content" total # Count matching elements
|
|
obsidian dev:dom selector=".view-content" attr=class # Get an attribute value
|
|
obsidian dev:dom selector=".view-content" css=color # Get a CSS property value
|
|
```
|
|
|
|
### CSS Inspection
|
|
|
|
```bash
|
|
obsidian dev:css selector=".view-content" # Inspect CSS with source locations
|
|
obsidian dev:css selector=".view-content" prop=color # Filter by CSS property name
|
|
```
|
|
|
|
### Chrome DevTools Protocol
|
|
|
|
```bash
|
|
obsidian devtools # Toggle Electron DevTools panel
|
|
obsidian dev:cdp method="Runtime.evaluate" params='{"expression":"1+1"}' # Run a CDP command
|
|
```
|
|
|
|
### Mobile Emulation
|
|
|
|
```bash
|
|
obsidian dev:mobile on # Enable mobile emulation
|
|
obsidian dev:mobile off # Disable mobile emulation
|
|
```
|
|
|
|
---
|
|
|
|
## Vault & System
|
|
|
|
### Vault Information
|
|
|
|
```bash
|
|
obsidian vault # Current vault: name, path, file/folder counts
|
|
obsidian vaults # List all known vaults
|
|
```
|
|
|
|
### Other Utilities
|
|
|
|
```bash
|
|
obsidian version # Obsidian version info
|
|
obsidian outline path="note.md" # Heading structure of a note
|
|
obsidian wordcount path="note.md" # Word and character count
|
|
obsidian recents # Recently opened files
|
|
obsidian reload # Reload the vault (re-index)
|
|
obsidian restart # Restart the Obsidian app
|
|
```
|
|
|
|
---
|
|
|
|
## Output Formatting & Piping
|
|
|
|
The CLI outputs plain text by default, ideal for piping into Unix tools.
|
|
|
|
### Supported `format=` values
|
|
|
|
| Format | Description | Best for |
|
|
|---|---|---|
|
|
| `text` | Plain text (default) | Piping to grep/awk/sed |
|
|
| `json` | JSON array or object | Processing with jq, AI agents |
|
|
| `csv` | Comma-separated values | Spreadsheet import |
|
|
| `tsv` | Tab-separated values | Shell parsing with cut/awk |
|
|
| `yaml` | YAML output | Config-style processing |
|
|
| `md` | Markdown table | Embedding results in notes |
|
|
| `paths` | One path per line | Batch file operations |
|
|
| `tree` | Tree view | Visual hierarchy |
|
|
|
|
Not all formats are supported by every command. Use `text` or `json` when in doubt.
|
|
|
|
### Examples
|
|
|
|
```bash
|
|
# Count notes in a folder
|
|
obsidian files folder="projects" | wc -l
|
|
|
|
# Find notes with a specific tag, then read them
|
|
obsidian tag name="urgent" | while read -r note; do
|
|
echo "=== $note ==="
|
|
obsidian read path="$note"
|
|
done
|
|
|
|
# Export search results as JSON and process with jq
|
|
# format=json returns an array of file path strings: ["folder/note.md", ...]
|
|
obsidian search query="meeting" format=json | jq '.[]'
|
|
|
|
# Query a base as CSV
|
|
obsidian base:query file="tasks" format=csv
|
|
|
|
# Filter console errors (requires dev:debug on first)
|
|
obsidian dev:debug on
|
|
obsidian dev:console limit=50 | grep -i error
|
|
```
|
|
|
|
---
|
|
|
|
## Multi-Vault Usage
|
|
|
|
When working with multiple vaults, pass the vault name as the **first argument** (before the command):
|
|
|
|
```bash
|
|
obsidian "Personal" daily:read
|
|
obsidian "Work" search query="standup"
|
|
obsidian "Archive" files total
|
|
```
|
|
|
|
If the vault name contains spaces, quote it. The vault name must match what's shown in `obsidian vaults`.
|
|
|
|
---
|
|
|
|
## Headless / Server Setup (Linux)
|
|
|
|
For running Obsidian CLI on a headless Linux server (useful for AI agent integration):
|
|
|
|
1. Install the `.deb` package (not snap — snap confinement breaks IPC)
|
|
2. Install and start `xvfb`: `Xvfb :5 -screen 0 1920x1080x24 &`
|
|
3. Start Obsidian under xvfb: `DISPLAY=:5 obsidian &`
|
|
4. Run CLI commands: `DISPLAY=:5 obsidian daily:read`
|
|
|
|
**Systemd note**: If running as a service, ensure `PrivateTmp=false` so the IPC socket is accessible.
|
|
|
|
**Stderr filtering**: Headless environments produce harmless GPU warnings. Filter with:
|
|
|
|
```bash
|
|
DISPLAY=:5 obsidian search query="test" 2>/dev/null
|
|
```
|