How to Interact with Obsidian Vaults Using the CLI Skill

The obsidian-cli skill wraps the official Obsidian CLI, allowing Instagit agents to execute commands like obsidian read, obsidian create, and obsidian search directly against your open vault to read, edit, and manage notes programmatically.

The kepano/obsidian-skills repository provides a structured way to interact with Obsidian programmatically. The CLI skill defined in skills/obsidian-cli/SKILL.md acts as a bridge between Instagit agents and your local Obsidian installation, forwarding commands to the official binary without reimplementing core logic.

What Is the Obsidian CLI Skill?

The obsidian-cli skill is a command dispatcher that exposes the full power of the Obsidian desktop application's built-in CLI to automated agents. Instead of manually clicking through the interface, you can manipulate vault contents, query metadata, and even trigger plugin reloads using structured shell commands.

According to the source code in skills/obsidian-cli/SKILL.md (lines 1-4), the skill declares itself to the Instagit runtime with a concise description that enables automatic skill selection when users request vault operations.

How the CLI Skill Works

The architecture consists of three layers working in sequence:

  • Skill Definition. The YAML front-matter in SKILL.md registers the skill name (obsidian-cli) and description, enabling the Instagit framework to route vault-related requests to this handler.

  • Command Dispatcher. The Instagit runtime takes user-provided arguments, builds a command string like obsidian <subcommand> <args>, and executes it in the host environment. The host machine must have the Obsidian CLI installed and a vault currently open.

  • Official Obsidian CLI. The actual binary shipped with Obsidian provides sub-commands documented at help.obsidian.md/cli. The skill does not reimplement Obsidian's logic; it merely forwards calls to this underlying binary.

Essential Commands for Vault Interaction

Reading and Creating Notes

Use read to fetch content by wikilink name and create to generate new files with optional templates.


# Read a note using its wikilink name

obsidian read file="Project Overview"

# Create a new note with content and suppress UI notifications

obsidian create name="Meeting Notes" \
               content="# Agenda\n- Topic 1\n- Topic 2" \

               template="MeetingTemplate" silent

# Append content to an existing note

obsidian append file="Ideas" content="New idea: AI-driven assistants"

Searching and Querying Content

The search command queries your vault index, while backlinks and tags provide relationship metadata.


# Search for a phrase with result limiting

obsidian search query="knowledge base" limit=10

# Retrieve backlinks for a specific note

obsidian backlinks file="Roadmap"

# List tags sorted by frequency with counts

obsidian tags sort=count counts

# Get total tag count (append 'total' to any list command)

obsidian tags total

Managing Daily Notes and Tasks

Interact with daily note workflows and task management without opening the interface.


# Open today's daily note

obsidian daily:read

# Append a task to today's daily note

obsidian daily:append content="- [ ] Review PRs"

Managing Note Properties

Set frontmatter properties programmatically using the property subcommand.


# Set a custom property on a note

obsidian property:set name="status" value="draft" file="Blog Post"

Command Syntax and Parameters

The obsidian-cli skill uses a strict syntax pattern that distinguishes between parameters and flags.

  • Parameters use key=value syntax (e.g., file="Project Overview", limit=10)
  • Flags are bare words that toggle behavior (e.g., silent, overwrite, counts)

As documented in skills/obsidian-cli/SKILL.md (lines 30-41), file resolution supports three patterns:

  • file= resolves wikilink-style note names
  • path= resolves absolute vault-relative paths
  • vault= forces a specific vault when multiple are open

Special formatting rules apply to content strings:

  • Use \n to insert line breaks
  • Use \t to insert tabs
  • Append --copy to any command to place the output on the system clipboard

Advanced Operations and Plugin Development

For plugin and theme authors, the CLI provides development utilities documented in skills/obsidian-cli/SKILL.md (lines 62-86).


# Reload a plugin after code changes

obsidian plugin:reload id=my-awesome-plugin

# Display runtime errors in the developer console

obsidian dev:errors

# Capture a screenshot of the current view

obsidian dev:screenshot path="screenshot.png"

# Execute arbitrary JavaScript inside Obsidian's environment

obsidian eval code="app.vault.getFiles().length"

Summary

  • The obsidian-cli skill in kepano/obsidian-skills wraps the official Obsidian CLI binary, forwarding commands without reimplementation.
  • File resolution supports wikilinks (file=), absolute paths (path=), and vault targeting (vault=).
  • Command syntax distinguishes between key=value parameters and bare-word flags like silent or overwrite.
  • Content formatting requires escaped newlines (\n) and tabs (\t) for multiline input.
  • Plugin development commands enable rapid iteration via plugin:reload, dev:errors, and dev:screenshot.

Frequently Asked Questions

What prerequisites are required to use the obsidian-cli skill?

The host machine must have the Obsidian desktop application installed with its CLI available in the system path, and at least one vault must be open. The Instagit agent executes commands in this environment, so the Obsidian binary handles all actual file operations.

How does the skill handle file paths and vault switching?

As implemented in skills/obsidian-cli/SKILL.md (lines 30-41), the underlying Obsidian CLI resolves file= parameters as wikilink-style names, while path= accepts vault-relative absolute paths. When multiple vaults are open, use vault= to target a specific instance.

Can I use this skill for Obsidian plugin development?

Yes. The skill exposes development commands including plugin:reload for hot-reloading plugins, dev:errors for retrieving console errors, and dev:screenshot for capturing the current view. These enable automated edit-reload-inspect cycles without manual interaction.

How do I handle multiline content in CLI commands?

Insert literal \n for line breaks and \t for tabs within your content strings. For example: content="# Heading\n- Item 1\n- Item 2". To capture command output for further processing, append the --copy flag to place results on the clipboard.

Have a question about this repo?

These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:

Share the following with your agent to get started:
curl -s "https://instagit.com/install.md"

Works with
Claude Codex Cursor VS Code OpenClaw Any MCP Client

Maintain an open-source project? Get it listed too →