Delegate independent tasks to specialized agents working concurrently with isolated context.
Agent Creating
Used to create a new agent. Used when a user wants to create a new agent
SKILL.md
Full skill instructions
Create Skill
Instructions
Invoked when the user requests to create a new agent or subagent
Create Skill
Instructions
When requested to create a new skill, follow these steps:
- Create a new file in
.claude/agentswith the agent namexyz.md(ex: "stripe-implementor" or "code-reviewer") - Take the requested input given to you to turn into a re-usable agent.
- Be sure to have the description field be very clear on what it does and how to use it - 2-4 sentences max
- Make sure it has a clear persona and goal
- Below that, give it minimal, clear, actionable Markdown instructions as the primary workflow guide.
- Be sure it knows the
docs/convexGuidelines.md
Examples
code-reviewer.md
name: code-reviewer description: Expert code review specialist. Proactively reviews code for quality, security, and maintainability. Use immediately after writing or modifying code. tools: Read, Grep, Glob, Bash model: inherit
You are a senior code reviewer ensuring high standards of code quality and security.
When invoked:
- Run git diff to see recent changes
- Focus on modified files
- Begin review immediately
Review checklist:
- Code is simple and readable
- Functions and variables are well-named
- No duplicated code
- Proper error handling
- No exposed secrets or API keys
- Input validation implemented
- Good test coverage
- Performance considerations addressed
Provide feedback organized by priority:
- Critical issues (must fix)
- Warnings (should fix)
- Suggestions (consider improving)
Include specific examples of how to fix issues.
Example when agent is app/API/service specific:
name: Nano-banana-editor description: Implement an image editor powered by Google Gemini image model. Use this when implementing an AI image editor into app model: inherit color: blue
Agent: Nano Banana Editor
Prevent these exact errors when implementing AI image editing in React Native + Convex.
Error Prevention Checklist
1. TypeScript Return Types
WILL ERROR: TS7022: 'editImageWithGemini' implicitly has type 'any'
// ❌ This breaks
export const editImageWithGemini = action({
args: { userId: v.string() },
handler: async (ctx, { userId }) => {
// ✅ This works
export const editImageWithGemini = action({
args: { userId: v.string() },
handler: async (ctx, { userId }): Promise<{ success: boolean; versionId?: any }> => {
2. Gemini Model Names
WILL ERROR: [404 Not Found] models/gemini-2.5-flash-image is not found
// ❌ This breaks
model: 'gemini-2.5-flash-image'
// ✅ This works
model: 'gemini-2.5-flash-image-preview'
3. Buffer in Convex Environment
WILL ERROR: ReferenceError: Buffer is not defined
// ❌ This breaks
const base64 = Buffer.from(arrayBuffer).toString('base64');
const imageBuffer = Buffer.from(base64Data, 'base64');
// ✅ This works - chunked conversion
const uint8Array = new Uint8Array(arrayBuffer);
let binaryString = '';
const chunkSize = 8192;
for (let i = 0; i < uint8Array.length; i += chunkSize) {
const chunk = uint8Array.slice(i, i + chunkSize);
binaryString += String.fromCharCode.apply(null, Array.from(chunk));
}
const base64 = btoa(binaryString);
// For base64 to blob
const binaryString = atob(base64Data);
const uint8Array = new Uint8Array(binaryString.length);
for (let i = 0; i < binaryString.length; i++) {
uint8Array[i] = binaryString.charCodeAt(i);
}
const blob = new Blob([uint8Array], { type: 'image/jpeg' });
4. Large Array Spread Operator
WILL ERROR: RangeError: Maximum call stack size exceeded
// ❌ This breaks with large images
const base64 = btoa(String.fromCharCode(...uint8Array));
// ✅ This works - use chunked processing from #3 above
5. Data URL Fetching
WILL ERROR: Unsupported URL scheme -- http and https are supported (scheme was data)
// ❌ This breaks
const response = await fetch(sourceImageUrl); // fails if data: URL
// ✅ This works
if (sourceImageUrl.startsWith('data:')) {
const base64Match = sourceImageUrl.match(/^data:image\/[^;]+;base64,(.+)$/);
if (!base64Match) throw new Error('Invalid data URL format');
base64Data = base64Match[1];
} else {
const response = await fetch(sourceImageUrl);
if (!response.ok) throw new Error(`Failed to fetch: ${response.statusText}`);
// ... convert to base64 using chunked method
}
6. Database Size Limits
WILL ERROR: Value is too large (1.76 MiB > maximum size 1 MiB)
// ❌ This breaks - data URLs are huge
await ctx.db.insert("projects", {
originalImageUrl: asset.uri, // data: URL = several MB
});
// Frontend passes data URL to mutation
const projectId = await createProject({
originalImageUrl: asset.uri, // BREAKS!
});
// ✅ This works - only storage IDs in database
// Backend generates URL from storage ID
const imageUrl = await ctx.storage.getUrl(originalImageId);
await ctx.db.insert("projects", {
originalImageId: storageId, // small ID
originalImageUrl: imageUrl, // generated URL
});
// Frontend only passes storage ID
const projectId = await createProject({
originalImageId: storageId, // WORKS!
});
Implementation Rules
- ALWAYS add
: Promise<Type>to all Convex action handlers - ALWAYS use
gemini-2.5-flash-image-preview(with -preview suffix) - NEVER use
Buffer- use chunkedbtoa/atobwith 8KB chunks - NEVER use spread operator on large arrays - use chunked processing
- ALWAYS check
imageUrl.startsWith('data:')before fetch - NEVER store data URLs in database - upload to storage first, pass only storage IDs
More Other skills
brand-guidelines
Applies Anthropic's official brand colors and typography to any sort of artifact that may benefit from having Anthropic's look-and-feel. Use it when brand colors or style guidelines, visual formatting, or company design standards apply.
theme-factory
Toolkit for styling artifacts with a theme. These artifacts can be slides, docs, reportings, HTML landing pages, etc. There are 10 pre-set themes with colors/fonts that you can apply to any artifact that has been creating, or can generate a new theme on-the-fly.
internal-comms
A set of resources to help me write all kinds of internal communications, using the formats that my company likes to use. Claude should use this skill whenever asked to write some sort of internal communications (status reports, leadership updates, 3P updates, company newsletters, FAQs, incident reports, project updates, etc.).
Fundamental design principles for writing maintainable, testable Python code.
responsive-design
Modern responsive layouts using container queries, fluid typography, CSS Grid, and mobile-first strategies.
Generate Playwright tests from scenarios using interactive browser exploration and validation.
Automated website exploration and test case generation using Playwright.
Modern React state management with Redux Toolkit, Zustand, Jotai, and React Query for every state category.
gdpr-data-handling
GDPR-compliant data handling with consent management, data subject rights, and privacy controls.
Python error handling patterns including input validation, exception hierarchies, and partial failure handling. Use when implementing validation logic, designing exception strategies, handling batch processing failures, or building robust APIs.
refactor-plan
Detailed multi-file refactor planning with safety checks and rollback guidance.
