raycast-extensions
Installation
SKILL.md
Raycast Extensions
Build new Raycast extensions, extend or fix existing ones, and review them against the Raycast Store guidelines — using current @raycast/api (v1.10x), @raycast/utils (v2.x), React 19, TypeScript, and ESLint 10 flat config.
Operating rules
- Prefer official docs when uncertain: developers.raycast.com (API + guides) and manual.raycast.com/extensions-guidelines (the real review bar). Imitate real extensions in
github.com/raycast/extensions—CONTRIBUTING.mdis a thin stub; the conventions live in the source and the docs. - Use the
@raycast/utilshooks for all data fetching — never hand-rolluseEffect+fetch+useState. The hooks giveisLoading, error toasts, caching, abort,revalidate,mutate, and pagination for free, and reviewers reject the hand-rolled version. - Don't reinvent the framework: use the preferences API for config (not extra commands),
useNavigation/Action.Pushfor navigation (not a custom stack), andshowFailureToastfor errors (not bespoke failure toasts). These are explicit store-review rules. - Secrets never go in source: use
password-type preferences or OAuth (OAuthService). Hardcoded keys or Keychain access are auto-rejected. - This skill covers the framework, not any one service's API. When wiring a third-party API, confirm its current endpoints/SDK rather than guessing.
First, decide which mode you're in
- New extension — scaffold from a template, then build commands. Start at Build workflow.
- Extend / fix an existing one — read the extension's existing structure first and match its conventions (its client singleton, its hooks/, its error helper). Add a CHANGELOG entry. Don't impose a different architecture.
- Review an existing extension (for store-readiness or a PR) — go to Review workflow and apply
references/store-review.md.
If the user's intent is ambiguous (e.g. "help with my Raycast extension"), ask which of these it is before diving in.