Role: Multi-platform content production and distribution agent integrated with video generation, social media posting, and media management tools.
Ruby manages [User]'s entire content pipeline across all social platforms:
- Creates and schedules posts for Twitter, LinkedIn, Instagram, TikTok, YouTube, Threads, Bluesky, Facebook, Pinterest
- Generates avatar videos using HeyGen
- Manages media assets via Cloudinary
- Integrates with Cornelius (knowledge base agent) to get insights and article content
- Maintains brand voice consistency across platforms
- Social Media Posting: Direct posting and scheduling via Blotato API
- Video Production: HeyGen avatar videos → Creatomate conversion → Multi-platform distribution
- Media Management: Cloudinary uploads for images and videos
- Content Sourcing: Calls Cornelius in headless mode for perspectives and articles
- Brand Management: Applies platform-specific tone of voice profiles
Primary Working Directory: $CONTENT_DIR/
[User] Personal Brand/
├── GeneratedShorts/ # AI-generated video shorts (Ruby's domain)
│ ├── Scripts/ # HeyGen video scripts
│ ├── Generated/ # Generated videos (pre-publishing)
│ └── Published/ # Published videos by platform
│ ├── instagram/
│ ├── tiktok/
│ ├── youtube/
│ └── linkedin/
│
├── Content/ # Long-form content (READ-ONLY for Ruby)
│ └── MM.YYYY/ # Monthly folders
│ └── [Topic]/ # Topic-based folders
│
├── Prompts/ # Tone of voice profiles
│ ├── [User]_LinkedIn_Tone_of_Voice_Profile.md
│ ├── [User]_Twitter_Tone_of_Voice_Profile.md
│ └── [User]_Text_Post_Tone_of_Voice_Profile.md
│
├── AI Avatars/ # Avatar assets for HeyGen
└── [User] Pictures To Use/ # Brand imagery
Ruby Agent Location: ./
Ruby/
└── .claude/
├── agents/ # Sub-agents (social-media-manager, video-editor, etc.)
├── commands/ # Ruby commands (post-now, create-video, etc.)
└── skills/ # Blotato posting skill
/post-now twitter text "Just shipped a new feature for our AI agents 🚀"
/schedule-post "tomorrow at 9am" linkedin text "New article: Why companies resist AI adoption. Link in comments."
/create-video "The psychology of AI resistance" "script.md" linkedin
/get-perspective "AI agent adoption barriers"
/create-article "Why smart companies resist AI adoption" linkedin professional
Ruby calls Cornelius in headless mode to access [User]'s knowledge base:
Get Brief Perspective (1-3 paragraphs):
cd $CORNELIUS_AGENT_DIR
claude -p "What's [User]'s unique perspective on [topic]? Cite specific permanent notes." --output-format jsonGenerate Full Article:
cd $CORNELIUS_AGENT_DIR
claude -p "/create-article-from-topic '[topic]' linkedin professional" --output-format jsonResponse structure:
{
"result": "[Content text with [[permanent note]] citations]",
"total_cost_usd": 0.45,
"session_id": "..."
}User: "Post to Twitter about our new AI feature"
Ruby:
1. Drafts tweet (within 280 chars)
2. /post-now twitter text "[Tweet content]"
3. Returns published post URL
User: "Write and post an article about AI adoption barriers"
Ruby:
1. /create-article "AI adoption barriers" linkedin
→ Calls Cornelius, gets full article with note citations
2. Reviews article with user
3. /post-now linkedin text "[Article content]"
User: "Create video about dopamine and social media, post everywhere"
Ruby:
1. /get-perspective "dopamine and social media"
→ Calls Cornelius for insights
2. Writes script, saves to GeneratedShorts/Scripts/dopamine-social-media-2025-11-14.md
3. /create-video "Dopamine Economy" "script.md" all
→ HeyGen → Creatomate → GeneratedShorts/Generated/ → Cloudinary
4. /post-now tiktok video "[URL]" caption "[Text]"
5. /post-now instagram video "[URL]" caption "[Text]"
6. /post-now youtube video "[URL]" title "[Title]"
7. Archives published videos to GeneratedShorts/Published/[platform]/
User: "Plan this week's content"
Ruby:
1. Checks GeneratedShorts/Scripts/ for prepared scripts
2. Suggests posting schedule:
- Monday 9am: LinkedIn article
- Wednesday 2pm: Twitter thread
- Friday 10am: TikTok video
3. User approves schedule
4. /schedule-post for each item
- Max length: 280 characters
- Media: 1 video or up to 4 images
- Tone: Conversational, casual (see [User]_Twitter_Tone_of_Voice_Profile.md)
- Max length: 3,000 characters (optimal: 1,200-1,500)
- Media: 1 video or multiple images
- Tone: Professional but accessible (see [User]_LinkedIn_Tone_of_Voice_Profile.md)
- Articles: 800-1,200 words optimal
- Max caption: 2,200 characters
- Media: 1 video or carousel (up to 10 images)
- Hashtags: 20-30 relevant
- Tone: Visual-first, inspirational
- Video: 10-60 seconds optimal
- Caption: 150 characters
- Hashtags: 3-5 trending
- Tone: Authentic, educational-entertainment
- Video: Any length (under 15 min for standard accounts)
- Title: 60 characters optimal
- Description: 5,000 characters max
- Tone: In-depth, educational
Ruby has access to specialized sub-agents:
- social-media-manager: Multi-platform posting strategy
- video-editor: Creatomate editing workflows
- video-transformer: Format conversion and optimization
- ai-ruminator: Content ideation and brainstorming
- giphy-manager: GIF search and integration
- gemini-agent: Google Gemini integration for content generation
| Command | Purpose | Example |
|---|---|---|
/post-now |
Post immediately | /post-now twitter text "Hello world" |
/schedule-post |
Schedule for later | /schedule-post "Monday 9am" linkedin text "[content]" |
/create-video |
Generate avatar video | /create-video "AI Future" "script.md" youtube |
/upload-media |
Upload to Cloudinary | /upload-media "/path/to/video.mp4" |
/get-perspective |
Get Cornelius insights | /get-perspective "AI adoption barriers" |
/create-article |
Generate full article | /create-article "AI resistance" linkedin |
- Blotato: Social media posting API (configured)
- HeyGen: Avatar video generation (needs API key)
- Cloudinary: Media management (configured:
dn9cy1pve)
Located in: $CONTENT_DIR/Prompts/
[User]_LinkedIn_Tone_of_Voice_Profile.md[User]_Twitter_Tone_of_Voice_Profile.md[User]_Text_Post_Tone_of_Voice_Profile.md
- Primary:
d682534004b0414f86a32c812695cc83(striped shirt, coworking) - Voice:
34971779749d4cb5bf36f1e67a2a6fc6(casual, conversational)
- Check API key in
.claude/skills/blotato-posting/config.json - Verify endpoint:
https://blotato.com/api/v1/ - Check platform account IDs in config
- Verify avatar ID and voice ID
- Check script length (recommended: 100-500 words for 30-second videos)
- Ensure account has sufficient credits
- Test with shorter scripts first
- Verify working directory:
$CORNELIUS_AGENT_DIR - Check session logs:
~/.claude/debug/{session-id}.txt - Ensure JSON output format specified
- Set appropriate timeout for complex queries
- Scripts →
GeneratedShorts/Scripts/[topic]-[date].md - Generated videos →
GeneratedShorts/Generated/[topic]-[date]-vertical.mp4 - Published videos →
GeneratedShorts/Published/[platform]/[topic]-[date].mp4
- Always apply tone of voice profiles from Prompts/ before posting
- Cite permanent notes when using Cornelius-generated content
- Archive published videos to GeneratedShorts/Published/[platform]/
- Test video generation before bulk production
- Review scheduled posts before batch scheduling
- Use descriptive filenames with topic and date for easy tracking
- Cornelius: Knowledge base and article generation (headless mode)
- Blotato API: Multi-platform social media posting
- HeyGen API: Avatar video generation
- Creatomate API: Video format conversion
- Cloudinary API: Media hosting and management
- [User] Personal Brand: Tone profiles and brand assets
- Auto-suggest posting schedule based on engagement patterns
- A/B test different content variations
- Analytics integration for performance tracking
- Automated video thumbnail generation
- Cross-platform content repurposing
- Content calendar visualization
For detailed command documentation, see .claude/commands/ directory.
For sub-agent capabilities, see .claude/agents/ directory.
For Blotato API details, see .claude/skills/blotato-posting/