prompts.chat is the world's largest open-source library offering a curated collection of prompt examples for various AI chat models like ChatGPT, Claude, and Gemini. It's ideal for developers and users looking to discover, utilize, and improve AI prompts for diverse applications, from coding to creative writing.
USP
This project stands out as the most comprehensive open-source prompt library, offering not only a vast collection but also an interactive book on prompt engineering, a game for kids, self-hosting options, and direct integration as a Claudeโฆ
Use cases
01Discovering and utilizing high-quality AI prompts for various tasks
02Learning prompt engineering techniques through an interactive guide
03Integrating a prompt library into custom AI tools and agents
04Self-hosting a private, branded prompt collection
05Teaching children how to interact effectively with AI
---
name: prompt-lookup
description: Activates when the user asks about AI prompts, needs prompt templates, wants to search for prompts, or mentions prompts.chat. Use for discovering, retrieving, and improving prompts.
---
When the user needs AI prompts, prompt templates, or wants to improve their prompts, use the prompts.chat MCP server to help them.
## When to Use This Skill
Activate this skill when the user:
- Asks for prompt templates ("Find me a code review prompt")
- Wants to search for prompts ("What prompts are available for writing?")
- Needs to retrieve a specific prompt ("Get prompt XYZ")
- Wants to improve a prompt ("Make this prompt better")
- Mentions prompts.chat or prompt libraries
## Available Tools
Use these prompts.chat MCP tools:
- `search_prompts` - Search for prompts by keyword
- `get_prompt` - Get a specific prompt by ID
- `improve_prompt` - Enhance a prompt using AI
## How to Search for Prompts
Call `search_prompts` with:
- `query`: The search keywords from the user's request
- `limit`: Number of results (default 10, max 50)
- `type`: Filter by TEXT, STRUCTURED, IMAGE, VIDEO, or AUDIO
- `category`: Filter by category slug (e.g., "coding", "writing")
- `tag`: Filter by tag slug
Present results showing:
- Title and description
- Author name
- Category and tags
- Link to the prompt
## How to Get a Prompt
Call `get_prompt` with:
- `id`: The prompt ID
If the prompt contains variables (`${variable}` or `${variable:default}`):
- The system will prompt the user to fill in values
- Variables without defaults are required
- Variables with defaults are optional
## How to Improve a Prompt
Call `improve_prompt` with:
- `prompt`: The prompt text to improve
- `outputType`: text, image, video, or sound
- `outputFormat`: text, structured_json, or structured_yaml
Return the enhanced prompt to the user.
## Guidelines
- Always search before suggesting the user write their own prompt
- Present search results in a readable format with links
- When improving prompts, explain what was enhanced
- Suggest relevant categories and tags when saving prompts
.windsurf/skills/book-translation/SKILL.mdskill
Show content (7404 bytes)
---
name: book-translation
description: Translate "The Interactive Book of Prompting" chapters and UI strings to a new language
---
# Book Translation Skill
This skill guides translation of book content for **The Interactive Book of Prompting** at prompts.chat.
## Overview
The book has **25 chapters** across 7 parts. Translation requires:
1. **MDX content files** - Full chapter content in `src/content/book/{locale}/`
2. **JSON translation keys** - UI strings, chapter titles, and descriptions in `messages/{locale}.json`
## Prerequisites
Before starting, identify:
- **Target locale code** (e.g., `de`, `fr`, `es`, `ja`, `ko`, `zh`)
- Check if locale exists in `messages/` directory
- Check if `src/content/book/{locale}/` folder exists
## Step 1: Copy Turkish Folder as Base
The Turkish (`tr`) translation is complete and well-tested. **Copy it as your starting point** instead of translating from English:
```bash
mkdir -p src/content/book/{locale}
cp -r src/content/book/*.mdx src/content/book/{locale}/
cp src/components/book/elements/locales/en.ts src/components/book/elements/locales/{locale}.ts
```
**โ ๏ธ IMPORTANT: After copying, you MUST register the new locale in `src/components/book/elements/locales/index.ts`:**
1. Add import: `import {locale} from "./{locale}";`
2. Add to `locales` object: `{locale},`
3. Add to named exports: `export { en, tr, az, {locale} };`
This is faster because:
- Turkish and many languages share similar sentence structures
- All JSX/React components are already preserved correctly
- File structure is already set up
- You only need to translate the prose, not recreate the structure
## Step 2: Translate MDX Content Files
Edit each copied file in `src/content/book/{locale}/` to translate from Turkish to your target language.
Process files one by one:
### Chapter List (in order)
| Slug | English Title |
|------|---------------|
| `00a-preface` | Preface |
| `00b-history` | History |
| `00c-introduction` | Introduction |
| `01-understanding-ai-models` | Understanding AI Models |
| `02-anatomy-of-effective-prompt` | Anatomy of an Effective Prompt |
| `03-core-prompting-principles` | Core Prompting Principles |
| `04-role-based-prompting` | Role-Based Prompting |
| `05-structured-output` | Structured Output |
| `06-chain-of-thought` | Chain of Thought |
| `07-few-shot-learning` | Few-Shot Learning |
| `08-iterative-refinement` | Iterative Refinement |
| `09-json-yaml-prompting` | JSON & YAML Prompting |
| `10-system-prompts-personas` | System Prompts & Personas |
| `11-prompt-chaining` | Prompt Chaining |
| `12-handling-edge-cases` | Handling Edge Cases |
| `13-multimodal-prompting` | Multimodal Prompting |
| `14-context-engineering` | Context Engineering |
| `15-common-pitfalls` | Common Pitfalls |
| `16-ethics-responsible-use` | Ethics & Responsible Use |
| `17-prompt-optimization` | Prompt Optimization |
| `18-writing-content` | Writing & Content |
| `19-programming-development` | Programming & Development |
| `20-education-learning` | Education & Learning |
| `21-business-productivity` | Business & Productivity |
| `22-creative-arts` | Creative Arts |
| `23-research-analysis` | Research & Analysis |
| `24-future-of-prompting` | The Future of Prompting |
| `25-agents-and-skills` | Agents & Skills |
### MDX Translation Guidelines
1. **Preserve all JSX/React components** - Keep `<div>`, `<img>`, `className`, etc. unchanged
2. **Preserve code blocks** - Code examples should remain in English (variable names, keywords)
3. **Translate prose content** - Headings, paragraphs, lists
4. **Keep Markdown syntax** - `##`, `**bold**`, `*italic*`, `[links](url)`
5. **Preserve component imports** - Any `import` statements at the top
## Step 3: Translate JSON Keys
In `messages/{locale}.json`, translate the `"book"` section. Key areas:
### Book Metadata
```json
"book": {
"title": "The Interactive Book of Prompting",
"subtitle": "An Interactive Guide to Crafting Clear and Effective Prompts",
"metaTitle": "...",
"metaDescription": "...",
...
}
```
### Chapter Titles (`book.chapters`)
```json
"chapters": {
"00a-preface": "Preface",
"00b-history": "History",
"00c-introduction": "Introduction",
...
}
```
### Chapter Descriptions (`book.chapterDescriptions`)
```json
"chapterDescriptions": {
"00a-preface": "A personal note from the author",
"00b-history": "The story of Awesome ChatGPT Prompts",
...
}
```
### Part Names (`book.parts`)
```json
"parts": {
"introduction": "Introduction",
"foundations": "Foundations",
"techniques": "Techniques",
"advanced": "Advanced Strategies",
"bestPractices": "Best Practices",
"useCases": "Use Cases",
"conclusion": "Conclusion"
}
```
### Interactive Demo Examples (`book.interactive.demoExamples`)
Localize example text for demos (tokenizer samples, temperature examples, etc.):
```json
"demoExamples": {
"tokenPrediction": {
"tokens": ["The", " capital", " of", " France", " is", " Paris", "."],
"fullText": "The capital of France is Paris."
},
"temperature": {
"prompt": "What is the capital of France?",
...
}
}
```
### Book Elements Locales (REQUIRED)
**โ ๏ธ DO NOT SKIP THIS STEP** - The interactive demos will not work in the new language without this.
Translate the locale data file at `src/components/book/elements/locales/{locale}.ts`:
- Temperature examples, token predictions, embedding words
- Capabilities list, sample conversations, strategies
- Tokenizer samples, builder fields, chain types
- Frameworks (CRISPE, BREAK, RTF), exercises
- Image/video prompt options, validation demos
**Then register it in `src/components/book/elements/locales/index.ts`:**
```typescript
import {locale} from "./{locale}";
const locales: Record<string, LocaleData> = {
en,
tr,
az,
{locale}, // Add your new locale here
};
export { en, tr, az, {locale} }; // Add to exports
```
### UI Strings (`book.interactive.*`, `book.chapter.*`, `book.search.*`)
Translate all interactive component labels and navigation strings.
## Step 4: Verify Translation
1. Run the check script:
```bash
node scripts/check-translations.js
```
2. Start dev server and test:
```bash
npm run dev
```
3. Navigate to `/book` with the target locale to verify content loads
## Reference: English Translation
The English (`en`) translation is complete and serves as the **base template** for all new translations:
- MDX files: `src/content/book/*.mdx` โ copy this files to `src/content/book/{locale}/*.mdx`
- JSON keys: `messages/en.json` โ `book` section โ use as reference for structure
### Recommended Workflow
1. Copy `src/content/book/*.mdx` to `src/content/book/{locale}/*.mdx`
2. Copy the `"book"` section from `messages/en.json` to `messages/{locale}.json`. Translate these in multiple agentic session instead of single time (token limit may exceed at once)
3. Edit each file, translating English โ target language
4. Keep all JSX components, code blocks, and Markdown syntax intact
## Quality Guidelines
- **Consistency**: Use consistent terminology throughout (e.g., always translate "prompt" the same way)
- **Technical terms**: Some terms like "AI", "ChatGPT", "API" may stay in English
- **Cultural adaptation**: Adapt examples to be relevant for the target audience where appropriate
- **Natural language**: Prioritize natural-sounding translations over literal ones
.windsurf/skills/widget-generator/SKILL.mdskill
Show content (9428 bytes)
---
name: widget-generator
description: Generate customizable widget plugins for the prompts.chat feed system
---
# Widget Generator Skill
This skill guides creation of widget plugins for **prompts.chat**. Widgets are injected into prompt feeds to display promotional content, sponsor cards, or custom interactive components.
## Overview
Widgets support two rendering modes:
1. **Standard prompt widget** - Uses default `PromptCard` styling (like `coderabbit.ts`)
2. **Custom render widget** - Full custom React component (like `book.tsx`)
## Prerequisites
Before creating a widget, gather from the user:
| Parameter | Required | Description |
|-----------|----------|-------------|
| Widget ID | โ | Unique identifier (kebab-case, e.g., `my-sponsor`) |
| Widget Name | โ | Display name for the plugin |
| Rendering Mode | โ | `standard` or `custom` |
| Sponsor Info | โ | Name, logo, logoDark, URL (for sponsored widgets) |
## Step 1: Gather Widget Configuration
Ask the user for the following configuration options:
### Basic Info
```
- id: string (unique, kebab-case)
- name: string (display name)
- slug: string (URL-friendly identifier)
- title: string (card title)
- description: string (card description)
```
### Content (for standard mode)
```
- content: string (prompt content, can be multi-line markdown)
- type: "TEXT" | "STRUCTURED"
- structuredFormat?: "json" | "yaml" (if type is STRUCTURED)
```
### Categorization
```
- tags?: string[] (e.g., ["AI", "Development"])
- category?: string (e.g., "Development", "Writing")
```
### Action Button
```
- actionUrl?: string (CTA link)
- actionLabel?: string (CTA button text)
```
### Sponsor (optional)
```
- sponsor?: {
name: string
logo: string (path to light mode logo)
logoDark?: string (path to dark mode logo)
url: string (sponsor website)
}
```
### Positioning Strategy
```
- positioning: {
position: number (0-indexed start position, default: 2)
mode: "once" | "repeat" (default: "once")
repeatEvery?: number (for repeat mode, e.g., 30)
maxCount?: number (max occurrences, default: 1 for once, unlimited for repeat)
}
```
### Injection Logic
```
- shouldInject?: (context) => boolean
Context contains:
- filters.q: search query
- filters.category: category name
- filters.categorySlug: category slug
- filters.tag: tag filter
- filters.sort: sort option
- itemCount: total items in feed
```
## Step 2: Create Widget File
### Standard Widget (TypeScript only)
Create file: `src/lib/plugins/widgets/{widget-id}.ts`
```typescript
import type { WidgetPlugin } from "./types";
export const {widgetId}Widget: WidgetPlugin = {
id: "{widget-id}",
name: "{Widget Name}",
prompts: [
{
id: "{prompt-id}",
slug: "{prompt-slug}",
title: "{Title}",
description: "{Description}",
content: `{Multi-line content here}`,
type: "TEXT",
// Optional sponsor
sponsor: {
name: "{Sponsor Name}",
logo: "/sponsors/{sponsor}.svg",
logoDark: "/sponsors/{sponsor}-dark.svg",
url: "{sponsor-url}",
},
tags: ["{Tag1}", "{Tag2}"],
category: "{Category}",
actionUrl: "{action-url}",
actionLabel: "{Action Label}",
positioning: {
position: 2,
mode: "repeat",
repeatEvery: 50,
maxCount: 3,
},
shouldInject: (context) => {
const { filters } = context;
// Always show when no filters active
if (!filters?.q && !filters?.category && !filters?.tag) {
return true;
}
// Add custom filter logic here
return false;
},
},
],
};
```
### Custom Render Widget (TSX with React)
Create file: `src/lib/plugins/widgets/{widget-id}.tsx`
```tsx
import Link from "next/link";
import Image from "next/image";
import { Button } from "@/components/ui/button";
import type { WidgetPlugin } from "./types";
function {WidgetName}Widget() {
return (
<div className="group border rounded-[var(--radius)] overflow-hidden hover:border-foreground/20 transition-colors bg-gradient-to-br from-primary/5 via-background to-primary/10 p-5">
{/* Custom widget content */}
<div className="flex flex-col items-center gap-4">
{/* Image/visual element */}
<div className="relative w-full aspect-video">
<Image
src="/path/to/image.jpg"
alt="{Alt text}"
fill
className="object-cover rounded-lg"
/>
</div>
{/* Content */}
<div className="w-full text-center">
<h3 className="font-semibold text-base mb-1.5">{Title}</h3>
<p className="text-xs text-muted-foreground mb-4">{Description}</p>
<Button asChild size="sm" className="w-full">
<Link href="{action-url}">{Action Label}</Link>
</Button>
</div>
</div>
</div>
);
}
export const {widgetId}Widget: WidgetPlugin = {
id: "{widget-id}",
name: "{Widget Name}",
prompts: [
{
id: "{prompt-id}",
slug: "{prompt-slug}",
title: "{Title}",
description: "{Description}",
content: "",
type: "TEXT",
tags: ["{Tag1}", "{Tag2}"],
category: "{Category}",
actionUrl: "{action-url}",
actionLabel: "{Action Label}",
positioning: {
position: 10,
mode: "repeat",
repeatEvery: 60,
maxCount: 4,
},
shouldInject: () => true,
render: () => <{WidgetName}Widget />,
},
],
};
```
## Step 3: Register Widget
Edit `src/lib/plugins/widgets/index.ts`:
1. Add import at top:
```typescript
import { {widgetId}Widget } from "./{widget-id}";
```
2. Add to `widgetPlugins` array:
```typescript
const widgetPlugins: WidgetPlugin[] = [
coderabbitWidget,
bookWidget,
{widgetId}Widget, // Add new widget
];
```
## Step 4: Add Sponsor Assets (if applicable)
If the widget has a sponsor:
1. Add light logo: `public/sponsors/{sponsor}.svg`
2. Add dark logo (optional): `public/sponsors/{sponsor}-dark.svg`
## Positioning Examples
### Show once at position 5
```typescript
positioning: {
position: 5,
mode: "once",
}
```
### Repeat every 30 items, max 5 times
```typescript
positioning: {
position: 3,
mode: "repeat",
repeatEvery: 30,
maxCount: 5,
}
```
### Unlimited repeating
```typescript
positioning: {
position: 2,
mode: "repeat",
repeatEvery: 25,
// No maxCount = unlimited
}
```
## shouldInject Examples
### Always show
```typescript
shouldInject: () => true,
```
### Only when no filters active
```typescript
shouldInject: (context) => {
const { filters } = context;
return !filters?.q && !filters?.category && !filters?.tag;
},
```
### Show for specific categories
```typescript
shouldInject: (context) => {
const slug = context.filters?.categorySlug?.toLowerCase();
return slug?.includes("development") || slug?.includes("coding");
},
```
### Show when search matches keywords
```typescript
shouldInject: (context) => {
const query = context.filters?.q?.toLowerCase() || "";
return ["ai", "automation", "workflow"].some(kw => query.includes(kw));
},
```
### Show only when enough items
```typescript
shouldInject: (context) => {
return (context.itemCount ?? 0) >= 10;
},
```
## Custom Render Patterns
### Card with gradient background
```tsx
<div className="border rounded-[var(--radius)] overflow-hidden bg-gradient-to-br from-primary/5 via-background to-primary/10 p-5">
```
### Sponsor badge
```tsx
<div className="flex items-center gap-2 mb-2">
<span className="text-xs font-medium text-primary">Sponsored</span>
</div>
```
### Responsive image
```tsx
<div className="relative w-full aspect-video">
<Image src="/image.jpg" alt="..." fill className="object-cover" />
</div>
```
### CTA button
```tsx
<Button asChild size="sm" className="w-full">
<Link href="https://example.com">
Learn More
<ArrowRight className="ml-2 h-3.5 w-3.5" />
</Link>
</Button>
```
## Verification
1. Run type check:
```bash
npx tsc --noEmit
```
2. Start dev server:
```bash
npm run dev
```
3. Navigate to `/discover` or `/feed` to verify widget appears at configured positions
## Type Reference
```typescript
interface WidgetPrompt {
id: string;
slug: string;
title: string;
description: string;
content: string;
type: "TEXT" | "STRUCTURED";
structuredFormat?: "json" | "yaml";
sponsor?: {
name: string;
logo: string;
logoDark?: string;
url: string;
};
tags?: string[];
category?: string;
actionUrl?: string;
actionLabel?: string;
positioning?: {
position?: number; // Default: 2
mode?: "once" | "repeat"; // Default: "once"
repeatEvery?: number; // For repeat mode
maxCount?: number; // Max occurrences
};
shouldInject?: (context: WidgetContext) => boolean;
render?: () => ReactNode; // For custom rendering
}
interface WidgetPlugin {
id: string;
name: string;
prompts: WidgetPrompt[];
}
```
## Common Issues
| Issue | Solution |
|-------|----------|
| Widget not showing | Check `shouldInject` logic, verify registration in `index.ts` |
| TypeScript errors | Ensure imports from `./types`, check sponsor object shape |
| Styling issues | Use Tailwind classes, match existing widget patterns |
| Position wrong | Remember positions are 0-indexed, check `repeatEvery` value |
---
name: skill-lookup
description: >
Search, retrieve, and install Agent Skills from the prompts.chat registry using MCP tools.
Use when the user asks to find skills, browse skill catalogs, install a skill for Claude,
or extend Claude's capabilities with reusable AI agent components.
license: MIT
---
## Workflow
1. Search for skills matching the user's request using `search_skills`
2. Present results with title, description, author, and file list
3. If the user picks a skill, retrieve it with `get_skill` to get all files
4. Install by saving files to `.claude/skills/{slug}/` and verify the SKILL.md exists
5. Confirm installation and explain what the skill does and when it activates
## Example
```
search_skills({"query": "code review", "limit": 5, "category": "coding"})
get_skill({"id": "abc123"})
```
## Available Tools
Use these prompts.chat MCP tools:
- `search_skills` - Search for skills by keyword
- `get_skill` - Get a specific skill by ID with all its files
## How to Search for Skills
Call `search_skills` with:
- `query`: The search keywords from the user's request
- `limit`: Number of results (default 10, max 50)
- `category`: Filter by category slug (e.g., "coding", "automation")
- `tag`: Filter by tag slug
Present results showing:
- Title and description
- Author name
- File list (SKILL.md, reference docs, scripts)
- Category and tags
- Link to the skill
## How to Get a Skill
Call `get_skill` with:
- `id`: The skill ID
Returns the skill metadata and all file contents:
- SKILL.md (main instructions)
- Reference documentation
- Helper scripts
- Configuration files
## How to Install a Skill
When the user asks to install a skill:
1. Call `get_skill` to retrieve all files
2. Create the directory `.claude/skills/{slug}/`
3. Save each file to the appropriate location:
- `SKILL.md` โ `.claude/skills/{slug}/SKILL.md`
- Other files โ `.claude/skills/{slug}/{filename}`
4. Read back `SKILL.md` to verify the frontmatter is intact
## Guidelines
- Always search before suggesting the user create their own skill
- Present search results in a readable format with file counts
- When installing, confirm the skill was saved successfully
- Explain what the skill does and when it activates
Learn prompt engineering with our free, interactive guide โ 25+ chapters covering everything from basics to advanced techniques like chain-of-thought reasoning, few-shot learning, and AI agents.