browser-testing-with-s…
Use when testing web applications with visual verification - automates Chrome browser interactions, element selection, and…
Use when creating new Claude Code skills or improving existing ones - ensures skills are discoverable, scannable, and effective through proper structure, CSO optimization, and real examples
Claude Code
$ npx -y skills add AgentWorkforce/relay --skill creating-skills-skill --agent claude-code
Codex
$ npx skills add AgentWorkforce/relay --skill creating-skills-skill -a codex -y
Cursor
$ npx skills add AgentWorkforce/relay --skill creating-skills-skill -a cursor -y
Gemini CLI
$ npx skills add AgentWorkforce/relay --skill creating-skills-skill -a gemini-cli -y
GitHub Copilot
$ npx skills add AgentWorkforce/relay --skill creating-skills-skill -a github-copilot -y
OpenCode
$ npx skills add AgentWorkforce/relay --skill creating-skills-skill -a opencode -y
Windsurf
$ npx skills add AgentWorkforce/relay --skill creating-skills-skill -a windsurf -y
name: creating-skills description: Use when creating new Claude Code skills or improving existing ones - ensures skills are discoverable, scannable, and effective through proper structure, CSO optimization, and real examples
**Skills are reference guides for proven techniques, patterns, or tools.** Write them to help future Claude instances quickly find and apply effective approaches.
Skills must be **discoverable** (Claude can find them), **scannable** (quick to evaluate), and **actionable** (clear examples).
**Core principle**: Default assumption is Claude is already very smart. Only add context Claude doesn't already have.
**Create a skill when:**
**Don't create for:**
--- name: skill-name-with-hyphens description: Use when [triggers/symptoms] - [what it does and how it helps] tags: relevant-tags ---
**Rules:**
# Skill Name ## Overview Core principle in 1-2 sentences. What is this? ## When to Use - Bullet list with symptoms and use cases - When NOT to use ## Quick Reference Table or bullets for common operations ## Implementation Inline code for simple patterns Link to separate file for heavy reference (100+ lines) ## Common Mistakes What goes wrong + how to fix ## Real-World Impact (optional) Concrete results from using this technique
**Match specificity to task complexity:**
**Red flag**: If skill tries to constrain Claude too much on creative tasks, reduce specificity. If skill is too vague on critical operations, add explicit steps.
**Critical:** Future Claude reads the description to decide if skill is relevant. Optimize for discovery.
# ❌ BAD - Too vague, doesn't mention when to use description: For async testing # ❌ BAD - First person (injected into system prompt) description: I help you with flaky tests # ✅ GOOD - Triggers + what it does description: Use when tests have race conditions or pass/fail inconsistently - replaces arbitrary timeouts with condition polling for reliable async tests # ✅ GOOD - Technology-specific with explicit trigger description: Use when using React Router and handling auth redirects - provides patterns for protected routes and auth state management
Use words Claude would search for:
**Use gerund form (verb + -ing):**
**Why gerunds work:**
**Avoid:**
**One excellent example beats many mediocre ones.**
// ✅ GOOD - Clear, complete, ready to adapt
interface RetryOptions {
maxAttempts: number;
delayMs: number;
backoff?: 'linear' | 'exponential';
}
async function retryOperation<T>(operation: () => Promise<T>, options: RetryOptions): Promise<T> {
const { maxAttempts, delayMs, backoff = 'linear' } = options;
for (let attempt = 1; attempt <= maxAttempts; attempt++) {
try {
return await operation();
} catch (error) {
if (attempt === maxAttempts) throw error;
const delay = backoff === 'exponential' ? delayMs * Math.pow(2, attempt - 1) : delayMs * attempt;
await new Promise((resolve) => setTimeout(resolve, delay));
}
}
throw new Error('Unreachable');
}
// Usage
const data = await retryOperation(() => fetchUserData(userId), {
maxAttempts: 3,
delayMs: 1000,
backoff: 'exponential',
});Tired of copy/pasting from Claude Code into Slack so your coworker can paste it into their agent? Ever put an important rule in a skill or AGENTS.md, only for the agent to completely ignore it? You and your teammates agents ever build the same thing?
Use when testing web applications with visual verification - automates Chrome browser interactions, element selection, and…
Use when coordinating multiple AI agents with Agent Relay's workflow engine and need to pick the right orchestration pattern -…
Use when creating or improving Claude Code agents. Expert guidance on agent file structure, frontmatter, persona definition, tool…
Use when creating or publishing Claude Code hooks - covers executable format, event types, JSON I/O, exit codes, security…
Use when creating or fixing .claude/rules/ files - provides correct paths frontmatter (not globs), glob patterns, and avoids…
Use when seeing WebSocket errors like "Invalid frame header", "RSV1 must be clear", or "WS_ERR_UNEXPECTED_RSV_1" - covers…
Direct browser control via CDP for web interaction: automation, scraping, testing, screenshots, and site/app work. Also covers…
Browser automation CLI for AI agents. Use when the user needs to interact with websites, including navigating pages, filling…