↖ Writing

Automating Arc Browser with AppleScript

A while back I switched to using Arc as my daily browser. It boasts neat features and a delightful design. On top of that, it also integrates nicely with AppleScript.

Focus a specific Arc Space from AppleScript

The following AppleScript focuses the Space “Personal”.

tell application "Arc"
  tell front window
    tell space "Personal" to focus
  end tell
  activate
end tell

Open an Arc Space through Apple Shortcuts

The code above can be executed in Shortcuts using the Run AppleScript action. I organized the logic into a reusable shortcut for conveniently setting an Arc Space from other shortcuts.

Open Arc Space shortcut | iCloud

Screenshot of the open arc space shortcut Reusable shortcut “Open Arc Space”

screenshot of the open arc space shortcut being used in another shortcut Running the “Open Arc Space” shortcut from another shortcut.

Focus a tab in a specific Space

Let’s take it a step further! This script switches to a Space in Arc and focuses on a tab using the specified index.

This snippet focuses the first tab of the space Personal:

tell application "Arc"
  tell front window
    tell space "Personal"
      tell tab 1 to select
    end tell
  end tell
  activate
end tell

Arc’s count includes Pinned Tabs. So tab 1 is always the first pinned tab.

Focus pinned tab on key combination

I created a space with localhost:3000 pinned as the first tab. With Hammerspoon, I can assign a keystroke to jump to that tab. Now, pressing Hyper + a focuses localhost:3000 for development, regardless of the active window.

-- init.lua

-- focus localhost
Hyper:bind({}, "a", nil, function()
  hs.osascript.applescript([[
    tell application "Arc"
      tell front window
        tell space "Develop"
          tell tab 1 to select
        end tell
      end tell
      activate
    end tell
    ]])
end)

There is a bit of “gotcha” when automating Arc. Which behaviour would you expect out when running the code blow?

open location "https://google.com"
open location "https://duckduckgo.com"

My guess is, you’d expect two tabs to open. One containing Google, one containing DuckDuckGo. Instead, Arc opens the first url in a “Little Arc” window and then replaces it with the second url in the same window. For a brief moment Google is opened, then replaced by DuckDuckGo.

arc window opens Google, then replaces it with DuckDuckGo Running a script that opens Google, waits for three seconds and then opens DuckDuckGo.

Luckily, AppleScript can help us out here. By specifying a Space for tabs to open, Arc opens the urls in a “full” window.

tell application "Arc"
  tell front window
    tell space "Personal"
      make new tab with properties {URL:"https://google.com/"}
      make new tab with properties {URL:"https://www.duckduckgo.com/"}
    end tell
  end tell
  activate
end tell

Digging into the source code of Arc’s Raycast extension

Arc has an official extension for Raycast which uses these AppleScript scripts under the hood. The source code is openly available. It contains the functions above and a few more. Happy scripting!