Raycast CLI expert for extension development. Use when users need to create, develop, test, or publish Raycast extensions.
/plugin marketplace add leobrival/topographic-plugins-official/plugin install dev@topographic-plugins-officialThis skill inherits all available tools. When active, it can use any tool Claude has access to.
reference/commands-reference.mdreference/common-patterns.mdreference/troubleshooting.mdRaycast is a productivity platform that allows developers to build custom extensions using TypeScript and React. This guide provides essential workflows and quick references for creating and publishing Raycast extensions.
# Check prerequisites
node --version # Required: Node.js 22.14+
open -a Raycast # Required: Raycast 1.26.0+
# Create extension via Raycast
# Open Raycast → Type "Create Extension"
# Install dependencies
pnpm install
# Start development
pnpm dev
# Test in Raycast
# Open Raycast (Cmd + Space)
# Extension appears at top of search
# Create extension via Raycast
# Open Raycast → Type "Create Extension"
# Choose template or start from scratch
# Navigate to extension directory
cd ~/Developer/my-extension
# Install dependencies
pnpm install
# Start development
pnpm dev
# Open Raycast to test
# Extension appears at top of root search
# Start development mode
pnpm dev
# Edit files in src/ directory
# Changes reflect immediately in Raycast
# View logs in terminal
# View errors in Raycast overlay
# Toggle hot reload if needed
# Raycast → Preferences → Extensions → Development
# "Auto-reload on file changes"
# Run linter
pnpm lint
# Build for production
pnpm build
# Add README and screenshots
cat > README.md << 'EOF'
# Extension Name
Description and usage
EOF
# Add screenshots to assets/
# Take screenshots of each command
# Publish to Raycast Store
pnpm publish
# For public extensions:
# - Authenticates with GitHub
# - Creates PR in raycast/extensions repo
# - Awaits team review
# Add API preferences to package.json
# Configure authentication in preferences
# Start development
pnpm dev
# Test API integration
# View logs in terminal
# Handle errors with showToast
# Build and test
pnpm build
# Check for errors
pnpm dev
# View terminal for build/runtime errors
# Check error overlay in Raycast
# Shows stack trace and details
# Restart Raycast if needed
# Cmd+Q → Reopen Raycast
# Clear cache if needed
# Raycast → Settings → Advanced → Clear Cache
When to use which command:
pnpm dev or npx ray developpnpm lint or npx ray lintpnpm build or npx ray buildnpx ray migratepnpm publish or npx ray publishmy-extension/
├── package.json # Extension metadata
├── tsconfig.json # TypeScript config
├── README.md # Documentation
├── assets/
│ ├── icon.png # 512x512 icon
│ └── screenshot-1.png # Screenshots
└── src/
└── index.tsx # Main command
import { List, ActionPanel, Action, Icon } from "@raycast/api";
export default function Command() {
return (
<List>
<List.Item
title="Item"
icon={Icon.Star}
actions={
<ActionPanel>
<Action.OpenInBrowser url="https://example.com" />
</ActionPanel>
}
/>
</List>
);
}
import { getPreferenceValues } from "@raycast/api";
interface Preferences {
apiKey: string;
}
const { apiKey } = getPreferenceValues<Preferences>();
async function fetchData() {
const response = await fetch("https://api.example.com/data", {
headers: {
Authorization: `Bearer ${apiKey}`,
},
});
return response.json();
}
import { showToast, Toast } from "@raycast/api";
try {
const data = await fetchData();
} catch (error) {
await showToast({
style: Toast.Style.Failure,
title: "Error",
message: String(error),
});
}
import { LocalStorage } from "@raycast/api";
// Save data
await LocalStorage.setItem("favorites", JSON.stringify(items));
// Load data
const stored = await LocalStorage.getItem("favorites");
const favorites = stored ? JSON.parse(stored) : [];
Common Issues:
Extension not appearing in Raycast
pnpm devHot reload not working
Build errors
pnpm install and verify tsconfig.jsonAPI authentication fails
Extension crashes
For detailed troubleshooting steps, see the Troubleshooting Guide.
Load as needed for detailed information:
Commands Reference - Complete CLI command documentation with all flags, options, and configuration files. Use when you need exact syntax, package.json structure, tsconfig settings, or ESLint configuration.
Common Patterns - Real-world patterns for development workflows, API integration, UI components, authentication, data storage, menu bar extensions, background commands, and publishing. Use for implementing specific features or workflows.
Troubleshooting Guide - Detailed error messages, diagnosis steps, and resolution strategies for development, build, runtime, API, storage, UI, publishing, and performance issues. Use when encountering errors or unexpected behavior.
When to use each reference:
This skill should be used when the user asks to "create a slash command", "add a command", "write a custom command", "define command arguments", "use command frontmatter", "organize commands", "create command with file references", "interactive command", "use AskUserQuestion in command", or needs guidance on slash command structure, YAML frontmatter fields, dynamic arguments, bash execution in commands, user interaction patterns, or command development best practices for Claude Code.
This skill should be used when the user asks to "create an agent", "add an agent", "write a subagent", "agent frontmatter", "when to use description", "agent examples", "agent tools", "agent colors", "autonomous agent", or needs guidance on agent structure, system prompts, triggering conditions, or agent development best practices for Claude Code plugins.
This skill should be used when the user asks to "create a hook", "add a PreToolUse/PostToolUse/Stop hook", "validate tool use", "implement prompt-based hooks", "use ${CLAUDE_PLUGIN_ROOT}", "set up event-driven automation", "block dangerous commands", or mentions hook events (PreToolUse, PostToolUse, Stop, SubagentStop, SessionStart, SessionEnd, UserPromptSubmit, PreCompact, Notification). Provides comprehensive guidance for creating and implementing Claude Code plugin hooks with focus on advanced prompt-based hooks API.