用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/vamseeachanta/workspace-hub --skill raycast-alfred-1-raycast-extension-development命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
基于 SOC 职业分类
正在显示 SKILL.md
| name | raycast-alfred-1-raycast-extension-development |
| description | Sub-skill of raycast-alfred: 1. Raycast Extension Development (+2). |
| version | 1.0.0 |
| category | operations |
| type | reference |
| scripts_exempt | true |
// Use proper error handling
import { showToast, Toast } from "@raycast/api";
async function safeFetch(url: string) {
try {
const response = await fetch(url);
if (!response.ok) {
throw new Error(`HTTP ${response.status}`);
}
return response.json();
} catch (error) {
showToast({
style: Toast.Style.Failure,
title: "Request failed",
message: String(error),
});
return null;
}
}
// Use LocalStorage for persistence
import { LocalStorage } from "@raycast/api";
async function saveData(key: string, data: any) {
await LocalStorage.setItem(key, JSON.stringify(data));
}
async function loadData<T>(key: string, defaultValue: T): Promise<T> {
const json = await LocalStorage.getItem<string>(key);
return json ? JSON.parse(json) : defaultValue;
}
# Always output valid JSON for Script Filters
import json
import sys
def output_items(items):
"""Output Alfred JSON format"""
print(json.dumps({"items": items}))
def output_error(message):
"""Output error as Alfred item"""
output_items([{
"title": "Error",
"subtitle": message,
"icon": {"path": "error.png"}
}])
# Handle keyboard interrupt gracefully
if __name__ == "__main__":
try:
main()
except KeyboardInterrupt:
sys.exit(0)
except Exception as e:
output_error(str(e))
sys.exit(1)
// Debounce search queries
import { useState, useCallback } from "react";
import { useDebouncedValue } from "@raycast/utils";
function SearchCommand() {
const [query, setQuery] = useState("");
const debouncedQuery = useDebouncedValue(query, 300);
// Use debouncedQuery for API calls
}
// Cache API responses
const cache = new Map<string, { data: any; timestamp: number }>();
const CACHE_TTL = 5 * 60 * 1000; // 5 minutes
async function cachedFetch(url: string) {
const cached = cache.get(url);
if (cached && Date.now() - cached.timestamp < CACHE_TTL) {
return cached.data;
}
const data = await fetch(url).then( r.());
cache.(url, { data, : .() });
data;
}