cgenius
Content Genius Skill
AI-powered content creation and proposal generation system.
Available Commands
1. Generate Content
Email Generation
/cgenius email <topic>
Generates professional email content.
Blog Post
/cgenius blog <topic>
Generates comprehensive blog content with SEO optimization.
Social Media Post
/cgenius social <message>
Creates engaging social media content in JSON format (title + body).
Proposal
/cgenius proposal <client_name> <services> <budget> <duration>
Generates a complete commercial proposal with multiple sections.
Presentation (PPTX)
/cgenius pptx <title> <slides...>
Creates a PowerPoint presentation file.
2. Shareable Questionnaires
Create Questionnaire Link
/cgenius questionnaire create <client_name> [options]
Generates a unique shareable link for client intake forms.
Options:
--email <email>- Pre-fill client email--expires <days>- Expiration in days (default: 30)--notify <email>- Email for notifications--auto-proposal- Auto-generate proposal on submission
List Questionnaires
/cgenius questionnaire list [--status <pending|completed|expired>]
Lists all your questionnaire tokens.
Check Status
/cgenius questionnaire status <token>
Checks if a questionnaire has been submitted.
3. Complete Proposal Pipeline
Generate Full Proposal
/cgenius proposal-pipeline <client_name> [options]
Runs the complete 3-stage pipeline:
- Process client information
- Conduct market research
- Generate custom proposal
Options:
--industry <industry>- Client industry--goals <goals>- Business goals--budget <budget>- Budget range--timeline <timeline>- Project timeline--services <services>- Comma-separated services--research-depth <quick|standard|deep>- Research depth--async- Run asynchronously with Trigger.dev
Configuration
Set up your credentials:
# Set API URL
export NEXT_PUBLIC_EPSIMOAI_API_URL="backend.epsimoai.io"
# Set Epsimo Token (required)
export CGENIUS_EPSIMO_TOKEN="eyJhbGci..."
# Set Project Token (for async operations)
export CGENIUS_PROJECT_TOKEN="eyJhbGci..."
# Set Assistant ID (optional, uses default)
export CGENIUS_ASSISTANT_ID="a3067fe2-e21b-42f7-bf3c-7d875d6cfdf5"
# Set API Base URL (optional)
export CGENIUS_API_BASE_URL="https://beta.cgenius.app"
Or create a .env file:
NEXT_PUBLIC_EPSIMOAI_API_URL=backend.epsimoai.io
CGENIUS_EPSIMO_TOKEN=eyJ...
CGENIUS_PROJECT_TOKEN=eyJ...
CGENIUS_ASSISTANT_ID=a3067fe2-e21b-42f7-bf3c-7d875d6cfdf5
CGENIUS_API_BASE_URL=https://beta.cgenius.app
API Integration
This skill integrates with Content Genius APIs:
/api/generate-text- Email generation/api/blog-generate- Blog content/api/ai-json- Social media posts/api/generate-proposal- Proposal generation/api/pptx-generate- PowerPoint files/api/questionnaire/create-token- Questionnaire tokens/api/questionnaire/[token]- Questionnaire access/api/proposal-pipeline- Complete proposal flow
Usage Instructions
When the user invokes /cgenius, analyze their request and:
-
Parse the command - Identify the operation (email, blog, social, proposal, questionnaire, etc.)
-
Gather required information - If the user hasn't provided all required fields, ask them:
- For email: topic/purpose
- For blog: topic, optional title
- For social: message/content
- For proposal: client name, services, budget, duration
- For questionnaire: client name, optional settings
- For proposal pipeline: client name, industry, goals, budget, etc.
-
Make API call - Use the appropriate endpoint with proper authentication
-
Handle response - Present the results to the user:
- For content: Show generated text
- For proposals: Show sections as they stream
- For questionnaires: Show shareable URL and instructions
- For PPTX: Provide download link
-
Error handling - If API calls fail:
- Check if credentials are configured
- Verify the API is accessible
- Provide helpful error messages
Examples
Generate Email
User: /cgenius email product launch announcement
Claude: I'll generate a professional email for a product launch announcement...
Create Questionnaire
User: /cgenius questionnaire create "Acme Corp" --email contact@acme.com --notify team@agency.com
Claude: Created shareable questionnaire for Acme Corp!
URL: https://beta.cgenius.app/questionnaire/qst_abc123...
Short URL: https://beta.cgenius.app/q/qst_abc123
QR Code: https://api.qrserver.com/v1/create-qr-code/?...
Share this link with your client - they can fill it out without logging in!
Expires in 30 days.
You'll be notified at team@agency.com when they submit.
Generate Full Proposal
User: /cgenius proposal-pipeline "TechStart Inc" --industry "Technology" --budget "$50k" --timeline "3 months" --services "Content marketing, SEO"
Claude: Starting complete proposal pipeline for TechStart Inc...
Stage 1: ✅ Processing client information
- Industry: Technology
- Budget: $50,000
- Timeline: 3 months
- Services: Content marketing, SEO
Stage 2: 🔍 Conducting market research...
- Researching content marketing trends in Technology
- Researching SEO best practices
- Analyzing target audience behavior
Stage 3: 📝 Generating proposal...
[Proposal content streams here...]
✅ Complete proposal ready!
Implementation Logic
When invoked, follow this logic:
async function handleCGeniusCommand(args: string[]) {
const command = args[0];
const API_BASE = process.env.CGENIUS_API_BASE_URL || 'https://beta.cgenius.app';
const EPSIMO_TOKEN = process.env.CGENIUS_EPSIMO_TOKEN;
const PROJECT_TOKEN = process.env.CGENIUS_PROJECT_TOKEN;
const ASSISTANT_ID = process.env.CGENIUS_ASSISTANT_ID || 'a3067fe2-e21b-42f7-bf3c-7d875d6cfdf5';
// Check credentials
if (!EPSIMO_TOKEN && ['email', 'blog', 'social', 'proposal', 'proposal-pipeline'].includes(command)) {
throw new Error('CGENIUS_EPSIMO_TOKEN not set. Please configure your credentials.');
}
switch (command) {
case 'email':
return await generateEmail(args.slice(1).join(' '));
case 'blog':
return await generateBlog(args.slice(1).join(' '));
case 'social':
return await generateSocial(args.slice(1).join(' '));
case 'proposal':
return await generateProposal(args.slice(1));
case 'pptx':
return await generatePPTX(args.slice(1));
case 'questionnaire':
return await handleQuestionnaire(args.slice(1));
case 'proposal-pipeline':
return await runProposalPipeline(args.slice(1));
default:
return showHelp();
}
}
async function generateEmail(topic: string) {
const response = await fetch(`${API_BASE}/api/generate-text`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
user_id: 'contact@epsimoai.com',
password: 'EpsimoAI184',
projet: '2e8693e4-9b7b-4fe4-a289-0822b2db3665',
assistant_id: ASSISTANT_ID,
thread_name: `Email - ${topic}`,
request_content: `Write a professional email about: ${topic}`
})
});
const data = await response.json();
return data.content;
}
async function generateBlog(topic: string) {
const response = await fetch(`${API_BASE}/api/blog-generate`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
blogPrompt: topic,
epsimo_token: EPSIMO_TOKEN,
assistant_id: ASSISTANT_ID
})
});
// Handle streaming response
const reader = response.body.getReader();
let content = '';
while (true) {
const { done, value } = await reader.read();
if (done) break;
content += new TextDecoder().decode(value);
}
return content;
}
async function generateSocial(message: string) {
const response = await fetch(`${API_BASE}/api/ai-json`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
assistant_id: ASSISTANT_ID,
epsimo_token: EPSIMO_TOKEN,
userMessage: message
})
});
// Handle streaming response
const reader = response.body.getReader();
let content = '';
while (true) {
const { done, value } = await reader.read();
if (done) break;
content += new TextDecoder().decode(value);
}
return content;
}
async function generateProposal(args: string[]) {
// Parse args: client_name services budget duration
const [client_name, services, budget, duration] = args;
const response = await fetch(`${API_BASE}/api/generate-proposal`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
assistant_id: ASSISTANT_ID,
epsimo_token: EPSIMO_TOKEN,
client_name,
services,
budget,
campaign_duration: duration,
objectives: 'Generate comprehensive proposal'
})
});
// Handle streaming response
const reader = response.body.getReader();
let content = '';
while (true) {
const { done, value } = await reader.read();
if (done) break;
content += new TextDecoder().decode(value);
}
return content;
}
async function handleQuestionnaire(args: string[]) {
const subcommand = args[0];
if (subcommand === 'create') {
const client_name = args[1];
// Parse options like --email, --expires, --notify
const response = await fetch(`${API_BASE}/api/questionnaire/create-token`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
client_name,
// Add parsed options
})
});
const data = await response.json();
return formatQuestionnaireResponse(data);
}
if (subcommand === 'list') {
const response = await fetch(`${API_BASE}/api/questionnaire/create-token`);
const data = await response.json();
return formatQuestionnaireList(data);
}
if (subcommand === 'status') {
const token = args[1];
const response = await fetch(`${API_BASE}/api/questionnaire/${token}`);
const data = await response.json();
return formatQuestionnaireStatus(data);
}
}
async function runProposalPipeline(args: string[]) {
const client_name = args[0];
// Parse options
const response = await fetch(`${API_BASE}/api/proposal-pipeline`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
client_name,
epsimo_token: EPSIMO_TOKEN,
project_token: PROJECT_TOKEN,
assistant_id: ASSISTANT_ID,
// Add parsed options
})
});
const data = await response.json();
return formatPipelineResponse(data);
}
Response Formatting
Format responses clearly:
Email Response
## Generated Email
**Subject:** [Generated subject line]
**Body:**
[Generated email content]
---
*Generated with Content Genius*
Questionnaire Response
## Shareable Questionnaire Created ✅
**Client:** Acme Corp
**Expires:** March 14, 2026
**Share Link:**
🔗 https://beta.cgenius.app/questionnaire/qst_abc123...
**Short URL:**
🔗 https://beta.cgenius.app/q/qst_abc123
**QR Code:**
📷 https://api.qrserver.com/v1/create-qr-code/?...
### How to Share:
- **Email:** Copy the link and send to client@acme.com
- **SMS:** Text the short URL
- **Print:** Download and print the QR code
### What Happens Next:
1. Client clicks link (no login required)
2. Client fills out questionnaire
3. You get notified when submitted
4. [Optional] Proposal auto-generates
*Expires in 30 days*
Proposal Pipeline Response
## Proposal Pipeline Started 🚀
**Pipeline ID:** prop_abc123
**Client:** TechStart Inc
### Progress:
✅ Stage 1: Questionnaire - Complete
🔍 Stage 2: Market Research - In Progress
⏳ Stage 3: Proposal Generation - Pending
### Research Topics:
1. Content marketing trends in Technology
2. SEO best practices for SaaS
3. Target audience analysis
Check status: [status URL]
*Estimated completion: 3-5 minutes*
Error Handling
Provide helpful error messages:
## Error: Missing Credentials ❌
The CGENIUS_EPSIMO_TOKEN environment variable is not set.
### To fix this:
1. Get your token from: https://beta.cgenius.app/settings/api-tokens
2. Set the environment variable:
```bash
export CGENIUS_EPSIMO_TOKEN="your_token_here"
- Or add to your .env file
Need help? Check the documentation: https://github.com/thierryteisseire/cgenius-skill
## Advanced Features
### Batch Operations
/cgenius batch emails topics.txt
Generate multiple emails from a list of topics.
### Custom Templates
/cgenius proposal --template healthcare
Use industry-specific proposal templates.
### Analytics
/cgenius stats
Show usage statistics and success rates.
## Best Practices
1. **Always check credentials** before making API calls
2. **Handle streaming responses** properly for real-time feedback
3. **Provide progress updates** for long-running operations
4. **Format output clearly** with markdown
5. **Include next steps** in responses
6. **Handle errors gracefully** with helpful messages
## Support
- GitHub: https://github.com/thierryteisseire/cgenius-skill
- Issues: https://github.com/thierryteisseire/cgenius-skill/issues
- Documentation: https://github.com/thierryteisseire/cgenius-skill/blob/main/README.md