diff --git a/src/cache/searchData.js b/src/cache/searchData.js index 32fe8663..d5750187 100644 --- a/src/cache/searchData.js +++ b/src/cache/searchData.js @@ -1 +1 @@ -export const posts = [{"id":"2018-01-05-vscode-debugging","date":"2018-01-05","title":"vscode debugging"},{"id":"2018-11-11-react-instead-of-jsp","date":"2018-11-11","title":"react instead of jsp"},{"id":"2018-11-11-ssr-with-react","date":"2018-11-11","title":"ssr with react"},{"id":"2018-11-22-react-served-by-express-running-in-docker","date":"2018-11-22","title":"react served by express running in docker"},{"id":"2018-12-29-free-static-site","date":"2018-12-29","title":"free static site"},{"id":"2019-12-13-browser-tools","date":"2019-12-13","title":"browser tools"},{"id":"2019-12-15-svelte","date":"2019-12-15","title":"svelte"},{"id":"2020-02-04-jest-coverage","date":"2020-02-04","title":"jest coverage"},{"id":"2020-05-19-ssr-with-react-redux","date":"2020-05-19","title":"ssr with react redux"},{"id":"2020-09-24-javascript-uncanny-valley","date":"2020-09-24","title":"javascript uncanny valley"},{"id":"2020-09-29-uuid-as-apassword","date":"2020-09-29","title":"uuid as apassword"},{"id":"2020-1-16-css-grid","title":"2020-1-16-css-grid"},{"id":"2020-10-05-serverless-functions-on-netlify","date":"2020-10-05","title":"serverless functions on netlify"},{"id":"2020-10-06-deploy-serverless-function-on-netlify","date":"2020-10-06","title":"deploy serverless function on netlify"},{"id":"2020-10-15-browser-debugging-with-breakpoints","date":"2020-10-15","title":"browser debugging with breakpoints"},{"id":"2020-10-18-loop-vs-function","date":"2020-10-18","title":"loop vs function"},{"id":"2020-12-03-jsonresume","date":"2020-12-03","title":"jsonresume"},{"id":"2020-12-23-animation","date":"2020-12-23","title":"animation"},{"id":"2021-01-12-whatsapp-by-facebook","date":"2021-01-12","title":"whatsapp by facebook"},{"id":"2021-01-23-next-js-blog","date":"2021-01-23","title":"next js blog"},{"id":"2021-03-06-vue-js-solar","date":"2021-03-06","title":"vue js solar"},{"id":"2021-04-11-electron-basics","date":"2021-04-11","title":"electron basics"},{"id":"2021-04-11-electron-save-file","date":"2021-04-11","title":"electron save file"},{"id":"2021-08-07-pagination","date":"2021-08-07","title":"pagination"},{"id":"2021-10-09-publish-pagination","date":"2021-10-09","title":"publish pagination"},{"id":"2022-01-10-recursive-function","date":"2022-01-10","title":"recursive function"},{"id":"2022-05-02-tools","date":"2022-05-02","title":"tools"},{"id":"2022-09-19-applicant-list","date":"2022-09-19","title":"applicant list"},{"id":"2024-01-21-deploy-astro-static-on-deno-deploy","date":"2024-01-21","title":"deploy astro static on deno deploy"},{"id":"2025-05-31-prompt-engineering-do-dont","date":"2025-05-31","title":"prompt engineering do dont"},{"id":"2025-06-14-claude-code-feature-output","date":"2025-06-14","title":"claude code feature output"},{"id":"2025-08-20-intl-segmenter","date":"2025-08-20","title":"intl segmenter"},{"id":"2025-08-27-best-note-taking-tools","date":"2025-08-27","title":"best note taking tools"},{"id":"2025-10-29-top-10-sites-blocking-openai-bot","date":"2025-10-29","title":"top 10 sites blocking openai bot"},{"id":"2025-11-24-building-basic-pomo-with-antigravity","date":"2025-11-24","title":"building basic pomo with antigravity"},{"id":"2025-12-15-remix-run-how-it-works","date":"2025-12-15","title":"remix run how it works"},{"id":"2025-12-16-the-windows-11-crisis","date":"2025-12-16","title":"the windows 11 crisis"},{"id":"2025-12-19-project-vend-ai-vending-machine","date":"2025-12-19","title":"project vend ai vending machine"},{"id":"2026-01-05-free-ai-learning-resources-nvidia-google-microsoft","date":"2026-01-05","title":"free ai learning resources nvidia google microsoft"},{"id":"2026-01-13-ucp-protocol","date":"2026-01-13","title":"ucp protocol"},{"id":"2026-01-14-google-tools-for-developers","date":"2026-01-14","title":"google tools for developers"},{"id":"2026-02-05-opencode-ai-coding-agent","date":"2026-02-05","title":"opencode ai coding agent"},{"id":"2026-02-18-leveraging-agent-skills-in-web-development","date":"2026-02-18","title":"leveraging agent skills in web development"},{"id":"2026-03-05-llm-developer-platforms-comparison","date":"2026-03-05","title":"llm developer platforms comparison"}]; \ No newline at end of file +export const posts = [{"id":"2018-01-05-vscode-debugging","date":"2018-01-05","title":"vscode debugging"},{"id":"2018-11-11-react-instead-of-jsp","date":"2018-11-11","title":"react instead of jsp"},{"id":"2018-11-11-ssr-with-react","date":"2018-11-11","title":"ssr with react"},{"id":"2018-11-22-react-served-by-express-running-in-docker","date":"2018-11-22","title":"react served by express running in docker"},{"id":"2018-12-29-free-static-site","date":"2018-12-29","title":"free static site"},{"id":"2019-12-13-browser-tools","date":"2019-12-13","title":"browser tools"},{"id":"2019-12-15-svelte","date":"2019-12-15","title":"svelte"},{"id":"2020-02-04-jest-coverage","date":"2020-02-04","title":"jest coverage"},{"id":"2020-05-19-ssr-with-react-redux","date":"2020-05-19","title":"ssr with react redux"},{"id":"2020-09-24-javascript-uncanny-valley","date":"2020-09-24","title":"javascript uncanny valley"},{"id":"2020-09-29-uuid-as-apassword","date":"2020-09-29","title":"uuid as apassword"},{"id":"2020-1-16-css-grid","title":"2020-1-16-css-grid"},{"id":"2020-10-05-serverless-functions-on-netlify","date":"2020-10-05","title":"serverless functions on netlify"},{"id":"2020-10-06-deploy-serverless-function-on-netlify","date":"2020-10-06","title":"deploy serverless function on netlify"},{"id":"2020-10-15-browser-debugging-with-breakpoints","date":"2020-10-15","title":"browser debugging with breakpoints"},{"id":"2020-10-18-loop-vs-function","date":"2020-10-18","title":"loop vs function"},{"id":"2020-12-03-jsonresume","date":"2020-12-03","title":"jsonresume"},{"id":"2020-12-23-animation","date":"2020-12-23","title":"animation"},{"id":"2021-01-12-whatsapp-by-facebook","date":"2021-01-12","title":"whatsapp by facebook"},{"id":"2021-01-23-next-js-blog","date":"2021-01-23","title":"next js blog"},{"id":"2021-03-06-vue-js-solar","date":"2021-03-06","title":"vue js solar"},{"id":"2021-04-11-electron-basics","date":"2021-04-11","title":"electron basics"},{"id":"2021-04-11-electron-save-file","date":"2021-04-11","title":"electron save file"},{"id":"2021-08-07-pagination","date":"2021-08-07","title":"pagination"},{"id":"2021-10-09-publish-pagination","date":"2021-10-09","title":"publish pagination"},{"id":"2022-01-10-recursive-function","date":"2022-01-10","title":"recursive function"},{"id":"2022-05-02-tools","date":"2022-05-02","title":"tools"},{"id":"2022-09-19-applicant-list","date":"2022-09-19","title":"applicant list"},{"id":"2024-01-21-deploy-astro-static-on-deno-deploy","date":"2024-01-21","title":"deploy astro static on deno deploy"},{"id":"2025-05-31-prompt-engineering-do-dont","date":"2025-05-31","title":"prompt engineering do dont"},{"id":"2025-06-14-claude-code-feature-output","date":"2025-06-14","title":"claude code feature output"},{"id":"2025-08-20-intl-segmenter","date":"2025-08-20","title":"intl segmenter"},{"id":"2025-08-27-best-note-taking-tools","date":"2025-08-27","title":"best note taking tools"},{"id":"2025-10-29-top-10-sites-blocking-openai-bot","date":"2025-10-29","title":"top 10 sites blocking openai bot"},{"id":"2025-11-24-building-basic-pomo-with-antigravity","date":"2025-11-24","title":"building basic pomo with antigravity"},{"id":"2025-12-15-remix-run-how-it-works","date":"2025-12-15","title":"remix run how it works"},{"id":"2025-12-16-the-windows-11-crisis","date":"2025-12-16","title":"the windows 11 crisis"},{"id":"2025-12-19-project-vend-ai-vending-machine","date":"2025-12-19","title":"project vend ai vending machine"},{"id":"2026-01-05-free-ai-learning-resources-nvidia-google-microsoft","date":"2026-01-05","title":"free ai learning resources nvidia google microsoft"},{"id":"2026-01-13-ucp-protocol","date":"2026-01-13","title":"ucp protocol"},{"id":"2026-01-14-google-tools-for-developers","date":"2026-01-14","title":"google tools for developers"},{"id":"2026-02-05-opencode-ai-coding-agent","date":"2026-02-05","title":"opencode ai coding agent"},{"id":"2026-02-18-leveraging-agent-skills-in-web-development","date":"2026-02-18","title":"leveraging agent skills in web development"},{"id":"2026-03-05-llm-developer-platforms-comparison","date":"2026-03-05","title":"llm developer platforms comparison"}]; diff --git a/src/pages/blog/2026-02-20-obsidian-cli-productivity/index.md b/src/pages/blog/2026-02-20-obsidian-cli-productivity/index.md new file mode 100644 index 00000000..b0f13c92 --- /dev/null +++ b/src/pages/blog/2026-02-20-obsidian-cli-productivity/index.md @@ -0,0 +1,145 @@ +--- +title: "Your Vault is Now a Binary: Mastering the Obsidian CLI" +description: "Obsidian 1.12 transforms your vault into a command-line powerhouse. Learn to bridge the gap with advanced automation and AI-agentic workflows." +createdDate: "2026-02-20" +published: true +status: "published" +pubDate: "2026-02-20" +readTime: "12 min read" +layout: "../../../layouts/BlogArticle.astro" +--- + +The terminal is where deep work happens. It’s where we compile code, manage infrastructure, and orchestrate deployments. Yet, for years, our personal knowledge bases—our "second brains"—have lived in a separate, GUI-bound silo. Taking a quick note meant an expensive context switch: `Cmd+Tab`, wait for the indexer, find the right folder, and finally type. + +With the release of [Obsidian 1.12](https://obsidian.md/changelog), that silo has been breached. Obsidian is no longer just an app; it’s a binary. An official Command Line Interface (CLI) now allows you to treat your vault as a first-class citizen of your shell ecosystem. + +> ### Executive Summary: Why This Matters +> * **Zero-Friction Capture**: Use shell functions to inject tasks and thoughts into your daily notes without leaving your IDE or terminal. +> * **The "Agentic" Bridge**: Give AI tools like [Claude Code](https://anthropic.com) or local LLMs direct, secure access to read and search your knowledge base. +> * **Power Pipelines**: Combine `fzf`, `ripgrep`, and `jq` with Obsidian commands to create custom, lightning-fast search and reporting tools. +> * **DevOps for Notes**: Automate vault maintenance, plugin reloads, and documentation publishing through Git hooks and CI pipelines. + +--- + +## Who Is This For? + +**This is for you if:** +* You spend 80% of your day in a shell (Zsh, Bash, Fish). +* You find context-switching to a GUI app disruptive to your "flow state." +* You want to build custom automation (cron jobs, git hooks) that interact with your notes. +* You are a plugin or theme developer looking for a faster feedback loop. + +**This is NOT for you if:** +* You prefer a mouse-first, visual workflow. +* You only use Obsidian for occasional long-form writing. +* You don't feel comfortable editing a `.zshrc` or `.bashrc`. + +--- + +## Getting Started: The 60-Second Setup + +The CLI is bundled with the Obsidian 1.12 installer. **Note:** You must download the fresh installer from [obsidian.md](https://obsidian.md/download); a standard in-app update may not correctly register the system binaries. + +1. **Activate**: Open Obsidian, go to **Settings → General**, and toggle **Command line interface** to "On." +2. **Path Registration**: + * **macOS**: The app will offer to add itself to your PATH. If you use a non-standard shell, add: `export PATH="$PATH:/Applications/Obsidian.app/Contents/MacOS"`. + * **Linux**: Typically symlinked to `/usr/local/bin/obsidian`. + * **Windows**: Accessible via `Obsidian.com` (the terminal-friendly wrapper). + +Verify the installation by running `obsidian help`. If you see a list of commands, you're ready to automate. + +--- + +## The Force Multiplier: High-Impact Workflows + +The real power of a CLI isn't in typing commands; it’s in *combining* them. Here are four "Force Multiplier" patterns that will fundamentally change how you interact with your knowledge. + +### 1. The "Ghost Capture" Pipeline +Stop app-switching for small tasks. Instead, create a shell function that appends data to your daily note silently in the background. + +```bash +# Add this to your .zshrc +q() { + obsidian daily:append content="- [ ] $1 #inbox" + echo "Captured to Inbox: $1" +} +``` +**The result:** Typing `q "Email the architect about the API spec"` while mid-refactor in your IDE ensures the task is logged without you ever seeing the Obsidian UI. + +### 2. Search & Jump (fzf + ripgrep) +Obsidian’s built-in search is great, but it can’t compete with the speed of `ripgrep` and the interactivity of `fzf`. Combine them to create a "Universal Note Picker." + +```bash +# Search for a term and open the file in Obsidian +note-search() { + local file=$(rg --files-with-matches "$1" | fzf --preview 'bat --color=always {}') + [[ -n "$file" ]] && obsidian open "$file" +} +``` +This script searches your entire vault for a string, shows you a syntax-highlighted preview of the matching files, and opens the winner in Obsidian instantly. + +### 3. The "Agentic" Knowledge Injection +AI agents like [Claude Code](https://anthropic.com) are becoming standard in the developer toolkit. By using the CLI, you can now give these agents a "Read-Only" (or Read-Write) view of your knowledge base. + +* **Prompting an AI**: "Hey Claude, search my Obsidian vault for 'React Performance' and summarize my previous findings into this current file." +* **How it works**: The agent executes `obsidian search query="React Performance"` and `obsidian read` to gather context, then integrates it into your code. + +### 4. Git-Hook Dashboards +If you keep your vault in a Git repo, you can use `post-commit` hooks to update a "Project Dashboard" automatically. + +```bash +#!/bin/bash +# .git/hooks/post-commit +TIMESTAMP=$(date "+%Y-%m-%d %H:%M") +COMMIT_MSG=$(git log -1 --pretty=%B) +obsidian daily:append content="### Git Commit @ $TIMESTAMP \n- $COMMIT_MSG" +``` +Every time you commit code, your daily note is updated with a log of what you did. This is a game-changer for weekly reviews and stand-up preparation. + +--- + +## For the Builders: Developer Loops + +If you build Obsidian plugins or themes, the CLI is your new best friend. It exposes internal DevTools capabilities directly to the terminal. + +* **Hot-Reloading**: Link your build script to the CLI: `"build": "esbuild ... && obsidian plugin:reload my-plugin"`. No more manual "Disable/Enable" toggling. +* **Mobile Auditing**: Use `obsidian dev:mobile on` to toggle the mobile emulator for UI testing. +* **State Inspection**: Run `obsidian eval code="app.vault.getFiles().length"` to verify vault statistics or plugin state without opening the console. + +--- + +## Strategy: The "Running App" Constraint + +It is a common point of confusion: **Does the Obsidian CLI work headless?** + +By default, the `obsidian` command acts as a bridge to a *running* instance of the app. If the app isn't open, the command will typically launch it. + +**For truly headless server usage**, you should look into **[Headless Sync](https://obsidian.md/help/sync/headless)**. This is a specialized mode designed for CI/CD environments and remote servers that allows for background synchronization and CLI interaction without a GUI or Window Server. + +--- + +## How it Compares: CLI-Centric Alternatives + +While Obsidian is a GUI-first tool with a powerful new CLI, some users may prefer tools that were built for the terminal from day one. + +| Tool | Core Philosophy | CLI Maturity | Best Use Case | +| :--- | :--- | :--- | :--- | +| **Obsidian** | Visual + Extensible | High (Bridge) | Power users who want GUI + Automation | +| **[Joplin](https://joplinapp.org/)** | Sync-Focused | Very High (Native) | Users who need a full terminal app (TUI) | +| **[zk](https://github.com/mickael-menu/zk)** | Plain-text Zettelkasten | Elite (CLI-First) | Developers who live 100% in Neovim/Vim | +| **[Logseq](https://logseq.com/)** | Privacy + Outliner | Moderate (Export) | Users focused on graph data and SSG | + +--- + +## Final Takeaway: Bridge the Gap + +The Obsidian CLI isn't just about saving a few clicks. It’s about **interoperability**. It removes the "wall" around your knowledge and allows your notes to participate in your broader digital ecosystem. + +Start small: replace one manual capture step with a shell function this week. Once you experience the "Zero-Friction" flow, there’s no going back. + +**Ready to start?** +1. Download the [1.12 installer](https://obsidian.md/download). +2. Enable the CLI in Settings. +3. Hook your first shell function. + +Happy scripting!