skills/obsidian-clis/SKILL.md
Control Obsidian notes from the terminal via the `obsidian` app CLI, with `notesmd-cli` as a headless fallback. Covers CRUD, search, vault structure (orphans, backlinks, unresolved links), tasks, properties, Bases, and plugin dev. Use when the user mentions Obsidian CLI, notesmd-cli, or shell automation of vault notes.
npx skillsauth add nweii/agent-stuff obsidian-clisInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
CLIs here means two terminal interfaces: the Obsidian app CLI (obsidian, primary) and notesmd-cli (filesystem fallback when obsidian is not available). There is no separate invocation mode—pick the binary that exists in the environment.
obsidian is on PATH, use it for all workflows below (richer surface: links, Bases, tasks, plugin dev).obsidian is missing but notesmd-cli is on PATH, follow notesmd-fallback.md for headless vault operations.Before relying on either tool, confirm install with command -v obsidian and command -v notesmd-cli (or which) when the environment is unknown. Do not assume either binary is present.
Run obsidian <command> to control a running Obsidian instance from the terminal. The app must be running for most commands; the first command will launch Obsidian if not open.
Run obsidian help or obsidian help <command> for the canonical, always-up-to-date command reference. This skill documents common patterns and non-obvious behaviors.
vault=<name> as first parameter. Default: cwd if it's a vault folder, else the active vault.file=<name> resolves like a wikilink (name only, no path or extension needed). path=<path> for exact path from vault root.obsidian with no args for interactive mode; omit the obsidian prefix inside.param=value. Quote values with spaces: content="Hello world".silent, overwrite, newtab.\n for newlines, \t for tabs in content=.obsidian search query="text" [path=folder] [limit=n] [format=text|json] [total] [case]
obsidian search:context query="text" [path=folder] [limit=n] # includes surrounding context
obsidian links [file=Note] [total]
obsidian backlinks [file=Note] [counts] [total]
obsidian outline [file=Note] [format=tree|md]
obsidian orphans [total] [active] # notes with no links to or from them
obsidian deadends [total] [active] # notes with no outgoing links
obsidian unresolved [total] [counts] [verbose] # broken wikilinks
obsidian tags [active] [file=Note] [total] [counts] [sort=count]
obsidian tag name=project [total] [verbose]
To peek at a note without reading its full content, use property:read or properties file=Note.
obsidian read file="Note" # Use this to read the content of a wikilink
obsidian create name="Note" content="# Title\n\nBody" [template=Name] [overwrite] [silent]
obsidian append file="Note" content="- [ ] Task"
obsidian prepend file="Note" content="# Header\n"
obsidian move file="Note" to=folder/newpath.md
obsidian rename file="Note" name="New file name"
obsidian delete file="Note"
obsidian daily:read
obsidian daily [paneType=tab|split|window] [open]
obsidian daily:append content="- [ ] Buy groceries" [inline] [open]
obsidian daily:prepend content="- [ ] Morning routine" [inline] # goes after frontmatter
obsidian daily:path # returns expected path even if file doesn't exist yet
obsidian tasks [daily] [file=Note] [todo] [done] [status="x"] [total] [verbose]
obsidian task ref=path:line [toggle] [done] [todo] [daily]
obsidian properties [active] [file=Note] [total] [counts] [format=yaml|json|tsv]
obsidian property:read name=status [file=Note]
obsidian property:set name=status value=done [file=Note]
obsidian property:remove name=status [file=Note]
obsidian bases
obsidian base:views [file=base.base]
obsidian base:query [file=base.base] [view=name] [format=json|csv|tsv|md|paths]
obsidian base:create name="Item" content="..." [open] [newtab]
After making code changes to a plugin or theme, follow this workflow:
Reload the plugin to pick up changes:
obsidian plugin:reload id=my-plugin
Check for errors — if errors appear, fix and repeat from step 1:
obsidian dev:errors
Verify visually with a screenshot or DOM inspection:
obsidian dev:screenshot path=screenshot.png
obsidian dev:dom selector=".workspace-leaf" text
Check console output for warnings or unexpected logs:
obsidian dev:console level=error
Run JavaScript in the app context:
obsidian eval code="app.vault.getFiles().length"
Inspect CSS values:
obsidian dev:css selector=".workspace-leaf" prop=background-color
Toggle mobile emulation:
obsidian dev:mobile on
| Task | Command |
|------|---------|
| List commands | obsidian help |
| Open daily note | obsidian daily |
| Append to daily | obsidian daily:append content="- [ ] Task" |
| Search vault | obsidian search query="text" |
| Read active/specified file | obsidian read or obsidian read file=Note |
| Create from template | obsidian create name="Title" template=Name |
| List tags with counts | obsidian tags counts |
| List tasks from daily | obsidian tasks daily |
| Find broken wikilinks | obsidian unresolved counts |
| Find orphan notes | obsidian orphans |
For notesmd-cli, see notesmd-fallback.md.
obsidian help — full command list (always up to date)obsidian help <command> — help for a specific commandtesting
Command-invoked tutoring pass for understanding something deeply: a concept being learned, or work just done in the session. Locates where the learner is, teaches one step per turn, quizzes to verify, and continues until they can explain the material back and apply it. Can produce durable artifacts (a walkthrough of the work, a record of what was learned, a glossary) saved through whatever the environment supports. Best run after substantive work, or when the aim is to learn something.
testing
Search, read, filter, combine, adapt, and save recipes in the Brain vault collection. Use whenever cooking and the collection are relevant — 'what should I make', 'recipes with miso', 'save this one' all imply it.
testing
Socratic teaching pass over the work just done in a session: incremental comprehension stages, a running checklist doc, restate-understanding-first, and AskUserQuestion quizzes. The session doesn't end until the user has demonstrated understanding. Run after Claude has completed substantive work worth deeply understanding.
development
Writing-partner processes that draw out the user's own writing through questioning: guided drafting sessions, fragment mining, shaping raw material into a piece, and phrase tightening. Use for help discovering, developing, and structuring writing (notes, essays, messages, etc).