Obsidian CLI Skill
SkillSearchControl Obsidian from the terminal using the `obsidian` CLI. Use when the agent needs to open notes, search the vault inside Obsidian, append/prepend content to the active file, create notes from templates, manage properties, check backlinks/orphans, query Bases, or interact with the running Obsidian app. Requires Obsidian 1.12+ running.
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the Obsidian CLI Skill skill
What this skill tells your AI
The instructions your AI receives, as published by kv0906/pm-kit in .claude/skills/obsidian-cli/SKILL.md and read by ahel’s review.
Control the running Obsidian app from the terminal. Supplementary tool alongside Read/Write/Edit, Glob, Grep, QMD, and Neo4j.
Prerequisites
- Obsidian 1.12+ running (early access, Catalyst license)
- CLI registered: Settings > General > Command line interface
- Templates plugin: Settings > Core Plugins > Templates > Template folder →
_templates - PATH:
/Applications/Obsidian.app/Contents/MacOS(in~/.zprofile)
Important: Noisy Output
The CLI outputs Loading updated app package... to stdout on every invocation. Always filter with grep -v:
obsidian orphans total 2>/dev/null | grep -v "Loading updated" # correct — clean output
obsidian orphans total # noisy output in agent context
Shorthand for all examples below: 2>/dev/null | grep -v "Loading updated" is abbreviated as 2>/dev/null for readability, but always include the full filter in practice.
When to Use CLI vs File Tools
| Scenario | Use CLI | Use File Tools |
|---|---|---|
| Open a note in Obsidian UI | obsidian open | No equivalent |
| Read/write file content | Either works | Prefer Read/Write/Edit |
| Search vault content | obsidian search | Prefer Grep/QMD |
| Open today's daily note in Obsidian | obsidian daily | No equivalent |
| Append task to daily note | obsidian daily:append | Either |
| Create note from template | obsidian create template=X | Manual template apply |
| Check backlinks/orphans/unresolved | obsidian backlinks/orphans | Manual grep |
| Set/read properties (frontmatter) | obsidian property:set | Edit tool |
| Query a Base view | obsidian base:query | No equivalent |
| Execute Obsidian commands | obsidian command | No equivalent |
Rule of thumb: CLI for Obsidian-app-specific actions (open files, trigger commands, query Bases, graph relationships). File tools for direct file manipulation.
Agent Integration Patterns
Keeper — Supplementary Health Checks
# Quick vault health stats (supplement Python/Neo4j checks)
obsidian unresolved verbose 2>/dev/null | grep -v "Loading updated"
obsidian orphans total 2>/dev/null | grep -v "Loading updated"
obsidian deadends total 2>/dev/null | grep -v "Loading updated"
Scribe — Quick Capture
# Fast append to daily note (no file path needed)
obsidian daily:append content="- [ ] Review TPM progress" silent 2>/dev/null
# Atomic frontmatter update
obsidian property:set name=status value=shipped path="prd/xmarket/checkout.md" 2>/dev/null
# Template-based note creation
obsidian create name="New PRD" template=prd silent 2>/dev/null
# Surface created note in Obsidian
obsidian open path="decisions/xmarket/2026-02-11-payment-provider.md" newtab 2>/dev/null
Scout — Fallback Search
# Backlinks via Obsidian's graph (alternative to Neo4j)
obsidian backlinks file=Note 2>/dev/null
# Quick text search (alternative to QMD)
obsidian search query="payment provider" 2>/dev/null
Today — Workflow Touchpoints
# Phase 0: Ensure daily note visible in Obsidian
obsidian daily silent 2>/dev/null
# Phase 3: Quick health stats
obsidian unresolved total 2>/dev/null
obsidian orphans total 2>/dev/null
# Phase 5: Surface daily note
obsidian open path="daily/2026-02-11.md" 2>/dev/null
Command Reference
Vault & File Targeting
# Auto-detects vault from CWD
obsidian daily 2>/dev/null
# Target specific vault
obsidian vault=Notes daily 2>/dev/null
# By name (wikilink resolution)
obsidian read file=Recipe 2>/dev/null
# By exact path
obsidian read path="prd/xmarket/checkout.md" 2>/dev/null
Daily Notes
obsidian daily 2>/dev/null # Open today's daily note
obsidian daily:read 2>/dev/null # Read daily note contents
obsidian daily:append content="- [ ] Task" 2>/dev/null # Append to daily note
obsidian daily:prepend content="## Morning" 2>/dev/null # Prepend after frontmatter
obsidian daily:append content="text" silent 2>/dev/null # Append without opening
Files & Folders
obsidian files 2>/dev/null # List all files
obsidian files folder=prd 2>/dev/null # List files in folder
obsidian files ext=md total 2>/dev/null # Count .md files
obsidian open file=Note 2>/dev/null # Open a file
obsidian open file=Note newtab 2>/dev/null # Open in new tab
obsidian create name="New Note" 2>/dev/null # Create file
obsidian create name=Note template=prd 2>/dev/null # Create from template
obsidian create name=Note content="text" silent overwrite 2>/dev/null
obsidian read file=Note 2>/dev/null # Read file contents
obsidian append file=Note content="new line" 2>/dev/null
obsidian prepend file=Note content="top line" 2>/dev/null
obsidian move file=Note to="archive/" 2>/dev/null
obsidian delete file=Note 2>/dev/null # Trash (recoverable)
Search
obsidian search query="meeting notes" 2>/dev/null # Search vault
obsidian search query="TODO" path=daily 2>/dev/null # Search in folder
obsidian search query="bug" total 2>/dev/null # Count matches
obsidian search query="fix" matches 2>/dev/null # Show match context
obsidian search query="test" format=json 2>/dev/null # JSON output
Links & Graph
obsidian backlinks file=Note 2>/dev/null # Backlinks to a file
obsidian backlinks file=Note counts 2>/dev/null # With link counts
obsidian links file=Note 2>/dev/null # Outgoing links from a file
obsidian unresolved 2>/dev/null # Broken/unresolved links
obsidian unresolved verbose 2>/dev/null # Include source files
obsidian orphans 2>/dev/null # Files with no incoming links
obsidian orphans total 2>/dev/null # Count orphans
obsidian deadends 2>/dev/null # Files with no outgoing links
Properties (Frontmatter)
obsidian properties file=Note 2>/dev/null # List properties
obsidian properties all counts 2>/dev/null # All vault properties
obsidian property:read name=status file=Note 2>/dev/null # Read a property
obsidian property:set name=status value=done file=Note 2>/dev/null # Set a property
obsidian property:set name=tags value="[a,b]" type=list file=Note 2>/dev/null
obsidian property:remove name=old_prop file=Note 2>/dev/null
Tags
obsidian tags all counts 2>/dev/null # All tags with counts
obsidian tags file=Note 2>/dev/null # Tags in a file
obsidian tag name=project verbose 2>/dev/null # Tag info with file list
Tasks
obsidian tasks 2>/dev/null # Tasks in active file
obsidian tasks daily 2>/dev/null # Tasks from daily note
obsidian tasks daily todo 2>/dev/null # Incomplete daily tasks
obsidian tasks all todo 2>/dev/null # All incomplete tasks
obsidian task daily line=3 toggle 2>/dev/null # Toggle a daily task
Bases
obsidian bases 2>/dev/null # List all .base files
obsidian base:query file=MyBase format=json 2>/dev/null # Query base
obsidian base:query file=MyBase view=TableView format=csv 2>/dev/null
Templates
obsidian templates 2>/dev/null # List templates
obsidian template:read name=prd 2>/dev/null # Read template
obsidian template:insert name=prd 2>/dev/null # Insert into active file
Workspace & Tabs
obsidian tabs 2>/dev/null # List open tabs
obsidian workspace 2>/dev/null # Show workspace tree
obsidian workspace:load name=Writing 2>/dev/null # Load workspace
Commands
obsidian commands 2>/dev/null # List all command IDs
obsidian command id=editor:toggle-bold 2>/dev/null # Execute a command
Common Patterns for This Vault
Quick daily task capture
obsidian daily:append content="- [ ] Review TPM progress" silent 2>/dev/null
Check vault health via CLI
obsidian orphans total 2>/dev/null
obsidian unresolved verbose 2>/dev/null
obsidian deadends total 2>/dev/null
Open a PRD in Obsidian
obsidian open path="prd/tpm/private-market-mvp-phases.md" 2>/dev/null
Find all notes tagged with a project
obsidian tag name=xmarket verbose 2>/dev/null
Query a Base for structured data
obsidian base:query file=Projects format=json 2>/dev/null
Signals
- GitHub stars
- 133
- Forks
- 33
- Last commit
- Jun 2026
Advanced
- Catalog kind
- skill
- Gateway key
obsidian-cli-kv0906- Source
- github.com/kv0906/pm-kit