agentsclimarketplace

Create x voice skill

Skill simple-post/create-x-voice-skill/plugins/create-x-voice-skill/skills/create-x-voice-skill

Create a portable personal writing-voice skill from your X data archive

Install
npx -y skills add simple-post/create-x-voice-skill --skill create-x-voice-skill

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

2 things to look at

  • 29 days oldThe repository was created 29 days ago. New is not bad, but a brand new repository carrying a familiar-sounding name is the shape a typosquat arrives in, and there has been no time for anyone else to find a problem with it.
  • 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

What its author says it does

Copied from the file, not written here

Create or update a portable personal writing-voice Agent Skill from an X (Twitter) data archive or exported post files. Use when an AI agent needs to analyze authored X posts, replies, quote posts, or threads; derive evidence-based tone and style guidance; and package it for drafting, rewriting, or reviewing future social posts across Codex, Claude, or other Agent Skills-compatible systems.

SKILL.md

7.0 KB, ~1.4k tokens by cl100k_base, as published. Nobody here has run it

Create an X Voice Skill

Turn an X archive into a compact, portable personal Agent Skill. Keep the core vendor-neutral. Apply instructions labeled Codex only or Claude only only for that platform; all other agents should ignore them.

Protect the archive

  • Keep processing local to the available workspace and tools. Do not upload archive content, call external services with it, or browse using its private data.
  • Read only post-related JS or JSON files. Do not inspect or retain DMs, contacts, account-security data, locations, advertising data, media, or browsing history.
  • Prefer the bundled extractor over unpacking the full archive.
  • Exclude reposts by default because they are not evidence of the author's writing.
  • Store normalized corpus artifacts in a temporary work directory, never inside the resulting personal skill.
  • Tell the user where temporary artifacts remain and ask before deleting them.
  • Do not expose raw posts or private archive details in the final response.

Gather the minimum brief

Obtain the archive or post-data path. Ask whether the result should be:

  • A portable Agent Skills folder for reuse or sharing.
  • Installed for a named agent platform.
  • Both portable and installed for one or more platforms.

When the target is unspecified, create the portable folder and do not assume a vendor-specific install path.

After inspecting the corpus summary, resolve only choices that materially change the result:

  • Which era represents the current voice? Offer the most recent 24 months as the default.
  • Which modes should the skill support: standalone posts, replies, quote posts, threads, or cross-platform writing?
  • Which languages, topics, eras, or sensitive examples should be excluded?
  • What personal skill name should be used? Offer write-x-in-my-voice when no public name or handle should appear.

Do not ask the user to answer questions that the archive summary can resolve.

Extract a limited corpus

Run:

python3 <this-skill-root>/scripts/extract_x_posts.py \
  <archive-or-post-file> \
  --output <temporary-work-directory>/x-voice-analysis

Use --since YYYY-MM-DD, --until YYYY-MM-DD, or --post-types after the user chooses a narrower era or scope. Run --help for all options.

The extractor accepts an archive ZIP, an extracted archive directory, or a post JS/JSON file. The bundled scripts use only the Python 3.9+ standard library. It creates:

  • summary.json: corpus coverage, exclusions, length statistics, and surface-style rates.
  • posts.jsonl: normalized authored posts with original and analysis-safe text.
  • sample-recent.md: recent examples with handles and URLs normalized.
  • sample-stratified.md: examples distributed across eras and post modes.
  • thread-groups.md: authored posts sharing conversation IDs; treat these as candidate threads because some may be participation in another person's conversation.

If no post file is recognized, ask the user for the archive's post/tweet data file. Do not broaden the search to unrelated archive files.

Assess and synthesize

Read analysis-and-synthesis.md completely. Follow it to:

  1. Assess corpus size, dates, languages, mode balance, and likely contamination.
  2. Choose a primary voice era and use older posts only for stable-trait evidence unless the user requests otherwise.
  3. Analyze standalone posts, replies, quote posts, promotions, and threads separately.
  4. Separate expression patterns from topics, biography, beliefs, and engagement performance.
  5. Record evidence strength and exceptions instead of writing absolute rules.
  6. Curate a small, privacy-conscious example set.

Inspect posts.jsonl only to confirm or reject specific hypotheses. Do not load the whole file when summary and targeted searches are sufficient.

Create the portable personal skill

Read portable-skill-spec.md completely and make its portable folder the canonical source of truth.

The default result is:

<personal-skill>/
├── SKILL.md
└── references/
    ├── voice-profile.md
    └── curated-examples.md

Keep the portable SKILL.md free of vendor names, install paths, proprietary metadata, and vendor-specific invocation syntax.

If the target already exists, do not overwrite it wholesale. Read its current instructions, preserve explicit user-authored preferences and guardrails, update corpus-derived claims and examples, and report conflicts between old rules and new evidence.

Never copy the source archive, normalized corpus, bulk post history, or temporary analysis files into the personal skill.

Add platform adapters only when requested

Read platform-adapters.md and apply only the requested platform sections.

  • Codex only: Add Codex UI metadata, use Codex install paths and validators, and show $skill-name invocation syntax. Non-Codex agents must ignore these additions.
  • Claude only: Use the portable Agent Skills core directly, then package or install it using the requested Claude surface. Non-Claude agents must ignore Claude paths and upload instructions.
  • Other agents: Keep the portable folder canonical and create a thin, clearly labeled adapter only when the target does not support Agent Skills directly.

When supporting several platforms, do not create divergent copies of the voice rules.

Validate and calibrate

Run the platform-neutral validator first:

python3 <this-skill-root>/scripts/validate_voice_skill.py <personal-skill-directory>

Then run a target platform's native validator only when that adapter is requested.

Test the personal skill on at least:

  • One standalone post brief.
  • One reply or quote-post brief when supported by the corpus.
  • One thread brief when supported by the corpus.

Check every draft for factual and positional fidelity, correct voice mode, natural variation, no invented personal claims, and no distinctive six-word sequence copied from the examples unless explicitly requested.

Present several calibration drafts and invite concrete feedback. Convert repeated feedback into profile rules and revalidate. Describe the result as an evidence-based baseline, not a perfect identity replica.

Hand off

Report:

  • The portable skill name and location.
  • Any platform-specific adapters, clearly labeled by vendor.
  • The primary era, modes, languages, corpus size, and important exclusions.
  • Portable and platform-native validation status.
  • The temporary analysis location and its privacy implications.
  • A vendor-neutral usage example, plus vendor-specific invocation syntax only for requested targets.

What ships with it: 6 files

38.5 KB alongside SKILL.md, 2 of them executable

agents/

scripts/

Keep looking

Skills are one crate of 327,069. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.