skills/capabilities/generate-voice-guide/SKILL.md
Generate a personal voice guide for X (Twitter) and/or LinkedIn by scanning a user's past posts and iteratively refining with sample-and-feedback loops. Produces a structured markdown voice guide that sibling skills (create-x-content, create-linkedin-content) consume to draft in-voice posts. Different from brand-voice-extractor, which analyses company blogs/landing pages — this skill is for personal social voice.
npx skillsauth add athina-ai/goose-skills generate-voice-guideInstall 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.
Turn a real person's past posts into a structured voice guide that other skills can use to draft in-voice content. Produces one guide per platform (X, LinkedIn, or both) with persona, dos/don'ts, banned phrases, hook patterns, format rules, and example posts.
This is an agent-executed skill — the agent handles scraping, analysis, drafting, and iteration via the tools available in the session. No bundled Python script.
create-x-content, create-linkedin-content, social-kit) needs a voice guide and one doesn't existWhen NOT to use: For analysing a company's blog/landing-page voice, use brand-voice-extractor instead. That's for corporate marketing voice; this one is for individual social voice.
Interactive:
/generate-voice-guide
Args mode:
/generate-voice-guide --profile @GooseworksAI --platforms x,linkedin --output ~/.goose-skills/voice-guides
Ask these up front if not supplied via flags:
@GooseworksAI), a LinkedIn profile URL, or both. You can mimic your own voice or someone else's."~/.goose-skills/voice-guides/voice-{x,linkedin}.md. Ok to use that, or prefer a different path?"For X:
apidojo/twitter-user-tweets-scraper (or whichever X scraper is available in the session) keyed to the handle.APIFY_API_TOKEN env var. If missing, surface a clear error with the setup link.For LinkedIn:
harvestapi/linkedin-profile-posts keyed to the profile URL.Fallback (no scraper available or posts paywalled): ask the user to paste 15–25 posts as plain text.
Store raw post text, engagement metrics (likes, views if available), and timestamps.
Use voice-x.md / voice-linkedin.md template references (see "Template Skeleton" below) to produce v1 of the guide. Do NOT copy content from them — only the structure.
Analyse the scraped posts for:
excited to share, leverage, game-changing, thrilled, etc.). List 10–20.This is where voice-guide quality is made. Do NOT skip iterations.
Each iteration:
Stopping rule: continue until the user explicitly says "this is good" AND at least 5 iterations have completed. 5 is a floor, not a ceiling. If the user says "good enough" at iteration 2, push back: "Voice guides need at least 5 rounds to actually lock in. Can we do 3 more?"
~/.goose-skills/voice-guides/voice-<platform>.md).~/.goose-skills/config.json:
{
"voice_guides": {
"x": "<absolute path to voice-x.md>",
"linkedin": "<absolute path to voice-linkedin.md>"
}
}
Create the directory/file if missing. Merge with existing config if present (don't overwrite other keys)./create-x-content --brief \"...\" and it'll use this voice guide automatically."Every generated voice guide should have these top-level sections, in order:
# Voice Guide: <Platform> — <Handle or Name>
## Persona
## The "Meat" Principle
## Dos
## Don'ts
## Banned Phrases
## Hook Patterns
## CTA Guidelines
## Format Rules
## Tone Calibration
## Example Posts That Exemplify The Voice
Match the depth and specificity of a well-written voice guide — prose for persona, numbered lists for dos/don'ts, quoted examples with analysis. Aim for 120–250 lines.
~/.goose-skills/config.json is a lightweight cross-skill config. Schema:
{
"voice_guides": {
"x": "/absolute/path/to/voice-x.md",
"linkedin": "/absolute/path/to/voice-linkedin.md"
}
}
Sibling skills read this to discover voice guide paths. Always use absolute paths.
| Input | Required | Default |
|-------|----------|---------|
| --profile | Yes (one of X handle, LinkedIn URL, or both) | — |
| --platforms | No | x,linkedin if both profiles given, else matches supplied profiles |
| --posts-x | No | 50 |
| --posts-linkedin | No | 25 |
| --output | No | ~/.goose-skills/voice-guides |
| --iterations-min | No | 5 |
<output>/voice-x.md and/or <output>/voice-linkedin.md~/.goose-skills/config.json with voice guide pathsAPIFY_API_TOKEN) for scrapingWebFetch or read locally if the user has them) — not required to runcontent-media
Takes an existing screen recording or demo video and adds professional zoom/pan effects synchronized to the narration. Uses transcript-driven zoom targeting and Remotion for rendering. Optionally replaces audio with a soundtrack.
tools
Repurposes long-form video (podcasts, interviews, talks) into short-form vertical clips for Instagram Reels, TikTok, and YouTube Shorts. Handles transcription, moment selection, clip extraction, speaker-tracked reframing (16:9 to 9:16), and animated captions.
development
Creates talking head videos from any source material (docs, changelogs, blog posts, notes, transcripts). Produces multi-scene videos with avatar narration over screenshots/images using HeyGen v2 API. Supports Quick Shot and Full Producer modes.
tools
Generates Instagram-ready product reels from any e-commerce product page URL. Scrapes product images, classifies by type, generates AI-animated clips via Higgsfield API, creates text overlays with style presets, and composes a 15-20 second reel with music. Supports model-based and product-only reels.