Token导航 LogoToken导航

Agent Skill · 前端设计

setup-email-drafts(设置电子邮件草稿)

setup-email-drafts 用于处理 GitHub 仓库、Issue、Pull Request 和代码协作信息,适合在 Codex、Claude、Cursor、Gemini CLI 中需要围绕仓库状态、代码变更或协作事项进行整理时使用。可结合来源仓库、安装命令和原始 README 继续核验具体用法。安装前建议确认权限范围、维护状态,以及是否会触发联网、命令执行或文件读写。

setup-email-drafts 是前端设计类 Agent Skill,可用宿主为 Codex、Claude、Cursor、Gemini CLI,通过GitHub 仓库获取,权限为执行命令;许可证信息还不明确,第三方扫描有未通过项,按安装量在前端设计类的 10,216 个 Skill 里排第 6,192。

总安装 541周安装 23GitHub Stars 公开资料未说明下载 190核验 2026-05-01

安装说明

本站只整理中文说明,不托管安装包,也不代用户安装。
GitHub
许可证
unknown

安装方式

通过对话安装

复制提示词发给支持本地命令或 Skills 的 AI 助手,先确认命令和权限,再让它执行。

请帮我安装这个 Agent Skill:setup-email-drafts(设置电子邮件草稿)
来源仓库:https://github.com/psquared-development/psquared-skills
仓库路径:skills/setup-email-drafts
安装命令:
npx skills add https://github.com/psquared-development/psquared-skills --skill setup-email-drafts
安装前请先检查当前环境是否支持对应 CLI,并向我确认将要执行的命令、安装目录、联网范围和文件读写权限;确认后再执行。

命令行安装

复制命令到本机终端执行。该命令会通过 npx skills 从第三方来源获取 Skill;本站只展示命令,不托管安装包,也不自动执行。

skills.shnpx skills
npx skills add https://github.com/psquared-development/psquared-skills --skill setup-email-drafts

这个 Skill 是做什么的

前端设计类 Skill 关注页面结构、视觉规范和组件写法,输出通常是可运行的界面代码。

用于处理 GitHub 仓库、Issue、Pull Request 和代码协作信息。适合在 Codex、Claude、Cursor、Gemini CLI 中围绕仓库状态、代码变更或协作事项进行整理。

通过 npx skills add 命令从 psquared-development/psquared-skills 仓库安装。安装前建议确认权限范围、维护状态,以及是否会触发联网、命令执行或文件读写。setup-email-drafts 属于前端设计类 Skill,可作为该场景下的辅助能力补充。

来源仓库内路径:skills/setup-email-drafts

上手步骤

4 步
  1. 1

    确认自己的宿主工具

    公开资料标注支持 Codex、Claude、Cursor、Gemini CLI;先确认自己用的是其中之一,再按对应工具的 Skills 目录放置。

  2. 2

    拿到安装命令

    可以直接复制的命令是 npx skills add https://github.com/psquared-development/psquared-skills --skill s…;命令里的占位符换成自己的路径或密钥再执行。

  3. 3

    安装后重启宿主

    命令执行完要完全退出宿主工具再打开,让新装的 Skill 被重新扫描到,否则列表里可能看不到。

  4. 4

    按最小权限试用

    它需要执行命令,先在测试目录或测试账号里跑,确认没问题再放到正式项目。

常见问题

6 条

setup-email-drafts 怎么安装?

在终端执行 npx skills add https://github.com/psquared-development/psquared-skills --skill setup-email…。装完完全退出宿主工具再打开,让它重新扫描本地 Skill。

setup-email-drafts 支持哪些 AI 工具?

公开资料标注支持 Codex、Claude、Cursor、Gemini CLI。其他工具只要能读取本地 Skill 目录,一般也能手动放进去,但要自己确认触发方式是否一致。

setup-email-drafts 需要什么权限?

权限级别是执行命令。安装流程涉及命令执行,可能通过 npx skills add https://github.com/psquared-development/psquared-skills --skill setup-email-drafts 联网下载 Skill 或依赖。用户安装前应确认命令来源、仓库内容和执行环境。

setup-email-drafts 是免费的吗?

公开资料没有标注明确许可证,收费和商用限制都无法确认。正式使用前请到来源仓库核对授权说明。

setup-email-drafts 用的人多吗?

公开数据是累计安装 541 次,近一周安装 23 次,下载 190 次。这些数字来自第三方目录统计,只能当作热度参考,不代表质量或安全性。

setup-email-drafts 安全吗?

第三方扫描有未通过项,风险较高。除非你确认过源码,否则不建议直接安装到常用环境。

值得选的地方和要先想清楚的地方

值得选的地方

  • 同时适配 4 种工具,换客户端不用重新找替代品。

先想清楚的地方

  • 需要执行命令,装到常用环境前要先评估影响面。
  • 许可证没有明确标注,能不能商用、能不能再分发都不确定。
  • 第三方扫描存在提醒项或未通过项,需要人工逐条确认。
  • 第三方目录整理,版本更新和行为细节以来源仓库为准。

适不适合你

更适合

  • 已经在用 Codex,想直接扩展它能力的人。
  • 需要处理前端设计类任务、又不想每次都手写提示词的人。

不太适合

  • 不能接受 Skill 在你机器上执行命令的人。
  • 需要明确授权才能用到公司项目里的场景。
  • 需要厂商级技术支持和 SLA 的生产系统。

前端设计类 Skill 对比

6 个同类
Skill总安装GitHub 星权限许可证扫描
frontend-design

前端设计 · Codex、Claude

8,823,360126,072只读MIT通过
vercel-composition-patterns

Vercel 组合模式 · Codex、Claude

3,858,81625,893需要联网MIT通过
vercel-react-native-skills

Vercel React native skills 前端 · Codex、Claude

2,468,66425,878只读MIT通过
adapt

adapt 搜索 · Codex、Claude

2,027,04023,125操作浏览器未明确通过
bolder

bolder 分析 · Codex、Claude

2,004,28823,130只读未明确通过
setup-email-drafts

设置电子邮件草稿 · 本页

541—执行命令未明确未通过

按安装量取同分类前几名;数字来自第三方目录统计,只作热度参考,不代表质量结论。

SKILL.md 原文

Setup Email Drafts for Demo Outreach


Product Context — What You're Selling

InboxMate is a white-label AI chatbot that businesses embed on their website. It answers customer questions 24/7 using the company's own knowledge base (products, pricing, FAQ). Visitors chat with it directly on the site. It handles lead qualification, appointment scheduling, and support — in the company's brand colors and language. Built by psquared, an Austrian AI company.

The demo we built for them is a live, working chatbot already configured with THEIR products and knowledge. This is the key differentiator — we're not pitching a generic tool, we're showing them something that already works for their business.


Cold Outreach Principles

Before writing any email, read references/outreach-principles.md in this skill's directory. Key rules: lead with the demo (not a pitch), be specific to their business, keep it short (3-5 paragraphs), one CTA (the demo button). Every email must be unique — no templates, no AI patterns.


Announce: `` ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Email Draft Pipeline started. Checking environment... ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ``

STEP 0 — Check Environment

Read .env using the Read tool (do NOT source it — values may contain semicolons or special characters that break shell parsing). Extract the token values by reading the file content directly.

The .env file should contain:

  • PSQUARED_CRM_TOKEN — for querying opportunities and creating tasks
  • EMAIL_DRAFT_ONLY_BEARER — for creating email drafts via the notification service. This token can read, create, and update drafts but cannot send, schedule, or delete them.

If the .env file is missing either token, stop immediately and ask the user to provide them.

Once verified, announce: Environment OK. Checking demo readiness...

Shell Quoting for CRM GraphQL Queries

IMPORTANT: When sending GraphQL queries to the CRM via curl, always use double-quoted -d strings with escaped inner quotes. Single-quoted strings cause intermittent parse failures with the Twenty CRM GraphQL endpoint when queries contain nested object fields like demoUrl {primaryLinkUrl}.

Do this:

curl -s -X POST https://crm.psquared.dev/graphql \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $CRM_TOKEN" \
  -d "{\"query\":\"{ opportunities(first: 5) { edges { node { id name } } } }\"}"

NOT this (breaks with nested fields):

curl -s -X POST https://crm.psquared.dev/graphql \
  -d '{"query":"{ opportunities(first: 5) { edges { node { id name demoUrl { primaryLinkUrl } } } } }"}'

All curl examples below use the safe double-quoted form.


STEP 1 — Verify All Demos Are Ready

Query CRM for ANY opportunities at SCREENING stage with demoStatus = PENDING_REVIEW:

curl -s -X POST https://crm.psquared.dev/graphql \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $PSQUARED_CRM_TOKEN" \
  -d "{\"query\":\"{ opportunities(filter: { stage: { eq: SCREENING }, demoStatus: { eq: PENDING_REVIEW } }, first: 5) { edges { node { id name } } } }\"}"

If any PENDING_REVIEW found: Stop and announce:

`` ❌ [N] demos still pending review: - [Company A] - [Company B] Run /review-demos first before setting up email drafts. ``

If none found: Continue.


STEP 2 — Collect OK_TO_SEND Opportunities

Query CRM for opportunities with demoStatus = OK_TO_SEND, including taskTargets in the response so we can filter out already-processed ones client-side:

IMPORTANT: The Twenty CRM does NOT support relation filters like taskTargets: {is: NULL} on OpportunityFilterInput. The taskTargets field is only available as a response field on the Opportunity type, not as a filter. You MUST fetch taskTargets in the response and filter client-side.

curl -s -X POST https://crm.psquared.dev/graphql \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $PSQUARED_CRM_TOKEN" \
  -d "{\"query\":\"{ opportunities(filter: { stage: { eq: SCREENING }, demoStatus: { eq: OK_TO_SEND } }, first: 150) { edges { node { id name taskTargets { edges { node { id } } } demoUrl { primaryLinkUrl } company { id name domainName { primaryLinkUrl } people(first: 5) { edges { node { id name { firstName lastName } emails { primaryEmail } } } } } } } } }\"}"

Client-side filtering: After receiving the response, skip any opportunity where taskTargets.edges is non-empty (length > 0). These have already been processed by a previous run. Add them to a "Skipped (already processed)" list in the report.

For each remaining opportunity, extract:

  • opportunityId, opportunityName
  • companyId, companyName, companyDomain
  • demoUrl (from demoUrl.primaryLinkUrl)
  • Contact: from company.people — pick the first person with an email. For multi-contact companies, prefer a named person (not "Office") if available.

If company has no people or no email: Add to skip list with reason "No contact email found". Continue to next.

If no OK_TO_SEND opportunities (after filtering): Announce "No demos ready to send" and stop.

Announce: `` Found [N] demos ready for outreach: 1. [Company Name] → [contact email] 2. [Company Name] → [contact email] ... Skipped (no contact): [list if any] ``

STEP 3 — Determine Template ID

Template UUIDs (hardcoded — do NOT query the notification service API or Supabase MCP for these):

TemplateLocaleUUID
demo-outreachdeb98926be-5977-40a6-9be6-ffe38989fc5a
demo-outreachen47381011-a737-4157-a177-f7646bb4aee3

For each opportunity, determine the locale:

  • If company domain is.at,.de,.ch → locale de
  • If company website was in German during demo review → locale de
  • Otherwise → locale en

Use the matching UUID above.


STEP 4 — For Each Opportunity

4a — MANDATORY: Check if draft already exists in notification service

THIS CHECK IS NOT OPTIONAL. Do NOT skip it. Do NOT proceed to 4b without running this check.

Note: CRM task deduplication is already handled in Step 2 by fetching taskTargets and filtering client-side. This step only checks the notification service.

Query notification service for existing drafts by opportunity ID:

curl -s -X GET "https://notifications.psquared.dev/drafts?crmOpportunityId=[opportunityId]&pageSize=1" \
  -H "Authorization: Bearer $EMAIL_DRAFT_ONLY_BEARER"

If the response contains any drafts (array length > 0, regardless of status) → SKIP. Announce: SKIP: [Company Name] — draft already exists

Only proceed to 4b if no drafts found.

4b — Create CRM Task

curl -s -X POST https://crm.psquared.dev/graphql \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $PSQUARED_CRM_TOKEN" \
  -d "{\"query\":\"mutation { createTask(data: { title: \\\"Send initial outreach for Demo [Company Name]\\\", status: TODO }) { id } }\"}"

Save the taskId from the response — it will be passed to the draft creation so we can reliably delete this exact task if the draft is deleted.

Then link to opportunity:

curl -s -X POST https://crm.psquared.dev/graphql \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $PSQUARED_CRM_TOKEN" \
  -d "{\"query\":\"mutation { createTaskTarget(data: { taskId: \\\"[taskId]\\\", opportunityId: \\\"[opportunityId]\\\" }) { id } }\"}"

4c — Create Email Draft

The email template is a pure layout shell — you write ALL the text. The template only provides the InboxMate header, green CTA button, highlight box, signoff area, and p² footer. Everything else comes from your variables.

Writing style:

  • Write like a real person, not a marketing bot. Short sentences. Direct.
  • The email should feel like Martin personally wrote it for this specific company
  • No corporate filler ("wir freuen uns...", "hiermit möchten wir..."). Get to the point.
  • Make the reader curious about the demo — don't explain everything, tease it
  • The highlight box should make them think "oh that's exactly what I need"

Determine tone (du vs Sie) for German emails — THIS IS CRITICAL, DO NOT SKIP:

For EACH company, before writing any text, check for prior communication:

curl -s -X POST https://crm.psquared.dev/graphql \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $PSQUARED_CRM_TOKEN" \
  -d "{\"query\":\"{ people(filter: { companyId: { eq: \\\"[companyId]\\\" } }, first: 5) { edges { node { emails { primaryEmail } } } } }\"}"

Then check if we have email threads with any of those email addresses in the agenthub DB:

curl -s -X POST https://crm.psquared.dev/graphql \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $PSQUARED_CRM_TOKEN" \
  -d "{\"query\":\"{ noteTargets(filter: { companyId: { eq: \\\"[companyId]\\\" } }, first: 20) { edges { node { note { title body } } } } }\"}"

Look at the note/email content for "du/dir/dein" vs "Sie/Ihnen/Ihr" patterns.

Rules:

  1. If prior emails/notes use "du" → use "du" (Hallo [Vorname],)
  2. If the company website prominently uses "du" throughout → mirror it
  3. If no prior contact exists → default to Sie (Guten Tag Herr/Frau [Nachname],)
  4. When in doubt → Sie

Verify your choice: After writing all text for a company, re-read every sentence and check that du/Sie is consistent. A single "Ihre" in an otherwise du-Form email is a dealbreaker.

Template variables:

  • greeting — Personal. e.g. "Hallo [Vorname]," (du) or "Guten Tag Herr/Frau [Nachname]," (Sie)
  • bodyParagraph1 — The hook. What you did and why it matters to THEM. One strong sentence.
  • bodyParagraph2 — (optional) The personalized insight. Something specific about their website/business that shows you actually looked. This is what makes them keep reading.
  • bodyParagraph3 — (optional) The nudge toward the demo. Keep it short.
  • buttonText — CTA button label. "Demo ansehen" / "View Demo" / or something more specific
  • highlightTitle — (optional) Bold title for the green box. e.g. "Was der Bot für [Company] tun kann:" or "What this means for [Company]:"
  • highlightText — (optional) One punchy line about what InboxMate does for THIS company specifically. Not generic features.
  • closingText — (optional) Brief closing. "Bei Fragen einfach antworten." / "Just reply if you have questions."
  • signoff — "Beste Grüße" / "Liebe Grüße" / "Best regards" — match the tone
  • senderName — "Martin"
  • demoUrl — the demo playground URL
  • companyName — used in email title
  • emailSubject — the rendered subject line (same as what you set on the draft)
curl -s -X POST https://notifications.psquared.dev/drafts/create \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $EMAIL_DRAFT_ONLY_BEARER" \
  -d '{
    "templateId": "[template UUID from step 3]",
    "locale": "[de|en]",
    "subject": "[curiosity-driven subject line — see principle #8]",
    "recipientEmail": "[contact email]",
    "recipientName": "[contact first name]",
    "variables": {
      "companyName": "[Company Name]",
      "demoUrl": "[demo playground URL]",
      "greeting": "[personal greeting]",
      "bodyParagraph1": "[the hook — what you did, why it matters]",
      "bodyParagraph2": "[personalized insight about their business]",
      "bodyParagraph3": "[nudge toward the demo]",
      "buttonText": "[CTA button text]",
      "highlightTitle": "[bold title for green box]",
      "highlightText": "[what InboxMate does for THIS company — one punchy line]",
      "closingText": "[brief closing]",
      "signoff": "[matching tone signoff]",
      "senderName": "Martin"
    },
    "crmCompanyId": "[company ID]",
    "crmOpportunityId": "[opportunity ID]",
    "crmCompanyName": "[Company Name]",
    "crmTaskId": "[taskId from step 4b]"
  }'
Announce after each: Draft created: [Company Name] → [email]

Note: This skill does NOT update CRM fields. The notification service updates them automatically when emails are sent from the admin UI:

On sendFieldValue
Outreach email sentdemoStatusSENT
Outreach email sentoutreachSentAtcurrent timestamp
Follow-up email sentdemoStatusFOLLOW_UP_SENT
Follow-up email sentfollowupSentAtcurrent timestamp

STEP 5 — Report

Announce: `` ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Email Draft Setup complete. Drafts created: [N] - [Company A] → kontakt@firma.at - [Company B] → info@company.com Skipped (draft already exists): [N] - [Company C] — task already linked Skipped (no contact email): [N] - [Company D] — no contact with email found CRM tasks created: [N] Next step: Review and send drafts at → notifications.psquared.dev/drafts ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ``

平台分布

Codex

33.31%
按下载量换算63

Claude

30.07%
按下载量换算57

Cursor

17.74%
按下载量换算34

Gemini CLI

8.92%
按下载量换算17

安全审计

Gen Agent Trust Hub

通过

Socket

通过

Snyk

未通过

权限和风险

执行命令

安装流程涉及命令执行,可能通过 npx skills add https://github.com/psquared-development/psquared-skills --skill setup-email-drafts 联网下载 Skill 或依赖。用户安装前应确认命令来源、仓库内容和执行环境。

安装前确认

本站仅展示第三方公开信息,不托管安装包,不提供自动安装或运行环境。安装前应自行审查源码、依赖和命令行为。来源安全扫描存在提醒或未通过项,安装前请自行复核。目前只有一个公开来源,建议同时核对源仓库。

继续浏览同类 Skills