raycastlisted
Install: claude install-skill lgtm-hq/ai-skills
# Raycast Extension Development
## Scope
Use when **writing or modifying** a Raycast extension. To **open or prepare a PR** to
[raycast/extensions](https://github.com/raycast/extensions), use **`pr-raycast`** instead.
Overrides global lint/commit defaults in extension directories.
## Official resources
- [Prepare for Store](https://developers.raycast.com/basics/prepare-an-extension-for-store)
- [Screenshots](https://developers.raycast.com/basics/prepare-an-extension-for-store#screenshots)
- [Icon Maker](https://icon.ray.so/)
- [Publish](https://developers.raycast.com/basics/publish-an-extension)
- [Extension Guidelines](https://manual.raycast.com/extensions-guidelines)
## Linting & Formatting
**Order:** lintro first → Raycast last. Raycast wins on conflicts.
```bash
# 1. Repo root (when lintro is configured)
uv run lintro fmt && uv run lintro chk
# 2. extensions/<name>/ — required before commit
npm run lint
npm run fix-lint && npm run lint # only if lint failed
npm run build # distribution build; CI uses npm
bun run dev # local dev only
```
Prettier: `printWidth: 120`, `singleQuote: false`. ESLint: `@raycast/eslint-config`.
## Package Management
- Local dev: `bun install`, `bun run <script>`
- CI/store validation: `npm run lint`, `npm run build`
## Project Structure
```text
src/
├── <command>.tsx
├── components/
├── hooks/
├── lib/
└── types/
```
One command file per `package.json` commands entry. Extract testable l