| name | raycast-script-creator |
| description | Create valid Raycast script-commands that integrate with the Raycast launcher. Use this skill when users request creating Raycast scripts, automation commands for Raycast, or workflow shortcuts for the Raycast app. This skill ensures all outputs conform to Raycast's required metadata format and structural conventions. |
Raycast Script Creator
Overview
Create valid Raycast script-commands with proper metadata formatting and structure. Raycast script-commands are executable scripts that integrate with the Raycast launcher, enabling quick access to custom workflows, system commands, and automation tasks from anywhere on macOS.
When to Use This Skill
Activate this skill when users request:
- "Create a Raycast script to..."
- "Make a Raycast command for..."
- "Build a script-command that..."
- "Add a Raycast shortcut to..."
- Any task involving creating automation scripts for the Raycast launcher
Core Principles
1. Metadata is Mandatory
Every Raycast script MUST include properly formatted metadata comments at the top of the file. The three required fields are:
@raycast.schemaVersion (always set to 1)
@raycast.title (the display name in Raycast)
@raycast.mode (how output is presented)
2. Output Mode Selection
Choose the appropriate mode based on the script's purpose:
- silent - Instant commands with minimal output (toggle settings, quick actions)
- compact - Long-running background tasks (network requests, API calls)
- fullOutput - Scripts with substantial output to display (file contents, logs)
- inline - Auto-refreshing data displayed in search results (requires
@raycast.refreshTime)
3. Language Support
Raycast supports multiple scripting languages:
- Shell/Bash (most common)
- Python
- JavaScript/Node.js
- Ruby
- Swift
- AppleScript
Creating Raycast Scripts
Step 1: Understand the User's Request
Determine:
- What action should the script perform?
- What output (if any) should be displayed?
- Does it need user input (arguments)?
- Should it run in the background or show results?
- Is confirmation needed before execution?
Step 2: Select the Appropriate Template
Choose a template from assets/ based on the preferred language:
template.sh - Shell/Bash scripts (recommended for most tasks)
template.py - Python scripts
template.js - JavaScript/Node.js scripts
template.rb - Ruby scripts
template.swift - Swift scripts
template.applescript - AppleScript
Step 3: Configure Metadata
Start with the template and update the metadata fields:
Required Fields:
Recommended Optional Fields:
Additional Optional Fields:
Step 4: Implement the Script Logic
Write the actual script code below the metadata comments. The script should:
- Perform the requested action
- Output appropriate information (based on mode)
- Handle errors gracefully
- Exit with proper exit codes (0 for success, non-zero for failure)
Step 5: Validate the Script
Ensure:
- All three required metadata fields are present
- The chosen mode matches the script's behavior
- If using inline mode,
@raycast.refreshTime is specified
- The shebang line is correct for the language
- File has executable permissions
- For bash scripts, consider running through ShellCheck
Common Patterns and Examples
Pattern 1: Open Application or Folder (silent mode)
Use when creating shortcuts to open applications, folders, or files instantly.
#!/bin/bash
open ~/Downloads
Pattern 2: Development Environment Launcher (compact mode)
Use for opening projects in editors or starting development servers.
#!/bin/bash
cursor ~/Documents/my-project
Pattern 3: System Information Display (fullOutput mode)
Use for displaying detailed information, logs, or multi-line output.
#!/bin/bash
echo "System Information:"
echo "==================="
system_profiler SPHardwareDataType SPSoftwareDataType
Pattern 4: Live Status Monitor (inline mode)
Use for displaying auto-refreshing data like system stats or API data.
#!/bin/bash
top -l 1 | grep "CPU usage" | awk '{print "CPU: " $3 " " $5}'
Pattern 5: Destructive Action with Confirmation (needsConfirmation)
Use for actions that modify system state or delete files.
#!/bin/bash
rm -rf ~/Downloads/*
echo "Downloads folder cleared"
Pattern 6: Script with Arguments
Use when the script needs user input at runtime.
#!/bin/bash
mkdir -p "$1"
echo "Created folder: $1"
Important Constraints and Best Practices
File Naming
- Avoid
.template. in filenames (reserved for templates requiring configuration)
- Use descriptive, kebab-case names:
open-downloads.sh, system-info.py
- Include file extension matching the language
Script Permissions
- Scripts must be executable:
chmod +x script-name.sh
- Typically stored in
~/.config/raycast/scripts/ or custom script directories
Shell Environment
- Scripts run in non-login shells by default
- To use login shell:
#!/bin/bash -l
/usr/local/bin is automatically in $PATH
Error Handling
- Use exit code 0 for success
- Use non-zero exit codes for failures (triggers error notification)
- Provide meaningful error messages via stderr
Output Guidelines
- silent mode: Minimal or no output
- compact mode: Last line shown in toast
- fullOutput mode: All output displayed
- inline mode: First line shown and refreshed
Metadata Comments
- Use
# for Shell, Python, Ruby
- Use
// for JavaScript, Swift
- Place metadata at the top of the file, after the shebang
- Format:
# @raycast.fieldName value
Workflow Decision Tree
When creating a Raycast script, follow this decision process:
- What language? → Choose template from
assets/
- What's the output behavior?
- No output needed →
mode: silent
- Background task →
mode: compact
- Detailed output →
mode: fullOutput
- Auto-refreshing data →
mode: inline + add refreshTime
- Needs confirmation? → Add
needsConfirmation: true
- Needs user input? → Add
argument1, argument2, or argument3
- Part of a group? → Set
packageName to category
- Visual icon? → Set
icon to emoji or file path
Reference Documentation
For detailed information about metadata fields and output modes, refer to:
references/raycast-metadata.md - Complete metadata reference with all fields and modes
Templates
All language templates are available in the assets/ directory:
assets/template.sh - Bash/Shell
assets/template.py - Python 3
assets/template.js - JavaScript/Node.js
assets/template.rb - Ruby
assets/template.swift - Swift
assets/template.applescript - AppleScript
Output Format
Always output a complete, valid Raycast script with:
- Proper shebang line
- All required metadata fields
- Appropriate optional metadata
- Functional script implementation
- Comments explaining key logic (if complex)
The script should be ready to save, make executable, and use immediately in Raycast.