Improve skill accuracy, completeness, and eval coverage
- Fix README command count (100+ → 130+) to match SKILL.md - Add 9 missing command groups to README table (bookmarks, themes, snippets, commands/hotkeys, bases, history, workspace, diff, and expanded dev/vault groups with all subcommands) - Expand README troubleshooting table with 4 entries matching SKILL.md (multi-vault naming, property:set list type, Windows .com issues, Git Bash / MSYS2 colon-param exit 127) - Enhance SKILL.md frontmatter: add version field, expand description with explicit skip conditions (iCloud sync, Dataview syntax, keyboard shortcuts, external scripts), and add 22-entry triggers list for more reliable skill activation across platforms - Expand eval set from 20 → 35 cases: 10 new positive cases covering sync restore, bookmarks, eval, backlinks, screenshots, tag counts, Bases queries, recents, permanent delete, and rename; 5 new negative cases covering graph view explanation, publish options, hotkey config, unresolved links concept, and Templater plugin syntax https://claude.ai/code/session_01285FCGJmPvrLodTg4nVuc9
This commit is contained in:
@@ -13,22 +13,30 @@ 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.
|
||||
|
||||
Covers **100+ commands** across all major areas:
|
||||
Covers **130+ commands** across all major areas:
|
||||
|
||||
| Area | Commands |
|
||||
|---|---|
|
||||
| **Files** | `read`, `create`, `append`, `prepend`, `move`, `delete`, `files`, `folders` |
|
||||
| **Daily Notes** | `daily`, `daily:read`, `daily:append`, `daily:prepend` |
|
||||
| **Search** | `search` with scoping, limits, JSON output |
|
||||
| **Properties** | `properties`, `property:read`, `property:set`, `property:remove` |
|
||||
| **Files** | `read`, `create`, `append`, `prepend`, `move`, `rename`, `delete`, `files`, `folders`, `file`, `random` |
|
||||
| **Daily Notes** | `daily`, `daily:read`, `daily:append`, `daily:prepend`, `daily:path` |
|
||||
| **Search** | `search`, `search:context` with scoping, limits, JSON output |
|
||||
| **Properties** | `properties`, `property:read`, `property:set`, `property:remove`, `aliases` |
|
||||
| **Tags** | `tags`, `tag` with counts and filtering |
|
||||
| **Tasks** | `tasks`, `task` — query, filter, toggle |
|
||||
| **Links** | `backlinks`, `links`, `unresolved`, `orphans`, `deadends` |
|
||||
| **Bookmarks** | `bookmarks`, `bookmark` |
|
||||
| **Templates** | `templates`, `template:read`, `template:insert` |
|
||||
| **Plugins** | `plugins`, `plugin:enable/disable/install/reload` |
|
||||
| **Sync** | `sync`, `sync:status`, `sync:history`, `sync:restore` |
|
||||
| **Developer** | `eval`, `dev:screenshot`, `dev:console`, `dev:errors` |
|
||||
| **Vault** | `vault`, `vaults`, `version`, `recents`, `outline`, `wordcount` |
|
||||
| **Plugins** | `plugins`, `plugin`, `plugin:enable/disable/install/uninstall`, `plugins:restrict` |
|
||||
| **Sync** | `sync`, `sync:status`, `sync:history`, `sync:read`, `sync:restore`, `sync:deleted` |
|
||||
| **Themes** | `themes`, `theme`, `theme:set`, `theme:install/uninstall` |
|
||||
| **Snippets** | `snippets`, `snippets:enabled`, `snippet:enable/disable` |
|
||||
| **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`, `devtools` |
|
||||
| **Vault** | `vault`, `vaults`, `version`, `reload`, `restart`, `recents`, `outline`, `wordcount` |
|
||||
|
||||
---
|
||||
|
||||
@@ -292,6 +300,10 @@ 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" ...` |
|
||||
| IPC socket not found (Linux) | `PrivateTmp=true` in systemd unit | Set `PrivateTmp=false` |
|
||||
| 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` |
|
||||
|
||||
---
|
||||
|
||||
|
||||
+61
-1
@@ -39,6 +39,46 @@
|
||||
"query": "move everything in my Inbox/ folder to Archive/2026/ and update the daily note with a log entry",
|
||||
"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",
|
||||
"should_trigger": false
|
||||
@@ -78,5 +118,25 @@
|
||||
{
|
||||
"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
|
||||
},
|
||||
{
|
||||
"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
|
||||
}
|
||||
]
|
||||
]
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
---
|
||||
name: obsidian-cli
|
||||
version: "1.3.0"
|
||||
description: >
|
||||
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,
|
||||
@@ -8,10 +9,37 @@ description: >
|
||||
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,
|
||||
not to explain. Also trigger for vault automation, CLI scripting, or cron-based
|
||||
workflows involving Obsidian. Skip for pure conceptual questions: how Obsidian's GUI
|
||||
works, navigating settings menus, theme or plugin installation via the UI, or general
|
||||
Dataview query syntax — anything where the user needs an explanation rather than
|
||||
Claude performing a vault operation.
|
||||
workflows involving Obsidian, managing sync history, querying Bases, restoring file
|
||||
versions via history, managing bookmarks, or running JavaScript against the Obsidian
|
||||
API. Skip for pure conceptual questions: how Obsidian's GUI works, navigating settings
|
||||
menus, theme or plugin installation via the UI, iCloud/third-party sync conflicts,
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user