Quicklinks as real files.
Raycast Quicklinks live in an encrypted local database. You cannot grep them, diff them, put them under version control or sync them between machines — and you cannot group them beyond one flat list.
Script Commands are ordinary files in a folder you own. This extension turns any link, folder or search into one, fills in its icon and metadata, and then browses them grouped by environment, package and category.
Give it a title and a target. It writes the script, makes it executable, and fetches the site's icon into your script directory so nothing hotlinks.
A target can be:
| Target | Example |
|---|---|
| A URL | https://www.netflix.com |
| A folder | ~/Downloads |
| A search | https://en.wikipedia.org/w/index.php?search={query} |
Put {query} anywhere in a URL and Raycast prompts for the value, percent-encoded — so a search containing & does not lose half its terms.
Open With binds the link to one application, the same way a Quicklink can.
Lists the link commands in your script directories, ordered by package so everything belonging to one service sits together. Filter by environment, category or package; the detail pane shows the target, the app it opens in and the argument it prompts for.
Commands that do more than open a target are not listed — those are scripts, and Raycast's own Script Commands list is the place for them.
Script Commands give you two strings — a title and a packageName shown as the subtitle — and no fields for scope, brand or category. This extension reads three axes out of those two strings:
| Title | packageName | Means |
|---|---|---|
Netflix | Netflix · #media | package Netflix, category media |
Watch Later | YouTube · #media | a sub-page of YouTube |
Sprint Board | Linear · @work · #dev | scoped to the work environment |
· @environment sits on the subtitle. It gets its own section in the list, so a work link never sits silently among personal ones. Commands written when the sigil led the title (@work · Sprint Board) are still read the same way; only what gets written changed.· #category trails the subtitle, for the same reason: metadata in the title is metadata in the column you read for content.YouTube, The Guardian, npm.None of it is required. A command written by someone who has never seen this parses fine — it simply has no environment and no category, and its package is whatever the field holds.
The Create Link Command form offers the environments and categories already present in your own commands, with a New… escape, so the vocabulary stays yours. It also learns package names: once a link to acme.atlassian.net is filed under Jira, the next one suggests Jira rather than Atlassian.
| Preference | What it does |
|---|---|
| Script Directories | The folders holding your Script Commands. Raycast keeps its own list in an encrypted database that no extension can read, so the paths have to be entered here as well. |
| Grouping | Read the convention out of titles and subtitles to build sections and filters. Off, everything is one flat list. |
| Titles | Start web titles with their site — claude.ai · Usage instead of Usage. Off by default; http(s) targets only, filenames unchanged. |
| Detail Pane | Show a link's source as well as its target. Off by default — a link command's body is a single open call and its header repeats the metadata beside it. |
| Terminal | The application used by Run in Terminal, for when a command misbehaves and you need to see its errors. |
| Author / Author URL | Written into the @raycast.author headers of commands you create. |
Off by default, Titles → Start titles with the site writes web titles with their site first — claude.ai · Usage instead of Usage, the host alone when the name is empty or is only the brand. It applies to http(s) targets only, never folders or surface routers, and a name already starting with the host is left alone. The create form previews the written title, the filename still derives from the bare name so no file moves, and the search list keeps showing the name with the host in the subtitle.
Browse the link commands in your script directories, grouped by environment, brand and category, and run them.
Turn a link, a folder or a search URL into a Script Command, with its icon, brand, category and argument header filled in.
Linear · @work) — it no longer prefixes the filename, so a work command is linear.sprint-board.sh whether it is scoped or not. The subtitle is searched too, so typing @work still finds them.work folder ticks Environment to Work, and picking any other directory unticks it back to None — until the control is changed by hand, which stops the syncing.http(s) targets the written title becomes <host> · <name> — claude.ai · Usage — or just the host when the name is empty or is only the brand. Folders, surface routers and already-prefixed names are untouched, the create form previews the written title, and filenames still derive from the bare name so nothing already created moves.https://sendtestemail.com/ suggests SendTestEmail rather than the bare domain label — falling back to the capitalised domain when the page cannot be read. File names and icon folders still use the lowercase form, so only the displayed subtitle changes and nothing already created moves.environment.raycastVersion and emits the correct deeplink format: raycast://script-commands/<filename> on v1, raycast://extensions/raycast/script-commands/<title-slug> on v2. Title slugs are derived from @raycast.title using the official slug algorithm and disambiguated when duplicates exist.Netflix for a plain link, Search Netflix for a {query} URL, Open Downloads for a folder and Open Linear for a surface router, re-suggested when Desktop App changes. The brand is the one Package would use, so a host the collection has already filed under Jira is titled Jira rather than Atlassian.@work · . It rewrites that one file from @work · Sprint Board / Linear · #dev to Sprint Board / Linear · @work · #dev, the form new commands are written in, after a confirmation that shows both lines before and after. Only the title and subtitle lines change; the filename, and so the command's deeplink, stays as it is. Raycast may address a command by its title, so a hotkey, alias or deeplink pointing at it might need re-assigning afterwards, which is why this is never done in bulk.@work, #media — instead of the plain name shown everywhere else in the extension. They now read Work and Media, matching the Search view's filter dropdown and detail pane. Nothing written to disk changes: a command's subtitle still reads · @work / · #media, so existing collections and the older sigil-anchored form are unaffected.Sprint Board / Linear · @work · #dev — rather than as a prefix on the title. Raycast renders the title bold and in full, so @work · led every work command in the launcher with the same five characters and separated none of them; the subtitle is searched too, so typing @work still finds them. The filename is unchanged (work.linear.sprint-board.sh).@work · Sprint Board / Linear, are read exactly as before: the list still groups and filters them by environment, and the title-anchored sigil wins if a command somehow carries both. Nothing on disk is rewritten — a collection moves over one command at a time as commands are recreated.@ handle is now taken as an environment rather than as part of the brand. A package that is itself a bare handle, such as @kud, becomes the environment kud; a scoped brand written @acme · Matrix becomes the environment acme with the brand Matrix. If a package of yours starts with a handle, drop the @ or fold it into the name to keep it a brand. Chat @ Mozilla, @types/node and other uses where the handle is not a whole field of letters, digits, - and _ are unaffected.@scope or #category typed into Package now moves to the control that owns it, instead of being taken as part of the brand. Linear · @work used to make a brand called literally that: it slugged into linear-work.my-issues.sh rather than work.linear.my-issues.sh, and the list read it back as a brand rather than a scope. A control you have already set is never overridden — a conflicting sigil is reported as dropped instead — and the move is confirmed in a line beneath the field, because the filename preview shows the outcome but never the edit.{query}, since open -a takes no query and a folder has no web surface to fall back to.{query} anywhere in a URL becomes a percent-encoded argument, so a search containing & keeps all of its terms.acme.atlassian.net is filed under Jira, the next one suggests Jira rather than Atlassian.