[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6CG1HW3W7WWXQ4NN9PPXFSW":3,"skill-same:01M6CG1HW3W7WWXQ4NN9PPXFSW":117},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":23,"publishedAt":41,"linkOnly":42,"markdownContent":43,"markdownBody":44,"frontMatter":45,"refName":47,"commitSha":48,"skillDirectory":49,"forksCount":50,"repositoryHtmlUrl":51,"repositoryHomepageUrl":6,"ownerHtmlUrl":52,"ownerBlogUrl":53,"ownerDescription":6,"updatedAt":54,"install":55,"resources":68},"01M6CG1HW3W7WWXQ4NN9PPXFSW","listener-creator",null,"Creates event-driven email listeners that monitor for specific conditions (like urgent emails from boss, newsletters to archive, package tracking) and execute custom actions. Use when user wants to be notified about emails, automatically handle certain emails, or set up email automation workflows.","foksa\u002Fopen-claude-agent-sdk","foksa","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F2655696?v=4","01M6CG18CS8KTJE4F6AS39QD62","Djordje Radakovic","01M6CG18GZKNTK5H70NW3VB6SF",8,"MIT","https:\u002F\u002Fgithub.com\u002Ffoksa\u002Fopen-claude-agent-sdk\u002Fblob\u002Fmain\u002Fdemos\u002Fofficial\u002Femail-agent\u002Fagent\u002F.claude\u002Fskills\u002Flistener-creator\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40],"listener creator","read","up","use","execute","user","tracking","edit","write","automation","archive","SET","email","actions","package","monitor","workflows","2026-11-10 10:12:30",false,"---\nname: listener-creator\ndescription: Creates event-driven email listeners that monitor for specific conditions (like urgent emails from boss, newsletters to archive, package tracking) and execute custom actions. Use when user wants to be notified about emails, automatically handle certain emails, or set up email automation workflows.\nallowed-tools: Write, Edit, Read, Glob\n---\n\n# Listener Creator\n\nCreates TypeScript listener files that monitor email events and execute custom logic when conditions are met.\n\n## When to Use This Skill\n\nUse this skill when the user wants to:\n- Get notifications about specific emails (\"notify me when boss sends urgent emails\")\n- Automatically handle certain emails (\"auto-archive newsletters\")\n- Monitor for patterns (\"watch for package tracking emails\")\n- Set up scheduled actions (\"daily email summary at 9am\")\n- Create custom email workflows\n\n## How Listeners Work\n\nListeners are TypeScript files in `agent\u002Fcustom_scripts\u002Flisteners\u002F` that:\n1. Export a `config` object defining the event type and metadata\n2. Export a `handler` function that filters and processes events\n3. Use `ListenerContext` methods to perform actions (notify, archive, star, etc.)\n\nThe system automatically loads enabled listeners and executes them when matching events occur.\n\n## Creating a Listener\n\n### 1. Understand the User's Intent\n\nParse the user's request to identify:\n- **Event type**: What triggers this listener? (email_received, email_sent, email_starred, email_archived, email_labeled, scheduled_time)\n- **Filter conditions**: What specific emails\u002Fevents to match? (sender, subject keywords, time-based)\n- **Actions**: What should happen? (notify, archive, star, mark as read, add label)\n- **Priority**: How urgent is this? (high\u002Fnormal\u002Flow)\n\n### 2. Choose an Event Type\n\n```typescript\n\u002F\u002F Available event types:\n- \"email_received\"  \u002F\u002F Most common - new email arrives\n- \"email_sent\"      \u002F\u002F User sends an email\n- \"email_starred\"   \u002F\u002F Email is starred\n- \"email_archived\"  \u002F\u002F Email is archived\n- \"email_labeled\"   \u002F\u002F Label added to email\n- \"scheduled_time\"  \u002F\u002F Time-based (cron) - requires scheduler setup\n```\n\n### 3. Write the Listener File\n\nCreate a file in `agent\u002Fcustom_scripts\u002Flisteners\u002F` with this structure:\n\n```typescript\nimport type { ListenerConfig, Email, ListenerContext } from \"..\u002Ftypes\";\n\nexport const config: ListenerConfig = {\n  id: \"unique_listener_id\",           \u002F\u002F kebab-case, descriptive\n  name: \"Human Readable Name\",         \u002F\u002F For UI display\n  description: \"What this does\",       \u002F\u002F Optional but helpful\n  enabled: true,                       \u002F\u002F Start enabled\n  event: \"email_received\"              \u002F\u002F Event type\n};\n\nexport async function handler(email: Email, context: ListenerContext): Promise\u003Cvoid> {\n  \u002F\u002F 1. Basic filter (identity\u002Fsender only)\n  if (!email.from.includes(\"example@email.com\")) return;\n\n  \u002F\u002F 2. Use AI for intelligent classification (PREFERRED over keyword matching)\n  const analysis = await context.callAgent\u003C{ isUrgent: boolean; reason: string }>({\n    prompt: `Is this email urgent?\\nSubject: ${email.subject}\\nBody: ${email.body.substring(0, 500)}`,\n    schema: {\n      type: \"object\",\n      properties: {\n        isUrgent: { type: \"boolean\" },\n        reason: { type: \"string\" }\n      },\n      required: [\"isUrgent\", \"reason\"]\n    },\n    model: \"haiku\"\n  });\n\n  if (!analysis.isUrgent) return;\n\n  \u002F\u002F 3. Perform actions via context methods\n  await context.notify(`Urgent email: ${email.subject}\\n${analysis.reason}`, {\n    priority: \"high\"\n  });\n\n  await context.starEmail(email.messageId);\n}\n```\n\n### 4. File Naming Convention\n\nUse kebab-case matching the listener's purpose:\n- `boss-urgent-watcher.ts`\n- `auto-archive-newsletters.ts`\n- `package-tracking.ts`\n- `daily-summary.ts`\n\n### 5. Available Context Methods\n\nThe `ListenerContext` provides these methods:\n\n```typescript\n\u002F\u002F Notifications\nawait context.notify(message, { priority: \"high\" | \"normal\" | \"low\" });\n\n\u002F\u002F Email actions\nawait context.archiveEmail(emailId);\nawait context.starEmail(emailId);\nawait context.unstarEmail(emailId);\nawait context.markAsRead(emailId);\nawait context.markAsUnread(emailId);\nawait context.addLabel(emailId, \"label-name\");\nawait context.removeLabel(emailId, \"label-name\");\n\n\u002F\u002F AI-powered analysis\nconst result = await context.callAgent\u003CResultType>({\n  prompt: \"Your prompt with email content\",\n  schema: {\n    type: \"object\",\n    properties: { field: { type: \"string\" } },\n    required: [\"field\"]\n  },\n  model: \"haiku\" \u002F\u002F or \"sonnet\" or \"opus\"\n});\n```\n\n## Recommended Approach: AI-Powered Classification\n\n**Default to using `context.callAgent()` for intelligent decision-making** instead of hard-coded keyword lists. This provides better accuracy and adaptability.\n\n```typescript\n\u002F\u002F PREFERRED: AI-based urgency detection\nconst analysis = await context.callAgent\u003C{ isUrgent: boolean; reason: string }>({\n  prompt: `Analyze if this email is urgent:\nSubject: ${email.subject}\nBody: ${email.body.substring(0, 500)}\n\nIs this email urgent or time-sensitive? Consider context, not just keywords.`,\n\n  schema: {\n    type: \"object\",\n    properties: {\n      isUrgent: { type: \"boolean\" },\n      reason: { type: \"string\" }\n    },\n    required: [\"isUrgent\", \"reason\"]\n  },\n  model: \"haiku\" \u002F\u002F Fast and cost-effective\n});\n\nif (analysis.isUrgent) {\n  await context.notify(`Urgent: ${email.subject}\\n${analysis.reason}`);\n}\n\n\u002F\u002F AVOID: Hard-coded keyword lists (brittle and prone to false positives)\n\u002F\u002F const isUrgent = subject.includes(\"urgent\") || subject.includes(\"asap\");\n```\n\n## Examples and Templates\n\nReference the template files for common patterns:\n\n- **[ai-classifier.ts](templates\u002Fai-classifier.ts)**: ⭐ AI-powered email classification (RECOMMENDED)\n- **[urgent-watcher.ts](templates\u002Furgent-watcher.ts)**: AI-based urgent email detection\n- **[auto-archive.ts](templates\u002Fauto-archive.ts)**: Automatically archives newsletters\n- **[package-tracker.ts](templates\u002Fpackage-tracker.ts)**: Package tracking with status extraction\n\n## Best Practices\n\n1. **Prefer AI Classification**: Use `context.callAgent()` instead of hard-coded keyword lists for intelligent decision-making\n2. **Filter Early**: Return early if email doesn't match basic criteria (like sender)\n3. **Clear IDs**: Use descriptive, unique listener IDs\n4. **Error Handling**: Wrap context method calls in try-catch when appropriate\n5. **Performance**: Use \"haiku\" model for fast AI classification (\u003C 1 second typical)\n6. **Notify Wisely**: Only notify when truly important\n7. **Avoid Hard-Coded Lists**: Let AI determine urgency, importance, or categories instead of keyword matching\n\n## Type Imports\n\nAlways import types from the correct location:\n\n```typescript\nimport type { ListenerConfig, Email, ListenerContext } from \"..\u002Ftypes\";\n\n\u002F\u002F For scheduled listeners:\nimport type { ListenerConfig, ListenerContext } from \"..\u002Ftypes\";\n\n\u002F\u002F For labeled event:\nimport type { ListenerConfig, Email, ListenerContext } from \"..\u002Ftypes\";\n```\n\n## Common Patterns\n\n### AI-Powered (PREFERRED)\nBasic filter (sender\u002Ftype) → Call AI agent for intelligent classification → Act on AI result → Notify if important\n\n**This is the recommended approach** for most listeners as it:\n- Avoids brittle keyword matching\n- Adapts to nuanced language and context\n- Makes better decisions about urgency and categorization\n- Reduces false positives\n\n### Simple Notification (Use sparingly)\nBasic filter (sender only) → Notify → Optional star\u002Flabel\n\n**Only use this when**: The trigger is purely identity-based (e.g., \"notify me about ALL emails from X\")\n\n### Auto-Archive\nBasic filter → Archive → Mark as read → Optional notify\n\n### Scheduled\nRun at specific time → Query emails → Analyze → Send summary\n\n## Creating the File\n\nWhen the user requests a listener:\n\n1. **Ask clarifying questions** if the intent is unclear:\n   - Who is the sender? What keywords?\n   - What action should happen?\n   - How urgent is this?\n\n2. **Choose the right event type** (usually `email_received`)\n\n3. **Write the TypeScript file** in `agent\u002Fcustom_scripts\u002Flisteners\u002F`\n\n4. **Use Write tool** to create the file with:\n   - Proper imports\n   - Descriptive config\n   - Handler with early filtering\n   - Appropriate context method calls\n\n5. **Return listener reference in markdown format** using `[listener:filename.ts]` notation (e.g., `[listener:boss-urgent-watcher.ts]`) for easy parsing and linking in the UI\n\n6. **Confirm with user** that the listener matches their intent\n\n### Output Format Example\n\nWhen presenting a created listener to the user, use this format:\n\n```markdown\nCreated listener: [listener:boss-urgent-watcher.ts]\n\nThis listener will:\n- Monitor emails from boss@company.com\n- Use AI to detect urgent emails (not just keywords)\n- Send high-priority notifications for truly urgent emails\n- Star emails that require immediate action\n```\n\n## When to Use AI vs Simple Filtering\n\n**Use AI (`context.callAgent()`) when:**\n- Detecting urgency, importance, or sentiment\n- Classifying email content or intent\n- Extracting structured data from email bodies\n- Making nuanced decisions based on context\n- Any logic that involves \"understanding\" the email content\n\n**Use simple filtering when:**\n- Checking exact sender\u002Frecipient\n- Basic pattern matching on email fields (e.g., \"from specific domain\")\n- Identity-based triggers (e.g., \"all emails from X person\")\n\n**Default to AI unless the filter is purely identity-based.**\n\n## Scheduled Listeners\n\nFor time-based actions (daily summaries, weekly reports):\n\n```typescript\nexport const config: ListenerConfig = {\n  id: \"daily_summary\",\n  name: \"Daily Email Summary\",\n  enabled: true,\n  event: \"scheduled_time\"\n  \u002F\u002F Note: Cron schedule configured separately in scheduler\n};\n\nexport async function handler(\n  data: { timestamp: Date },\n  context: ListenerContext\n): Promise\u003Cvoid> {\n  \u002F\u002F Your scheduled logic here\n  await context.notify(\"Good morning! Your daily summary...\");\n}\n```\n\nNote: Scheduled listeners require cron scheduler configuration outside the listener file.\n\n## Reference\n\nFull specification: See project root `LISTENERS_SPEC.md` for complete details on:\n- All event types\n- Complete type definitions\n- ListenersManager implementation\n- Advanced examples\n- Error handling patterns\n","# Listener Creator\n\nCreates TypeScript listener files that monitor email events and execute custom logic when conditions are met.\n\n## When to Use This Skill\n\nUse this skill when the user wants to:\n- Get notifications about specific emails (\"notify me when boss sends urgent emails\")\n- Automatically handle certain emails (\"auto-archive newsletters\")\n- Monitor for patterns (\"watch for package tracking emails\")\n- Set up scheduled actions (\"daily email summary at 9am\")\n- Create custom email workflows\n\n## How Listeners Work\n\nListeners are TypeScript files in `agent\u002Fcustom_scripts\u002Flisteners\u002F` that:\n1. Export a `config` object defining the event type and metadata\n2. Export a `handler` function that filters and processes events\n3. Use `ListenerContext` methods to perform actions (notify, archive, star, etc.)\n\nThe system automatically loads enabled listeners and executes them when matching events occur.\n\n## Creating a Listener\n\n### 1. Understand the User's Intent\n\nParse the user's request to identify:\n- **Event type**: What triggers this listener? (email_received, email_sent, email_starred, email_archived, email_labeled, scheduled_time)\n- **Filter conditions**: What specific emails\u002Fevents to match? (sender, subject keywords, time-based)\n- **Actions**: What should happen? (notify, archive, star, mark as read, add label)\n- **Priority**: How urgent is this? (high\u002Fnormal\u002Flow)\n\n### 2. Choose an Event Type\n\n```typescript\n\u002F\u002F Available event types:\n- \"email_received\"  \u002F\u002F Most common - new email arrives\n- \"email_sent\"      \u002F\u002F User sends an email\n- \"email_starred\"   \u002F\u002F Email is starred\n- \"email_archived\"  \u002F\u002F Email is archived\n- \"email_labeled\"   \u002F\u002F Label added to email\n- \"scheduled_time\"  \u002F\u002F Time-based (cron) - requires scheduler setup\n```\n\n### 3. Write the Listener File\n\nCreate a file in `agent\u002Fcustom_scripts\u002Flisteners\u002F` with this structure:\n\n```typescript\nimport type { ListenerConfig, Email, ListenerContext } from \"..\u002Ftypes\";\n\nexport const config: ListenerConfig = {\n  id: \"unique_listener_id\",           \u002F\u002F kebab-case, descriptive\n  name: \"Human Readable Name\",         \u002F\u002F For UI display\n  description: \"What this does\",       \u002F\u002F Optional but helpful\n  enabled: true,                       \u002F\u002F Start enabled\n  event: \"email_received\"              \u002F\u002F Event type\n};\n\nexport async function handler(email: Email, context: ListenerContext): Promise\u003Cvoid> {\n  \u002F\u002F 1. Basic filter (identity\u002Fsender only)\n  if (!email.from.includes(\"example@email.com\")) return;\n\n  \u002F\u002F 2. Use AI for intelligent classification (PREFERRED over keyword matching)\n  const analysis = await context.callAgent\u003C{ isUrgent: boolean; reason: string }>({\n    prompt: `Is this email urgent?\\nSubject: ${email.subject}\\nBody: ${email.body.substring(0, 500)}`,\n    schema: {\n      type: \"object\",\n      properties: {\n        isUrgent: { type: \"boolean\" },\n        reason: { type: \"string\" }\n      },\n      required: [\"isUrgent\", \"reason\"]\n    },\n    model: \"haiku\"\n  });\n\n  if (!analysis.isUrgent) return;\n\n  \u002F\u002F 3. Perform actions via context methods\n  await context.notify(`Urgent email: ${email.subject}\\n${analysis.reason}`, {\n    priority: \"high\"\n  });\n\n  await context.starEmail(email.messageId);\n}\n```\n\n### 4. File Naming Convention\n\nUse kebab-case matching the listener's purpose:\n- `boss-urgent-watcher.ts`\n- `auto-archive-newsletters.ts`\n- `package-tracking.ts`\n- `daily-summary.ts`\n\n### 5. Available Context Methods\n\nThe `ListenerContext` provides these methods:\n\n```typescript\n\u002F\u002F Notifications\nawait context.notify(message, { priority: \"high\" | \"normal\" | \"low\" });\n\n\u002F\u002F Email actions\nawait context.archiveEmail(emailId);\nawait context.starEmail(emailId);\nawait context.unstarEmail(emailId);\nawait context.markAsRead(emailId);\nawait context.markAsUnread(emailId);\nawait context.addLabel(emailId, \"label-name\");\nawait context.removeLabel(emailId, \"label-name\");\n\n\u002F\u002F AI-powered analysis\nconst result = await context.callAgent\u003CResultType>({\n  prompt: \"Your prompt with email content\",\n  schema: {\n    type: \"object\",\n    properties: { field: { type: \"string\" } },\n    required: [\"field\"]\n  },\n  model: \"haiku\" \u002F\u002F or \"sonnet\" or \"opus\"\n});\n```\n\n## Recommended Approach: AI-Powered Classification\n\n**Default to using `context.callAgent()` for intelligent decision-making** instead of hard-coded keyword lists. This provides better accuracy and adaptability.\n\n```typescript\n\u002F\u002F PREFERRED: AI-based urgency detection\nconst analysis = await context.callAgent\u003C{ isUrgent: boolean; reason: string }>({\n  prompt: `Analyze if this email is urgent:\nSubject: ${email.subject}\nBody: ${email.body.substring(0, 500)}\n\nIs this email urgent or time-sensitive? Consider context, not just keywords.`,\n\n  schema: {\n    type: \"object\",\n    properties: {\n      isUrgent: { type: \"boolean\" },\n      reason: { type: \"string\" }\n    },\n    required: [\"isUrgent\", \"reason\"]\n  },\n  model: \"haiku\" \u002F\u002F Fast and cost-effective\n});\n\nif (analysis.isUrgent) {\n  await context.notify(`Urgent: ${email.subject}\\n${analysis.reason}`);\n}\n\n\u002F\u002F AVOID: Hard-coded keyword lists (brittle and prone to false positives)\n\u002F\u002F const isUrgent = subject.includes(\"urgent\") || subject.includes(\"asap\");\n```\n\n## Examples and Templates\n\nReference the template files for common patterns:\n\n- **[ai-classifier.ts](templates\u002Fai-classifier.ts)**: ⭐ AI-powered email classification (RECOMMENDED)\n- **[urgent-watcher.ts](templates\u002Furgent-watcher.ts)**: AI-based urgent email detection\n- **[auto-archive.ts](templates\u002Fauto-archive.ts)**: Automatically archives newsletters\n- **[package-tracker.ts](templates\u002Fpackage-tracker.ts)**: Package tracking with status extraction\n\n## Best Practices\n\n1. **Prefer AI Classification**: Use `context.callAgent()` instead of hard-coded keyword lists for intelligent decision-making\n2. **Filter Early**: Return early if email doesn't match basic criteria (like sender)\n3. **Clear IDs**: Use descriptive, unique listener IDs\n4. **Error Handling**: Wrap context method calls in try-catch when appropriate\n5. **Performance**: Use \"haiku\" model for fast AI classification (\u003C 1 second typical)\n6. **Notify Wisely**: Only notify when truly important\n7. **Avoid Hard-Coded Lists**: Let AI determine urgency, importance, or categories instead of keyword matching\n\n## Type Imports\n\nAlways import types from the correct location:\n\n```typescript\nimport type { ListenerConfig, Email, ListenerContext } from \"..\u002Ftypes\";\n\n\u002F\u002F For scheduled listeners:\nimport type { ListenerConfig, ListenerContext } from \"..\u002Ftypes\";\n\n\u002F\u002F For labeled event:\nimport type { ListenerConfig, Email, ListenerContext } from \"..\u002Ftypes\";\n```\n\n## Common Patterns\n\n### AI-Powered (PREFERRED)\nBasic filter (sender\u002Ftype) → Call AI agent for intelligent classification → Act on AI result → Notify if important\n\n**This is the recommended approach** for most listeners as it:\n- Avoids brittle keyword matching\n- Adapts to nuanced language and context\n- Makes better decisions about urgency and categorization\n- Reduces false positives\n\n### Simple Notification (Use sparingly)\nBasic filter (sender only) → Notify → Optional star\u002Flabel\n\n**Only use this when**: The trigger is purely identity-based (e.g., \"notify me about ALL emails from X\")\n\n### Auto-Archive\nBasic filter → Archive → Mark as read → Optional notify\n\n### Scheduled\nRun at specific time → Query emails → Analyze → Send summary\n\n## Creating the File\n\nWhen the user requests a listener:\n\n1. **Ask clarifying questions** if the intent is unclear:\n   - Who is the sender? What keywords?\n   - What action should happen?\n   - How urgent is this?\n\n2. **Choose the right event type** (usually `email_received`)\n\n3. **Write the TypeScript file** in `agent\u002Fcustom_scripts\u002Flisteners\u002F`\n\n4. **Use Write tool** to create the file with:\n   - Proper imports\n   - Descriptive config\n   - Handler with early filtering\n   - Appropriate context method calls\n\n5. **Return listener reference in markdown format** using `[listener:filename.ts]` notation (e.g., `[listener:boss-urgent-watcher.ts]`) for easy parsing and linking in the UI\n\n6. **Confirm with user** that the listener matches their intent\n\n### Output Format Example\n\nWhen presenting a created listener to the user, use this format:\n\n```markdown\nCreated listener: [listener:boss-urgent-watcher.ts]\n\nThis listener will:\n- Monitor emails from boss@company.com\n- Use AI to detect urgent emails (not just keywords)\n- Send high-priority notifications for truly urgent emails\n- Star emails that require immediate action\n```\n\n## When to Use AI vs Simple Filtering\n\n**Use AI (`context.callAgent()`) when:**\n- Detecting urgency, importance, or sentiment\n- Classifying email content or intent\n- Extracting structured data from email bodies\n- Making nuanced decisions based on context\n- Any logic that involves \"understanding\" the email content\n\n**Use simple filtering when:**\n- Checking exact sender\u002Frecipient\n- Basic pattern matching on email fields (e.g., \"from specific domain\")\n- Identity-based triggers (e.g., \"all emails from X person\")\n\n**Default to AI unless the filter is purely identity-based.**\n\n## Scheduled Listeners\n\nFor time-based actions (daily summaries, weekly reports):\n\n```typescript\nexport const config: ListenerConfig = {\n  id: \"daily_summary\",\n  name: \"Daily Email Summary\",\n  enabled: true,\n  event: \"scheduled_time\"\n  \u002F\u002F Note: Cron schedule configured separately in scheduler\n};\n\nexport async function handler(\n  data: { timestamp: Date },\n  context: ListenerContext\n): Promise\u003Cvoid> {\n  \u002F\u002F Your scheduled logic here\n  await context.notify(\"Good morning! Your daily summary...\");\n}\n```\n\nNote: Scheduled listeners require cron scheduler configuration outside the listener file.\n\n## Reference\n\nFull specification: See project root `LISTENERS_SPEC.md` for complete details on:\n- All event types\n- Complete type definitions\n- ListenersManager implementation\n- Advanced examples\n- Error handling patterns\n",{"name":5,"description":7,"allowed-tools":46},"Write, Edit, Read, Glob","main","960015366472fde8935051e41bf06ab968a089a7","demos\u002Fofficial\u002Femail-agent\u002Fagent\u002F.claude\u002Fskills\u002Flistener-creator",0,"https:\u002F\u002Fgithub.com\u002Ffoksa\u002Fopen-claude-agent-sdk","https:\u002F\u002Fgithub.com\u002Ffoksa","https:\u002F\u002Ffoksa.dev","2026-11-12 05:09:11",{"source":8,"skillName":5,"commands":56,"prompt":66,"zipAvailable":67},[57,60,63],{"tool":58,"command":59},"npx","npx skills add foksa\u002Fopen-claude-agent-sdk --skill listener-creator",{"tool":61,"command":62},"bunx","bunx skills add foksa\u002Fopen-claude-agent-sdk --skill listener-creator",{"tool":64,"command":65},"pnpm","pnpm dlx skills add foksa\u002Fopen-claude-agent-sdk --skill listener-creator","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Ffoksa\u002Fopen-claude-agent-sdk\u002Fblob\u002Fmain\u002Fdemos\u002Fofficial\u002Femail-agent\u002Fagent\u002F.claude\u002Fskills\u002Flistener-creator\u002FSKILL.md",true,[69,75,79,83,87,91,95,99,105,109,113],{"path":70,"resourceType":71,"resourceTypeDesc":72,"sizeBytes":73,"sourceHtmlUrl":74},"references\u002Fapp-store-connect-setup.md","REFERENCE","参考文档",4095,"https:\u002F\u002Fgithub.com\u002FPeter-code-bot\u002FPROJECT-VICINO\u002Fblob\u002Fmaster\u002F.claude\u002Fskills\u002Fcapawesome-skills\u002Fskills\u002Fcapacitor-in-app-purchases\u002Freferences\u002Fapp-store-connect-setup.md",{"path":76,"resourceType":71,"resourceTypeDesc":72,"sizeBytes":77,"sourceHtmlUrl":78},"references\u002Fcapawesome-purchases-implementation.md",6824,"https:\u002F\u002Fgithub.com\u002FPeter-code-bot\u002FPROJECT-VICINO\u002Fblob\u002Fmaster\u002F.claude\u002Fskills\u002Fcapawesome-skills\u002Fskills\u002Fcapacitor-in-app-purchases\u002Freferences\u002Fcapawesome-purchases-implementation.md",{"path":80,"resourceType":71,"resourceTypeDesc":72,"sizeBytes":81,"sourceHtmlUrl":82},"references\u002Fcapawesome-purchases-setup.md",2546,"https:\u002F\u002Fgithub.com\u002FPeter-code-bot\u002FPROJECT-VICINO\u002Fblob\u002Fmaster\u002F.claude\u002Fskills\u002Fcapawesome-skills\u002Fskills\u002Fcapacitor-in-app-purchases\u002Freferences\u002Fcapawesome-purchases-setup.md",{"path":84,"resourceType":71,"resourceTypeDesc":72,"sizeBytes":85,"sourceHtmlUrl":86},"references\u002Fgoogle-play-console-setup.md",3803,"https:\u002F\u002Fgithub.com\u002FPeter-code-bot\u002FPROJECT-VICINO\u002Fblob\u002Fmaster\u002F.claude\u002Fskills\u002Fcapawesome-skills\u002Fskills\u002Fcapacitor-in-app-purchases\u002Freferences\u002Fgoogle-play-console-setup.md",{"path":88,"resourceType":71,"resourceTypeDesc":72,"sizeBytes":89,"sourceHtmlUrl":90},"references\u002Frevenuecat-implementation.md",7221,"https:\u002F\u002Fgithub.com\u002FPeter-code-bot\u002FPROJECT-VICINO\u002Fblob\u002Fmaster\u002F.claude\u002Fskills\u002Fcapawesome-skills\u002Fskills\u002Fcapacitor-in-app-purchases\u002Freferences\u002Frevenuecat-implementation.md",{"path":92,"resourceType":71,"resourceTypeDesc":72,"sizeBytes":93,"sourceHtmlUrl":94},"references\u002Frevenuecat-setup.md",2064,"https:\u002F\u002Fgithub.com\u002FPeter-code-bot\u002FPROJECT-VICINO\u002Fblob\u002Fmaster\u002F.claude\u002Fskills\u002Fcapawesome-skills\u002Fskills\u002Fcapacitor-in-app-purchases\u002Freferences\u002Frevenuecat-setup.md",{"path":96,"resourceType":71,"resourceTypeDesc":72,"sizeBytes":97,"sourceHtmlUrl":98},"references\u002Ftesting.md",5196,"https:\u002F\u002Fgithub.com\u002FPeter-code-bot\u002FPROJECT-VICINO\u002Fblob\u002Fmaster\u002F.claude\u002Fskills\u002Fcapawesome-skills\u002Fskills\u002Fcapacitor-in-app-purchases\u002Freferences\u002Ftesting.md",{"path":100,"resourceType":101,"resourceTypeDesc":102,"sizeBytes":103,"sourceHtmlUrl":104},"templates\u002Fai-classifier.ts","SCRIPT","脚本",2893,"https:\u002F\u002Fgithub.com\u002Ffoksa\u002Fopen-claude-agent-sdk\u002Fblob\u002Fmain\u002Fdemos\u002Fofficial\u002Femail-agent\u002Fagent\u002F.claude\u002Fskills\u002Flistener-creator\u002Ftemplates\u002Fai-classifier.ts",{"path":106,"resourceType":101,"resourceTypeDesc":102,"sizeBytes":107,"sourceHtmlUrl":108},"templates\u002Fauto-archive.ts",1502,"https:\u002F\u002Fgithub.com\u002Ffoksa\u002Fopen-claude-agent-sdk\u002Fblob\u002Fmain\u002Fdemos\u002Fofficial\u002Femail-agent\u002Fagent\u002F.claude\u002Fskills\u002Flistener-creator\u002Ftemplates\u002Fauto-archive.ts",{"path":110,"resourceType":101,"resourceTypeDesc":102,"sizeBytes":111,"sourceHtmlUrl":112},"templates\u002Fpackage-tracker.ts",3264,"https:\u002F\u002Fgithub.com\u002Ffoksa\u002Fopen-claude-agent-sdk\u002Fblob\u002Fmain\u002Fdemos\u002Fofficial\u002Femail-agent\u002Fagent\u002F.claude\u002Fskills\u002Flistener-creator\u002Ftemplates\u002Fpackage-tracker.ts",{"path":114,"resourceType":101,"resourceTypeDesc":102,"sizeBytes":115,"sourceHtmlUrl":116},"templates\u002Furgent-watcher.ts",2285,"https:\u002F\u002Fgithub.com\u002Ffoksa\u002Fopen-claude-agent-sdk\u002Fblob\u002Fmain\u002Fdemos\u002Fofficial\u002Femail-agent\u002Fagent\u002F.claude\u002Fskills\u002Flistener-creator\u002Ftemplates\u002Furgent-watcher.ts",[118,127,133,149,156],{"skillNo":119,"name":120,"nameZh":6,"description":121,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":122,"categories":123,"keywords":125,"publishedAt":41},"01M6CG21C0E5ETCJD0252Q463M","greeting","Respond with a friendly greeting when asked to greet someone","https:\u002F\u002Fgithub.com\u002Ffoksa\u002Fopen-claude-agent-sdk\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002F.claude\u002Fskills\u002Fgreeting\u002FSKILL.md",[124],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[120,126],"greet",{"skillNo":128,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":129,"categories":130,"keywords":132,"publishedAt":41},"01M6CG1TTBHBK8J2JM5T25HN6F","https:\u002F\u002Fgithub.com\u002Ffoksa\u002Fopen-claude-agent-sdk\u002Fblob\u002Fmain\u002Fdemos\u002Fopen\u002Femail-agent\u002Fagent\u002F.claude\u002Fskills\u002Flistener-creator\u002FSKILL.md",[131],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[24,36,33,40,39,38,37,35,34,25,32,31,30,29,28,27,26],{"skillNo":134,"name":135,"nameZh":6,"description":136,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":137,"categories":138,"keywords":143,"publishedAt":41},"01M6CG1QRFM5S4VXSF01FC12Y9","action-creator","Creates user-specific one-click action templates that execute email operations when clicked in the chat interface. Use when user wants reusable actions for their specific workflows (send payment reminder to ACME Corp, forward bugs to engineering, archive old newsletters from specific sources).","https:\u002F\u002Fgithub.com\u002Ffoksa\u002Fopen-claude-agent-sdk\u002Fblob\u002Fmain\u002Fdemos\u002Fopen\u002Femail-agent\u002Fagent\u002F.claude\u002Fskills\u002Faction-creator\u002FSKILL.md",[139,142],{"categoryNo":140,"categoryName":141,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000005","邮件与沟通",{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[144,32,31,29,28,145,27,146,25,40,37,36,147,148,34],"action creator","operations","reusable","engineering","templates",{"skillNo":150,"name":135,"nameZh":6,"description":136,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":151,"categories":152,"keywords":155,"publishedAt":41},"01M6CG1EGMNW6F7EDPTJHC85VW","https:\u002F\u002Fgithub.com\u002Ffoksa\u002Fopen-claude-agent-sdk\u002Fblob\u002Fmain\u002Fdemos\u002Fofficial\u002Femail-agent\u002Fagent\u002F.claude\u002Fskills\u002Faction-creator\u002FSKILL.md",[153,154],{"categoryNo":140,"categoryName":141,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[144,32,40,37,36,147,148,34,25,31,29,28,145,27,146],{"skillNo":157,"name":158,"nameZh":6,"description":159,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":160,"categories":161,"keywords":163,"publishedAt":41},"01M6CG1AT9HEE4J84GZ8DTK4Z5","sdk-parity","Automate SDK parity updates — bump the official @anthropic-ai\u002Fclaude-agent-sdk dependency, discover new features, implement them, add tests, and update docs. Use when updating to match a new version of the official Claude Agent SDK.","https:\u002F\u002Fgithub.com\u002Ffoksa\u002Fopen-claude-agent-sdk\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fsdk-parity\u002FSKILL.md",[162],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[164,165,166,167,168,169,170,171,172,173,174,27,175],"sdk","sdk parity","official","implement","docs","version","dependency","update docs","bump","claude agent sdk","automate","update"]