1 Commits

Author SHA1 Message Date
claude[bot] 9d3554feff docs(windows): document Obsidian.com requirement and Git Bash wrapper fix
Add Windows-specific troubleshooting guidance to SKILL.md:
- Platform Notes: note that users missing Obsidian.com (outdated installer)
  should reinstall from obsidian.md/download; Git Bash/MSYS2 users must
  create a wrapper script pointing to Obsidian.com
- Troubleshooting table: add rows for colon+params exit 127 due to missing
  Obsidian.com and due to Git Bash .exe/.com resolution issue
- Tips: add tip 13 about non-colon fallback alternatives when colon
  subcommands are unavailable

Fixes #2

Co-authored-by: pablo-mano <pablo-mano@users.noreply.github.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-05 20:00:27 +00:00
4 changed files with 28 additions and 128 deletions
+10 -22
View File
@@ -3,7 +3,7 @@
A skill for AI coding agents that enables full control of [Obsidian](https://obsidian.md) vaults from the terminal using the official **Obsidian CLI** (v1.12+). A skill for AI coding agents that enables full control of [Obsidian](https://obsidian.md) vaults from the terminal using the official **Obsidian CLI** (v1.12+).
![Version](https://img.shields.io/badge/skill-v1.3.0-CC785C) ![Version](https://img.shields.io/badge/skill-v1.3.0-CC785C)
![Obsidian](https://img.shields.io/badge/Obsidian-v1.12.4%2B-7C3AED?logo=obsidian&logoColor=white) ![Obsidian](https://img.shields.io/badge/Obsidian-v1.12%2B-7C3AED?logo=obsidian&logoColor=white)
![Claude Code](https://img.shields.io/badge/Claude_Code-Plugin-D97757) ![Claude Code](https://img.shields.io/badge/Claude_Code-Plugin-D97757)
![Claude Code Plugin](https://img.shields.io/badge/Anthropic-Compatible-CC785C) ![Claude Code Plugin](https://img.shields.io/badge/Anthropic-Compatible-CC785C)
@@ -13,30 +13,22 @@ A skill for AI coding agents that enables full control of [Obsidian](https://obs
Once installed, your AI agent will know how to interact with Obsidian vaults through the official CLI — reading, creating, and editing notes; managing daily notes; running full-text search; querying tasks, tags, links, and properties; managing plugins and sync; and running developer tools. Once installed, your AI agent will know how to interact with Obsidian vaults through the official CLI — reading, creating, and editing notes; managing daily notes; running full-text search; querying tasks, tags, links, and properties; managing plugins and sync; and running developer tools.
Covers **130+ commands** across all major areas: Covers **100+ commands** across all major areas:
| Area | Commands | | Area | Commands |
|---|---| |---|---|
| **Files** | `read`, `create`, `append`, `prepend`, `move`, `rename`, `delete`, `files`, `folders`, `file`, `random` | | **Files** | `read`, `create`, `append`, `prepend`, `move`, `delete`, `files`, `folders` |
| **Daily Notes** | `daily`, `daily:read`, `daily:append`, `daily:prepend`, `daily:path` | | **Daily Notes** | `daily`, `daily:read`, `daily:append`, `daily:prepend` |
| **Search** | `search`, `search:context` with scoping, limits, JSON output | | **Search** | `search` with scoping, limits, JSON output |
| **Properties** | `properties`, `property:read`, `property:set`, `property:remove`, `aliases` | | **Properties** | `properties`, `property:read`, `property:set`, `property:remove` |
| **Tags** | `tags`, `tag` with counts and filtering | | **Tags** | `tags`, `tag` with counts and filtering |
| **Tasks** | `tasks`, `task` — query, filter, toggle | | **Tasks** | `tasks`, `task` — query, filter, toggle |
| **Links** | `backlinks`, `links`, `unresolved`, `orphans`, `deadends` | | **Links** | `backlinks`, `links`, `unresolved`, `orphans`, `deadends` |
| **Bookmarks** | `bookmarks`, `bookmark` |
| **Templates** | `templates`, `template:read`, `template:insert` | | **Templates** | `templates`, `template:read`, `template:insert` |
| **Plugins** | `plugins`, `plugin`, `plugin:enable/disable/install/uninstall`, `plugins:restrict` | | **Plugins** | `plugins`, `plugin:enable/disable/install/reload` |
| **Sync** | `sync`, `sync:status`, `sync:history`, `sync:read`, `sync:restore`, `sync:deleted` | | **Sync** | `sync`, `sync:status`, `sync:history`, `sync:restore` |
| **Themes** | `themes`, `theme`, `theme:set`, `theme:install/uninstall` | | **Developer** | `eval`, `dev:screenshot`, `dev:console`, `dev:errors` |
| **Snippets** | `snippets`, `snippets:enabled`, `snippet:enable/disable` | | **Vault** | `vault`, `vaults`, `version`, `recents`, `outline`, `wordcount` |
| **Commands** | `commands`, `command`, `hotkeys`, `hotkey` |
| **Bases** | `bases`, `base:query`, `base:views`, `base:create` |
| **History** | `history`, `history:list`, `history:read`, `history:restore` |
| **Workspace** | `workspace`, `tabs`, `tab:open` |
| **Diff** | `diff` |
| **Developer** | `eval`, `dev:screenshot`, `dev:debug`, `dev:console`, `dev:errors`, `dev:css`, `dev:dom`, `dev:mobile`, `devtools` |
| **Vault** | `vault`, `vaults`, `version`, `reload`, `restart`, `recents`, `outline`, `wordcount` |
--- ---
@@ -300,10 +292,6 @@ See [`skills/obsidian-cli/references/command-reference.md`](skills/obsidian-cli/
| Wrong vault targeted | Multi-vault ambiguity | Pass vault name as the first argument: `obsidian "My Vault" ...` | | Wrong vault targeted | Multi-vault ambiguity | Pass vault name as the first argument: `obsidian "My Vault" ...` |
| IPC socket not found (Linux) | `PrivateTmp=true` in systemd unit | Set `PrivateTmp=false` | | IPC socket not found (Linux) | `PrivateTmp=true` in systemd unit | Set `PrivateTmp=false` |
| Snap confinement errors | Snap restricts IPC | Use the `.deb` package instead | | Snap confinement errors | Snap restricts IPC | Use the `.deb` package instead |
| Multi-vault `"Name" command` fails | Vault name matching issue | Omit vault name; switch vault manually in Obsidian UI |
| `property:set` list value is a string | CLI stores value as-is | Edit frontmatter directly or use `eval` to call Obsidian API |
| Colon+params exit 127 (missing `.com`) | Outdated installer — `Obsidian.com` absent | Reinstall from [obsidian.md/download](https://obsidian.md/download) |
| Colon+params exit 127 (Git Bash / MSYS2) | Bash resolves `obsidian` to `.exe` not `.com` | Create `~/bin/obsidian` wrapper: `#!/bin/bash` + `/c/path/to/Obsidian.com "$@"`, add `export PATH="$HOME/bin:$PATH"` to `~/.bashrc` |
--- ---
+1 -61
View File
@@ -39,46 +39,6 @@
"query": "move everything in my Inbox/ folder to Archive/2026/ and update the daily note with a log entry", "query": "move everything in my Inbox/ folder to Archive/2026/ and update the daily note with a log entry",
"should_trigger": true "should_trigger": true
}, },
{
"query": "check the sync history for my important.md and restore the version from two days ago",
"should_trigger": true
},
{
"query": "list all my bookmarks in obsidian",
"should_trigger": true
},
{
"query": "run obsidian eval to count how many markdown files have a 'status' property set to 'done'",
"should_trigger": true
},
{
"query": "find all notes in my vault that link to projects/q1-review.md",
"should_trigger": true
},
{
"query": "take a screenshot of my current obsidian view and save it to screenshots/",
"should_trigger": true
},
{
"query": "show me all tags in my vault sorted by how often they're used",
"should_trigger": true
},
{
"query": "query my Obsidian Bases 'Tasks' view and show all entries where priority is high",
"should_trigger": true
},
{
"query": "what notes have i opened recently in obsidian?",
"should_trigger": true
},
{
"query": "delete my scratch/temp-ideas.md note permanently",
"should_trigger": true
},
{
"query": "rename my 'Meeting 2026-02-28.md' note to 'Sprint Retro 2026-02-28.md'",
"should_trigger": true
},
{ {
"query": "how do i change the accent color in obsidian? i want something more muted than the default purple", "query": "how do i change the accent color in obsidian? i want something more muted than the default purple",
"should_trigger": false "should_trigger": false
@@ -118,25 +78,5 @@
{ {
"query": "i'm writing a python script to parse markdown files from my notes folder and extract all the headings into a CSV — what's the best library for this?", "query": "i'm writing a python script to parse markdown files from my notes folder and extract all the headings into a CSV — what's the best library for this?",
"should_trigger": false "should_trigger": false
},
{
"query": "how does obsidian's graph view work? i want to understand what the clusters represent",
"should_trigger": false
},
{
"query": "is there a way to publish my obsidian vault publicly? what are the options?",
"should_trigger": false
},
{
"query": "how do i configure a hotkey in obsidian to run a specific command from the command palette?",
"should_trigger": false
},
{
"query": "explain what the 'unresolved links' section in obsidian's graph view means",
"should_trigger": false
},
{
"query": "how do i use templater plugin variables like {{date}} in obsidian?",
"should_trigger": false
} }
] ]
@@ -34,8 +34,8 @@ The official Obsidian CLI (released in v1.12, February 2026) lets you control ev
- **macOS / Linux**: The `obsidian` binary is registered in PATH automatically when you enable CLI in settings. - **macOS / Linux**: The `obsidian` binary is registered in PATH automatically when you enable CLI in settings.
- **Windows**: Requires an `Obsidian.com` redirector file placed alongside `Obsidian.exe`. **Must run with normal user privileges** — admin terminals produce silent failures. - **Windows**: Requires an `Obsidian.com` redirector file placed alongside `Obsidian.exe`. **Must run with normal user privileges** — admin terminals produce silent failures.
- If colon subcommands (`property:set`, `daily:append`, etc.) with parameters return exit 127, check that `Obsidian.com` exists alongside `Obsidian.exe`. If missing, you have an outdated installer — download the latest from [obsidian.md/download](https://obsidian.md/download) and reinstall. - If colon subcommands (`property:set`, `daily:append`, etc.) with parameters return exit 127, verify that `Obsidian.com` exists alongside `Obsidian.exe`. Users who installed before v1.12 and updated in-app may be missing this file — download the latest installer from [obsidian.md/download](https://obsidian.md/download) to fix.
- **Git Bash / MSYS2 users**: Bash resolves `obsidian` to `Obsidian.exe` (GUI) instead of `Obsidian.com` (CLI), causing colon+params to fail with exit 127 even when `Obsidian.com` is present. Create a wrapper script — see Troubleshooting. - **Git Bash / MSYS2 users**: Bash does not follow Windows' `.com`-before-`.exe` priority, so `obsidian` resolves to `Obsidian.exe` (GUI mode) instead of `Obsidian.com` (CLI). Create a wrapper script — see Troubleshooting.
- **Headless Linux**: Use the `.deb` package (not snap). Run under `xvfb`. Prefix commands with `DISPLAY=:5` (or your xvfb display number). Ensure `PrivateTmp=false` if running as a service. - **Headless Linux**: Use the `.deb` package (not snap). Run under `xvfb`. Prefix commands with `DISPLAY=:5` (or your xvfb display number). Ensure `PrivateTmp=false` if running as a service.
## Syntax ## Syntax
@@ -81,7 +81,7 @@ The CLI provides **130+ commands** across these groups:
| **history** | `history`, `history:list`, `history:read`, `history:restore` | File version recovery (File Recovery plugin) | | **history** | `history`, `history:list`, `history:read`, `history:restore` | File version recovery (File Recovery plugin) |
| **workspace** | `workspace`, `tabs`, `tab:open` | Workspace layout and tab management | | **workspace** | `workspace`, `tabs`, `tab:open` | Workspace layout and tab management |
| **diff** | `diff` | Compare local vs sync file versions | | **diff** | `diff` | Compare local vs sync file versions |
| **dev** | `eval`, `dev:screenshot`, `dev:debug`, `dev:console`, `dev:errors`, `dev:css`, `dev:dom`, `dev:mobile`, `devtools` | Developer/debugging tools | | **dev** | `eval`, `dev:screenshot`, `dev:debug`, `dev:console`, `dev:errors`, `dev:css`, `dev:dom`, `devtools` | Developer/debugging tools |
| **vault** | `vault`, `vaults`, `version`, `reload`, `restart` | Vault info and app control | | **vault** | `vault`, `vaults`, `version`, `reload`, `restart` | Vault info and app control |
| **other** | `outline`, `wordcount`, `recents` | Utility commands | | **other** | `outline`, `wordcount`, `recents` | Utility commands |
@@ -243,7 +243,7 @@ obsidian command id="dataview:dataview-force-refresh-views"
obsidian eval code="$(cat /tmp/obs.js)" obsidian eval code="$(cat /tmp/obs.js)"
``` ```
12. **Multi-vault targeting may not work in all environments** — `obsidian "My Vault" command` can return `Error: Command "My Vault" not found` on some setups. If this happens, omit the vault name (CLI targets the most recently active vault) and switch vaults manually in the Obsidian UI. 12. **Multi-vault targeting may not work in all environments** — `obsidian "My Vault" command` can return `Error: Command "My Vault" not found` on some setups. If this happens, omit the vault name (CLI targets the most recently active vault) and switch vaults manually in the Obsidian UI.
13. **When colon subcommands are unavailable** (e.g. Windows Git Bash without wrapper), prefer non-colon alternatives: use `properties` instead of `property:read`, and `obsidian daily:path` + `append` instead of `daily:append`. 13. **When colon subcommands are unavailable** (e.g., missing `Obsidian.com` on Windows), prefer non-colon alternatives: use `properties` instead of `property:read`, or `obsidian daily:path` + `obsidian append path="..."` instead of `daily:append`. Most read-only and file operations work without colon subcommands.
## Troubleshooting ## Troubleshooting
@@ -257,5 +257,5 @@ obsidian command id="dataview:dataview-force-refresh-views"
| Snap confinement issues | Snap restricts IPC | Use `.deb` package instead | | Snap confinement issues | Snap restricts IPC | Use `.deb` package instead |
| Multi-vault `"Name" command` fails | Vault name matching issue | Omit vault name; target most recent vault | | Multi-vault `"Name" command` fails | Vault name matching issue | Omit vault name; target most recent vault |
| `property:set` list value is a string | CLI stores value as-is | Edit frontmatter directly or use `eval` | | `property:set` list value is a string | CLI stores value as-is | Edit frontmatter directly or use `eval` |
| Colon+params exit 127 (missing `.com`) | Outdated installer — `Obsidian.com` absent | Reinstall from [obsidian.md/download](https://obsidian.md/download) | | Colon+params exit 127 (Windows, `Obsidian.com` missing) | Outdated installer — in-app update skips `.com` file | Reinstall from [obsidian.md/download](https://obsidian.md/download) |
| Colon+params exit 127 (Git Bash / MSYS2) | Bash resolves `obsidian` to `.exe` not `.com` | Create `~/bin/obsidian` wrapper: `#!/bin/bash` / `/c/path/to/Obsidian.com "$@"` and add `export PATH="$HOME/bin:$PATH"` to `~/.bashrc` | | Colon+params exit 127 (Git Bash / MSYS2) | Bash resolves `obsidian` to `.exe` (GUI), not `.com` (CLI) | Create `~/bin/obsidian` wrapper: `#!/bin/bash`<br>`/c/Users/<you>/AppData/Local/Obsidian/Obsidian.com "$@"` and add `export PATH="$HOME/bin:$PATH"` to `~/.bashrc` |
+11 -39
View File
@@ -1,6 +1,5 @@
--- ---
name: obsidian-cli name: obsidian-cli
version: "1.3.0"
description: > description: >
Use this skill whenever the user wants Claude to directly interact with their Use this skill whenever the user wants Claude to directly interact with their
Obsidian vault — reading a note or daily note, writing or appending content, Obsidian vault — reading a note or daily note, writing or appending content,
@@ -9,37 +8,10 @@ description: >
has no way to access vault data or execute vault operations. Treat any request that has no way to access vault data or execute vault operations. Treat any request that
implies "go into my vault and do X" as a trigger — the user is asking Claude to act, implies "go into my vault and do X" as a trigger — the user is asking Claude to act,
not to explain. Also trigger for vault automation, CLI scripting, or cron-based not to explain. Also trigger for vault automation, CLI scripting, or cron-based
workflows involving Obsidian, managing sync history, querying Bases, restoring file workflows involving Obsidian. Skip for pure conceptual questions: how Obsidian's GUI
versions via history, managing bookmarks, or running JavaScript against the Obsidian works, navigating settings menus, theme or plugin installation via the UI, or general
API. Skip for pure conceptual questions: how Obsidian's GUI works, navigating settings Dataview query syntax — anything where the user needs an explanation rather than
menus, theme or plugin installation via the UI, iCloud/third-party sync conflicts, Claude performing a vault operation.
general Dataview query syntax, keyboard shortcuts, or parsing vault files with external
scripts — anything where the user needs an explanation rather than Claude performing a
vault operation.
triggers:
- "obsidian"
- "vault"
- "daily note"
- "obsidian cli"
- "note"
- "append to"
- "prepend to"
- "search my vault"
- "create a note"
- "read note"
- "move note"
- "rename note"
- "delete note"
- "tasks in obsidian"
- "open tasks"
- "backlinks"
- "orphaned notes"
- "broken links"
- "frontmatter"
- "properties"
- "sync history"
- "obsidian bases"
- "file history"
--- ---
# Obsidian CLI # Obsidian CLI
@@ -54,7 +26,7 @@ The official Obsidian CLI (released in v1.12, February 2026) lets you control ev
| Requirement | Details | | Requirement | Details |
|---|---| |---|---|
| Obsidian Desktop | **v1.12.4+** (recommended; CLI introduced in v1.12.0) | | Obsidian Desktop | **v1.12.0+** |
| CLI enabled | Settings → Command line interface → Toggle ON | | CLI enabled | Settings → Command line interface → Toggle ON |
| Obsidian running | The desktop app **must be running** for CLI to work (IPC) | | Obsidian running | The desktop app **must be running** for CLI to work (IPC) |
@@ -62,8 +34,8 @@ The official Obsidian CLI (released in v1.12, February 2026) lets you control ev
- **macOS / Linux**: The `obsidian` binary is registered in PATH automatically when you enable CLI in settings. - **macOS / Linux**: The `obsidian` binary is registered in PATH automatically when you enable CLI in settings.
- **Windows**: Requires an `Obsidian.com` redirector file placed alongside `Obsidian.exe`. **Must run with normal user privileges** — admin terminals produce silent failures. - **Windows**: Requires an `Obsidian.com` redirector file placed alongside `Obsidian.exe`. **Must run with normal user privileges** — admin terminals produce silent failures.
- If colon subcommands (`property:set`, `daily:append`, etc.) with parameters return exit 127, check that `Obsidian.com` exists alongside `Obsidian.exe`. If missing, you have an outdated installer — download the latest from [obsidian.md/download](https://obsidian.md/download) and reinstall. - If colon subcommands (`property:set`, `daily:append`, etc.) with parameters return exit 127, verify that `Obsidian.com` exists alongside `Obsidian.exe`. Users who installed before v1.12 and updated in-app may be missing this file — download the latest installer from [obsidian.md/download](https://obsidian.md/download) to fix.
- **Git Bash / MSYS2 users**: Bash resolves `obsidian` to `Obsidian.exe` (GUI) instead of `Obsidian.com` (CLI), causing colon+params to fail with exit 127 even when `Obsidian.com` is present. Create a wrapper script — see Troubleshooting. - **Git Bash / MSYS2 users**: Bash does not follow Windows' `.com`-before-`.exe` priority, so `obsidian` resolves to `Obsidian.exe` (GUI mode) instead of `Obsidian.com` (CLI). Create a wrapper script — see Troubleshooting.
- **Headless Linux**: Use the `.deb` package (not snap). Run under `xvfb`. Prefix commands with `DISPLAY=:5` (or your xvfb display number). Ensure `PrivateTmp=false` if running as a service. - **Headless Linux**: Use the `.deb` package (not snap). Run under `xvfb`. Prefix commands with `DISPLAY=:5` (or your xvfb display number). Ensure `PrivateTmp=false` if running as a service.
## Syntax ## Syntax
@@ -109,7 +81,7 @@ The CLI provides **130+ commands** across these groups:
| **history** | `history`, `history:list`, `history:read`, `history:restore` | File version recovery (File Recovery plugin) | | **history** | `history`, `history:list`, `history:read`, `history:restore` | File version recovery (File Recovery plugin) |
| **workspace** | `workspace`, `tabs`, `tab:open` | Workspace layout and tab management | | **workspace** | `workspace`, `tabs`, `tab:open` | Workspace layout and tab management |
| **diff** | `diff` | Compare local vs sync file versions | | **diff** | `diff` | Compare local vs sync file versions |
| **dev** | `eval`, `dev:screenshot`, `dev:debug`, `dev:console`, `dev:errors`, `dev:css`, `dev:dom`, `dev:mobile`, `devtools` | Developer/debugging tools | | **dev** | `eval`, `dev:screenshot`, `dev:debug`, `dev:console`, `dev:errors`, `dev:css`, `dev:dom`, `devtools` | Developer/debugging tools |
| **vault** | `vault`, `vaults`, `version`, `reload`, `restart` | Vault info and app control | | **vault** | `vault`, `vaults`, `version`, `reload`, `restart` | Vault info and app control |
| **other** | `outline`, `wordcount`, `recents` | Utility commands | | **other** | `outline`, `wordcount`, `recents` | Utility commands |
@@ -271,7 +243,7 @@ obsidian command id="dataview:dataview-force-refresh-views"
obsidian eval code="$(cat /tmp/obs.js)" obsidian eval code="$(cat /tmp/obs.js)"
``` ```
12. **Multi-vault targeting may not work in all environments** — `obsidian "My Vault" command` can return `Error: Command "My Vault" not found` on some setups. If this happens, omit the vault name (CLI targets the most recently active vault) and switch vaults manually in the Obsidian UI. 12. **Multi-vault targeting may not work in all environments** — `obsidian "My Vault" command` can return `Error: Command "My Vault" not found` on some setups. If this happens, omit the vault name (CLI targets the most recently active vault) and switch vaults manually in the Obsidian UI.
13. **When colon subcommands are unavailable** (e.g. Windows Git Bash without wrapper), prefer non-colon alternatives: use `properties` instead of `property:read`, and `obsidian daily:path` + `append` instead of `daily:append`. 13. **When colon subcommands are unavailable** (e.g., missing `Obsidian.com` on Windows), prefer non-colon alternatives: use `properties` instead of `property:read`, or `obsidian daily:path` + `obsidian append path="..."` instead of `daily:append`. Most read-only and file operations work without colon subcommands.
## Troubleshooting ## Troubleshooting
@@ -285,5 +257,5 @@ obsidian command id="dataview:dataview-force-refresh-views"
| Snap confinement issues | Snap restricts IPC | Use `.deb` package instead | | Snap confinement issues | Snap restricts IPC | Use `.deb` package instead |
| Multi-vault `"Name" command` fails | Vault name matching issue | Omit vault name; target most recent vault | | Multi-vault `"Name" command` fails | Vault name matching issue | Omit vault name; target most recent vault |
| `property:set` list value is a string | CLI stores value as-is | Edit frontmatter directly or use `eval` | | `property:set` list value is a string | CLI stores value as-is | Edit frontmatter directly or use `eval` |
| Colon+params exit 127 (missing `.com`) | Outdated installer — `Obsidian.com` absent | Reinstall from [obsidian.md/download](https://obsidian.md/download) | | Colon+params exit 127 (Windows, `Obsidian.com` missing) | Outdated installer — in-app update skips `.com` file | Reinstall from [obsidian.md/download](https://obsidian.md/download) |
| Colon+params exit 127 (Git Bash / MSYS2) | Bash resolves `obsidian` to `.exe` not `.com` | Create `~/bin/obsidian` wrapper: `#!/bin/bash` / `/c/path/to/Obsidian.com "$@"` and add `export PATH="$HOME/bin:$PATH"` to `~/.bashrc` | | Colon+params exit 127 (Git Bash / MSYS2) | Bash resolves `obsidian` to `.exe` (GUI), not `.com` (CLI) | Create `~/bin/obsidian` wrapper: `#!/bin/bash`<br>`/c/Users/<you>/AppData/Local/Obsidian/Obsidian.com "$@"` and add `export PATH="$HOME/bin:$PATH"` to `~/.bashrc` |