Install any skill in seconds. Free to start, no credit card required.
Get Started Free →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.
.claude/skills/gooseworks-ai-generate-voice-guide/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-08 | ✗→✓ | ▲ Improved | 24% | 0% |
| case-04 | ✗→✓ | ▲ Improved | 10% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 36% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 110% | 0% |
| case-10 | ✗→✓ | ▲ Improved | 93% | 0% |
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-guideArgs mode:
/generate-voice-guide --profile @GooseworksAI --platforms x,linkedin --output ~/.goose-skills/voice-guidesAsk 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: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 VoiceMatch 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:
json{ "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 runOther measured skills in the registry, with their headline benchmark lift.