From workflow-skills
Shared CLI reference for Obsidian operations. Not user-invoked; read by other skills for consistent CLI patterns.
npx claudepluginhub arosenkranz/claude-code-config --plugin workflow-skillsThis skill uses the workspace's default tool permissions.
**CLI version tested**: 1.12.4 (shipped Feb 2026, early access — syntax may evolve; update this file if commands change)
Compares coding agents like Claude Code and Aider on custom YAML-defined codebase tasks using git worktrees, measuring pass rate, cost, time, and consistency.
Designs and optimizes AI agent action spaces, tool definitions, observation formats, error recovery, and context for higher task completion rates.
Designs, implements, and audits WCAG 2.2 AA accessible UIs for Web (ARIA/HTML5), iOS (SwiftUI traits), and Android (Compose semantics). Audits code for compliance gaps.
CLI version tested: 1.12.4 (shipped Feb 2026, early access — syntax may evolve; update this file if commands change)
Before any CLI operation, verify the binary is available and Obsidian is running:
which obsidian > /dev/null 2>&1 || { echo "obsidian CLI not in PATH"; exit 1; }
pgrep -x Obsidian > /dev/null 2>&1 || { echo "Obsidian app must be running for CLI commands"; exit 1; }
If Obsidian is not running, prompt the user to open it before retrying.
The CLI always emits a version-loading line to stderr on every invocation.
2>/dev/null — safe to suppress, exit code still signals real errors# Read (stderr suppression OK)
obsidian daily:read 2>/dev/null
# Write (check exit code)
obsidian create path="Inbox/Note.md" content="..." && echo "Created" || echo "Failed"
path= for automation — deterministic, uses exact vault-relative pathfile= only for interactive/fuzzy lookups where the user provides a note name| Folder | Purpose |
|---|---|
Ideas and Journal/YYYY-MM-DD.md | Daily notes |
Sessions/YYYY-MM-DD-description.md | Session logs (kebab-case filenames) |
Inbox/ | Quick capture, triaged weekly |
Datadog/Active/ | Active work notes |
99-Meta/ | Templates and guides |
obsidian daily:read 2>/dev/null # Read today's daily note
obsidian daily:append content="- [ ] Task" 2>/dev/null # Append to daily note
obsidian daily:prepend content="## Focus\n- [ ] Task" # Prepend to daily note
obsidian read path="Sessions/2026-03-02-example.md" 2>/dev/null
obsidian create path="Inbox/Note.md" content="..."
obsidian append path="Inbox/Note.md" content="..."
obsidian files folder=Inbox 2>/dev/null
obsidian search:context query="terraform" format=json limit=10 2>/dev/null
obsidian search:context query="topic" path="Sessions" format=json limit=10 2>/dev/null
obsidian backlinks path="Sessions/2026-03-02-example.md" 2>/dev/null
obsidian backlinks file="note name" counts 2>/dev/null
obsidian orphans 2>/dev/null
obsidian deadends 2>/dev/null
obsidian unresolved 2>/dev/null
obsidian tasks todo 2>/dev/null # All open tasks vault-wide
obsidian tasks daily 2>/dev/null # Today's tasks (done + todo)
obsidian property:set path="Note.md" name="status" value="done"
obsidian tag name="meeting" verbose 2>/dev/null
\n for newlines in content stringscontent="My note title"format=json = no results (not an error)