skills/cleanexpo/content-agent/SKILL.md
Generates personalized marketing content for Unite-Hub. Creates followup emails, proposals, and case studies based on contact data and interaction history. Uses Claude AI for high-quality, contextual content generation.
npx skillsauth add aiskillstore/marketplace content-agentInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
The Content Agent creates personalized, high-converting marketing content by:
When to generate:
Context to include:
Example prompt:
Generate a professional followup email for:
- Name: John Smith
- Company: TechStartup Inc
- Job Title: CEO
- Last interaction: "Interested in Q4 marketing services"
- Sentiment: positive
- Industry: Technology
The email should:
1. Reference their interest in partnership
2. Mention 1 specific success story relevant to tech startups
3. Propose a 15-minute strategy call
4. Be warm but professional
5. Keep under 150 words
When to generate:
Context to include:
Example prompt:
Generate a proposal email for:
- Name: Lisa Johnson
- Company: eCommerce Solutions
- Pain point: "Revamping marketing strategy"
- Budget indicator: Mid-market (medium budget)
- Timeline: Q4 2024
The proposal should:
1. Address their specific pain point
2. Outline 3-4 key deliverables
3. Mention expected metrics (e.g., "35% revenue increase")
4. Suggest 60-day engagement
5. Request a call to discuss
When to generate:
Context to include:
Query contacts where:
status = "prospect" OR "lead"
aiScore > 60
nextFollowUp <= NOW
A. Load Contact History
GET contact details
GET contact's emails (interaction history)
GET any previous generated content for this contact
B. Build Context Object
{
name: "John Smith",
company: "TechStartup Inc",
jobTitle: "CEO",
industry: "Technology",
aiScore: 78,
sentiment: "positive",
lastInteraction: "Interested in Q4 partnership",
emailsSent: 2,
engagementDays: 15,
hasProposalBefore: false
}
C. Determine Content Type
Logic:
IF aiScore > 80 AND !hasProposalBefore
→ Generate "proposal"
ELSE IF aiScore > 60 AND lastInteraction > 7 days ago
→ Generate "followup"
ELSE IF industry has matching case study
→ Generate "case_study_reference"
ELSE
→ Generate "general_followup"
D. Build Claude Prompt
Template:
You are a professional B2B marketing copywriter for a marketing agency.
Generate a [CONTENT_TYPE] email for:
- Name: [NAME]
- Company: [COMPANY]
- Job Title: [JOB_TITLE]
- Industry: [INDUSTRY]
- Last interaction: [LAST_INTERACTION]
- Sentiment of previous emails: [SENTIMENT]
- Our success with similar companies: [CASE_STUDY_BRIEF]
Requirements:
1. Personalized to their specific situation
2. Reference their industry/company when possible
3. Include specific, measurable outcomes (if proposal)
4. Professional but warm tone
5. Clear call-to-action
6. [TYPE_SPECIFIC_REQUIREMENTS]
Keep under [WORD_LIMIT] words.
Generate the email body only (no "Subject:" or greeting).
E. Call Claude API
POST https://api.anthropic.com/v1/messages
{
"model": "claude-sonnet-4-5-20250929",
"max_tokens": 1000,
"system": "You are an expert B2B marketing copywriter...",
"messages": [
{
"role": "user",
"content": "[BUILT_PROMPT]"
}
]
}
F. Parse Response
Extract text from response:
response.content[0].text
G. Store as Draft
Call Convex mutation:
POST convex mutation content.store({
orgId: "...",
workspaceId: "...",
contactId: "[CONTACT_ID]",
contentType: "[TYPE]",
title: "[AUTO_GENERATED_TITLE]",
prompt: "[USED_PROMPT]",
text: "[CLAUDE_RESPONSE]",
aiModel: "sonnet",
htmlVersion: null // Optional HTML formatting
})
H. Log Audit Event
POST convex mutation system.logAudit({
orgId: "...",
action: "content_generated",
resource: "generatedContent",
agent: "content-agent",
details: {
contactId: "...",
contentType: "[TYPE]",
aiScore: 78,
tokensUsed: 234
},
status: "success"
})
Output:
✅ Content Generation Complete
Total generated: X
Followup emails: X
Proposals: X
Case studies: X
Drafts awaiting approval: X
By AI score:
- High priority (>80): X contacts
- Medium priority (60-80): X contacts
Sample generated content:
- John Smith (TechStartup): Followup email
- Lisa Johnson (eCommerce): Proposal
Next steps:
1. Review drafts in dashboard
2. Approve/edit content
3. Schedule for sending
4. Track performance metrics
If Claude API call fails:
Log audit event with status: "error"
Try fallback: Use template-based content
Continue to next contact
If contact data incomplete:
Skip contact with warning
Log as skipped in audit trail
After content is approved and sent:
Track:
- Opens (if integration available)
- Clicks
- Replies
- Conversions
Update generatedContent record with metrics:
{
status: "sent",
sentAt: timestamp,
performanceMetrics: {
opens: 0,
clicks: 0,
replies: 0
}
}
development
Apple Human Interface Guidelines for content display components. Use this skill when the user asks about charts component, collection view, image view, web view, color well, image well, activity view, lockup, data visualization, content display, displaying images, rendering web content, color pickers, or presenting collections of items in Apple apps. Also use when the user says how should I display charts, what's the best way to show images, should I use a web view, how do I build a grid of items, what component shows media, or how do I present a share sheet. Cross-references: hig-foundations for color/typography/accessibility, hig-patterns for data visualization patterns, hig-components-layout for structural containers, hig-platforms for platform-specific component behavior.
tools
Automate HelpDesk tasks via Rube MCP (Composio): list tickets, manage views, use canned responses, and configure custom fields. Always search tools first for current schemas.
testing
Expert Haskell engineer specializing in advanced type systems, pure functional design, and high-reliability software. Use PROACTIVELY for type-level programming, concurrency, and architecture guidance.
tools
GraphQL gives clients exactly the data they need - no more, no less. One endpoint, typed schema, introspection. But the flexibility that makes it powerful also makes it dangerous. Without proper controls, clients can craft queries that bring down your server. This skill covers schema design, resolvers, DataLoader for N+1 prevention, federation for microservices, and client integration with Apollo/urql. Key insight: GraphQL is a contract. The schema is the API documentation. Design it carefully.