Bike: Outline Paths

Use outline paths to query your Bike outlines. Today they are used through AppleScript and Shortcuts actions. In the future they will be used to build new features such as stylesheets and outline filtering.

This is a companion discussion topic for the original entry at

Bike 1.17, with Outline Paths, is now out of preview.

For the next Bike release I plan to add themes. I expect the themes work to take a few releases to get everything in place. I expect the first release will allow you to create a theme using existing Bike settings (text color, background color, font size, etc). Following releases will add more styling power, allowing you to use outline paths to apply specific styles to matching rows.

1 Like

Wow, this looks very exciting! So many possibilities for scripting. Looking forward to the continued progress. Thanks for making this so easily accessible with the Outline Path Explorer—great sandbox for understanding how it work.


Hmmm… Interesting! Also, looks like a great feature.

I’ll admit I didn’t see where you were going with this when you first announced the Outline Path feature.

You fooled me - in a good way. Awesome!


Here’s a more realistic version of Archive script from the movie. It updates the path to:

  • Exclude @done tasks that are already in the archive.
  • Exclude @done tasks that are descendants of other done tasks.
tell front document of application "Bike"
	set thePath to "//task @done except (/Archive//* union //task//*)"
	set theArchive to row named "Archive"
	set theRows to query outline path thePath
	repeat with each in theRows
		move each to theArchive
	end repeat
end tell
1 Like

Is there a good way to convert markdown to outline format using queries and Apple Shortcuts?

My goal is to stuff body text in between two markdown headings into the preceding heading row.

# Heading
# Heading 2


# Heading
# Heading 2

I’m getting some success with queries like /body/preceding::heading but this breaks apart in longer documents as queries end up with 30k nodes for 500 headings. Oddly, if I use the repeat action in Shortcuts to single out each body row by ID and find its preceding heading, it doesn’t help either.

Here’s the shortcut I built that works on shorter docs but not on longer ones:

Certainly there isn’t an authoritative easy way. Depending on your specific needs something might be possible, but it’s hard for me to debug into specific shortcut workflows.

Can you share an example that I can run myself… zip up the shortcut workflow together with a sample outline.

Thanks, I think this was easier done by asking GPT to indent the text for me.

1 Like