CLI: Each obsidian move CLI command spawns a new full Electron/Obsidian app instance

Issue

Each obsidian move CLI command spawns a new full Electron/Obsidian app instance instead of communicating with the already-running Obsidian process via IPC. Running ~40 move commands resulted in ~90

Obsidian processes (each Electron instance spawns GPU helper, network helper, renderer sub-processes) and a flooded Dock.

Steps to Reproduce

1. Open Obsidian normally (1 instance running)

2. Run multiple CLI move commands in quick succession:

obsidian vault=Study move file=“Note A” to=“Subfolder/Note A”

obsidian vault=Study move file=“Note B” to=“Subfolder/Note B”

obsidian vault=Study move file=“Note C” to=“Subfolder/Note C”

# … repeat

3. Observe the Dock filling with duplicate Obsidian icons

4. pgrep -f Obsidian | wc -l shows 90+ processes

Expected Behavior

CLI commands should communicate with the existing Obsidian instance (e.g., via IPC socket, URL scheme, or local HTTP server). A single Obsidian process should handle all commands. Other CLI tools that

wrap Electron apps (VS Code’s code CLI, for example) do this correctly.

Actual Behavior

  • Each CLI invocation launches a new Electron app process

  • Each new process spawns 2-3 helper sub-processes (GPU, network, renderer)

  • Commands hang indefinitely — produce no stdout/stderr, never exit

  • The move operation itself silently fails — files are not moved on disk

  • Processes resist pkill and killall — required kill -9 or AppleScript quit

  • The only way to actually move files was to bypass the CLI entirely and use mv on the filesystem

Additional Issue: move destination path handling

When the move command does produce output, it misinterprets the to= parameter:

obsidian vault=Study move file=“Note” to=“Folder/Subfolder/Note”

# Error: ENOENT: rename ‘…Note.md’ → ‘…/Note/Note.md’

It treats the last path segment as a folder name rather than the destination filename, then tries to place the original filename inside it.

Supporting Evidence: obsidian help hangs on Windows (CLI/Automation impact)

I’m seeing a command-specific hang on Windows 11 (installer v1.11.7, app v1.12.1, using Obsidian.com shim). While most commands (vault, search, daily, etc.) are returning normally, obsidian help is currently unstable.

Observed Behavior:

  • Running obsidian help prints the initial startup/version-check logs but then hangs indefinitely.
  • The process requires manual intervention (closing the spawned GUI) to exit and return control to the terminal.

Why this matters for automation:
Programmatic access to help is essential for agentic workflows. Agents rely on it for command discovery, generating/maintaining local documentation, and self-training. If help doesn’t exit cleanly, agents cannot reliably bootstrap their knowledge of the CLI’s capabilities.

Expected Behavior:
obsidian help should print the help text and exit with a deterministic exit code without requiring GUI interaction.

Happy to provide logs or further troubleshooting info if needed!

I can confirm a closely related issue on macOS:

  • Obsidian: 1.12.1 (installer 1.7.7)
  • Shell: zsh
  • which obsidian/Applications/Obsidian.app/Contents/MacOS/obsidian

Repro:

  1. Launch Obsidian normally (one instance running)
  2. In Terminal, run obsidian (no args)

Observed:

  • It opens the CLI TUI and spawns a second full Obsidian/Electron instance (extra Dock icon).
  • One-shot commands do work for me (e.g. obsidian tags counts returns output), but the no-args TUI launch consistently triggers the extra instance.
  • I also see the log line like: Loading updated app package …/obsidian-1.12.1.asar

Feels like the same underlying “CLI not attaching to the existing instance via IPC” problem, possibly specific to the TUI path.

Any chance you have some kind of OS configuration that is blocking Obsidian from communicating with its main process, or do you somehow have the app sandboxed somehow? We use Electron’s built in requestSingleInstanceLock() mechanism, which prevents multiple launches by some form of communication (I believe a socket).

You should update your installer first.

this should be fixed in v1.12.2. ETA unknown.