
View your Google Chrome profiles, show bookmarks, open the right profile.
Profiles in Chrome are absolutely awesome. It allows to keep your browsing experience (bookmarks, navigation history, passwords, and other settings) separated by company / perso / pro / whatever.
Problem: jumping from a profile to another is painful.
Here comes this extension:
Hit ⌘ ⇧ M, choose the right profile, hit Enter ↵, and tada 🎉

When the extension opens, it lists all your existing profiles.
Hit
Enter ↵to enter a profile's bookmarks,⌘ ↵to open (or focus) the profile chrome window, or⌘ ⇧ ↵to open a new window for the profile.
When entering a profile, you can choose whether:
Hit
Enter ↵to open the selected item and close the Raycast main window, or⌘ ↵to open the selected item and keep Raycast opened.

Run Move Current Tab to Another Profile while a regular Chrome window is open. With two profiles, it moves the current tab to the other profile automatically. With more profiles, choose a destination from the list. You can assign this command its own hotkey in Raycast.
The command opens the URL in the destination profile, reusing an existing matching tab when possible, then closes the original tab. It keeps the original tab if the destination cannot be confirmed or the source URL has changed. Page state, such as unsaved form input, is not transferred. Incognito tabs are not supported.
Profile switching and tab moves use Raycast's Accessibility and Automation permissions for Chrome and System Events. If ordinary profile switching cannot use the menu, it falls back to opening the profile directly. Tab moves require menu access to identify and verify the destination profile.
Hit ⌘ H on a profile in Switch Profiles to hide it. Hidden profiles no longer appear in Switch Profiles or as destinations in Move Current Tab to Another Profile, and their Quicklinks keep working. To bring one back, hit ⌘ ⇧ H to show hidden profiles, then ⌘ H on the profile to unhide it.
I highly recommend that you map the default Google Chrome profile shortcut (⌘ ⇧ M) to open this extension. Like so:

If needed, set the URL for the new tab (default is about:blank) and your search engine in the extension setting (default is google.com).
Optional behavior (defaults keep the original behavior):

Select a Chrome profile to bring its window to front, browse its bookmarks, or open a new tab.
Move the active Chrome tab to another profile. With two profiles, switch automatically; otherwise, choose a destination.
Background command for handling profile quicklinks and deeplinks.
${gaia_given_name} (${name}), e.g. a profile named "Work" signed in with a Google account whose given name is "Alex" appears in the menu as "Alex (Work)". The exact-name match against the raw profile name therefore never matched a signed-in profile, and always fell through to a substring search across every menu item — which happily clicked any other profile whose name was a substring of the search text (e.g. "Work" matched "Work admin" or "old work", depending on menu order), with no visible error. Carry the profile's gaia_given_name on the Profile object itself (read once alongside the rest of the profile, and across the Quicklink/deeplink, which previously dropped it) to construct the label Chrome actually shows, and try it — then the raw profile name — as exact candidates only; drop the substring fallback entirely, since guessing the wrong profile is worse than a clear "Profile not found in menu" failure. A Quicklink created before this fix, whose deeplink still lacks the given name, falls back to a one-time Local State read so it keeps working.tell application "Google Chrome" to activate, which launches Chrome with no arguments; a flagless Chrome restores every profile listed in profile.last_active_profiles (Local State), so the previous profile's window appeared before System Events ever clicked the Profiles menu. Branch on whether the browser is already running: when it is, the Profiles-menu click is unchanged and keeps the focus / add-a-tab / find-an-existing-tab semantics; when it is not, do a single cold start into the requested profile with /usr/bin/open -n -a <bundle> --args --profile-directory=<dir> --new-window [url]. --profile-directory is the profile a cold Chrome boots into, which is what suppresses the session restore.osascript subprocess open for the browser's entire lifetime. It exec'd Chrome's inner Mach-O binary directly, so do shell script never returned; it now shares the /usr/bin/open helper above, which returns as soon as Launch Services takes the request. BrowserConfig.binaryPath becomes appPath accordingly, since open -a expects the .app bundle.showHUD was awaited before spawning the detached osascript subprocess; showHUD closes the main window, which starts the extension process teardown, so in the distribution build the Node process could be killed before the spawn call ever ran — the HUD appeared but no Chrome action happened. (Dev mode keeps the process alive, which is why this never reproduced under npm run dev.) Spawn the detached subprocess first, then show the HUD; skip the HUD when the spawn failed so the failure toast stays visible.AppleEvents permission for System Events.app. @raycast/utils.runAppleScript spawns osascript without detached: true, so it inherits the extension's Node process group. Raycast tears that group down ~40ms after the action handler returns control to React, which kills osascript mid-flight and also cancels the asynchronous TCC permission prompt that macOS tries to render on first run, leaving no path for the user to actually grant the permission. Run AppleScript via a detached child_process.spawn("/usr/bin/osascript", [...], { detached: true, stdio: "ignore" }) + child.unref() so the subprocess survives teardown, the TCC prompt renders, and the script runs to completion.chrome:// / about: URLs: new URL(...).origin is null for opaque-origin schemes; passing that to getFavicon threw TypeError: Invalid URL and broke the bookmarks list. Only resolve favicons for http(s) bookmarks; use the globe icon for everything else.⌘ ⇧ ↵ or from within a profile's bookmarks viewopen-profile and open-profile-url commands.