一键导入
bolta-voice-learn-from-samples
Evolve a voice profile by learning from new content samples. V2-ready - continuous voice refinement.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Evolve a voice profile by learning from new content samples. V2-ready - continuous voice refinement.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
| name | bolta.voice.learn_from_samples |
| version | 2.0.0 |
| description | Evolve a voice profile by learning from new content samples. V2-ready - continuous voice refinement. |
| category | voice |
| roles_allowed | ["Creator","Editor","Admin"] |
| agent_types | ["content_creator","reviewer","analytics","custom"] |
| organization | bolta.ai |
| author | Max Fritzhand |
Purpose: Extract structured voice rules from past content to refine or create a voice profile. Uses AI to analyze writing patterns, tone, structure, and style from existing posts, then either creates a new voice profile or updates an existing one.
When Used:
Required:
bolta_sk_...)Optional:
All API calls require the Authorization header:
Authorization: Bearer bolta_sk_your_api_key_here
Base URL: https://platty.boltathread.com
Voice Analysis Endpoints:
POST /users/voice/workspaces/{workspace_id}/accounts/{account_id}/analyze/ - Analyze account voice from postsPOST /users/voice/workspaces/{workspace_id}/bulk-analyze/ - Analyze all workspace accountsGET /users/voice/workspaces/{workspace_id}/accounts/{account_id}/context/ - Get voice contextPOST /users/voice/workspaces/{workspace_id}/profiles/ - Create voice profile from analysisPUT /users/voice/workspaces/{workspace_id}/profiles/{profile_id}/ - Update existing profileMethod: Statistical analysis of:
Identifies common opening patterns:
Identifies common closing patterns:
When analyzing content from a founder, extract:
Option A: Analyze Specific Account
curl -X POST "https://platty.boltathread.com/users/voice/workspaces/{workspace_id}/accounts/{account_id}/analyze/" \
-H "Authorization: Bearer bolta_sk_your_api_key_here" \
-H "Content-Type: application/json" \
-d '{
"max_posts": 50,
"days_back": 90,
"force_refresh": false
}'
Parameters:
max_posts (int, default 50): Number of posts to analyzedays_back (int, default 90): How far back to lookforce_refresh (bool, default false): Re-analyze even if cachedResponse:
{
"status": "completed",
"voice_analysis": {
"tone_scores": {
"playful": 4.2,
"professional": 7.8,
"direct": 8.5,
"thoughtful": 6.3
},
"sentence_structure": {
"avg_sentence_length": 12.4,
"avg_paragraph_length": 3.2,
"line_break_frequency": "high",
"list_usage": "frequent"
},
"hook_patterns": [
{
"pattern": "question_hook",
"frequency": 0.35,
"examples": ["Ever notice...", "Why do..."]
},
{
"pattern": "pain_point_hook",
"frequency": 0.28,
"examples": ["Most founders struggle with..."]
}
],
"cta_patterns": [
{
"pattern": "engagement_cta",
"frequency": 0.42,
"examples": ["What do you think?", "Agree?"]
}
],
"vocabulary": {
"signature_phrases": ["ship fast", "real talk", "here's the thing"],
"avoided_words": ["revolutionize", "synergy", "leverage"],
"emoji_usage": "minimal"
},
"content_themes": [
"product development",
"startup lessons",
"founder psychology"
]
},
"post_count": 48,
"analysis_date": "2026-02-16T10:30:00Z"
}
Option B: Bulk Analyze All Workspace Accounts
curl -X POST "https://platty.boltathread.com/users/voice/workspaces/{workspace_id}/bulk-analyze/" \
-H "Authorization: Bearer bolta_sk_your_api_key_here" \
-H "Content-Type: application/json" \
-d '{
"max_posts_per_account": 30,
"days_back": 60
}'
Interactive Workflow:
Show Analysis Summary
Ask User for Refinements
Construct Voice Profile Payload
Combine automated analysis with user input. If founder mode, include founder_signals:
Example: Brand Voice (learned from company content)
{
"name": "Analyzed Voice Profile",
"description": "Voice profile learned from 48 posts (Jan-Mar 2026)",
"tone": {
"playful": 4,
"professional": 8,
"direct": 9,
"thoughtful": 6
},
"dos": [
"Lead with questions or pain points",
"Use short, punchy sentences (avg 12 words)",
"Include line breaks for readability",
"End with engagement CTAs ('What do you think?')",
"Use lists and bullet points frequently"
],
"donts": [
"No corporate jargon ('synergy', 'leverage', 'revolutionize')",
"Avoid long paragraphs (>4 sentences)",
"No salesy language",
"Minimal emoji usage"
],
"customRules": "## Hook Patterns\n- 35% question hooks\n- 28% pain point hooks\n\n## Signature Phrases\n- \"ship fast\"\n- \"real talk\"\n- \"here's the thing\"\n\n## Content Themes\n- Product development\n- Startup lessons\n- Founder psychology",
"styleKeywords": ["direct", "tactical", "founder-led", "honest"],
"contentSize": "standard",
"useEmojis": false,
"language": "en",
"speakerMode": "brand",
"isDefault": true
}
Example: Founder Voice (learned from founder's personal content)
{
"name": "Max - Analyzed Founder Voice",
"description": "Voice profile learned from 45 founder posts (Jan-Mar 2026)",
"tone": {
"playful": 3,
"professional": 6,
"direct": 10,
"thoughtful": 7
},
"dos": [
"Tell stories from the building experience",
"Share specific failures and lessons",
"Use concrete examples over abstractions",
"Write like you're talking to another founder",
"Lead with conviction, not hedging"
],
"donts": [
"No inspirational quotes without context",
"Avoid humble-bragging",
"Don't soften hard truths",
"No theoretical advice—only battle-tested"
],
"customRules": "## Hook Patterns (extracted from content)\n- 40% story hooks (sharing personal experience)\n- 35% lesson hooks (what I learned)\n- 25% contrarian hooks (pushback on industry norms)\n\n## Signature Phrases\n- \"real talk\"\n- \"here's what I learned\"\n- \"most founders think X, but actually Y\"",
"speakerMode": "founder",
"founderSignals": {
"beliefs": [
"Most AI content fails because it optimizes for length, not clarity",
"The best marketing is just solving real problems publicly",
"Brand voice isn't about tone—it's about what you refuse to say"
],
"lessons": [
"Shipping fast beats perfect planning every time",
"Your first 100 users will teach you more than 100 strategy docs",
"Technical debt is fine. Strategic debt will kill you"
],
"contrarianOpinions": [
"Most 'thought leadership' is just repackaged LinkedIn wisdom",
"You don't need a content calendar—you need conviction",
"Engagement metrics are vanity. Pipeline metrics are sanity."
],
"scars": [
"Built a feature no one asked for—wasted 3 months",
"Hired for culture fit over skill—set team back 6 months",
"Tried to be everything to everyone—diluted the product"
],
"backstoryMoments": [
"Watched my first startup fail because we couldn't articulate our value",
"Realized most founders struggle with consistent voice at scale",
"Spent years ghostwriting for founders—saw the patterns that work"
]
},
"styleKeywords": ["direct", "honest", "battle-tested", "founder-led"],
"contentSize": "standard",
"useEmojis": false,
"language": "en",
"isDefault": false
}
Create New Profile:
curl -X POST "https://platty.boltathread.com/users/voice/workspaces/{workspace_id}/profiles/" \
-H "Authorization: Bearer bolta_sk_your_api_key_here" \
-H "Content-Type: application/json" \
-d @voice_profile_payload.json
Update Existing Profile:
curl -X PUT "https://platty.boltathread.com/users/voice/workspaces/{workspace_id}/profiles/{profile_id}/" \
-H "Authorization: Bearer bolta_sk_your_api_key_here" \
-H "Content-Type: application/json" \
-d @voice_profile_update.json
If updating an existing voice profile, generate a delta report:
Delta Report Structure:
{
tone_changes: {
playful: { old: 5, new: 4, change: -1 },
professional: { old: 6, new: 8, change: +2 },
direct: { old: 8, new: 9, change: +1 },
thoughtful: { old: 7, new: 6, change: -1 }
},
new_dos: ["Include line breaks for readability"],
removed_dos: [],
new_donts: ["Minimal emoji usage"],
removed_donts: [],
signature_phrase_changes: {
added: ["ship fast", "real talk"],
removed: ["move fast and break things"]
},
confidence_improvement: +15 // % increase in voice consistency
}
workspace_id (string, UUID, required)
account_id (string, UUID, optional)
post_samples (string[], optional)
max_posts (int, optional, default 50)
days_back (int, optional, default 90)
existing_voice_profile_id (string, UUID, optional)
refinement_mode (enum: "auto" | "interactive", optional, default "interactive")
custom_overrides (object, optional)
Fetch Content
Run Voice Analysis
Extract Founder Signals (if applicable)
Extraction Examples:
Post: "Most founders waste months building features no one asked for..."
→ Belief: "Most founders build features without user validation"
Post: "We tried to hire for culture fit and it set us back 6 months"
→ Scar: "Hired for culture fit over skill—damaged team velocity"
Post: "I've learned that shipping fast beats perfect planning"
→ Lesson: "Shipping fast beats perfect planning every time"
Generate Recommendations
Interactive Refinement (if mode = "interactive")
Create/Update Voice Profile
Version Control
voice_profile_id (string, UUID)
delta_report (object, conditional)
strength_score (number, 0-100)
analysis_summary (string)
confidence_by_dimension (object)
{
tone: 85, // High confidence (consistent tone)
hooks: 72, // Good confidence (clear patterns)
ctas: 68, // Moderate confidence (some variance)
vocabulary: 91, // Very high confidence (distinct signature)
structure: 78 // Good confidence (consistent format)
}
founder_signals (object, conditional - only if founder mode)
{
beliefs?: string[]; // Extracted hot takes (3-7)
lessons?: string[]; // Extracted hard-won lessons (3-7)
contrarianOpinions?: string[]; // Extracted contrarian opinions (3-7)
scars?: string[]; // Extracted failures/learnings (3-7)
backstoryMoments?: string[]; // Extracted formative experiences (3-7)
extraction_confidence?: number; // 0-100: How confident in extractions
}
recommendations (string[])
Strength Score Formula:
strength_score = (
sample_size_score * 0.25 + // 10+ posts = full score
pattern_consistency_score * 0.35 + // Low variance = full score
coverage_score * 0.20 + // All dimensions covered = full score
signature_clarity_score * 0.20 // Distinct voice = full score
)
Sample Size Score:
Pattern Consistency Score:
Common Errors:
Insufficient Samples
Account Has No Posts
Analysis Failed
Inconsistent Voice
Analyze voice separately for each platform:
# Analyze LinkedIn voice
curl -X POST ".../analyze/" \
-d '{
"account_id": "{linkedin_account_id}",
"platform_filter": "linkedin",
"max_posts": 30
}'
# Analyze Twitter voice
curl -X POST ".../analyze/" \
-d '{
"account_id": "{twitter_account_id}",
"platform_filter": "twitter",
"max_posts": 50
}'
Then create platform-specific voice profiles or platform rules.
Before learn_from_samples:
bolta.voice.bootstrap for baselineAfter learn_from_samples:
bolta.voice.validate
bolta.draft.post
bolta.voice.evolve
bolta.voice.learn_from_samples with account_idbolta.voice.learn_from_samples with existing_profile_idlearn_from_samples on LinkedIn → "Professional Brand Voice"learn_from_samples on Twitter → "Casual Founder Voice"Required API Permissions:
voice:read - Read posts for analysisvoice:write - Create/update voice profilesaccounts:read - Access account postsOptional Permissions:
posts:read - Read post engagement metrics for quality filteringActivate a paused job after preview and voice validation - the explicit trust moment where user says "yes, start posting"
Modify an existing agent's configuration including persona, model tier, enabled skills, and job settings
Create and onboard a new AI agent teammate from marketplace presets with conversational discovery and preview generation.
Store and retrieve information across job runs - how agents learn and improve over time
Handle @mention interactions where users ask agents for quick feedback on posts and drafts
Bolta Skills Registry - canonical index and orchestration layer for all Bolta skills, organized by plane