Skip to content

Open notes URI

Bob Navigation Hotkeys registers the read-only obsidian://bob-open-notes handler for a batch of notes. It queues whole URLs and starts each URL only after the previous URL finishes. Within one URL, entries open in parameter order; the first successful entry becomes primary. The handler never writes the vault.

An already open note is reused in any window, including a background tab Obsidian has not loaded yet. Main-area tabs take precedence over sidebar tabs. If the first entry is not open and the active leaf is empty, it opens there. Otherwise, the handler appends a new tab at the far right of the active tab group. The first successfully opened entry is primary; other notes open in the background, and the primary tab ends active. A supplied line receives a caret at column 0 and a brief accent highlight. The handler waits up to two seconds for Bob's writes to appear in Obsidian.

URI v1

obsidian://bob-open-notes?count=<1..8>&path1=<absolute>[&line1=<n>][&ref1=<LINE:digest>][&block1=<id>]…[&total=<n>]
Parameter Rule
count Required integer from 1 through 8.
pathK Required for every entry; absolute filesystem path.
lineK Optional positive, 1-based line.
refK Optional only with lineK; match ^[1-9][0-9]*:[0-9a-f]{8}$.
blockK Optional; match ^[A-Za-z0-9-]+$.
total Optional original note count, at least count; used when the client truncates to eight entries.
Other parameters Ignored.

Indexed keys avoid relying on how Obsidian handles repeated query keys. Values use RFC 3986 encoding: unreserved characters and / stay literal; encode other bytes, including +, &, =, #, %, :, and spaces.

Re-finding lines and failures

For each entry, the handler maps the absolute path into the vault and waits for the file to resolve. When ref is present, it reads the open editor buffer or Obsidian's cached text, then re-finds the line by planned position, optional block ID, and unique line digest. If the digest is not visible by the shared two-second deadline, it opens near the clamped planned line and shows a changed-capture notice.

A missing path or a path outside the vault fails independently; the other entries continue.

Notice When
Bob Open: invalid link A required or optional URI parameter is malformed.
Bob Open: <path> is outside this vault The absolute path does not map inside the vault.
Bob Open: <vault path> not found The path did not resolve to a file by the deadline.
Bob Open: could not open <name> Obsidian could not open a resolved file.
Bob Open: opened N of M notes total was supplied because the client truncated a longer list.
Task changed since capture — landed near line N A line digest was not visible by the deadline.

URI activation is a manual GUI check. For synthetic notes on a Mac:

open 'obsidian://bob-open-notes?count=2&path1=%2Fvault%2Fprojects%2Fsample.md&line1=42&ref1=42%3A35a733bd&path2=%2Fvault%2Fdaily%2Fsample.md&line2=18'
Tested rolling snapshot bob-cli 41afa14 bob-mac-capture 556bb67 bob-plugins af1e691 Built 2026-10-24T22:34:13Z (zensical) build.json