agentsclimarketplace

Ob

Skill kazuph/obails/skills/ob

CLI for Obsidian-compatible vaults. Read, write, search, and manage notes. Use when the user asks to interact with their vault, daily notes, or knowledge base.From its SKILL.md

Install
npx -y skills add kazuph/obails --skill ob

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • 2 stars2 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

SKILL.md

6.0 KB, as published. Nobody here has run it

ob - Obsidian Vault CLI

Interact with an Obsidian-compatible vault from the command line. JSON output by default (for AI Agent integration). Works without the desktop app.

Prerequisites

Requires Go 1.21+ installed. On first use, build the binary:

cd ${CLAUDE_PLUGIN_ROOT} && go build -tags cli -o /usr/local/bin/ob ./cmd/cli

Then configure your vault:

mkdir -p ~/.config/obails
cat > ~/.config/obails/config.toml << 'TOML'
[vault]
  path = "/path/to/your/vault"

[daily_notes]
  folder = "daily"
  format = "2006-01-02"

[timeline]
  section = "## Memos"
  time_format = "15:04"

[templates]
  folder = "templates"
TOML

Syntax

ob <command> [key=value...] [--flags...]

Both standard flags (--file MyNote) and Obsidian-compatible key=value syntax (file=MyNote) are supported.

Global Flags

FlagDefaultDescription
--formatjsonOutput format: json or text
--vault(from config)Override vault path

Commands

App Control

open - Open a note in the Obails app

ob open file=<name>              # Open app with specific note
ob open path=<relative_path>     # Open app with specific path
ob open                          # Just launch the app

Read Operations

read - Read a note

ob read file=<name>                            # Wiki-link resolution
ob read path=<relative_path>                   # Direct path
ob read file=<name> --section "## Heading"     # Extract section only

outline - Extract headings

ob outline file=<name>
ob outline file=<name> style=md    # Markdown list
ob outline file=<name> --total     # Count only

properties - Read frontmatter

ob properties file=<name>
ob properties file=<name> name=title  # Single property

search - Search vault

ob search query=<text>                # File name search
ob search query=<text> --matches      # Content search
ob search query=<text> limit=10 --case

Write Operations

create - Create a new note

ob create name=<name>
ob create name=<name> content="Initial content"
ob create name=<name> --content-file note.md
cat note.md | ob create name=<name> --content-file -
ob create name=<name> template=<template_name>
ob create name=<name> folder=subfolder --overwrite --silent

content= and --content-file cannot be used together. --content-file reads bytes verbatim; --content-file - reads stdin verbatim.

append - Append to a note

ob append file=<name> content="New line"
ob append file=<name> --content-file paragraph.md
cat paragraph.md | ob append file=<name> --content-file -
ob append file=<name> content="In section" section="## Notes"
ob append file=<name> content=" inline text" --inline
ob append file=<name> content="Line 1\nLine 2"

content= and --content-file cannot be used together. --content-file reads bytes verbatim; --content-file - reads stdin verbatim.

prepend - Prepend to a note (after frontmatter)

ob prepend file=<name> content="At the top"
ob prepend file=<name> content=" inline" --inline

upsert - Create or append

ob upsert file=<name> content="Text"
ob upsert file=<name> --content-file entry.md
cat entry.md | ob upsert file=<name> --content-file -
ob upsert file=<name> content="Text" section="## Log"
ob upsert file=<name> content="Text" template=<tmpl>

content= and --content-file cannot be used together. --content-file reads bytes verbatim; --content-file - reads stdin verbatim.

delete - Delete a note

ob delete file=<name>              # Move to Trash
ob delete path=<relative_path>     # Move to Trash
ob delete file=<name> --force      # Permanently delete

move - Move or rename a note

ob move file=<name> to=Archive/<name>
ob move path=folder/old.md to=folder/new.md
ob move file=<name> to=<new_name>

Daily Notes

daily read - Read today's daily note

ob daily read
ob daily read --date 2025-01-15

daily append / daily prepend

ob daily append content="Meeting notes"
ob daily append content="Notes item" section="## Notes"
ob daily prepend content="Priority item"

daily timeline - Add timestamped entry

ob daily timeline content="Started working on feature X"
ob daily timeline content="Review PR" --todo

Tasks

tasks - List tasks

ob tasks                        # All tasks in vault
ob tasks file=<name>            # Tasks in specific file
ob tasks --daily                # Today's daily note only
ob tasks --todo                 # Uncompleted only
ob tasks --done                 # Completed only
ob tasks --total                # Count only

task - Modify a task

ob task file=<name> line=18 --toggle
ob task file=<name> line=18 --done
ob task file=<name> line=18 status=/

Link Analysis

ob links file=<name>            # Outgoing links
ob backlinks file=<name>        # Incoming links
ob orphans                      # Files with no incoming links
ob deadends                     # Files with no outgoing links
ob unresolved                   # Broken wiki-links

All link commands support --total for count only.

Common AI Agent Patterns

# Log work progress
ob daily timeline content="Implemented auth module"

# Append learnings to a knowledge note without shell escaping surprises
cat notes.md | ob upsert file="Go Best Practices" --content-file - section="## Tips"

# Find related notes
ob backlinks file="Architecture"

# Move a finished note into an archive folder
ob move file="Draft Plan" to=Archive/DraftPlan

# Read a specific section
ob read file="ProjectPlan" --section "## Phase 2"

# Open note in the app after writing
ob daily timeline content="Done for today" && ob open

Keep looking

Skills are one crate of 628,971. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.